Truffle 合約部署超過區塊氣體限製或氣體不足
當我嘗試使用 truffle 開發控制台部署契約時,我遇到了同樣的問題。合約不是特別大,但在呼叫某個函式時會啟動另外兩個合約。(因為它不向公眾開放,所以很抱歉我不能在這裡發布契約)
當我沒有在我的2_deploy_contract.js文件中指定使用的氣體時,我遇到了錯誤“氣體不足” ,但是當我逐漸增加氣體時,我得到了錯誤“超過塊氣體限制”。
然後我嘗試在truffle.js配置文件中指定“gas”參數。問題是無論我將它設置多高(例如 10000000000000),它仍然給我同樣的錯誤: “Exceeds block gas limit”。
networks: { development: { host: "127.0.0.1", from: "0x627306090abab3a6e1400e9345bc60c78a8bef57", port: 9545, network_id: "*", // Match any network id gas: 18900000000000000000000000000 }
}
其中最有趣的部分是它在 Remix 上執行得非常好,但在 truffle 開發控制台上卻不行。
答案(我自己找到了答案):
truffle.js 中的 gas 參數是您願意為部署支付的最大金額。這不是 **鏈的塊氣體限制!**所以不管有多大,如果塊氣體限制小於你附加到交易的氣體,你總是會得到同樣的錯誤“超過塊氣體限制”。這也解釋了為什麼它在 Remix 中而不是在我的本地連鎖店中工作。
現在的問題是如何更改松露開發本地鏈的預設區塊氣體限制?我沒有看到 genesis.json 文件。硬編碼的區塊氣體限制似乎在 6700000 左右。
我假設解決方案如下: 1. 更改硬編碼松露核心設置以允許更高的塊氣體限制。2. 分解合約,讓它更輕。3. 將 truffle 連接到您自己設置的本地網路或實時測試網,這可能會或可能不會允許契約要求的 gas。因此,始終首先使用主網氣體要求進行測試。
非常感謝任何進一步的幫助!
最混合的是發展和發展。當您在 truffle.js 中為開發設置參數時,您正在為松露控制台設置,當您為開發設置時,您正在為****松露開發設置它
所以你應該把它添加到你的 truffle.js 和 blocklimit 就可以了。
develop: { host: “localhost”, port: 7546, gas: 50000000, gasLimit: 8000000, network_id: “*”, // 匹配任何網路 id },