比特币的学术谱系

加密货币的概念是建立在研究文献中被遗忘的观点之上的。—— Arvind Narayanan和Jeremy Clark

如果你已经阅读了有关比特币的新闻并且对密码学领域的学术研究有所了解,那么你可能会得到以下印象:几十年来对数字货币的研究,从David Chaum但并没有带来商业上的成功,因为它需要一个集中的银行服务器来控制系统,没有银行想要登录。随着比特币的出现,对于不需要银行的去中心化加密货币提出了截然不同的建议,数字货币终于成功了。它的发明者,神秘的中本聪(Satoshi Nakamoto)是一位学术界的外人,比特币与早期的学术提案没有任何相似之处。

本文通过证明比特币的几乎所有技术组成部分都起源于20世纪80年代和90年代的学术文献(见图1)来挑战这一观点。这并不是要削弱Nakamoto的成就,而是要指出他站在巨人的肩膀上。实际上,通过在比特币中追溯这些想法的起源,我们可以了解中本聪真正的洞察力——将基础组件组合在一起的具体,复杂的方式。这有助于解释为什么比特币需要很长时间才能被发明。已经熟悉比特币如何工作的读者可以从这个历史演示中获得更深入的理解。 (有关介绍,请参阅Arvind Narayanan等人的比特币和加密货币技术。)比特币的知识史也可作为一个案例研究,展示学术界,外部研究人员和从业者之间的关系,并从另一个角度提供有关这些群体如何从中受益的经验教训。

分类帐

如果你有一个安全的分类帐,那么将其用于数字支付系统的过程非常简单。例如,如果Alice通过PayPal向Bob发送100美元,那么PayPal会从Alice的帐户中扣除100美元,并将100美元记入Bob的帐户。这也与传统银行业务大致相同,尽管银行之间缺乏单一的分类账使事情变得复杂。

分类账的这个想法是理解比特币的起点。它是记录系统中发生的所有交易的地方,它对所有系统参与者开放并受其信任。比特币转换此系统以将付款记录为货币。在银行业,账户余额代表银行可以要求的现金,比特币单位代表什么?现在,假设正在交易的内容本身具有价值。

如何在互联网等环境中构建分类账,参与者可能不会互相信任?让我们从简单的部分开始:数据结构的选择。有一些理想的属性。分类帐应该是不可变的,或者更确切地说,只是附加:你应该能够添加新的交易,但不能删除,修改或重新排序现有的交易。还应该有一种方法可以随时获得分类帐状态简洁加密的摘要。摘要是一个短字符串,可以避免存储整个分类帐,因为知道如果分类帐以任何方式被篡改,结果摘要会发生变化,从而检测到篡改。这些属性的原因在于,与存储在单个机器上的常规数据结构不同,分类帐是由相互不可信的参与者集合共同维护的全局数据结构。这与去中心化数字分类账的另一种方法形成对比,其中许多参与者维护本地分类账,由用户查询这组分类账以解决任何冲突。

链接的时间戳

比特币的分类账数据结构是借用了斯图尔特·哈伯和斯科特·斯托内塔在1990年至1997年间撰写的一系列论文(最简单的修改)(1991年的论文有另一位合着者,戴夫·拜尔)。我们知道这一点是因为Nakamoto在他的比特币白皮书中这样说Haber和Stornetta的工作解决了文档时间戳的问题——他们的目的是建立一个“数字公证”服务。对于专利,商业合约和其他文档,人们可能希望确定文档是在某个时间点创建的,而不是以后创建的。他们的文档概念非常笼统,可以是任何类型的数据。他们确实提到金融交易是一种潜在的应用,但它并不是他们关注的焦点。

