中本聪和拜占庭将军问题

本文首次发表于克雷格·怀特博士(Dr. Craig Wright)的博客,https://craigwright.net/

在我推出比特币之前,我一直在讨论这个当时仍在拟议中的系统将如何运作。[1]

很多人没有读我的白皮书,就认为比特币是一个共识投票系统,认为在这个系统里谁都可以投一票。而白皮书里则是这样说的:

“如果规定一个IP地址只能投一票,那么任何能够分配许多个IP的人都可能会占据多数票,从而可以操控这个系统,左右投票的结果。而工作量证明(POW)的本质是用CPU来投票。”

这并不是说“一台计算机一票”,因为一个CPU并不代表一台计算机。CPU并不代表在网络上作为用户运行的节点。这种混淆源于对拜占庭将军问题从根本上的误解。

比特币并没有给网络上的每个“用户节点”分配一张选票。比特币节点实质上是“将军”。将军们组成一小群人,他们很容易被发现,他们的行为也很容易被归因。将军不是士兵。网络中的每一个将军,都可能有数百万个士兵。换句话说,网络上的每个节点,都可能有数百万个用户。成为比特币网络上的一个节点的唯一方法是解出区块谜题(获得出块奖励),而且还不能只是试图解出区块的谜题,节点需要积极地解出区块的谜题。如果你是树莓派用户,并且你未曾解出任何一个区块谜题,那么你就不是比特币网络上的节点。比特币和比特币的分支(BTC、BCH和其他系统)[2]都是通过最多10个矿工的行为来控制的,这些矿工就是节点。在一个矿工有多个入口和出口的情况下,这些出入口仍然作为单个节点存在。

所以,当一个矿工运行多个入口和出口时,这些出入口加起来也仅仅是一个节点。我在早些年解释过这个问题:

当前系统中每个用户都是一个网络节点,这种方案并不适用于大规模网络。这就像每个Usenet(一种早期的分布式互联网交流系统)用户运行他们自己的NNTP(网络新闻传输协议,英文全称:Network News Transport Protocol)服务器。这样的设计可以让用户仅仅是用户。运行一个节点的负担越重,节点数就越少。为数不多的节点将会是那些大型服务器集群,而剩下的将会是只做数据处理而不产生区块的客户端节点。[3]

为了确保我所说的不会产生歧义,请注意,服务器集群的创建是为了向网络提供服务。这样一来,对于一组商业化节点,如果它们可以具有供给内部分布式节点结构的出入口,甚至它们可以分布在在全球各处,这样一组商业化节点为某家公司所创建并拥有,并会被视为一个单独的节点。最终,它们将成为世界各地银行和商业活动未来的运算设施。全球可能只有100个矿工,也即100个节点,但他们却可能拥有数百万台机器:

在网络结构的发展均衡且稳定之后,许多节点将会是服务器集群,其中一个或两个网络节点通过局域网(LAN)为该集群的其余部分(节点)提供服务。[4]

所以,矿工,或者说是节点,就成了“将军”。用户可以使用简化支付验证(SPV)来利用网络,并仍可以验证网络交易的真实有效性。它们只需要每个区块的标题。幸运的是,之前没人理解我说的话,让我能够自由地对这个扩容比特币的唯一途径,申请专利:

这种设计概述了一个不需要完整接入区块链数据的轻量级客户端。在此设计中,它被称为简化支付验证。轻量级客户端可以发送和接收事务,但不能生成区块。简化支付验证不需要信任某个节点来验证支付,而是可以自己来验证支付。[4]

将军是什么?

如果我们回头看看最初的中国将军问题,你会发现重要的不是计算机的数量,而是由一个(需要与其他实体协调的)单一实体所控制的计算机集群的算力的强弱。每个将军在共识和分配问题上都控制着一支军队。许多人理解上的逻辑错误在于将每个将军视为平等的,好像他们每个人都有一票。但是将军们不是简单的有一张票,每位将军都根据自己的军队规模投票。这并不是,比如说,需要五个将军中的三个来证明他们在这个场景和问题中是忠诚的,而是要集中兵力来证明每个将军的相对实力的情况。

例如,一个将军可以指挥10万个士兵,而另外四个将军每位可以指挥4万个士兵。在这里,所有军队加起来共有26万。如果拥有10万士兵的将军从其他将军中获得支持,这两个将军就形成了控制力量。这种情况下,两个将军可以比其他三个将军拥有更多的联合力量并获胜。我们看到的并不是仅仅基于将军人数的共识投票,这种机制不在于IP地址的累积或者让每个将军一人一票。如果情况是这样的话,三位将军反对有10万士兵的将军,即使是用较小的兵力,也可以获胜。这里的解决方案不是基于民主的投票,而是基于已证明的资源。

事实上,比特币,包括任何基于区块链的系统,都是反对大众投票的。在任何一个区块链系统中,都没有办法通过个人之间的共识来制定规则。比特币从未被设计成一种蛊惑人心的东西,它被设计成一种商业系统,在这个系统中,节点也即将军们是可见的,他们投入资源的数量和他们的效率水平可以被公开验证。

