5.ETH-GHOST协议(PoW)

GHOST协议的出现是为了解决一个核心矛盾:如何在保证网络安全和去中心化的前提下,大幅缩短区块链的出块时间。

比特币(Bitcoin)网络大约每10分钟产生一个区块,这个时间足够长,可以确保新挖出的区块有充分的时间广播到全球绝大多数节点,从而让整个网络在“哪条是主链”这个问题上快速达成共识。比特币遵循的是“最长链原则”(Longest Chain Rule),即所有节点都默认最长的那条链是唯一合法的链。

以太坊为了提升交易处理速度(TPS)和用户体验,希望将出块时间缩短到几十秒的级别(最终在12-15秒左右)。如此短的出块时间带来了一些问题:

  • 高“孤块率”(High Orphan/Stale Block Rate):当一个矿工A挖出一个新区块并开始广播时,由于网络延迟,另一个矿工B可能在收到A的区块之前,也基于同一个父区块挖出了一个新区块。这时,网络中就同时存在了两个竞争的区块,产生了临时分叉。
  • 在比特币的“最长链原则”下,最终只有一个分叉能胜出并被延长,另一个分叉上的区块就会被抛弃,成为**“孤块”(Orphan Block)**。

这种高孤块率会导致两个严重问题:

  1. 浪费算力与能源:挖出孤块的矿工付出了真实的电力和计算成本,但他们的劳动成果被完全作废,得不到任何奖励。
  2. 威胁网络安全与去中心化
    • 对小矿工不公平:大型矿池拥有更好的网络连接,能更快地广播和接收新区块,因此他们的孤块率更低。而小型矿工或地理位置偏远的矿工则更容易产生孤块,导致收益不稳定。这会打击小矿工的积极性,使他们倾向于加入大矿池,从而导致算力中心化
    • 降低有效算力:如果网络中有10%的算力都在挖最终被抛弃的孤块,那么整个网络抵御51%攻击的有效算力就降低了。

因此,如果以太坊直接沿用比特币的“最长链原则”并强行缩短出块时间,将会导致网络极其不稳定且中心化风险剧增。为了解决上述问题,以太坊采用了GHOST协议。GHOST是 “Greedy Heaviest Observed Sub-Tree”(贪婪最重可观测子树)的缩写。其核心思想是修改了区块链的“主链选择规则”

不再选择“最长的链”,而是选择“最重的链”。

这里的“重量”(Weight)是如何计算的呢?一条链的重量不仅包括其主链上的区块,还包括那些“挂在”主链上的、被抛弃的“叔块”(Uncle Blocks)。“叔块”是以太坊对“孤块”的重新定义和利用。一个区块如果满足特定条件(例如,它是当前主链上某个区块的兄弟节点,并且代数不太远),就可以被后来的区块作为“叔块”包含进来。当网络出现分叉时,节点会比较两条分叉链的“重量”。一条链,即使它的主链长度(高度)稍短,但如果它引用的“叔块”数量更多,那么它的总重量就可能超过另一条更长的链。在这种情况下,节点会选择总重量最大的那条链作为主链

叔块(Uncle Block)

叔块是以太坊在工作量证明(Proof-of-Work, PoW)机制下的一个重要概念。自2022年“合并”(The Merge)升级后,以太坊主网转向权益证明(Proof-of-Stake, PoS)不再产生叔块。因此,以下内容描述的是历史上的PoW以太坊。

在以太坊快速的出块时间(约12-15秒)下,经常会发生这样的情况:两个或多个矿工在几乎同一时间都成功地找到了一个新区块。由于网络延迟,这些区块在全网传播需要时间。最终,只有一个区块会被后续的区块连接,成为主链的一部分,而其他同样合法、基于同一个父区块挖出的区块,就成了“孤块”。在比特币网络中,这些“孤块”(Orphan Block)会被直接丢弃,挖出它们的矿工一无所获。

而GHOST协议中,ETH并重新定义了这些孤块的角色,称之为“叔块”(官方后来为了性别中立改称为 "Ommer Block")。以太坊不仅承认这些叔块的“工作量”,还会给予它们奖励,并允许它们被后来的主链区块“引用”。

一个区块要被当作“叔块”引用,必须遵守严格的规则:

  1. 必须是有效的区块头:叔块本身必须是一个经过了有效工作量证明的区块,只是没能成为主链的一部分。包含它的主链区块只需要验证其区块头的有效性。
  2. 不能是主链的祖先:一个区块不能引用它自己祖先链上的任何一个区块作为叔块。
  3. 代数限制(Generation Limit):叔块不能“太老”。一个主链区块只能引用其最近7个区块的“兄弟”作为叔块。换句话说,被引用的叔块和引用它的主链区块,它们的高度差不能超过7。
    • 例如,高度为 #1008 的区块,可以引用一个高度为 #1002 的叔块(因为 1008 - 1002 = 6,小于7),但不能引用高度为 #1000 的叔块(因为 1008 - 1000 = 8,超过了限制)。
  4. 数量限制:每个主链区块最多只能引用两个叔块
  5. 不能重复引用:一个叔块一旦被主链区块引用,就不能再被其他任何区块引用。

