第五节:通过工作量证明达成机器共识

Section IV

第四节:加密货币网络中的人类共识


比特币是如何协调不同人类志愿者群体的工作的。

“[To attract a large, engaged volunteer base], you must start off with something that people are passionate about. It’s surprising that it’s a piece of software.... I never thought I’d see this kind of enthusiasm about a piece of software, but it’s there. It turns out that when you look at the web, it’s a billion people online all looking through this window that you made, and they’re going to have opinions about it.”

—Asa Dotzler, Mozilla’s Director of Community Development, re: Firefox, 2009[155]

到目前为止,我们一直认为免费的开源软件是数字基础设施的合适媒介,因为其开发过程不鼓励虚假、单一、昂贵和仪式性的开发。这是通过黑客们在过去30年中开发出来且经过实践检验可行的软件制作方法来实现的。

在本节中,我们将讨论中本聪如何在现有的开放使分配治理模式的基础上进行创新,使其强大到足以管理货币系统的程度。

任何社会制度的根本挑战都在于,人们倾向于在有利可图的时候打破规则。与如今被法律和惯例所束缚的金融系统不同,比特币系统将人类制定的规则变成了一个软件网络。但是,该系统如何阻止人类工程师随着时间的推移改变系统规则使自己受益呢?

中本对这个问题的解决方案可以分为三个部分:

  1. 使所有参与者成为系统的“管理员”,而无中央控制机构的参与。
  2. 要求大多数或多数参与者同意任何必要的规则更改。
  3. 提高串通改变规则的成本

这些解决方案在理论上是很好的,但重要的是要记住,中本聪是试图通过使用软件系统对人类参与者实施这些规则。在比特币发布之前,这种做法存在两个具体的未解决的工程挑战

  1. 一个包含许多不同计算机的系统如何在不使用中央协调计算机的情况下维护交易数据库?(在这样的系统中,任何能够访问中央协调计算机的人都可以为了自己的利益而更改系统规则。)
  2. 所有管理员如何同意数据库实际上没有被更改?(在可以随意更改过去交易的系统中,有关交易处理的规则会变得无关紧要。)

为了回答这些问题,我们需要探索网络中的人和机器如何就共同的规则和历史达成一致。本节将重点介绍人类如何在系统内组织成三类不同的角色;下一节将重点介绍如何使用机器网络来执行参与者的规则和行为。

比特币之前的开创性工作

具有上述属性的金融体系并不是一个新概念。自从Tim May在1992年提出“加密无政府主义”的概念以来,密码朋克们一直在尝试将他们的数字货币系统打造成一个可以防止欺骗或伪造的私人、匿名微观经济-即使在没有任何人对参与者进行监督的情况下.

比特币不是第一次数字货币的尝试。事实上,这个想法是由David Chaum在1983年首次提出的。在Chaum的模型中,中央服务器可以阻止双重支出,但这种方法是有问题的:

需要中央服务器成为了数字现金的致命弱点。虽然可以通过将中央服务器的签名替换为多个签名者的阈值签名来发布这一单一故障点,但是对于可审计性而言,签名者必须是独特的且可识别的。这仍会使系统容易失效,因为每个签名者都可能一个接一个地失效或被导致失效。[155]

Digicash是另一个由于其中央系统的监管要求而失败的数字货币的例子;很明显,监管系统所有者的必要性大大削弱了将货币系统数字化可带来的效率提高。[156]

受加密无政府主义的影响,密码朋克 Wei Dei在1998年提出了他的去中心化数字货币方案“B-money”。“我为Tim May所描述的密码朋克主义着迷,”他在他的文章的引言中写道:[157]

与其他传统上与“无政府之一”一词相关联的社区不同,在加密无政府主义状态下,政府不是被暂时摧毁,而是被永久被禁止,且永久不必要。这是一个暴力威胁毫无作用的社区,因为暴力是不可能的,之所以暴力是不可能的,是因为无法将其参与者与其真实姓名或实际位置联系在一起。

Dai的理念是基于计算机科学的最新发展,这些发展表明这种数字货币系统可能是可行的。

数字货币先驱

