以太坊:使用go-ethereum进行合约交互之基于sol生成go代码
一、工具安装
#安装solc npm install -g solc #安装solcjs npm install -g solc-cli
#安装abigen
go get github.com/ethereum/go-ethereum
cd $GOPATH/src/github.com/ethereum/go-ethereum/
make
make devtools
二、生成abi文件
#生成合约 abi 文件
solcjs yourContract.sol -o filedir --abi
问题一:版本不匹配
如果遇到报错:ParserError: Source file requires different compiler version (current compiler is 0.8.15+commit.e14f2714.Emscripten.clang) - note that nightly builds are considered to be strictly less than the released version
则是内置编译器版本不匹配,我们可以重新获取solc,并指定版本
#查看编译器版本 solcjs cmd --version #获取指定编译器版本 npm install -g solc@0.6.12
问题二:合约依赖
如果该合约import了其他合约,则会报错:ParserError: Source "./PToken.sol" not found: File import callback not supported
只需要用上--base-path这个参数就可以了
#指定base-path
solcjs --base-path ./ ./token/PEther.sol --abi -o build
三、生成go文件
#使用abigen生成文件
abigen -abi pether.abi -type PEtherAbi -pkg abi -out pether.go
完成,后面生成客户端调用即可。
rpc := "https://rpc.ankr.com/eth" connect, err := ethclient.Dial(rpc) if err != nil { panic("failed to connect to the rpc:" + rpc) } address := "0x1234567890000000000000000000000000000000" _pEtherAbi, err := abi.NewPEtherAbi(common.HexToAddress(address), connect) if err != nil { panic("failed to new client with address :" + _address) }