以太坊协议状态:信标链

Ben Edgington  2018-11-05  以太坊/以太坊(Ethereum)栏目  

  以太坊2.0并非是一个新的想法。回到2014年,Vitalik已经就以太坊2.0发表了看法,“我们要么会解决扩展性和共识问题,要么至死方休。”要知道,当前我们依旧生龙活虎,V神在几周之前也阐述了他的新观点:“在以太坊2.0方面,已经没有明显未解决的理论问题了。”

  现在已经到了V神所谓的“软件开发的苦干阶段”了,而信标链(Beacon Chain)是以太坊2.0交付计划中需要首先实现的目标。在本文中,我们将讨论信标链的作用,为何需要信标链,以及信标链当前的开发进展等。

  信标链介绍

  在介绍信标链之前,我们来看看Hsiao-Wei Wang针对以太坊2.0系统的系统架构图。

以太坊2.0整体结构,来自 Hsiao-Wei Wang 的 PPT[1]:

  此结构图还可作为开发和交付以太坊2.0的分步路线图。图中从上往下依次是:

  PoW主链是以太坊区块链当前存在状态,即当前的以太坊主网。在以太坊2.0系统中,PoW主链依旧会像其当前一样运行,但主链之下的一切都将焕然一新。

  信标链(Beacon Chain)当前尚处于开发阶段,它将成为以太坊2.0中首先交付的成果。

  分片链(Shard Chains)是下一个要实现的目标,它将解决以太坊的扩展性问题。一开始,分片链将仅仅聚合所有的交易,并根据交易的顺序来达成共识,而并不会执行交易。这将很好地测试系统的基础设施和安全性。

  VM层是以太坊2.0系统最后一个重要组成部分,它将执行合约和交易。

  为何我们需要“信标链”?

  信标链是一种全新的权益证明(PoS)区块链,它就像脊柱一样支撑整个以太坊2.0系统。信标链是给整个以太坊2.0系统注入生命力的核心,负责指挥协调系统的所有参与者。

信标链的关键作用在于为其自身和所有分片链管理权益证明协议。这其中涉及很多方面,包括:

  管理验证者和他们的权益(stakes);

  在各个阶段,为每个分片制定被选中的区块提议者(block proposer);

  组织验证者们形成委员会(committees)来对那些被提议的区块进行投票;

  将共识规则付诸实践;对验证者进行奖励或处罚;

  作为分片在信标链上注册其状态以促进跨分片交易的锚定点。

  在深入阐述信标链的这些功能之前,让我们先来了解一下其中涉及的一些专业术语。信标链的想法来源于“random beacon(随机信标)”——比如NIST’s [2](美国国家标准技术研究所采用的随机性信标)——能够为系统带来随机性,且Dfinity [3] 项目也在区块链环境中采用了随机性信标的概念。

  尽管“信标(beacon)”一词隐含着由一个中心点向系统的其他位置进行广播,但在区块链领域中可不是这样:在区块链中,一切都是去中心化的。每个参与的节点都维护自己本地的信标链,来实现与其他节点保持同步。尽管信标链的确负责指挥(conduct)系统的其余部分,但这种指挥是去中心化的,就好像每个音乐家(musician)都有其自己内在的节奏感一样,这种节奏感并不是由一个指挥家(conductor)决定的。

  信标链功能介绍

  01

  管理验证者

  信标链的一个主要工作就是管理验证者集合(validator set),即那些在合约中押注了32个以太坊的节点,这些节点负责运行整个以太坊2.0系统。每个验证者可以具有多种状态,但只有那些被标记为“活跃的(active)”节点才能参与到以太坊2.0协议中。

  节点通过往工作量证明链(即当前的以太坊主链)的一个合约中发送抵押金(32个以太币)来加入验证者集合中。在经过一些有效检性查之后,这笔抵押金被锁在合约中,之后合约会发出一个日志条目(log entry,在Solidity语言中称为“事件(eVENt)”),由信标链的客户端接收。之后该节点就加入了信标链的验证者集合了。

  一旦成为“活跃的”验证者,被选中的验证者就可以通过向信标链(以及之后实现的分片链)提议区块,从而参与到以太坊2.0的协议中。这些验证者同样会加入到委员会(committees)中来对区块进行投票。

  当验证者想要退出系统并停止参与时,可以发出信号。在一段时间之后(当前默认的时间是97天,但之后可能会设置地更加灵活),验证者抵押的资金,加上相应的奖励,再减去罚款(如果有的话),将被退回至其中的一条分片链(shard chain)中。在工作量证明主网中是无法解锁验证者最初抵押的资金的,除非整个系统出现问题,社区成员同意通过分叉的方式来将资金退还给抵押者。

  上述一切都是信标链来进行管理的。

  02

  提供随机性

  在区块链系统中很难真正地生成高质量的随机性(randomness),但权益证明协议的一个关键要求是必须产生分布式的、可验证的、不可预测的、(适度)不偏不倚的随机性。信标链负责为系统的其他方面提供这种随机性:下文将提到的系统协议的某些特性需要依赖于这种随机性。

