在秘猿小课堂
16–
25 期,我们给读者介绍了构建加密经济网络的技术实现的两个部分,即 Cell 模型和 CKB-VM 虚拟机。在本期中,我们将会进入构建加密经济背后的三大支柱之一的共识部分(加密经济的三大支柱:技术实现、共识协议、经济模型。)在这一部分,我们会给大家讲解,秘猿科技技术团队在深入研究 PoW 和 PoS 以及其他共识后,为什么坚定选择 PoW 作为底层公链 CKB 的共识协议原因。
秘猿科技区块链小课堂第 26 期
关于 PoW 和 PoS 的误解太多,想要在一篇文章中讲个明白实在是一个极高难度的任务,所以这里只简单讨论两点,一个是从经济学上思考 PoS 给出的美好承诺是否可靠,另一个是 PoS 本质上是一种许可机制。之所以拿这两点出来是因为很多讨论非常纠结一些技术性的细节,忽视了这两个根本性的问题。
成本悖论
区块链技术提供的价值是去中心化的安全,而安全是可以用攻击成本来衡量的。一条链的攻击成本有多高,它就有多安全。
区块链的共识节点提供的产品是安全,共识节点是网络服务的生产者。我们也知道,经济学里面有一个基本定律,在完全竞争市场中,生产者在均衡状态下的边际收益等于边际成本。也就是说,如果区块链的共识算法创造了一个完全竞争市场,提供多少安全,就需要多少生产成本:
攻击成本 = 安全程度 = 生产成本
想要提供多少边际安全,就需要付出多少边际成本。现在 PoS 告诉我们,我们可以提供等量的安全,但是只需要 10% 甚至 1% 的成本,你不会觉得很奇怪吗?为什么 PoS 这么容易就打破了经济规律?
一种情况是,同等安全程度的PoS需要的实际成本是一样的,只是一部分被隐藏起来了。以 DPOS 为例,如果你想要做 Validator,就需要通过某些方法搜集足够多的票投给自己,进入前 X 个 Validator 的列表才行。搜集足够多的票的成本是多少呢?这个成本对于不同的人/机构是一样的吗?如果不一样,这是一件好事还是坏事呢?这个成本是一个公开信息吗?如果不是一个公开信息,这是一件好事还是坏事呢?
我很喜欢一句话:
Financial institutions make people feel safe by hiding risk behind
layers of complexity. Crypto brings risk front and center and brags
about it on the internet.
而把成本以最清楚的方式公开在所有人面前,正是 PoW 的特点。
PoS 不是真正的 Permissionless
还有一种情况是,PoS 没有创造一个完全竞争市场。
在 PoS 中,未来的共识群体是由今天的共识群体决定的。任何新的节点想要参与共识都需要通过至少一个交易来实现(e.g. 抵押,投票,etc.),而这个交易是否被处理是由今天的共识群体决定,他们可以处理这个交易,也可以不处理这个交易,如果不处理这个交易,新的节点永远都无法参与共识。同时,「不处理交易」是容易伪装而难于惩罚的行为,我还没有看到能在共识协议中解决这个问题的方案。PoS 往往是根据 Stake 的权重来分配出块比例(和节点数量没关系),考虑到大部分系统中 stake 的集中程度,这是一个非常实际的问题。
PoW 是彻底的 Permissionless。无论什么时候,只要你愿意,都可以买矿机和电力加入出块者的行列,不需要今天的矿工给你任何形式的许可。你也许会说,我还是需要购买矿机和电力呀,这是不是一种形式的许可呢?是的,从更低一层来说,这也是一种许可。但遗憾的是,在所有的 Proof of XXX 中,这已经是最去中心化的许可形式了,毕竟矿机生产和电力资源的去中心化程度远高于各种 Tokens。我们总是应该追求尽可能的去中心化,否则用回中心化系统就好了。
或许又有人问:如果设计一种不需要向链上发送任何交易,只要 Token 放在那里就可以参与共识的 PoS,不是就解决了你说的问题吗?
这会带来两个问题:
- 如果 Token 放在那儿就能参与共识,意味着用户对参与共识没有任何承诺,不参与共识也没有任何成本和惩罚(用户可能根本都没上线),这样的共识是很难设计的;
- 会有 Nothing at Stake 的问题,这里不再多言。
Layer 1 必须用 PoW
Layer 1 是加密经济的基础,承担 Layer 1 角色的区块链必须是一个无需许可的网络,因为 Layer 1 必须是全球共享的、中立的设施,就像互联网,而”需要许可“则意味着它是受到某一群人控制的,与这个目标是根本冲突的。从上面的分析我们可以得出一个结论,如果我们希望 Layer 1 尽可能的去中心化和安全,Layer 1 就只有PoW 一个选项。PoS 不是不能用,只是不适合 Layer 1。
更多讨论
这两天在「橙皮书」的微信群里面产生了 PoW 和 PoS 的大讨论,甚是精彩,从讨论中我看到了许多有价值的观点。
由于微信群本身是一个非常不适合讨论的工具,讨论到后来很多回复被忽略,很多问题被反复提出来车轱辘说,效率实在太低,因此我在这里将讨论中提出的问题整理出来,统一回复一次,避免重复劳动。
A:POS 大户坐着获得的资本利得,是小散无法逾越的鸿沟,且无法约束他的权利。
B:这个问题是社会正常现象吧,有钱的人挣钱本身就是比平民容易,他投入这么多钱收入却比别人少,那才是不公平啊,现在是大家获得的比例是一样的,大户投入的钱多,就是会获得更多的回报
这是一个 PoW 和 PoS 讨论中常见的对话。A 提出了两个问题:
- (公平性问题)PoS 大户坐着获利,普通人没有;
- (无法制约)PoS 大户的权利无法约束。B 回答了 1。
对于问题 1, 我同意 B 的看法。投入多回报多是合理的,无论是 PoW 还是 PoS 都是这样, 区块链是帮助实现过程公平而不是结果公平的工具。在区块链里面我们依然会看到马太效应。试图用区块链去解决结果公平的后果是区块链治理的内涵无限扩大,将本该由协议解决的各种问题(后面会看到)统统推给投票去解决。
然而无论是历史还是理论早就告诉我们,世界上并没有完美的群体选择制度。区块链是一个能够记录数据,保证数据不被篡改,为所有人提供数据的工具,通过这样一个工具帮助我们更好的实现过程公平,已经是非常非常大的进步了。
问题 2,是一个在讨论中被忽略的关键问题。投入资源换取回报天经地义,但前提是你想投入就能投入吗?举个例子,一个明星创业团队融资,是不是任何 VC 想投就能投进去呢?PoW 具有非常好的开放性,使得后来的共识参与者总是可以加入共识群体,而 PoS 不具有这样的开放性。引用这里的讨论:
在 PoS 中,未来的共识群体是由今天的共识群体决定的。任何新的节点想要参与共识都需要通过至少一个交易来实现(e.g.抵押,投票,etc.),而这个交易是否被处理是由今天的共识群体决定,他们可以处理这个交易,也可以不处理这个交易, 如果不处理这个交易,新的节点永远都无法参与共识。
同时,「不处理交易」是容易伪装而难于惩罚的行为,我还没有看到能在共识协议中解决这个问题的方案。PoS 往往是根据 Stake
的权重来分配出块比例(和节点数量没关系),考虑到大部分系统中 Stake 的集中程度,这是一个非常实际的问题。PoW 是彻底的 Permissionless。无论什么时候,只要你愿意,都可以买矿机和电力加入出块者的行列,不需要今天的矿工给你任何形式的许可。你也许会说,我还是需要购买矿机和电力呀,这是不是一种形式的许可呢?
是的,从更低一层来说,这也是一种许可。但遗憾的是,在所有的 Proof of XXX
中,这已经是最去中心化的许可形式了,毕竟矿机生产和电力资源的去中心化程度远高于各种Tokens(的分散程度)。我们总是应该追求尽可能的去中心化,否则用回中心化系统就好了。
「是否能够投入」本身可以看作一种 Option,有非常高的价值。PoW 能有这样的性质,是因为工作量证明的计算是一种不依赖历史的计算,无论你在任何时间点购买算力加入计算,你都和其他矿工在同一个起跑线上,这是一个非常独特的、反直觉的性质,正是这个性质使得后来者总是能打破了早期参与者的优势。
PoS 不同,因为 Stake 是系统中内生的资产,资产的所有权是由系统历史决定的,交易顺序是由系统历史决定的,因此无论是需要抵押 Token 加入的 PoS,还是只需要持有 Token 就可以参与的 PoS,其 Validator 集合都是这个系统自身的历史决定,PoS 和 PoW 在「参与共识是否需要依赖历史」上是截然不同的。我们很容易能看出,这是一个本质不同,无论什么样的上层设计都解决不了这一点。
因此 PoW 和 PoS 的设计,从根本上是两种不同的思路,体现两种不同的理念:
- (PoS)系统应该让先发者获得天然的优势
- (PoW)系统不应该让先发者获得天然的优势
注意主语是「系统」,共识参与者在系统外的优势不是任何协议设计可以解决的。如果你认为1是对的,自然应该支持 PoS,反之你应该会更赞同 PoW。CKB 在设计中选择 PoW,是因为 CKB 的设计目标是 Layer 1,一个全世界共用的基础设施,我们希望它可以长久而且中立的运行,要做到这一点,系统不应该让先发者(包括系统设计者自己)获得天然的优势。
A:PoS 买币 Staking 不就是投入了吗?
确实是投入,但是这里的「投入获得回报」中的「回报」已经变了。对于投入获得的回报我们需要分开来看,一种回报是 Token 收益,最近的 PoS 基本都支持 Delegate,所以基本上所有人都有这个 Option。另一种是参与共识的权利,根据上面的回答,它可以被现有的 Validator 垄断,大部分人没有 Option。权利有很多种,分红只是其中一种,而且不是关键的那一种。
那么共识的权利为什么重要,它有什么用呢?它意味着你可以对交易排序,而交易排序决定了链上众筹时你的交易能不能及时上链,在 DEX 里面交易时你的订单能不能及时成交,等等等等。在 PoS 的系统上做 DeFi?你需要认真考虑一下 Validator 本身是做什么的,是否和你的发送的交易有利益相关?
我们知道,DeFi 的交易很可能是价值含量非常高的交易,e.g. DEX 里面一个巨大的买单,这时候 Validator 如果安排一个插队的交易怎么办?仅仅是交易顺序的不同就可以造成巨大的获利,何况共识节点能做的远大于此?
聪明的你一定会想到:「那 PoW 的矿工 / 矿池不是一样有这样的问题吗?」没错,PoW 的矿工一样有这样的权利,但 PoW 有两个优点可以削弱这个问题:
1、出块节点和生态中的关键用户是解耦的。生态中的关键用户,指的是交易所、钱包等围绕区块链提供服务的服务商,它们为大量的用户提供优质的服务,聚集了大量的用户和交易。
在 PoS 中,由于拥有大量用户和交易,Stake 会自然的往生态中的关键用户集中,形成天然的 Stake Pool,因此关键用户在业务上的优势可以转化成在共识和治理上的优势(在某些链里面已经体现的非常明显了),使得先行者的优势更加强化。
在 PoW 中,矿工群体和交易所 / 钱包是独立的,他们有不同的专业分工,通过不同的专业知识,不同的方式获取回报,关键用户不能将自己的业务优势转化为协议中的优势,矿工也没办法将自己在协议中的优势转化为上层业务的优势。在 PoW 中,开发者、用户和共识节点之间可以形成制衡。
2、PoW 的共识是开放的(见上文),充满了激烈的竞争。也许一个矿池 / 矿工可以在短时间内做到这一点,但由于新的矿工总是可以自由加入,想要长久的做到这一点是非常困难的,激烈竞争将会造就一个越来越公平的充分竞争的市场,这需要时间(30年?Maybe)。
反过来,在 PoS 中,由于天然的先行者的优势,以及业务优势和共识优势的绑定,先行者的优势只会越来越大,竞争将逐渐消失,最后形成垄断或寡头。在基础设施级的协议里面,我们应该尽可能的去避免垄断。
区块链本身是一个大的排队机,决定排序的权利是这个系统中最关键的权利。
A:(Bitcoin)一小时 51 攻击的成本区区 44.3 万美金……
A 想要表达的是,Bitcoin 并不安全,因为只要 44.3 万美金就能攻击它了,然后 PoS 的 Token 是有限的,没有攻击者可以从市场上购买到足够多的 Stake 来攻击。
这个观点忽略了一个问题:在某一时刻,地球上的算力同样是有上限的。如果一条 PoW 的链只有 10% 的 SHA256 算力,这样算是没有问题的。但是如果比特币已经集中了 90%(估计值)的 SHA256 算力,你从哪里去获得另外 90% 的 SHA256 算力呢?量变会引起质变,算力地位的变化会影响安全性。
不安全的不是 PoW,是没有获得足够算力的 PoW 链。使用 PoW 的区块链都会遇到比使用 PoS 的区块链更大的起步问题,然而正是这样真实而残酷的考验才能证明区块链的安全。不然,我也跑一条 PoS 链,99% 的 Token 都归我自己,1% 在市场上想炒多高炒多高,安全性岂不是分分钟超过 Bitcoin?Bitcoin 已经运行 10 年了,上面承载的价值这么多,为什么攻击没发生呢?相反,某些链运行了不到一年,上面存了价值区区几十万元的智能合约被偷了无数次……理论需要不断用事实修正,当理论和事实不符的时候,一定是理论错了。
同样是有上限,在 PoW 链中参与共识所需要的资源上限是随着时间变化的,由科技的进步、人类的进取心和激烈的竞争不断推动前进,所需要的自然资源的获取是完全去中心化的;而 PoS 链中所需要的资源上限是协议规定好的,增发的 Token 全部进入现有 Validator 的手中,再通过 Validator 在市场上的售卖或是 Staking Pool 的分红分发出去,会不会有些似曾相识?
A:这两者抽象到最后都是资本,PoW 是以资本开支和 Opex 计算资本成本;PoS 是以抵押物市场价值计算机会成本。这两种成本都是不可逆的。
我不赞同这种逻辑,忽略中间过程直接捅到本质恰好忽略了关键。过程是关键,过程会产生摩擦,过程会产生损耗。即使都是资本,资本的流动性和产生垄断的速度也是有差异的,协议是否能从垄断中回复也是有差异的,见前文。
A:我不觉得 PoS 的持币者会一直不卖;
A:过度集中,谁会给生态贡献;
A:如果筹码 90% 在你手里,这个生态也就做不下去;
A:对你来说,高度集中持币是没有价值的;
A:你都垄断 90% 代币,没有人给你交租。
垄断也是可以建立生态的,腾讯、苹果都是例子。无论是历史还是经济学原理还是《从 0 到 1》都很清楚的告诉我们,垄断才能获取暴利。
同时,垄断存在不代表,你知道有垄断存在。Token 是世界上最具有流动性的资本,即使我拥有 90% 的 Token,我也会把它分散投入到 100 个 Staking Pool 里面去,而不会集中在一个 Staking Pool 里面。垄断者不会喜欢跳出来说「Hey,我垄断了这个系统!」。
A:潜在作恶垄断者会因为短期利益卖出 Token;
A:作恶就是为了短期利益;
A:即,潜在谋求短期利益垄断者会因为短期利益卖出 Token;
B:头部抵押者都被看的很清楚,解抵押了,或者提币去交易所了,本身会导致价格下跌,他还没砸呢,就已经反映了;
A:我也是这个意思,垄断者不作恶不也是安全的么
这里混淆了垄断和作恶的概念。作恶指的是显式的攻击,例如双花一笔交易,作恶是可以被观察到的,系统或者生态也可以作出相应的反制。 垄断是隐式的 ,垄断者不需要也不会攻击这个系统,但是它依然可以利用自己的共识权利获得更多的利益,正如前文说的,只要能操控交易排序,你就能操控一切。
操控交易排序是无法被发现的 。在 PoS 系统中,操控交易排序也意味着操控未来的 Validator 集合,意味着垄断地位可以轻易的维持,这是根据系统历史来保证系统安全的必然结果,这一点在 PoW 中是不存在的。
我们现在还没有找到一个方法可以在所有时间排除一切垄断的可能,但是 PoW 至少给了我们一个更长的时间维度上使得垄断难以存在的设计,我觉得这一点对于 Layer 1 至关重要。
A:第一点,PoS 链后来者为什么不能参与?买币比买矿机门槛低多了,PoS 里面长期存在垄断者这个结论我是不认同的,没有经济规模效应;第二点,攻击 PoS 的成本比较,收购 Stake 只是一方面,还有 Reputation 系统,PoS 里面节点是非常在意自己 Reputation 的,这个成本对节点是巨大的。
第一点问题中,垄断的问题上面已经有回答。关于门槛问题,我认为这是很多人甚至包括协议设计者常常犯的错误。区块链的首要目标是安全和去中心化,而门槛以至于一切易用性问题都不是区块链的目标。
在区块链协议里面讨论门槛问题就像是在说「你让普通人怎么去构造 TCP 请求包」一样,将不同层次的目标混为一谈。要降低门槛,提高易用性,我们可以在上层做很多工作,做钱包,做云挖矿,设计各种金融产品,为什么要在区块链协议里面考虑门槛的事情呢?
Nervos 追求分层的协议架构,也是因为看到了易用性问题和安全问题必须分开考虑,易用性 / 门槛和安全从本质上就存在矛盾,强行扭在一起只会让我们一无所获。未来区块链协议的直接参与者一定是专业用户,这些专业用户通过搭建(可信的)服务、降低使用门槛、提供易用性来获取生态中普通用户的支持和收益。
第二点,Reputation 是一个无法量化,区块链协议也无法判断的东西。将区块链的安全寄托在 Reputation 上,只会让区块链走回现有信任体系的老路。同时 Reputation 还有 无法转让 的特点,基于一个无法转让的事物建立安全模型,会不会又有些似曾相识?
A:其实这里面有很多隐含的假设,如果一个 PoS 链出现你说的一个 Cartel 控制 1/3 的 Token ,社区是可以通过硬分叉 Fork out cartel;我不觉得一个 PoW 链被 51% 算力控制的链,也面临同样严重的问题;另外我觉得节点隐藏最后长时间形成多数控制这种可能性是不大的。
将协议中解决不了的问题推给链外治理(注意在 Cartel 控制 1/3 Stake 并且产生足够大的威胁以至于社区想要 Fork 的时候,链上治理已经没有用了)和硬分叉,确实可以解决一切问题,但这应该是一种成本极大的最后手段,不应该成为随便使用的工具,区块链的协议应该尽可能的避免陷入这个场景。
使用链外治理和硬分叉等价于承认协议的不足,需要人来接手了。我赞同一个区块链生态最终是需要人来治理的,但是我认为人介入的频率越低越好,如果不追求这一点,为什么还需要区块链呢?只有降低人参与的频率,协作的自动化成本才能降低,协作所需要的信任基础才能减小。
「节点隐藏最后长时间形成多数控制这种可能性是不大的」——只要时间足够长,无论多小概率的时间都会发生。金融市场的黑天鹅告诉过我们无数次了,愿我们的记忆不只是 7 秒。
A:xxx 的筹码在不断分散;
A:xxx 的钱包地址从 ICO 1000 多个,不到一个月上万个。
根据 Top 100 的地址或者 Top 20 Staking Pool 的分散程度是无法证明 Token 是分散的。道理很简单,我们谈论的都是无需许可(Permissionless)的系统,地址代表的只是一个公私钥对而已,不代表一个身份。产生地址几乎是零成本的,存有 Stake 的地址数量无法代表持有这些 Stake 的是不同的用户。不要混淆地址和用户。
在 PoS 中,Validator 集合中的 Validator 数目是无关紧要的,并不能代表 Stake 分散。如前文所说,如果你有 99% 的 Stake ,你应该把它们分散到 100 个甚至 1000 个 Validator 上去。
PoW 中同样会有算力集中在大矿工手中的问题,但是由于 PoW 的开放性以及系统没有给后来者制造劣势(见上文),这样的集中只会是暂时的,算力将在激烈的竞争中不停的从一个人手中转移到另一个人手中。PoW 赞美竞争,PoW 是一个开放的系统,只有开放的系统才可能远离热力学的终局,保持长久的生机。
PoS 有其价值,也有其问题,因此无法适用所有场景。Layer 1 的区块链协议必须使用 PoW,只有使用 PoW 的 Layer 1 才能解决我们希望解决的问题,实现我们希望的未来。