当没有获得前一个块时,区块链节点在接收到新块时的行为如何?

时间:2018-03-17 16:56:16

标签: p2p blockchain bitcoin ethereum consensus

AFAIK块验证的一部分是检查它是否包含有效的先前块散列。但是,让我们想象一下,由于某种原因(网络故障等),前一个块永远不会到来。不会节点丢弃以下所有块吗?

我想知道这个问题是如何解决的?节点是否通过请求对等体定期检查整个链?这究竟是如何实现的?

谢谢!

1 个答案:

答案 0 :(得分:1)

我假设你不是在谈论采矿。所以:

在请求块N + 1之前,节点将询问块号N.是的,如果块号N不存在,则大多数块N + 1将被丢弃,但这是无关紧要的。因为节点不仅仅是作为接收端才能获得块。它可以联系它周围的所有其他节点,并询问块号N.如果所有这些节点都没有块号N,那么它就不存在了!

请注意,在更广泛的范围内,每个节点都会向其对等方询问节点号N,并验证此块是否遵循协议规则。这是共识的一部分。

如果我们谈论采矿,情况就不同了。你可以想象两个竞争矿工创造积木。如果矿工没有区块N,他会继续尝试挖掘该区块。如果他在挖掘后接收到块号N,那么矿工就会忽略它,我们在区块链中有一个带有两个分支的临时分支,而块N + 1将有两个不同的版本。现在决定哪个分支存活的基本上是更快开采的分支。任意共识规则是较长链始终是正确的链。当存在更长的链条时,所有矿工都认为这条链是正确的。

之所以如此有效,是因为在比特币中挖掘块的可能性超过10分钟(或一般的块时间)。

下面的图像可以看作随着时间的推移(比特币)挖掘块的概率。

Probability of mining a block over some time

这就是为什么在很短的时间内创建区块链是错误的。因为如果时间很短(比如10秒),在区块链稳定之前会有大量的货叉。