在Haber和Stornetta提案的简化版本中,不断创建和播放文档。每个文档的创建者声明创建时间并签署文档,时间戳和先前广播的文档。此前的文档已经签署了自己的前任,因此文档形成了一个长链,其指针在时间上向后移动。外部用户不能更改带时间戳的消息,因为它是由创建者签名的,并且创建者不能在不改变随后的整个消息链的情况下改变消息。因此,如果由受信任的源(例如,另一个用户或专门的时间戳服务)给予链中的单个项目,则直到该点的整个链被锁定,不可变和时间顺序。此外,如果你假设系统拒绝创建时间不正确的文档,则可以合理地确保文档至少与它们声称的一样旧。无论如何,比特币只借用了Haber和Stornetta工作的数据结构,并通过添加本文后面描述的工作量证明方案重新设计其安全属性。

在他们的后续文章中,Haber和Stornetta介绍了其他一些使这种数据结构更加有效和高效的想法(其中一些在他们的第一篇论文中暗示过)。首先,可以使用哈希而不是签名来创建文档之间的链接;哈希更简单,计算速度更快。这种链接称为哈希指针。其次,不是单独地对文档进行线程化——如果在大致相同的时间创建许多文档可能效率低——它们可以被分组为批次或块,每个块中的文档具有基本相同的时间戳。第三,在每个块内,文档可以与哈希指针的二叉树链接在一起,称为Merkle树,而不是线性链。顺便提一下,在Haber和Stornetta的第一篇论文之后不久,Josh Benaloh和Michael de Mare在1991年独立地介绍了所有这三个想法。

Merkle树

比特币主要使用Haber和Stornetta 1991年和1997年的论文中的数据结构,在图2中以简化形式显示(Nakamoto可能没有意识到Benaloh和de Mare的工作)。当然,在比特币中,交易取代了文件。在每个块的Merkle树中,叶节点是交易,每个内部节点基本上由两个指针组成。该数据结构具有两个重要属性。首先,最新块的哈希充当摘要。对任何交易(叶节点)的更改将需要将更改一直传播到块的根,以及所有后续块的根。因此,如果你知道最新的哈希值,则可以从不受信任的源下载其余的分类帐,并验证它是否未更改。类似的论点建立了数据结构的另一个重要属性——也就是说,有人可以有效地向你证明特定交易包含在分类账中。该用户必须在该交易的块中仅向你发送少量节点(这是Merkle树的点),以及每个后续块的少量信息。有效地证明包含交易的能力对于性能和可伸缩性是非常需要的。

顺便说一句,Merkle树是以Ralph Merkle的名字命名的,Ralph Merkle是非对称密码术的先驱,他在1980年的论文中提出了这个想法。他的目标应用是为数字证书的公共目录制作一个摘要。例如,当某个网站向你提供证书时,它还可以提供证书出现在全局目录中的简短证明。只要你知道目录中证书的Merkle树的根哈希,就可以有效地验证证明。这个想法在加密标准方面很古老,但它的力量最近才受到重视。它是最近实施的证书透明度系统的核心。2015年的一篇论文提出了CONIKS,它将这个想法应用于端到端加密电子邮件的公钥目录。对全球各州的部分进行有效验证以太网中的分类账提供的关键功能,一种新的加密货币。

比特币可能是Haber和Stornetta数据结构中最着名的现实世界实例,但它不是第一个。至少有两家公司——从90年代中期开始的Surety和从2007年开始的Guardtime——提供文件时间戳服务。这两种服务中存在一个有趣的转折点是Bayer,Haber和Stornetta提到的一个想法,即通过取出广告在报纸上定期发布Merkle根。图3显示了Guardtime发布的Merkle根。

拜占庭容错

当然,没有中央权威的互联网货币的要求更为严格。分布式分类帐将不可避免地具有分叉,这意味着某些节点会认为分块A是最新分块,而其他节点则认为它是分块B。这可能是因为对手试图破坏分类账的操作或仅仅因为网络延迟,导致偶尔由不同节点几乎同时生成块而不知道彼此的块。单独链接的时间戳不足以解决分叉问题,如Mike Just在1998年所示。

