Ich führe derzeit einige Tests auf Ganache mit dem web3.js-Connector durch.
Die meisten meiner Transaktionen laufen gut, wenn ich die gleiche Gasmenge liefere, die von web3.eth.estimateGas() vorgeschlagen wird, jedoch verwendet eine der Transaktionen etwa das Dreifache der Gasschätzung, die von web3.eth.estimateGas(.... ), ist das normal??
Meine Sorge ist, dass ich, sobald ich dies im Mainnet einsetze, und wenn dies zufällig wieder auftritt, aufgrund von abgebrochenen Operationen, die auf eine unzureichende Gasversorgung für die Transaktion zurückzuführen sind, zu wenig Benzin haben könnte.
Was ist die beste Vorgehensweise für den Umgang mit dieser Art von Situation, sollte ich normalerweise das x-fache der Gasschätzung liefern, nur um auf der sicheren Seite zu sein ... was ist ein guter Wert für x.
Nebenbei bemerkt, der fragliche Funktionsaufruf hat drei require-Anweisungen, wirkt sich das stark auf den Gasverbrauch aus?
Gasschätzungen sind im Allgemeinen korrekt, aber manchmal ist der Gasverbrauch im Vergleich zur Gasschätzung sehr hoch, was auch von der Leistung abhängt. Wenn Ihre Transaktion erfolgreich ist, ist der Gasverbrauch niedrig, aber wenn sie fehlschlägt, ist der Gasverbrauch hoch, da einige Suchalgorithmen verwendet werden.
Sicherheitshalber können Sie das Gaslimit und den Gaspreis erhöhen. Ich verwende GasPrice = 5000000 wei und GasLimit = 2000000000 wei. Funktioniert gut für mich.
Nulik
satyendra
Nulik
estimateGas()
Sie haben keine Möglichkeit, es zu wissenIsmael
gute Stimmung
Nulik
SSTORE
, wenn es vorhanden ist und es passiert, dass es Speicher freigibt, dann ist das der Grund. Es gibt nur 2 Anweisungen, die Gas freisetzen, Selbstmord und Speicherfreigabe. In allen anderen FällenestimateGas()
erhalten Sie eine korrekte Schätzung, da es den Vertrag mit aCall()
ausführt und diegaseUsed
Variable aus der Ausgabe von nimmtCall()
, es kann in diesem Fall keine falsche Schätzung vornehmen.Nulik
geth
wie ich es hier erkläre: ethereum.stackexchange.com/questions/56287/…