背景

        由于以太坊中生成区块的速度较快,平均15秒产生一个区块,这样所造成的一个后果是,区块链分叉会成为一种常态。如果按照比特币系统中的方法,不在最长合法链上的区块都将成为orphan block,得不到任何出块奖励,那么将会造成挖矿奖励的分配不公。因为,如果在某个时间点,同时有3个矿工挖到了区块,那么将会生成3个分叉,而拥有算力最多的矿工挖出的区块更有可能被延长成为最长合法链,那么拥有算力较少的矿工将很难获得出块奖励。
        为了解决上述问题,以太坊中采用了GHOST协议。

早期的GHSOT协议

        在早期的GHOST协议中,最多可以有两个分叉上的区块作为最长合法链上当前区块的叔区块(uncle block),每个挖到叔区块的矿工可以获得正常出块奖励的7/8,而挖到包含叔区块的当前区块的矿工可以额外获得‘正常出块奖励*1/32*叔区块个数’的奖励。如下图所示。

前缀树

        但该版本的协议有一些缺点。第一,最多只有两个分叉上的区块成为叔区块,也就意味着,如果产生了更多的分叉,那么将会存在挖到区块的矿工依然得不到任何奖励。第二,如果最长合法链上的区块发现叔区块发现的太晚,那么挖到这些分叉中的区块的矿工也将得不到任何奖励。第三,可能会存在一些矿池出于商业利益,故意不包含“叔区块”。

当前使用的GHOST协议

        下面是目前以太坊中使用的GHOST协议。
        不对叔区块的个数做出明确的限制,且7代以内的分叉上的区块(需要有共同的祖先)都可以作为当前区块的“叔区块”,隔代越久,挖到叔区块的矿工获得的奖励越少。而当前区块得到的额外奖励不变,依然是‘正常出块奖励*1/32*叔区块个数’。如下图所示。

前缀树

        并且,在该版本的GHOST协议中还规定,当一个分叉的长度大于1时,该分叉中只有第一个区块可以作为当前区块的叔区块得到奖励,该区块后面的所有区块都得不到任何奖励(这样可以扼制分叉攻击,使分叉攻击的风险增加)。如下图所示。

前缀树

最后更新: 2019年03月25日 21:31

原始链接: http://yoursite.com/2019/03/25/以太坊-GHOST协议/