You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go调用ERC20合约报错execution reverted: ERC20: transfer from the zero address

问题原因分析
  • 核心问题:估算Gas时未指定调用方地址
    你调用client.EstimateGas时传入的ethereum.CallMsg结构体仅填写了To和Data字段,缺失From字段。以太坊节点处理未指定调用方的模拟请求时,会默认使用零地址0x0000000000000000000000000000000000000000作为msg.sender,而标准ERC20的transfer函数会首先校验调用方非零地址,因此直接触发了你遇到的报错。
  • 潜在问题:Infura节点地址未补全项目ID
    你初始化ethclient时使用的Infura Ropsten节点地址仅写到v3后缀,未拼接个人Infura项目ID,部分节点配置下也可能导致请求异常,核心问题修复后如果仍有报错可优先检查此处。
修复方案
  • 第一步:修改EstimateGas的传参,在ethereum.CallMsg中补充From字段,值为你通过私钥推导得到的fromAddress:
gasLimit, err := client.EstimateGas(context.Background(), ethereum.CallMsg{
    From: fromAddress, // 新增本行指定调用方地址
    To:   &tokenAddress,
    Data: data,
})
  • 第二步:补全Infura节点地址,将你的项目ID拼接在路径末尾:
client, err := ethclient.Dial("https://ropsten.infura.io/v3/替换为你的Infura项目ID")

内容的提问来源于stack exchange,提问作者Chikanboa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:54:05