【问题标题】:Can't get address of child contract无法获取子合约地址
【发布时间】:2021-06-12 14:52:18
【问题描述】:

我正在尝试生成合约并将其地址存储在父合约中,但遇到了一个奇怪的问题:部署的合约不是子合约的实例,而是父合约之一。

这就是我正在做的事情:

pragma solidity ^0.6.0;

contract Parent{
  address[] public children;

  function creteChild (uint256[] memory distro)external payable{
    children.push(address(new Child(msg.sender,distro)));
  }
}

contract Child{
   address payable owner;
   uint256[] distribution;
 
   constructor(address payable admin,uint256[] memory distro)public payable{
    owner=admin;
    distribution=distro;
  }
}

部署 Parent 后,我​​可以调用 createChild 函数,但存储在 children 数组中的地址是另一个 Parent,而不是 Child。不知道为什么会这样。

【问题讨论】:

  • 无法重现您的问题。它返回 Remix 中新创建的 Child 地址 (imgur.com/a/y98vByD) - 查看顶部的父地址和底部的 children[0] 项之间的差异。为了使其正常工作,我唯一需要更改的是定义 uint256 distribution;uint256[] distribution; 中的逻辑错误,以便代码可以编译。
  • @PetrHejda 你真的在那个地址加载了合约吗?你怎么知道它是一个 Child 的实例?它是不同地址的事实并不表示类型。如果您加载它(使用 At Address),它将是另一个父级,这就是我的问题。

标签: ethereum solidity smartcontracts web3 remix


【解决方案1】:

如果您在同一个 .sol 文件中有多个合约,它会显示您在此处选择的任何类型:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-03
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 2022-06-13
    • 2016-03-14
    相关资源
    最近更新 更多