对于以太坊,2019 年会是重要的一年,因为按照计划,以太坊 2.0 将要在今年起航,从 PoW 的旧大陆出发前往 PoS 的新大陆,与此同时,以太坊 1.0 还会继续存在并保持进化。以太坊 1.0 运行在原主链上,以太坊 2.0 运行在 Beacon 链上。
计划中的航程估计要有两年,直到 2021 年,在分片链能够实现完整的功能后,1.0 才会把以太坊的实际运行权交给 2.0,自己则会退出历史的主舞台,作为 2.0 的一个分片或一个主存储合约而存在。
以太坊 2.0 的 Beacon 链是如何运行的?ETH (Ether)持有人如何从 PoW 链「跨」到 Beacon 链?以及,跨还是不跨?我们将在本文试着去探讨。
读懂 Beacon 链
先做个简单的科普:Beacon 链是一条全新的 PoS 区块链,它是以太坊 2.0 的核心组件,却不是以太坊 2.0 的全部。以下几点可能是理解 Beacon 链的关键:
1、Beacon 链是一条 PoS 链,运行以太坊的 PoS 协议 Casper。 2、以太坊 1.0 就是指 PoW 的主链,但以太坊 2.0 包括 Beacon 链、分片链、虚拟机层三部分,其结构如下图所示:
3、Beacon 链是以太坊 2.0 的中枢,也是 2.0 的第一个和最重要的一个组件。如下图所示,所有分片都会连接它并与它通信,Beacon 链为分片链提供安全性和最终确认性。
Beacon 链主要完成两个功能:一是执行 PoS 共识,包括维护验证者集合、选择验证者组成委员会、分配验证者对分片块进行提议或证明、对验证者实施奖励和处罚等等。它是验证者参与质押系统并根据所押权益获得收益的渠道,也是整个系统安全性的保障。
第二个功能是实现分片的通信。各分片都会将自己最新状态的哈希存到 Beacon 链的区块上,当 Beacon 链区块完成时,相应的分片区块就被认为是最终确定的,其它分片就可确信它们并与之跨分片交易。分片链与 Beacon 链通过「交联」实现跨分片通信,从而将整个系统连接在一起。
4、Beacon 链上没有虚拟机,没有智能合约,也无法处理交易;Beacon 链不存储现行以太坊区块链上存储的信息,它只存储验证者列表和 Attestation。所谓的「Attestation」,是指经过确认并由验证者签名的哈希值,它们实时记录着一个特定分片的状态。
5、Beacon 链与以太坊 1.0 的 PoW 链会彼此独立地运行大约两年。在以太坊 2.0 能够实现完整的功能前(目前预计在 2021 年),以太坊都运行在 1.0 上,Beacon 链上的区块没有什么实际意义。
以上即是 Beacon 链的基本情况。为什么说 Beacon 链要到 2021 年才能正式运行以太坊?因为从以太坊的发展路线图可知,到这一年以太坊 2.0 才能支持智能合约和资产转移,实现可用性。
2021 年前的以太坊 2.0 长什么样?
在了解了 Beacon 链之后,让我们简要介绍一下从现在到 2021 年的以太坊 2.0,会经历的三个阶段:阶段 0、阶段、阶段 2。
阶段 0 (2019 年):启动 Beacon 链
阶段 0 专注于让 Beacon 链上的验证者运行起来。用户可以在链上存入 32 个 BETH (Beacon ETH)成为验证者,不过在该阶段验证者只管理 Beacon 链,此时没有分片链。
Beacon 链在早期会尽可能保持简单的迭代设计,该阶段不支持账户、资产转移和智能合约。BETH 仅能被验证者使用,不能在链上转移,也无法转入交易所交易。
阶段 1 (2020 年):启动分片链
阶段 1 将加入分片链组件,实现 Beacon 链+分片链。但该阶段只是试运行分片结构,并不是真正的用分片实现扩展,Beacon 链将分片链区块视为没有结构或含义的简单比特集合。分片链此时依然没有账户、资产和智能合约。
Beacon 链将支持 1024 条分片链,每条链都有一组 128 个验证者组成的委员会来验证。Beacon 链为每个分片在每个周期随机选择分片验证者,分片验证者通过「交联」证明分片的内容和状态。
需要指出,在阶段 0 和阶段 1,以太坊 1.0 和以太坊 2.0 之间没有数据流通,以太坊依然运行在 PoW 链。
阶段 2 (2021 年):启动虚拟机层
阶段 2 将加入虚拟机层,它是以太坊 2.0 的最后一个重要组件。实现 Beacon 链+分片链+虚拟机层的以太坊才是一个我们熟悉的完整的公链系统,以太坊 2.0 的可用性将在这个阶段正式实现。
此时,智能合约被引入系统,资产也能够在链上自由转移;分片链从单纯的数据标记器变成功能完整的区块链,交联操作支持跨分片的通信;一些最常用的开发工具也可能被移植到以太坊 2.0,以支持 EVM2。EVM2 是以太坊新的虚拟机 eWASM,基于 Web Assembly,支持多种编程语言实现智能合约。
虽然以太坊的分片技术路线图总共包括七个阶段,但在进入到阶段 2 后,以太坊就将从 PoW 链迁移到 PoS 链,从 1.0 时代真正进入到 2.0 时代。
32 ETH 的船票贵不贵
以太坊 2.0 中的新资产叫 BETH,它有两种生成途径,一是由以太坊 1.0 中的 ETH 转化而成,1ETH 生成 1 BETH;二是在以太坊 2.0 中质押 BETH 参与 Staking,作为验证奖励生成。
由于在阶段 0,用户可以在 Beacon 链存入 32 个 BETH 成为验证者,姑且可以理解为花 32ETH 买张船票,跟随以太坊前往以太坊 2.0 新大陆。问题是,你愿意上船吗?
鉴于在阶段 2 之前 BETH 是不能在账户间转移和交易的,以太坊及其各种应用也依然运行在 PoW 链上,所以当 Beacon 链上线后,用户会把 ETH 转化为 BETH 的唯一原因是用 BETH 参与 Staking,以获得更多的 BETH。
根据之前的资料,ETH 与 BETH 之间的转换是单向的,即只能通过合约用 ETH 生成 BETH,而不能把 BETH 重新换为 ETH。
这带来的一个问题就是 1 枚 BETH 的价格上限为 1 ETH,BETH 永远不会比 ETH 更值钱,因为 1ETH 还包含了一个从 ETH 转为 BETH 的权利;同时,转为 BETH 还意味着为期两年的锁仓期。
不过以太坊创始人 Vitalik Buterin 最近在一次讨论中提到了 ETH 与 BETH 双向兑换的可能性,以太坊联合创始人 Joe Lubin 近日在接受采访时也表示可能存在双向机制。但双向机制可能带来一个新的问题:BETH 通过 Staking 增发,但 ETH 不能参与这种增发,双向兑换对以太坊 1.0 链上的资产是不利的。
以上两种不同的方案会影响用户把资产从 ETH 转为 BETH 的动力,进而可能影响以太坊从 1.0 过渡到 2.0 的平稳性。用户是否愿意把资产转移到 Beacon 链这个问题会在阶段 2 到来后变得严峻,以太坊采用的解决方案也许会在这两年内根据情况不断地调整和变化。
既然转换方案未定,我们不妨先看看用户迁移资产的另一种决定性的动力:抵押 BETH 参与 Staking 的收益。
至少在目前阶段,用户并不能通过加入权益池以任意数量的 BETH 参与进以太坊 2.0 的 Staking,用户只有在 Beacon 链上质押 32 BETH (2^5)才可以获得验证者资格:用户在当前的以太坊 PoW 主链上发送 32ETH 至一个注册合约,合约会生成一个「验证者委员会成员名片」,让用户成为以太坊 2.0 的验证者。
BETH 的质押回报率如下表所示,这是 Vitalik Buterin 今年 4 月发布在 Github 上的一份提案,并且已经被添加到以太坊 2.0 的规范中:
如果总共质押了 100 万个 BETH (2^20),系统每年最多可增发约 18 万个 BETH,质押最大年回报率为 18.1%;如果质押 1000 万个 BETH,每年最多可增发约 57 万个 BETH,最大年回报率为 5.72%;质押上限为 1.34 亿个 BETH (2^27),此时每年最多可增发约 209 万个 BETH,通胀率维持在 2% 以下,回报率为 1.56%。
以太坊基金会研究员 Justin Drake 认为 3000 万个 BETH (2^25)的质押是最有利于系统健康的,此时通胀率维持在 1%,回报率为 3.3%,假设每个分片每年平均消耗 1000 BETH 的 Gas,通胀率将降至 0.5%,质押者的回报率将达到约 5%(链闻注:Drake 预估的是以太坊正式运行在 2.0 上时的最优质押率)。
这里有两个指标可以用来做比较:一是如今以太坊上通过金融产品存入以太的回报率,二是 Tezos 与 Cosmos 等 Staking 项目的回报率。
验证者需要投入的另一个成本是运营成本,但它似乎在可接受的范围内。
Ethhub 创始人 Eric Conner 在深挖以太坊 2.0 相关规范并同相关研究人员对话后,对验证者年度运营成本的估计是:每个 Beacon 节点需要 120 美元,每增加一个验证器,即每多质押 32 BETH 时需增加 60 美元。
所以,从回报率的角度来看,用户在阶段 2 之前把 ETH 转为 BETH 的动力可能主要取决于三个因素:参与 Staking 的 BETH 数量、ETH 与 BETH 之间的转换方式、32ETH 的门槛。(链闻注:本文未涉及币价波动这一影响因素)
不过无论 32ETH 的「船票」贵不贵,有两类用户可能都会在第一时间参与进以太坊 2.0,他们为以太坊 2.0 的运行提供支撑,即使 2.0 还没有正式运行以太坊:
一类用户是区块链生态的参与者,尤其是以太坊生态的参与者,投入 32ETH 是有价值的;一类用户是以太坊一直以来的支持者,他们手中 32ETH 的「成本价」可能并没有那么高,同时作为在未来也会长期持币的用户,用 BETH 参与 Staking 可以让他们获得更多的 BETH。
如何保证 PoS 链的安全性?
Beacon 链是 PoS 共识,如果用户缺乏动力把 ETH 转为 BETH 参与 Staking,会不会影响以太坊 2.0 的安全性?
实际上,以太坊 2.0 通过机制设计保证了自身较高的安全门槛。
首先是惩罚机制。如果验证者有恶意行为,比如同时给两个区块投票,其质押的代币就会被罚没。
如果以太坊 2.0 共识失败,将意味着有 1/3 的活跃验证者违反了消减条件,也就是说,一次成功的攻击伴随着的是质押代币总量中的 1/3 被销毁,这是攻击者要付出的成本 —— 不同于 PoW,在 PoS 下「作案」是要把「作案工具」一并没收的。
另一个,是Beacon 链的「验证者集-委员会-证明者」的区块验证方式:活跃的验证者构成验证者集,该集的一个随机抽样子集形成委员会,委员会中的证明者对区块签名验证。
即使验证者集中有超过 1/3 的验证者是不诚实的,委员会被不诚实验证者掌控(即不诚实验证者超过 2/3)的概率也很低,并且随着委员会验证者数量的增加,委员会被掌控的概率迅速降低。
假设我们有 1000 位验证者,其中 333 位是不诚实的,当一个委员会由 1 名成员组成时,该委员会被不诚实验证者掌控的概率是 33.3 % ;当委员会由 13 名成员组成时,被掌控的概率则只有 10 %。
以太坊 2.0 在初始阶段的委员会验证者数量下限是 128 位,即使不诚实者控制了验证者集中的 1/3,攻击成功的概率也不到万亿分之一。
以太坊 2.0 如何实现随机性?
在有效的机制设计下,影响以太坊 2.0 安全运行的最重要的一个因素就是随机性,Beacon 链诸多协议的执行都是基于「随机数」来完成的。因此,我们简单介绍一下以太坊 2.0 中随机性的来源。
以太坊 2.0 是通过 RANDAO + VDF (Verifiable Delay Function,可验证延迟函数)来解决随机性问题的。
RANDAO是一种生成随机数的方式,它会内建在 Beacon 链的逻辑中,参与者(此处就是验证者)各自独立提供一个随机数,RANDAO 将这些随机数相加得到一个新的数字,并把该数字作为随机数输出。
但 RANDAO 有一个缺点:最后一个公开随机数的人是可以预测 / 操纵随机数结果的。因为他知道前面全部的值,所以能够通过自己出随机数还是不出来影响最终的输出。因此,我们需要在 RANDAO 之上加入 VDF。
VDF简化来讲是指在输入一个值后,需要运算很长的一段时间才能得出结果,但这个结果是可以轻易被验证的。VDF 把 RANDAO 产生出来的随机数作为种子去生成新的随机数,而系统使用的是 VDF 提供的新随机数。
因为 VDF 随机数的计算时间足够长(以太坊 2.0 中, VDF 为 102 分钟),最后一个公开随机数的人是无法在自己提供随机数的时间内计算出结果的,也就无法通过自己的行为来影响最终的随机数(以太坊 2.0 中,RANDAO 每 6.4 分钟就完成一个随机数的输出,这个时间 / 过程也被称为一个 epoch)。
RANDAO 的周期是 6.4 分钟,VDF 的周期是 102.4 分钟,因此以太坊 2.0 中会有 16 个 VDF 同时运行,为系统每隔 6.4 分钟生成一个随机数,Beacon 链将以此为基础完成自己的工作。
需要注意的是,区块链上的随机数问题是个难题,RANDAO + VDF 同样也需要被进一步验证。
做个勇敢的探索者
以太坊 2.0 客户端 Nimbus 的测试网已经上线,它被称作 testnet0,运行了一条能够在节点间同步信息的 Beacon 链,并且节点可以分布在远程的设备上。
此版本设置了 400 个验证者节点来维护网络的运行,其中有 50 个验证节点是留给「勇敢的探索者」的,任何人都可以加入。这里我们提供一条小贴士:如果遇到问题,可以在 Status 的 #status-nimbus 频道进行询问。
使用 Go 开发的以太坊 2.0 客户端 Prysm 以及使用 Rust 开发的 Lighthouse 都即将发布测试网。如果一切顺利,Beacon 链,即阶段 0 的以太坊 2.0,会在今年年底上线,就如路线图中规划的一样。
几乎所有人都尊重和喜爱以太坊,但人们也会谈到它的「历史包袱」。如果说以太坊是一艘船,它似乎是一艘笨重的船,难以协调、行动迟缓。
但笨重的船也有它自己的优势,它有更完备、更安全的基础设施、它有更坚持、更彻底的分布式路线,如果把目光放长远,这种船或许才是能承载更多生态、承担更长旅程,最后到达未知大陆的船。
现在这艘船即将起航,海员招募就要开启。你,要一起来吗?