这是一篇译文转载。

每次我向那些不熟悉比特币的人解释比特币的独特之处的时候,我都会用会计学上的总账和拜占庭将军问题来帮助讲解。此文就是帮助讲解的内容,有Q了此文我就可以把链接发给小伙伴们,而不需要每次都重新打一大堆字了。

首先,不要把比特币当成一种货币,而是一个总账。它是个电子总账,网络上的每一个参与者的电脑都会有一份总账的备份,并且所有的备份都是在实时的持续的更新、对账、以及同步着。每一个参与者都能在这本总帐里记上一笔,这一笔记录着一定数量的币从一个参与者那里被发送到另一个参与者那里,并且每一条这样的记录都接着就实时的广播到网络了,所以在每一台电脑上的每一分份拷贝都是几乎同时更新的,并且所有的总账拷贝都保持着同步。这本公开的分布式的总账的官方叫法是“区块链(blockchain)”,并且它使用了BT技术以保证所有的拷贝都是同步的。

你还可以把比特币当作一个对于在分布式系统领域的一个复杂的算法难题的通用解决方法,这个难题俗称“拜占庭容错”、“拜占庭将军问题”、或者“两军问题”。

这一问题的趣味非正式表述如下:想象一下,在拜占庭时代有一个墙高壁厚的城邦,拜占庭,高墙之内是它的邻居想象不到之多的财富。它被其他10个城邦所环绕,这10个城邦也很富饶,但和拜占庭相比就微不足道了。它的十个邻居都觊觎拜占庭的财富,并希望侵略并占领它。

但是,拜占庭的防御是如此的强大,没有一个相邻的城邦能够成功入侵。任何单个城邦的入侵行动都会失败,而入侵者的军队也会被歼灭,使得其自身容易遭到其他九个城邦的入侵和劫掠。这十个城邦之间也互相觊觎对方的财富并持续互相对抗着。而且,拜占庭的防御如此之强,十个邻居的一半以上同时进攻才能攻破它。

也就是说,如果六个或者更多的相邻敌军一起进攻,他们就会成功并获得拜占庭的财富。然而,如果其中有一个或者更多背叛了其他人,答应一起入侵但在其他人进攻的时候又不干了,也就导致只有五支或者更少的军队在同时进攻,那么所有的进攻军队都会被歼灭,并随后被其他的(包括背叛他们的那(几)个)邻居所劫掠。这是一个由不互相信任的各方构成的网络,但他们又必须一起努力以完成共同的使命。

而且,是个邻居之间通讯和协调统计时间的唯一途径是通过骑马在他们之间传递信息。他们不能聚在一个地方开个会(所有的王都不互相信任他们的安全在自己的城堡或者军队范围之外能够得到保障)。然而,他们可以在任意时间以任意频率派出任意数量的信使到任意的对方。每条信息都包含类似如下的内容:“我将在第四天的6点钟进攻,你愿意加入吗?”。

如果收信人同意了,他们就会在原信上附上一份签名了的/认证了的/盖了图章的/验证了的回应,然后把新合并了的信息的拷贝再次发送给九个邻居,要求他们也如此这样做。最后的目标是,通过在原始信息链上盖上他们所有十个人的图章,让他们在时间上达成共识。最后的结果是,会有一个盖有十个同意同一时间的图章信息链,可能还会有一些被抛弃了的包含部分但不是全部图章的信息链。

但是,问题在于如果每个城邦向其他九个城邦派出一名信使,那么就是十个城邦每个派出了九名信使,也就是在任何一个时间又总计90次的传输,并且每个城市分别收到九个信息,可能每一封都写着不同的进攻时间。除此以外,部分城邦会答应超过一个的攻击时间,故意背叛发起人,所以他们将重新广播超过一条的信息链。这个系统迅速变质成不可信的信息和攻击时间相互矛盾的纠结体。

比特币通过对这个系统做出一个简单的(事后看是简单的)修改解决了这个问题,它为发送信息加入了成本,这降低了信息传递的速率,并加入了一个随机元素以保证在一个时间只有一个城邦可以进行广播。它加入的成本是“工作量证明”,并且它是基于计算一个随机哈希算法的。哈希是一种算法,它唯一做的事情就是获得一些输入然后进行计算,并得到遗传64位的随机数字和字母的字符串,就像这个:

d70298566aa2f1a66d892dc31fedce6147b5bf509e28d29627078d9a01a8f86b

在比特币的世界中,输入数据包括了到当前时间点的整个总账(区块链)。并且尽管单个哈希值用现在的计算机可以几乎即时的计算出来,但只有一个前13个字符是0的哈希值结果可以被比特币系统接受成为“工作量证明”。这样一个13个0的哈希值是极其不可能与罕见的,并且在当前需要花费整个比特币网络大约10分钟的时间来找到一个。在一台网络中的机器随机的找到一个有效哈希值之前,上十亿个的无效值会被计算出来,这就是减慢信息传递速率并使得整个系统可用的“工作量证明”。下面是一个例子:

f51d0199c4a6d9f6da230b579d850698dff6f695b47d868cc1165c0ce74df5e1

d70298566aa2f1a66d892dc31fedce6147b5bf509e28d29627078d9a01a8f86b

119c506ceaa18a973a5dbcfbf23253bc970114edd1063bd1288fbba468dcb7f8

在找到一个有效值之前,成百万上亿个更多的类似上面这样的字符串被计算出来。。。

000000000000084b6550604bf21ad8a955b945a0f78c3408c5002af3cdcc14f5

那台发现下一个有效哈希值的机器(或者说在我们类比中的城邦),把所有的之前的信息放到一起,附上它自己的,以及它的签名/印章/诸如此类,并向网络中的其他机器广播出去。只要其他网络中的机器接收到并验证通过了这个13个0的哈希值和附着在上面的信息,他们就会停止他们当下的计算,使用新的信息更新他们的总账拷贝,然后把新更新的总账/区块链作为哈希算法的输入,再次开始计算哈希值。哈希计算竞赛从一个新的开始点重新开始。如此这般,网络持续同步着,所有网络上的电脑都使用着同一版本的总账。

与此同时,每一次成功找到有效哈希值以及区块链更新的间隔大概是10分钟(这是故意的,算法难度每两周调整一次以保证网络一直需要花费10分钟来找到一个有效的哈希值)。在那10分钟以内,网络上的参与者发送信息并完成交易,并且因为网络上的每一条机器都是使用同一个总账,所有的这些交易和信息都会进入遍布全网的每一份总账拷贝。当区块链更新并在全网同步之后,所有的在之前的10分钟内进入区块链的交易也被更新并同步了。因此分散的交易记录是在所有的参与者之间进行对账和同步的。

