以太坊:使用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)
}

 

posted @ 2022-06-23 14:28  市井俗人  阅读(786)  评论(0编辑  收藏  举报