一个不同的研究领域,容错分布式计算,已经研究了这个问题,它有不同的名称,包括状态复制。该问题的解决方案是使一组节点能够以相同的顺序应用相同的状态转换—— 通常,精确的顺序无关紧要,只有所有节点都是一致的。对于数字货币,要复制的状态是余额集,而交易是状态转换。包括Paxos在内的早期解决方案,由图灵奖得主莱斯利·兰波特于1989年提出,考虑了当通信渠道不可靠时以及少数节点可能出现某些“现实”故障时的状态复制,例如永远离线或重启和发送来自首次离线时的过期消息。随后出现了大量文献,其中包括更多的不利设置和效率权衡。

一个相关的工作线研究了网络最可靠的情况(消息以有限的延迟传递),但是“故障”的定义被扩展以处理与协议的任何偏差。这种拜占庭式断层包括自然发生的断层以及恶意制造的行为。早在1982年,他们就首次在Lamport,与Robert Shostak和Marshall Pease的同一篇文章中研究过.27很久以后,1999年,Miguel Castro和Barbara Liskov的一篇具有里程碑意义的论文介绍了PBFT(实际的拜占庭容错)。拜占庭故障和不可靠的网络。与链接时间戳相比,容错文献是巨大的,包括Paxos,PBFT和其他开创性协议的数百种变体和优化。

在他的原始白皮书中,Nakamoto没有引用这些文献或使用它的语言。他使用了一些概念,将他的协议称为共识机制,并以攻击者的形式以及加入和离开网络的节点来考虑故障。这与他在链接时间戳(以及下一个讨论的工作量证明)中明确依赖文献形成鲜明对比。当在邮件列表讨论中询问比特币与拜占庭将军问题的关系(一个需要BFT解决的思想实验)时,Nakamoto声称工作量证明链解决了这个问题。

在接下来的几年中,其他学者从分布式系统的角度研究了Nakamoto共识。这仍然是一项进展中的工作。一些人认为比特币的属性非常弱,而其他人则认为BFT的观点并不能比得上比特币的一致性。另一种方法是定义经过充分研究的属性的变体并证明比特币满足它们。最近这些定义为了提供一个更加标准的一致性定义,在更真实的关于消息传递的假设下进行了大量的改进。然而,所有这些工作都对参与者子集中的“诚实”,即符合procotol的行为做出了假设,而Nakamoto表明诚实行为不需要盲目地假设,因为它是激励的。对Nakamoto共识的更丰富的分析考虑了激励的作用,并不能完全适应过去的容错系统模型。

工作量证明

实际上,所有容错系统都假设系统中严格多数或绝大多数(例如,超过一半或三分之二)的节点都是诚实可靠的。在开放的对等网络中,没有节点注册,它们可以自由地加入和离开。因此,攻击者可以创建足够的Sybils或sockpuppet节点,以克服系统的共识保证。 Sybil袭击事件于2002年由约翰·杜塞尔(John Douceur)于2002年正式确定,后者转向加密构造,称之为缓解工作的证据。

起源

为了理解工作量证明,让我们来看看它的起源。第一个被称为今天工作量证明的提案是由Cynthia Dwork和Moni Naor在1992年创建的。他们的目标是阻止垃圾邮件。请注意,与常规用户相比,垃圾邮件,Sybil攻击和拒绝服务都是大致相似的问题,其中攻击者放大了其在网络中的影响力;工作量证明适用于对三者的辩护。在Dwork和Naor的设计中,电子邮件收件人只会处理那些伴随着发件人已经执行了大量计算工作的证据的电子邮件——因此,“工作量证明”在普通计算机上计算证明可能需要几秒钟。因此,它对普通用户来说没有任何困难,但是希望发送一百万封电子邮件的垃圾邮件发送者需要几周时间,使用相同的硬件。