最后,在个人向网络输入一笔交易的时候,他们使用内嵌在比特币客户端的标准公钥加密工具来同时他们的私钥以及接收者的公钥来为这笔交易签名。这对应于拜占庭将军问题中他们用来签名和验证消息时使用的“印章”。因此,哈希计算速率的限制,加上公钥加密,使得一个不可信网络变成了一个可信的网络,使得所有参与者可以在某些事情上达成一致(比如说攻击时间、或者一系列的交易、域名记录、政治投票系统、或者任何其他的需要分布式协议的地方)。

这里是比特币为何如此特别的关键:它代表了一个对于一个困难的算法上的难题的解决方案,这一解决方案在一系列的历史事件发生之前是不可能的,这些事件有:

互联网的创造

公钥加密算法的发明

点对点Bitorrent(BT)协议的发明。BT协议最开始是开发来用于在网络上的相对小的用户子集之间共享许多文件的,但比特币用它来在所有用户之间共享单个文件。

人们意识到,在系统中添加一个简单的时间延迟,同时使用公钥加密算法以验证每笔交易,可以解决这个问题。

如果说一些最棒的想法在事后看来是很简单的,那么上述的第四点就完全符合条件,尽管整个项目是站在了巨人的肩膀上的。

最后,这一对于拜占庭将军问题的解决方案,可以推广到任何核心问题是在分布式网络上缺乏信任的领域。如我们已经提到乐的,人们正在为互联网建设一个分布式的域名系统,以及为政治选举建设分布式的投票系统(还没有网站)。如果人们认为单纯的文件分享搅乱了这个世界,那么比特币解决方案和协议才刚刚打开洪水的闸门。

比特币的规模需要扩大1000倍才能和Visa竞争。我们该怎么做。

比特币的核心组件叫做“区块链Blockchain”,它是一个全球共享式的记录着每一笔曾经发生过的比特币交易的文件。它的名字源自平均每10分钟P2P的比特币网络就会添上一个新的收纳了最近的交易记录的“区块Block”。

这一区块链是参与到一个叫做“挖矿mining”的交易结算过程中的数量巨大的计算机中所共享的。为避免这些计算机过载,比特币软件在目前限制每个区块的最大尺寸在1MB。结果是:目前,比特币网络每秒只能处理大概7笔交易。相较之下,Visa网络的设计目标是可以处理峰值每秒10000笔的交易。

到目前为止,这还不是个大问题,因为比特币用户们现在每秒大概只生成一笔交易。但如果比特币经济持续增长,上面说的那个限制早晚会成为一个麻烦。

比特币网络可以进行修改,以应付将来可能出现的比现在高得多的交易量吗?为了找到问题的答案,我和著名比特币开发者Mike Hearn聊了聊。他帮助我了解了当前比特币系统性能的限制,以及比特币开发团队关于如何解决这些问题的计划。

Timothy B. Lee(作者): 你可以简单的讲讲一下当前比特币网络对于可以容纳多少笔交易的限制吗?

Mike Hearn: 现在市面上存在着两种比特币客户端:“完全节点”和“轻节点”,后者我们又称作简化支付验证(SPV)节点。轻节点不关心区块的尺寸有多大,而完全节点有个硬性的物理尺寸限制(也就是每个区块最大1MB)。

所以每10分钟1MB,除以每笔交易记录的平均尺寸,我们可以得出当前的限制大概是在每秒7笔交易。

p1

比特币每日交易笔数。现在理论上的限制大概是每天600,000笔交易。

我们现在距离那个限制有多远?

如果你看过那个每天交易数量的图,就会知道我们当前交易数量的峰值是每日70,000笔。我们现在甚至都还没到每秒一笔交易(也就是每天86,400笔交易)的程度。数值在增长。它增长的很好很快。如果你画出一张整体图的话,就可以看到它有个漂亮的小指数斜率。我们距离那个限制还有相当长的一段距离。因为各种各样的原因,这也说不好。但我们目前完全不用担心容量用完这回事。

如果想要提供超过每秒7笔的处理能力,会有些什么要求?

我们只需要拿开那个限制,并让人们更新他们的节点就行了。我们还没有做这件事情的原因是,我们还在想办法搞清楚究竟是换一个新的限制还是完全不要加限制好了。如果不加限制的话,我们如何保证没有人会故意制造一个让人们感觉讨厌的臃肿区块。

Gavin(指Gavin Andresen,他是比特币的头号开发者)正在为这个事情做一些准备性的工作。他现在正在改造收费系统。我们的设计目标是在将来不对区块尺寸设任何限制,但默认情况下矿工们将拒绝处理那些大到离谱的区块。

你可以解释一下比特币交易费是如何运作的吗,以及为什么这个系统需要它们?

在比特币世界里,你可以在任何一笔交易上附上一笔交易费(是指一笔付给处理这笔交易的矿工的报酬)。在最开始比特币还是个新生事物的时候,所有的交易都是免费的,并且随着时间的流逝规则也有所调整,所以你还是可以发送不付费的交易,但它们会的处理速度会比较慢。交易费充当着一个阻止虚假交易泛滥于网络上的限流器。如果每笔交易都是一直免费的,你会看到人们有事没事就把比特币来来回回发送着玩。

现在我们遇到的主要麻烦是,贯穿全网的交易费设定和协商机制非常基础。费率不是真正的被协商出来的。最低费率是Gavin在不到一年前决定的。当时比特币的价格比现在要低得多。因为这一数值是固定在软件中的,它们不是依美元而定,而是依比特币而定。所以比特币系统在没有良好的理由的情况下,交易成本变高了。Gavin正在研究怎么对那个机制做出改变。

节点将可以观察到广播到系统上的交易,之后他们会看看交易要花多少时间。所以他们会说“如果你想要你的交易在三个区块之内就被处理,你就得付这么多的交易费。”这个想法是矿工可以根据自己的意愿设定交易费。我希望的是,如果其他事情也一切顺利的话,交易费将明显的降低。

当我在2011年开始使用比特币的时候,我的比特币软件花了一天的时间来下载从2009年起源开始到2011年的所有比特币交易记录。到了2013年,如果客户端连续几天没有开启运行的话,它每次启动就得花几个小时来赶上最近几天的交易记录的进度。这个问题会不会在未来随着网络日益繁忙而变得越来越严重?

