Advertisement

北京大学肖臻老师《区块链技术与应用》ETH笔记 - 5.0 ETH中GHOST协议篇

阅读量:

5.0 ETH中GHOST协议篇

BTC系统的出块周期设定为10分钟,在对比之下,在以太坊生态系统中将出块时间缩短至约15秒。尽管在提高系统响应速度和处理能力方面取得了显著成效,但这种改动反而可能导致分叉现象普遍化,并进一步加剧分叉数量的增长。这使得针对共识协议的设计面临着严峻挑战。

在BTC网络上运行的情况下,在未位于最长合法链上的节点最终都会被弃用这一规定下,在这种情况下,在未位于最长合法链上的节点最终都会被弃用这一规定下

通常情况下

为此,以太坊开发了新的公式协议——GHOST 协议(该协议并非首次提出,并非首次提出过,并是对现有的 Ghost 协议进行了优化升级)。

5.1 GHOST协议

GHOST协议最初版本

如图所示,在以太坊系统中假定存在以下情况:A、B、C、D分别位于四个分支上;最终情况下随着时序推移B所在链成为最长合法链;因此A、C、D区块被弃用;但为了补偿这些区块所属矿工所做的工作;特给予这些区块一定的"补偿";并称之为"Uncle Block"(叔父区块)。规定当E区块发布时可包含上述A、C、D叔父区块;其中A、C、D叔父区块可获得出块奖励的7/8;同时为激励E包含叔父区块;规定每当E包含一个叔父区块即可额外获得1/32的出块奖励;为防止E过度包含叔父区块;规定每个区块最多只能包含两个叔父区块;因此E在获取自身出块奖励时最多可包含两个来自A、C、D的叔父区块

假设一位矿工提取了B元素随后他沿着当前所在链继续挖掘在E节点进行挖掘时则可将A元素纳入区块进行计算当他在dig mining过程中发现C同样是‘叔辈成员’则可停止挖掘将C纳入重组后的区块重新开始挖掘实际上由于dig mining process具有无记忆性特征不会影响成功概率。

最初版本缺陷:

由于叔父区块最多只能容纳两个, 如图所示出现三个该怎么办?或者自己的块E已经发布完毕, 然后才收到叔父块, 已经来不及处理了, 那么这个新接收到的块(A或C或D)则被视为废弃的块

由于矿工出于商业利益考虑,在实际操作中会选择避免包含对手方的叔父区块以规避潜在风险而导致收益减少的情况。具体而言,在这种情况下矿工方将无法获得7/8比例的出块奖励从而导致自身仅承担1/32的比例损失这一策略在双方存在激烈竞争时往往能够有效降低整体风险并最大化收益范围。当甲、乙两个大型矿池之间存在竞争关系时他们可以选择故意避免包含对方的叔父区块这种做法不仅自身承担的风险较小而且对对手造成的损失则会更加显著因此能够在一定程度上平衡双方的利益并实现共赢

Ghost协议新的版本

如图所示, 1是对上文示例的一个补充说明, 其中F是E之后新增的一个区块段. 由于规定E最多只能包含两个叔父级区块段, 因此我们假设E已经包含了C和D两个叔父级区块段. 此时, F也可以将A视为自身的叔父级块(实际属于祖父辈, 而非叔父辈). 若继续向下挖掘,F后续新增的区块段仍可包含B同辈级别的块(假定当前未完成对E、F的所有层级覆盖). 这样一来, 就完美地解决了原始Ghost协议版本存在的缺陷问题.

但这样仍然存在一定的问题。

我们对‘叔父’这一概念进行了延展。关键问题在于:确定‘叔父’这一定义跨越多少世代较为合理?如果我们设定在几千年之后再定义,则需要在未来相当长的时间内发布大量符合条件的‘叔父’区块(即每隔一代就发布一次),以便提高被后续主块包含的可能性。

这样就能让所有节点更方便地记录信息。考虑到包含几千年代的叔父区块这一重要特性,在区块链系统中维护繁重的状态数据是不可避免的事情。因此你的发布块包含了重要的叔父区块而其他节点也需要进行验证工作以确保系统的完整性与安全性。此外在设计7个世代内逐步递减的奖励机制时可以采用一种激励策略即随着时间推移每个后续世代所能获得的比例会逐渐减少从而引导各方尽快达成共识并实现新区块的有效合成。(然而目前的情况是无论M选择哪个世代来合成新区块(即矿池)每期都会获得1/32的概率这如何能激励尽早地进行合并呢?我的理解是A到F之间的分叉新区块很可能属于同一个矿池所以如果M能够优先整合自己所挖出的新区块那么其获得更大比例奖励的机会就会更高)

5.2 以太坊中的奖励

BTC: 固定奖励(主块奖金)+ 附加性奖励(交易相关费用, 占总固定奖金比例约为1%)。 ETH: 固定奖励(主区块奖金 + 包含辅助区块的额外奖金)+ 附加性奖励(燃料费用)。 BTC中, 通过逐步降低主块激励直至趋于零后主要依靠交易相关费用运作。 而以太坊中未有明确规定的机制用于调整主区位奖金。

以太坊系统中包含有叔父区块。是否应该执行这些叔父区块内的交易呢? 不行的!因为这些块与主链上的其他块可能会存在冲突的交易内容。此外,在之前的章节中我们已经指出过:由于没有动态奖励机制的存在,在接收一个叔叔节点生成的块时,并不需要对其中的具体交易进行有效性验证工作;相反地,则只需要进行有效性验证——即确认该块头信息是否符合当前网络的安全挖矿难度要求——即可确保系统的正常运行。

此外,在分叉后的堂哥区块(叔父的儿子)方面该如何处理?例如下图所示,在A->F这条链并非一条最长合法链的情况下,则B->F这些区块又该如何处理?是否应该给予挖矿补偿呢?如果规定将下面整条链作为一个整体给予出块奖励这在一定程度上激励了分叉攻击(降低了分叉攻击的成本因为即使攻击失败也会获得一定的奖励)。因此在以太坊系统中只认可A区块作为叔父区块给予其相应的补偿而对其后产生的所有区块均不予承认。

5.3 以太坊真实数据

Etherscan平台是一个提供实时监控以太坊数据的工具。以下图片是我于2020年2月28日在该平台上获取的截图,并与肖老师视频中的截图存在一定差异。尽管如此,具体内容大体相同。

这里涉及的是叔父区块的情形,在表格中有一列称为Block Height代表各个区块的顺序编号。查看编号为#1的情况时会发现其顺序编号比对应的UncleNumber少两个单位,并相隔两个世代的时间差值后将会有6/8比例的区块给予额外奖励。举例来说,在某个案例中获得出块奖励为3个ETH那么计算得出每次出块可获得3乘以6除以8等于2.25 ETH的具体数值结果。其他情况也是类似的操作流程

左侧:观察Block Reward时发现左侧添加了0.09375。这表明该区块引入了一个祖父级块,并使相应的祖父级块获得了2.25个Ether的奖励。这表明相隔两个世代。

查看Block Reward后增加了0.1875,并具体说明该情况发生在某个时间段内

全部评论 (0)

还没有任何评论哟~