奖励机制

叔块奖励(Uncle Reward)

这是给予挖出叔块的矿工的奖励。这个奖励不是固定的,它会根据叔块被引用时的“新鲜度”(即与引用它的主链区块的高度差)而递减。

  • 奖励计算公式叔块奖励 = (叔块的区块高度 + 8 - 引用它的主链区块高度) * 基础区块奖励 / 8
  • 举例说明(假设当时的基础区块奖励为2 ETH):
    • 最“新鲜”的叔块:一个高度为 #1000 的区块,被高度为 #1001 的区块引用(即它是主链区块的亲兄弟)。
      • 奖励 = (1000 + 8 - 1001) * 2 ETH / 8 = 7/8 * 2 ETH = 1.75 ETH
    • 稍“老”的叔块:一个高度为 #1000 的区块,被高度为 #1002 的区块引用。
      • 奖励 = (1000 + 8 - 1002) * 2 ETH / 8 = 6/8 * 2 ETH = 1.5 ETH
    • 最“老”的叔块:根据规则,高度差最大为6(例如,高度 #1000 的叔块被 #1007 的区块引用)。
      • 奖励 = (1000 + 8 - 1007) * 2 ETH / 8 = 1/8 * 2 ETH = 0.25 ETH

这种递减的设计是为了激励矿工尽快将发现的叔块广播出去并被主链收录。

叔块引用奖励 (Uncle Inclusion Reward)

这是给予将叔块包含进自己区块的主链矿工的额外奖励。

  • 奖励计算:这个奖励是固定的。每引用一个叔块,主链区块的矿工就能获得基础区块奖励的 1/32
  • 举例说明(假设基础区块奖励为2 ETH):
    • 引用一个叔块的额外奖励 = 2 ETH / 32 = 0.0625 ETH
    • 由于每个区块最多可以引用两个叔块,所以一个矿工通过引用叔块最多可以获得 2 * 0.0625 = 0.125 ETH 的额外收入。

这激励了主链矿工主动去网络中寻找并验证叔块,从而将这些“废弃”的工作量重新整合进主链中。

最重合法链(Heaviest Valid Chain)

在探讨“最重链”之前,先回忆一下它的参照物——比特币的“最长合法链”(Longest Valid Chain)规则。

  • 最长链规则 (比特币):当网络中出现两个或多个分叉时,所有诚实的节点都将选择并继续在**包含区块数量最多(即“最长”)**的那条链上进行工作。这条最长的链被认为是唯一有效的主链。这个规则简单、有效,非常适合比特币那样出块时间较长(约10分钟)的系统。

然而,当以太坊将出块时间缩短到十几秒时,“最长链”规则就暴露出了严重问题(如高孤块率、算力中心化风险)。为此,以太坊的GHOST协议引入了一个新的评判标准:

  • 最重链规则 (PoW以太坊):当网络出现分叉时,节点不再仅仅比较链的长度,而是比较链的“重量”(Weight)。节点会选择并继续在总重量最大的那条链上工作。这条“最重”的链被认为是唯一有效的主链。

条链的重量并不仅仅是其主链上区块的数量

链的总重量 = 主链上的区块数量 + 被主链引用的所有叔块的数量

换句话说,GHOST协议认为,那些虽然没能成为主链区块、但依然付出了有效工作量的“叔块”,也应该对主链的选择产生影响。它们的存在,为这条链“增加了重量”,证明有更多的算力在围绕这个分支工作,这是算力证明机制的一部分。

当一个以太坊节点需要决定哪条分叉是主链时,它会执行以下步骤:

  1. 从共同的祖先开始:找到所有竞争分叉链的共同祖先区块。
  2. 遍历每个分叉:沿着每一个分叉链向前,直到链的末端。
  3. 累加重量:在遍历过程中,计算每个分叉链的总重量。
    • 每遇到一个主链区块,重量 +1
    • 检查该主链区块是否引用了叔块。如果引用了,每引用一个叔块,重量再 +1
  4. 比较总重量:计算出所有分叉链的总重量后,进行比较。
  5. 选择最重者:总重量最大的那条链,即为节点选择的“最重合法链”,也就是当前的主链。

采用“最重链”规则,根本目的是为了在快速出块的环境下维护一个安全去中心化的网络。

  1. 更准确地代表网络共识:不仅仅考虑“幸运地”连续挖出区块的矿工,还将那些“运气稍差”但同样付出了有效算力的矿工的贡献计算在内。因此,“最重链”更能代表全网大部分算力的走向。
  2. 提升网络安全性:攻击者如果想制造一个分叉来推翻主链(例如进行51%攻击),他不仅需要创造一条更长的链,更需要创造一条比主链“更重”的链。由于主链会积极地吸收诚实矿工产生的叔块来增加自身重量,这使得攻击者制造分叉的难度大大增加。
  3. 促进去中心化:通过奖励叔块并将其计入重量,GHOST协议确保了小型矿工和网络连接较差的矿工的劳动不会白费,鼓励他们继续独立挖矿而不是加入大型矿池,从而抑制了算力的过度集中。