当前生成随机数的方法是通过RANDAO结构,验证者可提供一个“洋葱式结构的哈希”。RANDAO就是一种将许多参与者提供的随机数组合成一个单一的输出数字的方法。为了阻止任何一个参与者在很大程度上操纵随机性,会通过一个称为“提交-揭示(commit-reveal)”的方案来解决这个问题:当某个验证者登记加入验证者集合中时,需要提供一个约定值(commitment value),该值是通过对验证者最初选择的数字(original number)进行多次哈希之后生成的(形成一个洋葱式结构)。每当该验证者被选择成为区块提议者时,其需要通过提供上一次揭示出来的数字的原像(pre-image)来完成剥洋葱的过程。其他验证者可以查看该验证者的操作是否正确,因此区块提议者是无法通过改变其随机数在系统中作弊的。

  尽管这种方案并非完全能够实现毫无偏颇(因为如果某个区块提议者不喜欢某个随机数,可以选择跳过它),但这种方案被认为对于当前的协议设计来说,是足够的强健的。

  03

  区块提议者

  信标链同时管理着其自身的权益证明协议和每条分片链的权益证明协议。在工作量证明(PoW)系统中,选择下一个区块的节点,即区块的矿工,是第一个解决该区块的挖矿挑战的节点。而在权益证明(PoS)系统中,不存在挖矿,区块提议者是基于上文提到的协议中的随机性来进行随机选择的。

  PoW系统的另一个特征是出块时间是不规则的,尽管在以太坊上的平均出块时间约是15秒。相比之下,以太坊2.0系统中是每16秒定期产生一个区块(如果以后的测试证明可行,我们希望将时间减少至8秒)。这些16秒的周期称为“slots(时段)”。

  在每个时段,被选中的信标链区块提议者将会搜集那些来自先前区块的信标链验证者们的协议投票(认证),并将这些投票纳入该验证者发布的区块中。

  一旦分片链准备就绪,每个分片在每个时段都将拥有自己选择的区块提议者,被选择的提议者将为该分片收集所有的交易,并将这些交易纳入一个由该分片的委员会投票得出的区块中。

  04

  委员会

权益证明区块链的一个重要的安全保障来源于委员会(committees,由验证者组成),这些委员会负责通过投票来决定哪些区块构成整条链的真实历史记录。信标链依赖于对来自其自身的委员会的投票进行统计,即所谓的“认证(attestations)”,以便同意并最终确定信标链的历史记录。

  此外,信标链将为每个分片指定一个更小的分委员会(sub-committee),负责在适当的时侯确认分片的提议者是否行为得当。

  05

  奖励和处罚

  信标链的另一个管理角色是跟踪和更新验证者的抵押款(deposits)。

  验证者会因为表现良好并发挥作用而获得奖励:这是他们参与进来的激励机制。但如果验证者违反规则,那他们将受到处罚,即他们将损失自己押注的32个以太坊的一部分(被削减),并将从系统中剔除出去。验证者也会因为缺席(即不对区块进行投票)而受到轻微处罚,我们称之为“quadratic leak(二次泄漏)”。这么做的原因有些微妙,但可以保证当大量的验证者下线(比如在大灾难发生时),系统依旧可以继续处理区块。

  如果验证者的抵押款低于16个以太币,则信标链将把该验证者从验证者行列中剔除出去。

  06

  跨联

  最后,信标链执行跨联处理。跨联(crosslinks)将整个分片系统连接在一起,将每个分片锚定到作为脊柱的信标链上。

  每个分片当前的状态(即“组合起来的数据根”)将定期地被记录在信标链中实现跨联。当信标链的某个区块被最终确定时,相应的分片区块也被认为是最终确定的,且其他分片可以依靠这个确定的分片来进行跨分片交易。

