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协议解决了两个问题:摒弃了单一的最长链原则, 取而代之的是最大子数原则;孤块奖励问题。
如下图所示:
image
如果单纯的计算最长链原则, 主链应该是 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 |
博客地址:http://www.jouypub.com
简书主页:https://www.jianshu.com/u/756c9c8ae984
segmentfault主页:https://segmentfault.com/blog/jouypub
腾讯云主页:https://cloud.tencent.com/developer/column/72548
网友评论