深度丨以太坊2.0 的信标链究竟是什么样的?
作者 | ConsenSys
您需要了解的有关分片(shards)、质押验证者(staking validators)、证明(attestations)、委员会(committees)、检查点(checkpoints)和最终性(finality)的所有信息。
还记得当你刚初窥区块链奥秘的喜悦吗?您是否渴望对信标链有类似的了解?以太坊的信标链是以太坊系统的核心,然而关于该系统的大多数内容都过于技术性、针对性或不够深入。
在这里,你可以充分理解信标链的元素和运行机理。在关键细节上会运用例子帮助你更好理解并节省时间。
我们假设你有坚实的以太坊或比特币基础知识,并对权益证明(PoS)有所了解。
让我们来深入了解一下分片(shards)、质押验证者(staking validators)、证明(attestations)、委员会(committees)、检查点(checkpoints)和最终性 (finality)。
分片(sharding):宏伟蓝图
在理解信标链之前,介绍一下分片(sharding)会有所帮助。目前包括以太坊在内的公链在可扩展性方面面临的主要问题是:每个节点都要验证并执行所有交易。
在计算机科学中,有两种主要的扩展方法:
垂直扩展:使节点越来越强大。
水平扩展:添加更多的节点。
为了实现去中心化,区块链需要进行水平扩展。以太坊 2.0(也称 eth2 或 Serenity)的一个目标是让节点在消费级硬件上运行。分片(Sharding)是对数据库进行水平扩容的方法。
通常,一个分片链都有一个节点子集来处理它。验证者被分配到不同的分片链上,并且只处理和验证该分片链中的交易。
以太坊分片上的节点子集是动态的,逐块对其进行处理。
区块链实行分片机制的主要挑战在于如何确保分片安全性。由于验证者分散在不同的分片中,有的节点可能会恶意控制某个分片。
解决方案的关键是:
随机分配(shuffling)验证者,即每个分片区块都有一个随机选择的验证者委员会,确保如果攻击者控制的验证者少于总数的三分之一,其想要攻击单个分片在数学上是不可能的。
欺诈证明(fraud proofs),数据托管证明 (custody proofs)和数据可用性检查 (data availability checks) 也是重要的安全组件。
目前的 eth2 计划是使用 64 个分片。虽然分片与信标链是独立运作,但我们还是会对整个系统的关键部分进行讲解。
分片已经揭示了以太坊信标链的作用和需求。我们也理解为什么要在传统区块链上增加新的元素。分片式公链的新兴领域总是欢迎有灵感的开发者创新。
以太坊 2.0 阶段
简而言之,以太坊 2.0 分为三个阶段:
阶段 0-信标链
阶段 1-分片
阶段 2-执行
与管弦乐队乐队进行类比:
阶段 0-指挥
阶段 1-乐器
阶段 2-乐手
所有阶段都是系统的重要组成部分,具有不同的特点。阶段 0 是以太坊 2020 年计划的一部分。阶段 1 一般来说比其他阶段更静态。阶段 2 一般是关于执行和代理的。
时隙 (slots) 和时段 (epochs)
信标链是以太坊 2.0 的心脏。它为系统的和谐与共识奠定了节奏。每个时隙是 12 秒,一个周期是 32 个时隙:6.4 分钟。
时隙 (slots) 是一个将区块添加到信标链和分片的机会。您可以想象,信标链和分片链是按步调编排的。当系统以最佳状态运行时,每 12 秒添加一个信标(链)块和 64 个分片区块。验证程序需要与该时间同步。
时隙 (slots)类似于区块生产时间,但时隙 (slots)可以是空的。信标链和分片的创世区块都在时隙 0(slot 0)中产生。分片将在信标链时段 0(Epoch0)的下一个时段开始运作,但无论是分片链还是信标链,都有自己的时段 0(Epoch0),且包含其创世区块。
验证者(Validators)、证明(Attestations)和信标链
虽然工作证明(PoW)与矿工相关联,但在以太坊 2.0 中,验证者是权益证明的 "虚拟矿工"。验证者积极参与以太坊 2.0 协议的共识。他们的激励机制将在后面的信标链验证者奖惩制度中讨论。
区块打包者(block proposer)是被随机挑选出来生产区块的验证者。
大多数情况下,验证者是对信标块分片区块进行投票的证明人(attester)。这些投票记录在信标链中。投票决定信标链和分片的头部。
在每一个时段(epoch)中,验证者被随机分配到一个时隙(slot)和分片中。该验证者参与到他所被分配的分片的共识中,从而他可以对该分片的分片头部进行投票。然后验证者将该时隙(slot)上的分片头和信标区块连接起来。
证明(attestation)是验证者的投票,通过验证者的余额进行加权。除区块之外,证明也会由验证者在系统中进行广播。
验证者也会互相监督,对举报其他验证者进行矛盾的投票或提出多个区块的验证者给予奖励。
信标链的内容主要是验证者地址、每个验证者状态、证明和到分片的链接。验证者由信标链激活,可以转换状态,这部分内容稍后将在信标链验证激活和生命周期中简要描述。
质押验证者(Staking Validators):语义
验证者是虚拟的,是由质押者激活的。在 PoW 中,用户购买硬件成为矿工。在以太坊 2.0 中,用户质押 ETH 以激活成为验证者。
我们可以将质押者(stakers)和质押金 (stake),验证者 (validators))和余额 (balance)联系起来。每个验证者拥有的余额最多为 32 个 ETH。不过,质押者可以质押他们所有的 ETH。每质押 32 个 ETH,就会激活一个验证者。
验证者通过利用信标(链)节点的验证者客户端运行。一个信标节点具有跟踪和读取信标链的功能。一个验证者客户端可以实现信标节点功能,也可以对信标节点进行调用。一个验证者客户端可以执行一个或多个验证者。
交联(crosslinks):将分片连接到信标链
交联是将信标链和分片链相连。在一个交联中,信标链紧跟分片链的头。由于有 64 个分片,每个信标块可以包含最多 64 个交联。一个信标块可能只有一个交联(如果在那个时隙中,没有验证者为其他 63 个分片提议区块的话)。eth2 第1 阶段计划进行交联,将分片链连接到信标链,作为分片叉选择、分片链最终性和交叉分片通信的基础。所有分片链在任何时候都紧跟信标链。
委员会(Committees):介绍
一个委员会就是一组验证者。为了安全起见,每个 slot(在信标链和每个分片中)的委员会都有至少 128 个验证者。恶意攻击者控制一个委员会的 2/3 的概率不到万亿分之一。
以太坊信标链的概念来源于随机信标(randomness beacon)—— 为公众散发随机数这一概念。信标链在一个随机的过程(RANDAO)中达成共识。
RANDAO随机过程根据验证者余额的权重,选择区块打包者(Proposers)。验证者可能是同一slot的提议者和委员会成员,但这不是常态。出现这种情况的概率为1/32,因此我们大概会在每个epoch 碰到一次。上图情景中的验证者不到8192 个,不然每个slot 就至少包含两个委员会。
这篇信标链的解释主要是关于信标链委员会:服务于信标链的验证者。一个(信标)委员会被随机地分配了一个分片,以便交叉链接到一个信标区块。没有固定的委员会。负责交联一个区块的委员会随每个区块的变化而变化。
单独构建区块链区块的分片链委员会将留作日后讨论。
许多分片区块可以由不与信标链交互的分片链验证者来构建,但是,一个分片要想与其他分片进行通信,就需要一个信标链委员会将其与信标区块进行交联。
该图是对三个slot 中发生的情况的描述。
在 slot1 中,一个区块被提出,然后由两个验证者验证,而委员会 A 中的一个验证者离线。slot1 的验证和区块在网络中传播并到达许多验证者。
在 slot2 中,一个区块被提出,而委员会 B 中的一个验证者没有看到它,因此它证明信标链头就是 slot1 的块。注意这个验证者与 slot1 中的离线验证者不同。证明信标链头的验证者被称为 LMD GHOST 投票。在 Slot3中,委员会 C 中的所有验证者都运行 LMD GHOST 分叉选择规则,并独立地验证同一个头。
在每个 epoch 中,验证者只能在一个委员会中。通常,有超过 8,192 个验证者:即每个 slot 有多个委员会。所有委员会的规模相同,并且至少有 128 个验证者。当验证者者少于 4,096 时,安全概率会降低,因为委员会的验证者少于 128 个。
委员会(Committees):关键
在每个 epoch 中,验证者被均匀地划分为各个 slot,然后再细分为适当大小的委员会。来自该 slot 的所有验证者都对信标链头进行验证。该 slot 中的每个委员会都试图交叉连接一个特定的分片。随机分配 (shuffling) 算法会按比例增加或减少每个 slot 的委员会数量,以使每个委员会至少得到 128 个验证者。
举个例子,假定有 16384 名验证者,其中 512 名验证者被随机分配到 slot 1 中,另外 512 名被分配到 slot 2 中,以此类推。slot 1 中的 512 名验证者被进一步分成 4 个委员会,并被随机分配到分片中。
假设分片 33、55、22、11 是这四个委员会所分配到的分片。所有 512 名验证者都要在 slot 1 中发起 LMD GHOST 投票;其中一个委员会的 128 名验证者试图和分片 33 产生交联;另一个委员会的 128 名验证者试图与分片 55 产生交联;剩余两个委员会则试图与分片 22 和分片 11 产生交联。
在 slot 2 中,这个过程会重复一遍,512 名验证者同样分成 4 个委员会,然后被随机分配到分片中。假定他们被分配到分片 41、20、17、15 中。所有的 512 名验证者都要在 slot 2 中投票选出信标链头;同时这几个委员会也试图与分片 41、20、17、15 产生交联。
这个过程也会在该 epoch 剩下的 slot 中再三重复。每个验证者在自己所处的 slot 中,可以进行投票、证明以及交联。在该 epoch 结束之后,所有 16384 名验证者都已发出过投票并且和分片进行过交联。
但到目前为止,验证者投票都是特定于 slot 而不是特定于 epoch 的。这就像给当地政府投票,而不是在更广泛的全国选举中投票。所有的验证者都没有对同一件事进行投票。接下来关于检查点 (checkpoints) 和最终性 (finality)的部分,描述了验证者投下的特定于 epoch 的选票。在指定的时间段,所有的 16,384 个验证者也将对 epoch 的检查点进行投票。
信标链检查点(Beacon Chain Checkpoints)
检查点 (checkpoints) 是位于 epoch 第一个 slot 里的区块。如果这个 slot 内没有产生区块,则最近的前一个区块即为检查点。每个 epoch 都会有一个检查点区块;一个区块可能同时是多个 epoch 的检查点。
需要注意的是,从 slot 65 到 slot 128 之间是空缺的。Epoch2 的检查点本来应该是位于 slot 128。但因为该 slot 丢失了,所以 epoch 2 的检查点还是 slot 64 处产生的区块。Epoch 3 同理,slot 192 处空缺,因此 epoch 3 的检查点为 slot 180 处产生的区块。
时段边界区块(epoch boundary block)是一些文献(比如 Gasper 论文,也是上图的来源)中用到的一个术语,可以认为是检查点的同义词。
在发起一次 LMD GHOST 投票时,验证者也要为最近的 epoch 的检查点投票,投票者希望确立的新检查点叫做 “目标检点”(target)。这种投票叫做 Casper FFG 投票,而且投票中也会包含投票者认定的上一个检查点,叫做 “来源检查点”(source)。
在上图中,epoch3 中的一个验证者的投票将创世块作为来源检查点,然后推举 slot64 处产生的区块为目标检查点。在 epoch2,同一个验证者又为相同的检查点投票了
只有被分配到某个 slot 的验证者才需要为该 slot 的区块投票,但是,所有验证者都要为每一个 epoch 的检查点发起 FFG 投票。
绝对多数(Supermajority)
由所有活跃验证者总余额的 2/3 所支持的投票内容就是绝对多数(Supermajority)。
举例说明,假设有三个活跃的验证者:两个验证者的余额为8ETH,一个验证者的余额为 32 ETH,绝对多数投票必须包含拥有 32 个 ETH 验证者的投票:尽管其他两个验证者的投票可能与该验证者不同,但它们没有足够的余额形成绝对多数。
最终性(Finality)
当一个 epoch 结束之后,如果其检查点得到了 2/3 余额的票数,也就是形成了绝对多数,那么该检查点就被证明 (justified) 了。 如果检查点 B 已经被证明,且位于其下一个 epoch 的检查点也被证明了,那么 B 就被最终确定了 (finalized)。一般来说,一个检查点会在两个 epoch 内得以最终确定,即 12.8 分钟。
平均来看,用户的交易总是发生在一个 epoch 的中间部分,那么距下一个检查点就还有半个 epoch 的时间,因此,一笔交易经过 2.5 个 epoch(16 分钟)就可以得到最终性(finality)。理想化情况下,超过 2/3 的证明会在一个时段的前 22 个 slot 内完成打包。因此,交易确认的平均时长是 14 分钟(16 + 32 + 22 个 slot)。区块确认则从区块证明,到被证明,再到最终性。用户可以自己选择是否等待交易最终确定,或者较低一点的安全性对他们也足够了。
信标链头发生了什么?
一个时段边界区块 (EBB) 在 slot96 处被提议,且包含了对 epoch2 中检查点的证明。Epoch 2 检查点的证明投票现达到了 2/3 的绝对多数,这意味着 epoch 2 的检查点被证明了,因此 epoch3 的检查点也得到了最终性。slot32 的最终性保证了之前所有区块的最终性。
当对检查点进行确定时,对确定的区块的数量并没有限制。虽然最终性仅在时段边界的时候产生,但证明 (attestations) 是逐个区块累加的,下文的“从创世区块到区块链头会发生什么”提供了另一种描述。
从 slot1 到 slot32 的信标块中包含的所有交联将导致分片链的确定。换句话说,当一个分片区块被交联到一个完成的信标块中时,它就得到了最终性。交联本身不足以使分片区块被确定,但有助于分片链的分叉选择。
从创世区块到区块链头会发生什么
用同样的方法,我们可以从创世区块发现一条故事线。从 slot1 到 slot63 的所有提议者都提议了一个区块,并且这些区块都被添加到链上。对于 Epoch3 中的每个块,它的检查点(在 Slot 32 处的块)累积了 55%的验证者证明。验证者提议 slot64 的区块的同时也包括了 Epoch 1 检查点的认证。现在,70%的验证者已经验证了 Epoch 1 检查点:这导致了它被证明。epoch2 的检查点(slot64)在 epoch2 的证明达不到 2/3 的绝对多数。验证者在 slot 96 处提议区块时,同时也对 epoch 2 处的检查点发起投票,所以这时候,epoch 2 检查点的投票达到了 2/3 的多数要求,也就是被证明了。Epoch 2 的检查点被证明的同时,epoch 1 的检查点以及所有此前的区块被最终确定了。
还有一种可能性,我们只考虑到 epoch3。epoch 1 的检查点可能在 epoch2 提议之前已经获得了绝对多数投票。譬如说,当 slot 32 和 slot 54 的区块被提议出来时,slot 32 的检查点的证明投票可能已经达到多数要求了。因而在这种情况下,检查点可能在 epoch 2 之前就已经被证明了。
最后一点,检查点可以在它现在的 epoch 中被证明,但是至少隔一个 epoch 才能被最终确认。
有时,一个区块被证明意味着两个甚至多个 epoch 以前的区块被最终确定。Gasper 论文里讨论了一些情形,只有在网络高延迟、网络隔离或遭遇强大攻击的情况下会出现这种状况。
对于分片及以太坊区块上的用户来说,最终性是非常重要的,它保证用户们的交易安全,降低了跨分片通信的复杂性。如果没有最终性,分片内部和分片之间的交易回滚会具有破坏性,甚至会使分片的好处作废。
证明 (attestations):细究
证明包含一个 LMD GHOST 投票和一个 FFG 投票。
理想情况下,每个 epoch 中所有验证者提交一份证明。每一个证明有 32 个 slot 的机会被打包进链,这意味着在单个 epoch,一名验证者可能有两份证明被打包上链。
如果验证者在其所分配的 slot 里发送证明,且该证明被打包上链,那么验证者获得的奖励为最大值;随后打包上链所获得的奖励就会不断减少。
为了留给验证者准备的时间,他们被提前一个 epoch 分配到委员会中。一旦 epoch 开始,提议者只会被分配到各 slot 中。尽管如此,秘密领导人选举旨在降低攻击和贿赂提议者的风险。
委员会使得联合签名的技术达到最优化状态,将每一名证明者的签名聚合成一个签名。当同一委员会中的验证者进行相同的 LMD GHOST 和 FFG 投票时,他们的签名可以被汇总。
信标链验证者奖惩机制
证明者奖励(attester rewards)
证明者惩罚(attester penalties)
质押者特有下行风险(typical downside risk for stakers)
罚没和举报者奖励(slashings and whistleblower rewards)
提议者奖励(proposer rewards)
不作为惩罚(inactivity penalty)
当验证者做出大多数其他验证者都同意的认证(LMD GHOST 和 FFG 投票)时,他们就会得到奖励。在 eth2 第一阶段,验证者也会因为交叉链接而得到奖励。当区块最终确定,奖励也随之确定。
另一方面,如果验证者没有提交证明,或者投票支持了一个最终不能得到确定的区块,他们也会受到惩罚。
在描述相对来说不那么常见的奖惩制度之前,你可能想知道成为一名质押者所面临的下行风险。
作为一名质押者,损失 ETH 的风险与回报并存。如果一名验证者在一年中能赚取 10% 的报酬,那么一名(诚实) 验证者因为工作糟糕则可能面临 10% 的损失。
比如说,一名验证者总是不在线,或者其投票的区块总是无法被最终确定,他将会受到惩罚,而罚款数额等于一名验证者投出有效区块所获得的奖励数额。
罚没(Slashing)的力度下至 0.5 ETH,上至一位验证者的全部权益。一名验证者如果受到了罚没 (slashing) 惩罚,其将至少损失余额的 1/32,并被停止工作。惩罚的力度就像该验证者离线了 8192 个 epoch 一样。
协议还会根据相近时间内被罚没的验证者数量施加一个额外的惩罚。
此种额外惩罚的计算公式是:验证者余额 × 3 × 被罚没的验证者占比。
也就是说,如果 1/3 的验证者同时受到了罚没,他们会损失所有余额。而对罚没行为举报成功的验证者,则可以获取检举者奖励。
区块一旦得以最终确定,区块打包者便可以获得相当可观的奖励。一直在线且很好完成工作的验证者提议的区块所能获得的奖励将提高 1/8。如果发生罚没行为,提议者还可以将罚没证据打包进区块,从而获得少量报酬。在 eth2 阶段 0,所有举报者的奖励实际上都归于提议者。
以太坊 2.0 系统有许多机制,对这些机制的评价应从所有机制的整体效果出发。奖惩制度的最后一是不作为的的惩罚。简单来说,如果有超过 4 个 epoch 没有获得最终性,那么所有验证者都要受到翻倍的不作为惩罚,直到下一个检查点被最终确定。
不作为惩罚设立的意义在于:如果 50% 的验证者掉线了,在 21 天后会重新对区块进行最终确定。
罚没(Slashing)
对于验证者来说,罚没条件主要有三个,分别是:双重提议、FFG 双重投票,FFG 环绕投票。LMD GHOST 投票是不会招致罚没的。
双重提议 (double proposal)
指一名区块打包者在他所分配到的 slot 里提议多于一个区块。
双重投票 (double vote)
指验证者在提交 FFG 投票时,多个投票指向同一个目标检查点,但引用的来源检查点却各不相同。
环绕投票 (surround vote)
指验证者在提交 FFG 投票时,多个投票所指向的检查点恰成环绕形状。
下面有两个例子,背景是一名验证者在 epoch 5 内,为 slot 32 处的源检查点和 slot 128 处的目标检查点发起了一次 FFG 投票:
在 epoch 6 内,为 slot 64 处的源检查点和 slot 96 处的目标检查点发起的 FFG 投票,被其在 epoch 5 中的投票环绕。
在 epoch 6 内,为 slot 0 处的源检查点和 slot 160 处的目标检查点发起的 FFG 投票,则环绕了其在 epoch 5 中的 FFG 投票。
在 epoch 6 内,针对 slot 128 目标检查点的 FFG 投票是双重投票,除非 slot 32 为源检查点,否则要受到罚没。相同的 FFG 投票不会遭到罚没。
拥有相同来源检查点的 FFG 投票也不会招致罚没。这是维持网络活性的重要条件。举个例子,如果两条分叉链各自都有 50% 的验证者余额支持,协议应该鼓励验证者通过投票给相同来源检查点、不同目标检查点,在分叉间切换(而不是惩罚他们切换分叉,这样会导致网络继续分裂)。能够安全地在分叉间切换,验证者们就能打破僵局,尝试形成 2/3 的多数。
一名举报者者提出举报时,需要打包冲突投票的相关信息来证明该验证者应受到罚没。
要在一个庞大的记录系统里,有效地找出冲突投票,是对算法和数据结构的一项巨大挑战。目前“罚没检测工程挑战”正在寻求参与者。
验证者完全有能力使自己避免被罚没:只需要记住其对哪些证明和提议进行了签名。一名诚实的验证者不会因为其他验证者的行为而受到罚没。只要验证者没有对冲突的证明或提议进行投票,就不会受到罚没。
一个验证者客户端可以运行多个信标节点,从而延长系统的正常运行时间、增强信任和 DoS 攻击抵御。在运行节点或是运行备份验证者客户端时,用户需要注意,验证者有无对冲突的信息进行签名。
信标链验证者和生命周期(Beacon Chain Validator Activation and Lifecycle)
每一个想成为验证者的用户都要先有 32 ETH 才能获得验证者资格。用户质押 32 ETH 到以太坊主网上的保证金合约中,就能获得一个验证者资格。
另一方面,信标链也会劝退(反激活)所有余额降低到 16ETH 的验证者;质押用户可以取出剩余的验证者余额,不过在 Eth2 Phase 0 还做不到。
验证者在服务 2048 个 epochs(约 9 天)之后也可以主动退出。退出时要先走完 4 个 epoch,质押用户才能取出自己的权益。在这 4 个 epoch 内,该验证者的余额仍然是可以被罚没的。因此,诚实验证者的余额可以在约 27 小时之后取出。
"以太坊 2.0 阶段 0 验证者生命周期"中有更详细的技术说明,内含以下示意图:
为避免验证者集合在短时间内出现大规模的变动,单个 epoch 内能激活和退出的验证者数量是有一个机制限制的。这样可以让激活许多验证者、快速攻击系统的攻击更难发动。
信标链还使用了一个叫做 “有效余额” 的概念,这个有效余额回避验证者余额的变化更小,使得技术上的最优化成为可能。
总述:
在每一个时段,验证者都被均匀分配到不同 slot 中,并进一步划分成相同规模的委员会。验证者只有 1 个应召的 slot,也只会存在于 1 个委员会中。因此:
同一个 epoch 里的所有验证者尝试最终确定同一个检查点:这是 FFG 投票;
所有验证者被分配到一个 slot 中,尝试投票选出同一个信标链头:这是 LMD GHOST 投票;
所有验证者被分配到一个委员会中,尝试交联某个分片;
采取最优行为的验证者获得的奖励最多。
激活信标链至少需要 16,384 个创世验证者。验证者的数量可能会因为罚没或者自动退出而减少,也会随质押者的激活而增加。
当系统升级到 eth2 阶段 1 或以上时,将需要更多的验证者工作。信标链需要至少 262,144 个验证者 (质押金额将超过 800 万 ETH) 来生产区块,每个区块包含 64 条交联。
微信扫描关注公众号,及时掌握新动向
2.本文版权归属原作所有,仅代表作者本人观点,不代表比特范的观点或立场
2.本文版权归属原作所有,仅代表作者本人观点,不代表比特范的观点或立场