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

部署ERC20相关合约后交易日志未显示ERC20Token合约地址问题咨询

问题解决方案

问题1:日志无mint操作对应合约地址的解决方法

  • 根本原因:Solidity的链上日志仅会记录显式触发的Event事件,你当前编写的ERC20Token合约的mint方法仅更新了balances状态,没有定义和触发事件,因此不会在交易日志中生成相关记录,自然无法查询到对应的合约地址。
  • 修复方案:在ERC20Token合约中新增Mint事件,每次调用mint方法时触发事件,将合约地址、mint操作发起地址、mint数量等参数写入日志。

问题2:获取ERC20Token合约部署地址的方法

你编写的MyContract合约已经将token变量声明为public类型,Solidity会自动为public状态变量生成同名的外部调用方法,直接调用MyContract实例的token()方法,即可获取到构造函数传入的ERC20Token合约部署地址,无需额外编写逻辑。

问题3:交易日志可查询ERC20Token地址的修复代码

你可以参考下方修改后的完整合约代码,新增事件定义和触发逻辑后即可满足需求:

pragma solidity >=0.7.0 <0.9.0;

contract ERC20Token{
    string public name;
    mapping (address => uint256) public balances;
    // 新增Mint事件,记录当前合约地址、mint接收地址、mint数量
    event Mint(address indexed tokenContract, address indexed to, uint256 amount);
    
    function mint() public {
        balances[tx.origin] ++;
        // 触发事件,写入链上日志
        emit Mint(address(this), tx.origin, 1);
    }
}

contract MyContract {
    address payable wallet;
    address public token;
    
    constructor(address payable _wallet, address _token) public {
        wallet=_wallet;
        token=_token;
    }
    fallback()external payable{
        buyTonken();
    }
      function buyTonken() public payable {
          ERC20Token _token = ERC20Token(address(token));
          _token.mint();
          wallet.transfer(msg.value);
  }
  
}
  • 代码修改说明:新增Mint事件后,每次调用mint方法都会将当前ERC20Token的合约地址作为参数写入日志,后续查询对应交易的日志即可直接提取到该地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:15:02