首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向另一个智能合同转发呼叫

向另一个智能合同转发呼叫
EN

Ethereum用户
提问于 2018-05-26 02:02:35
回答 1查看 423关注 0票数 0

我使用工厂方法模式创建了一个智能合同,如下所示:

代码语言:javascript
复制
contract MyContractFactory is Ownable {
    function create(...) onlyOwner public returns (MyContract) {
        return new MyContract(...);
    }
}

但是,我已经意识到,我还没有将myContract的所有权转移回MyContractFactory的所有者。因此,我目前无法在myContract中调用任何D4方法,尽管我是myContract的所有者。正确的版本应该是:

代码语言:javascript
复制
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,但也许有一个希望,以某种方式在组装?

EN

回答 1

Ethereum用户

发布于 2018-05-26 02:59:15

抱歉的。如果我正确理解你的问题,你希望工厂合同转发一条指令,例如changeOwner(me)给另一个合同。

如果工厂的设计就是这样的话,那就没问题了。不应该像您建议的那样欺骗已部署的合同来进行合作。

正如您所观察到的,您可以在考虑到这一要求的情况下修改工厂。另一种方法是包括一个专门构建的函数,以便稍后将所有权转移出去。类似于:

代码语言:javascript
复制
function giveAwayChild(address child, address newOwner) public onlyOwner ...

传递模式也可以用于在保留所有权的同时转发某些命令。

考虑生产环境中可能需要的控件类型是非常重要的,因为它们不能(很容易)在以后添加。我说“很容易”,因为可以考虑可升级的合同模式,而代价是增加了相当大的复杂性。同样,它必须在一开始就完成,因为代码不能在以后修改。

希望能帮上忙。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/49554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档