Wie wurden die Gaskosten für die Anweisungen der Ethereum Virtual Machine gewählt?

Unterschiedliche Anweisungen der EVM haben unterschiedliche Gaskosten -- siehe Liste der Gaspreise im Anhang G des Gelben Blattes .

Während die groben Größenordnungen dieser Zahlen ziemlich vernünftig aussehen, sehen die genauen Werte immer noch so aus, als wären sie etwas willkürlich gewählt worden. Andererseits sehen einige Werte seltsam spezifisch aus. Gibt es einen tieferen Grund, genau diese Werte zu wählen?

Diese Frage muss noch beantwortet werden, da die aktuelle Antwort der Tabellenkalkulation nichts über die Methodik erwähnt: Gibt es einen tieferen Grund für die Auswahl dieser genauen Werte?

Antworten (3)

Ich teile mit Ihnen die Tabelle , die die Formel hinter den Gaskosten jedes OPCODE erklärt.

Version 1.0 wurde von Core Devs of Ethereum erstellt. Ich freue mich darauf, zukünftige Updates davon zu artikulieren. Es ist eine Meta-Konsens- Herausforderung, die es zu lösen gilt.

Verwandte Frage - kostet das Benzin auf Testnet gleich oder ist es anders?
@BrianArmstrong Ja, die gleichen EVM- und Gaskosten gelten für Ethereum-Testnetze.

Die Gesamtkosten einer Transaktion, die einen Vertrag erstellt oder ausführt, basieren auf 2 Faktoren:

gasUsedist das gesamte verbrauchte Gas

gasPricein der Transaktion angegeben

Total cost = gasUsed * gasPrice

gasGebraucht

Jedem Betrieb in der EVM wurde eine Zahl zugeordnet, wie viel Gas er verbraucht. gasUsedsummiert das ganze Gas für alle ausgeführten Operationen. Es gibt eine Tabelle , die einen Einblick in einige der Analysen dahinter bietet.

Für Schätzungen gasUsedgibt es eine schätztGas - API , die verwendet werden kann , aber einige Vorbehalte hat .

gasPreis

Ein Benutzer erstellt und signiert eine Transaktion, und jeder Benutzer kann angeben, was er gasPricemöchte, einschließlich Null. Die bei Frontier eingeführten Ethereum-Clients hatten jedoch einen Standardgaspreis von 0,05e12 wei. Da Miner ihre Einnahmen optimieren und die meisten Transaktionen mit einem gasPrice von 0,05e12 wei eingereicht werden, wäre es schwierig, einen Miner davon zu überzeugen, eine Transaktion zu akzeptieren, die einen niedrigeren oder keinen gasPrice angibt. Wie die Standardeinstellung gewählt wurde, wird in dieser Frage gefragt .

Beispiel

Nehmen wir einen Vertrag, der nur 2 Zahlen addiert. Aus der Tabelle oben ADDverbraucht 3 Gas.

Die ungefähren Kosten unter Verwendung des Standardgaspreises wären:

3 * 0,05e12 = 1,5e11 wei

Da 1 Ether 1e18 wei ist, würden die Gesamtkosten 0,00000015 Ether betragen.

Dies ist eine Vereinfachung, da einige Kosten ignoriert werden, wie z. B. die Kosten für die Übergabe der 2 Nummern an den Vertrag, bevor sie überhaupt hinzugefügt werden können.

Falls diese Antwort nicht so viel Sinn macht, liegt das daran, dass sie ursprünglich eine Antwort auf ethereum.stackexchange.com/q/799/42 war, bevor sie hierher zusammengeführt/verschoben wurde.

Jede Anweisung in der virtuellen Maschine von Ethereum hat Kosten, die in Gaseinheiten gemessen werden. Die Tabelle dieser Kosten für jede Anweisung heißt „Gebührentabelle“ und ist ein Anhang im Ethereum Yellow Paper (kann sich jedoch in Zukunft ändern). Die einzige Möglichkeit, (im Allgemeinen) zu bestimmen, wie viel Gas ein bestimmter Aufruf zu einem Vertrag kosten würde, besteht darin, ihn auszuführen (nicht unbedingt auf der Blockchain, sondern in einem „lokalen Simulator“). Wenn der Vertragscode jedoch mit dem Zustand der Blockchain interagiert (z. B. mit den Anweisungen BLOCKHASH, TIMESTAMP, BALANCE), kann die Ausführung nicht genau simuliert werden. Daher sind in einigen Fällen die tatsächlichen Ausführungskosten erst bekannt, wenn die Transaktion in den Block aufgenommen wird. Aus diesem Grund können Sie versuchen, die Obergrenze für den erforderlichen Gasverbrauch abzuschätzen und genügend Ether mit der Transaktion zu senden.

Falls diese Antwort nicht so viel Sinn macht, liegt es daran, dass sie ursprünglich eine Antwort auf ethereum.stackexchange.com/questions/799/… war, bevor sie hierher zusammengeführt/verschoben wurde.