# 《区块链技术与应用》11 ETH以太坊GHOST协议

By [Minna Yu](https://paragraph.com/@minna-yu) · 2022-06-18

---

**这个系列的内容是根据肖臻老师《区块链技术与应用》公开课的内容进行的内容整理，以及部分延伸的思考。文末附有公开课链接。**

**这节内容比较多，本篇主要回答以下8个问题：**

1、以太坊的出块时间缩短到10+秒，会带来哪些不好的情况？

2、GHOST协议主要内容是什么？核心的设计目的是什么？

3、对应比特币和以太坊的奖励类型，Uncle block会有哪些类型的奖励？

4、Uncle block的奖励机制是如何设计的？是否有数量的上限？

5、最长合法链包含进Uncle block的动力是什么？

6、设计Uncle block奖励以及最长合法链包含进去的奖励的目的是什么？

7、Uncle block的交易应该执行吗？原因是什么？

8、分叉之后的链上又有一堆Uncle blocks，应该给奖励吗？原因是什么？

### 前述

以太坊是出块时间只有十几秒，别的节点没来得及收到新的区块，沿着原来的区块在挖，并且挖到新的，临时性的分叉会变成常态。 对于比特币来说，最长合法链上的区块才是有效的，其他的会作废，是orphan block或者叫stale block。

以太坊出块时间比较短，可能出现的情况：大型矿池所在的链有越大的概率成为最长合法链，因为节点多，其他的节点更容易收到。 会出现mining centralization，有centralization bias。

**以太坊的改进：GHOST协议，之前就有这个协议，不是以太坊的创新。但是以太坊有迭代。**

*   以太坊出块奖励，早期5个，18年3个，主要是挖矿难度调整，没有类似比特币那样确定性地阶段下调。
    
*   废弃的区块叫uncle block，也会获得奖励，奖励数量=7/8\*（出块奖励数量）可以拿到大部分的出块奖励
    
*   与此同时最长合法链上把uncle block包含进去，也会额外获得1/32\*（出块奖励数量）。一个区块最多可以包含两个uncle block，也就是2/32\*（出块奖励数量）
    

![](https://storage.googleapis.com/papyrus_images/72078164a1365dc13e606e5c343a132b2fca2ea8c9f367835f93ebcf469713a4.png)

**这种设计有利于快速收拢到最长合法链上。**

**存在的问题** 1.出现第三个分叉怎么办 2.如果在最长合法链上，下一个区块出来的时候，客观上叔父区块的信息还没收到，就没包含进去 3.主观上不愿意包含叔父区块，自己损失比较小

![](https://storage.googleapis.com/papyrus_images/134a5aa1f0bfb9cb7e03e132bd471ce59229540528375c0043c2c1a44800bb29.png)

以太坊的uncle block不是就上一代的，隔好几代的都是叔父。 但是仍旧存在问题，如果有人早期想利用这个漏洞，挖很多叔父区块等着被包含。

在以太坊的规则中，实际上只有6代，和当前的区块7代以内是有共同的“祖先”，uncle reward收益向前追溯是递减的，利于鼓励分叉的时候及早进行合并；对当前区块来说奖励都是1/32 即At most seven generation。

![](https://storage.googleapis.com/papyrus_images/919a8c4023c26d609139887d602f3a2b90c9ace4fdbc3d60764f0f5f507b2ca9.png)

**Ghost协议，是为了解决临时性的分叉，最长合法链也是为了解决临时性分叉**

对于运行的协议有不同的意见，这个是现在讨论的协议解决不了的。

去中心化的系统，版本的修改很麻烦，修改了会出现分叉，可能会被一些节点认为是非法的。有bug修改不方便。

比特币有Block reward（静态奖励）和tx fee（动态奖励，执行获得） 以太坊Block reward（静态奖励）和gas fee（动态奖励，执行合约获得） 叔父区块只有block reward没有gas fee

gas的消耗，从一个账户到另外一个账户（执行交易的矿工获得），不是用了就消失了

**问题1：叔父区块的交易是否应该执行？** 不应该执行，因为可能包含有冲突的交易。执行叔父区块的交易，就可能变成非法的交易。对于交易而言，主链上收到交易，会再包含进去，不用担心交易丢失或者不成功。 不检查叔父区块包含交易的合法性，只需要检查是否是合法发布的区块（是否符合挖矿难度要求）

**问题2：如果分叉之后，又带着一堆区块怎么办，应该给叔父奖励吗？**

![](https://storage.googleapis.com/papyrus_images/83077819bb1b7a230ae2fa28c14ac46f79a7c1877d8d62f06e371620d1ebc67a.png)

不能给，这样做会降低forking attack的难度。

因为如果有人蓄意发动分叉攻击，原来的难度会比较大，但是如果仍旧是给了后续的区块叔父区块的奖励，会降低分叉攻击的损失，即便是分叉攻击不成功，也会有叔父区块的奖励。 不利于鼓励及时的合并。

### 案例

![](https://storage.googleapis.com/papyrus_images/30a86fea2286b096bd9925f783aaae96f01a5870b3c74e6aafb15f526a7b64e5.png)

可以实时查看以太坊当前状态的网站。 右边曲线是过去两个星期的交易历史。 左下角是最新被挖出的区块。 右下角是最新的交易。

![](https://storage.googleapis.com/papyrus_images/c6fd3866ce2ba1045f14d9890f1b2e0de9db444c5a53f6b7c969b5dc7e813ba0.png)

上表是叔父区块的信息。 每一行是一个叔父区块，第一列是区块的序号，block number，叔父区块的序号和第一列的差额就是差几个区块，差2个就是6/8的奖励，差1个数字就是当代叔父，7/8的奖励

![](https://storage.googleapis.com/papyrus_images/b1e3bc8243f86d3be4a79130d9070522acd9fd7dd9df0dd6bce6755bc4fd9593.png)

左边的区块，包含了一个叔父区块，距离为2的叔父。右边包含了两个叔父区块。 距离为1的当代叔父，和距离为2的上代叔父。

**视频课程原文链接**

[https://www.bilibili.com/video/BV1Vt411X7JF?spm\_id\_from=333.337.search-card.all.click&vd\_source=6807dc8dcddb18fe6db9d949c12b670c](https://www.bilibili.com/video/BV1Vt411X7JF?spm_id_from=333.337.search-card.all.click&vd_source=6807dc8dcddb18fe6db9d949c12b670c)

---

*Originally published on [Minna Yu](https://paragraph.com/@minna-yu/11-eth-ghost)*
