Soy nuevo en el mundo Ethereum. Acabo de lograr crear un ejemplo que calcula la tarifa de transacción y envía una transacción firmada sin contrato utilizando la biblioteca Web3js.
Mi problema es que mi cuenta de prueba se está quedando sin saldo bastante rápido. Debo estar haciendo algo mal. Hice esta transacción: https://kovan.etherscan.io/tx/0x5cb10c454d8d331e35ba3812522ea9cd5b82fdb7ecde75c5b48ec1550d99cc98
Si ves los detalles:
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)
¡Veo que la tarifa de transacción real es 2.226 Ether!
Estoy calculando la tarifa de transacción de la siguiente manera:
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);
})
});
Entonces esta tarifa de transacción, la estoy usando en mi transacción:
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);
});
}
})
¿Estoy asignando incorrectamente un valor o me falta alguna conversión?
Encontré el problema, estaba pasando a:
gasPrice: w3.utils.toHex(transactionFee)
Toda la tarifa: gas * gasPrice. Eso provocó que internamente mi tarifa de transacción se multiplicara nuevamente por el gas.
Necesito pasar:
gasLimit: w3.utils.toHex(gas),
gasPrice: w3.utils.toHex(gasPrice)
gas:
en lugar de gasLimit:
.
ranchoalp
Eduardo
CaptEmulación