想不想对信标链(Beacon Chain)也有这么透彻的理解?
还记得自己第一次对区块链世界发出 “原来如此” 感叹时候的喜悦吗?
想不想对信标链(Beacon Chain)也有这么透彻的理解?
信标链是整个 Eth2 系统的核心;但关于信标链的内容,大多都仅仅是在搬弄技术词汇,很琐碎,也不够深刻。
在这里,我们会提供对信标链诸要素和机制的透彻解读。我们也会提供例子,恰如其分地点出关键细节,使你能事半功倍。
我们假定,你已经拥有对以太坊区块链或者比特币区块链的坚实理解,也熟悉权益证明(Proof of Stake)。
先来看看分片(shard)、验证者(staking validator)、见证消息(attestation)、委员会(committee)、检查点和最终确定性(finality)所组成的全景。
分片:远大理想
要理解信标链,先了解一下分片的概念会有所帮助。区块链(包括以太坊)当前在提高可扩展性(scalability)上面临的主要难题是:每个节点都必须验证和执行所有交易。
而从计算机科学的角度来看,要扩展吞吐量,主要有两种办法:
A. 垂直扩展:大意是加强节点,让节点变得越来越强大。
B. 水平扩展:大意是,加入更多节点。
为了去中心化,区块链系统只能水平扩展。以太坊 2.0(也叫 Eth2 或者 Serenity)的其中一个目标是,让普通的消费级硬件就能运行节点。分片这个术语的本意,就是对数据库进行水平分区(horizontally partitioning)。
基本上,一条分片链会由一部分节点(即全网节点的一个子集)来处理。而系统中的虚拟矿工,验证者(validator),会被分配到不同的分片上,仅仅处理和验证自己所在分片链上的的交易。
在这个系统中,按块处理某个分片的节点群是会不断更换的。
要对一个区块链系统做分片,主要的挑战就是分片的安全性。因为验证者分散在各个分片上,恶意验证者攻陷单个分片的难度会降低。
因此,分片解决方案的关键是:随机混洗验证者,让每个分片区块都由一组(伪)随机选出的验证者所组成的委员会来处理,使得一个所控制权益少于全体验证者权益 1/3 的攻击者的成功概率为 0(mathematically improbable)。
错误性证明(fraud proof),数据托管证明(custody proof)和数据可用性检查(data availability check)同样也是重要的安全组件,但要专门写文章才能解释清楚。
Eth2 现在的计划是启用 64 个分片。虽然分片跟信标链在概念上是相互独立的,我们还是准备讲讲整个系统的一些关键元素。
分片概念反映出了信标链的功能和需要;通过分片这个概念,我们可以理解为什么需要在传统的区块链系统中加入这些额外的部分。这个全新的领域也欢迎有所感悟的读者提出创新。
以太坊 2.0 各阶段
以太坊 2.0 会分三个阶段部署:
- Phase 0:信标链
- Phase 1:分片
- Phase 2:执行
可以类比为人体的三个部分:
- Phase 0:心脏
- Phase 1:四肢
- Phase 2:大脑
也可以类比为一支气势磅礴的管弦乐团:
- Phase 0:指挥家
- Phase 1:乐器
- Phase 2:乐手
每个阶段都会整合到系统中,分别担任不同的角色。比起其它阶段,Phase 1 所引入的功能会更加波澜不惊,而 Phase 2 会更关乎执行。
时隙和时段(Slot and Epoch)
信标链就是以太坊 2.0 的心跳,是整个系统的和谐及共识中的主旋律。
一个时隙(slodt)是 12 秒,一个时段(epoch)由 32 个时隙组成,因此是 6.4 分钟。
– 时段 0 的 32 个时隙。创世块就在时段 0 产生 –
(本文中所用的参数数据都来自信标链技术规范 v0.10.1)
时隙是用来标记产生信标链区块及分片区块的机会的:在信标链和各分片上,每一个时隙就有一次产生新区块的机会。你可以想象信标链和各分片链是精心设计、紧密同步的。理想情况下,每 12 秒,就会产生 1 个信标链区块,和分布在不同分片链上的 64 个分片区块。验证者之间确实需要在时间上达成同步。
因此,时隙就像区块时间一样,只不过,时隙也有可能出空块。信标链和分片链的创世块是在时隙 0 时产生的;不过,各分片链会在信标链的时段 0 完成之后才开始运行,而且各有各的时段 0(产生创世块的起点)。
验证者、见证消息以及信标链
PoW 区块链是靠矿工来维系的,以太坊 2.0 的权益证明系统则是靠 “虚拟矿工” —— 验证者。验证者即是以太坊 2.0 协议共识过程的主动参与者。TA 们的经济激励会在后文的 “信标链验证者奖惩措施” 部分讨论。
区块的提议者指的是一名被随机选出来产生区块的验证者。
在大多数时候,验证者都仅充当见证者,仅仅是对信标链区块和分片链区块投票。这些投票会被记录在信标链上,也相应决定信标链的最新区块,以及分片链的最新区块。
– 在某个时段的第 28 个时隙处,没有出现相应的区块提议(被分配为提议者的验证者因为一些原因而没有提出区块)-
在一个时段中,一名验证者会被伪随机地分配到一个时隙和一个分片上。该验证者会参与被分配到的分片的共识过程,以投票选择出所在分片的最新区块。验证者也会在一个时隙内把最新区块链接到信标链区块上。
所谓见证消息(attestation),就是一名验证者发起的投票,其权重由验证者的余额决定。见证消息会被验证者附加到区块内,随着区块一起传播。
验证者之间还会互相监督,可以报告其它验证者做出互相冲突的投票或者提议多个区块的不轨行为,如果报告属实则可以得到奖励。
信标链的主要内容就是一份验证者地址的注册表、每个验证者的状态、见证消息、以及链接到分片的信息。验证者在参与前需经过信标链激活,也可以转变自己的状态,在下文的 “信标链验证者激活及生命周期” 部分有述。
参与质押的验证者:术语含义
在工作量证明区块链上,用户成为矿工的方式就是控制硬件参与共识。而在以太坊 2.0 中,用户可以通过质押 ETH 获得验证者资格,并通过控制验证者来参与网络。所以说验证者是虚拟的,是由质押者来主动激活的。
把质押者(staker)和权益(stake)、验证者和余额(balance)关联起来会更容易理解。每个验证者的余额最大为 32 ETH,虽然质押者可以把自己全部的 ETH 都质押进去。每存入 32 个 ETH,就可以获得 1 个验证者资格。
验证者的运行靠的是验证者客户端,这种客户端会利用信标链节点来执行正常功能。信标链节点拥有追随信标链运作及读取信标链信息的功能。验证者客户端既可以自己运行信标链节点的功能,也可以连接到其他人的信标链节点。
交联(crosslink):让分片扎根到信标链上
所谓交联,就是放在一个信标链区块内、指向某个分片区块的数据。信标链就是通过交联来跟跟踪分片链(的最新区块)。因为有 64 个分片,每个信标链都能包含最多 64 个交联。一个信标链区块里可能只有一个交联,如果在该时隙,没有验证者为其它 63 个分片提议区块的话。交联功能计划在 Eth2 Phase 1 时引入,以使各分片链能扎根到信标链上,并让信标链来充当分片链分叉选择、分片链确定性以及跨分片通信的基础。
所有的分片链都全程追踪信标链。
委员会简介
委员会就是一组验证者。出于安全考虑,每一个时隙,在信标链和每一条分片链上,都会有一个委员会,由至少 128 位验证者组成。攻击者只有万亿分之一不到的几率,能控制一个委员会中 2/3 的验证者。
信标链这个名字,正是来源于其公开提供随机数的功能(即 “随机性信标”)。信标链会对一个叫做 “RANDAO” 的伪随机过程达成共识。
– 在每一个时段,伪随机过程 RANDAO 都会选出所有时隙的提议者,并且混洗验证者到不同的委员会去 –
验证者是由 RANDAO 以验证者的余额为权重选择出来的。一个验证者可能在一个时隙中同时又是提议者,又是委员会成员,但这并非常态。发生这种事情的概率是 1/32,所以我们估计每个时段会看到一次。上面这个示意图描绘的是验证者数量少于 8192 个时的情形,不然一个时隙至少会有两个委员会。
本文着重考察的信标链委员会:为信标链服务的验证者。一个信标链委员会会被随机分配到一个分片上,在一个信标链区块链上产生交联。而且委员会成员不是长期不变的,负责产生交联的委员会都是逐块逐块替换的。
仅仅为分片链产生区块的委员会留待日后解释。分片链验证者可能在不与信标链交互的情况下产生许多信标链区块,但是,如果一个分片要跟其它分片通信,它就需要信标链委员会把分片区块交联到一个信标链区块上。
– 协议假设验证者总是给自己认为是区块链顶端的区块投票 –
上面这个图片综合了三个时隙内产生的情况。在时隙 1,有验证者提议了一个区块,并且该块得到了两个验证者的见证;委员会 A 中的一个验证者离线了。在时隙 2,又有人提议了一个区块,而委员会 B 里面的一个验证者没有看到,所以其见证消息表示 TA 认为信标链的顶端(最新区块)仍然是时隙 1 处产生的区块。注意,这个验证者跟时隙 1 时的离线验证者不是同一个。对信标链顶端区块的投票称作 “LMD GHOST 投票”。在时隙 3,委员会 C 中的所有验证者都运行 LMD GHOST 分叉选择规则,并独立地投票同一个区块为信标链顶端。
一个验证者在一个时段中只会参加一个委员会。一般来说,系统中的验证者会超过 8192 个,所以每个时隙会有多于一个委员会。委员会的规模都是一样大的,都至少有 128 个验证者。当系统中的验证者少于 4096 个时,安全性就会下降,因为委员会的规模将少于 128 个验证者。
委员会:关键
在每个时段,验证者们被均匀地分配到时隙中,然后进一步分配到同等规模的各委员会中。所有验证者都要在自己所在的时隙出发出见证消息,指出信标链的顶端。每个委员会都要在自己所在的时隙尝试交联到特定的某个分片。混洗算法会增减委员会的数量,以保证每个委员会都至少有 128 名验证者。
举个例子,假设有 16384 名验证者。其中 512 名验证者被伪随机地分配到时隙 1,另外 512 个被分配到时隙 2,等等。时隙 1 的 512 个验证者被进一步切分成 4 个委员会。所有 512 个验证者都要在时隙 1 处发起 LMD GHOST 投票;其中一个委员会的 128 名验证者尝试交联到分片 33;另一个委员会的 128 名验证者尝试交联到分配 55;另外两个委员会则尝试交联到分片 22 和分片 11。
在时隙 2,这个过程会重复一遍。512 名验证者一样被划分成 4 个委员会。假定他们被分配到的分片为 41、20、17、15。所有的 512 个验证者都要在时隙 2 处为信标链的顶端投票;这几个委员会也会尝试为分片 41、20、17、15 提出交联。
这个过程也会在该时段剩下的时隙中一一重复。每个验证者都会有所在的时隙,在那个时隙 TA 就可以发声、提出见证消息、产生交联。等到时段结束之时,所有 16384 名验证者都已享受过发起投票和交联的机会。
但是,在上述过程中,验证者的投票都是基于时隙的,而不是基于时段的。有点像在给地方政府投票,而不是在搞全国大选。全体验证者未曾为同一个东西投票过。下面这个部分就要讨论检查点和确定性,解释各验证者需要在所在的时隙发起的、针对时段发起的投票。也就是说,在自己所在的时段,他们还要为时段的检查点投票。
(未完)
原文链接:https://ethos.dev/beacon-chain/
作者: ethos.dev
申明:本站所发布文章仅代表个人观点,不代表链嗅网立场。
提示:投资有风险,入市须谨慎。本资讯不作为投资理财建议。
评论列表(1条)