【发布时间】: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