你可能会觉得我的问题相当不切实际或胡说八道。但我必须在这里问。
我想捕获通过主网络传播的所有事务,并检测是否有新的块被挖掘。我不想成为一个完整的节点或spv节点。从技术上讲,我知道这正是所有full/spv节点时不时所做的。然而,我找不到一个很好的参考来教我怎么做。
这是一种方法吗?任何技术资源都将不胜感激。
客户
网络
分享
改进这个问题
跟随
两天前问的
达伍德法拉哈蒂
12344青铜徽章
新贡献者
这是可能的,但你必须相信别人昨天的普拉扬克
@Prayank听起来不错。请你详细说明一下好吗Dawood Falahati昨天
添加评论
2个答案
2
希望捕获通过主网络传播的所有事务,并检测是否有新的块被挖掘。我不想成为一个完整的节点或spv节点。从技术上讲,我知道这正是所有full/spv节点时不时所做的。然而,我找不到一个很好的参考来教我怎么做。
显然,完整节点和SPV节点必须从某处获取它们的信息。而某个地方只是P2P网络上的其他节点。
P2P协议是节点用来相互通信的协议。有一些关于https://developer.bitcoin.org/devguide/p2p_network.html,一些关于https://en.bitcoin.it/wiki/Protocol_documentation). 它的现代变化被提议为BIPs(https://github.com/bitcoin/bips),通常是向后兼容的更改,仅在支持它的客户端之间使用。
具体地说,事务通过首先使用“inv”消息宣布它们的散列来转发。然后,接收方选择从哪个对等方获取完整的事务数据,并发送“getdata”消息。然后,选定的对等方以“tx”消息进行响应。还有其他可用的机制,例如旧的(并且基本上已经废弃的)BIP37事务过滤和新的BIP157客户端过滤。
对于积木来说,要复杂一些。该序列首先使用“getblocks”请求块信息,然后用“inv”对块进行响应,“getdata”请求完整数据,并用“block”对完整块本身进行响应。BIP152压缩块提供了一种更有效的机制,使接收方能够避免在已经拥有的块中接收事务。BIP130 sendheaders支持使用“header”消息而不是“inv”消息来宣布块的替代方法。
那么,完整节点与SPV节点或其他节点的区别是什么呢?他们执行的验证级别。完整节点将完全验证它接收到的所有块和事务。如果你不想这样做,就不要这样做-如果你愿意相信你所联系的人。你可以自己实现P2P协议,或者使用现有的实现(很多语言中都有),连接到任何你喜欢的对等点,如果你做得对,他们会开始给你一个块和事务流。
分享
改进这个答案
跟随
16小时前回答的
彼得·维尔
68.1k88金徽章146146银徽章223223铜徽章
添加评论
2
中微子是轻客户端和改进版的SPV节点:https://bitcoin-s.org/docs/getting-setup#neutrino-节点
有其他方法可以获得有关事务和块的信息,但您必须信任其他人:
对一个或多个块资源管理器使用API。例子:https://mempool.space/api
请少数运行节点的人广播此信息。示例:我们已经在某种程度上信任管理DNS种子的人员,这样他们就可以使用自己的节点广播有关事务和块的信息。
对整个族使用一个节点。示例:设置一个完整的节点,供本地网络中的每个人使用。如果你和可以信任的家庭成员住在一起,而且你已经在家里的所有设备上使用了相同的Wi-Fi。