Wie berechnet man die Transaktionsgebühr?

Zur Berechnung der Transaktionsgebühr verwende web3jsich den Gaspreis:

eth.getTransaction("txhash").gasPrice

multipliziert mit dem tatsächlich verbrauchten Gas:

eth.getTransactionReceipt("txhash").gasUsed

Ist es richtig? Gibt es einen einfacheren Weg?

Ja, Ihre Methode ist korrekt und wahrscheinlich die einfachste, die über Web3js verfügbar ist.

Antworten (3)

Was ist Erdgas?

Wenn Sie sich nicht sicher sind, was Gas ist, empfehle ich Ihnen, die Antworten auf die StackOverflow-Frage „Was ist Gas?“ zu lesen. bevor Sie weiter gehen.

Berechnung der Transaktionsgebühr

Die Gesamtkosten einer Transaktion sind das Produkt aus Gaslimit und Gaspreis :

(gas limit x gas price) = transaction fee

Dabei web3jsstehen folgende Methoden zur Verfügung:

Wenn Sie beispielsweise alle Ihre Ether übertragen möchten, müssen Sie zuerst die Transaktionsgebühr berechnen, diese vom Guthaben abziehen und dann die Überweisung durchführen:

var sender = web3.eth.accounts[0];
var receiver = web3.eth.accounts[1];
var balance = web3.eth.getBalance(sender);
var gasPrice = web3.eth.getGasPrice(); // estimate the gas price

var transactionObject = {
  from: sender,
  to: receiver,
  gasPrice: gasPrice,
}

var gasLimit = web3.eth.estimateGas(transactionObject); // estimate the gas limit for this transaction
var transactionFee = gasPrice * gasLimit; // calculate the transaction fee

transactionObject.gas = gasLimit;
transactionObject.value = balance - transactionFee; // set the transaction value to the entire balance, less the transaction fee

web3.eth.sendTransaction(transactionObject, myCallbackFunction);
ty für eine ausführliche Erklärung). Es ist alles in Ordnung, wenn ich selbst Transaktionen sende. Aber wenn Sie ein Zahlungssystem haben, das Transaktionen für einige Konten abhören muss, könnten diese Konten Transaktionen mit einem anderen Gaswert senden (z. B. 30000) oder dieser Gaswert könnte sich in Zukunft ändern, viel höher sein und all diese 30000 verwenden Menge an Gas, und es ist nicht falsch, Gebühren für bereits abgebaute Transaktionen zu berechnen. web3.eth.gasPriceAus den Dokumenten wird der mittlere Gaspreis der letzten Blöcke berechnet, es ist in Ordnung, wenn Sie es jetzt senden).
Falsch !!!!. Die Formel lautet gas_used x gas_price . Wenn ich ein Limit von 1000 habe und nur 210 verwende, beträgt die Gebühr 210 x gas_price und NICHT 1000 x gas_price

Nehmen Sie zum Beispiel diese echte Transaktion, eine zufällige

https://etherscan.io/tx/0xcb1e3530950cf2c43a307bcb5645ae71a12c76a60831617badd04aea3efe68aa

Transaction Fee:
0.000284248 Ether ($0.05)
Gas Limit:
136,500
Gas Used by Transaction:
35,531 (26.03%)
Gas Price:
0.000000008 Ether (8 Gwei)

Hier sieht man das

Fee = Gas_Used * Gas_Price 
    = 35531 (unit) * 0.000000008 (eth)
    = 0.000284248 (eth)

Vielleicht möchten Sie sich die web3-Dokumentation ansehen . Wie dort beschrieben, erhalten Sie den aktuellen Gaspreis wie folgt:

const gasPrice = web3.eth.getGasPrice();

Der Rest sieht gut aus.