21世纪初以来,一系列新技术的发展使得Wei Dai的 B-Money概念成为可能。[158]Scott Stornetta和Stuart Haber在1990年提出了一种称为“链式时间戳”的方法,用来建立一个可用于对文档进行公证和打时间戳,防止追溯性篡改的可信数字签名链。[159]1997年,Adam Back发明了一种针对P2P网络的拒绝服务保护hashcash,使得系统参与者很难串通更改过去的交易。[160]

不过,参与者仍可能会串通以其他方式违反规则,例如伪造货币。2004年,Hal Finney创建了第一个使用“可重复使用的工作量证明”系统,其中“铸造”货币的代码被发布在安全的中央计算机上,而用户可以使用远程认证来证明实际执行的计算周期。2005年,NickSzabo提出了“分布式所有权登记”的概念,以取代安全的中心化计算机。[161]

2009年初,中本聪发布了第一个点对点的电子现金系统,其中中央服务器的权威性签名被分布式的“工作证明”系统所取代。[162]中本聪在比特币发布后写道:“比特币是1998年Wei Dai提出的 b-money提案以及Nick Szabo提出的Bitgold提案的实施。”

中本聪所引用的这些基本思想可能借鉴了当代有关货币市场的经济概念。1977年,在新奥尔良举行的黄金与货币会议上,经济学家Friedrich Hayek说道:[164]

“政府对发行货币的垄断不仅让我们失去了优良货币,而且也剥夺走了我们唯一可以发现什么是优良货币的方法。我们甚至不知道我们想要什么样的品质,因为在我们使用硬币和其他货币的两千年中,我们从未被允许过进行实验,我们从未有机会去发现哪种货币是最好的。”

1984年的这一评论也被广泛认为来自于Hayek:[165]

我不相信在我们把优良货币从政府手中夺走之前,我们还能拥有优良货币。我们不能粗暴地把它从政府手中夺走,我们所能做的就是通过一些狡猾的迂回方式引入一些他们无法阻止的东西。

网络上有许多精心编写的关于“比特币的工作原理”的文章。 因此,以下段落不再对其进行赘述,而是仅解释理解该系统的设计原理所需的内容,以阐明其目的。具体来说, 我们将探索使比特币的贡献者能够在没有任何正式关联的情况下共同工作的的激励机制。.

比特币系统的核心概念是“挖矿”,这一点将在下一节中作更深入的解释。在本节中,挖矿可以被暂时理解为处理包含交易信息的区块并将其添加到比特币分类账(也称为“区块链”)的过程。“交易”可以被理解为人们互相发送比特币;还有一类交易会向矿工支付处理区块的报酬。比特币交易的验证和结算过程与传统支付系统不同。

用户如何就哪个网络是 "比特币" 达成一致

许多用户只能通过手机上的轻量“钱包”程序体验比特币交易。钱包对用户比较友好,因为它隐藏了底层网络的许多复杂性。钱包应用的主要功能是发送和接收交易。其次,钱包应用会给您显示交易历史以及您所拥有的比特币的当前余额。这些信息可以直接从比特币网络中获取,因为网络具有记录之前发生的交易的能力,即状态的计算系统。

许多用户只能通过手机上的轻量“钱包”程序体验比特币交易。钱包对用户比较友好,因为它隐藏了底层网络的许多复杂性。钱包应用的主要功能是发送和接收交易。其次,钱包应用会给您显示交易历史以及您所拥有的比特币的当前余额。这些信息可以直接从比特币网络中获取,因为网络具有记录之前发生的交易的能力,即状态的计算系统。

这些机器可以确保它们连接到了同一个网络,因为它们使用的是网络协议,或是一组内置于比特币软件中的机器指令。人们常说比特币“没有连接到万维网”,因为它不像Web浏览器那样使用HTTP协议进行通信。

虽然比特币不像Facebook或Twitter那样是一个“网络应用程序”,但它确实使用了与万维网相同的底层互联网基础设施。“互联网协议套件”是1973年至1974年间由美国国防部高级研究计划局资助的斯坦福大学项目。1982年,美国国防部制定了一项军事标准,美国电话电报公司(AT&T)和IBM等公司于1984年开始使用该标准。[167][168]

