我使用工厂方法模式创建了一个智能合同,如下所示:
contract MyContractFactory is Ownable {
function create(...) onlyOwner public returns (MyContract) {
return new MyContract(...);
}
}但是,我已经意识到,我还没有将myContract的所有权转移回MyContractFactory的所有者。因此,我目前无法在myContract中调用任何D4方法,尽管我是myContract的所有者。正确的版本应该是:
contract MyContractFactory is Ownable {
function create(...) onlyOwner public returns (MyContract) {
MyContract myContract = new MyContract(...);
myContract.transferOwnership(msg.sender);
return myContract;
}
}My问题:如果我只是onlyOwner实例的所有者( MyContractFactory实例的所有者),那么如何执行MyContract实例中的D7方法?也就是说,以某种方式将执行从一个聪明的合同转发到另一个?
它可能不可能直接在Solidty,但也许有一个希望,以某种方式在组装?
发布于 2018-05-26 02:59:15
抱歉的。如果我正确理解你的问题,你希望工厂合同转发一条指令,例如changeOwner(me)给另一个合同。
如果工厂的设计就是这样的话,那就没问题了。不应该像您建议的那样欺骗已部署的合同来进行合作。
正如您所观察到的,您可以在考虑到这一要求的情况下修改工厂。另一种方法是包括一个专门构建的函数,以便稍后将所有权转移出去。类似于:
function giveAwayChild(address child, address newOwner) public onlyOwner ...传递模式也可以用于在保留所有权的同时转发某些命令。
考虑生产环境中可能需要的控件类型是非常重要的,因为它们不能(很容易)在以后添加。我说“很容易”,因为可以考虑可升级的合同模式,而代价是增加了相当大的复杂性。同样,它必须在一开始就完成,因为代码不能在以后修改。
希望能帮上忙。
https://ethereum.stackexchange.com/questions/49554
复制相似问题