如何通过nodejs观察区块链上的比特币交易?

cod*_*ode 8 node.js bitcoin blockchain

我正在使用这个bitcore npm包. https://bitcore.io/api/lib

我想监视区块链上的所有事务,并读取与该事务关联的输入地址,输出地址和数量.

但我无法找到要调用的javascript方法来完成此任务.即使我无法找到这方面的例子.

我正在寻找类似的东西

var someLib = require('some-bitcore-lib')

someLib.on('transaction-found', function(){
   // print everything
   console.log(arguments);
   // do something else;
})
Run Code Online (Sandbox Code Playgroud)

有帮助吗?我在哪里可以找到some-bitcore-lib或如何在nodejs中创建它?

Qus*_*uda 7

如果您没有自己的节点,可以使用此处所述的blockchain.info API(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);
});
Run Code Online (Sandbox Code Playgroud)

您始终可以通过运行自己的节点来监视事务,而无需依赖像blockchain.info这样的服务...例如,如果您使用的是btcd(Golang)(https://github.com/btcsuite/btcd),那么您可以在此处获得有关交易的通知(http://godoc.org/github.com/btcsuite/btcrpcclient#Client.NotifyNewTransactions)


c.h*_*ill 7

正如公认的答案所暗示的那样,使用第三方 API 将在短期内起作用。但是,如果您正在寻找一种长期、可靠、不受速率限制的解决方案;你应该运行你自己的比特币节点。当然,这取决于您的项目要求。

对于 OP 问题的可靠解决方案,我建议如下:

  • 使用 bitcoind 运行一个修剪过的比特币节点
  • 使用配置选项启用 bitcoind 的 ZeroMQ 接口zmqpubrawtx=tcp://127.0.0.1:3600。这将使原始交易数据流式传输到您的 node.js 应用程序
  • 使用ZeroMQ node.js 模块订阅 bitcoind 的 ZeroMQ 接口
  • 使用bitcoinjs-lib解码原始交易数据

下面的 node.js 示例将使用 zeromq 订阅 bitcoind 的 zeromq 接口。然后 bitcoinjs-lib 用于解码那些原始交易。

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);
    }
});
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看本指南

  • 您好,有没有任何库可以帮助解决这个问题,我一直在尝试 bitcore,但它与那些库 bitcore 和 bitcore-node 非常令人困惑,您还能提出其他建议吗? (2认同)
  • 顺便说一句,这是更好的解决方案。 (2认同)