是指没能成为区块链最长链的一部分的区块(陈旧的区块),但被后续区块收录时,这些区块称之为“叔块”。
它是针对区块而言的,是指被区块收录的陈旧的祖先孤块,它没能成为区块链最长链的一部分而被收录。
是针对当前区块所的而已的叔辈区块,一个区块最多可以记录 7 个叔块。叔块也是数据合法的区块,只是它所在的区块链分支没有成功成为主链的一部分。
如上图所示,新区块 E,它可以收录两个绿色的孤块B和C,但是灰色的区块不能被收录,因为他们的父区块并不在新区块所在的区块链上。而黄色区块和红色新区块是同辈区块,不能被新区块作为叔块收录。
在比特币中,因临时分叉(软分叉),没能成为最长合法链上的区块的区块,称之为孤块,孤块是没有区块奖励的。研究发现, 比特币的全网需要12.6秒一个新的区块才能传播到全网95%的节点。比特币系统,是平均10分钟才出一个区块,有足够的时间将新区块广播到全网其他节点,这种临时性的分叉几率就相当小。根据历史数据,大概平均3000多个区块,才会出现一次临时性分叉,相当于20多天出现一次这种临时性分叉,属于比较“罕见”的情况。
但是以太坊的出块时间已经缩短到12 到14 秒一个区块。更短的时间意味着,临时分叉的几率大幅提升。这是因为当矿工A挖出一个新区块后,需要向全网广播,广播的过程需要时间的。 由于以太坊出块时间短,其他节点可能还没有收到矿工A发布的区块,就已经挖出了同一高度的区块,这就造成了临时分叉。在以太坊网络中,临时性分叉发生的几率在 6.6% 左右。
上图数据来源于 https://etherchain.org/ (2020年06月03日),当前以太坊叔块率为 6.6%。意味着在以太坊网络中,每 100 个区块,大约有 7 个叔块产生。如果按照平均 13.5 秒的出块时间计算,一个小时内有约 17.6 次临时分叉。
以太坊系统出现临时性分叉是一种普遍现象,如果采取和比特币一样处理方式,只有最长链上的区块才有出块奖励,对于那些挖到区块而最终不在最长链上的矿工来说,就很不公平,而且这种“不公平”将是一个普遍情况。这会影响矿工们挖矿的积极性,甚至可能削弱以太坊网络的系统安全,也是对算力的一种浪费。因此,以太坊系统对不在最长链上的叔块,设置了叔块奖励。
当节点不断接受到区块时,特别是同一高度的多个区块,会让以太坊陷入短期的软分叉中,或者在多个软分叉分支中来回切换。一旦出现软分叉,那么意味着有一个区块没能成为最长链的一部分。
比如上图中,挖矿依次接收到 A、B 、C ,会在本地校验和存储这些区块,但根据最长链规则最终会切换到分支B上。那么在此刻,A和C 暂时成为了孤块。矿工会基于 B 挖取下一个新区块D。
此时,D 就可以将本地还暂存的孤块 A 和 C 作为它的叔块而收录到区块 D 中。当然 D 不仅可以收录第一代祖先,还可以收录七代内的孤块。但有一些限制条件,以下图新区块 N 为例:
矿工在开挖新区块,准备区块头信息时,矿工将从本地节点存储中获取七代内的所有家族区块,根据上述规则选择最多两个叔块。另外,在选择时本地叔块优先选择。
叔块的奖励分为两部分:奖励收录叔块的矿工和奖励叔块创建者。具体的奖励分配如下:
奖励叔块的创建者
叔块创建者的奖励根据“近远”关系而不同,和当前区块隔得越远,奖励越少。 $$ \text{叔块奖励}=\frac{8-(当前区块高度-叔块高度)}{8} * \text{当前区块挖矿奖励} $$
叔块 | 奖励 | 按挖矿奖励 2 ETH计算 |
---|---|---|
第一代 | 7/8 | 1.75 ETH |
第二代 | 6/8 | 1.5 ETH |
第三代 | 5/8 | 1.25 ETH |
第四代 | 4/8 | 1 ETH |
第五代 | 3/8 | 0.75 ETH |
第六代 | 2/8 | 0.5 ETH |
第七代 | 1/8 | 0.25 ETH |
注意叔块中所产生的交易费是不返给创建者的,毕竟叔块中的交易是不能作数的。
收录叔块的矿工
该矿工即为当前新区块的矿工,他处理获得原本的区块挖矿奖励(2 ETH)和交易手续费外,还能获得收录叔块奖励,每收录一个区块将得到多得 1/32 的区块挖矿奖励。
以区块 10192970 为例:
该区块矿工 2Miners:SOLO 总共获得了 2.385338652682918613 ETH奖励,其中:
而收录的一个叔块是第 1代叔块,奖励 2 ETH 的 7 /8。
新区块收录的叔块是只记录叔块区块头的,叔块区块头信息记录在新区块体中,新区块头中记录了叔块集合的默克尔哈希值。