组装和选择区块链

区块链的组装和最大累积工作量(最大难度)的区块链的选择。一旦节点完成一个新区块的验证,它将尝试将区块和已存在的区块链进行连接,形成新的链条。

节点维护着三套区块的集合:连接到主区块链的区块;形成主链分支的区块(次链);在已存在的链中均找不到父区块的新区块(孤儿)。只要不符合验证规则的任意一条,无效区块会立即被拒绝,不会被加入任何区块集合中。

“主链”在任何时候都是拥有最大累积难度的区块链。在大多数情况下,这也是含有区块最多的链,例外的情况是,同时存在两条长度一样的链,但其中一条的工作量证明更多。主链也可能存在分支,分支上有与主链区块存在同辈关系的区块。这些区块虽然同样是有效的,但不是主链的一部分。保留这些分支的目的在于,某些分支可能会在未来得以延伸,并在难度值上超过主链,那么后续的区块就会引用它们。在(“区块链分叉”)中,我们将看到由于几乎同时挖出了相同高度的区块,导致了次链的产生。

当节点接收到新区块时,会尝试将其插入已存在的区块链中。首先在区块中检查“前序区块哈希”字段,它是新区块对其父区块的引用。接着,在已存在的区块链中查找这个父区块。大多数时候,父区块会在主链的“顶端”,意味着新区块延长了主链。举例来说,新区块277316有一个到其父区块277315的哈希的引用。大多数节点接收到区块277316前,在其主链上已经存在区块277315,并处于区块链顶部,接收277316后将其与主链相连,并将区块链延长。

有时,正如“区块链分叉”中所描述的,新区块延长了一个链,但它却不是主链。在这种情况下,节点将区块连接到次链上,然后比较次链和主链的累积难度。如果次链的累积难度超过了主链,该节点将在次链上重新收敛,也就是说它将选择次链作为新的主链,而原来的主链则成了次链。如果该节点是矿工,它之后将在这个更新更长的链上构建区块,并进一步延长它。

如果接收到的是一个有效的区块,但是其父区块却无法在已存在的链上找到,那么这个区块就被当作是一个“孤儿”区块。孤儿区块被保存到孤儿区块池中,直到它的父区块到达本节点。一旦接收到父区块并连接到已存在的链条上,孤儿区块就可以从孤儿区块池中被取出,并与其父区块相连,成为区块链的一部分。孤儿区块的产生通常是因为两个区块被挖出的时间间隔比较短,而接收顺序刚好相反(子区块先于父区块到达本节点)。

通过选择最大难度的链条,所有节点最终将达成全网范围内的共识。当更多的工作量证明加入,某个可能的链条延长时,不同链条间暂时性的差异,最终将会得到解决。挖矿节点根据它们的挖矿能力,通过创建新区块的方式,“投票”决定待延长的链条。当它们开采出新的区块并延长了区块链条时,这个新区块本身就代表了它们的投票结果。

验证新区块

工作量证明算法

铸币交易/币基交易

868区块链学习网为您整理《组装和选择区块链》仅供参考。