image31

图 5: 互联网协议套件的各个层。
(来自: Wikimedia)

在应用层中,第三方进程可以创建用户数据,并将这些数据发送给位于相同或不同主机上的其他应用程序。应用层使用了底层的服务

在这个应用层中,不仅存在万维网,还存在着SMTP电子邮件协议、用于文件传输的FTP、用于与其他机器直接进行安全连接的SSH,以及各种其他协议-包括比特币和其他加密货币网络。我们说过,像比特币这样的免费软件可以被任何人复制和重新部署,那么不同的版本又如何能够不互相干扰呢?

在实践中,他们在某种程度上的确会互相感受。比特币软件会自动尝试连接到比特币区块链,但是更改配置文件和修改比特币软件可能允许您连接到另一个人们利用所谓的比特币分叉创建的类似比特币的网络。其中一些分叉可能与使用了与比特币相似的名称,并声称要改进比特币,但市场往往不太看重这些分叉;山寨币将在第七节进行更详细的讨论。

image32

图6:比特币在互联网协议套件中的位置。

对于传统的借记卡或信用卡来说,您通过互联网进行的任何金融活动都被记录在您的“账户”中,存储在发卡机构的中央计算机或云服务器上。比特币上没有账户。相反,资金(如比特币)由一对密钥所控制。任何人都可以使用比特币钱包生成一对密钥,不需要个人信息。每个人都可以持有任意多个密钥对,而一组人可以用“多签名”钱包共享资金。

正如我们下文所述,钱包用户只是比特币网络中的一组利益相关者。面向技术用户的软件也有几种形式;它们可以直接用终端(在MacOS或Linux中)从比特币代码库中下载。[169]

在其计算机上运行和存储网络的完整交易记录的用户会看到它大约占用了200GB。运行比特币软件并在计算机上存储整个区块链的副本被称为运行全节点。正如我们之后会看到的那样,全节点运营者对比特币网络非常重要,虽然他们没有在“挖矿”

一旦比特币软件被安装到您的手机或电脑上,您就可以向世界上其他任何人发送或从其他任何人处接收任意数量的比特币。发送比特币需要支付少量的费用,这些费用是付给矿工的报酬

接下来,我们将讨论当用户向比特币网络发送交易时会发生什么。

系统如何知道谁是谁

在比特币网络上发送交易会修改分类账(即区块链)的状态。为了持有比特币并进行交易,用户必须先生成一对密钥,也称为密钥对。密钥被用于在不加密数据的情况下对数据进行数字签名。

如果交易符合以下几个条件,那么这笔交易将会被记录在区块链的状态转换中:必须为支付的比 特币提供有效的数字签名,并且密钥对必须控制足够的比特币余额来完成交易。以下是对比特币交易的完整剖析:

image13

图7:比特币交易流程。交易ID显示为黄色。元数据包含在蓝色括号中。以橙色表示的交易输入由发送交易的帐户拥有,并用于为交易提供资金。绿色输出表示输出:比特币被转移到另一个账户。如果可用输出超过了交易量,那么“更改”将以未支付输出的形式返回给发送方。这些未支付的交易输出也被称为“utxos”。
(来源:Venzen at Mail.bihthai.net)

总分类帐在会计上已经使用了1000年。网络上也有许多关于复式记账和簿记平衡方面的入门知识。[170][171]比特币使用的方法则与会计上的“三式记账法”类似:给定交易中的两个交易对手在其分类账中都保存了一份交易记录,并且网络中也有每个人的交易记录的副本。每一笔比特币交易的历史都被冗余地存储在每个全节点上。这就是您在存储区块链时下载的200GB数据。

比特币的地址使用了公钥加密,即其中一个密钥是私有的,另一个则用作公共标识符。这种加密方法也被称为非对称加密,因为“密钥对”中的两个密钥具有不同的功能。在比特币中,密钥对是使用ECDSA算法生成的。

image22

图8:用户Alice对消息进行签名并将其发送给Bob的流程图。Bob可以使用Alice之前提供的公钥来验证其发送者。许多pgp用户都会将他们的公钥附到所有电子邮件通信中,或者将其列在个人主页上。