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

Posted

技术标签:

【中文标题】如何通过 nodejs 监视区块链上的比特币交易?【英文标题】:How to watch for the bitcoin transactions over blockchain via nodejs? 【发布时间】:2018-01-12 14:59:47 【问题描述】:

我正在使用这个 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 中创建它?

【问题讨论】:

【参考方案1】:

如果您没有自己的节点,则可以使用这里 (https://github.com/blockchain/api-v1-client-node/tree/master/Socket) 中所述的 blockchain.info API

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)

【讨论】:

这很好,但我无法让它在测试网上工作:github.com/blockchain/api-v1-client-node/issues/93【参考方案2】:

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

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

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

更多详情请关注this guide

【讨论】:

您好,有没有什么库可以帮助解决这个问题,我一直在尝试 bitcore,但它与那里的库 bitcore 非常混淆,那么 bitcore-node 您能提出其他建议吗? 顺便说一句,这是更好的解决方案。 很好的答案,非常感谢【参考方案3】:

我认为this 是您正在寻找的。本教程帮助用户设置本地 btc 节点,并演示如何使用 zmq 订阅和 RPC 通信来完成发送和接收交易以及通知和其他功能。

@c.hill 的回答是正确的,但忽略了这里描述的更复杂的功能:)

【讨论】:

以上是关于如何通过 nodejs 监视区块链上的比特币交易?的主要内容,如果未能解决你的问题,请参考以下文章

比特币的区块结构解析

《区块链100问》第62集:比特币为什么要扩容?

《区块链100问》第67集:重放攻击是什么?

概念性

闪电网络

node.js与比特币