Solidity

‘錯誤:基本費用超過 gas 限制’ 創建新合約實例時(使用 Truffle、Web3Js 和 testrpc)

  • January 11, 2022

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.

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