abi生成go文件
创始人
2025-06-01 19:21:56
  1. abi文件生成需要安装solidity,参考上一篇文章

MacOS 安装 solidity

或者通过remix将智能合约进行编译,拷贝编译好的abi

  1. 下载以太坊源码并变异abigen工具包

git clone https://github.com/ethereum/go-ethereum.git
go install ./cmd/abigen

可以在GOBIN对应的目录下看到生成的abigen工具

  1. 通过abigen根据abi文件生成对应go文件

abigen --abi contract-nft-nbc.abi --pkg nbc --type nbcToken --out nbc.go

–abi表示abi文件名

–pkg表示生成文件的所属包

–type表示生成数据结构的名称,不填就默认是包名

–out表示生成的文件名

  1. 调用合约

本地是单元测试代码,比较乱,下面代码是从网上找的示例。

使用go调用智能合约

package mainimport ("context""fmt""github.com/ethereum/go-ethereum/accounts/abi/bind""github.com/ethereum/go-ethereum/accounts/keystore""github.com/ethereum/go-ethereum/common""github.com/ethereum/go-ethereum/ethclient""math/big""mydefi1/abi/cht"
)const (keyStorePath = `your keyStorePath`fromKeyStore = `your from keyStore`toAddress    = "0x477257735cCEF9C7d42856649c7149865D04eDeb"chainId      = 7851254chtAddress   = "0xb9bD7405797CfFBc7e57309444b4af89c39cA92c" //合约地址
)func main() {//服务器地址conn, err := ethclient.Dial("http://172.16.30.174:8545")if err != nil {fmt.Println("Dial err", err)return}defer conn.Close()//创建合约对象chtToken, err := cht.NewChttoken(common.HexToAddress(chtAddress), conn)if err != nil {fmt.Println("newChttoken error", err)}//调用查询方法//symbol, err := chtToken.Decimals(nil)//if err != nil {//    fmt.Println("invoke error", err)//}//fmt.Println(symbol)res1, err := chtToken.BalanceOf(&bind.CallOpts{Pending:     false,From:        common.Address{},BlockNumber: nil,Context:     nil,}, common.HexToAddress(toAddress))if err != nil {fmt.Println("BalanceOf error", err)}fmt.Println(res1)//调用其他方法,需要组装from//解锁对应账户fromKey, err := keystore.DecryptKey([]byte(fromKeyStore), "abc123")if err != nil {fmt.Println(err)}auth, err := bind.NewKeyedTransactorWithChainID(fromKey.PrivateKey, new(big.Int).SetInt64(chainId))if err != nil {fmt.Println(err)}//fromPrivateKey := fromKey.PrivateKey//fromPublicKey := fromPrivateKey.PublicKey//fromAddr := crypto.PubkeyToAddress(fromPublicKey)tx, err := chtToken.Transfer(&bind.TransactOpts{From: auth.From,//Nonce:     nil,Signer: auth.Signer,//Value:     nil,//GasPrice:  nil,//GasFeeCap: nil,//GasTipCap: nil,//GasLimit:  0,//Context:   nil,//NoSend:    false,}, common.HexToAddress(toAddress), new(big.Int).SetInt64(1e18))if err != nil {fmt.Println(err)}fmt.Println(tx.Hash())//等待挖矿完成receipt, err := bind.WaitMined(context.Background(), conn, tx)if err != nil {fmt.Println("WaitMined error", err)}fmt.Println(receipt.BlockNumber)//转账之后查询余额res2, err := chtToken.BalanceOf(&bind.CallOpts{Pending:     false,From:        common.Address{},BlockNumber: nil,Context:     nil,}, common.HexToAddress(toAddress))if err != nil {fmt.Println("BalanceOf error", err)}fmt.Println(res2)
}

相关内容

热门资讯

最新或2023(历届)08记事... 08记事 2 要说08年发生的事情太多了,其中让我感动的事情有好几件,就这几件事令我感慨良多难以忘怀...
最新或2023(历届)爱护树木... 一年一度的植树节即将临近,我们开始纷纷保护树林和树木。一大半的人认为只有在植树节才要保护树林和树木,...
最新或2023(历届)承载着梦... 夜晚的星空承载我太多的梦想。盈盈星火,繁星点点,那是一个承载着梦想的校园。有这样一所学校:它的楼陈旧...
最新或2023(历届)我是一个... 男孩子一般都很刚强,俗话说:男儿有泪不轻弹,而我却是男同胞中的“另类”,不但爱哭,而且还内向。我上小...