英文原文:https://media.consensys.net/state-of-ethereum-protocol-2-the-beacon-chain-c6b6a9a69129
以太坊2.0原理详解 - 灯塔链(二)
以太坊2.0 并不是一个新的概念。 早在2014年,Vitalik就针对以太坊2.0说过,“要么解决可伸缩性和共识问题,要么走向死亡。” 而就他之前的言论,对于以太坊2.0来说,已经没有明显的未解决的理论问题。是时候进行工程实践了。Beacon Chain 灯塔链是交付计划中以太坊2.0的第一个组成部分。
沿着思考问题的一般逻辑(是什么 -> 为什么 -> 怎么做),本文中我们将介绍什么是灯塔链,为什么要做灯塔链以及怎么实现的问题。
1 灯塔链
开篇中我们引用了下图介绍过以太坊2.0系统的架构,
上图同时反映了未来以太坊2.0开发的Roadmap,从上到下依次是:
- Pow主链:以太坊1.0,也就是目前正在运行的以太坊(已完成)
- 灯塔链:协作层(阶段0)
- 分片链:数据层(阶段1)
- 虚拟机:执行层(阶段2)
从架构图中我们可以看出,灯塔链介于POW主链和分片链之间。PoW链为灯塔链提供权益基础,分片链为所有分片链提供管理功能。
2 为什么需要一个“灯塔链”
灯塔链是一个权益证明链,在整个以太坊2.0系统中具有重要作用,类似合唱团中指挥官的作用。
灯塔链的主要功能是管理自身的权益证明协议,和所有的分片链。这有很多方面:管理验证者和他们的抵押权益;在每一步为每个分片提名出块者;组织验证者进入委员会对提议的区块进行投票;验证者的奖励和处罚; 同时,协助处理跨片交易。
在进一步研究这些功能前,先介绍一下名字的来源和意义:Beacon Chain这个名字起源于“随机信标”的概念 - 在NIST中,它为系统的其他部分提供随机性源,区块链项目Dfinity就采用了随机数灯塔的概念。虽然“beacon”是一个中心点,向系统的其余部分传播亮光,但在区块链中不是这样的:一切都是去中心的。每个参与节点都维护自己的灯塔链,努力与其他节点保持同步。
术语介绍:
验证者:任何人都可以抵押一部分以太币来称为验证者
提议者/出块者:验证者可以被选中,成为提议者,只有提议者才有权出块
委员会:从验证者集合中选择一部分进入委员会,有点类似代表大会,然后对提议的区块进行投票,投票通过的区块才有可能得到最终的确认。
2.1 主要功能
2.1.1 管理验证者
Beacon Chain工作的一个主要部分是维护一组验证者,这些验证者是已经抵押32个以太币(抵押后的以太币,我们下面叫做股权)的节点集,负责运行以太坊2.0系统。验证者可以具有多种状态,但只有那些标记为“活动”的状态才能参与以太坊2.0协议。
节点通过将其股权发送到PoW链上的智能合约来加入验证者集。在进行一些有效性检查之后,以太币被锁定并且合约发出日志条目(Solidity中的“事件”),可以由Beacon Chain客户接收。然后将节点导入到灯塔链上的验证者集中。
一旦激活,验证者就开始参与出块,如果被选为出块者,他们就会在灯塔链和分片链(如果已经实现的话)上出块。验证者也会被选进委员会,然后对区块进行投票。
当验证者宣布退出或者不再参与出块等,经过一段时间(目前为期97天,可调整),他们的抵押,加上奖励,减去罚款,将被退回到一个分片链中。解锁PoW主网上的初始股权是不可能的,除非整个系统失败并且社区同意给退款。
所有这些都由Beacon Chain管理。
2.1.2 提供随机数
在区块链系统中很难产生良好质量的随机性,但是权益证明协议的关键要求是随机性的来源,其是分布式的,可验证的,不可预测的,并且(合理地)是不可替代的。 灯塔链负责向系统的其余部分提供此随机性:下面描述的几个协议功能都依赖于它。
当前的随机数生成方法是RANDAO,一种验证器提供类似“哈希洋葱”的结构。 RANDAO只是将许多参与者提供单个随机数,组合成单个随机数输出的一种方式。 为了防止任何一个参与者操纵随机性,使用了密码学中的承诺方案。 当验证者注册时,它需要提供一个承诺值,该值是其选择的随机数经过多次散列得到的。 每次验证者被选为提议者时,他需要提供上一次公开值的原象(其实就是承诺值的原象,也就是验证者选择的随机数)来剥离洋葱的一个或多层。 其他人都可以检查这是否正确完成,因此提议者不能通过改变其贡献来欺骗系统。
虽然这种方案不是完全不可替代的 - 如果不喜欢随机数,提议者可以跳过它 - 它被认为对于当前的协议设计来说足够健壮。
2.1.3 出块提议者
在PoW系统中,下一个出块节点是最快解决挖矿问题的节点。在PoS中没有挖掘,出块节点随机选取,基于上节提到的随机数。
PoW系统的另一个特性是出块时间是不规律的,尽管它们在以太坊上平均约为15秒。相比之下,我将Beacon Chain比作心跳,以太坊2.0每隔16秒出一个块(如果测试表明可行,则可以减少到8秒)。这些16秒的周期称为“slots”间隙。
- 在每个时隙,被选中的提议者收集先前块的灯塔链验证者集的所有投票(证明),并将它们组成一个新的区块。--> 灯塔区块
一旦分片链就位,每个分片将在每个slot中有自己提议者,它将收集该分片的所有交易并将它们打包到一个块,并由分片委员会投票。--> 分片区块
2.1.4 委员会
POS区块链的安全性来源是委员会,它们对哪些区块构成链的真实历史进行投票。灯塔链依赖于投票计数,称为“证明”,来自其委员会,以便同意并最终确定(最终确定)其历史。理想情况下,如果能够快速收集证明,委员会会是系统中的所有激活的验证者。
此外,Beacon Chain将随机为每个分片指定较小的子委员会,这将在适当的时候负责确认分片的提议者正确行为。
2.1.5 奖励和惩罚
Beacon Chain的另一个管理角色是跟踪和更新验证人的押金。
验证员因表现良好并发挥自己的作用而获得奖励:这是参与的动力。但是,如果验证人违反了规则,他们就会受到惩罚,32个以太网押金将减少(削减)。因缺席(没有进行投票)也会有一些小的惩罚。其原因很微妙,能够使系统保持处理能力,即使大量验证者离线,比如在发生灾难的情况下。
如果验证者的抵押金低于16以太,则灯塔链将从验证集中删除它。
2.1.6 交叉链接
最后,灯塔链执行交联处理。交叉链接将整个分片系统连接在一起,将每个分片锚定到灯塔链。
周期性地,每个分片的当前状态(“组合数据的Merkel根”)作为交叉链接被记录到灯塔链区块中。当Beacon Chain块被最终确认时,相应的分片块也被认为是最终的,而其他分片知道它们可以依赖它进行跨片交易处理。
上图是灯塔链加上8个分片链(浅蓝色方块)和交叉链接(浅蓝色线条)的可视化图
所有区块链上的黄色区块代表已经被最终确认的区块。时间从左到右延伸。 注意:此图来自Casey Detrio.
2.1.7 构建灯塔链
灯塔链自身看起来可能并不是特别有用,因为它不处理任何交易,没有智能合约,没有EVM,甚至不能做任何有用的事情。但是,作为以太坊2.0的第一个组成部分,它是构建以太坊2.0的基础,整个架构都是在此基础之上,因此必须足够牢靠。
如果你想更加详尽的了解灯塔链beacon-chain,请参考Spec
灯塔链的设计,让我想到一句计算机领域比较经典的话:“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决”