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 正在做的那样