Gas-Limit
合約超過區塊氣體限制
我有一個相當複雜的合約,它繼承自一堆其他合約,例如 OpenZeppelin ERC20 庫和 Oraclize 庫。
當我將它部署到 Remix 或 Mist 的測試網上時,它說所需的 gas 為 630 萬,超過了限制。有沒有辦法可以零碎地部署它,或者我只需要讓契約不那麼複雜?
如果我不使用 Oraclize,所需的 gas 將下降到 400 萬,我可以成功部署聯繫人。
這是一個教程和一般方法:
https://dappsforbeginners.wordpress.com/tutorials/interactions-between-contracts/
您將契約拆分為多個契約,並且可以創建對“父”契約的引用,例如:
contract referencedContract { function fn() {} } contract referencingContract{ // create reference to contract referencedContract m = referencedContract(referencedContractAddress); // call referenced contract method m.fn(); }
您有時可以使用庫將程式碼分成多個契約。從理論上講,您可以將任何規模的合約劃分為具有足夠工作量的庫。
您在契約中使用了任何結構嗎?您可以通過庫和using for聲明使它們更易於使用並消耗更少的空間。
即使庫不能很好地工作,有時也可以將一個 dapp 拆分為幾個協同工作的合約。(例如,ENS 系統以這種方式使用多個合約,更不用說使用者添加的所有契約和解析器了。)