链客,专为开发者而生,有问必答!git
此文章来自区块链技术社区,未经容许拒绝转载。算法
当前,对于区块链,大部分人都存在些许在基本认知维度的误区,譬如直接将区块链等同于比特币、全部 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 文献中进行研究。
最后还会涉及工程问题,如扩大区块链规模到高吞吐量并适应各类应用(如供应链管理和金融技术)。