Contract-Development

測試網路上的 Truffle 部署說:錯誤:超過塊氣體限制

  • October 2, 2018

我正在嘗試部署一個範例契約(按照本指南),但我收到了一個錯誤,即 gas 不足。我稍微更改了數字,但無法修復它。我在堆棧交換中看到了這個問題,但在此處建議的答案中我有幾件事我不明白:

  • 如下修改創世塊是什麼意思?

“您可以修改您的創世區塊,使其具有與主網路相同的氣體限制 0x2fefd8(3,141,592 氣體)。您還需要重置該測試鏈,因為您將更改創世區塊。”

  • 在我在下面列印的 js 文件中,有兩個“gas”參數:一個 in 2_deploy_contracts.js,另一個 in truffle.js。它們各自的含義(它們如何影響合約的部署)?是否還有其他與燃氣量有關的地方?

我的錯誤和文件內容:

~/voting$ truffle deploy
Using network 'development'.

Running migration: 1_initial_migration.js
 Deploying Migrations...
Error encountered, bailing. Network state unknown. Review successful transactions manually.
Error: exceeds block gas limit
   at Object.InvalidResponse (/usr/lib/node_modules/truffle/build/cli.bundled.js:37022:16)
   at /usr/lib/node_modules/truffle/build/cli.bundled.js:209743:36
   at XMLHttpRequest.request.onreadystatechange (/usr/lib/node_modules/truffle/build/cli.bundled.js:208522:13)
   at XMLHttpRequestEventTarget.dispatchEvent (/usr/lib/node_modules/truffle/build/cli.bundled.js:210395:18)
   at XMLHttpRequest._setReadyState (/usr/lib/node_modules/truffle/build/cli.bundled.js:210685:12)
   at XMLHttpRequest._onHttpResponseEnd (/usr/lib/node_modules/truffle/build/cli.bundled.js:210840:12)
   at IncomingMessage.<anonymous> (/usr/lib/node_modules/truffle/build/cli.bundled.js:210800:24)
   at emitNone (events.js:91:20)
   at IncomingMessage.emit (events.js:185:7)
   at endReadableNT (_stream_readable.js:974:12)

遷移/1_initial_migration.js

var Migrations = artifacts.require("./Migrations.sol");
module.exports = function(deployer) {
 deployer.deploy(Migrations);
};

遷移/2_deploy_contracts.js

var Voting = artifacts.require("./Voting.sol");
module.exports = function(deployer) {
 deployer.deploy(Voting, ['Rama', 'Nick', 'Jose'], {gas: 5000000});
};

truffle.js 需要(‘babel-register’)

module.exports = {
 networks: {
   development: {
     host: 'localhost',
     port: 8545,
     network_id: '*', // Match any network id
     // gas:400000000000,
     gas:1000258612000000000,
     from: "0xf212bb926f7a831ff745e4236fc704a9947de77c"
   }
 }
}

在 truffle.js 中,添加

,gas: 4600000

不要忘記小“,”,所以它看起來像

 networks: {
   development: {
     host: "localhost",
     port: 8545,
     network_id: "*",
     gas: 4600000
   }

要麼你的合約太大,要麼你的 truffle 配置很糟糕。

gas:1000258612000000000

{gas: 5000000}

這些是無效的氣體值。最大值約為 4m,因此不可能是有效值。

回到你註釋掉的那個,如果你仍然看到錯誤,很可能你的合約太大了,應該被分解成庫。檢查的一個好方法是查看“創造”氣體成本solc --gas path/to/contract.sol

如下修改創世塊是什麼意思?

僅當您正在執行測試網路時,請忽略它,除非您的項目僅存在於私有鏈上。

在下面列印的 js 文件中,有兩個“gas”參數:一個在 2_deploy_contracts.js 中,另一個在 truffle.js 中。它們各自的含義(它們如何影響合約的部署)?是否還有其他與燃氣量有關的地方?

第一個deployer.deploy是您允許交易的最大氣體值。這也超過了 4m 的塊限制,所以也修復它。

第二個,看起來像是對網路的描述(我不完全確定松露)。這告訴 truffle 網路的最大 gas 值是多少。不知道在哪裡可以找到最新的限制,但我一直在以 4,000,000 的限制執行我的測試。根據 ethstats.net,現在可能達到 6m 左右。

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