查看原文
其他

PoS 是谎言么|Fork It 文字稿(3)

Fork It 字节元 CKB 2023-04-19


接上文:PoS 是谎言么|Fork It 文字稿(2)



4、攻击,是 opinion 还是 fact?


Terry:谈到社会共识,首先我觉得这个词是有点可笑的。但是攻击这个名词对你来讲,是一种 opinion 还是一个 fact?以前我会把攻击当做一种 fact,现在我觉得分叉是一种 fact。有了社会共识以后,我就不敢把它当成那种 fact,更像一种 opinion。你是怎么看待这个问题的?


阿剑:我认为这个问题其实 Terry 没错,你的感觉非常敏锐。当我们有这样一个机制之后,最终只能得到一个结论:因为这个系统受制于某一些个体的意志,所以它没有办法起到我们想要的保护个体的效果。


实际上这些攻击只是一种 opinion,因为某一些人的一些观点被凝聚起来了,一方说这是一种攻击,但另外一方说不是,这是正义的行动,我是为了链和共识的安全性,对你们进行制裁。除非你们也有足够多的共识分叉出另一条链,否则就没有办法抵御这种攻击。


Terry:感觉就像法官在界定。


阿剑:不,你想得太轻松了,这不是法官,这是政教合一。它是一个集宗教领袖和政治权力于一身的集团,或者说课题。


正是因为大家没有这么多共识,所以我们才要创造出包括区块链在内的各种各样的技术,来约束参与表达意见或者参与共识的过程。你要让它有一种边界,如果没有这种边界,那么社会共识就随时可能会被利用,变成一个攻击人的工具。


就像法国大革命的时候,大家都为了所谓的自由、平等、博爱的法兰西要处置叛徒,但是如果处置叛徒变成一个没有约束的行为,只要大家达成一致意见就可以去做的话,那这就是不折不扣的暴政。


我们都知道一个真正公正的社会,必须对个人施加保护,不能说大家指责他,他就有罪,必须在司法上形成一系列程序来保护他,比如说英国的大宪章。一个人除非经过同等封建等级者的在场审判,否则不能宣判他有罪。这是我们法制的基本原理。如果没有这种机制约束,最终得到的结果就一定是大家肆意地相互攻击,并且要求其他人自证清白。比如说证明一下你没有攻击以太坊区块链,你不能自证清白,我就要攻击你。




5、再谈安全性


Terry:另一个问题是一些人为什么能相信 PoS 更安全,因为他们并不懂这一套理论,更直观的感受是 PoS 链很多,也没有发生你们说的攻击,反而一些 PoW 小币经常出现 51% 攻击,所以他们很容易得出来说 PoS 就是更安全的结论。你作为从业者有什么可以在这方面给他们做一些解惑。


阿剑:我们其实都同意 PoW 阵营里,会有不同算力支撑的 PoW 链,在 PoS 里也会有不同锁定价值的链。如果真的想在技术上做分析的话,只能借助控制变量法。就是只从技术上最本源的那些东西去分辨哪一些机制是至关重要的,哪一些特性会影响它的安全性。


大家可以看到的一些 PoW 链 51% 攻击的例子,比如说之前 ETC 上出现过的这种攻击。这个例子其实蛮能给我们警醒的,因为 ETC 本身的算力比较小,而且以太坊的矿机都可以去挖 ETC。所以其实你占有的算力实际上只是一小部分,这个部分可能不会太大,所以你的共识就有安全性的风险。


但是仅仅只从最终的结果上去说 PoS 更安全,是不成立的。就极端一点来说,假设你自己运行一个只有你一个人运行的 PoS 算法或者 PoA 算法,它是安全的,所有已经达成的共识都不会被颠覆,因为你没有必要颠覆自己。但是这并不能证明它的安全性。在我们真的要讨论安全性这个问题的时候,我们需要给它一定的约束,更明确的定义,来真正详细的从技术上思辨这个问题。


Daniel:我想到一句话大概能描述这种场景,就是抛开剂量谈毒性都是耍流氓。阿剑老师前面谈到了 PoS 从娘胎里带来的一些问题、缺陷和后续的一些补救方案,包括 Nothing at Stake Attack、Long Range Attack 这些攻击。我们讲安全性的时候,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:很有意思。


(未完待续)


本文提到的部分链接:

  • Balancing attack 平衡攻击:https://ethresear.ch/t/a-balancing-attack-on-gasper-the-current-candidate-for-eth2s-beacon-chain/8079



   



END



Nervos 网址:https://www.nervos.org/ 

中文电报群:https://t.me/NervosNetworkcn

中文推特:https://twitter.com/CKBMeta 

中文Discord:https://discord.gg/f2qa52tJnz 

《Nervos 入门手册》:ckborg.bit.host


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存