BTC-比特币网络(区块链技术与应用)

比特币网络

新的交易要发布到比特币网络上,矿工将交易打包成的区块也要发布到比特币网络上

比特币协议工作在应用层,它的底层是P2P Overlay Network

比特币网络中的P2P网络是很简单的,所有结点之间都是对等的,没有超级结点。要加入这个网络,至少要有一个种子结点(seed node),和种子结点联系,它会告知它所知道的网络中的其它结点(有点像构造路由表的过程)。

区块链里面网络节点众多,新节点刚开始找邻居的时候,是很难一下子就找到自己的对等节点的。为了提高网络发现的效率,在整个网络里面存在一类特殊的节点,这类节点称作:种子节点。

如果把新节点找到对应节点的过程是搬家找邻居,那么种子节点就是你要去的那个小区的居委会大妈。作为居委会大妈的种子节点会努力的帮你寻找可以与你对应的邻居节点。当你找到了对应的邻居节点的时候,大妈就不会管你了。

结点之间通过TCP来通信,有利于穿透防火墙。要离开网络也不必通知其它结点,只需要直接退出应用程序,其它结点一直没有听到你的消息,过一段时间就会将你删除掉。

比特币网络的设计原则是简单、鲁棒,而不是高效。

  • 每个结点维护一个邻居结点的集合,消息在网络中采用flooding方式传播,结点第一次听到某个消息,会将它传播给所有邻居结点,同时记录一下自己已经收到过这个消息了。

  • 邻居结点的选取是随机的,没有考虑底层的拓扑结构。比如美国的一个结点可能和中国的一个结点是邻居结点。这样设计的好处是增强鲁棒性,牺牲了效率。

新发布的交易的传播

比特币网络中,每个结点要维护一个等待上链的交易的集合,这个集合中的交易都是要写入区块链的合法的交易,结点第一次收到这个交易的时候就会把它写入这个集合,并转发给所有邻居。

如果有两个有冲突的交易,几乎同时发布到网络上,每个结点根据其位置的不同,可能先收到的交易是不同的,那么另一个交易对于这个结点而言就是非法的了,不会被收纳到集合中。

它先听到A->B的交易,将其写入到了自己的交易集合中。接下来它收到了一个新发布的区块,其中包含A->B这个交易,说明这个交易已经被写入区块链了,所以就要在自己的交易集合中将其删除掉。如果先听到了A->C的交易,也会删掉,因为检测到双花攻击。

best effort

一个交易发布到比特币网络上,未必所有结点都能收到(有的结点不一定按照比特币协议的要求来转发,可能合法的不转发,不合法的又转发了),而且不同结点收到交易的顺序也很可能是不一样的(网络传输中的延迟可能很大)。这是一个去中心化的系统中要面临的实际问题,只能尽力而为。

上一篇:BTC 扫描区块交易(搜索区块交易)实现方法


下一篇:BTC-数据结构(区块链技术与应用)