測試網路上的 Truffle 部署說:錯誤:超過塊氣體限制
我正在嘗試部署一個範例契約(按照本指南),但我收到了一個錯誤,即 gas 不足。我稍微更改了數字,但無法修復它。我在堆棧交換中看到了這個問題,但在此處建議的答案中我有幾件事我不明白:
- 如下修改創世塊是什麼意思?
“您可以修改您的創世區塊,使其具有與主網路相同的氣體限制 0x2fefd8(3,141,592 氣體)。您還需要重置該測試鏈,因為您將更改創世區塊。”
- 在我在下面列印的 js 文件中,有兩個“gas”參數:一個 in
2_deploy_contracts.js
,另一個 intruffle.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 左右。