Solidity
‘錯誤:基本費用超過 gas 限制’ 創建新合約實例時(使用 Truffle、Web3Js 和 testrpc)
app.js
我的松露項目文件中有以下程式碼。從'web3'導入{預設為Web3}; 從 'truffle-contract' 導入 { default as contract } 從'../../build/contracts/Conferrence.json'導入conferrence_artifacts var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); // 會議是我們可用的抽象,我們將通過下面的程式碼使用它。 var Conferrence = 契約(conferrence_artifacts); 會議.setProvider(web3.currentProvider); var account = web3.eth.accounts; var 帳戶 = 帳戶 [0]; Conferrence.new({from: account}).then(function(instance){ 控制台.log(實例); });
如文件中提供的松露添加新契約
*注意:在呼叫 Conferrence.new({from: account})… **{from: account}*因為我收到“無效地址錯誤”
控制台錯誤日誌
錯誤:錯誤:基本費用超過 gas 限制 在 runCall (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\lib\runTx.js:111:17) 在 C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:3686:9 補充時(C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:881:17) 在 iterateeCallback (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:866:17) 在 C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:843:16 在 C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:3691:13 在應用時(C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:21:25) 在 C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:56:12 在 Object.async.eachSeries (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\async-eventemitter\node_modules\async\lib\async.js:130:20) 在 VM.AsyncEventEmitter.emit (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\async-eventemitter\lib\AsyncEventEmitter.js:42:9) 在 runCall (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\lib\runTx.js:111:17) 在 C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:3686:9 補充時(C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:881:17) 在 iterateeCallback (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:866:17) 在 C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:843:16 在 C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:3691:13 在應用時(C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:21:25) 在 C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:56:12 在 Object.async.eachSeries (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\async-eventemitter\node_modules\async\lib\async.js:130:20) 在 VM.AsyncEventEmitter.emit (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\async-eventemitter\lib\AsyncEventEmitter.js:42:9) 在 Object.InvalidResponse (http://localhost:8080/app.js:8374:16) 在 http://localhost:8080/app.js:32995:36 在 XMLHttpRequest.request.onreadystatechange (http://localhost:8080/app.js:35321:13)
但這在 truffle 控制台中執行時非常有效 -
松露(開發)>Conferrence.new().then(function(ins){console.log(ins.address)}) 0x7e796caed4202ae58bb58afc214f281969f995b2
NVM 關於“會議”錯字:p
由於您的範常式式碼使用truffle -contract您可以像這樣為您的交易和契約部署指定預設值(會議是您的契約的名稱。我使用了松露預設值):
Conferrence.defaults({ from: account, gas: 4712388, gasPrice: 100000000000 })
我遇到了同樣的問題(
base fee exceeds gas limit
),並且瀏覽器可靠性最終給了我一個Gas requirement of function xyz.sol:Xyz.doSomething(address) unknown or not constant.
指定預設值的幫助。
在 Truffle 控制台中執行程式碼時,它將確保已設置某些預設值:
對於每個網路,如果未指定,交易選項將預設為以下值:
- 氣體:用於部署的氣體限制。預設值為 4712388。
- gasPrice:用於部署的 Gas 價格。預設值為 100000000000(100 香農)。
- from:來自遷移期間使用的地址。預設為您的乙太坊客戶端提供的第一個可用帳戶。
(來自http://truffleframework.com/docs/advanced/configuration#networks)
但是當您在不同的環境中執行時,例如在瀏覽器中,這些預設值將不可用,您必須為每個事務指定它們。在您的情況下,這不僅意味著提供
from
,而且還意味著gas
.