首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何部署复杂的应用程序拆分成多个合同

如何部署复杂的应用程序拆分成多个合同
EN

Ethereum用户
提问于 2018-08-23 08:55:06
回答 2查看 372关注 0票数 1

如果您开发了一个复杂的dApp,并且由于部署气体限制而不得不将其拆分为单独的合同,那么部署和连接单个合同的干净流程/模式是什么?

EN

回答 2

Ethereum用户

发布于 2018-08-23 09:44:51

好的,这是我怎么做的。

Relay.sol

代码语言:javascript
复制
contract Relay {

    IOtherContract private otherContractInterface;

    modifier onlyOwner() {
      require(msg.sender == owner, "Sender is not owner");
      _;
    }

    function initialize(address _otherContractAddress) external onlyOwner {

        otherContractInterface = IOtherContract(_otherContractAddress);
    }
}

OtherContract.sol

代码语言:javascript
复制
contract OtherContract {


  address relay;

  modifier onlyRelay() {
      require(msg.sender == relay, "Sender is not relay.");
      _;
  }

  function setRelay(address _relay) external onlyOwner {
      relay = _relay;
  }
}

然后从所有者帐户调用OtherContract.setRelay(relayAddress),或将其包装为initialize函数,并在设置newContract地址后立即调用setRelay

编辑:在从其他合同访问合同时也使用接口/抽象类,这将节省您的精力,并允许将更多的代码放入单个合同中。

票数 1
EN

Ethereum用户

发布于 2018-08-23 09:42:06

如果您将一个契约导入另一个契约,则字节码将被附加到最后。如果您导入多个合同,这会导致非常大的文件/字节码。我所做的就是为每个合同实现一个接口,然后导入它。然后,我将相应契约的地址硬编码到实现它们的契约中。这确保了没有办法篡改设计。

例如:(伪码)

代码语言:javascript
复制
mycontract1.sol
implements Imycontract2.sol
{

  Imycontract(address).callFunction()
}

其中,Imycontract2.sol只是一个虚拟模型,其函数的空实现是

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

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

复制
相关文章

相似问题

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