当前位置:首页 > 区块链新闻 > 正文

硬核详解以太坊 2.0 如何实现最终性:分叉规则 LMD GHOST 与 PoS 机制 Casper FFG

来源: 互联网时间:2019-08-12 09:03:13

如果你在了解有关以太坊 2.0 的过程中遇到过 justification (证明) 和 fnalization (最终性) 这两个术语,但却不知道它们是什么意思,希望本文能给你一些启示。

原文标题:《以太坊 2.0:如何实现最终性?》
作者:Bruno Škvorc
编译:Summer

首先,我们试着来理解什么是finality (最终性)。[备注:也有译文将 finality 译为「确定性」]

你一定已经注意到,加密货币平台和 Dapps (去中心化应用) 通常都会等待几个区块被敲定之后才会将你的交易视为「confirmed (已确认)」状态。这是一种确保某笔交易已经是「近乎」确定的,或者说该笔交易「几乎」是不可逆转的方式,也就是说,这笔交易已经被 「finalized (敲定了)」。

以太坊 2.0 能够提供 finality (最终性) 的保证,这是以太坊区块链奉为神圣的客观事实,而不是一种「近乎」的状态。这是非常重要的,因为这能够带来更快的链上通信,即如果某个区块刚刚被敲定了,那该区块将无需等待多次确认。

也就是说,基于工作量证明的区块链 (比如比特币) 从未包含让交易真正实现最终性的特性;而以太坊 2.0 链旨在提供比工作量证明更强大的最终性保证。

我们来更加具体地加以说明。首先来看几个定义:

  • LMD GHOST 是以太坊 2.0 使用的分叉选择规则 (即用于决定哪条链是「权威链」的规则),全称是「Last Message Driven Greediest Heaviest Observed SubTree (由最新消息驱动的 GHOST)」
  • Casper FFG 是以太坊 2.0 使用的权益证明 (PoS) 机制,全称是「Casper the Friendly Finality Gadget (Casper 友好的最终性小工具)」
  • 在以太坊 2.0 链中,每生成 64 个区块 (大约需要 6.4 分钟) 称为一个 epoch;
  • 在以太坊 2.0 系统中,slot 是生成一个新区块所需的时间,即一个新区块被提议及证明其正确性所需的时间。每个 slot 被设定为 6 秒,但不是每个 Slot 期间都会产生新的区块。每个 epoch 期间的最后一个 slot 被称为 checkpoint (检查点)。
  • Committee (委员会) 是由信标链在每个 slot 期间随机选择的验证者集合 (每个委员会的目标验证者数量是 128 名),每个委员会中第一名被随机选择的验证者将有机会在该 slot 期间提议新区块,该委员会的其他验证者将对这个被提议的区块进行证明 (attest)。

基于上面这些信息,我们继续探讨 Justification (证明) 和 Finalization (最终性)。

Casper FFG

Casper 是一种用于证明和敲定区块(不管是一般的区块链平台还是以太坊 2.0 链中的 epoch 期间产生的区块)的方式。Casper 是一种通用的「小工具」,可以添加到任何需要实现最终性的区块链中,但 Casper 在 PoS 区块链中最为有用。

以太坊 2.0 中的最终性是这样一种概念,即系统确定将不会存在两个相互竞争的、敲定的检查点 (checkpoints),而当这种情况发生时,至少三分之一的活跃验证者将被被罚没 (slashing)。我们称之为经济最终性 (economic finality)。

你也许想问,为何是三分之一的验证者将被罚没?我们知道,在以太坊 2.0 系统中,必须保证有三分之二的验证者是诚实验证者来参与验证 (也即进行投票),因此如果系统出现两个相互竞争的、敲定的检查点,则意味着有三分之二的验证者对其中一个检查点进行投票,同时也有三分之二的验证者对另一个检查点见投票,也就是说,至少有三分之一的验证者对这两个检查点都进行了投票,这部分验证者就会被系统认为是恶意验证者,因此会受到罚没惩罚。

对于验证者来说,最大的利益来源于正确地对信标状态进行敲定,而不是进行不当的恶意操作。

那么「敲定的检查点」中的「敲定」是什么意思呢?在对此进行解释之前,我们需要解释一下什么是「justification (证明)」。

证明就是验证者通过对检查点进行投票,从而决定哪个检查点才是信标链的顶端区块。如果三分之二的验证者 (也即绝大多数验证者) 对两个连续的 epoch 达成共识,这样这两个连续的 epoch 被证明了 (justified),前一个 epoch 就被认为是敲定了 (finalized)

注意:上述定义在很大程度上进行简化了,目的是为了方便理解。一些其他的因素也会参与其中,但这超出了本文的范围。

因此,一个「敲定了的」epoch 实际上就是一个已经被「证明了的」epoch,但其中存在一个关键的区别——当某件事被「证明了」,你仍然可以把时间倒流回去重新证明;但当你「敲定了」某件事,那重写历史就变得非常困难。

也就是说,某件事「敲定了」就一定意味着这件事已经被「证明了」,而某件事被「证明了」不一定意味着这件事已经「敲定了」

