乐趣区

以太坊Ghost协议和叔块

  GHOST(Greedy Heaviest Observed Subtree)是一种主链选择协议(不是侧链选择协议)。举例来说:经典的 Proof-of-Work(POW)是以取最长的主链为基本原则,GHOST 协议则是以包含子树数目最多为基本原则。
  POW 协议不能以太快的频率(上图的 Block Generation Rate)发布新的区块,因为太快发布区块,区块中的数据重复验证 6 次(若干次)立即永久封存地区块中,一旦 51% 算力攻击一旦发生,double-spend 等糟糕问题会出现,恶意的数据容易永久封存于区块中,整个 blockchain 系统需要足够长的时间来处理和恢复黑客恶意攻击所造成的破坏——这段时间可以理解为系统的有效修复时间,也可以理解为交易信息被确认的等待时间,从安全的角度,显然这段时间越长,交易数据可靠性被验证的越多,所以越可靠。相比而言,GHOST 协议就没有这个问题了,因为在 GHOST 协议控制下,“区块发布太快”和“51% 攻击持续性地控制主动权”二者没有必然的关系,GHOST 不是采用绝对算力优势获取主动权的协议。这也是为什么以太坊的出块速度要远远大于区块链。
  在比特币协议中,最长的链被认为是绝对的正确。如果一个块不是最长链的一部分,那么它被称为是“孤块”。一个孤立的块也是合法的,但是发现的稍晚,或者是网络传输稍慢,而没有能成为最长的链的一部分。在比特币中,孤块没有意义,随后将被抛弃,发现这个孤块的矿工也拿不到采矿相关的奖励。例如:挖矿节点 A 是一个矿池占有全网 30% 的算力,挖矿节点 B 占有全网算力的 10%,节点 A 会有 70% 的概率产生废块,节点 B 有 90% 的概率产生废块. 如果新旧区块之间产生的间隔太短, 则节点 A 会因为规模效应而比 B 节点更为高效。所以新旧区块的间隔过短会导致单一的矿池主导全网的挖矿过程。这个问题在以太坊中得到了很好的解决,根据 GHOST 协议,不认为孤块没有价值,而是会给与发现孤块的矿工以回报。孤块被称为“叔块”(uncle block),它们可以为主链的安全作出贡献,也同样能获得奖励,这激励了矿工在新发现的块中去引用叔块,减少了孤块的产生。
Ghost 协议解决了两个问题:摒弃了单一的最长链原则, 取而代之的是最大子数原则;孤块奖励问题。
如下图所示:
如果单纯的计算最长链原则, 主链应该是 0 -> 1B -> 2D -> 3F -> 3F -> 4C -> 5B. 如果采用了 GHOST 协议, 以前的 ” 废块 ” 也会被考虑到主链的计算量中. 每一个节点下含一个子树, 兄弟节点之间子树节点最多的被选为主链. 这样一来 0 -> 1B -> 2C -> 3D -> 4B 成为主链, 如果采用 GHOST 协议, 一个攻击者仅仅提供一个 1A 到 6A 的长链并不能被认为是主链.
Ghost 协议的优势在于:

以太坊十几秒的出块间隔,大大增加了孤块的产生,并且降低了安全性。通过鼓励引用叔块,使引用主链获得更多的安全保证(因为孤块本身也是合法的)
比特币中,采矿中心化 (大量的集中矿池) 成为一个问题。Ghost 协议下,叔块也是能够获得报酬,可以一定程度上缓解这个问题。

孤块奖励问题:

主链节点获得 base reward;
一个节点最多引用两个叔块;
叔块必须是区块的前 2 层~ 前 7 层的祖先的直接子块;
被引用过的叔块不能重复引用;
引用叔块的区块,可以获得挖矿报酬的 1 /32,也就是 51/32=0.15625 Ether,最多获得 20.15625=0.3125 Ether;
主链节点的兄弟(非主链节点)获得 ((叔块高度 +8- 当前块的高度)/8 )*base reward,如下图表格所示;
交易费用 (transaction fee) 不会分配给叔块

被引用的叔块,其矿工的报酬和叔块与区块之间的间隔层数有关系。

间隔层数
报酬比例
报酬(ether)

1
7/8
4.375

2
6/8
3.75

3
5/8
3.125

4
4/8
2.5

5
3/8
1.875

6
2/8
1.25

欢迎订阅「K 叔区块链」– 专注于区块链技术学习 博客地址:http://www.jouypub.com 简书主页:https://www.jianshu.com/u/756c9c8ae984segmentfault 主页:https://segmentfault.com/blog/jouypub 腾讯云主页:https://cloud.tencent.com/developer/column/72548

退出移动版