在8月31日发布ForkIt#22:PoWvsPoS之后,被大家戏称为“年更”的中文播客节目ForkIt赶在以太坊合并前夕,录制了第23期:PoS是谎言么?
这一期由Daniel和Terry共同主持,邀请到了BTCStudy的内容负责人阿剑老师,来跟大家聊聊关于PoWvsPoS的争论,他的观点和立场。
阿剑老师曾经是以太坊中文社区非常硬核的研究者,翻译者,内容贡献者,主持人的愿望是话题能够深入浅出,但是阿剑老师实力不允许,所以如果你对PoW/PoS以及分布式共识算法的设计思想和基础概念有所了解,那么会帮助你理解为什么通过阿剑老师的分析可以得出PoW全面优于PoS这个结论。
访谈结尾处阿剑老师最让主持人动容的一段话,摘录于此:一个技术范式应该想到它应该保护自己的用户,它应该保护共识,它应该珍惜每一分来之不易的共识,它应该容纳每一个可能容纳的个体去进入这个生态,去能够用它来继续做梦,去为一个遥远的我能够想象的美好未来去奋斗。
以下是社区成员整理的文字稿:
1、开场介绍
Daniel:大家好,欢迎收听新一期ForkIt,我是消失了很久的节目主持人Daniel,今天由我跟Terry一起来主持,我们邀请到了阿剑老师来做客。
在开始之前,我先做一个当前特殊的时间点介绍。本期节目录制的时间正非常接近以太坊社区的一个非常大的事件,就是所谓的以太坊Merge。以太坊Merge将会在48小时之内发生。当大家收听到这一期节目的时候,应该是合并刚刚完成的时候。
好,我们先介绍一下今天的嘉宾阿剑老师。
阿剑:Hello,ForkIt播客的听众朋友们,大家好,我叫阿剑。非常高兴能得到Daniel和Terry的邀请,来到ForkIt做客。因为之前我自己也听过很多期ForkIt,我发现ForkIt总是能请到最专业的人来聊一些最专业的话题,所以我自己也把这个当成是Terry和Daniel对我的一种认可,我觉得非常高兴。
我是在2017年进入这个行业,从那时候到现在,我一直是以翻译的身份在工作。2017年到2021年,我一直在以太坊爱好者工作,现在可能很多朋友知道我也是因为以太坊爱好者,因为我一直在里面做翻译和编辑的工作。如果从这个时间点来看的话,我猜现在我可能是这个行业做翻译里面,比较资深的一个人了。因为入行这么多年一直是在做同样的一件事,我也是在这个过程当中不断地学习,借此做了一些研究。虽然这些研究可能说不上有多么重要,但也算是积累了一些对区块链的了解。
我从2021年底之后,就一直在给BTCStudy做贡献,这是一个很小的网站,上面其实没有多余的内容,全部都是关于比特币技术原理、可能拥有的一些技术改进方向,以及生态当中正在出现的一些有趣的技术方案。
Daniel:其实我知道阿剑老师好像平时并不会太多地参加台前的事情,你主要是在幕后做了一些内容和文章方面的工作。可能有的听众有所不知,在国内的以太坊爱好者核心技术小圈子里面,阿剑老师是一个举足轻重的人物。为什么这么说?因为每当以太坊社区发生重大事件的时候,大家都会所讨论。真正的这些我们称之为KOL的观点,在整个中文社区里面往往能起到非常至关重要的作用。阿剑老师就是我认识的这个小圈子里面,为数不多的,真正以太坊硬核的KOL。
Terry:KOL有很多,但是硬核的比较少。
阿剑:以前当我还自认为是以太坊生态的一员时,以太坊生态也非常精彩,大家可以看到多种多样的人物和多种多样的观点。我觉得自己在其中显得相对特殊一点的是,可能我跟Terry、Daniel,包括曾经上过ForkIt的这些嘉宾有一个共同点,就是我们特别关注技术和底层。我觉得很多关于应用层的事情不是我最大的兴趣,或者说不是在我称之为社区的这么一个身份的人最应该关心的事情。所以在这个过程当中,我对于以太坊的协议层,包括它的来龙去脉,它的走向等投入了特别多的关注。我想大概是这一点可能会让大家认为我会对这些问题会有一些理解。我想其实仅仅是这样而已。
2、PoW全面优于PoS
Daniel:阿剑老师其实参与的讨论不是非常频繁,但是每每有非常关键讨论的时候,但凡有你的言论,我一定会发出来认真读,认真看。在以太坊merge发生之前相当长的一段时间里,整个社区又开始了关于PoW和PoS的争论。我相信阿剑老师可能参与过很多次这种讨论,你能不能对这场旷日持久的以年为计的讨论,给大家介绍一下你的立场或者你的主张。
阿剑:首先关于立场,我毫无疑问是认为PoW是一个全方位比PoS更优的东西,是全方位。
我也认为这个争论其实可能自很久以前,刚刚出现PoS这种想法时就有了,大概10-12年,最晚可能就是14年。因为14年以太坊的研究,包括它的开发都已经起步。从那个时候开始到现在,我最大的感受可能就是在这个过程当中,随着本身以太坊和其他项目所提出的PoS机制的开发或者进一步的研究,就会有一些新的想法或者新的意见出来。
但是整个过程当中,PoS的一方就PoS优越论的论证,实际上我认为是包含了很多杂质的,甚至我认为其中绝大部分都包含着谎言。他们其实用了一种建立于选择性呈现事实的论证方式,也就是说当你只部分的呈现事实,而不是全面呈现事实的话,虽然你呈现的那部分好像看起来是事实,但是你的论述并不能被称之为论证,在这个意义之上我把他们称之为谎言。
我给大家举个简单的例子,比如经常会出现的一种声音是,PoS是一个新的东西,既然是新的东西,而且对旧的东西有所改进,那它一定是一个新的趋势,新的未来。再比如说他们认为PoS抛弃掉了PoW这种计算密集型的出块过程,可以不用浪费这些能源去生产区块,就会变得所谓的更加绿色。或者说因为过程不需要耗费这么多计算量,可扩展性好像就会有所提升。这些都是缺失性的比较。
举个最简单的例子,PoS是一个新东西吗?这是一个非常有趣的话题。很多人都会认为是比特币先提出PoW之后才有人提出了PoS的想法。其实从技术上来说,我认为它是一种范畴上的错误。因为如果你对分布式领域的共识算法有所了解,你就会知道分布式领域共识机制的研究最早起源于兰伯特,LeslieLamport在1987年发表的论文就是关于拜占庭将军问题。他所设想的是一个基于投票的机制,有不可伪造的身份证明,也就是数字签名方案。在这个前提之下,拜占庭将军问题有一个关键性的结论就是,1/3是一个不可逾越的上限,如果超过1/3的人是恶意的,不想达成共识的,那么这个分布式系统就没有办法达成共识。
接下来就出现了所谓的使用拜占庭容错的算法,也就是在不超过1/3的参与者是恶意的情况之下,我们有没有一套算法可以达成这个共识?其实这些拜占庭容错的算法,都是基于身份和数字签名体系,所以你可以认为当时的拜占庭容错算法就是现在所谓的PoS算法的前身。
它比PoW出现的早的多,只不过在使用拜占庭容错算法最早的形态当中,它默认所有参与者的签名权重都是一样的,它不会有参与者的投票权重不一样的情况。而PoS对拜占庭容错算法概念上的进步就在于,它放宽了这一点,使得不同参与者的签名是有不同权重的。但是,其实我们可以说PoS就是一个更古老的东西,实际上并没有带给我们像比特币这样的无需准许、大家都可以去参与的共识机制。这是一个非常重要的特点。
回到技术本身,其实是有相当多的点可以探讨,比如说基于一个大家耳熟能详的模型,安全性、可扩展性和去中心化三个维度去比较它,其实可以比较出很多内容。
3、安全性
Terry:我觉得从不可能三角这个方向去聊是非常合适的。
我现在看到PoS一个比较常见的说法,就是它在安全性上是更安全的。如果这一点比不过的话,他们就会指出在同样成本的情况下PoS更安全。在抗审查方面,我觉得是PoS比较明显的劣势,但在这个时候他们通常又会一起比烂,说在抗审查性上PoW也好不到哪去。在去中心化上,他们最早的时候说PoS不会有矿池,不会有stake,但是后来发现这完全是一个非常专业的事情,一定会有stake。
你能不能整体地从这三个维度去分析一下现在普遍的看法,以及你对他们这些错误看法的评价。
阿剑:我可能要请ForkIt的观众对我有点耐心,因为我会讲得非常长。上面我已经说过,在我自己接触到的所有关于PoS更优的论证当中,都包含着大量缺失性比较,或者选择性比较。
我可以先把结论摆在这里:在任何一个维度上,都无法论证PoS比PoW更优。我为这句话负责。
首先我们来说安全性。对PoS现有的安全性研究基本上都会提到一个很基础的攻击:StakeGrindingAttack,权益研磨攻击或者理性分叉。
PoS不是采用PoW这种竞争方式来比较谁足够幸运、足够快,来提出下一个区块的工作量证明机制,不是比拼谁更快找出一个符合难度要求的随机数。PoS的一种出块方式是根据时间,把一段时间分成比如12段、36段,每一段安排一个出块者。
另外一种方式,比如最早的PPCoin点点币,它的方式就是每个人都拥有一个UTXO,每个UTXO有一个面值,以及没有被花费的时长,这就叫币龄Coinage。两个因素决定了你能不能用UTXO成为下一个区块的出块者。中间还是需要做一些计算,但是最有意思的点在于,PoW的出块属性是无过程性的,ProgressFree。什么意思呢?就是假设现在出了这个块,不管如何调整这个块的哈希值,不论试多少次,它都不会影响挖出下一个块的概率。下一个块的出块者,还是要经历大量的计算。影响当前这个区块的哈希值,对下一个区块的区块难度实际上没有任何帮助。
但是在PoS里,大家都要使用以往历史的区块来作为随机数源头,也就用一个随机数的源头来生产出一个随机数,用这个随机数来决定下一个块是由谁出,或者下十个块分别由谁出,它就损失了无过程性的特点。
这意味着什么?意味着当前谁挖出了这个区块,挖出了这个区块数据上的特征,就可以决定接下来一个块甚至十个块的出块者。
那么大家会做一个事情是什么?是虽然我在这个时间点,比如本来这十秒钟之内只能有一块,但其实我自己在偷偷挖,已经算了100个区块,我就看哪个区块能够让我在下一个区块依然是出块者,或者是找哪一个区块,能够最大化我在接下来链条当中出块的机会,这就叫做权益研磨攻击。它会不断尝试在任何一个区块点位上挖矿,并且试图干预未来出块者的选择。
权益研磨攻击在当时非常普遍,而且非常致命。因为虽然我们看到这个时间点,好像网络上只出现一个区块,但实际上大家已经偷偷挖了几百个几千个区块。就等他自己挖出来一条超级长的链,然后等到了某一瞬间啪的一下摆出来给你,大家因为最长链共识啪的一下就跳过去了。
但是最长链共识是稳定的吗?它也不稳定,接下来又会有人啪的一下给你一条更长的链。这是当时出现的权益研磨攻击,后来大家把它归结为一个属性叫NothingatStake,权益无关或者说无利害关系。什么意思呢?就是虽然你只安排我在点出块,但是我偷偷在挖N个块,这对我的利益不会有任何影响,它只有好处没有任何的坏处。
权益研磨攻击直接导致了后来的PoS机制几乎都引入了惩罚机制。大家已经发现这种基于奖励的,随意出块的方式并不工作,那么就需要用惩罚机制来约束,让大家不去做理性分叉。它的逻辑是什么呢?就是当人们已经提出了一个区块,如果被发现在另外一条链上也提出了这个区块的话,就需要受到惩罚,以此来约束不去挖分叉链,确保只挖一条链。这个原理基本上贯穿了从2014年开始后续的所有PoS链的设计。
但是我们会发现其实这个问题没有那么简单,因为我们刚刚讲的惩罚机制好像只是单向的在通向未来的维度上,避免大家大量地去挖分叉链,能够把大家约束在一条链上去,直直地往前出块。这意味着没有问题了吗?不是的。因为一条链它不仅有通向未来的维度,它还有历史的维度,甚至我们认为历史的维度才是更重要的。
为什么?因为如果链的历史可以被随意篡改,那么它如何去担当账本的角色,如何去担当大家的基础交易系统,并且在上面构建各种各样的应用功能?这才是我认为更加关键的要素,如果区块链能够形成一个不可篡改的账本,一个不可篡改的历史,那么我才可以什么都不怕。对于一个普通用户来说,我绝不担心我的钱会丢失,因为所有的历史几乎都是可靠的。而私钥、数字签名这些密码学方案给了我迄今为止可以媲美其他任何财产系统,甚至比他们更优的一种财产属性。
接下来大家就会发现另外一种情况叫做长程攻击,LongRangeAttack。长程攻击的意思是说,虽然好像可以让大家在一条链上出块了,但是这并没有解决问题,为什么?因为我可以从创始状态中挖出另外一条链出来,这条链不一定更长,但重点是我们没有任何形式上有效的方法去对比这一条新挖出来的链,跟历史上大家一直在用的链到底有什么差别。
这是最关键的属性,为什么呢?比如我作为一个普通的PoS链用户,当我的节点同步上一条链的时候,我实际上并不知道这条链是不是大家一贯以来,通过PoS共识参与的一条链,我也不知道它是不是一些人另外挖出来的。有人说我们可以观察签名,因为每个区块都带有PoS参与者的签名。
但这里刚好又可以跟另外一个东西联系起来,大家发现一个很有趣的事情,所有的PoS验证者都需要把币锁进去,但锁闭进去是为了什么呢?是为了赚钱对吧?赚了钱就总要有一天要把它拿出来花,总是会解锁。如果不能解锁,它就变成一个单向的过程,没有人会愿意参与这样的算法,因为这意味着完全没有任何好处。
验证者的币会有一个释放的时间点,一旦在释放时间点之后,这个链所有在共识层面设置的惩罚对你来说不再有任何意义。因为我的钱已经取出来了,你们惩罚我什么呢?我的钱已经取出来了,这个时候就没有办法对我施加任何惩罚了。前面说的那种通过惩罚来使得一个人只在一条链上出块签名,这件事情本身就不成立了。
这就是长程攻击跟人们以前发现的一种特殊攻击的形式,叫做旧私钥攻击相结合的过程。就是一旦PoS参与者离开了共识层的约束范围之后,你对他的私钥行为实际上就没办法有任何约束。那么这个时候有人完完全全就可以去购买一些旧私钥,购买旧私钥可能是非常便宜的,因为只是购买一个私钥而已,并不需要财产。
有了旧私钥之后,我们就可以伪造跟以前的链一模一样的链条,所有的交易都可以重播一遍,所有的签名都可以重新放上去一遍。那么到底哪一条链是真实的呢?在这种长程攻击的情况之下,我们会发现现有的所有PoS算法都不能从技术上解决这个问题,包括以太坊。
以太坊的Casper算法经历过了很多演进,它最核心的概念是基于惩罚约束,来使得人们在同一条链上出块,确保会定期的达成共识。以太坊基于惩罚算法的这一整个概念上,其设计的复杂和精巧程度,应该被列为当前PoS机制的第一名。非常的精巧,而且把它基于惩罚的概念发挥得淋漓尽致。
比如说如果有人提出两个互相冲突的区块,那么就要受到惩罚;比如说Casper投票,它不是对出块的投票,而是对以往历史区块检查点的投票。检查点就相当于大家要定期刷新它的创始状态。原本的创世状态可能是零号区块链,现在过了100号区块之后,大家有2/3的同意票,那么大家就把100号区块变成一个新的所有状态建构的起始点,那么100号区块它就变成了一个新的创始区块。
Casper惩罚的机制是,但凡出现了一些在检查点投票当中的不轨行为,包括双重投票和环绕投票,具体来说就是你会不会投两个相互竞争的检查点,以及在投票检查点的时候,有没有跳到另外一条分叉点上去,比如一开始投的检查点是在A链,但是后面的一个检查点居然跳到B链上去了,这就说明是有问题的。
还有一个更加有趣的惩罚是什么呢?是当整条链没有办法达成共识的时候,它会惩罚所有参与者。注意是所有参与者,不只是那些不在线的参与者,而是惩罚所有的参与者。如果大家懂博弈论的话,可以想一想为什么要阻止这些不在线的参与者,通过不转发其他人的区块和签名来陷害其他人?
本身共识算法对不在线参与者的惩罚是比较严重的。在不在线是通过某个时间段出现你的签名去证实的,如果没有任何惩罚,那么我就可以通过不转发你们签名,长期让这条链处在一个没有办法确认共识的状态,一方面罚没了对方,一方面让自己的权重变高。为了阻止这样的情况发生,就会对这样的行为施加惩罚,然后用这种惩罚不断淘汰掉那些不在线的参与者,让他们重新同步。但是就算把这些所有的全加起来,还是没有办法应对我们所谓的长程攻击和旧私钥攻击。
为什么?因为所有参与者总有一天会退出这个系统,退出这个系统之后,旧私钥攻击就变成一个incentive上,就是激励机制上可行的一种攻击。只是买一个旧私钥而已,就可以制造出一条超长的链。
这个属性已经得到大家非常充分的讨论,市面上有很多相关的资料。有一篇非常重要的文献,它的原始版本在2014年就出版了,后来作者在2015年又重新修改了这篇论文,名字叫做OnStakeandConsensus,《论权益与共识》。这篇文章非常重要,它把所有我上面谈到这些攻击都做了总结。最终得到一个结论是:这种长程攻击实际上代表着对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%攻击成本的网站2,显示了租用51%矿机到底需要多少成本,几千美元到几万美元都有。如果攻击成本真的这么便宜,为什么没有人这么做呢?因为他还有很多不可克服的困难,比如说网络实现的困难等等。
假设真的能租,那么攻击的结果是什么?大家经历过几个小时的混乱,然后结束了。PoW最长链共识会推进大家继续凝聚在同一条链上。PoW系统没有被崩溃,没有完全被毁灭。除非能够保证自己永续地掌握51%的矿机,否则就没有办法永续的发动51%攻击。这是一个很明显的道理。
如果你真的买下了PoS51%的权益,你能怎么做?答案是可以为所欲为。因为如果占据了51%的权益,那么就可以完完全全统治出块这个过程。同时也意味着那些想要参与PoS流程的新人,也必须得到你的同意。因为他们必须通过一笔交易来把自己的押金锁到系统当中,如果他不能把资金锁到系统当中,就没有办法成为一个staker,就没有办法参与出块,他的签名是无效的、没有意义的。只要你能掌握PoS51%的权益,就可以永续地摧毁一条PoS链。
有人就会说了,我们不是还有社会共识吗?如果出现这种情况,我们罚他就好了。这是一个很荒谬说法,且不说这是一个缺失性比较,如果要在这个层面上比较,并不能比较出PoS比PoW更优。其次是如果你真的认为这是一种可行的方案,这就显得很可笑。因为我们需要的是一个全天候7×24小时无休的系统,但这个系统居然需要全民参与,并且经常要检查它有没有出问题。而且真出问题的时候,你确定能凝聚出这么多社会共识来惩罚它吗?还是说从共识机制的角度上来看,这种社会共识是可以被利用的一个方式?
因为但凡如果有人通过宣传战,让人相信我们现在有一个共识,我们想要罚一帮人,那帮人就会被罚的话,你想想作为一个PoS共识链的参与者和用户有没有安全感?这意味着你资产的安全完完全全受制于那一个虚无缥缈的社会共识,没有机制可以保护你。而且重点是每个人发动社会共识的能力是不一样的,这是一个很显然事实。你是不是就要让自己的资产安全置于那一小撮人的意志之下?那一小撮人能够发动社会共识,就意味着他们随时可以攻击你的财产,这是一个你想要的系统吗?这是一个你想要的把自己的资产放在里面的系统吗?这是个非常荒诞非常可笑的说法。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。