如何通过 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 监视区块链上的比特币交易?的主要内容,如果未能解决你的问题,请参考以下文章