Después de investigar en varios repositorios y páginas webs al final dimos con la solución que te mostraremos más adelante.
Solución:
Si no tiene su propio nodo, puede usar las API de blockchain.info como se describe aquí (https://github.com/blockchain/api-v1-client-node/tree/master/Socket)
const Socket = require('blockchain.info/Socket');
const mySocket = new Socket();
mySocket.onTransaction(function()
console.log(arguments);
);
Siempre puede ver las transacciones ejecutando su propio nodo sin la necesidad de depender de un servicio como blockchain.info… Por ejemplo, si está utilizando btcd (Golang) (https://github.com/btcsuite/btcd), entonces puede recibir notificaciones sobre transacciones como aquí (http://godoc.org/github.com/btcsuite/btcrpcclient#Client.NotifyNewTransactions)
El uso de una API de terceros, como sugieren las respuestas aceptadas, funcionará a corto plazo. Pero si está buscando una solución a largo plazo, confiable y sin límites de tarifa; debe ejecutar su propio nodo bitcoin. Por supuesto, depende de los requisitos de su proyecto.
Para una solución sólida a la pregunta del OP, sugiero lo siguiente:
- Ejecute un nodo de bitcoin podado usando bitcoind
- Habilite la interfaz ZeroMQ de bitcoind con la opción de configuración
zmqpubrawtx=tcp://127.0.0.1:3600
. Esto permitirá la transmisión de datos de transacciones sin procesar a su aplicación node.js - Use el módulo ZeroMQ node.js para suscribirse a la interfaz ZeroMQ de bitcoind
- Use bitcoinjs-lib para decodificar los datos de transacción sin procesar
El siguiente ejemplo de node.js usará zeromq para suscribirse a la interfaz zeromq de bitcoind. Luego, bitcoinjs-lib se usa para decodificar esas transacciones sin procesar.
var bitcoin = require('bitcoinjs-lib');
var zmq = require('zeromq');
var sock = zmq.socket('sub');
var addr = 'tcp://127.0.0.1:3600';
sock.connect(addr);
sock.subscribe('rawtx');
sock.on('message', function(topic, message)
if (topic.toString() === 'rawtx')
var rawTx = message.toString('hex');
var tx = bitcoin.Transaction.fromHex(rawTx);
var txid = tx.getId();
tx.ins = tx.ins.map(function(in)
in.address = bitcoin.address.fromOutputScript(in.script, bitcoin.networks.bitcoin);
return in;
);
tx.outs = tx.outs.map(function(out)
out.address = bitcoin.address.fromOutputScript(out.script, bitcoin.networks.bitcoin);
return out;
);
console.log('received transaction', txid, tx);
);
Para más detalles, por favor echa un vistazo a esta guía
No se te olvide dar difusión a este post si lograste el éxito.