以太坊团队从早期 PoS 项目的缺点中吸取了教训,并设计了 Casper 协议来消除「Nothing at Stake」的问题。Casper 是一种用于对那些验证多条分叉链的验证者或者对网络造成损害的验证者进行惩罚的算法。Casper 权益证明机制将通过信标链 (beacon chain) 加以实现,信标链将是一条与当前以太坊 PoW 链并行运行的独立链。

原文标题:《以太坊 2.0:Casper & 信标链》
作者:Colin Schwarz
编译:Jhonny

背景信息

在本系列的第一篇文章《Serenity 将带来什么?》中,我们概述了以太坊网络发展至今的历史,并解释了备受期待的 Eth2.0 将解决的主要问题。在第二篇文章《以太坊 2.0: 如何实现扩展性?》中,我们介绍了 Eth2.0 中有望实现的 Plasma、状态通道等 Layer2 扩容方案和 Sharding (分片) 扩容方案。在本文中,我们将探讨 Eth2.0 将使用的 Casper 共识机制,并介绍实现 Casper 机制的信标链。建议读者结合之前的两篇文章来对 Eth2.0 有着更加深入的了解。

共识算法

在传统的价值和信息交换网络中,通常有一个中介机构来保护和验证网络。例如,银行为客户的资产提供安全保障,并对客户的在线交易和信息进行中心化的控制。而在区块链领域,由于区块链网络是去中心化的,因此不需要这样的中介机构。

由于没有中介机构,区块链网络就必须使用某种形式的系统来维护安全,并确保添加至分布式账本中的新信息的有效性。[1]

也就是说,区块链网络的大多数节点必须就单一版本的网络状态「达成共识」,以便保证网络的安全

为了实现这个目的,区块链使用各种「共识算法」,这些算法是一组被写入协议代码中的预定义规则,允许网络达成共识并实现最终性 (finality)。最终性的意思就是「一旦完成了特定的操作,该操作将永远铭刻在历史记录中,并且该操作将不可被逆转。」[2] [备注,有关区块链最终性,读者可参考 Unitimes 此前发布的文章《以太坊 2.0:如何实现最终性?》]。

共识算法决定了网络的安全性、确认速度,以及在分布式账本中对交易进行排序和验证的方式,从而提供真实的账本记录。这确保了通过去中心化的方式,添加至区块链中的新区块将是系统中唯一的真相版本。

工作量证明 (PoW) 是最早由比特币使用的区块链共识算法,该算法确保了比特币网络的安全性和去中心化。最近,出于很多原因,很多其他区块链平台已经引入了诸如 PoS (权益证明)、DPoS (代理权益证明) 和 PoA (权威证明) 等其他共识算法。

为何需要 PoS?

诸如比特币等工作量证明 (PoW) 系统涉及许多通过计算机硬件连接至区块链网络的矿工。PoW 共识算法会为每个新区块设定一个目标值 (target value),矿工们会竞相成为第一个找到该目标值并添加该新区块,这样就可以获得挖矿奖励。

为此,他们通过一个哈希函数来运行被提议区块的区块头数据 (header data),该哈希函数将返回 / 输出一个固定长度的字符串 (哈希值)。矿工会一直改变他们输入的「nonce 值」,也即对这个区块头重新运算哈希,直到输入的「nonce 值」生成的哈希值与该目标值相匹配。此时,新区块将被广播至网络中的所有节点,这些节点将验证该区块并将之添加至账本中,而成功挖出此区块的矿工将获得挖矿奖励。

PoW 系统的关键方面是,找到正确的哈希输入需要大量的计算能力 (也即存在挖矿难度),但是一旦矿工找到了正确的输入 (也即「nonce 值」),就很容易验证输出 (也即哈希函数返回的哈希值)。挖矿过程的难度保证了网络的安全性,而节点验证每个区块是相对简单的,这使得成千上万的网络节点可以维护该区块链的最新记录。

但不幸的是,通过哈希找到每个目标值的难度需要大量的计算能力和电力,这降低了网络的效率和矿工的利润。所有矿工都必须花费大量的电力和计算来试图确认区块并赢得奖励,但只有其中一个矿工会成功地挖出新区块。正因为如此,每个区块的挖掘都会造成大量电力和计算的浪费。这意味着尽管 PoW 算法能够保证网络安全,但该算法的效率非常低。

