一个 PoS 的幽灵,在以太坊的上空回荡。—— 题记
自 《A rollup-centric ethereum roadmap》(中文译著)一文发表以来,整个社区都对以太坊(尤其是以太坊 2.0)的道路图产生了疑问。
2020 年 11 月 18 日,在以太坊基金会的 Eth2.0 研究团队的第五次 AMA 活动(中文节选译著)中,Vitalik 明白地表明,道路图现已产生了变化:(1)暂时不再着重 Phase2 的重要性,Phase 1 致力于完结数据分片(shard data),供 rollup 方法运用;(2)信标链将具有履行功用,即 Eth1-Eth2 兼并之后,信标链区块将直接包括买卖;(3)Phase 0 完结后的三大工作:轻客户端支撑、数据分片、兼并,将并行推动,任一模块只需准备好了就推出。
本文的意图不是为本来的三阶段道路图辩解。相反,本文是想建议,三阶段道路图虚无缥缈,新道路图食之无味,没有一种与 Eth2.0 相关的道路图值得以太坊放弃当前的运作形式、转向以 PoS 为根底的体系。
在这里,我会先解说初始的三阶段道路图的证明思路及其技能难点;然后剖析新道路图的可扩展性。最后证明,新道路图的可扩展性优势,现已渺小到不足以使以太坊冒险转入 PoS。
Eth2.0 的三阶段道路图
在曩昔两年,广为流传的 Eth2.0 道路图规划了三个依次序完结的组件:
-
Phase 0:以 PoS 为一致机制的信标链
-
Phase 1:多条分片链
-
Phase 2:为一切分片添加履行功用
从这一道路图能够清晰地看出,本来的以太坊 2.0 的目标是打造一个 “分片化履行(sharded execution)” 的体系,意思是:每个分片都有自己的状况,这些状况按各分片的状况转换规则来改变;改变后的状况由信标链来敲定;由此,以太坊 2.0 就成了一个多个分片能够并行处理买卖的体系。这也意味着,以太坊 2.0 是一个 “一致” 和 “买卖处理(验证)” 解耦的体系,被分配到各分片上的验证者负责验证买卖和状况的正确性;但这些状况的敲定则依赖于信标链的 epoch 敲定机制,两个进程并不是彻底同步的。这种 “PoS 信标链 + 多分片” 的架构,好像也非常好地利用了 PoS 算法自身的特色:为了解决 No-thing-at-stake 问题(PoS 出块不需求支付核算量,因而有资历出块的账户会测验在不同的分叉上一起出块,使体系分崩离析),以太坊 2.0 所用的 Casper 算法要求用户先存入一部分押金才干取得出块资历,而假如验证者滥用了出块资历(比方一起支撑两个分叉),则会被罚没押金;由此,像 Casper 这样的算法实际上在区块链上发明了两种能够彼此沟通、但彼此独立改变的状况:一种是普通用户的状况,另一种是验证者的出块权重状况;一致进程以出块权重状况为根底,达成一致也会更改出块权重状况;因而,一致进程先天独立于用户买卖的验证,能够解耦;对恣意的买卖批次及作用状况而言,一致进程能够被抽象成一种 “结局性敲定机制”,逻辑上,多分片并行履行所以成为可能。至于其可扩展性,以太坊分片技能的命名 “二次方分片(Quadratic sharding)” 透露了端倪:假定分片上的买卖,其履行复杂功能够被化约到与区块头验证相同的难度,则分片化履行的架构,能够使整个体系的处理才干,随着参加节点处理才干的线性提高而呈平方级提高。通俗来说,假如参加网络的节点(平均而言)在一段时刻内能验证 4 个区块头,这就意味着,在参加一个分片时,节点们能够在同等时刻内验证 4 笔买卖,此时体系总处理量是 4 条分片 × 4 笔买卖/分片 = 16 笔买卖;假如节点的处理才干变成了 8(2 倍),则处理量会变成 64 笔买卖(4 倍)。听起来很美好,可是,这个“平方级扩展” 的证明中包括了如下假定:
(1)存在一种技能,使得分片买卖的验证,能够简化到与验证区块头相同的难度;
(2)不存在跨分片的买卖,即各分片内的买卖是彻底不会彼此依赖的。跨分片的买卖需求占用多个分片的处理容量,也要占有信标链的处理容量,会使可扩展性大打折扣。
关于(1),这个假定是有可能得到满意的,无状况性(statelessness)便是这样的一种技能,它的思路是,在传达买卖(或许传达区块时),附带买卖所拜访状况的证明(witness),使得买卖的验证者无需持有买卖履行之时的状况数据,就能验证买卖的有效性。这一点极为关键,假如没有无状况性,参加分片验证的验证者就有必要保存分片的状况,由于验证者会被不断分配到不同的分片链上,那就意味着他们有必要保存一切分片的状况,在实践中也就意味着他们要不断下载一切分片的区块并处理买卖,从而使整个体系坍缩为一个大区块体系(例:投入能处理 16 笔买卖的资源,处理 16 笔买卖)。遗憾的是,至今,以太坊 1.0 也没有研究出满意轻量的无状况方法。
关于(2),那就没有什么好说的了。假如不能完结跨分片买卖,分片化履行的体系就没什么意义,由于各分片各自为政。有必要使得 ETH 有方法存在于各个分片上,这个体系才干依然以 ETH 为主体。而直到今日停止,还没有呈现一种跨分片买卖计划,能够不添加信标链的处理量。道理也很简单,关于恣意 A 分片来说,由于并行处理,恣意 B 分片上正在产生什么买卖,需不需求改写本分片的状况,是不行知的,因而有必要存在一个通讯层,可信地证明 B 分片上产生了一笔试图改写 A 分片状况的买卖。而一旦需求让信标链具有处理买卖的功用,平方级扩展的作用就会被打破。(顺带说一句,满意了这一可信通讯层的需求的链,就变成了事实上的 Layer-1,而其它分片则变成了事实上的 Layer-2,像极了 “Layer-1 + Layer-2”。)
除了存疑的可扩展性,分片化履行还带来了许多经济上的风趣问题。例如,假如跨分片买卖的处理时刻超过一笔分片内买卖的处理时刻(这是必定的),这就意味着,不同分片上的 ETH 价值也不会相同。就好像美国国内的 1 美元,与美国国外的 1 美元,实际上并不是同一种东西。不论有多少个分片,都至少会有两种 ETH 价格,一种,是那个金融运用最繁茂的分片(也便是 Eth1 分片)上的 ETH 的价格;另一种是其它分片上的 ETH 的价格;后者有必要支付一定的手续费并支付一定的时刻,才干换成前者,因而对前者必定有一些折价。同理,即便每个分片上都有 uniswap,不同分片上商场的买卖滑点也必定不相同,终究咱们都会汇集到一个分片上,由于咱们都在一起的时候,流动性最充分,资金功率最高。某种程度上,能够认为跨分片买卖的需求是很少的 —— 但这也意味着,其它分片上放置的买卖处理容量,也底子没有意义。分片化履行体系的技能难点,此处不再赘述,感兴趣者能够自己想想分片化履行体系怎样支付手续费的问题。
但我在这里想说的是,分片化履行体系的规划理念违反了咱们的实际需求,也违反了事物的开展规律。全局状况(可组合性),并不是一个问题,而正是咱们需求的东西;正是由于以太坊使得一切金融运用都能瞬间组合,发明了一个价值能够零冲突流转的空间,以太坊才有了革新世界的潜力;在协议层为价值流转发明冲突,是自废武功。有了一个杰出的根底层时候,应该想方法维护这个根底层,剩余的工作让用户自己挑选,让生态自己演化 —— 不要以为规划能规划出一个生态,过度规划仅仅给一切人强加本钱。分片化履行(Phase 2)的放置,旁边面印证了其间的难度 —— 在可预见的未来,这条道路无法产生令咱们满意的作用。尽管如此,我并不认为 Eth2.0 的研究员们现已彻底放弃了三阶段道路图,Vitalik 也还着重,改变后的道路图,跟 Phase 2 也是彻底兼容的,仅仅 Phase 2 不再具有优先级。可是实际上,放弃分片化履行,才是以太坊应该挑选的道路。
可履行信标链道路图
在以太坊 2.0 的新道路图中,最令人瞩意图一点是:信标链区块将包括兼并后的 Eth1 分片的买卖,也即信标链具有了履行功用。其它分片仅具有保存数据的功用。实际上,新道路图中 “数据分片” 的定位是 “供 rollup 运用的数据可得性(data availability)层”。没了履行化分片,平方级扩展就无从谈起了。那么,这种 “PoS Layer-1 + rollup + rollup 数据不占有主链区块空间” 架构的可扩展性怎么呢?要解答这个问题,咱们先来看看 rollup 计划与主链的交互形式。首要,你能够把一个 rollup 体系理解为一个无状况的合约,这个合约的内部状况(哪个用户有多少钱),对外是不行见的;可是,该合约内产生的一切买卖,其数据会定时公开出来,发布到主链上,使得任一第三方,得到这些数据后,都能够重建出该合约的内部状况。运用有效性证明的 rollup (例如 zkRollup)的特色是:该合约每次公开买卖数据时,都附带一个这些买卖已被正确履行、因而新的状况根应是 XXX 的 “核算完整性证明”;假如该证明能经过合约的验证,则该合约更新状况根;假如该证明不能经过验证,则该合约拒绝更新。运用过错性证明的 rollup(例如 Optimistic Rollup)的计划则相反:任一人每次为合约公开买卖数据时,都有必要存入一笔押金,并断语合约的新状况根是 YYY;尔后一段时刻内,恣意其他人都能存入押金、发出过错性证明来应战该断语;过错性证明即证明该批买卖有瑕疵,或许买卖处理后的新状况根不是 YYY;假如应战成功,则发布过错断语的人会损失押金;假如一段时刻内无人应战,则合约更新状况根为 YYY。这两种计划,都有必要在链上发布数据,因而会占用链上空间;而且,链上空间的大小,决议了 rollup 体系在单位时刻内的处理量(即 TPS)。想得更深一些,假如这些买卖数据,能够发布在一个数据量的约束更小的地方,或许说,不去占用 Layer-1 区块的空间,则其处理量,能产生倍加的作用。
假如这样的地方有很多,那还能够产生倍乘的作用。这便是 “数据分片” 及 “以 rollup 为中心的道路图” 的理念:让 rollup 计划把买卖数据都放到分片区块中,分片有多少个,处理量就能提高多少倍;当前的以太坊区块数据量大概是 20~30 KB,这个数据量显然是安全的,则,假如咱们有 64 条分片,咱们每 15 秒就能供给 64*30 = 1920 KB = 1.9 MB 的数据量。而且,运用端我供给了这么大的数据吞吐量,但它不会成为全节点的负担,由于这些数据你想下载就下载,不想下载就能够不下载(也便是 “分片” 的意义),咱们你下载一点,我下载一点,节点的负担仍是很轻的 —— 反正,验证这些 rollup 合约的状况,并不要求我拥有该 rollup 的一切前史买卖数据。以太坊的状况依然是安全的。听起来很合理,但仍是那句话,太达观了,太多假定了:(1)这种 “想下载就下载,不想下载就不下载” 的方法,在 zk rollup 上底子行不通:当 zk rollup 要更新状况根时,zk rollup 合约更新操作的验证者(也即 Layer-1 的全节点)在接受证明时也有必要取得与该证明对应的买卖数据,不然就无法经过验证。
(不需求供给买卖数据,仅验证证明就推动合约状况根的计划也有,叫 Validium,那不是 rollup)。也便是说,假如仅考虑 zk rollup,那么 “数据分片” 的方法,从带宽上来说,与大区块没有任何别离。不管这些数据一开端被发到了谁手上、存到了哪里,全节点都要下载它们。(2)对 optimistic rollup 来说,假如你乐意采纳更达观一点的假定,当然能够,你能够平常彻底不下载买卖数据,仅保留取得结局性的最新状况根,仅在产生争议时,再下载相关的买卖数据,从全节点的角度看,并没有因而损失对合约状况的验证才干;可是从用户的角度看,工作就彻底不同了:你开端不确认自己到底是不是随时能够重构自己的状况,来完结取款。
也便是说,用户将不能确认自己用的到底是 optimistic rollup,仍是 plasma。本来,optimistic rollup 的计划便是确保了一切全节点都有前史买卖的备份,所以用户能够容易地重建自己的状况,并提交状况证明(或断语)完结取款;但假如这一点确保失去了,你就不确认自己能不能重建状况了。optimistic rollup 的安全性也会受到影响:它的安全假定是,取得了买卖数据的人之中至少有 1 个是遵守协议的;在数据分片形式下,你并不知道,有多少人会去请求这部分买卖数据。总而言之,“数据分片”形式调配 zk rollup 时,在带宽的意义上,无法供给更大的可扩展性,而与扩展区块空间的作用相同;在调配 optimistic rollup 时,相关于大区块,其可扩展性优势与应战产生的频率成反比;更严峻的是,它使 optimistic rollup 有退化为 plasma 的风险(从界说上来说,也不存在 optimistic rollup 了,应该用另一个名字来指称这种介于 optimistic rollup 和 plasma 之间的东西)。
结论
Rollup 计划其实是从 Layer-2 开展进程中吸取了血淋淋的经验而飞出来的凤凰。它最大的特色在于,给用户的资金安全供给了充分的维护。由于恣意得到了买卖数据的人都能够重建状况,而区块链确保了这些买卖数据的永续数据可得性,rollup 计划得以供给 layer-2 计划中首屈一指的用户维护。只要这样的计划,用户才敢真的去运用。舍弃了这种优点,按最大化功能的达观假定来规划体系,只能规划出用户不敢去用的东西。只需你意识到,rollup 本质上是一种合约的规划形式,“PoS + 数据分片 + rollup 能够供给更大吞吐量” 的迷思便可一眼洞穿 —— rollup 不管在哪个一致中,都能够供给相同的可扩展性,数据分片能供给更多,仅仅由于引入了别的安全假定,使 rollup 献身安全性来换取吞吐量罢了 —— 问题在于,这样的合约,比 rollup 的安全性更弱、可扩展性更强的合约,不是没呈现过,不是在 pow 链上就规划不出来,而是规划出来了也没人用罢了。
自 2017 年以来,以太坊社区就为着实际的需求艰难地探索安全的可扩展性计划。许多人可能都信任过,“PoS + 分片” 能供给强壮的可扩展性,但那是 “分片化履行体系”,有自身的一堆问题。眼前的 “可履行信标链道路”,也不过是献身合约自身的特点来换吞吐量罢了。时至今日,现已找不到依据,证明为了可扩展性,以太坊应该拥抱 PoS。归根结底,只要符合用户需求的功能提高,才是真实有意义的功能提高。假如不从用户的实际需求动身,相反,从技能美感或许最大化功能的假定动身,只能规划出空中楼阁。假如能够,那就让用户自己来做决议,在协议层操心太多,往往徒增冲突。以太坊的道路图应该改变吗?当然,应该放弃这些不切实际的梦想,回头问问用户需求什么。
视野开拓
Coase并没有考虑行为规范,而是关心这样一个问题,即一个人施加于另一个人身上的外部性应该如何解决。谁来支付社会成本?这个问题要比乍看上去的更近似一个关于支离破碎的行为规范的问题——因为法律和社会规范是社会控制机器的近邻,而切Coase所考察的情形结构……正是……在那里产生了一个对行为规范的需求。-《新制度经济学》