goethereum-地址检查
检查地址是否有效
package addrcheck
import (
"context"
"fmt"
"log"
"regexp"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
)
func CheckAddress(address string) {
re := regexp.MustCompile("^0x[0-9a-fA-F]{40}$")
fmt.Printf("is valid:%v\n", re.MatchString(address))
}
检查地址是合约地址还是账户地址(EOA)
package addrcheck
import (
"context"
"fmt"
"log"
"regexp"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
)
func IsContractAddr(address string) {
client, err := ethclient.Dial("https://mainnet.infura.io/v3/0b5c18e5bcd0407787cc7d319dbb056b")
if err != nil {
log.Fatal(err)
}
addr := common.HexToAddress(address)
bytecode, err := client.CodeAt(context.Background(), addr, nil)
if err != nil {
log.Fatal("get contract code error")
}
isContract := len(bytecode) > 0
fmt.Printf("%s is contract:%v\n", address, isContract)
}