'Fehler: Grundgebühr überschreitet Gaslimit' Beim Erstellen einer neuen Vertragsinstanz (mit Truffle, Web3Js und testrpc)

Ich habe den folgenden Code in app.jsder Datei meines Trüffelprojekts.

importiere {standardmäßig als Web3} aus „web3“;
Importiere {Standard als Vertrag} aus 'Trüffelvertrag'
conferrence_artifacts aus „../../build/contracts/Conferrence.json“ importieren

var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

// Konferenz ist unsere übliche Abstraktion, die wir im folgenden Code verwenden werden.
var Konferenz = Vertrag (Konferenzartefakte);
Konferenz.setProvider(web3.currentProvider);

var accounts = web3.eth.accounts;
var Konto = Konten[0];
Conferrence.new({from: account}).then(function(instance){
   console.log (Instanz);
});

Wie in der Truffle-Dokumentation vorgesehen, neuen Vertrag hinzufügen

Hinweis: Im Aufruf von Conferrence.new({from: account})... {from: account} wurde verwendet, weil ich den Fehler „ungültige Adresse“ erhalten habe.

Konsolenfehlerprotokoll

Fehler: Fehler: Grundgebühr überschreitet Gaslimit
    bei runCall (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\lib\runTx.js:111:17)
    unter C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:3686:9
    beim Auffüllen (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:881:17)
    bei iterateeCallback (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:866:17)
    unter C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:843:16
    unter C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:3691:13
    at apply (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:21:25)
    unter C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:56:12
    bei 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)
    bei VM.AsyncEventEmitter.emit (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\async-eventemitter\lib\AsyncEventEmitter.js:42:9)
    bei runCall (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\lib\runTx.js:111:17)
    unter C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:3686:9
    beim Auffüllen (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:881:17)
    bei iterateeCallback (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:866:17)
    unter C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:843:16
    unter C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:3691:13
    at apply (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:21:25)
    unter C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\ethereumjs-vm\node_modules\async\dist\async.js:56:12
    bei 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)
    bei VM.AsyncEventEmitter.emit (C:\Users\Devendra\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\node_modules\async-eventemitter\lib\AsyncEventEmitter.js:42:9)
    bei Object.InvalidResponse (http://localhost:8080/app.js:8374:16)
    unter http://localhost:8080/app.js:32995:36
    unter XMLHttpRequest.request.onreadystatechange (http://localhost:8080/app.js:35321:13)

Aber das funktioniert absolut gut, wenn es in der Truffle-Konsole ausgeführt wird -

truffle(development)> Conferrence.new().then(function(ins){console.log(ins.address)})
0x7e796caed4202ae58bb58afc214f281969f995b2

NVM über den Tippfehler 'Konferenz' :p

Trüffel ist scheiße. Ich habe es gelöst und kann jetzt Mokka-Ganache-Tests ohne Trüffel durchführen. ethereum.stackexchange.com/questions/46957/…

Antworten (5)

Da Ihr Beispielcode Truffle-Contract verwendet, können Sie die Standardwerte für Ihre Transaktionen und Vertragsbereitstellungen wie folgt angeben ( Konferenz ist der Name Ihres Vertrags. Ich habe die Truffle-Standardwerte verwendet):

Conferrence.defaults({
  from: account,
  gas: 4712388,
  gasPrice: 100000000000
})

Ich hatte das gleiche Problem ( base fee exceeds gas limit) und Browser- Solidity gab mir eine Gas requirement of function xyz.sol:Xyz.doSomething(address) unknown or not constant.Angabe von Standardwerten, die schließlich geholfen haben.

Wenn Sie Ihren Code in der Truffle-Konsole ausführen, wird sichergestellt, dass bestimmte Standardeinstellungen festgelegt wurden:

Für jedes Netzwerk, falls nicht angegeben, werden die Transaktionsoptionen standardmäßig auf die folgenden Werte gesetzt:

  • gas: Gaslimit, das für Deployments verwendet wird. Standard ist 4712388.
  • gasPrice: Gaspreis, der für Deployments verwendet wird. Der Standardwert ist 100000000000 (100 Shannon).
  • from: Absenderadresse, die bei Migrationen verwendet wird. Standardmäßig das erste verfügbare Konto, das von Ihrem Ethereum-Client bereitgestellt wird.

(von http://truffleframework.com/docs/advanced/configuration#networks )

Wenn Sie jedoch in einer anderen Umgebung arbeiten, z. B. in einem Browser, sind diese Standardwerte nicht verfügbar und Sie müssen sie für jede Transaktion angeben. Das heißt in Ihrem Fall nicht nur liefern, fromsondern auch gas.

Sie müssen die Gasmenge erhöhen, die Sie für die Vertragserstellung zu zahlen bereit sind. Zum Beispiel:

Conferrence.new({from: account, gas: SOME AMOUNT HERE});

Grundsätzlich sind die erwarteten Kosten der Transaktion höher als der Betrag, den Sie standardmäßig bereitstellen. Sie müssen also in Ihrem Anruf auf Gas geben new.

Ich habe das gleiche Problem und ich glaube, die Leute sind verwirrt darüber, was der Gasparameter in der truffle.js-Datei tatsächlich bedeutet.

Ich habe hier meine eigene Frage beantwortet. Ich hoffe es hilft.

Der Einsatz von Trüffelkontrakten überschreitet entweder das Blockgaslimit oder das Gas ist erschöpft

Vielleicht nicht genau mit dieser Frage verbunden, aber ich trope mit demselben Fehler, wenn ich truffle testeinen Soliditätsvertrag ausführe, und der angegebene Gasfehler war irreführend. Sie könnten es mit „Unbekannter Fehler bei der Bereitstellung“ übersetzen. In meinem Fall könnte ich den eigentlichen Fehler erhalten, indem ich truffle deploy --reset.