PoW 区块链除了效率低下外,挖矿领域还容易受到市场垄断的影响,因为这种挖矿方式给予了那些拥有更多资源的参与者不公平的优势。有钱有势的个人和组织能够负担得起大量更快、更强大的挖矿硬件设备,这使他们有更大的机会成功地挖出新的代币。当前,大约 65% 的比特币挖矿是由 5 家大型挖矿集团完成的,理论上他们可以联合起来控制 50% 以上的算力市场 (尽管他们不太可能会这么做)。这就造成了一种情况,比特币和其他 PoW 区块链网络并不像它们最初设想的那样去中心化,这危及了它们的独立性和实用性。

PoS (权益证明) 最早出现于 2012 年,是为了解决 PoW 机制在效率、成本和中心化等方面的问题而提出的。事实上,以太坊团队从项目一开始就计划过渡到 PoS,但是直到最近才制定了通过 Casper 机制来实现这一过渡的计划。在 PoS 系统中,整个挖矿过程都是虚拟的,从而消除了对昂贵且低效的挖矿硬件的需求。能源消耗被经济激励和博弈论所取代,作为一种保护网络和验证区块的手段。

在 PoS 网络中,「矿工」被「验证者」所替代,这些验证者都拥有该网络的原生代币。验证者通过质押 (staking) 一定数量的代币来参与网络中的区块验证(包括提议区块和对区块进行证明),如果该被提议 / 证明的区块被添加进了网络中,那提议 / 证明该区块的验证者都将获得与质押成比例的奖励。在 PoS 网络中,由于不存在 PoW 那样的挖矿,使其比 PoW 系统的成本效益和能源效率要高几千倍。

「Nothing at Stake」的问题

实现 PoS 共识证明算法的最大问题之一是「Nothing at Stake (作恶无成本,好处无限多)」的问题。自 2013 年以来,人们一直在尝试 PoS 共识,Peercoin 等早期采用者很快就遇到了这个问题 [4]。

PoS 协议的早期采用允许任何拥有网络原生代币的人充当网络验证者,这些 PoS 项目假定那些拥有代币的人对网络的成功有既得利益 (即会为了自身利益而自发地参与进来成为验证者,并诚实地进行验证)。

在假定拥有更多代币的人几乎没有动机会进行攻击的前提下,那些拥有更多代币的人被赋予了更多的验证权。

然而,早期的 PoS 项目很快意识到这种逻辑是有缺陷的。通常,矿工 / 验证者只会被提供一个区块进行验证。然而,由于延迟的原因,常常会有多个区块被提议,并向矿工 / 验证者提供两个可供选择的区块。

在传统的 PoW 系统中,矿工一次性只能在一条分叉链中进行挖矿 [5]。要成功地将一条非法的分叉链取代之前的「权威链」(也即最长链),那需要拥有 50% 以上的网络算力,这对于比特币等大型 PoW 区块链网络来说是非常困难的。

而在 PoS 网络中,验证者是有可能同时对两条不同的分叉链上的区块进行验证的,而且不需要承担额外的费用。事实上,在 PoS 采用的早期阶段,从理论上讲,验证者在任何可用的分叉链上进行 staking 都符合自身的经济利益,因为这样做,无论哪条分叉链被确认,验证者都会获得交易费用奖励,这就是 「Nothing at Stake (作恶无成本,好处无限多)」问题。

这种问题的最糟糕后果可以通过以下几个安全性假设来加以阐述:

  1. 验证者将试图实现自我利润的最大化,即便这会损害整个网络;
  2. 没有验证者会无私地进行验证 (只在一条链上验证区块);
  3. 验证者将修改它们的软件,或者下载修改后的软件,从而允许他们验证多条分叉链 (标准软件带有内部逻辑,用于在发生分叉时选择正确的分叉链)。

由于上述这些安全性假设,可能会导致出现多条分叉链,使得网络共识出现延迟并更加复杂,如果不加以解决,还可能导致网络出现重大的安全漏洞。如果每个验证者实际上都可以对网络中每条分叉链的区块进行验证,那么恶意验证者将能够最少通过 1% 的验证权就可以进行双花攻击(也即对同一笔代币花费多次)。他们可以将代币通过其中一条分叉链发送至某个交易所,然后将代币从该交易所中提现,之后只验证另一条分叉链上的区块。

由于假设所有验证者都在对两条不同的分叉链进行验证,第二条链将会获得越来越多的证明并最终成为唯一有效的链。这意味着,之前在第一条分叉链上支出并从交易所提现的代币交易将不再有效。如此一来,一笔成功的双花支出就发生了,而交易所也被骗走了资金,无论涉案金额有多大。