请注意,工作量证明实例(也称为puzzle)必须特定于电子邮件以及收件人。否则,垃圾邮件制造者将能够向同一个收件人发送多个邮件(或向多个收件人发送相同的邮件),以便向一个收件人发送一封邮件的费用。第二个关键属性是它应该对接收者造成最小的计算负担;无论计算的难度如何,puzzle解决方案都应该是无关紧要的。此外,Dwork和Naor考虑了一个trapdoor功能,这是一个中央权威人士所知道的秘密,它允许当局在不做工作的情况下解决谜题。陷门的一种可能应用是授权机构批准发布到邮件列表而不产生费用。Dwork和Naor的提议包括三个符合他们属性的候选谜题,它开启了我们将返回的整个研究领域。

Hashcash

一个名为hashcash的非常相似的想法是由当时的博士后研究员Adam Back独立发明的,后者是cypherpunk社区的一部分。Cypherpunks是反对政府和中央机构权力的活动家,并试图通过密码学创造社会和政治变革。Back几乎是导向的:他首先发布了hashcash作为软件,2年和5年后发布了Internet草案(标准化文档)和论文4。

Hashcash比Dwork和Naor的想法简单得多:它没有trapdoor,没有中心权限,它只使用哈希函数而不是数字签名。它基于一个简单的原则:哈希函数在某些实际用途中表现为随机函数,这意味着找到哈希到特定输出的输入的唯一方法是尝试各种输入,直到产生所需的输出。此外,找到哈希到任意输出集的输入的唯一方法是再次尝试逐个哈希不同的输入。所以,如果我挑战你找到一个输入,其(二进制)哈希值以10个零开头,你将不得不尝试多个输入,你会发现每个输出有1/2的机会以10个零开头,这意味着你必须尝试210个输入的顺序,或大约1,000个哈希计算。

顾名思义,在hashcash中查看工作量证明作为一种现金形式。在他的网页上,他将其定位为David Chaum的DigiCash的替代品,DigiCash是一个从银行向用户发出无法追踪的数字现金的系统。他甚至对技术设计做出了妥协,使其看起来更像现金。后来,Back发表评论表明比特币是hashcash的直接扩展。然而,Hashcash根本不是现金,因为它没有防止双重支出的保护。 Hashcash令牌不能在同行之间交换。

与此同时,在学术界,研究人员发现许多应用程序除了垃圾邮件之外还有工作量证明,例如防止拒绝服务攻击,确保网络分析的完整性,以及限制密码在线猜测。顺便说一下,这个术语工作量证明仅在1999年由Markus Jakobsson和Ari Juels撰写的一篇论文中创造,其中还包括对此前工作的一个很好的调查。值得注意的是,这些研究人员似乎不知道哈希,但是独立开始收集基于哈希的工作量证明,这在Eran Gabber等人的论文和Juels and Brainard的论文中引入。本段中使用的许多术语直到论文发表后很久才成为标准术语。

工作量证明和数字现金:A catch-22

你可能知道,作为反垃圾邮件措施,其原始应用程序中的工作量证明没有成功。一个可能的原因是不同设备的puzzle解决速度的巨大差异。这意味着垃圾邮件制造者将能够对自定义硬件进行少量投资,以将垃圾邮件数量提高几个数量级。在经济学中,对生产成本不对称的自然反应是贸易——即工作量证明解决方案的市场。但这提出了一个A catch-22,因为这将需要一个有效的数字货币。实际上,缺乏这种货币是首先证明工作动机的主要部分。这个问题的一个原始解决方案是将puzzle解决方案声明为现金,就像hashcash试图做的那样。

在比特币之前的两篇文章中找到了将puzzle解决方案视为现金的更一致的方法,分别描述了称为b-money和bit gold的想法。这些提案提供了时间戳服务,可以签署货币的创建(通过工作量证明),一旦创建了资金,他们就会在转账时签字。但是,如果在服务器或节点之间出现关于分类帐的不一致,则没有明确的方法来解决它。让大多数决定似乎隐含在两位作者的着作中,但由于Sybil问题,这些机制并不十分安全,除非有一个守门人控制进入网络或Sybil抵抗本身是通过工作量证明来实现的。

