Solidity
意外的行為。添加新的 SubContract() 時大小會大幅增加
我的契約類似於:
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 實例。
如果只傳遞了預建構的引用,編譯器就足夠智能,只生成最少的程式碼來呼叫被引用合約的公共方法。