系统的设计,是一件庞大、繁琐的的事情,Vitalik就 从区块链“去中心
化”这一概念入手,向我们揭示了设计一个完善的去中心化系统究竟有多复
杂,它需要对抗多少阻力,扫除多少障碍。
编译完这篇文章,我有点明白为什么Vitalik Buterin 这个94年出生的小伙子能
在20岁的时候创办以太坊了。
我不敢说 Vitalik 的认识都是正确的,但我的确从这篇文章中感受到了他的某
种过人之处,在思维方式上,Vitalik 表现得和许多年轻人并不一样。
“去中心化”是一个普通人大都会选择性略过的概念,人们认为自己能够完全理
解这四个字的含义,但 Vitalik 选择揪住这个词,试图给它一个更标准化的定
义。
我很庆幸 Vitalik 把他的这些思考表达了出来,因为不论最终的观点正确与
否,对这种基本概念的回溯和讨论,都是目前这个充斥各种区块链新奇概念的语
境下所稀缺的内容。
系统的设计,从来都是一件庞大而又迷人的事情。小到一个社区、一家公司,大
到一座城市、一个国家,我们生活的世界被各种各样精密复杂的系统包围。
但这些庞大机器的内部,有时并不完善,甚至可以说很简陋。
区块链的信奉者认为:
关乎全球经济系统运行的铸币权掌握在脆弱而不可靠的人性里,它存在漏
洞,因此需要另一种去中心化的方式进行替代。
而 Vitalik 从“去中心化”这一概念入手,向我们揭示了设计一个完善的去中
心化系统究竟有多复杂,它需要对抗多少阻力,扫除多少障碍。
我们生活的世界非常复杂,越来越多的系统被封装成一个黑箱,外面的人很难看
到箱子内部的齿轮究竟是如何运转的。 Vitalik 借助去中心化这个概念的讨
论,让我们可以从中多少瞄到一眼。因此,如果你对区块链没有兴趣、但对复杂
系统的设计有不少好奇心,也可以读一读这篇文章。
本文为了便于读者理解,在编译时对部分内容进行了少量删改和调整。
“去中心化”或许是区块链被提到过的最高频的一个词了,但这个词的定义也是
最不清楚的。
想想这件事其实挺不可思议的:区块链消耗了计算机大量宝贵的哈希算力,正是
为了保证网络的去中心化,但当人们彼此在争论某个代币或者某个区块链网络究
竟好不好的时候,“去中心化”这个词却常常被拿来当枪使,简单粗暴的说一
句“你这个东西不是去中心化的”,就可以轻松结束一段争论。
那么,“去中心化”这个词到底是什么意思?
并没有多少人能真正说清楚。 事实上,也没有多少人有意识、或者愿意,去深
究这个词的真实含义。
大部分人在面对提问时,习惯举出下面这三张图来解释所谓的“去中心化”:
但很遗憾,上面这三张图作为一种常见的解释,基本是无效的。 它对我们理
解“去中心化”并没有本质上的帮助。
我们需要一种更底层的的方式,也需要一种更明确的判断标准,来定义「去中心
化」。因为只有理解了这个词的真实含义,我们才能更好的理解区块链。
在软件世界里,所谓的“去中心化”,实际上是可以分成三个维度进行讨论的。
这三个维度,也是判断一个东西是否是“去中心化”的三把尺子。
需要说明的是,这三把尺子,初看起来似乎缺一不可,但总体来说,它们彼此之
间相互独立:
1. 架构层: 在物理世界里,一个系统由多少台计算机组成?在这个系统运
行的过程中,可以忍受多少台计算机的崩溃而系统依然不受影响?
2. 政治层: 有多少个人或者组织,对组成系统的计算机拥有最终的控制
权?
3. 逻辑层: 从这个系统所设计的接口和数据结构来看,它更像一台完整的
单一设备,还是更像一个由无数单位组成的集群?——这个维度可能比较
抽象,不太好理解,我们可以用另一种比较简单的方式来做判断: 如果把
这个系统分成两半,两部分里同时包含生产者和消费者,那么这两部分能
继续作为独立单元完整地运行下去吗?
这三把尺子,一把用来测量架构层的系统设计、一把用来测量政治层的掌控权
力、一把用来测量逻辑层的所属形态。
把它们总结起来,用一张图表来表现可能会更清楚一点:
可以看到,图表里已经有一些代表例子了。需要说明的是,这些例子的分类和排
放暂时还比较粗糙,在逻辑上也许还有不少争议,不过我们还是可以尝试捋顺一
遍这些例子,这对帮助我们理解“为什么是这三个判断标准”有好处:
传统公司在政治层上是中心化的(每个公司都有一个CEO),在架构层上也是中
心化的(每个公司都有一个总部),在逻辑层上,仍然是中心化的(你没办法真
正把公司拆成两半)。
现代法律有两种体系:一个是大陆法,一个是普通法。大陆法依赖于一个中心化
的立法机构,在架构层上它是中心化的;对比普通法来看,普通法是由很多个法
官,他们作为个人,所做出的很多先例来构成的。
尽管现在许多法院享有有很大的自由权力,可以自己定法,因此大陆法在架构层
上也有一小部分的”去中心化“,但对比普通法这种由许多个法官个体组成的体
系,普通法的去中心化程度显然更高。当然,两者在逻辑层上都是中心化的(法
律就是法律)。
语言在逻辑层上是去中心化的。Alice 与 Bob 之间所讲的英语,和 Charlie 与
David 之间所讲的英语,可以不需要一致。
同时,没有任何一种语言的存在需要中心化的基础设施作支撑,英语的语法规
则,也不是由任何一个单一的个人创造的,也不受任何组织的控制(你可能会
说,世界英语最初是 Ludwig Zamenhof 发明的,但从现在来看,英语的沟通功
能,更像是一种不断自我进化的生活化语言,它是逐渐自我生长出来的)。
类似英语,BitTorrent 在逻辑层上也是去中心化的。内容分发网络(cdn)也是
这样,但它们都受某一家公司的独立控制。
区块链在政治层上是去中心化的(没有人或组织可以控制区块链),在架构层上
也是去中心化的(没有一个统一的服务器可以被攻击)。
但在逻辑层上,区块链是中心化的(每个区块链网络都存在自己的一个普遍性的
共识,同时系统的行为更像一台单独的计算机)。
好了,我们成功捋顺了一遍各种各样的事物究竟是不是去中心化的。
捋顺一遍后,你应该已经有了第一个发现:
在谈到区块链的优点时,很多人常常会提到“中央数据库”(或者叫公共账本)
所带来的好处。但区块链不是去中心化的吗,为什么还有“中央数据库”的概
念,这是不是矛盾了?
借助我们的三把尺子所提供的标准来看,很容易就明白了: “中央数据库”这
里的所谓中心化,其实是逻辑层的中心化。 在大多数情况下,逻辑层的中心化
代表了比较好的选择。
不过,也有不少人主张逻辑层也需要尽可能地去中心化,比如来自 IPFS 的
Juan Benet 就是这样认为的。他的理由是:逻辑层的去中心化系统,往往在网
络分区上更有生存能力。用说人话的方式来解释:就是“逻辑层的去中心化”在
连接性比较差的世界里(比如偏远地区),它的运行情况会比较好。
我们已经掌握了如何判断“去中心化”的方法。接下来的问题是,为什么去中心
化很重要?它的好处在哪?
去中心化有三个优点:
1. 容错性: 去中心化系统不太可能因为某一个局部的意外故障而停止工
作,因为它依赖于许多独立工作的组件,它的容错能力更强。
2. 抗攻击性: 对去中心化系统进行攻击破坏的成本相比中心化系统更高。
从经济效益上来说,这是抢劫一个房子和抢劫一片村庄的差别。
3. 抗勾结性: 去中心化系统的参与者们,很难相互勾结。而传统企业和政
府的领导层,往往会为了自身的利益,以损害客户、员工和公众利益的方
式,相互勾结。
我们试着把以上三点,更详细的逐一展开讲讲。
1.容错性
容错性的核心,其实就是“可以承受出现错误的能力,以此降低系统崩溃的概
率”。 一台计算机出现故障的概率,和十台计算机的其中五台同时出现故障的
概率,哪一个更大? 显然是前者。
这其实也是分散风险的一种方式,在现实生活中,这种容错能力已经得到了广泛
的应用,比如喷气发动机、备用发电机,以及医院、军事的基础设施、多样化金
融投资组合、计算机网络等等。
但是,去中心化的这种容错能力虽然很有效、也很重要,但它有时远不如一个简
单的数学模型来得有用。 原因就在于
�
:四个喷气发动机比起一
个喷气发动机来看确实更不容易出故障,但如果这四个喷气发动机都是同一个工
厂制造的呢?或者说,这四个喷气发动机都是被同一个不合格的员工制作的呢?
这就是共模故障。
那么,现在的区块链,能够抵御共模故障吗? 还真不一定。
不信的话看看下面这些例子:
一个区块链的所有节点都运行相同的客户端软件,而这个客户端软件
有一个BUG。
一个区块链的所有节点都运行相同的客户端软件,而这个客户端软件
的开发团队互相勾结,出现腐败。
提议升级区块链网络协议的研究团队,互相勾结,出现腐败。
在一个工作量证明(POW)的区块链中,70%的矿工都在同一个国
家,而这个国家的政府为了国家安全,决定接管所有矿场。
大部分挖矿硬件都由同一家公司生产,而这家公司被贿赂或者被威
胁,在挖矿硬件上开了一个后门,使得所有的挖矿硬件可以被随意关闭。
在一个权益证明(POS)的区块链中,70%的币由一个交易所持有。
很明显,为了保证去中心化的容错能力,以上这些问题都应该尽可能把它最小
化。
怎么最小化呢?
下面这些措施可能会有一些帮助:
尽可能保持多方竞争关系;
升级协议的技术和知识必须是民主化的,这样更多的人就可以共同参
与研究、讨论和批评一些明显不良的协议变化;
核心的开发和研究人员应该由多个公司或组织雇佣(或者,他们中的
许多人可以是志愿者);
挖矿算法应该以最低程度的中心化思路去设计;
理想情况下,我们使用权益证明的方法(POS)来摆脱硬件的中心化
风险(当然权益证明可能也会带来新的风险)。
值得注意的一点是:当我们着眼于比较初级的容错能力的时候,我们往往会去关
注架构层上的去中心化设计,但如果当你开始考虑一个系统更长远的升级和发展
时的容错性,那么政治层上的去中心化也很重要。
2.抗攻击性
现在,让我们来看看抗攻击性。
在纯经济模型中,去中心化其实并不重要。 如果你创建了一个“一旦发生51%
攻击,验证者就会损失5000万美元”的协议,那这个验证者是由一家公司还是由
100家公司控制并不重要。5000万美元是保证这个协议的经济安全的边际成本,
那么5000万美元就是5000万美元。
事实上,博弈论还会告诉我们:中心化系统甚至可以最大化这种经济安全边际成
本的概念(现有的区块链的交易选择模型也反映了这一观点,因为矿工/区块提
出者将交易打包到区块中,实际上正是一个非常迅速的轮换独裁的过程)。
但如果是在一个更丰富的经济模型中,特别是如果这个经济模型里存在胁迫的可
能性(或者说针对节点的目标 DOS 攻击),那么,去中心化就会变得非常重
要。
当一个人的生命安全受到威胁时,5000万美元对他而言就是身外之物,你可以很
容易抢走他的钱,但如果这5000万美元是十个人分散持有的,那么你必须威胁勒
索的人数,瞬间就飙到了10倍,而且这10倍的工作量,还要在同一时间里完成,
这对任何一个抢劫犯来说,都是噩梦。
不过有趣的一点是,在大部分情况下,我们所生活的这个世界,有一个特点
是: “攻击/防御”具有不对称性,攻击者往往更占优势。
比如,一幢花费1000万美元建造起来的大楼,可能10万美元的攻击成本就可以轻
松摧毁它。但这种攻击/防御的杠杆效应往往是次线性的:摧毁1000万美元的大
楼需要10万美元,100万美元的大楼则需要3万美元,再往下,更小型的大楼则需
要更高的比率。
等等,知道了以上这些东西,对我们了解区块链来说,有什么用吗? 当然有
用。这个道理至少可以让我们懂得区块链机制设计的三个关键点:
1. 相比工作量证明机制(POW),权益证明机制(POS)更安全。POW
需要挖矿的计算机,这些硬件很容易被检测、管理或攻击,而POS针对的
则是权益证明,也就是代币,而币相对计算机硬件而言更容易隐藏;
2. 开发区块链的团队,分布得越广泛(包括地理位置上的分布)就越有
利;
3. 在设计共识协议时,需要同时考虑经济模型和容错模型。
3.抗勾结性
最后,我们终于可以讨论以上三点中最复杂的一点了:抗勾结性。
抗勾结性这个词听起来有点怪,因为“勾结”这个词本身就挺难定义的。简单点
说,我们可以认为:“勾结”就是“我们所不喜欢的协调方式”。 在理想状态
下,我们希望每个人之间都能拥有完美的协调关系,但当某一部分人能够完美协
调、而另一部分人无法协调时,情况就会变得很危险。
比如,反垄断法就是一个例子。为了防止市场的参与者聚集起来,互相勾结、实
施垄断,损害市场消费者和社会的利益、以此获得超额利润,反垄断法就在市场
运行中故意设置了监管上的障碍。
另一个例子是在美国总统候选人和超级政治行动委员会之间的反积极协调规则:
超级政治行动委员会相当于一个独立的支持候选人的社团,主要用来帮助候选人
无限募集大选所需要的资金。为了防止它和候选人有勾结在一起,美国规定超级
政治行动委员会和被选举的政党不能有直接的联系,也就是一种反积极协调的规
则。
当然话说回来,这些规则在实践中中其实是很难执行的。
还有一个更小的例子是一些象棋比赛制定的规则,这些规则用来防止两名选手为
了提高各自的分数而频繁和对方进行比赛。
可以看到,这种“反勾结”的尝试,在现实世界的各种复杂系统里其实无处不
在。
而在区块链协议里,建立共识安全背后的数学原理和经济学原理,通常也依赖于
这种“反勾结”的设定。
“反勾结”就是尽可能避免节点之间相互产生协调,换句话说:它假设一个区块
链网络是由许多独立决策的节点组成的。
区块链的拥护者相信区块链更安全,因为区块链网络中的任何个体都不能任意去
改变协议本身的规则。但如果软件和协议的开发者都服务于同一家公司、同属于
同一个家族、都在同一个办公大楼上班,这种情况下其实是很难防范的。
要真正保证安全,最关键的一点是防止系统变成一个自私自利的集权垄断
体。 因此,如果一个区块链网络越松散,它们就越难相互勾结在一起,也就安
全。
但是,这里面其实揭示了一个根本性的矛盾。
很多社区(包括以太坊)之所以存在,是因为它们拥有一个强大的社区精神,在
执行、发布和激活硬分叉上拥有快速协调的优势。 我们需要思考的问题是:应
该如何去培育和改善这种良好的协调关系,同时,又要防范那些糟糕的协调关
系,防止它们不小心演变成“互相勾结” (比如,矿工们试图通过互相勾结,
反复进行51%的攻击,以此实行欺诈)。
要解决这个问题,可能需要做到以下三点:
1. 别试图减少勾结,要用协议的方式彻底消灭勾结。
2. 试着找到一个平衡点,这个平衡点可以提供足够的协调关系帮助协议更
好的发展,但同时又不足以演变成勾结关系、发动进攻。
3. 试着去区分清楚“好的协调关系”和“有害的协调关系”,然后想办法
让前者更容易,让后者更难。
其中的第一个方法,在以太坊的 Casper 机制的设计中,有很多地方都用到了这
种指导思想。但是,只有第一点本身是不够的,因为仅仅依靠经济学的方式并不
能解决去中心化的其他两类困扰。
第二个方法很难进行明确的设计,但它经常会自己意外产生。比如, 比特币的
核心开发人员一般说英语,而矿工一般说中文,这几乎可以被称作为一个“幸福
的意外”了,因为它在无意中创造了一种“两院制”的治理机制,一方面它让彼
此之间的勾结变得很困难,另一方面则减少了共模故障的风险 ——英文社区和
中文社区。
因为沟通困难,从某种程度上来说,他们更容易拥有各自的独立的思考,因此不
太可能同时犯相同的错误。
第三个方法则代表了一个社会学挑战,它需要做到的可能包括:
社会干预措施,即试图提升参与者对该区块链社区整体的忠诚度,以
替代或抑制市场各个参与者对彼此产生的直接的忠诚度的影响。
促进不同的的市场参与者在同样的语境下进行沟通,这样一来,不管
是验证者、开发者还是矿工,他们就不太会把自己归类为某一种阶层,这
样就能减少他们协调起来对抗其他阶层、保护自己阶层利益的可能性。
在设计协议时,尽量避免或者减少验证者和矿工彼此形成一对一
的“特殊关系”,或者是形成中心化的中继网络,以及其他类似的超级协
议机制。
关于协议应具备的基本属性,以及哪些事情不该做,或者哪些事情只
能在非常极端的情况下才能做,这些协议本身都应该规范得非常清晰、清
楚。
防止勾结、抗勾结性的去中心化,可能是目前最难实现的了。 要真的实现它,
一些权衡和取舍也是不可避免的。或许,最好的解决方案,可能是去重度依赖于
最能够保证去中心化程度的一个群体:也就是协议的用户。
网友评论