把它们放在一起

了解所有这些包含比特币设计的前辈,可以了解中本聪创新的真正天才。在比特币中,puzzle解决方案第一次不能自行构成现金。相反,它们仅用于保护分类帐。解决工作量证明是由称为矿工的专业实体进行的(尽管Nakamoto低估了采矿的专业化程度)。

矿工们不断相互竞争,寻找下一个解谜方案;每个矿工解决了一个略有不同的工作量证明变量,以便成功的机会与矿工控制的全球采矿能力的比例成正比。解决工作量证明变量的矿工可以将下一批交易或阻止交易分配给分类账,这是基于链接的时间戳。作为维护分类账的服务的交换,贡献区块的矿工将获得新的货币单位奖励。很有可能,如果矿工提供无效交易或阻止,大多数其他矿工将拒绝提供以下区块,这也将使坏块的区块奖励无效。通过这种方式,由于货币激励,矿工们确保彼此遵守协议。

比特币巧妙地避免了困扰工作量证明作为现金计划的双重支出问题,因为它避开了具有价值的puzzle解决方案。事实上,puzzle解决方案与经济价值两次脱钩:生产块所需的工作量是一个浮动参数(与全球采矿能力成比例),而且,每块发布的比特币数量也不固定。块奖励(这是新比特币的铸造方式)设定为每四年减半(2017年,奖励为12.5比特币/块,低于50比特币/块)。比特币包含一个额外的奖励计划——即支付矿工的交易发件人,用于将交易包括在他们的区块中。预计市场将确定交易费和矿工的奖励。

因此,中本聪的天才不是比特币的任何组成部分,而是它们融合在一起为系统注入生命的错综复杂的方式。时间戳和拜占庭协议的研究人员没有想到激励节点是诚实的,直到2005年,还没有使用工作量证明来消除身份。相反,hashcash,b-money和bit gold的作者没有采用共识算法来防止双重支出。在比特币中,必须使用安全分类账来防止双重支出,从而确保货币具有价值。奖励矿工需要有价值的货币。反过来,挖掘能力的强度是保证分类帐的必要条件。没有它,对手可以积累超过50%的全球采矿能力,从而能够比网络的其他部分更快地生成块,双重交易,并有效地重写历史,超越系统。因此,比特币是自助的,在这三个组件之间具有循环依赖性。Nakamoto面临的挑战不仅仅是设计,而且还说服了最初的用户和矿工社区,当比萨饼花费10,000比特币并且网络的采矿能力不到现在的万亿分之一时,他们可以一起跳进未知领域。

公钥作为身份

本文首先要了解安全分类账使数字货币直接创建。让我们重新审视这一说法。当Alice希望向Bob付款时,她将交易广播到所有比特币节点。一个交易只是一个字符串:一个声明编码Alice希望向Bob支付一些价值,由她签名。矿工最终将这份签署的声明纳入分类账是使交易成真的原因。请注意,这不需要Bob以任何方式参与。但是,让我们关注交易中没有的内容:显然缺席的是Alice和Bob的身份;相反,该交易仅包含其各自的公钥。这是比特币中的一个重要概念:公钥是系统中唯一的一种身份。交易从公钥传输值和公钥传递值,称为地址。

为了“代表”身份,你必须知道相应的密钥。你可以通过生成新密钥对随时创建新标识,而无需中央权限或注册表。你无需获取用户名或通知其他人你已选择特定名称。这是去中心化身份管理的概念。比特币没有说明Alice如何告诉Bob她的假名是什么——这是系统外部的。

