Solidity

意外的行為。添加新的 SubContract() 時大小會大幅增加

  • April 28, 2021

我的契約類似於:

contract Contract01 {
 SubContract _refContract;
 ...
  constructor() public {
     refContract = new SubContract();
  }

  function setSubContractRef(SubContract refContract) {
     _refContract = refContract;
  }
}

當我添加新的 SubContract() 時,字節碼增加是“巨大的”,因為看起來 SubContract 的字節碼也增加了。這會導致很容易達到最大合約大小。

我發現可以在不同的 TX 中創建 SubContract 並在 setSubContractRef 中傳遞對 Contract01 的引用,但我想知道是否有更簡單的方法涉及更少的步驟。

(兩年後為那些通過Google航空公司抵達這裡的人回答我自己):

在這種情況下, “new”關鍵字是罪魁禍首

每次使用“new”時,都會包含引用的智能合約的完整程式碼,以便允許在執行時建構新的 SubContract 實例。

如果只傳遞了預建構的引用,編譯器就足夠智能,只生成最少的程式碼來呼叫被引用合約的公共方法。

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