Saltar al contenido

¿Cómo observar las transacciones de bitcoin a través de blockchain a través de nodejs?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *