Web3 sendSignedTransaction Transaktionskosten

Ich bin neu in der Ethereum-Welt. Ich habe es gerade geschafft, ein Beispiel zu erstellen, das die Transaktionsgebühr berechnet und eine signierte Transaktion ohne Vertrag mithilfe der Web3js-Bibliothek sendet.

Mein Problem ist, dass mein Testkonto ziemlich schnell kein Guthaben mehr hat. Ich muss etwas falsch machen. Ich habe diese Transaktion durchgeführt: https://kovan.etherscan.io/tx/0x5cb10c454d8d331e35ba3812522ea9cd5b82fdb7ecde75c5b48ec1550d99cc98

Wenn Sie die Details sehen:

Value: 0.000106 Ether ($0.00) 
Gas Limit: 21000 
Gas Used By Txn: 21000 
Gas Price: 0.000106 Ether (106,000 Gwei) 
Actual Tx Cost/Fee: 2.226 Ether ($0.000000)

Wie ich sehe, beträgt die tatsächliche Transaktionsgebühr 2,226 Ether!

Ich berechne die Transaktionsgebühr wie folgt:

var transactionObject = {
  from: sender,
  value: amount
}
w3.eth.estimateGas(transactionObject, function(error, gas) {
  w3.eth.getGasPrice(function (error, gasPrice) {
    var gasPrice = Number(gasPrice);
    var transactionFee = gasPrice * gas;
    console.log(transactionFee);
 })
});

Dann diese Transaktionsgebühr, ich verwende sie für meine Transaktion:

w3.eth.getBalance(sender, function(error, balance) {
  if (balance < (transactionFee + transactionValue)) {
    reject("You don't have enough balance to cover this transaction");
  } else {
    w3.eth.getTransactionCount(sender).then(function(count) {
      var transactionObject = {
        nonce: w3.utils.toHex(count),
        from: sender,
        to: receiver,
        gasPrice: w3.utils.toHex(transactionFee),
        value: w3.utils.toHex(transactionValue),
        data: ''
      }
      w3.eth.estimateGas(transactionObject, function (error, gas) {
        transactionObject.gasLimit = gas;
        var tx = new Tx(transactionObject);
        tx.sign(privateKey);
        var serializedTx = tx.serialize();
        w3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'), function (error, result) {
          if(!error) {
            resolve(result);
          } else {
            reject(error)
          }
        })
      });
    }).catch(function(error) {
      reject(error);
    });
  }
})

Weise ich einen Wert falsch zu oder übersehe ich eine Konvertierung?

Hast du schon mal überlegt das Gas explizit auf Wei umzustellen? Scheint, als würde es sie als Äther nehmen.
@ranchalp meinen Sie, diese Zeile zu ändern: gasPrice: w3.utils.toHex(transactionFee) in gasPrice: w3.utils.toHex(w3.utils.toWeis(transactionFee))?
Klingt, als wären Sie auf dem richtigen Weg ... Ihr Gaspreis von 106.000 Gwei ist 1000-mal höher als normal

Antworten (1)

Ich habe das Problem gefunden, ich ging zu:

gasPrice: w3.utils.toHex(transactionFee)

Die ganze Gebühr: gas * gasPrice. Das führte dazu, dass intern meine Transaktionsgebühr nochmal mit dem Gas multipliziert wurde.

Ich muss bestehen:

gasLimit: w3.utils.toHex(gas),
gasPrice: w3.utils.toHex(gasPrice)
Ja, aber es sollte gas:eher als sein gasLimit:.