实际上,这几乎是不可能的场景,因为肯定有很多验证者是诚实的,并且他们只验证一条正确的分叉链。更有可能的情况是,攻击者需要在网络中拥有超过 1% 的验证权,或者贿赂或与其他验证者合谋,才可能完成更复杂的群体攻击。无论哪种方式,早期的 PoS 算法都没有 PoW 算法那么安全,而 PoW 算法在 51% 的攻击可能发生之前都是安全的。

简而言之,PoS 的早期尝试由于缺乏要求每个验证者需要质押实际价值,这导致了网络很可能出现延迟、复杂和不安全等问题。

「Nothing at Stake」问题的解决方案 : Casper

运行在以太坊 2.0 信标链的 Casper 如何解决 Nothing at Stake?

幸运的是,以太坊团队已经从早期 PoS 项目的缺点中吸取了教训,并设计了 Casper 协议来消除「Nothing at Stake」的问题。2014 年,Vitalik 在一篇名为《Slasher》的文章中首次提出了消除「Nothing at Stake」问题的想法 [5]。文中提出了一个简单的解决方案:「让主链意识到其他的分叉链。之后,如果一名矿工被抓到同时在两条链上进行挖矿,该矿工将受到惩罚。」

尽管这一概念自被提出以来已经得到了很大的发展,但这一概念成为了 Casper 共识算法的基础。

Casper 是一种用于对那些验证多条分叉链的验证者或者对网络造成损害的验证者进行惩罚的算法

Casper 的第一个实现将使用以太坊当前的 PoW 提议机制在 Eth2.0 链上引入新的区块。如果两个区块同时被提议,那验证器只会因为在一条链上进行质押而获得奖励,因此通过当前的 Eth1.0 链来下注是有意义的,因为这条旧链是最有可能成功的链。

更重要的是,Casper 协议引入了一种机制,即如果任何验证者试图通过同时验证多个区块来支持某条无效的分叉链,那该验证者质押的代币资产将被销毁。这是通过执行两条「Casper 戒律」[6] 的特殊保护机制来实现的 :

第一条「Casper 戒律」是,验证者不能在同一区块高度发布两个不同的投票(即不能在同一个区块高度签署两个不同的区块);

第二条「Casper 戒律」是,验证者不能在已经投票的情况下,在其他投票时间范围内再次进行投票

任何违反其中一条戒律的验证者都被认为是恶意验证者,并且他们的全部存款 (不仅仅是他们的质押金) 将被罚没。为了提高网络的可用性和减少对交易的审查,那些节点离线的验证者也会受到适度惩罚。具体参见 Unitimes 此前发布的文章《Eth 2.0 AMA 第二期 | Vitalik:以太坊 2.0 已没有未解决的研究挑战》。Casper 研究者 Vlad Zamfir 将这种全新的 PoS 安全机制比作是在 PoW 系统中任何发动 51% 攻击的人所使用的挖矿硬件都会即刻着火并烧毁 [2] 。

如果 Casper 机制正确地加以实现,那它将消除「Nothing at Stake」的问题,并使以太坊网络安全地过渡到 PoS 机制。

Casper 实际上是由以太坊基金会进行的两个不同但相关联的研究项目的融合,即 Casper the Friendly Finality Gadget (FFG) 和 Casper the Friendly GHOST: Correct-by-Construction (CBC)。

Casper FFG 将使以太坊从 PoW 共识机制平稳地过渡为 PoS 共识机制。因此,Casper FFG 模式通过将这个新的 PoS 协议覆盖到当前的以太坊 PoW 协议上,从而集成该全新的 PoS 协议。区块依旧是通过 PoW 方式进行挖掘,但每个 epoch 期间的最后一个 slot 就是 PoS 的检查点 (每生成 64 个区块 (大约需要 6.4 分钟) 称为一个 epoch),网络验证者会在检查点对自上一个检查点以来的区块最终性 (finality) 进行评估。Casper CBC 将会在 FFG 之后实现,用于完成向 PoS 共识的转变。

信标链

运行在以太坊 2.0 信标链的 Casper 如何解决 Nothing at Stake?

Casper 权益证明机制将通过信标链 (beacon chain) 加以实现,信标链将是一条与当前以太坊 PoW 链并行运行的独立链。信标链将是 Eth2.0 链的「系统链」,其主要职责将是存储和维护验证者注册表、处理分片链和信标链之间的交联 (crosslink) 以及在每个 epoch 期间打乱和分配验证者至各个分片链中 (Eth2.0 系统中将存在 1024 条分片链) 等等。

