Solidity

編譯合約 Solidity 瀏覽器時超出區塊氣體限制

  • May 2, 2018

使用 Solidity 瀏覽器 ( https://ethereum.github.io/browser-solidity/ ) 在 testnet 上使用注入的 web3 和 metamask 帳戶探勘合約,會引發此錯誤:

callback contain no result Gas required exceeds limit: 3000000

該合約(原始碼 => https://gist.github.com/computerphysicslab/f362383f9d3fed26becba48b934bbcfc)預計部署成本約為 600 萬天然氣(根據 JS VM 環境)。然而,當試圖增加氣體限制時,會拋出這些錯誤:

callback contain no result Gas required exceeds limit: 4000000
callback contain no result Gas required exceeds block gas limit: 5000000
callback contain no result Gas required exceeds block gas limit: 6000000
callback contain no result Gas required exceeds block gas limit: 10000000
...

因此,似乎無法探勘該合約,因為區塊氣體限制約為 500 萬氣體。是否有可能以某種方式克服這個限制?

參考:

Solidity 瀏覽器編譯器崩潰

為什麼當程式碼太長時基於瀏覽器的solidity編譯器會崩潰?

部署接近塊氣體限制合約時超出氣體塊限制錯誤

除非礦工增加區塊氣體限制,否則您唯一的選擇是將合約拆分為多個合約。

所以每個合約都有自己的地址,你可以在它們之間進行呼叫。例如,ICO 眾籌可以分為:

  • Crowdsale:管理眾籌、代幣的分配方式、獎勵、開啟、關閉
  • Token:實現ERC20,可以創建token,批准轉賬
  • 錢包:管理眾籌期間收到的資金

由於每個契約的範圍有限,因此拆分也有助於安全審計。

每個合約都可以獨立部署,通過配置方法完成設置。

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