GHOST(Greedy Heaviest Observed Subtree)是一种主链选择协议(不是侧链选择协议)。举例来讲:经典的Proof-of-Work(POW)是以取最长的主链为基本原则,GHOST协议则是以包含子树数目最多为基本原则。segmentfault
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的长链并不能被认为是主链.spa
Ghost协议的优点在于:blog
孤块奖励问题:rem
被引用的叔块,其矿工的报酬和叔块与区块之间的间隔层数有关系。get
间隔层数 | 报酬比例 | 报酬(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 |