Ich habe den folgenden Code in app.js
der 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
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, from
sondern 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.
Vielleicht nicht genau mit dieser Frage verbunden, aber ich trope mit demselben Fehler, wenn ich truffle test
einen 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
.
Russo