虽然与今天大多数其他支付系统完全不同,但这些想法已经相当陈旧,可追溯到数字现金之父David Chaum。事实上,Chaum也为匿名网络做出了开创性的贡献,正是在这种背景下,他发明了这个想法。他在1981年的论文“不可追踪的电子邮件,回复地址和数字假名”中指出:“数字假名”是用于验证相应私钥的匿名持有者签名的公钥。

现在,只有公钥才能知道邮件收件人存在一个明显的问题:无法将邮件路由到正确的计算机。这导致Chaum提案的效率低下,可以在匿名水平上进行交易,但不能消除。与集中支付系统相比,比特币效率极低:包含每笔交易的分类账由系统中的每个节点维护。出于安全原因,比特币无论如何都会产生这种低效率,从而“免费”实现假名(即公钥作为身份)。Chaum在1985年的一篇论文中进一步阐述了这些想法,他提出了一个基于普遍假名的隐私保护电子商务的愿景,以及他的数字现金背后的关键技术理念“盲签名”。

公共密钥作为身份的想法也出现在b-money和bit gold中,这是前面讨论过的比特币的前两篇论文。然而,在Chaum的基础上建立的大部分工作,以及Chaum自己后来关于ecash的工作,都远离了这个想法。cypherpunks对保护隐私的通信和商业非常感兴趣,他们接受了假名,他们称之为nyms。但对他们而言,nyms不仅仅是加密身份(即公钥),而是通常与公钥相关联的电子邮件地址。同样,伊恩·戈德堡的论文,成为未来匿名传播工作的基础,认可了Chaum的想法,但暗示nyms应该是人类难忘的昵称,并带有证书来约束他们。因此比特币被证明是Chaum的想法最成功的实例化。

区块链

到目前为止,这篇文章还没有涉及区块链,如果你相信炒作,那就是比特币的主要发明。Nakamoto根本没有提到这个术语,你可能会感到惊讶。事实上,区块链这个术语没有标准的技术定义,但却是一个松散的术语,被各方用来指代与比特币及其分类账具有不同程度相似程度的系统。

讨论受益于区块链的示例应用程序将有助于澄清该术语的不同用法。首先,考虑一个银行财团之间交易的数据库后端,其中交易在每天结束时被净额结算,账户由中央银行结算。这样一个系统只有少数明确的政党,因此中本协议的共识将是过度的。由于账户以传统货币计价,因此也不需要区块链货币。另一方面,链接的时间戳显然是有用的,至少在面对网络延迟时确保交易的一致全局排序。状态复制也很有用:银行会知道其本地数据副本与中央银行用于结算其帐户的数据相同。这使银行摆脱了目前必须执行的昂贵的对账流程。

其次,考虑资产管理应用程序,例如跟踪金融证券,房地产或任何其他资产的所有权的文档注册表。使用区块链可以提高互操作性并降低进入门槛。我们需要一个安全的全球文件注册表,最好是允许公众参与的文件。这基本上是20世纪90年代和2000年代的时间戳服务所要提供的。公共区块链提供了一种特别有效的方法来实现这一目标(数据本身可以存储在链外,只有元数据存储在链上)。其他应用程序也受益于时间戳或“公共公告板”抽象,最明显的是电子投票。

让我们以资产管理为例。假设你想通过区块链执行资产交易,而不仅仅是在那里记录它们。如果资产是通过区块链本身以数字方式发布的,并且区块链支持智能合约,则可以实现这一点。在这种情况下,智能合约解决了公平交换fair exchange问题,即当且仅当资产被转移时才确保付款。更一般地说,智能合约可以编码复杂的业务逻辑,前提是所有必要的输入数据(资产,价格等)都在区块链上表示。

