链客,专为开发者而生,有问必答!
当前,对于区块链,大部分人都存在些许在基本认知维度的误区,譬如直接将区块链等同于比特币、所有 ICO 都是骗局等,即使是对技术人而言,都还没搞清楚区块链的代码和算法,更遑论涉及到实际场景应用的实践。日前,国际计算机学会期刊 ACM Queue 发表论文,追本溯源,对比特币及其底层技术 —— 区块链的技术栈进行了系统的梳理和论证,由此发现,比特币的几乎所有技术组成部分都源于 20 世纪 80、90 年代的学术文献,如分布式账本和拜占庭协议,便可追溯到 20 多年前,这不是任何突破,只是学术文献中长期被遗忘的解决方案。ACM Queue 的文章中指出:“这不是为了削减中本聪的成就,而是指出他其实是站在巨人的肩膀上。实际上,通过跟踪比特币思想的起源,我们可以真正了解中本聪的伟大之处——将学术基础具体而复杂地有机组合。这有助于解释为什么比特币花了很长时间才能被发明。”
在此,区块链大本营对文章的核心,也就是比特币与区块链的技术组成进行了整理:
账本(Ledger)
如果您有一个安全的帐本,将其用于数字支付系统的过程很直接。例如,如果 Alice 通过 PayPal 向 Bob 支付 100 美元,那么 PayPal 从 Alice 的账户中扣除 100 美元,并向 Bob 的账户支付 100 美元。这也是传统银行业的原理,尽管银行之间没有单一账本、更加复杂。
账本是理解比特币的起点。账本记录系统中发生的所有交易,它向所有系统里的参与者开放和被其信任。比特币将此系统转换为货币。而在银行业务中,账户余额是可以从银行拿到的现金,一单位比特币代表什么?目前阶段,是假定交易具有固有价值。
如何在互联网这样参与者可能不相互信任的环境中建立账本呢?我们从简单的部分开始:数据结构的选择。几个理想属性:账本应该是不可变的,或者更确切地说,只能附加 —— 你只能添加新的交易而不能删除、修改或重新排序已有交易。还应该有一种方法可以随时获得账本状态的加密摘要(cryptographic digest)。摘要是一串短字符,可以避免存储整个账本,如果账本以任何方式被篡改,则生成的摘要也随之发生变化,因此通过摘要可以检测到篡改。这些属性之所以存在是因为与存储在单个计算机上的常规数据结构不同,账本是由相互不信任的参与者集合维护的全局数据结构。这与另一种分布式数字账本的方法形成对比,后者有许多参与者维护本地账本,由用户查询这套账本来解决冲突。
链接时间戳
比特币的账本数据结构大量借鉴了 Stuart Haber 和 Scott Stornetta 在 1990 年至 1997 年期间撰写的一系列论文(1991 年的文章中有另一位作者 Dave Bayer),中本聪自己在其比特币白皮书中如此表述。Haber 和 Stornetta 的研究探讨文档时间戳的问题 —— 他们旨在建立一个“数字公证”服务。对于专利、商业合同和其他文件,人们可能希望确定文件是在某个时间点而不是后来创建的。他们所指的“文档”概念非常普遍,可以是任何类型的数据。他们确实提到金融交易作为潜在应用,但并不是其重点。
在 Haber 和 Stornetta 研究的简化版中,文档是不断被创建和传播的。每个文档的创建者声明创建时间并签署文档、时间戳和先前传播的文档。这个先前的文档已经签署了自己的前身,所以这些文档形成一个长链,指向过去的时间。外部用户无法更改时间戳信息,因为其由创建者签名,而创建者如果不能更改整条链上后续信息也无法更改此条信息。因此如果链上单个项目有可信来源(比如另一个用户或专门的时间戳服务),那么到此为止的整个链路被锁定、不可变、时间上有序。再进一步,如果你认定系统拒绝不正确创建时间的文档,那么就可以确定文档至少与声称创建时间相同。无论如何,比特币仅借用 Haber 和 Stornetta 的数据结构,重新设计其安全属性,并附加了工作量证明(本文将具体阐述)。
在他们的后续论文中,Haber 和 Stornetta 引入了其他观点使数据结构更加有效和高效。首先,可以使用哈希而不是签名创建文档之间的链接;哈希比较简单,计算速度更快。这样的链接称为哈希指针。第二,单独卷绕文档的缺点是如果在大约相同的时间创建许多文档,那么它们可能是低效的,所以文档可以被分组成批或区块,每个区块中的文档具有基本上相同的时间戳。第三,在每个区块内,文档可以与哈希指针的二叉树链接在一起,称为默克尔树,而不是线性链。顺便说一下,Josh Benaloh 和 Michael de Mare 在 1991 年分别独立介绍了这三点,这发生在 Haber 和 Stornetta 发表第一篇论文之后很短的时间。
默克尔树(Merkle trees)
比特币基本上使用了 Haber 和 Stornetta 1991 和 1997 年的文献中的数据结构(中本聪可能不知道 Benaloh 和 de Mare 的文献)。当然,在比特币中,交易取代了文档。在每个区块的默克尔树中,叶节点是交易,每个内部节点基本上由两个指针组成。这个数据结构有两个重要的属性。首先,最新区块的哈希值作为摘要。对任何交易(叶节点)的更改将一路传到区块根以及所有后续区块根。因此,如果知道最新的哈希值,则可以从一个不受信任源下载账本的其余部分,并确认其尚未更改。一个类似的论证确定了数据结构的另一个重要属性——有人可以有效地向你证明特定交易被包含在账本中。该用户发送只需发送该交易区块上少量节点(这是默克尔树的点)以及每个后续区块的少量信息。这一能力对于性能和可扩展性是非常必要。
默克尔树以 Ralph Merkle 命名,他是非对称密码学的先驱,他在 1980 年的论文中提出了这个想法。他的预期应用是为数字证书的公共目录制作摘要。例如,当一个网站向您提供证书时,它也可以证明该证书出现在全局目录中。只要知道目录中证书的默克尔树的根哈希值,就可以有效地验证证明。这个想法从加密标准上来看是古老的,但其作用很大,这是最近实施的证书透明度系统的核心。2015 年的一篇文章提出了 CONIKS,它将这一思想应用于端到端加密电子邮件的公钥目录。全球状态部分的高效验证是以太坊账本提供的关键功能之一。
比特币可能是 Haber 和 Stornetta 数据结构中最知名的现实世界实例,但它不是第一个。至少有两家公司 ——Surety 从 90 年代中期开始,Guardtime 从 2007 年开始——提供文档时间戳服务。这两个服务中一个共同有趣之处是通过采取广告定期在报纸上发布默克尔根,Bayer、Haber 和 Stornetta 都提到。
拜占庭容错
对去中心化的互联网货币的要求当然比较严格。分布式账本不可避免地有分支,这意味着一些节点将认为区块 A 是最新的区块,而其他节点会认为区块 B 最新。这可能是由于对手试图中断账本的操作或仅仅因为网络延迟导致区块偶尔由不知道彼此区块的不同节点近乎同时生成。链接时间戳本身不足以解决分支,正如 Mike Just 在 1998 年所述。
一个不同的研究领域——容错分布式计算,已经研究了这个问题,虽然名称各不同,比如状态复制(state replication)。这个问题的解决方案是使一组节点能够以相同的顺序应用相同的状态转换, 通常精确的顺序并不重要,只需所有节点都一致。对于数字货币,要复制的状态是一组余额,交易是状态转换。图灵奖获得者 Leslie Lamport 在 1989 中提出的早期解决方案,包括 Paxos,考虑到通信渠道不可靠时以及少数节点可能会出现某些“现实”故障时的状态复制,如永久脱机或从第一次脱机后重新启动和发送过时的消息。随后有大量文献提出更多不利的条件和效率权衡。
相关的文献研究了网络大多是可靠时的情况(消息有限延迟),但是“错误”的定义被扩展到以处理任何偏离协议的情况。这种拜占庭故障包括自然出现的故障以及恶意制作的行为。早在 1982 年,这就被 Lamport、Robert Shostak 和 Marshall Pease 首先研究过。再后来的 1999 年,Maguel Castro 和 Barbara Liskov 发表了一篇里程碑式的文章,介绍了 PBFT(拜占庭容错),适用于拜占庭故障和不可靠的网络。与链接时间戳相比,容错文献是巨大的,包括数百种 Paxos、PBFT 和其他开创性协议的变体和优化。
中本聪在他的原始白皮书中并没有引用这些文献或使用其语言。他使用一些概念,将他的协议称为共识机制,认为故障分为攻击者以及节点加入和离开网络的形式。这与他对链接时间戳(和下一步讨论的工作量证明)的文献的利用截然相反。关于比特币与拜占庭将军问题的关系(一项需要 BFT 解决的思想实验)的邮件列表讨论中,中本聪认为,工作量证明链解决了这个问题。
在接下来的几年中,其他学者从分布式系统的角度研究了中本聪共识。这是一个正在进行中的研究。有些人表示,比特币的属性相当薄弱,而另一些则认为 BFT 观点对比特币一致性属性并不公正。另一种方法是定义已研究属性的变体,并证明比特币满足这些属性。最近这些定义大幅度精简,在更实际的假设下对消息传递提供更标准的一致性定义。然而,所有这些研究都以“诚实”为假设前提,即协议兼容、参与者子集中行为,而 中本聪表明不能盲目假设诚实行,因为诚实行为需要激励。对 中本聪共识的更深入研究认为,激励机制的作用不完全属于过去的容错系统模型。
工作量证明
几乎所有的容错系统都认为系统中严格的多数或绝对多数(如超过一半或三分之二)的节点是诚实可靠的。在一个开放的对等网络中,节点无需注册,自由地加入和离开。因此对手可以创建足够的 Sybils 或马甲(sockpuppet)节点来破坏系统保证共识。Sybil 攻击在 2002 年由 John Douceur 正式确定,他使用一种称为工作量证明来加以应对的加密构造。
起源
要了解工作量证明,我们先看看它的起源。第一个工作量证明概念的是 Cynthia Dwork 和 Moni Naor 于 1992 年提出的,其目标是制止垃圾邮件。请注意,垃圾邮件、Sybil 攻击和拒绝服务都是类似的问题,都是对手相比于普通用户放大了其在网络中的影响力;工作量证明适用于以上三者的防御。在 Dwork 和 Naor 的设计中,电子邮件收件人只会处理那些有发件人执行适量计算工作证明的电子邮件,也就是“工作量证明”。在一台普通计算机上计算证明可能需要几秒钟。因此普通用户不会觉得麻烦,但使用等效的硬件的垃圾邮件发送者,如果发送一百万封垃圾邮件则需要几周时间。
工作量证明谜题必须针对具体的电子邮件以及收件人。否则垃圾邮件发送者能够向同一收件人发送多条消息(或向多个收件人发送同一消息),这与向一个收件人发一条消息花费相同。第二个重要的属性是它应该对收件人造成最小的计算负担;谜题解决方案无论多么难以计算应该是很容易验证。此外,Dwork 和 Naor 还考虑了一个陷门(trapdoor)功能,中枢机构掌握机密信息使其在不做任何工作的情况下就能解决谜题。陷门的一个可能的应用是授权中枢机构不需要产本就能批准发布到邮件列表。Dwork 和 Naor 的研究想法包括满足这些属性的三个候选谜题,并启动一整个研究领域。
Hashcash
一个叫作 hashcash(哈希现金)的非常相似想法是由 Adam Back 在 1997 年独立发明的,当时他是一位博士后研究员,也是 cypherpunk 社区的成员。Cypherpunks 是反对政府和中央集权机构的社会运动家,试图通过密码学进行社会和政治变化。Back 最先以软件的形式发布了 hashcash,5 年后的 2002 年发布了互联网草案(一份标准文件)和一篇论文。
Hashcash 比 Dwork 和 Naor 的想法简单得多:它没有陷门或中枢机构,只使用哈希函数而非数字签名。它基于一个简单的原则:哈希函数作为一个实际用途的随机函数,这意味着找到一个特定输出的哈希输入的唯一方法是尝试各种输入直到产生所需的输出。也就是说,如果让你找到一个(二进制)哈希值以 10 个零开始的输入,你将不得不尝试大量的输入,你会发现每个输出有 1/210 的机会从 10 个零开始,这意味着你必须尝试 210 个输入的顺序(约 1,000 个哈希计算)。
顾名思义,在 hashcash 中 Backr 将工作量证明视为现金形式。在他的网页上,他将其定位为 David Chaum 的 DigiCash 的替代品,这是一个从银行向用户发行无法追踪的数字现金的系统。他甚至在技术设计上进行妥协,使其看起来更像现金。后来,Back 的公开发言认为比特币是 hashcash 的直接扩展。然而,hashcash 根本不是现金,因为它不具有防止双花的保护。Hashcash 币不能在同辈之间交换。
与此同时,在学术界内,研究人员发现除了垃圾邮件之外工作量证明的运用,比如防止拒绝服务攻击、确保网页分析的完整性、限制性在线密码猜测等。顺便提一句,“工作量证明”是 1999 年由 Markus Jakobsson 和 Ari Juels 在一篇论文中提出。值得注意的是,这些研究人员似乎并不了解 hashcash,而是独立开始聚焦基于哈希的工作量证明,Eran Gabber 等、Juels 和 Brainard 的论文都有所介绍。(本段中使用的许多术语在文章发表之后才成为标准术语。)
工作量证明和数字现金:进退两难
你可能知道,工作量证明在其原始运用中不是一个成功的反垃圾邮件措施。一个可能的原因是不同设备谜题解决速度存在巨大差异。这意味着垃圾邮件发送者在定制硬件方面进行小额投资,就能提高垃圾邮件传播速度。在经济学中,对生产成本不对称的自然反应是交易——即工作量证明的解决方案市场。但这是一个进退两难的境地,因为这就需要一个有效的数字货币。而事实上,缺乏这样一种货币是出现工作量证明的主要动力。解决这个问题的一个粗略方案是将谜题解决方案作为现金,就像 hashcash 试图去做的那样。
在比特币出现之前,有两篇文章分别描述了 b-money 和 bit gold 的想法,将谜题解决方案作为现金来处理。这些想法提供的时间戳服务通过工作量证明在创建资金完成之后就签署,一旦创建了资金就会转账。但是,如果在服务器或节点之间出现账本不一致情况,则没有明确的解决方法。这两篇文章似乎暗示的是让多数作决定,但由于 Sybil 的问题,这些机制并不是很安全,除非有看门人控制进入网络,否则工作量证明就能自动产生 Sybil 抵抗。
小结
了解以上这些才能欣赏中本聪设计比特币真正天才之处。比特币的谜题解决方案本身不构成现金,这还是第一次出现,这些谜题解决方案仅用于保护账本安全。工作量证明是由被称为矿工的专门实体进行的(虽然中本聪低估了挖矿的专业度)。
矿工们不断地相互竞争寻找下一个谜题解决方案;每个矿工解决谜题的一个稍微不同的变体,所以成功的机会与矿工控制的全球挖矿能力的比例成正比。解决谜题的矿工可以将交易的下一个批次或区块分配给账本,这是基于链接的时间戳。维护账本服务的奖励制度是,一个贡献区块的矿工将被奖励新建的货币单位。如果矿工做出无效交易或区块,则会被大多数之后贡献区块矿工拒绝,这也会撤回区块奖励。在金钱激励下,矿工互相确保遵守协议。
比特币巧妙地避免了双花问题,双花是工作量证明成为现金的阻碍,因为它使谜题解决方案本身不再具有价值。事实上,谜题解决方案与经济价值两次脱钩:生产区块所需的工作量是浮动参数(与全球挖矿能力成正比);每个区块产生的比特币数量也不固定。区块奖励(新比特币因此铸造)被设置为每四年减半(2017 年奖励是 12.5 比特币/区块,从 50 比特币/区块降到此)。比特币还包含一种奖励方案:交易发送者为在其区块进行交易服务向矿工付款。预计市场将确定交易费用和矿工奖励。
因此,中本聪的天才并不是比特币的任何一个组成部分,而是这些部分精妙地融合,为整个系统注入生命。时间戳和拜占庭协议的研究人员 2005 年前没能想到激励诚实的节点,也没能想到使用工作量证明来消除身份。相反,hashcash、b-money 和 bit gold 的发明者没能想到纳入一个共识算法来防止双花。而比特币使用安全账本来防止双花,从而确保货币有价值。对矿工奖励有价值的货币是必要的;相应的,挖矿权是确保账本安全的必要条件。没有了这一点,对手可以占据全球挖矿权的 50%以上,从而能够比网络中其他部分更快速地生成区块、进行双花交易、改写历史、超越系统。因此,比特币在这三部分之间具有循环依赖性。 中本聪的挑战不仅仅是设计,还说服了最初用户与矿工社区向未知的领域前进,那个时候比萨需要 10,000 比特币,网络的挖矿权不到今天的万亿分之一。
公钥作为身份
本文开始达成的理解是,安全的账本使创建数字货币成为可能。让我们回顾一下这个说法。当 Alice 希望支付给 Bob 时,她将该交易广播到所有比特币节点。一个交易只是一个字符串——一条 Alice 希望支付 Bob 编码声明,由她签署。而矿工最终将此签署声明纳入账本中才能使交易成为现实。请注意,这不需要 Bob 以任何方式参与。我们关注一下交易中没有的内容:明显无需 Alice 和 Bob 的身份;交易只包含他们两位各自的公钥。这是比特币的一个重要概念:公钥是系统中唯一的身份。交易在公钥之间转移价值,这被称为地址。
必须知道相应的私钥才能“代表”身份。你可以随时通过生成新的公钥私钥来创建新的身份,而无需通过中枢机构或注册。不需要获取用户名或通知其他人你已选择了特定的名称。这是去中心化身份管理的概念。比特币没有规定 Alice 如何告诉 Bob 她的化名是什么——这在系统外部。
虽然这与今天大多数其他支付系统完全不同,但比特币的这些想法相当古老,可追溯到数字现金之父 David Chaum。事实上,Chaum 为匿名网络做出了突出贡献。他在 1981 年发表的文章《不可追溯的电子邮件、返回地址和数字化名》(Untraceable Electronic Mail, Return Addresses, and Digital Pseudonyms)中指出:“数字化名是用于验证相应私钥匿名持有人签名的公钥。”
只有通过公钥才知道消息收件人有一个明显的问题:没有办法将消息递送到正确的计算机。这大大降低 Chaum 想法的效率,可以削弱但无法消除匿名级别。与集中支付系统相比,比特币的效率同样非常低:包含每个交易的账本由系统中的每个节点维护。比特币出于安全考虑而导致这种低效率,从而实现了“免费”的化名(即公钥作为身份)。 Chaum 在 1985 年的一篇文章中进一步提出了这些想法,文章中提出了基于普遍化名、数字现金背后关键技术“盲签名”的保护隐私的电子商务愿景。
公钥的想法也见于 b-money 和 bit gold。然而,建立在 Chaum 基础上的许多工作以及 Chaum 自己以后电子货币的研究都摆脱了这一想法。Cypherpunk 们对隐私保护沟通和商业非常感兴趣,包含了化名(他们称之为 nym)。但对于他们来说,nym 不仅仅是加密身份(即公共密钥),而通常是与公钥相关联的电子邮件地址。同样,Ian Goldberg 的论文是后来匿名沟通工作的基础,也承认了 Chaum 的想法,但 Ian 建议 nym 应该是符合人类记忆的名称,用证书对其进行约束。比特币也因此被证明是 Chaum 的想法中最成功的实例化。
区块链技术
外界大多数认为这是比特币的主要发明,但可能会让你感到意外,中本聪根本就没有提到这个词。实际上,“区块链”这个术语没有标准的技术定义,而是由各方用来指代与比特币及其账本有不同相似程度系统的一个宽泛的术语。
讨论受益于区块链的运用实例将有助于澄清该术语的不同用途。首先,考虑银行财团之间的交易数据库后台,交易在每天结束时扣除,账户由中央银行结算。这样一个系统涉及少量身份明确的相关方,“中本聪共识”就有点过了。也不需要 on-blockchain 货币,因为这些账户是以传统货币计值的。而链接的时间戳显然是有用的,至少在网络延迟的时候确保交易是全局一致排序。状态复制也将是有用的:银行需要知道其本地数据副本与中央银行用于结算其账户相同。这样可以使银行免受昂贵的对账流程。
第二,考虑资产管理申请,如跟踪金融证券、房地产或任何其他资产所有权的文档登记。使用区块链将增加互操作性并减少进入门槛。我们想要一个安全的全球文档注册表,最理想的是允许公众参与。这基本上是 20 世纪 90 年代和 21 世纪时间戳服务希望提供的。公共区块链目前提供了一种特别有效的方式来实现(数据本身可以非链式存储,只有元数据存储在链上)。其他运用也受益于时间戳或“公共公告牌”,最显而易见的是电子投票。
我们以资产管理为例。假设你想通过区块链执行资产交易,而不仅仅是将它们记录在那里。如果资产在区块本身上以数字形式发布,并且区块链支持智能合约,则这是可能的。在这种情况下,智能合约解决了“公平交换”问题:当且仅当资产被转移时才确保支付。更宽泛地说,智能合约可以对复杂的业务逻辑进行编码,只要所有必需的输入数据(资产、价格等)都在区块状链上即可。
对区块链应用属性的分析使我们不仅可以了解自身潜力,还会注入亟需的一剂怀疑。首先,许多人提出区块链应用(特别是在银行中)不使用中本聪共识;相反,他们使用账本数据结构和拜占庭协议,这可以追溯到上世纪 90 年代。这使得“区块链是一种新的革命性技术”不成立而对区块链的热议帮助银行开始采取集体行动来部署共享账本技术,如“石汤”寓言。比特币也是去中心化账本概念高度可见的证明,而比特币核心项目提供了一个可以根据需要进行调整的便利代码库。
第二,区块链通常比传统注册表更安全——这是一个误导性的言论。系统或平台的整体稳定性必须与端点安全性(即用户和设备的安全性)分开。诚然,区块链的系统性风险可能低于许多集中式机构的风险,但是区块链的端点安全风险远远低于传统机构的相应风险。区块链交易接近即时、不可逆转,在公共区块链中,交易是匿名的。使用基于区块链的库存注册表,如果用户(或经纪人或代理人)失去对其私钥的控制(比如丢失电话或计算机上获取恶意软件),用户就会丢失其资产。比特币黑客、盗窃和骗局的实例使我们无法对其充满信息,一个初步的估计表示,流通中的比特币至少有 6%被盗过至少一次。
总结
本文描述的文献历史为比特币从业者和学者提供了丰富的(互补的)知识。从业者应该对革命性技术的主张持怀疑态度。如本文所示,比特币中大多数在商业领域让人兴奋的想法,如分布式账本和拜占庭协议,实际上可追溯到 20 多年以前。这不是任何突破,只是学术文献中长期被遗忘的解决方案。
至少在这种情况下,学术界抵制激进的外在观点。比特币白皮书尽管传承许多学术界的观点,但比大多数学术研究更新颖。此外,中本聪并不关心学术同行评议 。因此,最开始好几年学术界基本上忽略了比特币。许多学术团体非正式地表示,根据以往系统的理论模式或经验,比特币无法运作,尽管比特币当时在实践中是有效的。
我们已经多次看到,研究文献中的想法可能逐渐被遗忘或被忽视,特别是如果是超前想法,即使在几大热门研究领域也是如此。实践者和学者都会重新审视旧的想法,为目前的系统收集深刻见解。比特币不同寻常和成功之处,不在于它任何一个部分处于研究的前沿,而是在于它结合了许多以前不相关领域的已有想法。这并不容易,因为它需要桥接不同的术语、假设等,但这是创新创造的宝贵蓝图。
从业人员可以识别被炒作的技术,从中受益。一些炒作指标有:难以识别技术创新;由于公司急于做自己的产品的广告,难以把握所谓技术术语的含义;难以识别正在解决的目标问题;最后是声称技术解决社会问题或创造经济/政治动荡。
相比之下,学术界难以把发明卖出去。例如,最早研究工作量证明的学者对于比特币的创造没有取得任何功劳,可能是因为这些研究在学术界之外并不为人所知。诸如释放代码、与从业人员合作等活动在学术界没有得到充分的认可。事实上,最早期的工作量证明的学术文献今天都没有承认比特币的存在!与现实世界接触不仅有助于获得认可,而且还将减少不必要的重复创新,并且也是新灵感的源泉。
工具栏
Sybil 抵抗网络
John Douceur 在他关于 Sybil 攻击的论文中提出要参与 BFT 协议的所有节点都需要解决 hashcash 谜题。如果一个节点伪装成 N 个节点,那么它将无法及时解决 N 个谜题,假身份则被清除。然而,恶意节点相比于申报单个身份真实节点仍然可以获得中等优势。2005 年的一篇后续文章提出,真实节点应该模仿恶意节点的行为,申报可计算范围内尽量多的虚拟身份。在这些虚拟身份执行 BFT 协议的情况下,“最多有 f 个节点是有缺陷的”假设被“由故障节点控制的总计算能力最大是 f”所代替。因此,不再需要验证身份,开放对等网络可以运行 BFT 协议。比特币就完全使用了这个想法。但中本聪更进一步提出了一个问题:什么促使节点执行计算上昂贵的工作量证明?答案是:数字货币。
智能合约
智能合约将数据放在安全账本中,并将其扩展到计算中。换句话说,正确执行公开指定的程序是一个协商一致的协议。用户可以调用这些智能合约程序中的功能,受程序规定的任何限制约束,功能代码与矿工同步执行。用户可以信任输出,而不必重做计算,并且可以编写自己的程序来对其他程序的输出进行操作。智能合约与加密平台相结合可以变得特别强大,因为有关程序可以对钱进行处理——拥有、传输、销毁它、甚至在某些情况下打印它。
比特币实现了智能合约的限制性编程语言。“标准”交易(即将货币从一个地址移动到另一个地址)的交易被指定为该语言的简短脚本。以太坊提供更宽松和强大的语言。
智能合约的想法是由 Nick Szabo 在 1994 年提出的,他认为这与法律合同相似而且能自动执行,因此取名智能合约。(这个观点已经被 Karen Levy 和 Ed Felten 批评。)Szabo 先前提出的智能合约作为数字现金协议的扩展,并认为拜占庭协议和数字签名可以作为构建区块。加密货币的成功使得智能合约成为可能,而且对该主题的研究也蓬勃发展。例如,编程语言研究人员已经调整了方法和工具来自动发现智能合约中的错误,并且编写可验证的正确信息。
许可块
虽然本文强调,私人或许可的区块链省略了比特币大部分的创新之处,但这并不意味这个领域不有趣。许可链限制可以加入网络的对象、编写交易或挖矿。特别是,如果矿工属于可靠的参与者名单上,那么工作量证明可以被放弃,以更传统的 BFT 方法执行。因此,大部分研究是 BFT 的变种,涉及以下问题:可以使用 hash 树来简化共识算法吗?如果网络只能以某几种方式失败怎么办?
此外,关于身份和公钥基础设施、访问控制以及存储在区块链上数据的机密性的有许多重要考虑。这些问题很大多不会出现在公共区块链设置中,也不是在传统的 BFT 文献中进行研究。
最后还会涉及工程问题,如扩大区块链规模到高吞吐量并适应各种应用(如供应链管理和金融技术)。