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

时间:2017-08-04 15:38:14

标签: 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;
})

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

3 个答案:

答案 0 :(得分: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);
});

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

答案 1 :(得分:2)

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

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

  • 使用bitcoind运行修剪后的比特币节点
  • 使用配置选项zmqpubrawtx=tcp://127.0.0.1:3600启用bitcoind的ZeroMQ接口。这将使原始交易数据流式传输到您的node.js应用程序
  • 使用ZeroMQ node.js module订阅比特币的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);
    }
});

有关更多详细信息,请查看this guide

答案 2 :(得分:1)

我认为this是您想要的。该教程可帮助用户设置本地btc节点,并演示如何使用zmq订阅和RPC通讯来完成发送和接收事务以及通知和其他功能。

@ c.hill的响应是正确的,但省略了此处描述的更复杂的功能:)