区块链属性与应用程序的映射使我们不仅能够理解它们的潜力,而且能够注入急需的能量。首先,很多建议的区块链应用,特别是在银行业,不使用Nakamoto共识。相反,他们使用分类帐数据结构和拜占庭协议,如图所示,该协议可以追溯到90年代。这掩盖了区块链是一种新的革命性技术的说法。相反,围绕区块链的嗡嗡声帮助银行采取集体行动来部署共享分类账技术,就像“stone soup”的比喻一样。比特币也是去中心化分类账工作的一个非常明显的概念证明,比特币核心项目提供了一个方便的代码库,可以根据需要进行调整。

其次,区块链通常比传统的注册表更安全——这是一种误导性的主张。要了解原因,系统或平台的整体稳定性必须与端点安全性(即用户和设备的安全性)分开。确实,区块链的系统性风险可能低于许多中央机构的系统性风险,但区块链的端点安全风险远远低于传统机构的相应风险。区块链交易几乎是即时的,不可逆转的,并且在公共区块链中,按照设计匿名。使用基于区块链的股票注册表,如果用户(或经纪人或代理人)失去对他或她的私钥的控制权——这只需要丢失电话或在计算机上获取恶意软件——用户就会失去他或她的资产。比特币黑客,盗窃和诈骗的非凡历史并没有激发人们的信心——根据一项估计,至少有6%的流通比特币被盗至少一次。

总结

这里描述的历史为从业者和学者提供了丰富(和补充)的内容。从业者应该对革命性技术的主张持怀疑态度。如图所示,在比特币中产生兴奋的大多数想法,如分布式账本和拜占庭协议,实际上可以追溯到20年或更长时间。认识到你的问题可能不需要任何突破——研究论文中可能存在长期被遗忘的解决方案。

学术界似乎有相反的问题,至少在这种情况下:对激进的外在思想的抵制。比特币白皮书,尽管有许多想法的血统,但比大多数学术研究更新颖。此外,Nakamoto不关心学术同行评审,也没有完全将其与历史联系起来。因此,学者们多年来基本上忽略了比特币。许多学术界非正式地认为比特币无法运作,基于理论模型或过去系统的经验,尽管它在实践中有效。

我们反复看到,研究文献中的观点可能会逐渐被遗忘或被忽视,特别是如果它们超前于时代,即使在流行的研究领域也是如此。从业者和学者都会很好地重新考虑旧的想法,以收集现有系统的见解。比特币不同寻常并且成功并不是因为它处于对其任何组件的研究的最前沿,而是因为它结合了许多以前不相关领域的旧观念。这并不容易,因为它需要弥合不同的术语,假设等,但它是创新的宝贵蓝图。

从业者将从能够识别过度使用的技术中受益。炒作的一些指标:难以识别技术创新;难以确定所谓的技术术语的含义,因为公司渴望将自己的产品附加到潮流中;难以确定正在解决的问题;最后,声称技术解决社会问题或创造经济/政治动荡。

相比之下,学术界难以出售其发明。例如,不幸的是,原始的工作量证明研究人员没有得到比特币的功劳,可能是因为这项工作在学术界之外并不为人所知。诸如释放代码和与从业者合作等活动在学术界没有得到充分的回报。事实上,学术工作量证明文献的原始分支今天仍然没有承认比特币的存在!与现实世界接触不仅有助于获得信誉,还可以减少重新发明,并且是新想法的源泉。

Sybil - resistant networks

在他关于Sybil攻击的论文中,John Douceur建议所有参与BFT协议的节点都需要解决hashcash难题。如果一个节点伪装成N个节点,它将无法及时解决N个谜题,并且将清除虚假身份。然而,恶意节点仍然可以获得比仅声称单个身份的诚实节点更好的优势。2005年的一篇后续文章表明,诚实的节点应该模仿恶意节点的行为,并声称拥有尽可能多的虚拟身份,因为它们在计算上可以承受。利用执行BFT协议的这些虚拟身份,可以用“由故障节点控制的总计算功率的分数最多为f”的假设替换“最多节点的一部分f有故障”的假设。因此,不再需要验证身份,并且开放的对等网络可以运行BFT协议。比特币恰好使用了这个想法。但Nakamoto提出了另一个问题:是什么促使节点执行计算上昂贵的工作量证明?答案需要进一步飞跃:数字货币。

