听事务并理解它们

我试图在我的bcoin应用程序中设置bsock,目的是监听比特币网络中广播的一些事务。这将使我的应用程序的用户有实时信息(未确认)支付到地址是相关的,而不必主动查询我的节点定期。
io文档相当不错,我使用bsock建立了一个套接字连接。我设法去mempool频道收听“tx”。我还用适当的规则设置了bloom过滤器。
应用程序在mempool中正确地记录与过滤器匹配的事务。到现在为止,一直都还不错。
无论如何,我无法获取正在记录的事务对象的输入和输出的地址。
TX中的每个地址属性如下所示:
地址:<address:type=witness version=0 str=bc1qsgjma9uamep8k6eln4j9xeq6aqhrljmnwhtjdj>
不用说,这种格式不允许我处理地址。。。
我应该如何使用BCOIN库在JS中获取地址字符串(在本例中为:“bc1qsgjma9uamep8k6eln4j9xeq6aqhrljmnwhtjdj”)?
谢谢
抱歉,这不管用。
以下是我得到的答复:
节点–发送事件:
{
高度:-1,
块:空,
时间:0,
日期:空,
索引:-1,
版本:1,
输入:[
{
type:’witnesspubkeyhash’,
子类型:null,
地址:<address:type=witness version=0 str=bc1q4vvn4qcnsuz4cye6p5zs7yycndzep4ey80jtl>,
脚本:<脚本:>,
见证人:<见证人:3044022043BC6F67B4BA6F0C38C3334D81D3E1D5EA746DF70BD74FD14D687E900790F73020778E21BEED3068E3A17B5B5385BF11525C25FFAA40CC8AE47D286DD3FC6CD901 02f84d8111044774051c7bd35ca9f4e975b1b3
4bc70f5c2ec96d734b9407818cf0>,
兑换:空,
顺序:4294967295,
前置:<Outpoint:6477D78F01945D1C8F0C44735DC02703871B9F7F61DD5C759AaE69F133506E/1>,
硬币:空
}
],
输出:[
{
type:’脚本哈希’,
value:’0.00011244’,
脚本:<script:OP\u HASH160 0x14 0x4aa79fc5cf098ab5911134e0ba16c9e5466c307c OP\u EQUAL>,
地址:<address:type=scripthash version=-1 str=38VkjU2CxU77zhbq95iFr47njnGJVjpEpG>
},
{
type:’witnesspubkeyhash’,
value:’0.00002918’,
脚本:<script:OP\u 0 0x14 0xcd83248f8bcd6093e14e7794bd22f6dc3edbbcb9>,
地址:<address:type=witness version=0 str=bc1qekpjfrute4sf8c2ww72t6ghkmsldh09ewyr35p>
}
],
锁定时间:0
}
输出
输出值:11244
输出:未定义
(node:8138)未处理的PromisejectionWarning:TypeError:无法读取未定义的属性“toString”
在EventEmitter.<anonymous>(/home/mmmilione/api/index.js:64:66)
在EventEmitter.emit(events.js:210:5)
在Socket.handleEvent(/home/mmmilione/api/node\u modules/bsock/lib/Socket.js:685:19)
在Socket.handlePacket(/home/mmmilione/api/node\u modules/bsock/lib/Socket.js:620:21)
在Socket.handleMessage(/home/mmmilione/api/node\u modules/bsock/lib/Socket.js:526:21)
在Socket.handleFrame(/home/mmmilione/api/node\u modules/bsock/lib/Socket.js:448:21)
在解析器中。<anonymous>(/home/mmmilione/api/node\u modules/bsock/lib/socket.js:150:20)
在Parser.emit(events.js:210:5)
在Parser.feedBinary(/home/mmmilione/api/node\u modules/bsock/lib/Parser.js:40:10)
在Socket.onMessage(/home/mmmilione/api/node\u modules/bsock/lib/Socket.js:238:17)
(node:8138)未处理的PromisejectionWarning:未处理的承诺拒绝。这个错误要么是由于在没有catch块的异步函数中抛出,要么是因为拒绝了一个不存在的承诺
用.catch()处理(拒绝id:2)
(node:8138)[DEP0018]弃用警告:未处理的承诺拒绝已弃用。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。
我的代码:
nodeSocket.bind(’tx’,(raw)=>{
const newTX=TX.fromRaw(原始);
console.log(’节点–TX事件:\n’,newTX);
console.log(“输出”);
//newTX.outputs.forEach(输出=>{
for(排放=0;输出<newTX.outputs.length;输出++){
console.log(’输出值:’,newTX.outputs[OUT].value);
console.log(’OUT:’,newTX.outputs[OUT].address);
console.log(’OUT Address String’,newTX.outputs[OUT].Address.toString(’main’));
}
});
如您所见,当我记录TX时,我可以看到前面提到的wierd格式的输入的地址属性。
但是,当我尝试单独记录它(仅记录地址)时,它返回未定义。
结果,当我试图调用toString方法时,应用程序抛出一个错误,说它无法读取undefined的toString属性。
bcoin公司

回答
0
看起来你在用
console.log(`address:${address}`)
它将在这里调用自定义检查函数。
你需要做的就是直截了当的打电话
address.toString(’main’)
定义如下
如果您想与开发人员进行更具交互性的交谈,我鼓励您联系我们的slack或IRC#bcoin。
分享
改进这个答案
跟随
回答是5月3日20点16分58秒
针头
427222金徽章1818银徽章3333铜徽章
坏消息,我的朋友。这不管用Mario Mazzola 5月3日20:19:48
加入slack或irc,我们可以一起调试。我不知道你从哪里得到地址对象,也不知道你是如何解析它的pinhead 5月3日20点19分53秒
添加评论
你的答案

时光素材-香车美女  (60)blockchainBTC比特币区块链www.qkl91.com

发表评论

邮箱地址不会被公开。 必填项已用*标注