Si tengo una cuenta con 5 ETH, ¿puedo enviar el saldo total de la cuenta de 5 ETH a otra cuenta y recibir exactamente 5 ETH en la segunda cuenta?
Comprendí que fallará porque no me queda éter para pagar las tarifas de transacción.
Si quiero que la segunda cuenta reciba exactamente 5 ETH, creo que debería tener alrededor de 5,0002 ETH en mi cuenta para poder transferir 5 ETH. ¿Puedes confirmar?
No.
No puede enviar el saldo completo porque las tarifas se deducen del saldo de su cuenta, no del valor que se envía. Para barrer una cuenta, debe enviar balance-gas*price
ETH como el value
, y también configurar manualmente el gas
y gasPrice
para asegurarse de poner exactamente a cero su cuenta.
Por ejemplo, si tiene 5ETH y quiere barrer:
22000
. Además, una cuenta nueva (cuenta inexistente, es decir, sin historial en trie) tendrá un costo de 25000
. Sugeriría editar la respuesta.¡La respuesta básica es no!
Cada vez que desee realizar una transacción, deberá pagar una tarifa por el cálculo involucrado en la validación y extracción de su tx. Si no tienes suficiente gas, no puedes enviar tu tx a la red. En su ejemplo, envíe "todos" y el receptor obtendrá 5 menos las tarifas.
Mi sugerencia sería automatizarlo.
Primero, configure la cuenta y desbloquéela después del lanzamiento geth attach
:
var accountNum = 0
personal.unlockAccount(eth.accounts[accountNum]);
Ahora
var amount_to_send_eth = web3.fromWei(eth.getBalance(eth.accounts[accountNum]), "ether");
var amount_to_send_wei = amount_to_send_eth *1000000000000000000
var transactionFee = web3.eth.gasPrice * 21001;
var total_amount_to_send_wei = transactionFee + amount_to_send_wei
eth.sendTransaction({from:eth.accounts[accountNum], to:"0xD3ADB33FD3ADB33FD3ADB33F", value: total_amount_to_send_wei });
Después de eso, se devuelve un TXID, que se puede usar para verificar si la transacción se completó.
Soy un principiante, ¡así que se agradecen las sugerencias sobre cómo mejorarlo aún más!
var transferAll = function(from, to) {
var gas = '30000';
var gasPrice = eth.gasPrice;
var gasTotal = gasPrice.mul(gas);
var totalValue = eth.getBalance(from).sub(gasTotal)-1;
console.log("Transfer :"+totalValue+", from "+from+" to "+to);
personal.unlockAccount(from);
var result = eth.sendTransaction({from: from, to: to, value: totalValue});
console.log("Transaction hash:", result);
};
Nicolás Massart