在 8 月 31 日发布 Fork It #22:PoW vs PoS(点此查看文字版本)之后,被大家戏称为 “年更” 的中文播客节目 Fork It 赶在以太坊合并前夕,录制了第 23 期:Fork It #23:PoS 是谎言么?
这一期由 Daniel 和 Terry 共同主持,邀请到了 BTCStudy 的内容负责人阿剑老师,来跟大家聊聊关于 PoW vs PoS 的争论,他的观点和立场。
阿剑老师曾经是以太坊中文社区非常硬核的研究者,翻译者,内容贡献者,主持人的愿望是话题能够深入浅出,但是阿剑老师实力不允许,所以如果你对 PoW/PoS 以及分布式共识算法的设计思想和基础概念有所了解,那么会帮助你理解为什么通过阿剑老师的分析可以得出 PoW 全面优于 PoS 这个结论。
如果你对 “Ethereum Merge” 的问题分析以及什么是 “比特币思想” 更感兴趣,可以直接跳到播客的 1:10:00 开始听,也可以直接找到相应的文字稿进行阅读。
访谈结尾处阿剑老师最让主持人动容的一段话,摘录于此:一个技术范式应该想到它应该保护自己的用户,它应该保护共识,它应该珍惜每一分来之不易的共识,它应该容纳每一个可能容纳的个体去进入这个生态,去能够用它来继续做梦,去 为一个遥远的我能够想象的美好未来去奋斗。
以下是社区成员(HelloKelly.bit、JackyLHH、Yifan.bit)整理的文字稿(删去了与主题无关的好物推荐),全文大约 2.6 万字,建议先收藏再阅读 : )
1、开场介绍
Daniel:大家好,欢迎收听新一期 Fork It,我是消失了很久的节目主持人 Daniel,今天由我跟 Terry 一起来主持,我们邀请到了阿剑老师来做客。
在开始之前,我先做一个当前特殊的时间点介绍。本期节目录制的时间正非常接近以太坊社区的一个非常大的事件,就是所谓的以太坊 Merge。以太坊 Merge 将会在 48 小时之内发生。当大家收听到这一期节目的时候,应该是合并刚刚完成的时候。
好,我们先介绍一下今天的嘉宾阿剑老师。
阿剑:Hello,Fork It 播客的听众朋友们,大家好,我叫阿剑。非常高兴能得到 Daniel 和 Terry 的邀请,来到 Fork It 做客。因为之前我自己也听过很多期 Fork It,我发现 Fork It 总是能请到最专业的人来聊一些最专业的话题,所以我自己也把这个当成是 Terry 和 Daniel 对我的一种认可,我觉得非常高兴。
我是在 2017 年进入这个行业,从那时候到现在,我一直是以翻译的身份在工作。 2017 年到 2021 年,我一直在以太坊爱好者工作,现在可能很多朋友知道我也是因为以太坊爱好者,因为我一直在里面做翻译和编辑的工作。如果从这个时间点来看的话,我猜现在我可能是这个行业做翻译里面,比较资深的一个人了。因为入行这么多年一直是在做同样的一件事,我也是在这个过程当中不断地学习,借此做了一些研究。虽然这些研究可能说不上有多么重要,但也算是积累了一些对区块链的了解。
我从 2021 年底之后,就一直在给 BTCStudy 做贡献,这是一个很小的网站,上面其实没有多余的内容,全部都是关于比特币技术原理、可能拥有的一些技术改进方向,以及生态当中正在出现的一些有趣的技术方案。
Daniel:其实我知道阿剑老师好像平时并不会太多地参加像台前的事情,你主要是在幕后做了一些内容和文章方面的工作。可能有的听众有所不知,在国内的以太坊爱好者核心技术小圈子里面,阿剑老师是一个举足轻重的人物。为什么这么说?因为每当以太坊社区发生重大事件的时候,大家都会所讨论。真正的这些我们称之为 KOL 的观点,在整个中文社区里面往往能起到非常至关重要的作用。阿剑老师就是我认识的这个小圈子里面,为数不多的,真正以太坊硬核的 KOL。
Terry:KOL 有很多,但是硬核的比较少。
阿剑:以前当我还自认为是以太坊生态的一员时,以太坊生态也非常精彩,大家可以看到多种多样的人物和多种多样的观点。我觉得自己在其中显得相对特殊一点的是,可能我跟 Terry、Daniel,包括曾经上过 Fork It 的这些嘉宾有一个共同点,就是我们特别关注技术和底层。我觉得很多关于应用层的事情不是我最大的兴趣,或者说不是在我称之为社区的这么一个身份的人最应该关心的事情。所以在这个过程当中,我对于以太坊的协议层,包括它的来龙去脉,它的走向等投入了特别多的关注。我想大概是这一点可能会让大家认为我会对这些问题会有一些理解。我想其实仅仅是这样而已。
2、PoW 全面优于 PoS
Daniel:阿剑老师其实参与的讨论不是非常频繁,但是每每有非常关键讨论的时候,但凡有你的言论,我一定会发出来认真读,认真看。在以太坊 merge 发生之前相当长的一段时间里,整个社区又开始了关于 PoW 和 PoS 的争论。我相信阿剑老师可能参与过很多次这种讨论,你能不能对这场旷日持久的以年为计的讨论,给大家介绍一下你的立场或者你的主张。
阿剑:首先关于立场,我毫无疑问是认为 PoW 是一个全方位比 PoS 更优的东西,是全方位。
我也认为这个争论其实可能自很久以前,刚刚出现 PoS 这种想法时就有了,大概 10-12 年,最晚可能就是 14 年。因为 14 年以太坊的研究,包括它的开发都已经起步。从那个时候开始到现在,我最大的感受可能就是在这个过程当中,随着本身以太坊和其他项目所提出的 PoS 机制的开发或者进一步的研究,就会有一些新的想法或者新的意见出来。
但是整个过程当中,PoS 的一方就 PoS 优越论的论证,实际上我认为是包含了很多杂质的,甚至我认为其中绝大部分都包含着谎言。 他们其实用了一种建立于选择性呈现事实的论证方式,也就是说当你只部分的呈现事实,而不是全面呈现事实的话,虽然你呈现的那部分好像看起来是事实,但是你的论述并不能被称之为论证,在这个意义之上我把他们称之为谎言。
我给大家举个简单的例子,比如经常会出现的一种声音是,PoS 是一个新的东西,既然是新的东西,而且对旧的东西有所改进,那它一定是一个新的趋势,新的未来。再比如说他们认为 PoS 抛弃掉了 PoW 这种计算密集型的出块过程,可以不用浪费这些能源去生产区块,就会变得所谓的更加绿色。或者说因为过程不需要耗费这么多计算量,可扩展性好像就会有所提升。这些都是缺失性的比较。
举个最简单的例子, PoS 是一个新东西吗?这是一个非常有趣的话题。很多人都会认为是比特币先提出 PoW 之后才有人提出了 PoS 的想法。其实从技术上来说,我认为它是一种范畴上的错误。 因为如果你对分布式领域的共识算法有所了解,你就会知道分布式领域共识机制的研究最早起源于兰伯特,Leslie Lamport 在 1987 年发表的论文就是关于拜占庭将军问题。他所设想的是一个基于投票的机制,有不可伪造的身份证明,也就是数字签名方案。在这个前提之下,拜占庭将军问题有一个关键性的结论就是,1/3 是一个不可逾越的上限,如果超过 1/3 的人是恶意的,不想达成共识的,那么这个分布式系统就没有办法达成共识。
接下来就出现了所谓的使用拜占庭容错的算法,也就是在不超过 1/3 的参与者是恶意的情况之下,我们有没有一套算法可以达成这个共识?其实这些拜占庭容错的算法,都是基于身份和数字签名体系,所以你可以认为当时的拜占庭容错算法就是现在所谓的 PoS 算法的前身。
它比 PoW 出现的早的多,只不过在使用拜占庭容错算法最早的形态当中,它默认所有参与者的签名权重都是一样的,它不会有参与者的投票权重不一样的情况。而 PoS 对拜占庭容错算法概念上的进步就在于,它放宽了这一点,使得不同参与者的签名是有不同权重的。 但是,其实我们可以说 PoS 就是一个更古老的东西,实际上并没有带给我们像比特币这样的无需准许、大家都可以去参与的共识机制。 这是一个非常重要的特点。
回到技术本身,其实是有相当多的点可以探讨,比如说基于一个大家耳熟能详的模型,安全性、可扩展性和去中心化三个维度去比较它,其实可以比较出很多内容。
3、安全性:权益研磨攻击、Nothing at Stake、长程攻击、51% 攻击成本
Terry:我觉得从不可能三角这个方向去聊是非常合适的,我现在看到 PoS 一个比较常见的说法,就是它在安全性上是更安全的。如果这一点比不过的话,他们就会指出在同样成本的情况下 PoS 更安全。在抗审查方面,我觉得是 PoS 比较明显的劣势,但在这个时候他们通常又会一起比烂,说在抗审查性上 PoW 也好不到哪去。在去中心化上,他们最早的时候说 PoS 不会有矿池,不会有 stake,但是后来发现这完全是一个非常专业的事情,一定会有 stake。你能不能整体地从这三个维度去分析一下现在普遍的看法,以及你对他们这些错误看法的评价。
阿剑:我可能要请 Fork It 的观众对我有点耐心,因为我要讲非常长。上面我已经说过,在我自己接触到的所有关于 PoS 更优的论证当中,都包含着大量缺失性比较,或者选择性比较。我可以先把结论摆在这里:在任何一个维度上,都无法论证 PoS 比 PoW 更优。 我为这句话负责。
首先我们来说安全性。对 PoS 现有的安全性研究基本上都会提到一个很基础的攻击:Stake Grinding attacks,权益研磨攻击或者理性分叉。
PoS 不是采用 PoW 这种竞争方式来比较谁足够幸运、足够快,来提出下一个区块的工作量证明机制,不是比拼谁更快找出一个符合难度要求的随机数。PoS 的一种出块方式是根据时间,把一段时间分成比如 12 段、36 段,每一段安排一个出块者。
另外一种方式,比如最早的 PPCoin 点点币,它的方式就是每个人都拥有一个 UTXO,每个 UTXO 有一个面值,以及没有被花费的时长,这就叫币龄 Coin age。两个因素决定了你能不能用 UTXO 成为下一个区块的出块者。中间还是需要做一些计算,但是最有意思的点在于,PoW 的出块属性是无过程性的,Progress Free。 什么意思呢?就是假设现在出了这个块,不管如何调整这个块的哈希值,不论试多少次,它都不会影响挖出下一个块的概率。下一个块的出块者,还是要经历大量的计算。影响当前这个区块的哈希值,对下一个区块的区块难度实际上没有任何帮助。
但是在 PoS 里,大家都要使用以往历史的区块来作为随机数源头,也就用一个随机数的源头来生产出一个随机数,用这个随机数来决定下一个块是由谁出,或者下十个块分别由谁出,**它就损失了无过程性的特点。 **
这意味着什么?意味着当前谁挖出了这个区块,挖出了这个区块数据上的特征,就可以决定接下来一个块甚至十个块的出块者。
那么大家会做一个事情是什么?是虽然我在这个时间点,比如本来这十秒钟之内只能有一块,但其实我自己在偷偷挖,已经算了 100 个区块,我就看哪个区块能够让我在下一个区块依然是出块者,或者是找哪一个区块,能够最大化我在接下来链条当中出块的机会,这就叫做权益研磨攻击。它会不断尝试在任何一个区块点位上挖矿,并且试图干预未来出块者的选择。
权益研磨攻击在当时非常普遍,而且非常致命。因为虽然我们看到这个时间点,好像网络上只出现一个区块,但实际上大家已经偷偷挖了几百个几千个区块。就等他自己挖出来一条超级长的链,然后等到了某一瞬间啪的一下摆出来给你,大家因为最长链共识啪的一下就跳过去了。
但是最长链共识是稳定的吗?它也不稳定,接下来又会有人啪的一下给你一条更长的链。这是当时出现的权益研磨攻击,后来大家把它归结为一个属性叫 Nothing at stake,权益无关或者说无利害关系。什么意思呢?就是虽然你只安排我在点出块,但是我偷偷在挖 N 个块,这对我的利益不会有任何影响,它只有好处没有任何的坏处。
权益研磨攻击直接导致了后来的 PoS 机制几乎都引入了惩罚机制。 大家已经发现这种基于奖励的,随意出块的方式并不工作,那么就需要用惩罚机制来约束,让大家不去做理性分叉。它的逻辑是什么呢?就是当人们已经提出了一个区块,如果被发现在另外一条链上也提出了这个区块的话,就需要受到惩罚,以此来约束不去挖分叉链,确保只挖一条链。这个原理基本上贯穿了从 2014 年开始后续的所有 PoS 链的设计。
但是我们会发现其实这个问题没有那么简单,因为我们刚刚讲的惩罚机制好像只是单向的在通向未来的维度上,避免大家大量地去挖分叉链,能够把大家约束在一条链上去,直直地往前出块。这意味着没有问题了吗?不是的。因为一条链它不仅有通向未来的维度,它还有历史的维度,甚至我们认为历史的维度才是更重要的。
为什么?因为如果链的历史可以被随意篡改,那么它如何去担当账本的角色,如何去担当大家的基础交易系统,并且在上面构建各种各样的应用功能?这才是我认为更加关键的要素,如果区块链能够形成一个不可篡改的账本,一个不可篡改的历史,那么我才可以什么都不怕。对于一个普通用户来说,我绝不担心我的钱会丢失,因为所有的历史几乎都是可靠的。而私钥、数字签名这些密码学方案给了我迄今为止可以媲美其他任何财产系统,甚至比他们更优的一种财产属性。
接下来大家就会发现另外一种情况叫做长程攻击,Long Range Attack。 长程攻击的意思是说,虽然好像可以让大家在一条链上出块了,但是这并没有解决问题,为什么?因为我可以从创始状态中挖出另外一条链出来,这条链不一定更长,但重点是我们没有任何形式上有效的方法去对比这一条新挖出来的链,跟历史上大家一直在用的链到底有什么差别。
这是最关键的属性,为什么呢?比如我作为一个普通的 PoS 链用户,当我的节点同步上一条链的时候,我实际上并不知道这条链是不是大家一贯以来,通过 PoS 共识参与的一条链,我也不知道它是不是一些人另外挖出来的。有人说我们可以观察签名,因为每个区块都带有 PoS 参与者的签名。
但这里刚好又可以跟另外一个东西联系起来,大家发现一个很有趣的事情,所有的 PoS 验证者都需要把币锁进去,但锁闭进去是为了什么呢?是为了赚钱对吧?赚了钱就总要有一天要把它拿出来花,总是会解锁。如果不能解锁,它就变成一个单向的过程,没有人会愿意参与这样的算法,因为这意味着完全没有任何好处。
验证者的币会有一个释放的时间点,一旦在释放时间点之后,这个链所有在共识层面设置的惩罚对你来说不再有任何意义。因为我的钱已经取出来了,你们惩罚我什么呢?我的钱已经取出来了,这个时候就没有办法对我施加任何惩罚了。前面说的那种通过惩罚来使得一个人只在一条链上出块签名,这件事情本身就不成立了。
这就是长程攻击跟人们以前发现的一种特殊攻击的形式,叫做旧私钥攻击相结合的过程。就是一旦 PoS 参与者离开了共识层的约束范围之后,你对他的私钥行为实际上就没办法有任何约束。那么这个时候有人完完全全就可以去购买一些旧私钥,购买旧私钥可能是非常便宜的,因为只是购买一个私钥而已,并不需要财产。
有了旧私钥之后,我们就可以伪造跟以前的链一模一样的链条,所有的交易都可以重播一遍,所有的签名都可以重新放上去一遍。那么到底哪一条链是真实的呢?在这种长程攻击的情况之下,我们会发现现有的所有 PoS 算法都不能从技术上解决这个问题,包括以太坊。
**以太坊的 Casper 算法经历过了很多演进,它最核心的概念是基于惩罚约束,来使得人们在同一条链上出块,确保会定期的达成共识。**以太坊基于惩罚算法的这一整个概念上,其设计的复杂和精巧程度,应该被列为当前 PoS 机制的第一名。非常的精巧,而且把它基于惩罚的概念发挥的淋漓尽致。
比如说如果有人提出两个互相冲突的区块,那么就要受到惩罚;比如说 Casper 投票,它不是对出块的投票,而是对以往历史区块检查点的投票。检查点就相当于大家要定期刷新它的创始状态。原本的创世状态可能是零号区块链,现在过了 100 号区块之后,大家有 2/3 的同意票,那么大家就把 100 号区块变成一个新的所有状态建构的起始点,那么 100 号区块它就变成了一个新的创始区块。
Casper 惩罚的机制是,但凡出现了一些在检查点投票当中的不轨行为,包括双重投票和环绕投票,具体来说就是你会不会投两个相互竞争的检查点,以及在投票检查点的时候,有没有跳到另外一条分叉点上去,比如一开始投的检查点是在 A 链,但是后面的一个检查点居然跳到 B 链上去了,这就说明是有问题的。
还有一个更加有趣的惩罚是什么呢?是当整条链没有办法达成共识的时候,它会惩罚所有参与者。注意是所有参与者,不只是那些不在线的参与者,而是惩罚所有的参与者。如果大家懂博弈论的话,可以想一想为什么要阻止这些不在线的参与者,通过不转发其他人的区块和签名来陷害其他人?
本身共识算法对不在线参与者的惩罚是比较严重的。在不在线是通过某个时间段出现你的签名去证实的,如果没有任何惩罚,那么我就可以通过不转发你们签名,长期让这条链处在一个没有办法确认共识的状态,一方面罚没了对方,一方面让自己的权重变高。为了阻止这样的情况发生,就会对这样的行为施加惩罚,然后用这种惩罚不断淘汰掉那些不在线的参与者,让他们重新同步。但是就算把这些所有的全加起来,还是没有办法应对我们所谓的长程攻击和旧私钥攻击。
为什么?因为所有参与者总有一天会退出这个系统,退出这个系统之后,旧私钥攻击就变成一个 incentive 上,就是激励机制上可行的一种攻击。只是买一个旧私钥而已,就可以制造出一条超长的链。
这个属性已经得到大家非常充分的讨论,市面上有很多相关的资料。有一篇非常重要的文献,它的原始版本在 2014 年就出版了,后来作者在 2015 年又重新修改了这篇论文,名字叫做 On Stake and Consensus,《论权益与共识》。这篇文章非常重要,它把所有我上面谈到这些攻击都做了总结。最终得到一个结论是:这种长程攻击实际上代表着对 PoS 攻击的最终形式,而且是可以叠加的。
比如说,我还听过有一位朋友提出过一种非常有意思的攻击,叫做散币。就是搭配长程攻击的同时,给这些人空投,让这些人来支持我的链,而不是原链。比如我现在要分叉以太坊,我不仅让你们原本有这么多币,而且还要给你们多发一点币。在这个过程中甚至可以搭配一些其他社会共识上的攻击,比如发动宣传战,和别人说以太坊基金会那帮人把我们的链搞崩了,他们不行,所以我们要革命,罚掉他们的币给大家分钱,我们的币没有任何通胀,它在市面上依然是价值坚挺的,但是我们惩罚了坏人。
我记得前几年,包括 Jan 也提过 PoS 的整个模型有点像衔尾蛇,就是咬着自己尾巴的蛇。你的账本要安全,那么共识机制必须要安全,但是想要共识机制必须安全的话,那么账本又必须安全,所以构成了一个衔尾蛇。
论权益与共识的作者也得出同样的结论,为什么权益证明的共识机制是不安全的?因为它要依赖自己想要形成的账本来施加它的成长。大家可以跳到另外一个账本上去,发动长程攻击分叉这条链。在这条分叉链上,原链所有的惩罚措施都不奏效。在这种情况之下,怎么能说你的共识机制是安全的呢?所以大家把它归结为一种 循环论证:账本需要安全,就需要共识算法是安全的,共识算法是安全的,又要求你的账本是安全的。
注意我这里用了两个「安全」,假设这两个安全在定义上完全一样,这意味着什么?意味着它就是个循环论证。但是实际上现在的以太坊 PoS 算法,包括 Vitalik 本人都认为这不是一个循环论证,为什么?因为这一句话当中前后两个「安全」的定义是不一样的,他认为后一个账本必须安全的定义,跟共识算法必须安全的定义是不一样的。他认为这个账本要安全,是基于所谓的社会共识,是一个社会过程,这个社会共识决定了我们都认可这一条链就是以太坊。所以基于这一点,我们再在这个基础之上形成一个以太坊 PoS 共识参与的流程,进一步决定接下来这条链是处理哪些交易。
但是他没有办法否认的是,所有人如果不是一直在同步这条链,不是整个流程从它创始块开始一直在同步这条区块链的话,那么确确实实没有办法分辨一段时间以前,两条同样形式上相同的链,到底哪一条链是真正的以太坊。这是技术上没有办法做到,没有办法达成共识的。
所以他提出了 弱主观性 概念,就是节点必须保证每四个月时间上线一次,一旦超过四个月时间掉线,就要向一个你信任的,注意,是你信任的节点来给你同步。也就是说不管是跟谁同步,四个月以前断掉的这条链,在事实上都是需要相信这个给你提供区块链数据的节点,这个就是弱主观性。
它没有办法达到像 PoW 一样的客观性, PoW 上压根不必信任任何提供区块链数据的节点,为什么?因为我可以独立地从创世块开始验证,而且是轻量级的验证到最新的区块,谁想骗我都没有用。PoW 整个通过竞争的共识模型,使得大家最终只会凝聚在一条链上,这是 PoW 在安全性上的证明。
但是在 PoS 链的整个共识算法运作当中是做不到的,最终得依赖于社会共识,依赖所谓的信任。 只要长期掉线,那么就会受困于弱主观性,必须信任一个向你提供区块链数据的节点。这一点为什么重要?因为它意味着共识是会不断衰弱的,最终来说大家的信息源会中心化地趋向于那些长时间以来都没有掉线的人。
而 PoW 会不断地累积共识,大家会把工作量不断地累积到同一条链上,所有加入的节点都不需要信任其他人。他们只需要用计算机把所有的数据都验证一遍,验证它形式上的有效性,就能够断定这是一条有效链。所以 PoW 在社会共识上是一个不断累加、不断凝聚的过程。
这两者到底意味着什么?我觉得大家可以仔细想一想,我们想要区块链来解决什么问题?我们是不是仅仅需要一个大家经常去检修的机器,还是希望找到一个最基础的原则,在最基础的原则之上,区块链可以当成一个全时无休的处理系统,持续出块来向我们提供最基本的服务,在这个过程当中持续的凝聚共识。我们希望区块链做的是这一点。
所以 PoS 在安全性上和 PoW 根本就没有办法比,我最痛恨的也是最常见流传的一个谎言,就是 Vitalik 自己提出的一种论证说为什么 PoW 不安全,因为只要租 51% 的算力,就能发动 51% 攻击。但是攻击 PoS 需要买下 51% 的币,或者买下 51% PoS 参与者手上的押金。
这不是赤裸裸的缺失性比较吗?这是在比较什么?比较的是对 PoW 发动一个短暂的,比如几小时或几十个区块的临时性审查,跟永久摧毁一条 PoS 链的成本。这明显比较的就是两种不同的事情。
如果只是租用 51% 的矿机,相当于只能临时发动一个审查攻击,或者短暂的发动双花攻击。那么我们要问的是接下来呢?
首先能租到 51% 的算力这一点在现实中是不成立的。 我们可以看到一个 51% 攻击成本的网站,显示了租用 51% 矿机到底需要多少成本,几千美元到几万美元都有。如果攻击成本真的这么便宜,为什么没有人这么做呢?因为他还有很多不可克服的困难,比如说网络实现的困难等等。
假设真的能租,那么攻击的结果是什么?**大家经历过几个小时的混乱,然后结束了。PoW 最长链共识会推进大家继续凝聚在同一条链上。PoW 系统没有被崩溃,没有完全被毁灭。**除非能够保证自己永续地掌握 51% 的矿机,否则就没有办法永续的发动 51% 攻击。这是一个很明显的道理。
如果你真的买下了 PoS 51% 的权益,你能怎么做?答案是可以为所欲为。 因为如果占据了 51% 的权益,那么就可以完完全全统治出块这个过程。同时也意味着那些想要参与 PoS 流程的新人,也必须得到你的同意。因为他们必须通过一笔交易来把自己的押金锁到系统当中,如果他不能把资金锁到系统当中,就没有办法成为一个 staker,就没有办法参与出块,他的签名是无效的、没有意义的。只要你能掌握 PoS 51% 的权益,就可以永续地摧毁一条 PoS 链。
有人就会说了,我们不是还有社会共识吗?如果出现这种情况,我们罚他就好了。这是一个很荒谬说法,且不说这是一个缺失性比较,如果要在这个层面上比较,并不能比较出 PoS 比 PoW 更优。其次是如果你真的认为这是一种可行的方案,这就显得很可笑。因为我们需要的是一个全天候 7×24 小时无休的系统,但这个系统居然需要全民参与,并且经常要检查它有没有出问题。而且真出问题的时候,你确定能凝聚出这么多社会共识来惩罚它吗?还是说从共识机制的角度上来看,这种社会共识是可以被利用的一个方式?
因为但凡如果有人通过宣传战,让人相信我们现在有一个共识,我们想要罚一帮人,那帮人就会被罚的话,你想想作为一个 PoS 共识链的参与者和用户有没有安全感?这意味着你资产的安全完完全全受制于那一个虚无缥缈的社会共识,没有机制可以保护你。而且重点是每个人发动社会共识的能力是不一样的,这是一个很显然事实。 你是不是就要让自己的资产安全置于那一小撮人的意志之下?那一小撮人能够发动社会共识,就意味着他们随时可以攻击你的财产,这是一个你想要的系统吗?这是一个你想要的把自己的资产放在里面的系统吗?这是个非常荒诞非常可笑的说法。
4、攻击,是一种 opinion 还是一个 fact?
Terry:谈到社会共识,首先我觉得这个词是有点可笑的。但是攻击这个名词对你来讲,是一个 opinion 还是一个 fact?以前我会把攻击当做一种 fact,现在我觉得分叉是一种 fact。有了社会共识以后,我就不敢把它当成那种 fact,更像一种 opinion。你是怎么看待这个问题的?
阿剑:我认为这个问题其实 Terry 没错,你的感觉非常敏锐。当我们有这样一个机制之后,最终只能得到一个结论,就是因为这个系统受制于某一些个体的意志,所以它没有办法起到我们想要的保护个体的效果。
实际上这些攻击只是一种 opinion,因为某一些人的一些观点被凝聚起来了,一方说这是一种攻击,但另外一方说不是,这是正义的行动,我是为了链和共识的安全性,对你们进行制裁。除非你们也有足够多的共识分叉出另一条链,否则就没有办法抵御这种攻击。
Terry:感觉就像法官在界定。
阿剑:不,你想的太轻松了,这不是法官,这是政教合一。它是一个集宗教领袖和政治权力于一身的集团,或者说课题。
正是因为大家没有这么多共识,所以我们才要创造出包括区块链在内的各种各样的技术,来约束参与表达意见或者参与共识的过程。 你要让它有一种边界,如果没有这种边界,那么社会共识就随时可能会被利用,变成一个攻击人的工具。
就像法国大革命的时候,大家都为了所谓的自由、平等、博爱的法兰西要处置叛徒,但是如果处置叛徒变成一个没有约束的行为,只要大家达成一致意见就可以去做的话,那这就是不折不扣的暴政。
我们都知道一个真正公正的社会,必须对个人施加保护,不能说大家指责他,他就有罪。必须在司法上形成一系列程序来保护他,比如说英国的大宪章。一个人除非经过同等封建等级者的在场审判,否则不能宣判他有罪。这是我们法制的基本原理。如果没有这种机制约束,最终得到的结果就一定是大家肆意的相互攻击,并且要求其他人自证清白。比如说证明一下你没有攻击以太坊区块链,你不能自证清白,我就要攻击你。
5、安全性:平衡攻击、seed node
Terry:另一个问题是一些人为什么能相信 PoS 更安全,因为他们并不懂这一套理论,更直观的感受是 PoS 链很多,也没有发生你们说的攻击,反而一些 PoW 小币经常出现 51% 攻击,所以他们很容易得出来说 PoS 就是更安全的结论。你作为从业者有什么可以在这方面给他们做一些解惑。
阿剑:我们其实都同意 PoW 阵营里,会有不同算力支撑的 PoW 链,在 PoS 里也会有不同锁定价值的链。如果真的想在技术上做分析的话,只能借助控制变量法。 就是只从技术上最本源的那些东西去分辨哪一些机制是至关重要的,哪一些特性会影响它的安全性。
大家可以看到的一些 PoW 链 51% 攻击的例子,比如说之前 ETC 上出现过的这种攻击。这个例子其实蛮能给我们警醒的,因为 ETC 本身的算力比较小,而且以太坊的矿机都可以去挖 ETC。所以其实你占有的算力实际上只是一小部分,这个部分可能不会太大,所以你的共识就有安全性的风险。
但是仅仅只从最终的结果上去说 PoS 更安全,是不成立的。就极端一点来说,假设你自己运行一个只有你一个人运行的 PoS 算法或者 PoA 算法,它是安全的,所有已经达成的共识都不会被颠覆,因为你没有必要颠覆自己。但是这并不能证明它的安全性。在我们真的要讨论安全性这个问题的时候,我们需要给它一定的约束,更明确的定义,来真正详细的从技术上思辨这个问题。
Daniel:我想到一句话大概能描述这种场景,就是抛开剂量谈毒性都是耍流氓。阿剑老师前面谈到了 PoS 从娘胎里带来的一些问题、缺陷和后续的一些补救方案,包括 Nothing at stake attacks、Long range attacks 这些攻击。我们讲安全性的时候,PoS 阵营总是会说,我们虽然有这些攻击,但是想要构造这些攻击难度非常高,以至于你无法证伪,经常会有这种没有办法证明或者证伪的理论存在。
阿剑:我觉得这些朋友应该算是求锤得锤的一个例子。 如果你了解过以太坊 Casper 算法的话,其实它有两个部分,一个部分被称之为分叉选择规则,分叉选择规则是基于这些我们所谓的见证者去发送对区块的签名,叫做 attestation;另外一部分是所谓的 Casper FFG,即通过 Casper 的投票去不断刷新检查点。
这两个部分在研究上其实经过了挺多的改进,后来形成了这样一个表述。我约莫记得,说它的安全性不基于时间同步的假设,即时间上异步也是可以的,而持续出块的活性基于所谓的半同步假设,也就是说通信的时延是有上限的。这里如果我在表述上犯了错,请大家原谅我,因为我好久没看了,不太确定最准确的表述是什么样的。
后来,有人在论坛上提出了一种攻击,叫 Balancing Attack(平衡攻击)。这种攻击其实就涉及到在所谓的半同步假设之下,去攻击活性的一个假设。这种攻击的全貌,我没有办法复述出来,之后以太坊的研究员在基于 Balancing Attack 的基础之上,在共识算法当中加了一些东西去抵抗这种攻击。这意味着我们证明了,或者说我们展示了,哪怕在半同步的假设之下,其安全性、活性也是没有办法得到保证的。
我认为这些事情其实已经足以说明,当大家说 PoS 很安全或者没有办法举出一个攻击的例子时,很大一部分原因是他们没有接触过。比如说权益研磨攻击,一些 PoS 区块链就因为权益研磨攻击而死亡,比如我刚刚谈到的 Balancing Attack(平衡攻击),一种新形式的攻击,似乎也被证明了是有必要去防范的一种攻击。
所以,如果大家去看更多的技术资料,就会得出更多的想法,而不仅仅只是说 “现在没有攻击,那些 PoS 链不是活得好好的嘛 ” 这一类的言论。实际上,这些是不足以让我们得出一个清晰的结论,在我们真正需要选择的时候有所选择。
说一句刻薄一点的话,如果你买一个会爆雷的金融产品,在爆雷的那一天之前它都是安全,但其实你并不能保证它一直是安全的。这时候,我又想起了罗素讲的一个很刻薄的笑话。他说,你养一群母鸡,每天一敲盆子就给它们喂食,一直持续下去。这些母鸡归纳出敲盆子等于有食物吃,直到有一天,你敲着盆子,把围过来的母鸡扭断脖子。这是一个很刻薄的笑话,但真的是这样。
Daniel:刚刚阿剑老师非常犀利地批评关于弱主观性等问题的时候,我和 Terry 在后面一直在狂笑。
Terry:我还有个问题,刚才提到弱主观性,包括节点需要在线等问题,我听到一些言论,说 “BTC 代码里也有 seed node,刚上线时,也需要通过代码里写的 seed node 去找到几个节点,然后才可以开始同步”。他们认为,这里面也有一些主观性,只是弱和强的区别而已,并非黑和白的区别。你怎么看待这种观点?
阿剑:这个根本就比较不出来。实际上,所有的区块链,新节点加入网络的时候,都需要别人给他提供区块链数据去同步,关键在于别人给的数据你是否可以自己去验证。我们经常说:“Don’t trust, verify.“ 你要自己验证它。不管是比特币还是以太坊,都有 seed node,都有种子节点,这些节点给你提供当前区块链的状态,你可能会找一个离你最近的节点来下载区块数据。
PoW 区块链的一个特点,是它的区块都是非常难以生产的,以至于当你每收到一个区块时,去验证它的工作量证明,只要这个验证过程一直持续,且你连接到了足够多的节点,在这个过程当中你的信任是可以被最小化的。也就是说,信任的因素已经被我们用可以想到的这个方式压缩到了最小。所以,我们可以说 PoW 它本身是信任最小化的,但是 PoS 显然不符合这一点。
Daniel:这个其实是安全方面非常重要的一个点。当你要保证安全性的时候,你基于安全性的一些假设,是要最小化的,你不能假设一大堆东西都是安全的,而是要尽可能假设最少的东西,这样才能证明它的安全性。
6、PoS 并没有提升可扩展性
Daniel:我们在安全这块已经聊得很充分了。前面我们说区块链除了安全性,还有去中心化,还有效率。我觉得效率其实可以不用谈,因为 PoS 做了这么多的妥协,主要就是为了提升效率。
Terry:但是以太坊这一次合并并没有提高效率。可以给大家介绍下这一常见的误解。
阿剑:对,没有提升。认为 PoS 可以提升可扩展性,是区块链社区的一个误解, 我在 2019 年 5 月份就发现了这点。
举个例子说明下,一个普通节点,做的第一件事是验证所谓的共识,即别人出的区块是否为有效区块,第二件事是交易的处理。我们控制变量,在硬件条件一样的情况下,节点的资源总量是不变的,你在验证共识上花费的资源越多,在处理交易上的资源就越少,性能/吞吐量就要下降,对吧?这是一个很显然的事实。从中你就可以推断出来,所谓的 PoS 能够提升可扩展性,根本就是一派胡言。因为 PoS 共识验证的开销,比 PoW 大非常多。
这里我们不涉及交易的处理,只谈区块的验证。验证 PoW 区块时,实际上你只需要上一个区块的哈希值,以及现在这个区块的 nonce,计算一次就知道现在这个区块是有效的还是无效的。在 PoS 或者是委托式的 PoS 里,你要验证 10 个、100 个签名,或者是一个包含了数十个签名的聚合签名。拿以太坊 PoS 出块举例,出块的单位称之为 slot,一个 slot 可能有 32 位验证者,你需要验证这 32 位验证者的签名或者聚合签名。注意,验证签名后还没完,你还必须做一件事情,你得知道这些公钥有多少权重。签名不只是签名,签名的重点是它对应着哪个公钥,而接下来要查找对应公钥到底能不能出块,以及这个签名应该被认为有多少的权重,然后才能断定这个区块是不是已经达到出块的要求了。
所以,PoS 验证共识时,是一个所谓的带状态的验证,和 PoW 的验证不一样。 PoW 的验证是一个无状态的验证,即不需要知道公钥是谁控制的,只需要计算一次哈希值,就能知道区块是否有效。在 PoS 的验证中,你首先要验证签名,其次验证是带状态的,你必须知道每个公钥对应多少权重,你才能够算出最终的区块签名当中它有多少权重,然后你才能够确定它是否达到 2/3,是否达到检查点的要求。
PoS 带状态的验证,这一点的影响非常深远。这意味着,PoS 在共识验证上的开销,会随着验证者数量的增加而增大, 这是一个很显然的事实。如果有 100 个验证者,就有 100 个状态,1 千个验证者就有 1 千个状态,1 万个验证者就有 1 万个状态。
有一则小新闻,很多人没有注意到。以太坊引以为傲的 Casper 算法,声称是一个开放的、能够容纳数千数万个验证者的算法,实际上很早就有人提案说未来可能要限制验证者的数量。 为什么要限制验证者的数量?验证者不是越多参与越好吗?因为验证者越多,它的验证效率会变得更差,所以才要去做限制,这是一方面。
另外一个很多人没有注意到的方面,是验证区块的通信开销也会变得比 PoW 大很多。 在 PoW 出块者内部,你挖你的,我挖我的,谁先出块,大家就在后面跟着挖,这是非交互式的。在 PoS 中,出块者需要持续跟其他人保持通信,需要收集其他见证者发过来的签名。当你要收集多个参与者的签名时,你跟这些见证者可能没有一对一的网络连接,可能要经过好多跳转才能收集到。在以太坊 PoS 中,它为每个 slot 设置了一个签名收集人,签名收集人要把自己提议的区块发布出去,然后要从其他人那里接收签名。
你想想,他知道的只是其他见证者的公钥,他不知道他们的网络位置,这就是一个风险点,因为这意味着他的区块要洪范式地发送出去,就像我们广播一笔交易一样。另外,其他见证者不知道这个签名收集人的网络地址时,他们也要洪范式地发送出去,直到签名被收集人所收集。这其实会造成非常大的通信开销。
如果我们认为这仅仅只是出快者节点内部的问题,我自己会觉得对但也不完全对,因为在这个过程当中,确确实实要占用到那些不参与出块的人的通信带宽。所以,我们会发现,如果你只研究共识算法,只研究共识机制,但不研究区块链协议的话,你可能很难意识到这一点。
如果你研究过以太坊的状态表达,以及它的状态膨胀问题的话,你就会敏锐地意识到 PoS 算法在本质上是把验证者的状态跟普通用户的状态切开。验证者依然是带状态的,有一个外部的状态,对应着每一个普通用户的账户以及合约等等,此外还有一个内部的状态。以太坊用一种机制来保证两个状态之间可以沟通。共识的参与者全部都是带状态的,就会出现我们所谓的状态膨胀问题,就会出现验证的开销不断升高的问题。
Daniel:这个问题目前还没有暴露出来。我不知道过去跑了一年信标链(Beacon Chain)的节点,有没有看到这个问题的端倪。
阿剑:这方面我没有去跟进,但在技术上推论就是这样,技术上它会发生,迟早有一天会发生,只不过是什么时候发生而已。就像你不能因为它现在没有造成一个很坏的影响,就说它没有影响,对吧?所以,说 PoS 的可扩展性更强的这种言论,实际上都是基于一种缺失性的比较和选择性地呈现事实。
再举一个最简单的例子。现在 PoS 支持者说使用了 PoS 之后,以太坊出块只需要 12 秒,而之前 PoW 以太坊出块要 15 秒。其实不能这么比较,因为 15 秒的区块可以比 12 秒的区块更大。一分钟出 4 个块,其吞吐量未必比一分钟 5 个区块的吞吐量要小,因为前者可以有更多 gas 量,而后者需要在共识验证上有更多的开销。这难道不意味着 PoW 的可扩展性比 PoS 更强吗?为什么我们会一直沉迷在这种所谓的 “出块速度决定可扩展性” 的迷思当中?
Daniel:我其实一开始只是想说在一些典型的区块链架构设计当中,PoS 的共识设计为了提升效率、提高所谓的吞吐量,而牺牲或者妥协一些其他的因素。结果,阿剑老师直接搬出以太坊 2.0 的 PoS 共识机制来推翻了这个说法。
7、抗审查性
Terry:正好我也想问一下。上次我访谈 Cipher,正好也谈到了审查的话题。我们就拿以太坊作为例子,它从 PoW 切换到 PoS 之后,如果面临美国相关机构的审查,在抗击审查方面,前后有区别吗?或者说有高下之分吗?
Daniel:我可以再补充一个细节。通常在 debate 的时候,攻击 PoW 抗审查时,会说 PoW 的矿池实际上是由几大矿池掌控的,而矿池背后是掌握能源的大资本,基于此很多人说 PoW 也没有一个非常好的反审查基础,也容易被审查。当然,在上一期 Fork It 中,Cipher 提到当 OFCA 要求审查时,PoS 也会面临这个问题。
阿剑:在这个问题上,我不是专业的,但我想提醒一点,你在 PoW 中参与出块,其实跟你的身份没有关系, 你的公钥可以每天换一个,但在 PoS 中你是没法做到的,你可以不断切换网址,但你的身份一直是那个身份,所以在 PoS 中可以基于这个身份一直持续地追踪你。
我们增加抗审查性,或者说提高隐私性,最好的办法是让大家水到渠成的、很自然的、不用刻意去动用某一些技术就能够完成, 这是我们在技术上追求的终极目标,因为现在我们会看到一些极端情况,那就是提供这些技术的开发者,他们本身会成为被攻击的对象。Tornado Cash 就是一个很明显的例子,当然这和以太坊本身的架构也有一定的关系,我就不展开说了。
8、 Finality(终局性)
Terry:OK,你的观点很有意思。你觉得 PoS 权益更强,所以我想问一个问题,你怎么看待 finality(终局性)?很多人喜欢拿这一点说事。
阿剑:PoW 的以太坊,要达成 finality,大概需要 15 个区块,大约 4 分钟。切换到 PoS 后,需要 1/2 个 epoch,再加上一点等待时间,以确认 fork 相关的事宜,我之前计算过,一共要 6 分半钟才能达成 finality。为什么大家说切换 PoS 后,以太坊达成定性的速度提升了呢?这是一个很奇怪的事情。
Terry:很有意思。
9、以太坊合并,就是走大区块路线
Daniel:关于 PoS 和 PoW 的 debate,我们已经聊了很多,阿剑老师也分享了自己的很多观点。我现在回过头来,想问阿剑老师一个问题,对于以太坊的这次 merge,你是否看好?
阿剑:我必须先声明一下,大概去年七八月份开始,我就不再关注以太坊在未来方向上的一些事情,但在那之前,我还是有关注和了解的。如果你要问我对 The Merge 以及以太坊未来发展方向的看法,我觉得 The Merge 就是大区块。 我之前在推特上说我想做一款表情包,一个蒙着头的人,很光鲜,上面写着以太坊合并,然后他掀开头套,上面有几个大字——大区块。这是我的真实想法。
Daniel:阿剑老师,你能不能先科普一下大区块的概念?因为大区块以及与之相关的 debate,之前主要发生在比特币社区而非以太坊社区,而且是否走大区块路线也导致了比特币的分叉。
阿剑:大区块,顾名思义,就是通过扩大区块的大小,求节点投入更多的资源,来达成吞吐量提升的效果。 我们还是拿以太坊作为例子,一开始以太坊单个区块的 gas 上限为 300 万,那是很早的时候了,后来提升到 800 万,之后又提升到 1250 万,再后来是 1500 万。EIP-1559 之后,它直接变成了大区块,gas 量可以翻倍,但平均区块大小理论上来说依然维持在 1500 万。
在这个过程中,因为单个区块能容纳的 gas 量,也就是能容纳的计算量增加了,所以你可以认为每个节点在单位时间之内,需要处理的交易或者说需要投入的资源数量,都增加了。如果你用 tps 作为衡量标准,区块能容纳的 gas 量从 800 万变成 1600 万,如果里面的交易构成没有太大的变化,那 tps 就达到了翻倍的效果。
大概在 2015、2016 年的时候,大家发现比特币的区块开始被打满,之前它是长期处于一个不满的状态,所以大家开始关系区块大小的问题。当区块满载的时候,就会开始出现所谓的拥堵问题,你发一笔交易没有办法很快就被确认,可能要等 1~2 个区块甚至更长的时间。这个时候,有人提出怎么给区块链系统扩容,怎么提高它的吞吐量,让大家的交易能够被更快确认,交易费用、手续费更低,大概是往这个方向走。
当时就有人提出说,我们有一个最简单的方案,他甚至还引用了中本聪的话,因为中本聪也说过,要提高吞吐量其实很简单,把区块大小的上限往上拉高就行,因为原本的情况下有 1MB 的限制,超过 1MB 的区块会被节点所拒绝。所以就有人建议将区块大小从 1MB 提高到 2MB,至少眼前就没有这些事了。因为这个,当时的比特币社区里充满了各种尖锐的争议。
Daniel:那个时候,比特币要不要走大区块路线,争议非常大,大到已经牵涉到信仰层面了。双方都心系比特币的未来,甚至把这当作真正决定比特币未来生死存亡的问题来去争论。我们先说结果吧,你觉得现在比特币有走大区块路线吗?
阿剑:在这一点上,我得提出一些批评,比特币没有完全走大区块的路线,但隔离见证确确实实提高了区块大小的限制。 隔离见证把密码学中称之为 witness 的数据,也就是证明一笔交易有效性的证据,给挪到了一个专门的地方,区块里的其他内容还是限制在 1MB 大小,但如果算上 witness 的数据,区块大小也有 2MB。
Daniel:5 年后的今天,我们回头看 5 年前大小区块的辩论,结局是现在的比特币区块比之前的大了一点,但大的不多。我的理解是,比特币并没有真正践行当年所提出的大区块路线,因为当年大区块的支持者们的预期是 10 倍、20 倍,甚至更多。而且,我们今天还能看到比特币社区里的一些理想主义者,他们依然相信如果当年比特币采纳了大区块的建议,在今天比特币会是另外一番更好的局面。总而言之,大小区块之争在比特币的历史上是非常浓墨重彩的一笔。
阿剑:我想补充一点,当时为什么很多人反对大区块,是因为大区块是有代价的,它意味着节点的运营成本上升。 如果区块大小限制在 1MB,平均每 10 分钟一个区块,你可以算出一年要被占用多少容量的硬盘空间。如果区块大小变成了 2MB、4MB,硬盘空间就要翻倍,毫无疑问这会伤害到去中心化的属性,因为它抬高了节点运营的成本。我当时因为这点,也对隔离见证有一点点意见。从原教旨主义的角度上来说,隔离见证这件事情是有瑕疵的,是一件我们不希望以后会频繁上映的事情,当然事实证明它确实没有再次上映。
我认为隔离见证带给我们的最重要的一件事情,是它始终提醒着我们大区块是有代价的。 如果你想让区块链系统提高吞吐量,大区块是一种简单直接的方法,它也确实能提高吞吐量,但它不是一个很理想的解决办法。为了维持一条链的生存能力,这种办法能不用就不用。
Daniel:伴随着比特币的大区块之争,后来分叉出了 BCH,再后来又有了 BSV,我们在这就不展开讨论了。阿剑老师,前面你说以太坊的 merge 就是以太坊的大区块方案,这个我们该怎么理解呢?
阿剑:我来给大家做一个不是那么长的推理。我先做一个现场调查,Daniel 和 Terry,你们是否认为以太坊的 layer 2 有明确的、可证实的或者说非常漂亮的扩容效果?
Daniel:我否认。
Terry:我也否认。
阿剑:为什么你俩会否认?
Daniel:在我看来,目前所有的以太坊 layer 2 扩容方案,都偏离了真正的第一性原理,因为现在以太坊 layer 2 扩容方案以 rollup 为主,rollup 只是对 layer 1 的计算能力做了一个抽离并加以改良,实际上真正能够扩容的约束条件还是在 layer 1 上。所以在我看来,所有的这些 rollup 方案,都只是中间的过渡方案,以太坊还没有真正走出一个充分可预见的、光明未来的 layer 2 方案。
阿剑:对,我要说的话已经被 Daniel 说完了。
Daniel:不会吧?
阿剑:确实是这样,Daniel 总结得非常对。以太坊的这些 layer 2 方案,当然会有不同的技术范式,我可以先给大家稍微简单介绍一下。比如说 ZK-Rollup,使用了所谓的密码学上的零知识证明,我们现其实它没有使用零知识的属性,而是使用我们称之为证明系统的这么一个技术,来生成一个计算完整性的证明。也就是说,从一个状态到另外一个状态的过程中,我执行了所有应该被执行的计算,生成了一个可以向你证明的证明,你通过验证这个证明就能知道我的每一步都是根据某一个你可知的计算规范来运行的,这就是 ZK-rollup。
还有一种叫做 Optimistic Rollup,它就更简单了。它不向你提供完整性的证明,而是断言最终的结果就是这个,如果你们不信,你们就来挑战我,我们各自出钱把押金押在这,如果你能证明你是对的,我的押金就输给你,但是如果你不能证明你是对的话,那么我的这个状态就不受影响,我会继续拿我该拿的钱,然后 layer 2 继续往下走。
当然,与此同时还有人提出其他一些方案,比如 ZK 阵营里有一个叫 Validium 的方案。ZK-rollup 和 Optimistic Rollup 有一个共同点,都需要把 layer 2 上发生的那些交易数据发布到以太坊的主链上,发布的形式就是我们称之为 Calldata 的一种数据形式。在这个过程中,ZK-rollup 和 Optimistic Rollup 都会不可避免地占用主链的资源,因为你要在主链上存储 Calldata。存储这部分数据是有理由的,如果没有这部分数据,你就没有办法建构出 layer 2 的链上状态,进而无法发起提款之类的操作,也没有办法发起相关的挑战。这叫数据可用性(Data Availability)。Validium 则抛弃了数据可用性,不在主链上发布我的数据,而是把数据放到别的地方,用别的方式公开。
Validium 的这种方案,确实不会占用主链的资源,但与此同时,你也可以认为它给用户提供保护的效果会弱稍微弱一些,这就是区别。
**我有个简单的判断,大家可以看到在这个过程当中是不是依然使用了主链的资源?如果是,那可扩展性就受制于主链资源的容量。**很多刚接触以太坊 layer 2 的人,可能会对 layer 2 这个词有误解,误以为所有的 layer 2 都会占用主链的资源,其实不是的。像闪电网络这种支付通道,状态通道,都是在链下进行交互,不需要在主链上发布任何数据,只需要把双方存进去锁定的那笔交易跟最终结算的那笔交易上链就可以了。
所以,如果你的 layer 2 要提升可扩展性,还要把数据传输到主链,那要么在主链上提供更多 Calldata 的数据空间,要么把 Calldata 的 gas 量降得更低。我稍微提醒一下大家,以太坊 layer 2 的扩容效果,是通过测量 layer 2 上发生的每一笔交易占用主链的 gas 数量来衡量的。
Daniel:我记得以太坊曾经降低过 Calldata 的费用,通过这种方式让 rollup 的性能提升一点。
阿剑:对,价格降过不止一次,我记得是两次。效果是什么呢?效果就相当于 layer 2 的一个区块占用主链的 gas 数量更小了,所以恒定数量的 gas 用量可以容纳更多的 rollup 区块或者打包压缩更多的交易,因此说 “可扩展性提升了”。你觉得这种论证成立吗?从技术上来说,这种论证我觉得是很离谱的,为什么?因为你明明投入了更多的资源。如果你跟我说你现在把区块从 1MB 变成了 2MB,可以容纳的数据更多了,所以可扩展性提升了,我这种只研究技术的人都觉得很有问题。现在的方案是,把 Calldata 的 gas 消耗量降低,让同一个以太坊区块在 gas limit 不变的情况下可以容纳更多的 rollup 区块来达到所谓的可扩展性提升的效果。
我们关心的是,The Merge 之后,以太坊准备怎么做?我简单看了几篇文章,包括 Vitalik 自己写的文章,他的想法是这样的。合并之后,每个时间点都有一定数量的 PoS 见证者会进行报道,我们就让这些 layer 2 运营者向这些见证者发布区块。相关数据会使用一个称之为 纠删码 的方案。纠删码方案,就是把把一个文件分成很多个有冗余性的碎片,所以你只要拿到其中的一部分碎片,就可以恢复出原本的数据。通过纠删码的方案,PoS 见证者可以检查这些 layer 2 运营者是否诚实地发布了自己的区块。
然后,Vitalik 还提出了一种新的交易类型,**blob-carrying transaction,携带数据的交易。**这种交易的特殊性在于,交易费用更便宜,但它不能跟 EVM 的智能合约等进行交互。另外一个特点是,它只能存储一段时间,比如一个月,一个月后节点就不一定能拿到这个数据了。
Vitalik 的思路就是这样,每个 slot 都有一定数量的见证者,那就让这些见证者去检查 layer 2 运营者发布的 rollup 区块,比如让每个 slot 检查 1MB 大小的 rollup 区块,看看它们有没有达到数据可用性的要求,然后整个系统的吞吐量就提升了。
我们其实都能看出来,在这个过程当中,每一步大家都知道它其实是在扩大区块的大小,因为它要携带更多的数据量,它要容纳更多的数据量,它要检查更多的数据量,但是与此同时,它每一步都尝试通过一系列的限制去限制区块扩大的效果。比如说,Calldata 的 gas 降下来了,但在每个区块中不能超过 1MB,通过额外的这个限制,来限制区块扩大的效果。
The Merge 之后,为什么我说它是一个大区块,因为 PoS 区块链共识层的验证变得更复杂了,假如 Calldata 进一步降价的话,意味着以太坊恒久保存的这些区块会变得更大。如果用上面我讲到的那些特殊方法,比如携带数据的交易,来去容纳更多的数据,虽然这些数据一段时间后会删掉,但依然扩大了区块。
因此,到最后就是一句话——大区块。通过大区块来提升所谓的吞吐量,在我看来这是一个非常可悲的事情。
Terry:对,但是展开讲的话,它通过这么多年的迭代,又实现了一次 PoW 到 PoS 的范式的转换。在后面的话还有多条线、多条技术路线同步去推进,然后还有未来有若干次的一些集成,可能目前来看的话,其实实际上做的效果它就是大区块效果或者是一个抽象的大区块的这么一个效果,我认同,我觉得这个确实是如此。
阿剑:OK,如果大家对这个话题非常感兴趣的话,我很推荐大家去阅读两篇文章。一篇是 John Adler 的文章,我不知道大家认不认识他,他是一位非常厉害的人物,他在 2019 年 10 月的时候写了一篇文章叫做《基于委员会的分片区块链的安全性与可扩展性》。那篇文章是在我看来是第一次把大家对于分片系统的迷梦敲醒了一篇文章,当然同时也敲醒了我。在那一次之后,我第一次开始意识到我应该用什么样的方式去思考这个问题,那篇文章非常棒。
你看那篇文章,你就懂得,想要不陷入大区块的这种陷阱当中,实际上是非常难的事情。 而很多的技术路线,你想一想它要解决的问题,它把复杂性放在哪里,你最终可以得到结论,它可能不可避免就会是一个大区块的方案,这是一个。
另外一篇文章是 Ruben Somsen,他是在 2020 年写了一篇文章叫做《SNARK 与区块链的未来》,它这篇文章也是明确的去论证了这种技术它到底是如何扩容的,也正是这篇文章,让我们知道了,其实以太坊的这种扩容的话,它最终依然是用到了主链资源。
这两篇文章都非常推荐大家去看。
Terry:OK,我稍后跟阿杰老师去要这两篇文章的信息,放在 Show Notes 里面。
阿剑:好的。第一篇文章就是 John Adler 那篇文章的话,现在大家其实直接搜一搜得到它的英文原版,然后它的中文版其实说起来很可惜,因为最早的中文版是由以太坊爱好者提供的,然后现在的话你已经没有办法在以太坊爱好者上读到这篇文章了,因为这个网站已经不存在了,虽然是以太坊的爱好者的译本,但是你只能在其他网站上看到他。