¿Cómo calcular el monto a transferir para vaciar completamente una cuenta?

Entonces, digamos que mi billetera es 1 eth, necesito vaciarla por completo y lo haré de esta manera

Var value = web3.toWei(1) - gas

¿Está bien?

Respuestas (2)

Sí. Deberá averiguar cuánto gas (en ETH) costará la transacción, pero afortunadamente las transferencias simples de ETH son exactamente 21,000 de gas (creo, verifique dos veces este número). Esto significa que para saber cuánto ETH se gastará en gasolina, deberá multiplicarlo por el precio de la gasolina elegido (p. ej., 10^10).

Por lo tanto, su cálculo deberá ser algo como esto:

var gasPrice = 20*10**9;
var gas = 21000;
var attoethForGas = gasPrice * gas;
var amountToSend = web3.toWei(1) - attoethForGas;
Si tomo este gas como 5000 y no puedo vaciar completamente mi cuenta (se reembolsa el gas no utilizado)
@ D.Doy Actualicé la respuesta para incluir un ejemplo de código, avíseme si eso ayuda a aclarar las cosas.
Gracias por su respuesta, pero parece que no impidió que el reembolso de la gasolina fuera demasiado grande. Si fuera a limpiarse, ¿tengo que hacer que el gas sea lo suficientemente pequeño?
Hmm, no estoy seguro de cuál podría ser su problema, estoy razonablemente seguro de que lo anterior es la forma de enviar todo. ¿Puedes compartir el código que tienes que no funciona? No debería haber reembolso de gas por una transferencia ETH, incluso si el saldo se pone a cero.

Para calcular un valor exacto para enviar, debe usar cálculos precisos que JavaScript no le brinda de manera inmediata. Afortunadamente, web3.js ya devuelve un BigNumberobjeto especial de eth.getBalance(). Para ejecutar operaciones matemáticas precisas, debe usar BigNumbermétodos en lugar de operadores aritméticos predeterminados. Por ejemplo:

gasPrice = new BigNumber(web3.toWei('0.6', 'gwei'))
cost = gasPrice.mul(21000)
value = eth.getBalance(eth.accounts[0]).sub(cost)

Las constantes se extrajeron de estas fuentes en el momento de la publicación:

ethgasstation.info en realidad está inactivo en este momento, 0.6 gwei era solo un precio bastante estable que vi antes de que bajara.