Remix IDE 不显示子合同

Posted

技术标签:

【中文标题】Remix IDE 不显示子合同【英文标题】:Remix IDE doesn't show up child Contracts 【发布时间】:2021-08-22 02:43:18 【问题描述】:

我正在尝试通过调用我通过混音 UI 托管的合同中的函数来与我托管的子合同进行交互。

代码:

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.22 <0.9.0;


contract TokenCreator 
    
    address public owner;
    address public this_address;
    
    constructor()
        owner = msg.sender;
        this_address = address(this);
    
    
    function createToken(string memory name) public returns ( bool success, OwnedToken tokenAddress)
        return ( true, new OwnedToken(name));
    

    function changeName(OwnedToken tokenAddress, string memory name) public 
        tokenAddress.changeName(name);
    


    function isTokenTransferOK(address currentOwner, address newOwner) public pure returns (bool ok)  
        return keccak256(abi.encodePacked(currentOwner, newOwner))[0] == 0x7f;
    
    


contract OwnedToken 
    address public owner;
    string public name;
    TokenCreator public creator;

    constructor(string memory _name)     
        owner = msg.sender;
        creator = TokenCreator(msg.sender);
        name = _name;
    

    function changeName(string memory newName) public 
        if (msg.sender == address(creator))
            name = newName;
    

    function transfer(address newOwner) public 
        if (msg.sender != owner) return;
        if (creator.isTokenTransferOK(owner, newOwner))
            owner = newOwner;
    

要创建的事务日志 - TokenCreator

 status true Transaction mined and execution succeed
 transaction hash   0xe46bd6f11a844ac57632e8ef41e39ae482e71e62d3f4035d7f0b1c52698afd0a Copy value to clipboard
 contract address   0x7EF2e0048f5bAeDe046f6BF797943daF4ED8CB47 Copy value to clipboard
 from   0x5B38Da6a701c568545dCfcB03FcB875f56beddC4 Copy value to clipboard
 to TokenCreator.(constructor) Copy value to clipboard
 gas    3000000 gas Copy value to clipboard
 transaction cost   1461412 gas Copy value to clipboard
 execution cost 1082212 gas Copy value to clipboard
 hash   0xe46bd6f11a844ac57632e8ef41e39ae482e71e62d3f4035d7f0b1c52698afd0a Copy value to clipboard
 input  0x608...40033 Copy value to clipboard
 decoded input   Copy value to clipboard
 decoded output  - Copy value to clipboard
 logs   [] Copy value to clipboard Copy value to clipboard
 value  0 wei 

从 TokenCreator 调用 createToken 方法的事务日志

status  true Transaction mined and execution succeed
 transaction hash   0xec6f593ab173ce26e4457f37db4153ee59c571cff921583de8d113ae72fa9eb7 Copy value to clipboard
 from   0x5B38Da6a701c568545dCfcB03FcB875f56beddC4 Copy value to clipboard
 to TokenCreator.createToken(string) 0x7EF2e0048f5bAeDe046f6BF797943daF4ED8CB47 Copy value to clipboard
 gas    3000000 gas Copy value to clipboard
 transaction cost   559834 gas Copy value to clipboard
 execution cost 537794 gas Copy value to clipboard
 hash   0xec6f593ab173ce26e4457f37db4153ee59c571cff921583de8d113ae72fa9eb7 Copy value to clipboard
 input  0x455...00000 Copy value to clipboard
 decoded input   "string name": "test"  Copy value to clipboard
 decoded output  "0": "bool: success true", "1": "address: tokenAddress 0xD9eC9E840Bb5Df076DBbb488d01485058f421e58"  Copy value to clipboard
 logs   [] Copy value to clipboard Copy value to clipboard
 value  0 wei 

当我单击该方法时,它甚至显示托管了 2 个合同,但它没有显示在 UI 中,而且我在日志中找不到任何让我访问子合同的内容。


很抱歉,如果不是很清晰并产生了很多视觉污染。有问题的代码是 Solidity 官方网站上的第一个代码: https://docs.soliditylang.org/en/v0.8.4/contracts.html

我们或多或少都知道如何通过 Remix IDE 接口托管合约,但在我的具体情况下,代码有一个生成另一个智能合约的函数,并且它没有显示在托管的合约列表中重新混合 IDE 界面。还有什么问题?

当我调用 TokenCreator 合约的“CreateToken”方法时,它返回生成合约的地址需要有您选择的合同的选项,才能获得合同的“ABI”。

【问题讨论】:

【参考方案1】:

我知道这个问题现在可以自己回答(通过其他用户的编辑...?),但乍一看这并不明显。由于我一直在寻找解决方案,但我自己也遇到了这个问题,所以我想我会在答案部分在这里回答,不管是为了帮助别人。

要将子合同拉到 Remix IDE 的“已部署合同”部分:

    首先获取子合约的地址(这里是CreateToken的返回)。 在左侧的“合同”下拉菜单中选择孩子对应的合同类型(注意:这是很多人错过的步骤!否则,您最终会出现错误的界面。) 将从 1) 中检索到的地址粘贴到“地址”字段中。 按“地址”框,根据需要将合约召唤到“已部署的合约”部分!

【讨论】:

以上是关于Remix IDE 不显示子合同的主要内容,如果未能解决你的问题,请参考以下文章

如何使用前端部署智能合约。就像 REMIX IDE 正在做的那样

如何在 REMIX(Solidity IDE)中从 web3 调用带有参数的构造函数

Remix Ethereum 合约去哪儿了?

Remix IDE - 部署智能合约时出现功能问题

Remix-IDE

尝试记录 Remix 合同时旧版本的 Web3 出错