Block Propagation 指新块在 Bitcoin 网络的计算机之间传播的过程。传输把数据送到手中;接收节点仍需自行检查,确认块是否有效,以及能否纳入自己接受的历史。
假设安娜从事挖矿,刚找到一个包含交易的新块。区块把交易组成一批,加入共同历史记录。Bitcoin 没有一个把块同时发给所有人的总台。安娜的节点先通知相邻节点,也就是与它直接连接的计算机。消息再继续向外传递,不同参与者收到它的时间各不相同。这段旅程就是 Block Propagation。传播快慢会影响其他矿工还要依据旧的历史继续工作多久。 [1] [6]
彼得在家运行 Full Node,也就是按照规则检查 Bitcoin 区块和交易的软件。仅仅得知有了新块还不够,他需要完整内容才能验证。他可以把整个块下载下来,也可以利用收到的消息和已有的交易重新拼出它。这就像拿到一份书页清单,再从自己的书库中找齐页面:传来的东西少了,最后组成的书却必须相同。 [1] [7]
块有一个简短的头部,称为 Block Header。它包含对前一个块的引用,也让节点能够检查 Proof of Work,即挖矿所要求的计算工作证明。矿工通过反复计算寻找这个证明,其他人则能快速检查找到的结果。这是有用的初步检查,却不能证明每笔支付都有效。单看头部,彼得无法知道交易签名是否有效,也无法确认花费的资金是否确实可用、尚未被花掉。数字签名利用私钥这个秘密数值证明付款获得授权,同时不泄露私钥。UTXO 是尚未花费的交易输出,记录了一笔金额以及花费它所需满足的条件。 [6] [8]
很多交易在块被挖出之前就已经到达彼得的节点,保存在他的 Mempool 中,这是本地的未确认交易集合。BIP 152 所描述的 Compact Blocks 利用这一点:消息主要发送简短的交易标识符,再附上一些完整交易,而不把所有交易重发一遍。彼得将熟悉的部分按正确顺序拼起来。缩小的是网络消息,不是最终验证的块;块的有效性规则也不变。 [2] [7]
全世界并不共用一个 Mempool。每个节点已知的交易可能略有差别,所以彼得可能缺少某些交易。他会请求缺失数据,或者退回到下载完整块的方式。这会多出一次请求与回应的往返时间,但不能因此猜测内容或跳过检查。实际能节省多少,也取决于接收者已经掌握了多少交易。 [2] [7]
BIP 152 的较快模式允许在所有交易检查完成之前转发块,但这不是盲目转发。发送方仍须进行规定的前置检查,包括是否连接到已验证的链、Proof of Work 是否成立,以及头部是否在密码学上对应所传输的交易。随后,传输与余下的检查可以同时进行。然而,Full Node 仍必须完成全部验证,才能把块纳入自己的活动历史。 [2] [4] [7]
安娜的块还没有传到所有人那里时,另一个矿工也可能找到连接同一个前序块的新块。网络的一部分短暂地看到一条有效分支,另一部分看到另一条。之后依据各条有效分支的累计工作量作出选择,而不是由计算机投票。落在接受链之外的有效块称为 Stale Block。更快的传播会缩短这种竞争发生的时间窗口,但不能完全消除它。 [6] [8]
如果安娜的块传播缓慢,其他矿工就更有机会在竞争者的块上继续挖矿,让她的块留在接受链之外。在那条历史中,她便拿不到这个块的奖励。因此,良好的连接不仅关乎方便,其优势还可能促使挖矿集中到连接更好的运营者手中。但一条慢线路本身既不是中心化程度的测量,也不是遭到攻击的证据。 [7] [8]
FIBRE 是一种专门用于快速传输块的系统。它试图减少网络延迟,包括丢失数据包带来的延迟;数据包就是所传消息的一小部分。这样的路线可能更早送达一个块,却不会让运营者获得替彼得判断块是否有效的权力。彼得的 Full Node 仍需检查同样的规则,不论数据从哪条路来。 [3] [9]
网络运行还要考虑数据量、隐私以及连接的抗故障能力。只依赖一条路线仍是弱点,哪怕它很快。不同改进的用途也要分清:BIP 330 是 Erlay 的一个组成部分,帮助相邻节点找出各自交易公告集合之间的差异。它并不替代 BIP 152 的块传输。共同目标是让通信更高效,同时保留每个节点的独立检查。 [1] [5]
要获得更完整的理解,请将本词条与以下词条结合阅读: Compact Blocks, Selfish Mining, Eclipse Attack, Initial Block Download, Bitcoin, Full Node. 反向关联还来自: Sybil Attack, Eclipse Attack, Selfish Mining, Compact Blocks.