研报 | 以太坊2.0升级报告
来源:OKEx
一、伊斯坦布尔升级
11月21日以太坊官方博客发文称:以太坊网络将按计划在区块高度9,069,000处进行升级,时间预计在2019年12月8日星期日发生。具体升级日期和时间可能会因出块速度有所变化。本次伊斯坦布尔升级要实现的功能包括引入分片;降低 GAS 成本的措施;改进与隐私币 Zcash 的链互操作性;以及允许更多创造性功能的智能合约。伊斯坦布尔升级将分两个阶段实施,包含14项EIPs(以太坊改进提案)。其中 6 项提案将在第一阶段(V1)中实施应用,其余 8 项仍需核心开发员商讨审议后,预留给之后的第二阶段(V2)升级实施。
在V1阶段这些提案中,EIP-1884颇具争议——为保护区块链免受潜在的垃圾交易攻击,它将增加应用程序开发人员从网络中检索数据的计算成本,给操作码重定Gas耗费,一部分操作的Gas耗费提高了。这使得在以太坊上调用数据的成本高于先前,对于开发人员来说,需要避免编写占用存储空间很高的应用程序来消除 Gas成本变化带来的最大干扰,例如,预估在一笔交易中访问的总存储空间+合约+合约代码,并确保不会过载。另有EIP-1108大受欢迎——它涉及到对以太坊上预编译的椭圆曲线算法重新定价。旨在通过优化 GAS 支付来改善以太坊的可扩展性和隐私协议,并将使 ZK-SNARKs 和其他隐私应用程序(如 Zether 和 AZTEC)在以太坊上的使用成本更低。
第二阶段(V2)将计划在升级后的主网上实施,包括了一项被称为“ProgPoW”的算法改进,它将通过替换工作量证明功能 Ethash 算法来增强以太坊抗 ASIC 的能力。
伊斯坦布尔升级是以太坊可扩展蓝图上的一个关键里程碑,力图在不牺牲去中心化原则的前提下,使应用区块链变得更快速、更便宜。
以太坊成立至今已牢牢占据加密资产市值第二的位置,并拥有着全球较大的开发者社群,其在DAPP数量上也将其他公链远远甩在身后。但是即便是这样“一人之下万人之上”的地位,也并不意味着以太坊就可以高枕无忧了。定位于“世界计算机”的以太坊,目前每秒只能处理大约15笔交易,像Visa这样的私人公司则可以每秒处理45,000笔交易。频频发生的拥堵事件导致的额外费用和处理时间等待更是让用户的体验变得很差,这在很大程度上限制了以太坊的发展。以太坊想要被大量采用,必须要大幅提升以太坊网络上的扩展性与性能,从而更好的承载去中心化应用,促进行业应用爆发。
(主流公链DAPP数据图,https://www.stateofthedapps.com/,11月29日)
以太坊2.0是替代当前以太坊的网络的既定规划。伴随着以太坊即将进行的伊斯坦布尔(Istanbul )升级,以太坊2.0的方案和进程再次成为大家热切关注的一个问题。
二、以太坊 2.0
以太坊的目标是成为分布式金融和智能合约执行平台,成为“一台真正的世界计算机”。以太坊的官网是这样显示的:以太坊是面向去中心化应用的全球的、开源的平台。在以太坊上,你可以编写控制数字价值的代码,完全按照编程的方式运行,且在世界上任何地方都可以访问。在这个去中心化的世界当中,以太坊似乎将自己定位成去中心化网络的构建者,去中心化网络基础设施与技术的提供者。
为了实现世界计算机的目标,以太坊在2014年诞生之初,就设定了4个发展阶段:Frontier (前沿)、Homestead (家园)、Metropolis (大都会)、Serenity (宁静)。前三个阶段都是采用POW模式,第四个阶段“宁静”则是POS——以太坊的最终形态,也就是我们说的以太坊2.0。
2.0阶段将完成从 PoW 到 PoS 的转化,以及其他一些重要升级。
(以太坊1.0和以太坊2.0基本信息)
2.0升级完成后,预计以太坊速度会大大加快,不同于之前的 POW,它将依赖于 PoS 权益证明的共识算法来验证交易。
2.1 以太坊2.0架构
(以太坊2.0整体架构 ,来自Hsiao-Wei Wang)
此图从上至下为:- PoW Main Chain是当前的以太坊主网。在以太坊2.0系统当中,它将会作为信标链的一个分片继续运行。
- Beacon Chain即信标链,它是所有链的基础链,是整个以太坊2.0系统的中枢部分,通过权益证明Casper协议(Casper是整套系统的共识层,负责管理验证者,施行奖励和惩罚)并协调所有独立并行的分片链,通过交联(Crosslink)作为各分片的锚定点以实现跨分片通信,并为分片提供最终确定性保证。
- Shard Chains是分片链,是可扩展性的来源。每一个分片都有一个验证者委员会对分片进行打包和验证,并将分片的状态通过交联定期记录在信标链上。一旦信标链上敲定(finalize)一个区块,该区块中的交联所引用的分片块就被认为确定不可篡改了。
- VM层是以太坊2.0系统的最后一个重要组成部分,它将提供合约以及交易的执行。
以太坊2.0的架构如图1所示,在以太坊2.0中会有一条称之为信标链的主链,在信标链下,存在64个分片,每个分片可以独立地处理数据。信标链是该架构的核心,负责连接主链以及管理各个分片。
Casper是其对应的共识,它有两个版本,一个是Vitalik领导的Casper FFG,FFG使用POW+pos的混合共识,作为使以太坊从PoW成功转变到PoS的过渡协议。它的主要思想是借助PoS帮助PoW产生的区块最终确认,进而在减少矿工奖励的情况下提高系统的安全性;另一个是Vlad领导的Casper CBC,CBC则是纯PoS共识,从目前来看CBC仍有很多细节需要进一步研究和探讨。
信标链通过Casper共识协调所有独立并行的分片链,负责将验证者分配到分片中并追踪每条分片当前的状态,为分片提供最终确定性保证,对提升整个系统的安全性也能起到至关重要的作用。它是实现以太坊 2.0的基础,
以太坊2.0中,1.0原链仍保持原有状态运行PoW共识。在分片链能够实现完整的功能后,1.0 将把以太坊的实际运行权交给信标链,作为信标链的一个分片或一个主存储合约而存在,两者通过桥接实现互通。
2.2 以太坊2.0更新点
按照以太坊的发展路线图,以太坊将在2020年步入2.0阶段。以太坊2.0这场技术升级主要有三大创新:权益证明的共识机制(PoS机制)、分片和eWASM虚拟机。
共识机制POW转POS——提升效率,解决耗能问题
在以太坊 1.0中,使用工作证明(Proof of Work, PoW)作为共识机制,并借此产生新的区块。基于POW算力的共识,所有的节点同时只能做一件事,整个网络能够处理的任务量是非常有限的,严重受制于网络中单个节点所能处理任务的上限。即使对区块大小进行扩容,由于存在全网共识,效率提升的作用也是有限的。因此,为了要减少工作证明产生新区块时所花时间过长,以及需要大量算力造成资源浪费的问题,以太坊 2.0 将改为权益证明( Proof of Stake, PoS)作为产生新区块的共识机制。
分片 (Shards) ——提升网络性能和容量
物理空间上,分片是将公链网络中的所有节点划分为不同的分组,每一个分组叫做一个分片。原本公链中所有节点所做的任务是完全相同的,现在将任务进行分组,分配给不同的分片,各个分片处理不同的任务。原来公链网络的性能瓶颈取决于网络中节点的性能,进行分片后,单个分片内的节点仅需承担全网的部分工作,各个分片并行工作,从而提升整个网络的承载能力。假设分片数为n,则每个节点需要承担的的工作量为全网工作量的1/n。同理,全网容量也将变为原来的100 倍。分片是区块链扩容最佳方案,它能在没有提高节点硬件要求且没降低去中心化程度的情况下,实现网络性能和容量的大幅提升。
(分片物理空间图,图片来源于《分片技术研究报告》)
由eWASM代替EVM——提升智能合约的兼容性和执行效率虚拟机是类似于操作系统的小的程序,是处理智能合约部署和执行的地方。以太坊系统上的所有节点都需要运行智能合约来执行最终在区块链上的交易,每个完整节点里面都会运行一个虚拟机,所有节点会执行同样计算,之后所有节点来比对这个结果并写入区块数据中。
(智能合约运行流程图)
以太坊2.0将支持多种编程语言,以eWASM 将替代 EVM。EVM 虚拟机是以太坊网络中的核心引擎,驱动着整个以太坊的运转,承载着以太坊上所有的通证、DAPP、DAO 组织和游戏等。但由于EVM工作臃肿繁复的编译工作会消耗大量 gas 燃料费,并且随着以太坊2.0PoS和分片的改进需要虚拟机并行处理事务,而EVM是按顺序处理事务并不适合此类操作。因此以太坊团队提出使用 eWASM 替代 EVM,eWASM 是WASM (WebAssembly) 代码的Ethereum版本, 相比于EVM,eWASM具有更好的性能以及更好的扩展性,可支持Solidity,C++,Rust,AssemblyScript 等多种编程语言,开发合约会更容易,也将可能在ETH2.0上支持智能合约、账户、状态等。此外,eWASM向后兼容EVM,因此现阶段Ethereum的智能合约理论上在Ethereum 2.0依旧可以运行。
2.3 关键解决方案
与此同时,由于分片和pos共识机制的引入,以太坊2.0面临着新的挑战。于是有Casper FFG、信标链、桥接解决方案来弥合这些风险,帮助以太坊2.0不断完善。
2.3.1 Casper FFG
在Casper FFG实施后,以太坊将会先进入一个POW+POS混合挖矿的阶段,这个阶段大多数的区块仍然是通过POW来产出,部分区块会开始交给POS节点,让整个网络以较为平缓的方式向POS来进行过渡。Casper FFG按期为系统分配验证者委员会,为每个分片选出区块提议者和区块验证者,对验证者实施奖励和处罚。
1. 管理验证者状态
验证者的状态有四种:未激活的(尚未开始履行验证者职责)、激活的(正在验证)、等待( 正要成为一个验证节点但还在等待队列中 )和退出的验证节点(希望解除验证者职责但仍卡在退出队列中 )。
在Casper FFG上,一个完整的验证人周期是:
1.交抵押金:需要往Capser的智能合约中抵押32个ETH
2.等待入选通知:等待1天时间
3.投票:等2确认后,在检查点投票,确认区块
4.退出:发出退出协议后,还需要继续验证7天
5.提取抵押金:提交申请后,需要等待4个月左右才能取出。
进入和退出要有一个等待期是为了系统要安排验证者组成委员会,而且是点对点连接,要让这个过程尽可能平滑,让验证者数量不至于大幅波动。
了解两个时间单位
Slot(时隙):区块提议人提议区块并用于验证的时间,当前为12秒。如果验证者委员会内部能达成共识,该时隙便能成功产生一个区块,否则该 slot 便为空。
Epoch(时段):多个时隙( 当前为 32 个 )组合而成的时间段,为6.4分钟。 epoch 中最后一个 slot 称为Checkpoint(检查点)。
成为Validators(验证者):
由于POS存在“无利害攻击”问题,即在POS机制下,恶意的节点验证者可以在没有任何损失的情况下去把自己的币押在分叉链上推动硬分叉。因此在Ethereum 2.0中验证节点需要向信标链抵押一定数量的ETH(目前为32ETH)才能申请加入,当被标记为“active" 之后,才能运行Ethereum 2.0协议,同时信标链也会跟踪和管理验证节点。32个ETH的门槛较低,架构在PoW上的PoS是以智能合约的形式存在,节点程序可能会稍微简单一点,用户只需要在电脑上运行钱包就可以了,配置要求性也不会很高。验证人最重要做的事情是步骤3的投票,准备,及时投票就可以让验证人得到奖励,避免被罚没token。
退出验证:验证者也可以发出信号表明他们想要退出系统,并停止参与协议的运行。为防止长程攻击,以太坊ETH2.0中有较长的提取延迟期,他们的抵押TOKEN加上奖励再减去罚款,将被退回到一个分片链当中。
2. 为系统随机分配验证者
Committees(验证者委员会)是由信标链随机选择的一组(至少128个)验证节点,负责见证信标链和各分片产生的区块。信标链有其对应的委员会,每一个分片也各有一个验证区块的验证者委员会。委员会负责保证它们所在分片的安全性、活性以及完整性,并负责证明信标链上的分片状态。
在每一次slot中,信标链会在各委员会中随机为所在链选出一位验证者负责出块,一定数量的其他验证者则则检查该区块并验证正确性。到下一次出块时,则再随机选出一个验证节点提议生成区块,同时换另一组不同的验证节点验证正确性。
分配好的委员会在完成一个Epoch的出块和验证任务后,系统会将所有的验证节点重新洗牌,给每一分片随机选出下一个Epoch的新的验证者委员会。验证节点的选举过程在随机数生成算法的帮助下,从根本上避免了验证节点间的勾结串通,提高了协议的安全性。
3. 确保链的最终确定性,避免POS长程攻击
Bitcoin的PoW共识采用最长链原则,为防止双重支付的发生,一般需要等6个区块的确认之后,交易才能被真正确认为有效。事实上,6个区块确认之所以被认为是确认有效的标志,是因为在此之后,在现阶段Bitcoin 的算力条件下,该交易被篡改的可能性已经可以忽略不计,但是从理论上来讲,即使在一笔交易之后经过了几百个区块的确认,依据最长链原则,该交易仍然有被通过51%攻击篡改数据的可能性。因此在PoW共识下,链的确定性只是隐式的最终确定性,而这一特性将会使本就复杂的状态分片变的更加不确定。
以太坊2.0中验证节点对每一个区块进行投票会增加网络传播开销,为了减少Casper中投票的数量,每个epoch里的最后一个slot上的区块设置为一个检查点,参与共识的验证节点会对检查点投票。每个验证者投的是一段检查点,可以是从确定性检查点开始到若干个检查点之后的一个检查点。从创世区块开始(创世区块是第一个确定性检查点),当下一个检查点收到了超过2/3的的投票,那么这个区块就成为确定性不可更改的,这个检查点即是确定性的检查点,以此类推。当一个确定性检查点收到了超过2/3从它出发到它后面的某个子检查点的投票时,那么这个确定性检查点到后面这个检查点间的所有的检查点都已经被确认。
如果确定性检查点在同一分支上的上一检查点也是确定性检查点,且有超过2/3的验证者对这段投票,那么这个确定性检查点就是最终性的。如果一个检查点状态是最终性的,那么它以及它之前所有的区块都会确认。所以Casper共识中的又一大改进是引入了显式的最终确定性,也就是在最新区块前若干区块前的区块信息无法再被篡改,这将有利于实现无状态客户端。
这其间,为了防止验证者在运行的过程中作恶,Casper制定了一套惩罚机制如下:验证者对于同一个区块高度不能发起两个不同的投票,并且两个投票的投票范围不能存在一个包含一个,否则罚没抵押的token。
此外,为了让PoS能够提高PoW链的安全性,在如何进行分叉选择的时候,FFG对最重链进行了些许的修改:首先在视图中找到高度最高的确定性检查点,并在该检查点之后的区块上进行最重链选择。
这样做有两个好处,第一个是FFG中只要是在最终性检查点之前的区块都是被确认的,没有被颠覆的可能性。第二点是一个确认的区块的安全性是需要矿工不断将自己的工作量提供给该区块的,因此为了激励矿工需要更多的挖矿奖励;FFG中,只要是最终性的区块都是被确认了的,无需后续的矿工用工作量为已经确认的区块增加安全性,因此可以降低挖矿奖励,降低通胀率。
4. 通过奖惩机制规范节点行为
POS验证节点除了承担出块的作用外,还承担验证区块的作用,它还需要一直在线以完成分配给它们的任务。
验证者投票的权重取决于他们抵押token的大小。验证者每成功打包一个区块,就会获得一个与他们所持有的TOKEN成比例的以太坊2.0系统奖励。如果大多数验证者拒绝他们所建立的区块,那么验证者将面临失去抵押token的风险。同时,如果验证者没有履行对区块投票的责任,那么他们质押的以太币会被削减,如果验证节点的余额减小到验证阈值以下,则将被踢出验证节点池,无法继续参与验证工作。因此,CASPER迫使验证者诚实行事,并通过奖惩制度遵守共识规则。
2.3.2 信标链
跨片通信需要借助信标链来完成,因为一个分片没有其他分片的直接信息,只能通过交联到信标链上得到关于其他分片的信息。在以太坊2.0中,每一个分片都有一个验证区块的验证者委员会,委员会成员必须在信标链上写入关于分片的可验证信息(比如:默克尔根),这便是交联。当信标链区块完成时,相应的分片区块就被认为是最终确定的,而其余分片则可确信它们可依赖其进行跨分片交易。如果验证者委员会成员不能对交联的有效性达成共识,那么将会对出错验证者进行罚没。1. 保证分片验证者随机性
区块链系统中很难产生良好的随机性,而一个权益证明协议的关键要求,就是随机性的来源,它必须是分布式的、可验证的、不可预测的,并且是不可剥夺的。分片更容易被恶意矿工掌控,因为攻击者只需要1/N的hash算力就可以完全控制一个分片。因此对于一个分片系统来讲,需要很好的随机性来防止特定分片被单独攻击.而信标链就是负责向系统的其余部分提供这种随机性。在以太坊分片中,当前的随机数生成是信标链通过RANDAO结构完成的。
验证者会提供一个“哈希洋葱”。 而RANDAO结构将很多参与者提供的单个随机数组合成单个输出数字的一种方式。为了防止任何一个参与者显着地操纵随机性,开发者使用了一种提交泄露(commit–reveal)方案。当验证者注册时,它会提供一个承诺值,该值是其选择的原始数字经多次哈希后产生的。每次在委员会中选择区块生成者时,它通过提供最后一个揭示数字的原像来剥离“洋葱”的一层或多层。其它人都可以检查这是否是正确完成的,因此提出者不能通过改变其单个随机数来欺骗系统。因此区块生产者基于上述协议内的随机性,随机地选择区块提议者。
casper协议功能中让信标链每个分片选出验证者委员会、择出块验证者等都依赖于RANDAO结构带来的随机性。
2. 通过交联(crosslink)成为各分片的锚定点,实现跨分片通信
当分片 A 上的用户或合约想与分片 B 交互时,需要让分片 A 验证者委员会成员在信标链上写入关于分片的可验证信息(比如:默克尔根)。分片 A 会将它的所有收据打包到它的区块头中。信标链等待分片 A 就包含该收据的区块达成共识后,将分片 A 的区块头打包到信标链中。分片 B 等待信标链完成区块共识后,才能将包含分片 A 该区块头的信标链区块头打包进分片 B 的区块中,从而达成片内共识。如果分片 B 上的合约想要发送回复信息(也许是返回一个值或一个错误),就需要将整个过程倒过来:分片 B 生成一条收据,最终在分片 A 中生效。
以太坊 2.0 新提案的分片数量由 1024 个降至 64个,降低了运算的复杂度,进行交联的共识周期从一个 epoch降到一个 slot,来降低跨分片交易时的延迟时间。
双向通信时,当分片 B 上的合约为不需要发送回复信息的最佳情况时也需要消耗 4 个共识周期才能完成,如下图1到4的过程。用户在 3 个时段结束后才能够确认通信过程已经完成,因为用户能够在分片 A 接收到分片 B 的可验证信息及其证据前看到分片 B 已经对该可验证信息完成共识了。由于 ETH 2.0 的共识周期是 12秒,分片 A 的用户必须等待 12 *3=36秒才能看到结果,而若想在分片 A 上查询到该结果则需等待12 *4=48 秒。
2.3.3 桥接
桥接是将以太坊 1.0 上的ETH迁移到以太坊 2.0 。
单向桥接方案中现有的以太坊 1.0 以太币持有者可以烧毁他们所持有的货币以换取等量的以太坊 2.0 以太币,2.0以太币将会生成并被锁在信标链的保证金合约中,但是无法回传。这种桥接方式会导致验证者流动性问题,而且更重要的是,它可能会引发以太坊 1.0 和以太坊 2.0 之间的可替代性问题,在双向桥接之前产生,交易所中很可能会同时有两个币。双向桥接不会有这个问题,但双向桥接是一种紧密耦合的共识机制,对于两边链的攻击及产生的问题,都会影响到另一边的链,协定的开发势必会非常烦琐。
下图是在 EthHub 上列出的单向桥梁和双向桥梁一些显著的优点和缺点。值得注意的是,单向桥接的优点大多体现在技术方面,而缺点则主要集中在经济方面。也就是说,关于单向桥梁和双向桥梁的选择实质上就是技术与经济挑战之间的权衡。
双向桥接目前可能的路线有两条,一种是在以太坊 1.0 上面,建立以太坊 2.0 的轻节点;另一种是在以太坊 1.0 上运作以太坊 2.0 的全节点。
桥接需要考虑到每个协定的安全性,因为实际用户群存在很多担忧,并且需要大量的协调,才能在我们的生产网络上获得硬分叉。团队希望在影响到以太坊 1.0 的安全性和风险状况之前,先在生产环境中得到验证。开发团队应该会在加入验证者流动性之前启用桥接,但是会等到第一阶段的产品稳定之后再开放;有很多相关的研究都在同时进行,这可能会影响到何时完成这个操作。
三、以太坊2.0面临的风险
3.1 落地风险
Ethereum 2.0开发难度较大,时间较长。由架构图可以看出,完成以太坊2.0需要有几个大的技术创新,实现智能合约分片与状态分片本身就有极高设计与开发难度,除此之外还需要考虑与原链的过渡与兼容,更进一步的增加了实现难度。以太坊作为一个发展几年的平台,代码结构已经变得非常复杂,底层重则修改难,对于原有架构的修改牵一发则动全身,需要考虑很多因素。我们看到虽然以太坊的框架已经确定了下来,但很多细节还在持续讨论和修改中。
3.2 竞争风险
许多公链致力于解决以太坊当前面临的扩展与性能问题,他们大都会在智能合约层兼容以太坊代码,可以最快速、最方便的让开发者能转移到自己的公链上来,所以以太坊面临的竞争压力是非常大的,如果以太坊不能很好的将自己的实例提高,那么肯定会给别的公有链超越的机会。高性能公链赛道里,2014年的Tezos已经在2018年上线了主网,2016年的项目Cosmos和Cardano测试版也在2019年上线,留给以太坊2.0的时间是紧迫的。
参考资料:
分片技术研究报告| TokenInsight
以太坊 2.0: 以太坊的未来之路|蓝狐笔记
以太坊 2.0 的未来蓝图及挑战
以太坊2.0是什么?分成几个阶段