终端用户不再需要运行这个软件(也就是那个会把整个区块链文件下载下来的软件)了。我们一直都在做的事情之一,就是让用户们不再使用Bitcoin-Qt,也就是你用的那个(下载整个区块链文件的)软件,而改用其他像Multibit这样的客户端。Multibit将可以在几秒钟之内和区块链完成同步。(搞定上面那个事情)曾经是个大麻烦。如果你有一台一直都在运行着并连接到互联网的计算机,那么你可以通过运行(那个完整版的比特币客户端)软件来帮助整个系统的运行,但如果你只想使用它,那么你就可以选择使用这种更轻量级的软件。(译者写了个迁徙的教程,链接见此)

轻量的程度也有所不同,在2011年的时候,可选项只有Bitcoin-Qt或者网络钱包。从那以后,我们开发了一些中本聪(比特币的创造者)在他的原始论文里面描述的东西。相较于Bitcoin-Qt,它使用了一个相对稍弱的信任模型。在SPV(译者注:简化支付验证)模型中,通过像Multibit和Hive这样的客户端,它仍然扫描整个区块链,并且它假设“拥有大部分矿工的那条区块链就是正确的那条”。而不是验证所有的内容,它只是相信大部分的矿工都是诚实的。它仍然是P2P点对点的。不存在一个告诉你该做什么或者你的结余是多少或者其他东西的中央服务器。只要大部分矿工是诚实的,那么它就能顺利运作。

基本上来说,一个SPV模型拥有一个清单,清单列着的是已经知道是存在于几个月前的最佳区块链上的区块,并随后就只下载区块的一小部分。它下载区块的头部信息,并接着下载相关的交易信息。它连接到一个随机的(在比特币网络上的)节点。SPV客户端并不做出直接的查询。取而代之的是它会上传一个叫做有噪音Bloom过滤器(译者注:Bloom过滤器是以在1970年发明了它的Burton Howard Bloom先生命名的,更多内容请看此链接)的东西,这是个钱包(也就是SPV客户端)需要的看起来像乱码的东西。节点发回一些区块链的子集。SPV客户端会做一些数学上的防伪检查以确保这些东西不是节点伪造的。

所以如果普通用户开始使用SPV客户端而不是完全版的比特币客户端,那对比特币网络的架构会有什么影响呢?

老实讲,我们还没有很好的度量标准。现在网络上有成千上万个的节点。但所发生的事情是,随着时间的推移,网络结构正在改变。节点的组成上来看,在家里运行的临时节点逐渐减少,而运行在数据中心的长期节点日益增加。

现在租用服务器是非常廉价的。虚拟化技术使得它变得很便宜。所以对于有工作需要运行自有服务器的个人来讲,在服务器上面运行一个比特币节点是完全可行的。完整节点的确会给你带来更好的安全性。举个例子,如果你在运营着一家线上商店,运行一个完整节点是很有意义的。这真的很便宜,反正你的计算机不管怎么样都是要运行着的。

从我们最喜欢的老牌网站到最新近的移动应用,我们日常使用的很多创新技术都要归功于其背后的技术性很强的协议们的存在。终端用户对于这些协议的了解程度,不需要比司机对汽车引擎的工作原理了解的更多。然而,政策制定者们为了推动免许可的分布式创新——也就是由很多独立的个人和创业公司所发起的创新——需要去理解这些协议的重要性。举个例子,超文本传输协议(HTTP)是用来让浏览器可以和网站服务器进行“对话”的——只要服务器实现了这个协议,它就能向任何一个浏览器提供创新的内容或者服务。HTTP本身是建立在许多其他较低层次的协议之上的,比如说DNS和TCP/IP协议。从历史上来看,协议要不是出自研究项目,要不就是出自个人或者小群体。在关于比特币的争论中,理解比特币有潜力成为一个可以开启许多新的创新的协议这一情况,是很重要的。

比特币的核心是一个根本性的创新:一个分布式的公共总账。从会计上来讲,总帐是一本你一旦做出编辑就不能再修改的书。如果你犯了个错,唯一的弥补方法就是在总账上再添加一笔用以撤销那个错误的交易。我们从会计欺诈中可以知道,当有人想出一些法子,使得他们可以不再总帐上做出记录的同时完成交易,或者在时候篡改总账记录(这也是为何Quickbooks 不是真正的属于会计系统)。比特币的总账被叫做“区块链”,区块链有很多份的拷贝并且广泛的分布在世界各地,同时还联合了相当够分量的数学知识,以保证一笔交易一旦被收录到区块链中就没有办法被修改了。当今世界上还没有其他的被广泛使用的协议达到了这样的效果:通过比特币,任何人都可以作出一个声明(一笔交易)并把它记录在一本全世界每一个人都可以看到的且不可修改的总账里面。

为何这个很重要?因为事实证明,可以记录在比特币总账的交易,内置了很多的以脚本语言的形式表现出来的表达能力。这使得某些类型的合约可以建立在比特币之上,从存款到中介再一直到分布式的股票交易。比如说,有一个叫做“色彩币”的提议,它允许额外的数据被附着在比特币之上,并可以在之后的所有交易中都保持两者的关联。举个例子,当区块链成为一间公司的股票份额所有权的完全分布式的公共总账的时候,那些数据就可以代表那家公司的股票的份额(这可能用于取代仍然被大部分创业公司所使用的物理证明或者独立的托管服务)。因为脚本语言的存在,这本总账是事实上智能的,并且一旦股票份额以那种方式被呈现,构建自动化版本的衍生品合约也就变得可能。

这只是比特币作为一种协议可以在金融服务业开启的创新的一些例子。除此之外,比特币协议还有潜力可以以一种全球分布式的方式解决其他的问题,比如说如何分配和管理唯一的名字(参见Namecoin计划)。随着各种机构开始考虑对比特币的监管,在对消费者的保护以及对(有组织的)犯罪的执法,和维护比特币协议成为一种根本性的创新推动者的潜力之间取得一个平衡,是非常重要的。

