¿Es posible escuchar transacciones en una dirección específica de ethereum? Por ejemplo, si alguien envía una cierta cantidad de ETH a esa dirección, se activaría la función de devolución de llamada.
Leí esto: ¿Cómo explorar todas las transacciones de una cuenta determinada? pero parece tratarse de transacciones pasadas y no escuchar en vivo.
Puede usar Web3.js 1.0 y WebSockets para lograr esto.
var subscription = web3.eth.subscribe('logs', {
address: '0x123456..',
}, function(error, result){
if (!error)
console.log(result);
})
.on("data", function(log){
console.log(log);
})
.on("changed", function(log){
});
Si usa el código anterior, simplemente actualice la address
propiedad.
Muestra de trabajo aquí: https://jsfiddle.net/h7nskoyu/11/
Esto mira el contrato de CryptoKitties, y cuando miras la consola ves esto:
La transacción ampliada se asigna a esto: https://etherscan.io/tx/0x3ccce0b8072649ca087a91f00bdbb475b36d03a9a8dd2cc54b9a03ac5826c255
Obtenga más información web3.eth.subscribe
aquí .
Se llama concepto de monitoreo continuo. También puede hacerlo usando RPC Call. Uso de la API de Etherscan (hay muchas plataformas que proporcionan la API de ETH)
Paso 1: obtenga la altura de bloque más reciente usando https://api.etherscan.io/api?module=proxy&action=eth_blockNumber&apikey=YourApiKeyToken
Paso 2: Obtenga todos los detalles de ese bloque usando https://api.etherscan.io/api?module=proxy&action=eth_getBlockByNumber&tag=0x5A0F60&boolean=true&apikey=YourApiKeyToken (obtendrá todas las transacciones en este bloque)
Paso 3: ahora almacene todos los datos de esa transacción de json en su lista y ejecute el bucle para su dirección que desea monitorear continuamente.
Entonces, si su dirección estará en la lista de transacciones de ese bloque, puede usar los detalles según sus requisitos; de lo contrario, puede verificar el siguiente bloque generado después de 10 a 15 segundos (según sus requisitos).
La respuesta aceptada solo funcionará para txn a un contrato.
Para detectar transferencias de éter (txn a EOA), deberá configurar un oyente para obtener los últimos bloques y consultar la matriz de transacciones del bloque para encontrar una coincidencia para un requisito particular.
Esto monitoreará la cadena de bloques para transacciones entrantes para una dirección
const monitorTransaction = async (addressss)=>{
const block = await web3.eth.getBlock('latest');
console.log(`Checking new block ${block.number}`)
for(let txHash of block.transactions){
// console.log(txHash);
const tx = await web3.eth.getTransaction(txHash)
// console.log(JSON.stringify(tx));
const tranx = typeof tx === 'string' ? tx.to.toLowerCase() : '';
if(addressss === tranx){
console.log(`New transaction found - Block ${block.number}`);
console.log(`Transaction From: ${tx.from}`);
console.log(`Transaction To: ${tx.to}`);
console.log(JSON.stringify(tx));
}
}
}
str
sin definirla, no considera transacciones internas.
Yousuf
shawn tabrizi
Yousuf
connection not open on send() Error when watching incoming transactions: connection not open connection not open on send() Error when watching incoming transactions: connection not open connection not open on send() Error when watching incoming transactions: connection not open connection not open on send() Error when watching incoming transactions: connection not open
shawn tabrizi
var web3 = new Web3('wss://mainnet.infura.io/ws');
para simplemente probar que su código está funcionando. Y si es así, abra otro hilo para depurar problemas de acceso a su Geth WebSocket.ismael
address
es un contrato y genera eventos. Esto no funcionará para EOA o si el contrato no genera eventos.filología
yong-ho