解决拜占庭将军问题的全部目的在于找到一套可靠的计算系统。这不是投票、民主,也不是通过共识创造规则。如果人们愿意阅读后维基时代的任何原始资料,他们会明白问题在于,我们要确保这套计算机系统,能够通过一种分布式的方式创建或部署,从而可以本身几就具备故障处理机制。比特币的发行,就是为了提高可靠性。没有一个分布式的共识可以来决定系统的规则。事实上,这一错误观念掩盖了一些不诚实开发者所宣扬的谎言,这些开发者试图片面地强调他们的区块链系统是去中心化的,来隐藏他们自己运营着一个合伙公司的事实。比特币Core团队(Bitcoin Core )和比特币ABC团队(Bitcoin ABC)(比特币与这两家公司都没有任何关系)等团体,在充当网络上的中央发行方的同时还是控制方,并以这种方式故意欺骗投资者。

我们想象拜占庭军队的几个师驻扎在一个敌对方的城市外,每个师由自己的将军指挥。将军们只能通过信使互相交流。在观察了敌人之后,他们必须决定一个共同的行动计划。然而,一些将军可能是叛徒,试图阻止忠诚的将军达成协议。[5]

当莱斯利·兰波特定义了我试图通过比特币解决的最初问题时,他没有解释每个将军拥有的军队的规模,因而简化了问题描述的场景。在分布式计算问题(也就是各种组件作用于分布在多个节点上的这一问题)中,每个节点是不是等同的这一点并不重要。同样,在拜占庭将军的问题上,每个将军在军队中可能没有同样规模的师。兰波特假定每个将军指挥同等数量的军队,从而简化了问题。这是拜占庭将军问题的一个特殊版本,解决起来要简单得多。而有了比特币,我们就能应对复杂版的拜占庭将军问题;我们甚至不知道每个将军辖下的部队有多少士兵,也无从知道这些部队的实力如何。要解决这样一个问题,我们需要用到博弈论的方式:我们可以先测试每个将军的能力和他们控制的师的实力。

然而,每个将军都可以谎报自己的实力。

在分布式计算问题中,可靠的计算解决方案不是关于系统的数量,而是每个系统单独的能力。该场景不是基于一台计算机一个CPU,而是每台计算机会有不同数量的CPU(译者注:计算能力)。

莱斯利·兰波特(Leslie Lamport)没能理解博弈论信号系统提供了解决方案。比特币挖掘实际上类似于孔雀的尾巴。资源越多,尾巴越长,每个将军在活着的时候可以消耗的时间越多,他们就越健康。兰波特[5]定义的投票不是个体的投票,而是考量组件的有效性。当莱斯利·兰波特在1982年发表他的论文时,大多数分布式的可靠系统将会使用相同或相似的芯片。人们没有预料到分布式计算问题会发展到今天互联网上存在的规模,兰波特也从未尝试去解决这样一个拜占庭将军的更复杂的版本,而这正是我要继续通过比特币去解决的。

工作量证明(POW)不是通过同意的人数来进行证明的。相反得,它反映了消耗的总计算量:

两个小时后,一个约定的攻击时间应该通过一连串的12个工作量证明进行哈希值的计算。每一个将军,仅仅通过验证工作量证明链(proof-of-work chain,)的难度,就可以估计出每小时在它上面消耗了多少并行的CPU功率,并能了解到必须要让大多数计算机在规定的时间内产生这么多的工作量证明。每个将军都要算出来结果,因为工作量证明就是他们努力工作的证明。如果工作量证明链显示的CPU算力足以破解密码,他们就可以在约定的时间安全地进行攻击。[1]

工作量证明链是为了确保全球分布式数据库之间的同步而开发的。节点(矿工)之间的同步允许同时解决“全局视图问题”,而用户则需要使用简化支付验证(SPV)。

在我通过Cryptography Mailing List(加密邮件列表)[1]发布的信息中,我没有把这个问题描述成兰波特的简化版本(每个将军都有同样规模的军队)。我说过需要多数的CPU算力来获胜,这并不代表需要同等数量的将军。再强调一遍,需要的是(比特币网络中)多数的CPU算力。在比特币系统中,节点是将军,或者说是矿工。用户不是比特币网络上的节点,也不会创建经过验证的块。 在比特币货币系统中,用户验证矿工行为时不需要有两个步骤,有些人可能会错误地解读这一点:

没有共识方法的情况下,“非挖掘节点”是没有发言权的。不管你喜不喜欢;比特币,或者任何一种基于区块链的系统都不会通过共识来创建规则,它只允许由出块的节点来进行投票,这些负责出块的节点在比特币系统中的地位举足轻重。

注释:
[1] See: https://www.metzdowd.com/pipermail/cryptography/2008-November/014849.html (accessed 20 March, 2020).
[2] Note that Bitcoin does not ‘fork’ into alternative systems. The BTC and BCH systems are passing off as Bitcoin in order to defraud investors. The only version of Bitcoin is BSV, which was launched in 2009.
[3] See: https://bitcointalk.org/index.php?topic=532.msg6306#msg6306 (accessed 20 March, 2020).
[4] See: https://bitcointalk.org/index.php?topic=286.msg2947#msg2947 (accessed 20 March, 2020).
[5] See: http://lamport.azurewebsites.net/pubs/byz.pdf (accessed 20 March, 2020).

202024日的“创世”协议升级是比特币历史上的一大里程碑,将见证BSV最大程度地回归到中本聪原先设想的协议。请访问“创世”硬分叉页面以了解更多信息。

要直接在您的收件箱接获CoinGeek.com最新消息,CoinGeek会议特别优惠以及其他内部信息,请加入我们的邮件列表