上图为带有8个分片链(浅绿色)和跨联(浅蓝色线条)的信标链(蓝色)的可视化图。所有链上的最终区块为黄色。时间从左往右递增。(注:中间的为信标链,围绕信标链的为分片链)

  构建信标链

  至此,我们即将结束信标链的讲解。就其本身而言,信标链可能看起来并不是特别有用,它无法处理任意交易(arbitrary transactions):因为它没有智能合约,也没有以太坊虚拟机(EVM)。你无法通过信标链来做任何事情。但是,作为以太坊2.0首先要交付的组成部分,信标链是整个结构的基础。所有接下来会登场的以太坊2.0结构都是在信标链的基础上搭建的。因此,信标链必须牢固可靠。

  如果你想要了解更多的细节,可以参阅这篇正在赶制中的信标链技术规范[4]。这篇文档的创建和维护都是公开进行的:任何拥有有用信息的人都可以加入其中进行编辑。同时,在“Issue(问题)”[5]和“Pull request(抛出请求)”[6]中有各种有用的讨论。如果你只是想要了解重点内容,我已经开始在每周公告中整合主要规范更新和其他新闻[7]。

  要运行信标链,你将需要一个信标链客户端。当前正由许多团队通过一些众所周知的标准以太坊客户端开发套件(如GETH, Parity, Pantheon等等)进行开发。其中, Prysmatic[8]和 Lighthouse[9]团队会定期更新他们的客户端开发进展,且有些团队会向贡献者提供奖金。

这些是当前正致力于信标链工作的团队[10]

  至于进度…… 在撰写本文时,信标链的技术规范完成度接近了60%,还剩下一些待办事项有待完成[11]。尽管如此,开发者们预计会在今年年底前适度完成这份规范,并且可能到2019年第一季度末运行多客户端的信标链测试网络。最近几周,相关的开发进展迅速,有关以太坊2.0的真正讨论正在拉开序幕!

  正文中涉及的链接:

  [1]:https://docs.google.com/presentation/d/1G5UZdEL71XAkU5B2v-TC3lmGaRIu2P6QSeF8m3wg6MU/edit#slide=id.p4

  [2]:https://www.nist.gov/programs-projects/nist-randomness-beacon

  [3]:https://medium.com/dfinity/dfinity-white-paper-our-consensus-algorithm-a11adc0a054c

  [4]:https://github.com/ethereum/eth2.0-specs/blob/master/specs/beacon-chain.md

  [5]:https://github.com/ethereum/eth2.0-specs/issues

  [6]:https://github.com/ethereum/eth2.0-specs/pulls

  [7]:http://benjaminion.xyz/newineth2.html

  [8]:https://medium.com/prysmatic-labs

  [9]:https://lighthouse.sigmaprime.io/

  [10]:https://docs.google.com/presentation/d/1LTOqrIIdu8DtlvXFXsFeIbNqCL6k45xXPhrlAFlj7Pg/edit#slide=id.g42aaa57e8d_0_25

  [11]:https://github.com/ethereum/eth2.0-specs/blob/master/specs/beacon-chain.md#todo

  作者:Ben Edgington

  编译:Hulin

  原文链接:

  https://media.consensys.net/state-of-ethereum-protocol-2-the-beacon-chain-c6b6a9a69129

  【文章版权归原作者所有,其内容与观点不代表Unitimes立场。翻译文章仅为传播更有价值的信息,合作或授权联系请发邮件至editor@unitimes.io或添加微信unitimes2017】

版权信息
作者:Ben Edgington
来源:Unitimes

关于我们

联系我们

作者进驻

手机版

Copyright © 2013 比特巴 www.btb8.com