用户通过一个将部署在当前以太坊旧链上的智能合约中发送 32 ETH (质押金) 就可以参与到信标链的权益证明协议中来。这笔质押金将生成一个收据 (receipt),该收据将包含一个显示该验证者被分片至哪条分片链的 ID (阅读此文章 [12] 了解更多有关分片的信息)。

用户进行了质押之后,将会成为信标链中的待定验证者 (pending validator)。在等待一段时间后,用户才会被「激活」成为有效验证者 (active validator),之后就可以参与 PoS 协议验证了 [9]。只有当信标链处理了来自 Eth1.0 链生成的抵押收据之后,用户才可以被「激活」成为有效验证者。被激活的验证者将轮流提议新的区块和对区块的有效性进行投票。

Casper 的早期版本将使用现存的 PoW 提议机制,之后的版本将使用更为有效的提议机制。Vitalik 展望「将区块提议转变为一种 PoS 循环区块签名机制。」 [6] 为了组织验证者串谋发起攻击,信标链通过实现随机性来随机地将验证者分配到不同的分片链中来进行区块提议 / 投票验证 [8]。如果验证者不知道自己何时会被分配到哪条分片链中,那就能阻止他们提前串谋发起攻击。

在遇到分叉的情况下,验证者将使用他们客户端的信标链分叉选择规则来自动地选择正确的链。该分叉选择规则通过「Last Message DriVEN Greediest Heaviest Observed SubTree (LMD GHOST,由最新消息驱动的 GHOST)」来决定哪条链才是「规范链」。潜在攻击者如果想要对错误的分叉链进行验证,那就必须手动修改或消除 LMD GHOST 分叉选择规则。[备注:有关 LMD GHOST 更多信息,读者可参考 Unitimes 此前发布的文章《以太坊 2.0:如何实现最终性?》]

对于每个区块,其中一个激活验证者将被选中对新区块进行提议,其他验证者将通过投票的方式来证明该区块的有效性。Casper 的早期版本要求验证者为他们提交的每个证明发送一笔链上交易,但这会增加主链的负荷,并加重 Eth2.0 致力于解决的扩展性问题。根据当前的设计,信标链将会负责 PoS 机制,这样验证者的投票就不会争夺 PoW 链或者分片链上的空间 [8]。

证明 (attestations) 将是信标链负荷的主要来源,因此应该尽可能地将证明聚合起来,这是很重要的。证明 (attestations) 可以是分片链中的验证者对分片链区块的投票,或者是信标链中验证者对信标链区块的投票[7]。一旦每个分片链区块获得了足够多的证明 (即投票),该区块就会被被添加进该分片链中,并会通过一个称为 crosslink (交联) 的方式将该分片的状态提交至信标链中进行证明。在实现各分片链之间的异步跨分片通信中,交联也将起着重要的作用。

路线图

信标链 (也即 Eth2.0 的阶段 0) 将有望于 2020 年初启动,但只有当系统中质押的 ETH 数量达到最低数量要求,且至少存在三个处于生产就绪的客户端,信标链才能成功启动。预计之后的阶段 1 和阶段 2 将分别于 2021 年和 2020 年推出。

阶段 1 将引入基本的分片链结构,也即本质上是一个分片结构的试运行阶段,用于测试分片系统将如何运行。因此,阶段 1 将不会立即实现分片的全部扩展性潜力。此阶段将解决分片链的共识和最终性,并将允许信标链监控分片链的执行。

阶段 2 将见证一个完全集成分片的 Eth2.0 系统,分片将成为完全运行的链。阶段 2 也将引入全新的以太坊虚拟机 eWASM。

需要注意的是,尽管这些阶段在概念上是分开的,但由于各阶段存在的相互关联性,因此各阶段的工作都在同步进行中。

此外,当前在改进 Eth1.0 链的努力也在进行中,也即 Eth 1.x,其目的是通过客户端优化来提升网络的吞吐量,实施「state fees (状态费)」来确保运行全节点的可持续性,以及稳定交费易和开发出可用于将 Eth1.x 链与 Eth2.0 链连接起来的最终性小工具 (finality gadget)。

特别感谢 Marin Petrunić 和 Aidan Hyman 审阅了本文并使许多有价值的建议。此外,这篇文章也离不开许多其他伟大的作者和研究人员在该领域所做的工作。感谢所有参与创建和发布本文引用资源的人 !

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