Skip to content

叔块

叔块

叔块(Uncle Block)的概念,目前只有以太坊中有。

An image

如上图,根据最优链选择规则,在把造成分叉链的区块4抛弃后,它就成为了孤块

An image

孤块在比特币区块链中也是存在的,因为比特币公链也有分叉的情况,但是在比特币区块链中,挖出孤块的矿工节点是得不到BTC奖励的,也就是没有任何奖励。而以太坊区块链不是这样的,以太坊区块链中挖出孤块的矿工也有获得ETH奖励的可能性,这是两者的差异。

孤块在以太坊区块链中是有机会成为叔块的,当一个孤块被另一个符合层级限制内的区块采纳为叔块的时候,挖出这个孤块的矿工就会获得以太坊ETH奖励,此时的孤块也就变成了叔块。

那么为什么称为而不是其他名称呢?这里实际上是类比了人类的亲戚关系。

如下图所示,主链中的区块4和变成了叔块的区块4拥有相同的区块高度,就是高度4,因为分叉的原因,导致叔块4最终变成了主链区块4的附属块,对于区块5来说,主链的区块4才是它的父区块,而由于同级关系,相对于区块5来说,区块4的附属块都是它的叔叔级别的块,故称为叔块

An image

打包规则

假设要将分叉区块A打包成为区块B的叔块,在代码层面就是在区块B的Header中,将区块A的数据绑定到区块B的Uncle变量字段中,叔块打包的规则如下。

An image

  1. 区块A必须是区块B的第X层祖先的同层级高度的分叉区块,2<=X<=7,

  2. 区块A必须有合法的Block Header(区块头部)。

  3. 区块A必须还没成为过别的区块的叔块。

  4. 区块B已经打包了的叔块必须还没有达到2个的数量,即一个区块最多只能有2个叔块。

  5. 区块A一旦成为叔块,当它作为分叉区块时,打包了的交易会重新回到节点的交易池中,等待重新被打包到区块内。

奖励规则

叔块的奖励规则是由以太坊的Ghost协议(也称为幽灵协议)制定的,挖出叔块的矿工可以获得奖励。挖出叔块的矿工的奖励机制,它的奖励计算公式如下:

go
(uncleNumer + 8 - headerNumber) X blockReward / 8

上述公式中的3个变量说明如下:

  • uncleNumber:代表当前叔块的高度,也就是它的区块号。
  • headerNumber:代表当前正在被打包的区块的高度。
  • blockReward:代表矿工挖出区块时的基础奖励值,现在是3ETH(君士坦丁堡版本后是2ETH),曾经是5ETH。
go
满足关系:headerNumber - 6 < uncleNumber < headerNumber - 1

假设 headerNumber = 17,那么 uncleNumber 的高度范围是 11 < uncleNumber < 16,奖励公式的取值范围是 ( 2/8 ~ 7/8 ) * blockReward。

由于这个规则,导致了叔块的奖励也有对应的层级,当基础奖励值 blockReward 是 3ETH 的时候,它的奖励层级表如下表所示。

间隔层数报酬比例报酬(Eth)
17/82.625
26/82.25
35/81.875
44/81.5
53/81.125
62/80.75

叔块存在的意义有二:一是基于挖矿节点奖励回馈,二是保持生态发展平衡。

以太坊为了将出块时间缩短,导致了软分叉的出现更加频繁,叔块被产生的概率就比较高,如果类似比特币的设计,对产生叔块的矿工不给予奖励,就会有很多矿工因为产生了叔块而获取不到任何奖励,积极性降低,不利于以太坊生态的发展,所以以太坊团队引入了叔块的概念。