Script para vaciar la dirección

¿Alguien tiene un script que pueda usarse para transferir todo el éter que se encuentra en una dirección a otra dirección?

El script verificará constantemente si hay éter entrante y realizará una transacción automática, usará la mitad del éter para gas.

Usar la mitad de éter para el gas es probablemente demasiado generoso. 21000 * web3.eth.getGasPrice()seria suficiente.

Respuestas (2)

const ETH_URL = ... //ex: http://localhost:8545
const TIMEOUT = 15000; //blocktime
const ADDRESS_FROM = ...
const ADDRESS_TO = ...
const TX_COST = 21000;
const web3 = new web3(ETH_URL);
setInterval(async () => {
    const balance = await web3.eth.getBalance(ADDRESS_FROM);
    if(balance > TX_COST) {
        await web3.sendTransaction({to: ADDRESS_TO, from: ADDRESS_FROM, value: balance - TX_COST});
    }
}), TIMEOUT);

No he probado la función asíncrona en setInterval(). Si no funciona, reemplácelo por promesas (entonces () ...).

Se supone que el precio del gas es de 1 Wei.
var from = ...;
var to = ...;
var fromBalance = web3.utils.toBN (web3.eth.getBalance (from));
var gasPrice = web3.utils.toBN (web3.eth.getGasPrice ());
var fee = gasPrice.mul (web3.utils.toBN (21000));
if (fromBalance.gte (fee)) {
  web3.eth.sendTransaction ({
    from: from,
    to: to,
    value: fromBalance.sub (fee),
    gas: 21000,
    gasPrice: gasPrice
});