Solidity

契約程式碼大小(以及如何解決它?)

  • January 22, 2020

我正在編寫一些相當重要的 Solidity 智能合約,並且相信我正在達到 EIP170 24k 字節碼大小限制。我已經

(a) 將我的程式碼分解到庫中

(b) 今天把我的契約分成兩部分。

似乎沒有什麼可以幫助低於限制。哎呀,分成兩個契約 - 增加 - 嚴重 - 兩個結果契約之一的程式碼 - 比原來的多合一契約大得多。

是否有工具可以幫助找出程式碼膨脹的來源?其他拆分方法以減小尺寸?

字節碼膨脹很可能來自程式碼中的新語句。它們通常是麻煩製造者,因為它們包含要實例化的合約程式碼。您可以創建可以在前面部署的契約工廠。通過這種方式,您可以減少主合約的字節碼大小。

例如

contract X {}

contract XFactory {
   function createX() returns (X) {
       return new X();
   }
}

contract Main {
   XFactory xFactory;
   ...
   Main(XFactory _xFactory) {
       xFactory = _xFactory;
   }
   ...
   function someMethod() {
       X x = xFactory.create();
   }
   ...
}

通過實施透明合約標準可以繞過最大合約大小限制:https ://github.com/ethereum/EIPs/issues/1538

引用自:https://ethereum.stackexchange.com/questions/41501