当前位置:首页 > 比特币新闻 > 正文

致密区块(Compact block): 比特币全节点用户的福音

来源: 互联网时间:2016-06-14 17:22:00

致密区块中继(Compact block relay),即BIP152(比特币改进提议),这种方案能够减少p2p网络节点广播区块所需的带宽数量。

概要

当全节点之间已共享许多相同内存池(mempool)内容时,使用简单的技术,就可能减少将新区块广播至全节点所需的带宽数量。发送方节点向接收方节点发出致密区块“概要内容”,这些概要内容包含以下这些信息:

  1. 新区块的80字节区块头;
  2. 缩短交易标识符(txids),其目的是为防止拒绝式服务攻击;
  3. 一些发送节点预测的,但接受对等节点不具备的完整交易;

接收方节点将尝试使用接收到的信息,以及在其内存池(memory pool)当中的交易,来重新构建整个区块。如果它仍然缺失某些交易,它将请求广播节点。

bitcoin

而这种方法的优点,是交易数据仅需在最佳的情况下进行发送(当它们在初始广播当中),其大幅度地降低了总带宽。

此外,致密区块中继提议,还提供了第二种操作模式(称为高带宽模式),其中接收方节点,直接请求它的一些对等节点来发送新的区块,而无需先获得许可,这可能会增加带宽(因为在同一时间内,两个对等节点可能会发送同一个区块),但它进一步降低了区块传播的时间。

下图显示了当前节点发送区块,以及致密区块中继这两种操作模式。

protocol-flow

传统的中继方式,一个区块(灰色长条)是由节点A负责验证,然后节点A将发送一条inv消息到节点B ,以请求允许发送这个区块。节点B回复区块的请求(getdata),然后节点A发送区块。

在高带宽中继中,节点B使用了sendcmpt(1) (发送致密区块)来告诉节点A,它想要尽快接收区块。当一个新的区块抵达时,节点A会执行一些基本的验证(例如验证区块头),然后自动将区块头、缩短交易标识符(txids)以及预测缺失交易(如上所述)发送给节点B。节点B尝试重新构建区块,并请求任何仍处于丢失状态(getblocktxn)的交易,它们是由节点A发送(blocktxn)的。在此背景下,在将区块添加到各自的区块链副本之前,两个节点都完成了完整的区块验证,并和以前一样保持了相同的全节点安全性。

在低带宽中继中,节点B使用了sendcmpt(0)来告诉节点A,它想要尽量减少带宽的使用。当一个新的区块抵达时,节点A会完整验证它(因此它不会中继任何无效区块)。然后它会询问节点B是否想要区块(inv),这样,如果节点B已从另一个对等节点收到了区块,它就可以避免再次下载。如果节点B不想要区块,它要求在致密模式下(getdata(CMPCT))进行,节点A发送区块头、缩短交易标识符(txids)以及预测丢失交易。节点B试图重建区块,请求仍处于丢失的交易,而节点A发送这些交易。然后节点B完整验证这些区块。

快速中继网络的因素如何考虑?

快速中继网络(FRN)由两部分组成:

  1. 目前在快速中继网络中的节点集合。
  2. 快速区块中继协议(FBRP)。

目前在快速中继网络(FRN)中的节点,都是经过精心挑选的。这些节点的故障将导致挖矿算力的浪费,并导致挖矿的进一步集中化。目前,有大多数挖矿算力已连接到该网络。

最近,一些矿工已经在测试部署一个UDP,以及被称为RN-NextGeneration的向前纠错(FEC)协议。使用致密区块的协议层改进,将缩小节点网络和一般P2P网络之间的性能差距。P2P网络增加的稳固性以及区块广播的速度,将对网络在未来的发展中发挥作用。

这货能扩展比特币么?

致密区块的目的是为节点减少带宽峰值,提高用户网络体验。然而,当前比特币挖矿所集中存在的压力,很大一部分存在于区块广播的延迟,正如下面的视频描述。致密区块版本1,它的主要目的,不是为了解决扩展比特币这个问题。

https://www.youtube.com/watch?v=Y6kibPzbrIc

谁会从致密区块中受益?

想要中继交易,但网络带宽却有限的全节点用户。如果你只想尽可能地节约带宽,同时仍能够将区块中继给对等节点,目前在Bitcoin Core v0.12. 版本软件当中,已启用了blocksonly模式。在blocksonly模式下,节点只接受被包含在区块当中的交易,因此它不会接受额外的交易。

降低p2p网络的区块广播时间,能够创建一个更为健康的网络。

致密区块的编码、测试、审查以及部署的时间表是什么?

首个版本的致密区块已经在BIP152提出了,并且有了一个工作实施,已有开发者社区在积极进行测试。

BIP152:https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki

参考实现:https://github.com/TheBlueMatt/bitcoin/tree/udp

它能适应更快的p2p中继吗?

致密区块方案可以有其他的改进,这涉及到了RN-NG以及两个方面:

  1. 首先,用UDP传输来取代TCP区块信息传输。
  2. 第二,使用向前纠错(FEC)的代码,来丢弃数据包和预测的发送丢失交易数据。

这是一个新的想法么?

使用布鲁姆过滤器来改进区块广播的方案( bloom filters)在若干年前就已经提出了,Pieter Wuille (sipa)在2013年时就在尝试这种方案。

更多的阅读资源:

https://people.xiph.org/~greg/efficient.block.xfer.txt

https://people.xiph.org/~greg/lowlatency.block.xfer.txt

https://people.xiph.org/~greg/weakblocks.txt

https://people.xiph.org/~greg/mempool_sync_relay.txt

https://en.bitcoin.it/wiki/User:Gmaxwell/block_network_coding

http://diyhpl.us/~bryan/irc/bitcoin/block-propagation-links.2016-05-09.txt

http://diyhpl.us/~bryan/irc/bitcoin/weak-blocks-links.2016-05-09.txt

http://diyhpl.us/~bryan/irc/bitcoin/propagation-links.2016-05-09.txt

免责声明:

1.本文内容综合整理自互联网,观点仅代表作者本人,不代表本站立场。

2.资讯内容不构成投资建议,投资者应独立决策并自行承担风险。