You need to enable JavaScript to run this app. Rinkeby测试网执行ERC20 transfer函数原生交易后收款方余额无变化
优惠活动
大模型
产品
解决方案
定价
更多

Rinkeby测试网执行ERC20 transfer函数原生交易后收款方余额无变化

问题根因
  • 核心错误为构造原生交易时to字段赋值错误:调用ERC20合约的transfer方法属于合约交互操作,交易的接收方必须是ERC20代币合约地址,而非代币收款地址。你当前代码中txData.to = receiver,相当于把包含transfer方法调用的交易数据发送给了普通用户收款地址,普通外部账户不会解析执行合约方法的编码数据,因此仅完成了一笔0 ETH的转账,没有触发任何代币余额变更逻辑。
  • 辅助验证依据:返回的交易回执里logs字段为空数组,符合上述推断——正常ERC20转账成功会触发Transfer事件,回执的logs中会包含对应事件数据。
修复方案
  1. 核心修改:调整txData的to字段值为你的ERC20代币合约地址config.contractAddress,修改后的txData结构如下:
const txData = {
      nonce,
      gasLimit,
      gasPrice,
      value,
      data, // 已经是正确的transfer方法编码,无需修改
      from: config.deployerAddress,
      to: config.contractAddress // 此处替换为代币合约地址
     };
  1. 可选优化:你当前代码中获取gasPrice时未加await,web3.eth.gasPrice是异步方法,建议修改为如下写法避免取到空值:
const gasPrice = web3.utils.toHex(await web3.eth.gasPrice || 2 * 1e9);
  1. 效果验证:修改后重新发起交易,交易成功后回执的logs字段会包含对应Transfer事件,此时查询收款方代币余额即可正常更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 12:27:02