说到开源协议,比特币的独特之处之一在于它的协议极难做出调整。不像其他的协议,特性可以在一瞬间就完成增加、修改、或者废弃的动作,在比特币的世界里,就算是最轻微的改动也需要整个比特币网络中的绝大多数同时合作。原因很简单:比特币世界,并且只在比特币世界,要求完全的共识。在像HTML和CSS这样的因特网协议里,如果一个网页浏览器错误的解析了一些样式元素,能发生的最糟糕的情况也就是页面渲染不正确。而在比特币这,单单一笔交易被错误的判断成有效或者无效就会让整个块失效,并可能像2013年3月的那次那样,引起整个网络的一分为二。所以,中本聪在2008年做出的绝大多数决策我们都坚持着。尽管中本聪的选择绝对不是完美的,但幸运的是他正确的次数经常比错误要多;事实上,有几个实例,因为中本聪的选择我们获得了更好的结果,而更好结果的原因可能中本聪自己都没想到过。

比特币地址是公钥的哈希值

比特币有有趣的方面之一(对很多人来说可能最开始都有点迷惑),是私钥和比特币地址直接的精准的关系。你把交易发送到一个“比特币地址”,并且声明这笔花出去的交易需要一个相对应的“私钥”的签名。但这两个值之间的关系是怎么样的呢?在一个普通的公钥签名系统里面,步骤如下:

p2

有一个产生密钥对的算法,密钥对由一把公钥和一把私钥所组成,这样私钥可以用于为消息生成签名,公钥可以用于验证那个签名。这样的意义是什么?一般来讲,私钥的持有着希望证明他们亲自写出了或者授权了一条特定的消息。如果除了私钥持有着之外的某个人想要制造一个签名,那么和相对应的公钥的验证就会失败。如果消息在传输过程中被修改,验证同样也会失败。人们可以看到这个机制可以如何的在像比特币这样的货币中被使用:每个人公开他们的公钥,从A发送到B需要A用他的私钥签名一条包含了B的公钥的消息。自此,协议可以推断A想要发送一笔钱给B。

然而,比特币是更加复杂的。比特币的地址不是公钥,而是公钥的哈希值。哈希是一个函数,它可以把任何东西都做输入,并产生一个固定长度的输出,并且此流程基本上不能被反转过来。也就是说,给出一条消息M,计算M的哈希值(hash(M))是很容易的,但给出hash(M)想要找到M却是直到世界毁灭也不大能完成的事情。比特币的私钥和地址的关系如下:

p3

所以交易是如何工作的呢?除了除了关于交易本身的明显信息以外,一笔比特币交易包括了两个东西:花费者的公钥、以及用花费者的私钥做出的签名。任何一个验证这笔交易的人都需要检查:(1)这个公钥的哈希值是花费者的地址;(2)签名可以用公钥验证通过。把它们放到一起,这些就是交易是由相对应与花费者的地址的私钥的拥有者自己(或者授权他人)进行的。

这点的意义平凡到让人惊讶:在比特币使用的椭圆曲线数字签名算法加密系统里面,一个公钥有512位长度,意味着它需要接近100个字符来呈现。举个例子,下面是一个公钥:

04b52fd5a616a8f08ccad58469102f86fc7891e5aa4262ab8d43e41767c17d45b

80850044a62af51783609176daf02fc46221057a8de11ee6ae8743065b27a4b5e

与此同时,它对应的十六进制形式的比特币地址如下:

4b463093e6fc3135a4de2ff577c4b658198777a9

人们更加熟悉的base58编码形式的是:

1obodiqhAZ3GD9onBXRZ9v7hshkuBreCu

