web3 detecta/escucha eventos si alguien envía ether a direcciones

Necesito seguir ejecutando constantemente algún código para detectar si alguien en el último minuto envió algún ether/token a muchas direcciones, ¿hay una mejor manera de hacerlo que https://ethereum.stackexchange.com/a/3478/39163 ? que lleva todas las transacciones a una dirección y luego compara de alguna manera la hora actual con la hora de la transacción para determinar si acaba de suceder.

Respuestas (2)

En lugar de extraer datos cada minuto, podemos usar una suscripción para obtener solicitudes de inserción para monitorear una dirección. Puede hacer esto usando Web3.js 1.0 a través de web3.eth.subscribe: subscribe("logs")

var web3 = new Web3(Web3.givenProvider || 'wss://mainnet.infura.io/ws');

var subscription1 = web3.eth.subscribe('logs', {
    address: '0x06012c8cf97BEaD5deAe237070F9587f8E7A266d'
}, function (error, result) {
})
.on("data", function (log) {
    //console.log(log);
    web3.eth.getTransaction(log.transactionHash)
        .then(function (transaction) {
            //console.log(transaction)
            if (transaction.value > 0) {
                console.log("Ether sent from " + transaction.from + " to " + transaction.to)
            }
        })
})

Esta suscripción debería escuchar la cadena de bloques para cualquier transacción a una dirección que tenga un valor > 0. Estos deberían aparecer casi en tiempo real.

Ether enviado desde 0xcdF5EAD1c329584d835C2Bf6f828C5cAb9B611E6 a 0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C

Ether enviado desde 0x9c539429C2caD0c58aeCe00C13B5B7A5977217fb a 0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C

Ether enviado desde 0xcdF5EAD1c329584d835C2Bf6f828C5cAb9B611E6 a 0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C

...

AFAIK, no hay una forma infalible de hacer esto, lo mejor que puede hacer es ejecutar un nodo completo y seguir verificando unconfirmed balanceslas direcciones requeridas. Algunas advertencias son;

  1. Retraso de sincronización de nodo
  2. Retraso en el envío del cliente de terceros txn.