应该注意的是,当验证者对 epoch 进行证明或敲定时,并不是说验证者正在对 epoch 本身进行投票,而应该说验证者正在对 epoch 期间的「内容」进行投票 / 验证,这个「内容」就是每个 epoch 期间的最后一个 slot (即检查点) 的状态根 (state root)。

因此,验证者是通过投票的方式来对 epoch 进行证明 / 敲定,这就是验证者对以太坊区块链的最新已知有效状态进行投票的方式

LMD GHOST

这就是分叉选择规则发挥作用的地方。

GHOST 实际上是一种在 PoW (工作量证明) 和其他区块链平台非常受欢迎的协议。GHOST 协议遵循「最重的」子树 (the 「heaviest」subtree),也就是最长的那条链。

在比特币区块链中,「最重的」分支就是那条在其区块中投入了最多算力的链,这条链也就是最长的链。显然最长的链就是我们所说的「权威链 (canonical chain)」,但这条链依旧有可能切换为另一条分叉链 (虽然可能性很小),因此最长链的最终性是概率性的

LMD 让「消息 (messages)」发挥了作用,即以太坊 2.0 链上的最终性是「由最新消息驱动的」。消息就是证明 (attestation),所有这一切归结起来就是,拥有最多投票的分叉链将被认为是「权威链」

硬核详解以太坊 2.0 如何实现最终性:分叉规则 LMD GHOST 与 PoS 机制 Casper FFG

上图中体现了由最新消息驱动的分叉选择规则:绿色区块表示经由 LMD GHOST 分叉选择规则证明了的区块,笑脸符号表示最新的验证者证明 (attestations),某个区块中的证明总量 (笑脸总数) 就是该区块的权重,用区块中的数字表示。

在上图中,尽管位于上方的那条分叉链是最长的链,但下方的那条由绿色区块组成的链才是「权威链」,因为绿色区块包含了最多的证明,也就是拥有最多的验证者投票

Gasper

在以太坊 2.0 链中,Casper 和 LMD GHOST 一起就构成了驱动以太坊 2.0 系统的共识协议。

让我们看看这张来自以太坊研究者 Justin Drake 在 EthCC 会议上演讲有关 Eth2.0 时使用的幻灯片。

硬核详解以太坊 2.0 如何实现最终性:分叉规则 LMD GHOST 与 PoS 机制 Casper FFG幻灯片 1

上图中,两个虚线框展现了在分叉选择中的非法情况。上方靠左的虚线框展现的是,如果在同一时间投票给两个不同的状态根,那就是非法的投票,也就是说,你不可以在同一时间投票给两个包含不同内容 (状态根) 的 epoch

上方靠右的虚线框展现的是,你不可以跳过某些 epoch 而对之后的 epoch 进行投票,换句话说,你在投票给当前的候选 epoch 之前,不可以投片给将来的 epoch。

上图的下方部分展现的是两条被敲定了的分叉链。第一个和第二个以红色圆点表示的 epoch 是已经被敲定了的「权威链」,因为这两个 epoch 之后紧跟了第三个和第四个 (以红色圆点表示的) epoch。但是,第三个和第四个 epoch 在两条平行的分叉链中都存在,那这两条分叉链哪条才是属于「权威链」呢?

我们看第二张幻灯片。

硬核详解以太坊 2.0 如何实现最终性:分叉规则 LMD GHOST 与 PoS 机制 Casper FFG幻灯片 2

根据上文所述,在同一时间投票给两个包含不同内容的 epoch 是非法的。在幻灯片 2 中的下半部分包含两条分叉链的情况下,上面的分叉链中的两个 epoch (红色圆点) 已经被敲定了 (finalized),因此似乎上面的这条分叉链是有效的;但位于下面的那条分叉链也包含了两个已经被敲定的 epoch,但这两个 epoch 被敲定的时间更晚一些

硬核详解以太坊 2.0 如何实现最终性:分叉规则 LMD GHOST 与 PoS 机制 Casper FFG幻灯片 3

这就意味着位于下面的分叉链是无效的分叉,因为如果跟随下方那两个被敲定的 epoch 继续进行投票,这将意味着一个最新被投票的 epoch 将跟随一个来自于另一条分叉链的 epoch。这是非法的,因为敲定的检查点是必须按时间顺序排列的。如果发生了这种情况,那大量的验证者将受到很严重的惩罚,因为大多数的验证者把票投给了一条「非法链」上的 epoch。因此,这些验证者必须被惩罚。

就是这样了!如果你是验证者,请确保每个 slot 期间只投一次票,并且确保你投的是也是其他人正在投的。要避免被罚没!(别担心,这些都将内置到你使用的以太坊 2.0 客户端中)

希望本文能让你更加清楚地了解 justification 和 finalization。如果你还有不清楚的对方,请告知我 (推特 @bitfalls)!非常感谢 Dustin Brody、Mamy Ratsimbazafy、Justin Drake 以及 Danny Ryan 对撰写本文的帮助!

来源链接:mp.weixin.qq.com

免责声明:

1.本文内容综合整理自互联网,观点仅代表作者本人,不代表本站立场。

2.资讯内容不构成投资建议,投资者应独立决策并自行承担风险。