调用erc20合约的转账方法

solidity编译器的版本选择

1
2
3
4
5
6
7
8
# 选择solc的指定版本
solc-select use 0.8.0
# 如果没有制定版本先安装
solc-select install 0.8.0

# 生成制定合约的abi
solc --abi GZToken.sol

使用go-ethereum的abigen工具生成go源文件

1
2
3
cd /Users/apple/code/open-source/blockchain/ethereum/go-ethereum/cmd/abigen
# 制定bin和abi文件生成go文件
go run main.go --abi=WETH.abi --bin=WETH.bin --pkg=contract --out=WETH.go

报错记录

replacement transaction underpriced

使用相同的nonce再次发起交易时,gasPrice必须大于上次交易gasPrice10%以上。

交易一直是pending状态,无法确认

invalid sender

在调用json rpc接口时,返回以上的错误,原因是因为chainId与实际的chainId不一致。

交易发送出去但是交易状态是失败,点击详情提示:a status code indicating if the top-level call succeeded or failed

其中一个原因可能是abi错误,然后生成的methodId不正确导致,可以在应用页面调用一次这个方法,确认真实的方法和参数。

这是个坑人的问题,合约源码与真实的链上部署的不一致,如solo.top项目的bank合约,deposit提供的源码与页面调用的参数就不一致。

提供的智能合约代码如下:

image-20210615181314870

从页面调用的方法如下:

image-20210615181223485