贡献者: addis
1本文试图在尽量不涉及计算机专业知识的前提下讲解加密货币(cryptocurrency)(也叫数字货币或虚拟货币2)的意义和原理。注意为了方便理解,一些细节描述并不十分严谨,但笔者会尽量用括号或脚注注明,也欢迎指证。本文只从技术上科普加密货币的原理,而这也是学习区块链技术的必经之路(我国政府支持区块链技术的发展)。本文不构成任何投资建议,请严格遵守当地法律和规定。
要特别声明的是,加密货币的缺点十分明显。它可能为电信诈骗、非法交易或绕过外汇管制提供一定的便利,同时对打击犯罪的执法难度提出一定技术考验,或者削弱政府对宏观经济调控的能力等。笔者支持中国政府关于加密货币的一切政策。
相对于数字货币,各国政府发行的货币称为法定货币(简称法币)。法币的出现最早在 1694 年的英国,在此之前的漫长岁月中,人类基本在使用一些天然的物质充当货币,如早期的贝壳,直到黄金。直到今天,黄金仍然承担着货币的角色,各个国家的国库中依然存有大量的黄金作为法币的信用保证。
黄金能作为等价物是大家的共识,但注意它没有任何政府背书3或发行。那么它作为货币时,价值体现在哪里呢?简单来说就体现在它的记账功能。如果人们直接以商品交换商品,效率非常低,因为很难配对到合适的人。黄金或者一般等价物的使用,相当于产生了不可篡改账本,安全地记录每个人所拥有的资源。
黄金使交易更便捷,从而对古代经济发展起到了重大的助推作用。为什么不能用纸和笔记账?因为不安全——陌生人难以辨认真伪,很可能造假,也可能被大量增发。要知道纸币的普及的前提之一是防伪技术的发展。可见要让大家都信任一个中立的记账系统,它必须具有以下特点:
综上,黄金的价值就在于它利用其出色的物理特性,在历史上相当长的时间里充当账本的角色,极大地促进了人类社会的早期发展。需要指出的是黄金这个 “账本” 只记录每人的余额而不计录转账历史,这是又一缺点。
在互联网高度发达的今天,我们是否可以在互联网上建立一个像黄金一样的数字账本呢?只要把以上三点实现得更好,它就可能具有比黄金更大的潜在价值。这看起来容易,实则非常困难,要付出巨大的代价。困难的根源在于,互联网不能储存类似黄金的实物而只能储存数据,而数据是可以完美复制的。如果用一段数据代表一定价值的数字货币,那么其拥有者就可以把它完美复制任意多份发给多个人,而任何人都无法辨别哪些是复制品,所以这种幼稚的方法注定是行不通的。
在了解什么是去中心化之前,你需要先了解一个中心化的记账系统是如何运作的。我们以一个虚构的支付软件——微付宝为例,为了简单起见我们假设微付宝只有一台服务器,也就是所谓的中心服务器。服务器并没有什么神秘之处,你可以想象微付宝公司给一台性能很高容量很大的电脑接了一根网线,并申请了一个固定的网址,互联网上其他电脑都可以通过这个网址跟这台电脑通信。这个中心服务器上面存了一个账本,你可以姑且认为它是一个巨大的 Excel 表格文件5,存在服务器的硬盘中。这个表格具有从微付宝成立以来的所有账户的转账记录。
一开始这个账本当然是空的,第一个客户实名注册了以后,线下给了微付宝一笔现金(简单起见我们假设微付宝仅支持现金充值),微付宝把这笔钱放到公司的保险柜里面,并在服务器表格中给该用户记录一笔收入。任何用户拿着现金来给微付宝充值时,微付宝都如法炮制即可。当用户需要检查自己的账户余额时,他在任何接入互联网的设备的浏览器中输入微付宝的网址,这个设备就会向微付宝公司的那台电脑(服务器)发送一个请求,服务器返回一个登录页面,用户提供账号密码,服务器再返回用户主页……接下来的流程相信无需多言了。要注意的是,任何信息都以储存在唯一一台服务器中的唯一一个账本为准(当然会有备份,但这跟我们的讨论无关),无论用户是通过浏览器网页登录,还是安装了客户端(以下都统称为客户端),它们都会向服务器索取信息,并无条件相信服务器返回的数据并显示给用户。
现在来看转账的过程。当用户 A 在客户端确认了自己的余额后,他给 B 发起了 100 元的转账。这时千万不要认为 A 的手机直接连接到 B 的手机把某种代表 100 元的编号传了过去。实际的过程是,A 在连接到服务器并登录后,服务器通过密码确认了 A 的身份,保持连接。然后 A 向服务器发起一个向 B 转 100 元的请求。服务器接收到该请求,在那个叫做账本的巨大 Excel 表格中,先确认 A 的余额大于等于 100 元,再给 A 的页面添加了一个向 B 转账 100 的记录,最后给 B 的页面添加一个收到 A 的 100 元记录。这时,如果 B 的客户端再次向服务器查询自己的余额和记录,服务器就会把这笔新的转账告知,B 由此确认收到了转账。
注意该转账的本质仅仅是服务器根据其程序自动完成的一系列硬盘读写操作,并不需要对保险柜里的钱进行任何操作。事实上所有用户的钱都可以随意混合到保险柜中,完全不需要区分哪些钱是哪个用户的,用户取钱的时候只需要从保险柜随机拿出相应数额的现金并从账本中扣除即可。
为什么说这个记账系统是中心化的呢?虽然每笔转账的过程都涉及连入互联网的多个设备,但这些设备的角色是不平等的。唯一的一台服务器具有绝对的权威,保存了全网唯一一个完整的权威的账本,其他所有的设备都只是充当客户端的角色,不可能具有和服务器同样的功能。所以如果你懂技术,用某种手段修改了自己手机上面的微付宝客户端程序,每天给自己手机上离线储存的余额添加一笔巨款,但这并不会得到中心服务器的承认,当你请求服务器转出这些巨款的时候,服务器会根据它硬盘中的表格判断,你的余额不足以支付这笔巨款,并返回一个错误。
但微付宝服务器中的表格就永远铁面无私吗?别忘记服务器只是一台电脑而已,拥有它的人可以对它的数据进行任意修改。当然这只是从技术的角度而言,请勿与实际挂钩。为了对下文加密货币的挖矿做铺垫,我们不妨假设微付宝公司推出了一个每天打卡领红包的活动。于是负责客户端的程序员在下一个版本的客户端程序中添加了一个打卡按钮,而负责服务器程序员开发的程序员也更新了服务器上的程序。这样每次用户登录并按下打卡按钮,客户端就会发送一个打卡请求给服务器,而服务器在确认用户的确是今日第一次打卡后,在自己的中心账本上给用户记上一笔打卡收入,注意这笔收入并没有从任何其他账户中扣去同样的余额,所以并不是一个常规的转账,而是程序凭空产生的。这样一来,服务器账本上所有账户的总余额,将比保险柜中的现金要多了。但这并不要紧,因为几乎不可能出现所有的用户都在同一时间要求把自己的所有余额兑换成现金的情况。如果为了保险起见,微付宝也可以选择把公司在其他方面的一些盈利放入保险柜,使得其中的总额等于账本的总额,但这与我们的讨论没有太大关系。
由此可见,仅从技术角度而言,微付宝公司有能力改变服务器中的一切数据和规则,而所有的客户端只能服从,即使有人开发了一个不听话的客户端也无所谓,服务器并不会参考该客户端的数据。注意现实中除了技术,还有相关法律和制度的约束,例如相关部门会对他们的账本和保险柜进行定期审查。
现在我们知道互联网上的许多数据都储存在服务器中,服务器就是互联网上用于提供信息服务的计算机,通常放在专门的机房中昼夜连续运行。例如当你访问某个网站或玩某个网游时,你的电脑接收到的数据就是对应的服务器发送的。我们的网银,支付软件,游戏币,充值卡等,本质上是政府或者公司发行的,可以称为中心化账本。这些账本的数据保存在政府(或公司)所拥有的服务器中。单从技术上来说,服务器的所有者对数据有绝对的控制权,可以对其进行任意修改甚至删除。所以保障你支付软件中余额不被服务器拥有者任意修改的,是法律而不是技术。另外一旦出现服务器被黑客攻击、公司破产等情况发生,他们发行的数字代币也可能得不到保障(虽然可能性较小)。
另一方面,政府为了刺激经济会经常增发货币,但也有可能导致通货膨胀。例如美国在 2020-2021 年因新冠疫情大量增发美元使其他国家的美元储备贬值(实际上他们并不需要印刷同样数量的纸钞,他们只需要在中央银行的服务器中更改数据即可)。另外货币的发行者有能力冻结或没收账户中的财产,或者控制它与其他币种之间的兑换。所以只从以上黄金的第 1 个特点来看,所有被政府或公司控制的中心化数字记账方式都远不如黄金。所以即使第 2 和第 3 点做得再好也还是有缺憾。
那么创造数字黄金的难点就在于如何使一个基于互联网的记账系统,使其像黄金一样不受任何组织的控制,即去中心化(decentralize)。只有这样才可能使第 1 点的安全性能和黄金媲美。这就要求储存该账本的服务器不完全受单个机构控制,即单个机构无法篡改(或毁灭)该网络账本,更无法篡改记账服务器的程序。
直到中本聪(Satoshi Nakamoto)(化名)在 2009 年提出区块链的概念并发行了比特币(bitcoin)后,这种机制才慢慢完善。比特币网络是一个去中心化(decentralized)的网络账本,具体来说就是说比特币完整账本的数据同时储存在许多不同的服务器中,这些服务器分散在世界各地,由不同的人或机构拥有。每台服务器的地位都是等价的6,没有哪个服务器具有控制其他服务器数据的权限。任何人或机构都可以购买自己的服务器,安装相应的记账程序并接入互联网,共同完成记账。当然,也可能有人安装一个自己篡改后的恶意程序并接入网络,下文我们会详细讨论。账本在每个服务器中都有一个完整的拷贝,这包含比特币账本有史以来每一个账号发生的每一笔交易记录,根据这些交易记录可以计算得到每个账户的余额。服务器之间会根据程序互相确认账本的一致性,若有不同则以多数一致为准7。这样一来,虽然每台服务器都有具体的所有者,虽然所有者可以任意篡改这台服务器的数据(例如给自己的账户凭空增加一笔巨额),但篡改后的数据并不会得到其他服务器的认可,也就无法生效,其他正常的服务器将会无视该服务器的数据,拒绝与其通讯。
比特币允许任何人匿名生成任意多个账户,无需提供任何身份信息。事实上,这些账户是离线随机生成的,无需联网注册。每个账户都有一个独特且公开的地址(一长串字母和数字),以及与之匹配的密码(一长串字母和数字),称为私钥(private key),正常情况下私钥只有账户的持有者知道,任何其他用户以及任何服务器都不可能知道。比特币的地址也有一个形象的名称叫钱包(wallet)。
转账的操作和常用的中心化支付软件类似,也是通过电脑和手机上的客户端操作,客户端通常是和服务器是不同的程序,只能用于转账而无法参与记账。从客户端的工作原理上来说,转账者的客户端需要生成一段转账请求的数据,其中包含发起转账的地址,接收转账的地址,转账的金额,以及其他一些信息(例如时间、手续费等),并用私钥对该转账请求进行签名(签名本身也是一小段数据)。签名后该转账请求通过互联网被广播到多个比特币服务器,注意广播的数据中并不包含私钥,仅包含转账的明文信息和签名。注意转账信息本身是不加密的。
一个常见的误解是,比特币只能转账或持有整数个,这完全是望文生义的错误。事实上比特币转账或持有的最小单位是 $10^{-8}$ 个(即精确到小数点后的第八位数)。为纪念中本聪,这个单位被称为 1 聪(satoshi)。例如当比特币单价为 60000 美元时,1 聪的价格只有 0.0006 美元,许多交易所都支持交易低至几美元的比特币。
当服务器收到广播后,虽然服务器并不知道转账者的私钥,但是可以轻易地通过密码学原理验证转账请求中的签名是否和转账信息匹配。如果匹配通过,就可以确认该转账的确是由私钥持有者发起的。验证以后,转账信息将可能被写入账本,并广播到其他所有服务器。只有取得大部分比特币服务器的共识(concensus),确认一致后这笔转账才算正式生效。
技术上,这个去中心化账本所使用的数据结构就是大名鼎鼎的区块链(blockchain)。狭义上你可以粗略认为区块链是一种储存账本文件的特殊格式。例如说,账本既可以存为 Excel 格式,又可以存为 txt 格式等等,区块链也是一个这样的格式。我们不会具体介绍该格式,但它的优点是可以通过哈希算法验证其中数据的完整性,以确保数据没被篡改过。初次听见 “区块链” 这个词时,可能有人会误以为每个区块由若干服务器组成,而这些区块串联起来形成了链条,这是错的。事实上你可以把区块链粗略认为是账本文件本身,而每个区块相当于账本中大小固定的一页,用于记录保存一定数量的转账数据,并按照时间顺序把区块串联。这样,已有的区块中的数据将保持不变,不断产生的新数据被打包成新的区块并越堆越高。再次强调每个服务器都存有完整的账本,也就是整个区块链的数据。广义来说,区块链一词也同时包含这种数据结构结合去中心化服务器结合形成的一整套共识机制。
以上提到的签名和验证签名的具体原理涉及到密码学中的非对称加密(asymmetry encryption),其具体原理超出了本文范围。你暂时只需要知道非对称加密的几个结论即可:
这三条定律是比特币安全性的基石,它们由密码学保障。这些算法完全公开,且被广泛用于金融、军事等各种重要领域。如果有人能破解非对称加密(违反以上的 1 或 3),那么互联网上大多数加密安全措施将同样对他无效。而这是几乎不可能的。
所以要确保你的比特币真正属于你,就要确保有且只有你拥有其所在钱包地址的私钥。如果有人要给你比特币,千万不可以直接向他索取私钥而是要通过上述的转账流程。因为对方完全可以事先把私钥备份,导致接下来你和他都可以随时通过这个私钥将该地址中的比特币转到其他地址。谁先这么做,谁就会成为这些比特币唯一拥有者。必须强调的一点是,如果你在加密货币的交易平台上购买了加密货币,通常这些加密货币的私钥将会由平台为你保管(你登录该平台的密码或验证码并不是加密货币的私钥!)。所以从技术角度而言,你并不真正拥有你所购买的加密货币。大部分交易平台会支持把这些加密货币转账到你自己生成并拥有私钥的地址中,而一旦这么做,你将对这些加密货币完全负责,如果私钥丢失或被盗,你将可能永远丢失地址中的加密货币。关于如何安全地持有私钥我们将在 “使用数字货币钱包” 中具体介绍。
由于任何人都可以搭建比特币服务器参与记账,所有转账记录都是公开的。那么用户隐私如何保障?隐私的关键在于地址的匿名性:虽然任何人都可以查到任何地址的所有转账信息,但却无法直接知道谁拥有该地址。任何人都可以生成任意多个地址,甚至每笔交易都可以使用一个不同的地址,所以用户的隐私仍然可以得到一定程度保障。
为什么说比特币的隐私保障只是一定程度上的呢?我们设想如果一个商店在自己的官方网站上公布了一个固定不变的比特币收款地址,那么该地址的所有者就成为了公开信息。此时查询该地址的所有转账信息,就可以知道该商店的营收情况10,以及哪些地址经常在该商店购买商品,那么就可以大致确定这些地址所有者的地理位置。若通过大数据的方法将许多公开身份的地址进行交叉对比,就有可能十分精确地锁定一些原本匿名的地址的所有者范围。另外,如果一个地址的所有者在交易所有实名账号(大部分正规交易所需要实名注册)且进行过转账(例如使用加密货币兑换法币或反之),那么交易所就可以轻易把地址和实名信息一起记录下来。所以某种意义上,比特币的匿名性并不如上文的微付宝,微付宝虽然实名,但实名信息和转账记录并不是公开的,普通人无法直接查询其他账号的任何信息。
如果比特币被用于非法交易,执法机构是有可能追溯到地址持有者的(注意执法者不可能冻结该地址)。例如不法分子通过制作电脑的勒索病毒收取比特币作为赎金,那么执法机构可以首先把收款地址列入黑名单,对其实施严格监控,一旦其中的比特币被转出到其他地址,那么这些账号也会进而被监控。如果这些比特币最终流入的任意账号的持有者暴露身份(例如试图通过交易所兑换法币),执法机构就可以对其进行抓捕审查等。所以这样的非法地址的持有者要想把比特币兑换成法币是有一定难度的(例如通过混币机制或私下交易,我们先不深究)。
正因如此,当你在接收他人的比特币时,尤其是有人想私下用他的比特币换取你的法币时,请务必确认对方的可信度以及留下关于对方尽可能多的信息。如果对方给你转账的比特币来源是非法的,那么你将可能遇到麻烦(届时你将需要证明你对此并不知情)。注意这并不是加密货币特有的问题,接受非法来源的法币(法定货币)也有同样风险。
既然任何人都可以参与到比特币网络中,那么将其恶意破坏也会变得比中心化网络更容易。对于中心化服务器,控制者只需要给服务器设置一个密码就可以防止被黑客入侵,而如果有人要恶意破坏比特币网络,他只需要购买大量服务器,在网络中的数量达到多数就可以通过所谓的 “共识” 来做假账,例如花一笔比特币然后事后抹掉记录再花一次(即双花,double spending)11。所以为了提高账本的安全性,我们必须使得 “买下大部分服务器” 变得异常艰难,即大幅提高每台服务器所需的成本。比特币网络的做法就是把记账权和服务器的算力(计算能力)挂钩,每台服务器必须完成一些很难(但没有意义)的数学题才能获取更多的记账权,这些题的答案很难被算出,但算出后很容易验证正确性。所以只要一台服务器算出答案并公布,其他服务器都能快速验证并承认。理想状况下是整个网络的总算力极高,且服务器的所有者非常分散,使得少部分人或机构几乎不可能取得该网络的控制权从而对数据进行恶意篡改。这些无意义的计算最终会消耗大量资源,但这却是维持比特币安全性的必要代价。在 2016 年,据估计比特币网络的总算力已经达到世界前 500 的超级计算机集群的总和。这使得比特币比其他的货币更为安全。根据公开信息,至今只发生过一次比特币本身被 “破解” 的案例12。我们在新闻中看到的一些交易所被黑客攻击导致用户比特币丢失的情况,并不属于比特币的程序本身被破解,而是交易所中用于储存私钥的服务器被黑客入侵。黑客盗取了这些私钥,从而把对应地址中的比特币转移。要避免这种风险,用户只需在交易所购买加密货币后,将其转到自己的私人钱包即可(同时面临新的风险),又或者选择公认信誉好体量大的交易所。
在另一些加密货币中,为了不过多消能源和硬件,也有采用把服务器所有者的加密货币余额作为比重获取记账权。比特币的方法叫做工作证明(proof of power),后者叫做持有量证明(proof of stake)。另一种较新的方式是储存空间和时间证明(proof of space and time),也就是所谓的硬盘挖矿。但无论如何,为了使网络具有安全性,网络中的服务器必须以某种珍贵的资源作为记账权的分配标准,且这种资源需要容易证明且无法造假。
既然比特币服务器需要那么多资源,为什么还有人愿意搭建呢?为了补偿这些维护比特币网络安全性的服务器所有者,比特币协议规定每十分钟左右就会对成功解出数学题(每个数学题对应一个新的区块)并获得记账权的账户进行奖励,所以人们就形象地把提供服务器算力并获取奖励的行为称为挖矿(mining),挖矿的人称为矿工(miner)13。所有的比特币都是通过挖矿产生的。比特币协议规定大约每 4 年挖矿的收益就会减半,从而使其能被挖出的总量存在上限(2100 万枚)。除了挖矿获得奖励外,矿工还会获得一些转账手续费,手续费在用户转账时从支付的一方转到矿工的地址中。当所有比特币都被挖完后,理想情况下此时比特币的价格已经昂贵到足以让转账手续费支持所有矿工的开支,这样该系统就能自给自足地一直运行下去。
区块链的外行最常见的问题之一大概就是:如果比特币最初是由某个化名为中本聪的人或机构发明的,他之后为什么不能随意控制这个系统呢?为什么不能修改服务器的程序让它对自己有利?
我们把比特币诞生的整个过程都简化一下。我们假设中本聪是一个程序员,他有一天产生了比特币的想法,写出了那个著名白皮书介绍它的宗旨和原理。并根据这套原理自己编写了完整的比特币服务器程序。他买来一台电脑,安装了该程序并接入了互联网。此时这台创世服务器是全世界唯一一台比特币服务器,它拥有 100% 的算力,可以任由中本聪修改程序以及账本的一切行为。但这么做并没有意义,此时比特币还一文不值,没有别人知道它的存在。
我们假设中本聪如实地根据白皮书写出了服务器程序并安装,但此时服务器的账本是空的。接下来他创建了有史以来第一个比特币地址即创世地址14,并用该地址在创世服务器挖矿,获得了第一笔挖矿奖励—— 50 个比特币。注意现在整个账本只有一个钱包,也就是说此时全世界一共只有 50 个比特币在流通,剩下的 2000 多万枚都还没有被挖出,还不属于任何地址。中本聪让这个服务器一直保持运行,每 10 分钟都可以获得 50 个比特币。
接下来,他要做的事情就是把白皮书和程序代码公之于众,比如在某个技术论坛上面发布(中本聪选择了匿名发布,但这在技术上不是必须的)。如果有第二个幸运的程序员看到了白皮书并认同他的想法,那么他将下载该程序的源代码并很可能会检查该代码执行的内容是否如白皮书所说。如果他也想试试看,那么他也可以在自己的电脑上编译并运行该程序并接入互联网。他的程序会根据特定的步骤找到互联网上的其他节点并试图同步账本。他的服务器很快将发现互联网上的创世服务器并向该服务器请求同步账本,于是全网第二台比特币服务器诞生了。
当然第二个程序员也创建了属于自己的地址,并用他的服务器绑定该地址进行挖矿。这样两个服务器的地址中都会源源不断地获得挖矿奖励。如果我们假设这全网仅有的两台服务器算力相同,那么每十分钟每台服务器解出数学题的几率就是 50%,而由于每次得奖励不变(根据协议和程序设定,四年以后才会改变),每个地址每天平均获得的奖励接下来就会减半。注意此时这两台的功能完全相同,创世服务器并没有额外的特权。如果两人中的一人决定恶意篡改账本,他只需要换一台性能稍强一些的服务器,即可获得更多记账权(具体的机制暂且不表),还是有相当的几率可以成功。我们姑且假设这第二个程序员也是一个遵守规则的 “好人”。15
随着加入挖矿的程序员越来越多,单位算力每天平均获得的奖励也会越来越稀释,但任意一个程序员(当然也包括中本聪)恶意篡改区块链数据的难度就越来越大。如果有 100 个遵守规则的程序员都用算力相当的电脑挖矿,那么新来的程序员如果想篡改账本将会需要购买一台性能比其他程序员强一百倍的电脑,或者一次购买 100 台左右的相同电脑,使用同一个地址一起挖矿(这样的机群就形成了所谓的矿池,以后会介绍),才有可能成功篡改账本。
如果没有人愿意用法币或其他物品交换比特币,那么到此时为止比特币的市场价格依旧是零。这些最早的矿工可能是出于兴趣和对技术的热爱自愿贡献出服务器和电费等,也可能是抱着投机的心理希望有朝一日以此获利。他们开始生成更多的钱包地址,然后彼此之间试着转账作为测试和娱乐。当然也可能会有一些看懂白皮书以及感受到比特币潜力的人想参与进来,但他们又觉得搭建服务器和挖矿过于麻烦,于是可以想象比特币的第一笔交易即将发生——有人将用法定货币或其他物品与一个矿工进行交易。他要这么做,只需要下载安装客户端程序,用它生成一个新的地址,然后联系某个矿工,用某种方式把法币或物品给他并告诉他自己的钱包的地址。如果矿工信守承诺,就会把约定数量的比特币转到该地址中。从此以后,比特币有了价格,而它此时的价格就是这笔交易中单位比特币对应的法币(或物品所值的法币)。真实发生的事情现在被普遍认为是 2010 年 5 月 22 日这一天,一个名叫 Laszlo Hanyecz 的程序员用 1 万个比特币购买了两个价值 25 美元的披萨。后来这天被称为大家称为 “比特币披萨日”。
注意此时的服务器程序代码已经在互联网上有一定量的分享和传播。中本聪这个名字也在讨论社区中具有了相当的人气。但如果中本聪此时在论坛发布一个恶意的新版本程序16,并劝说其他程序员更新到他们的电脑上(例如以添加新功能或修复 bug 为借口),那么其他程序员几乎肯定有人会检查代码中更新的内容是否如他所说。如果他们发现这个更新是恶意的,他们非但不会把新的程序更新到自己的机器,还会将发现公之于众导致中本聪在社区中从此失去所有信誉,不会有人再相信他发布的任何代码,而接下来代码的更新和维护将由其他程序员完成并审查,比特币也会延续下去。这就是代码开源(open source)的力量。
所以上述问题的答案就是:理论上来说中本聪和最初几个矿工在比特币的初期的确可能 “恶意” 修改账本或程序,但这无所谓也不会有人知道(之后大家看到的账本也会是篡改后的版本)。但当有足够多的人开始挖矿,使算力大大提升后,中本聪也必须遵循矿工社区中多数人的意见,根据社区中建立在算力上的共识来共同维护和更新比特币服务器程序。作为有威望的创始人,他的意见的确可能有更大的影响力,但是否采纳仍然是基于矿工们的共识。
由此可见,比特币的规则并不是一成不变的,比特币的程序一直在不停更新,一些已有规定例如 “十分钟左右产生一个区块并发放一次奖励” 等,只要多数矿工(多数算力)同意某个修改方案17,那么就会有志愿者对程序将会进行相应的更新(例如把 10 分钟改为 5 分钟),而多数矿工在审核代码后也会愿意把该更新部署到自己的矿机中,形成对新规则的共识。事实上任何人都可以在网上公开发布自己的改进方案和对应的服务器程序,但如果发布后多数矿工不同意下载并更新自己的矿机,那么比特币仍然会以当前的程序运行,小部分更新了程序的矿工由于违反了旧的协议会被未更新的大部分矿机无视,导致无法获得挖矿奖励。通常情况下,这些小部分矿机的所有者会选择重新安装之前主流版本的程序,重新同步账本并继续挖矿。
但在意见特别不统一的情况下也可能出现一种情况:更新了某个新程序的所有矿机之间形成了新的通讯网络,而新网络与旧网络之间彼此不再进行通讯,这样就出现了所谓的 “硬分叉”,将导致一种新加密货币的诞生。人们通常会把分叉后算力较多的那个服务器网络所支持的加密货币沿用之前的名称,而把算力较小的网络采用新的名称。著名的例子如比特币现金(BCH),就是比特币硬分叉产生的。它和比特币(BTC)是两种不同的加密货币,这意味着一种加密货币的钱包地址无法直接给另一种的钱包地址转账。他们的各自的服务器中的区块链在某个区块之前拥有相同的数据,而之后的区块拥有不同的数据。有趣的是,在分叉之前拥有余额的地址将会在分叉后的两个区块链中都具有相同的余额。
以上关于规则更新的介绍可能打破了一些人对比特币规则的认知,例如相当多的人认为比特币总量从技术上不可能改变,这是错的。事实上,这种无故且严重违反白皮书愿景的改变方案被通过的可能性的确非常低,但不是由于技术限制。例如有人可能会认为如果多数矿工同意让比特币增发超过原先的 2100 万枚,将使多数矿工获得更多利益,所以他们可能通过这种改变。而事实恰恰相反,比特币程序的任何更新都是完全公开的,可以预见一旦矿工们这么做,比特币将信誉扫地,几乎肯定会导致市场价格崩盘,以至于矿工们得不偿失。所以虽然矿工的利益看似与普通持币者不同,但二者很大程度上是绑定的。由于这不是一个技术问题,我们不去深究。
1. ^ 另一篇通俗易懂的比特币科普见知乎
2. ^ 但广义来说后者可能范围更广,例如虚拟货币也可能指某种游戏中的货币。
3. ^ “背书” 的意思简单来说就是使用自身已有的信誉来给某产品做担保。例如法定货币的价值是由政府背书的。
4. ^ 但作为一个粗糙的判断方法,也可以测量其密度。已知的固体金属中只有很少密度比黄金更大,而且这些金属的稀有程度和价格通常比黄金更高,使造假失去意义。
5. ^ 实际上这样的文件一般称为数据库,大多使用 SQL 格式。
6. ^ 仅从程序功能的角度来说是等价的,但下面我们会看到更高计算能力的服务器具有更大的 “话语权”。
7. ^ “以多数一致为准” 并不完全准确,但在学习更多概念以前你可以暂时这么理解。实际上比特币是以最长的区块链为准。
8. ^ 事实上私钥也可以给任何数据签名,例如 pdf 中常见的数字签名就是使用非对称加密的私钥实现的。
9. ^ 想象一下如果有一个不诚实的服务器在第一个收到你的转账请求以后篡改了接收转账的地址或其他任何信息,那么这将导致转账信息和签名变得无法匹配,当它把该信息广播给其他服务器时,其他服务器将会拒绝将转账信息写入自己的账本。那这个不诚实的服务器能否伪造发起交易者的签名呢?第 1 和第 3 条结论告诉我们不行。
10. ^ 正因如此,很少会有收款方使用固定的地址收款,一般是每笔交易使用一个新的收款地址。
11. ^ 但他仍然不能把其他任意账户中的钱转给自己,因为他没有其他账户的私钥,无法生成正确签名。
12. ^ 这是由于早期比特币程序的一个 bug 导致,于 2010 年被发现,在区块链上生成了 1840 亿个比特币。随后该区块被一个硬分叉撤回且大部分服务器马上更新了修复后的程序。关于硬分叉的介绍见下文。
13. ^ miner 也可以指挖矿所用的软件。
14. ^ 创世地址是公开的,你可以在网上查到。
15. ^ 其实中本聪和他是不是 “好人” 并不特别重要,事实上后来发行的许多加密货币的创始人都光明正大地通过白皮书和初始程序直接规定自己所拥有的初始余额,理由是程序开发和维护。但这个规定越不合理,可能就会受到越多质疑(账本是公开的),进而让其他人参与该加密货币挖矿的兴趣减弱。
16. ^ 比如说这个程序一经安装就会每天自动把所在矿机地址中的一个比特币打到中本聪的地址中(该程序是知道所在矿机的钱包地址的私钥的)。
17. ^ 这样的方案叫做 Bitcoin Improvement Proposal(BIP),就是比特币改进方案。
 
 
 
 
 
 
 
 
 
 
 
友情链接: 超理论坛 | ©小时科技 保留一切权利