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?
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)
gas:
eher als sein gasLimit:
.
Ranchalp
Eduardo
CaptEmulation