然而,在现实里,。最后发现,有一种以更紧凑的形式编码公钥的方法,只需要257个字节(译者注:这里好像有点问题,应当是257位,参见此文http://618.io/blog/2013/07/30/bitcoin-basic/):

03c5c9833d00bed3211a5f3733316ecf6ebc407806d70caa14862f1e2e8c2f852d

如果我们决定把它变成base58编码的形式:

15sqRCowBDTfyuxPQD3ba8sN3wBB8MwGbo6gsBEGeKmUbNQADGh

比我们如今使用的地址也没长多少。所以中本聪的选择只是带来了不必要的复杂度和浪费吗?最后证明,答案是否定的。有另外一个非常好的理由去使用这个“公钥的哈希值”的地址结构:量子加密技术。量子计算机可以破解椭圆曲线数字签名算法(也就是说,给定一个公钥,量子计算机可以相当快速的找到对应的私钥),但它们不能相类似的逆转哈希算法(或者说他们可以,但是将需要花掉280个步骤来完成一个比特币地址的破解,这仍然是相当不可行的)。因此,如果你的比特币资金存放在一个你没有支出过的地址里(这意味着公钥是没有公开的),它们在量子计算机面前也就是安全的,至少在你把它们花掉之前。有理论上的途径可以让比特币完全免于量子计算机的威胁,但一个地址只是一个公钥的哈希值的事实,意味着一旦量子计算机真的出现了,在我们全面切换之前攻击者可以造成的损失要小得多。

2100万总币数的限制

比特币有争议的属性之一就是它的固定的供应量。当前每10分钟又25个新的比特币被生产出来,并且这一数字每4年减半。总的来讲,不会有超过2100万个比特币的存在。另一方面,每个比特币可以被划分成1亿份(每份叫做1“聪”),如果一美分都足够买辆车的话,用美元来交易就麻烦重重了,但比特币就算升值到和上面假设的美元的状况,也不会遇到那样的问题。因此,总之,将永远存在的货币单位的总数字是2,100,000,000,000,000,也就是2100万亿,或者说250.899。在选择这个数值的方面,中本聪比大多数人意识到的要幸运的多或者说聪明的多。首先,这个数字远小于264-1,这是一台计算机里面可以以标准整数形式存放的最大整数,超过那个值的话,数值将像里程表那样归零。

其次,然而,还有一个总“聪”数要设法低于的更小的阈值:可以用浮点的格式表示的可能的最大整数。整数不是计算机可以存储的唯一一种数字;为了处理小数,计算机使用一种做浮点表示法的格式。浮点表示法本质上就是一个科学记数法的二进制版本。举个例子,下面是一个在你学习物理学的时候会遇到的值:

地球的质量: 5.972 * 1024 kg

太阳的质量: 1.989 * 1030 kg

光速: 2.998 * 108 m/s

一光年: 9.460 * 1015 m

质子的质量: 1.672 * 10-27 kg

普朗克长度: 1.616 * 10-35 m

我们可以注意到,科学记数法是如何使得你可以在合理的精度下表示所有的这些数值,尽管它们的大小相差极大。浮点表示法本质上就是二进制的科学记数法;当你存储数字9.625的时候,你的计算机存放的是“1.001101 * 1011”(或者说,它存放的是01000000 00100011 01000000 00000000 00000000 00000000 00000000 00000000,这是高精度序列形式的同样一回事)。在这个高精度形式中,系数(也就是不是指数的那部分)有52位(52bits)。这意味着高精度(更加精确的说法是“双精度”)浮点数足以存贮高达253的数字,但不能再高了,如果超过了,你就得开始砍掉末尾的数字。比特币的250.9这一以指数形式表现的总“聪”数,刚好低于这个最大值。

如果我们有了整数,我们为什么还要关心浮点值呢?因为更多的高阶编程语言(比如说Javascript)并不开放低阶的“浮点”和“整数表示法”,而只给程序员提供“数”的概念 – 当然以浮点的形式提供。如果中本聪当时选择了2亿1千万而不是2100万这个值的话,用很多语言里比特币编程就会比现在要麻烦得多了。

注意,Stefan Thomas不幸的在他写BitcoinJS的时候没有及时留意到这个,以至于那个库使用了一个专门的‘大数big number’对象,而不是一个普通数来存储教程输出值;我自己分叉的的BitcoinJS(同时还加入了其他的改进)使用了普通数。

选择正确的椭圆曲线

椭圆曲线加密算法不是一个单独的标准化的加密 消息的方法;事实上有许多不同的“曲线”可供选择。要想理解不同的“曲线”是什么,首先对椭圆曲线加密算法背后的数学原理有一个基本的了解是很有帮助的。总的来讲,一条椭圆曲线是由等式y2 = x3 + ax + b(a和b都是曲线的参数)上的一系列的点(x,y)所组成。

椭圆曲线加密算法依赖于叫做“点加”和“点乘”的在曲线上的运算。

简单讲,想要把P和Q两点相加,就在两点之间画条线,找到这条线和曲线相交的第三个点,然后从那个点话垂直线以得到你的答案。然而,这些曲线有个弱点:它们是不精确的。如果你进行了多次的点加,浮点四舍五入带来的差错就会慢慢的累积,并最终导致结果成为一个没有意义的噪音。因此,椭圆曲线加密算法用了一条修改了两个地方的椭圆曲线。首先,等式现在是 y2 = x3 + ax + b + kp,k可以使任何整数而p是大的素数(除了a和b的曲线参数)。其次,x和y必须是整数。尽管最后出来的结果几乎不是一条“曲线”,但也在数学上够用了,并且限制在整数避免了四舍五入带来的偏差。

有许多不同的曲线参数可以被使用;SEC2文档就提供了一个标准的。然而,一般而言,曲线会被分成两类:“伪随机”曲线以及Koblitz曲线。在一条伪随机曲线里,参数a和b是从某个“种子”通过一个特定的算法(本质上是哈希运算)来选择。对于secp256r1(这是标准256位伪随机曲线)来说,它的“种子”是c49d360886e704936a6678e1139d26b7819f7e90,产生的参数是:

p = 115792089210356248762697446949407573530086143415290314195533631308867097853951

a = 115792089210356248762697446949407573530086143415290314195533631308867097853948

b = 41058363725152142129326129780047268409114441015993725554835256314039467401291

一个显眼的疑问:这个种子是怎么来的?为何这个种子不是其他某个看起来更加单纯的数字,比如说15?最近揭露的关于美国国家安全局颠覆加密标准的消息中,一个很重要的点就是说这个种子是以某种方式精心选择的,为了以某种只有国安局知道的方法来弱化这条曲线。谢天谢地,回旋余地不是无限的。因为哈希函数的特性,国安局不能先找到一条“弱”曲线然后再去确定种子;唯一的攻击途径是尝试不同的种子,直到最后有一个种子产生了一条“弱”曲线。如果国安局知道知道一个只能影响一条特定曲线的椭圆曲线的漏洞,那么伪随机数参数的产生流程将阻止他们把那个漏洞标准化推广到其他曲线。然而,如果他们发现了一个通用的漏洞,那么那个流程也就不能提供保护了。我们都知道,c49d360886e704936a6678e1139d26b7819f7e90有可能是美国国家标准技术局尝试过的第10亿个种子。

幸运的是,比特币使用的不是伪随机曲线;比特币使用了Koblitz曲线。比特币的secp256k1的参数如下:

p = 115792089237316195423570985008687907853269984665640564039457584007908834671663

a = 0

b = 7

就是这样。并且甚至p都是很容易得出来的;它只是2256 – 232 – 977(公平的说,p和a在secp256r1里面也是相当简单的;它的问题出在b)。这些参数的简约,使得国安局和国家标准技术局没有精心创造一条邪恶曲线的余地。并且甚至0、7、还有977这些数值的采用都是基于安全和效率的考虑而采用的。当Dan Brown,他是高效密码学组标准的现任主席,被问及此事时,他回复说:“我不知道比特币正在使用secp256k1。确实,我对于有人会采用secp256k1而不是secp256r1感到惊讶。”如果secp256r1是事实上的被破解了,那么因为比特币是为数不多的几个采用secp256k1而不是secp256r1的程序,比特币真的是躲过了一颗子弹。

之前写的两篇文章还没有触及比特币的真正意义——也就是“媒介即讯息”的意义上,比特币作为一种新的“环境”的意义。

之前提到比特币的通缩特性、防伪特性等等,这也只不过是在说,它比之前的货币更好。但真正重要的并不是这些能够以同样的标尺衡量的特性,而是它对旧媒介或者说旧环境的颠覆——汽车不仅仅是更快的马车,而且还要整个重构所谓“交通”的环境,改写“出行”的意义。

那么比特币的颠覆性在哪里呢?

有人说比特币的头号特性是匿名性,这种理解和把互联网的特性理解为匿名性一样是错误的。事实恰恰相反,比特币能够最大程度地支持完全公开透明的交易。其匿名性只是体现在,每个人都可以开设无数个地址用于收款,而每一个地址只是一串无意义的字符。但是,每一个地址之间的每一笔交易,都是公开的,从比特币上线以来的每一笔交易,统统都保存在每一个比特币使用者的钱包中,每一个比特币从诞生起的每一次流转都被记录在案,事实上所谓的比特币实质上就是这一公开的记账系统。

那么只要知道交易链条中的某一个环节究竟是谁,而这个人又愿意说出他的交易对象是谁,那么这样顺藤摸瓜,我们有可能把这个币从诞生以来的每一个拥有者都追查出来。而纸币根本没有这种功能,在这个意义上,纸币才是匿名的货币,它的交易链条不是公开透明的,也难以追索钱的流向。

例如壹基金开通的雅安地震比特币捐款渠道,我们可以在网上看到他的这个账户的每一笔进账和出账,我现在看到它总共收入235个币,除非比特币的数学体系整个崩溃,否则无人可以造假。就现在而言,比特币捐款需要找人兑换成人民币才能支援给灾民,但是如果受惠者也都开通了比特币账号,那么这个账户的每一笔出账究竟送到谁的手里,也都将完全公开透明,如果我愿意公开我所拥有的比特币账户,那么一旦你宣称已经把捐款送到了我的账户上,那么这件事情一定是所有人都能看到的,几时几分给谁汇了几块钱,一目了然,无人可以作假。不需要第三方的监管机构来时刻观察,所有人都可以观察,只要你愿意宣称公开透明,那就一定能够公开透明。

基于比特币的特性,至少是大部分现存的审计和监管的工作,都不再必要了,财务的信用不再需要一个特权的机构来保护,而是由一个开放的交往纽带来保障。

的确,比特币超越了国家的监管,因此在现阶段,它似乎经常被用于地下交易。然而比特币逃离的只是国家或任何单一的权力机构的监管,但它最终将把监管置于光天化日之下。之所以比特币能够用来洗钱,并不是由于比特币的匿名性,而是由于纸币的匿名性——因为用纸币和比特币相互兑换的环节中,纸币的提供者并不在乎比特币的来源是谁。被洗钱的并不是比特币而是纸币。然而,如果人人都使用比特币,比特币本身是难以洗钱的,至少不会比纸币更容易。

归根结底,比特币不是逃脱了监管,而只是逃脱了国家的监管,但在每一个流通的小圈子中,比特币的流向受到每一个参与者的监督,每一个人或机构想要在公众面前取得信誉,不需要仰仗国家或银行的担保,不需要服从于某个上级的管理,而只需要自己开诚布公就足够了。比特币用P2P的网络式监管取代了自上而下的线性监管。

同时,比特币的发行也完全绕开了国家。许多质疑比特币的人提到的第一点往往就是比特币缺乏国家权威的保障。的确如此,但是,我们究竟期待国家给予什么保障呢?国家首先能够保障的是可以不断印钞票,可以随时“刺激消费”,逼迫你把钱花出去保障钱总是在贬值。但这种保障究竟保障的是什么呢?他保障的是企业家和金融家,那些富人们维持着极高的资金周转速度,他们即便手持大量现金,也仍然会大量贷款,就像苹果公司正在做的那样,即便有那么高的现金储备,他也还是不惧怕货币贬值,他的贷款和涨价的产品将会抵消货币贬值造成的损失。简而言之,货币贬值的保障保障的是那些引领着货币流动的人,但普通的老百姓和工薪族呢?他们的资金周转要慢得多,现在收入的钱很可能需要为十几年后的养儿或防老作准备,即便健全的社会保障部分消解了这些未雨绸缪的筹划,普通人也总是难以像大鳄们那样驾驭资金的流转。一旦货币贬值,存款和工资大幅缩水的时候,工薪阶层又能指望谁来保护自己呢?

是的,国家能够保障货币的法律地位,也就是说,再怎么贬值,货币都是法定有效的。这意味着什么呢?当发生津巴布韦或金圆券那样剧烈贬值的情况时,它们也仍然是法定有效的货币,即便你上午领到的工资到了下午就将跌去十倍,你也不得不接受它们,因为法律保障了它们的有效性。善良的企业家也许会转而使用外汇或金银来支付工资,但如果他们仍然坚持给你金圆券,那你也无话可说,因为这是国家保障的法定货币。

一个最高的中央权力机构的存在让人有某种安全感,但它究竟提供了多少保护,其中有多少未必需要一个中央集权的机构就能够组织起来,又有多少只是单纯的迷信呢?

我们的确需要警察局,需要消防队,需要军队和红十字会。但这些机构的背后必定要有一个中央集权的“国家”来支撑吗?像古希腊那样,不需要大一统的政权,依靠分散的小城邦进行自治行不行呢?当然,你会说此一时彼一时也,希腊社会的交往关系和现代人非常不同了,但如果说网络时代的社会交往关系又将与我们现在大为不同呢?国家的金字塔结构一定是永存的吗?

我一点也没有反党反社会主义,恰恰相反,共产主义的终极理想就是消灭国家。无论马克思的理想是否空幻,他至少认识到了国家只是一个历史性的事物,它并非古已有之,也不会亘古永存。

20世纪的历史似乎证明了完全自由放任主义的市场经济是行不通的,然而这是否意味着市场一定需要由一个中央集权的机构来调控呢?由于依赖中央银行的货币体系的缘故,似乎市场的调控者不得不位于中央,然而这一由央行和各级银行和金融机构形成的金字塔式的货币体系一旦被打破呢?

我们仍然迷信着中心化的神话,我们相信有一群经济学家日理万机地监视着市场并且会适时地采取合理的措施,这就好比古代人相信没有皇帝日理万机就无法保障自家田地的收成那样。的确我们需要“日理万机”,但这未必一定要仰仗一个英明神武的皇帝或一小撮聪明绝顶的经济学家。就像开源软件的运行模式那样,只需要一些较弱的维护者,他们无法暗箱操作或垄断一切,其地位随时可能被其它分支所取代,至于大量的维护、修补和创造性的工作都由整个社区来分担。

政治空间的结构与传播媒介的结构是相应的,口头传统倾向于维系松散的部落组织,文书传统倾向于中央集权的文官制度,印刷术加强了民主,而广播又倾向于独裁……网络时代也将促进其特有的空间结构,即网络。一种去中心化的、互相链接的组织形式将更有优势。

当然,国家仍将存在,但它作为权力中心的管控地位将会淡化,剩下的更多是其文化和历史的意义。比特币将是这种网络社会的里程碑之一,它对资本主义社会的核心——“资本”的运转方式发起了变革,在某种意义上说,比特币使得这种新的政治经济学结构——我们可以称之为“社会主义”——成为可能。社会主义不信任资本家和垄断者,而相信自下而上的、广泛而自由的社群的力量。

比特币出问题了。并且不是浅层的,而是根本性的在核心协议层上的麻烦。我们在这里不是在谈论一个简单的缓冲溢出,或者一个可以被轻松修补上的糟糕API设计;相反,这个问题是整个比特币工作原理所固有的。所有其他的基于比特币理念的加密货币或者方案,包括Litecoin、Namecoin、以及所有灵感来自比特币的其他货币,都出了问题。

特别是在一份我们在arXiv上发表的论文中,Ittaly Eyal和我概述了一种攻击方式,通过这种攻击,少数的矿工就可以获得超出他们应得份额的收入,并且数字不断增长直到他们成了多数。当触及这一时间点时,比特币的价值主张就崩溃了:该货币被单个实体所控制;它不再去中心化;掌握控制权的实体可以决定谁能参与到挖矿中来,以及哪比交易可以被处理,并甚至能够随意回滚交易。这样的雪球般越滚越大的崩溃并不需要一个居心不良的邦德式的坏蛋来启动;它可以作为人们尝试通过挖矿的努力挣得更多的一点钱的共同努力的结果而发生。

传统观点长期以来认为只要多数矿工是诚实的(这里说的诚实,我们是指他们尽职的遵守化名中本聪的那位提出来的协议。),比特币就能安全的抵抗成群的相互勾结的矿工的威胁。我们的论文证明那一说法是错误的。我们证明了,在当下,任何采用我们的攻击方法的节点群组都将成功挣得比他们应得份额更多的收入。我们还证明了一条新的可以让诚实的大多数的声明无效的底线:在最好的情况下,至少要有2/3的参与者节点是诚实的,才能成功抵抗我们的攻击。但取得这一2/3的底线在实践上是很困难的。我们描述了一个容易部署的对协议的实用补丁,只要3/4的矿工是诚实的,就可以抵御攻击。

我们需要比特币社区的帮助以部署这一补丁以使得比特币生态系统能够变得更加强壮,至少可以低于算力低于全网算力25%这一阈值的攻击。但是,就算部署了我们的补丁,也还有一个问题:现在有矿池占据着超过25%的全网算力,并且,在过去曾经有矿池的算力占比超过了全网算力的33%。我们需要比特币社区意识到并共同努力以保证没有矿池能够超过那个阈值。整个系统会进入一个易受攻击的状态的可能性,将阻碍比特币更广泛的为人们所接受。

如果想要一份对这种攻击手法的精确的全解析,你可以直接阅读这篇研究论文,尽管它可能有点洗练且枯燥无味。在这篇文章的余下部分,我们将为非铁杆参与者们勾勒出这个攻击手法,读完全文,任何人都应当能明白我们的攻击手法背后的直觉,添置装备以通过挖矿获得更高的收入,并获取掠夺这种货币所需要的工具。为了达到这一效果,我们需要一点点的关于比特币工作原理的背景知识。如果你对比特币挖矿熟悉,那么你可以跳过下一段对攻击原理的描述。如果你是一名对技术不感兴趣的比特币用户,你可以直接跳过到最后的关于影响的章节。

区块链

比特币成功背后的核心概念是一个用以维持一本全球性的总账的去中心化协议,它被叫做区块链。区块链记录着比特币地址之间的交易,追踪着每一个比特币转手的举动。这样的追踪确保了没有人可以双花(double-spend)一个币,因为总账使得一名用户是否发送出了比他挣得的更多的比特币变得太明显。比特币追踪的特别方式,也使得交易记录不可被变更;一旦一笔比特币交易被处理并收录进了区块链,攻击者就很难逆转那笔交易了,所以商户可以在有信心交易不会被逆转的情况下发出货物。

协议通过一个叫做挖矿的流程来实现。简单讲,总账是由一条有序的区块所组成,每一个区块记录着一系列的交易。每个区块都包含了一个密码谜题,这是一个类似于CAPTCHA的难以计算的挑战。矿工自组织成一个松散的分布式网络,他们都同时在尝试在总账上添加一个新的块。为了做到这个,他们需要找到一个密码谜题的答案,谜题是由从总账初始到新区块被添加上去这段时间的内容所决定的。解决密码谜题是个艰难的工作;电脑必须尝试不同的值,并查看他们是否解决了新区块带来的密码谜题。有的人使用GPU来加速这一流程,同时还有其他人投资在了定制ASIC设备上以解决比特币密码谜题。

当然,这一流程不是义务的,因为解决这些密码谜题耗费电力并需要冷却。为了让比特币变得切实可行,矿工们因为他们的辛勤工作而得到补偿。比特币矿工们通过两个机制获得补偿:他们拿走他们贡献给区块链的新区块里面记录着的交易的交易费,同时他们还拿走一整笔币。这一整笔的币就是新创造的比特币,新创造的币的数量基于一个随时间变化的公式。因此,“挖矿”就类似于挖金矿了——每隔一段时间,一名矿工就挖到了一个金块。密码谜题的难度是自动调整的以保证差不多每10分钟就有一个新区块添加到总账上,这保证了整个系统的比特币产出速率是可以被预测的,这也就阻止了通胀并且使得货币的供应更具可预测性。

密码谜题是如此的高难度所带来的好处在于,攻击者想要修改总账变得很困难。比如说,有人想要从比特币商户那里买点东西,商家发货了,然后改变那个区块,这个任务非常的困难:他们需要为那个区块以及随后的每一个区块找到替代性的答案。难度在于,矿工的主体都会在总账的尾端上努力工作添加新的区块,所以一个攻击者在有限的资源情况下,不能指望会为所有的之前的区块找到替代性的答案并追赶上其他的矿工。

现在的矿工们自组织成一个个叫做矿池的小组。一个矿池通常由一批共同合作的节点组成,他们不论什么时候发现新区块都把收入拿出来共享。矿池有点类似于旅馆的共享小费罐,一名矿工撞大运发现了一个密码谜题的答案并拿到一些收入,类似于一名为一大桌高额消费了的顾客提供服务的侍者。从任何给定矿工的角度来看,挖到矿这件事发生的频率相对不是那么频繁,共享这一流程则可以让矿工对于挖矿收入有更好的预测。

攻击

诚实的比特币协议假设所有的矿工采取的是一个良性的策略,他们快速并如实的分享挖到的每一个区块。直到现在,每个人都假设这是占优策略;没有其他的已知策略能够为矿工带来更高的收入。

我们的文章证明存在着一个叫做“自私挖矿法Selfish-Mine”的替代性测量,可以使得矿池在伤害整个系统的风险之下获得额外的收入。在自私挖矿法中,矿工把他们的区块发现藏在他们自己的矿池中而不公开,并且在恰当的时候把隐藏着的区块向诚实的矿工们公开,以此迫使诚实矿工们的资源被浪费在最后不是区块链的一部分的区块上面。

以下是它在实践中的实现方法。自私的矿工们就如普通矿工们一样的开始挖矿,工作以找到一个可以链到区块链末端的新区块。就像其他的矿工,他们偶尔会发现一个新的区块并领先于其他的诚实矿工。诚实的矿工会立刻公布这个新的区块并使得其他诚实矿工转到最新确立的区块链末端进行挖矿,而自私的矿工把这个区块藏了起来。

从此开始,有两个事情可以发生。自私矿工可能再次走运,发现另一个区块而增加他们的领先程度。他们将领先其他的诚实矿工两个区块。他们继续把新发现的区块藏起来,并继续工作以扩大他们的领先优势。最后,诚实矿工快要赶上自私矿工的进度的时候,自私矿池公布了它的更长的区块链。结果就是所有的诚实矿工的工作都被抛弃了,并且自私矿工从他们之前的隐秘区块链中得到了收入。

关于收入的分析从这里开始变得技术性了,研究我们在论文中提出的算法和状态机是唯一的公正的办法。但最后的结果是,总的来讲自私矿池通过他们在适当时机的公开(之前隐藏的区块),可以让诚实矿池做过的工作无效化。

攻击的成功率,以及它所能产生的额外收入的数量,取决于自私矿池的规模大小。如果该矿池算力占比低于某一个阈值,它就不会成功。但在当前的实现(自私矿工可以即刻获得利润)之下,这样的阈值并不存在。我们提出的补丁如果被全局性的采用,可以把阈值提高到25%。并且,尽管可能还会有其他的补丁,但没有一个补丁可以把阈值提高到33%以上。也就是说至少要有2/3的比特币矿工是诚实的。以上所有的三个发现(0%、25%、33%)都比之前认为的可以保卫这种货币的50%要低得多。

影响

对比特币系统而言,自私挖矿测量有着极其深刻的影响:

自私矿池的成员将比诚实的参与者拿到更多的收入:这意味着理性的利己的矿工(他们通常都在设备上投入了大量的金钱),将会想要加入自私矿工而不是继续遵守诚实策略。

一旦开始并成功,自私矿池的规模将增大:没有任何机制可以对自私矿池施加压力以拆散他们。

自私挖矿对比特币社区是有害的:自私矿工们把每个人都收入都拉低了。自私矿工可以发动攻击,以及一个自私矿池的规模将增长知道它控制了这一货币的事实,对于人们(比如说被比特币去中心化的特性所吸引的Winklevoss兄弟)来说具有相当的威慑力。

这一攻击在当前对于任何规模的矿池都是可行的:任何人都可以在现在成功的发动这样的攻击,并且赚得超过他们应得的收入。

在最好的情况下,比特币也要求至少2/3的矿工是诚实的:之前认为只要多数人是诚实的,比特币生态系统就是安全的。我们的分析说明那一想法是错误的。一个拥有超过全网算力33%的自私矿池,将总是可以挣得超过诚实矿工的收入。

我们提出了一个可用的补丁,只要自私矿池的算力低于全网算力的25%,它就可以保护比特币网络抵御自私挖矿的攻击:这一补丁很容易部署。比特币社区采用它将是个不错的主意。

现在存在着几个可以设想成功发动自私挖矿攻击的矿池:在当下,任何矿池都课程发起成功的攻击。用上我们的补丁之后,之后算力超过25%的矿池可以发动攻击,但现在已经存在着这个规模的矿池了。并且曾经存在过拥有超过33%全网算力的矿池。

FAQ

一些经常被问到的问题:

当一个自私挖矿组织组成的时候,会发生什么?

一旦出现了一群自私矿工,理性的矿工将更愿意加入他们以攫取更好的收入。并且他们的收入将随着组织规模的变大而变得更高。这使得攻击者可以快速的获得多数的算力,而在那个时候比特币去中心化的特性就崩溃了,因为攻击者获得了对所有交易的控制权。

单个矿池控制这一货币的时候,比特币的价值会归零吗?

不。这取决于掌握控制权的矿池如何运营这一货币。但在我们看来对比特币能否为人们所接受的最重要的去中心化特性就丢失了。这对比特币生态系统而言一点也不健康。

这会影响X吗?X是另外一种加密货币。

有可能。它影响着每一个从比特币的区块链概念中获得灵感的货币系统。这包括Litecoin、 PPcoin、Novacoin、Namecoin、Primecoin、Terracoin、Worldcoin、以及其他一堆拥有相似的全局总账概念的货币。

这里的核心发现是什么?

我们是第一个发现比特币协议和激励机制不兼容的。协议可以为自私的人群所玩弄。并且一旦系统脱离了每个人都是诚实的欢乐模式,没有力量可以阻挡一个可以控制这一货币的真正的大型矿池的崛起。

自私挖矿现在正在发生吗?

我们没办法确定,但我们认为还没有。我们的论文是第一份公开研究替代性挖矿策略的文章。

那两个阈值是什么情况?是不是2/3的节点必须是诚实的?还是说是3/4?为什么这两个阈值之间有差距。

在当下,阈值是不存在的。部署了我们提出的补丁(使用并且容易部署)之后,阈值升到25%;也就是3/4的矿工必须是诚实的。可能有人能提出进一步提高阈值的补丁,但我们已经证明阈值不会超过33%。

我们是否可以分辨自私矿池和其他的矿池?

不容易。自私矿池可以通过使用一次性的地址来掩饰它的身份。并且尽管自私矿池揭露它之前隐藏的区块的时候,会看起来会有些不同,但分辨谁是真正的第一个发现区块的矿工很困难,因为几乎同时发生的挖到区块将会以不同的顺序抵达主机。

把这一攻击手法公布于众会不会招致什么危险?

保护这一系统抵御自私挖矿攻击的唯一

途径就是让每个人改变他们当前的实现。所以我们只能通过公布这一潜在的攻击手法来保卫这一系统。我们选择了不自己发动这样的攻击,因为我们关心这一货币的长期可行性。

比特币还可能是一个可行的货币吗?

可能吧。我们已经证明只要自私矿工的算力低于某一个阈值,他们就不会成功。并且尽管目前这一阈值还不存在(因为不论规模大小的自私挖矿都将立马获得收益),我们已经提出了一个可以把阈值提高到25%的补丁。

作者 Vitalik Buterin
原文地址