Ich versuche, ein Programm in Golang zu erstellen, um die Ethereum-Gaskosten von Funktionsaufrufen für die von mir geschriebenen Smart Contracts zu modellieren. Ich konnte sie erfolgreich schätzen, ethclient.EstimateGas
aber die gemeldeten Gaskosten scheinen unglaublich unterbewertet zu sein, irgendwo zwischen 22.000 und 24.000 Gas, um Token zu senden und einige boolesche Variablen im Speicher zu ändern? Das sind auf keinen Fall die korrekten Benzinkosten. Ich kann nicht herausfinden, wie Websites wie ethgasstation die Gaskosten zuverlässig schätzen können, wenn die von der go-ethereum-Bibliothek gemeldeten Kosten kaum den realen Kosten entsprechen?
Ich kann Ihnen nicht sagen, warum ethclient.EstimateGas
das verbrauchte Gas zu niedrig angezeigt wird. Ich erinnere mich, dass ich einmal vor demselben Problem stand und meine faule Lösung darin bestand, alles, was es meldete, mit 3 zu multiplizieren.
Um den korrekten Gaspreis für einen Methodenaufruf zu berechnen, benötigen Sie den binären EVM-Code des Vertrages. Sobald Sie das haben, können Sie den Preis jeder Anweisung im Yellow Paper in Anhang G und H nachschlagen . Der schwierige Teil dieser Berechnung ist jedoch, dass die genauen Gaskosten vom Zustand der virtuellen Maschine abhängen, die die Anweisung ausführt Code (der EVM). Um das richtig zu berechnen, müssen Sie wahrscheinlich die gesamte virtuelle Maschine simulieren. Und im allgemeinen Fall die gesamte Ethereum-Blockchain, dh Sie benötigen einen Ethereum-Blockchain-Knoten.
Wenn Sie beispielsweise die ERC20-Funktion aufrufen transfer
, zahlen Sie am Ende mindestens 21.000 Gas, nur um den Funktionsaufruf durchzuführen, und zwischen 10.000 und 40.000, um die Salden zu aktualisieren, und 400, um die Salden zu lesen, plus zusätzliches Gas, um für die Sprungtabellenlogik zu bezahlen Vertragsbeginn. Der Betrag, der für die Aktualisierung jedes Guthabens (Sender und Empfänger) gezahlt wird, hängt davon ab, ob die Adresse über ein Guthaben verfügt oder nicht (5.000 Gas vs. 20.000 Gas für jede Aktualisierung), sodass Sie den gesamten Status der virtuellen Maschine kennen müssen. In anderen Fällen müssten Sie den Status anderer Ethereum-Konten wie Salden oder eingesetzte Smart Contracts kennen.
hextet
ethclient.EstimateGas
würde das Gas nur den Funktionsaufruf machen. Das scheint sehr schlecht gestaltet zu sein, nein? Ist die einzige Möglichkeit, die Kosten abzuschätzen, die virtuelle Maschine buchstäblich zu drehen oder zu emulieren? Es muss einen besseren Weg geben, dies zu tun.Thorkil Værge
hextet
Thorkil Værge
hextet