Was ist und wie wird der „kumulierte Gasverbrauch“ berechnet?

Wenn ich Transaktionen in Etherscan sehe (z. B. 0x7eb9a7454f9cd2f39a7ea7c6212833673165b35f352127ffb337df866897eb73 ), sehe ich das Feld Cumulative Gas Used , das in der web3-Antwort nicht vorhanden ist.

Im Allgemeinen ist es gleich dem verbrauchten Gas, aber ich frage mich, ob es anders sein könnte und falls ja, wie es berechnet werden sollte.

Antworten (1)

Lassen Sie uns zunächst verstehen, welches kumulative Gas verwendet wird.

cumulativeGasUsed: Number – Die Gesamtmenge an verbrauchtem Gas, als diese Transaktion im Block ausgeführt wurde.

Wie von der JavaScript-API vorgeschlagen. Diese Erklärung war mir überhaupt nicht klar, versuchen wir es mit einer anderen:

cumulativeGasUsed ist die Summe von gasUsed durch diese Transaktion und alle vorhergehenden Transaktionen im selben Block.

Beispiel: http://etherscan.io/txs?block=1402679 Wir haben dort 4 Transaktionen. 3 einfache Sendungen und 1 Vertragserstellung.

  1. Senden, 21000 gasverbraucht, 21000 kumulativ gasverbraucht
  2. Senden, 21000 verbrauchtes Gas, 42000 kumuliertes verbrauchtes Gas
  3. Senden, 21000 verbrauchtes Gas, kumulatives verbrauchtes Gas 63000
  4. Vertragserstellung, 514474 gasUsed, 577474 kumulatives GasUsed

Wenn wir jetzt 577474 - 63000 berechnen, ist das Ergebnis 514474.

Zurück zu deiner Frage nach der Berechnung. Einfache Antwort: Sie kümmern sich einfach nicht darum, weil es Ihre Transaktion (fast) nicht beeinflusst. Aber wenn Sie das wirklich wollen, hier der einfache Ansatz. Holen Sie sich den „ausstehenden“ Block gasUsed web3.eth.getBlock('pending').gasUsedund fügen Sie das geschätzte Gas Ihrer Transaktion hinzu. Meistens führt dies zu einem kumulativen Gasverbrauch für Ihre Transaktion. Es kann sich jedoch ändern, wenn jemand zwischen Ihrer Schätzung und Ihrer Übermittlung eine weitere Transaktion einreicht.

Ich habe vorhin „fast“ gesagt, weil es Ihre Transaktion so beeinflussen kann, dass es nicht zum Blockgaslimit passt.

Ich sehe das Feld „Cumulative Gas Used“, das in der web3-Antwort nicht vorhanden ist.

Es ist als web3.eth.getTransactionReceipt(txHash)Antwort vorhanden.

Das ist also nützlich, um das gesamte in einem Block verbrauchte Gas zusammenzufassen, aber für einen Vertragsentwickler hat es keinen weiteren Wert?