智能合约

智能合约采用将数据放入安全分类账并将其扩展到计算的想法。换句话说,它是正确执行公开指定程序的共识协议。用户可以在这些智能合约程序中调用功能,受程序指定的任何限制,并且功能代码由矿工串联执行。用户可以信任输出而无需重做计算,并且可以编写自己的程序来对其他程序的输出进行操作。当与加密货币平台结合使用时,智能合约尤其强大,因为有问题的程序可以处理货币,转移,销毁它,甚至在某些情况下甚至打印它。

比特币为智能合约实施限制性编程语言。“标准”交易(即将货币从一个地址移动到另一个地址的交易)被指定为该语言的短脚本。以太坊提供更宽松,更强大的语言。

智能合约的想法是由Nick Szabo在199441提出的,之所以如此命名是因为他认为它们是法律合约的类比,而是自动执行。(这一观点受到了Karen Levy31和Ed Felten的批评。)Szabo先前提出智能合约作为数字现金协议的扩展,并认识到拜占庭协议和数字签名(以及其他)可以用作构建模块。加密货币的成功使智能合约变得切实可行,对该主题的研究也开始发展。例如,编程语言研究人员已经调整了他们的方法和工具,以自动发现智能合约中的错误并编写可验证的正确错误。

需要许可的区块链

虽然本文强调私有或需要许可的区块链省略了比特币的大部分创新,但这并不意味着减少在这个领域发生的有趣工作。经过需要许可的区块链会限制谁可以加入网络,编写交易或挖掘区块。特别是,如果矿工被限制在可信赖的参与者名单中,可以放弃工作量证明,转而采用更传统的BFT方法。因此,大部分研究都是BFT的重生,提出了以下问题:我们可以使用哈希树来简化共识算法吗?如果网络只能以某种方式发生故障怎么办?

此外,围绕身份和公钥基础设施,访问控制以及区块链上存储的数据的机密性存在重要考虑因素。这些问题在公共区块链设置中很大程度上没有出现,也没有在传统的BFT文献中进行过研究。

最后,还有缩放区块链以实现高吞吐量并使其适应各种应用(如供应链管理和金融技术)的工程工作。

======================================================================

分享一些比特币、以太坊、EOS、Fabric等区块链相关的交互式在线编程实战教程:

  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
  • c#比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在C#代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是C#工程师不可多得的比特币开发学习课程。
  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • ERC721以太坊通证实战,课程以一个数字艺术品创作与分享DApp的实战开发为主线,深入讲解以太坊非同质化通证的概念、标准与开发方案。内容包含ERC-721标准的自主实现,讲解OpenZeppelin合约代码库二次开发,实战项目采用Truffle,IPFS,实现了通证以及去中心化的通证交易所。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • EOS入门教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • 深入浅出玩转EOS钱包开发,本课程以手机EOS钱包的完整开发过程为主线,深入学习EOS区块链应用开发,课程内容即涵盖账户、计算资源、智能合约、动作与交易等EOS区块链的核心概念,同时也讲解如何使用eosjs和eosjs-ecc开发包访问EOS区块链,以及如何在React前端应用中集成对EOS区块链的支持。课程内容深入浅出,非常适合前端工程师深入学习EOS区块链应用开发。
  • Hyperledger Fabric 区块链开发详解,本课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、通道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、nodejs链码与应用开发的操作实践,是Nodejs工程师学习Fabric区块链开发的最佳选择。
  • Hyperledger Fabric java 区块链开发详解,课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、频道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、java链码与应用开发的操作实践,是java工程师学习Fabric区块链开发的最佳选择。
  • tendermint区块链开发详解,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。

汇智网原创翻译,转载请标明出处。这里是比特币的学术谱系