1. 数字货币的探索
随着信息技术的发展,人们的生活逐渐网络化,数字化。人类社会因此发生着深刻的变化。对数字货币的探索,就是在这样的背景下应运而生的。其实相关的研究在上世纪八九十年代,就开始了。在数字货币的探索实践中,比特币是目前表现最好的一个。
说到比特币的缘起,就不得不谈到一个略显神秘的团体:密码朋克(CypherPunk)。这个团体是密码天才们的松散联盟。在比特币的创新中,大量借鉴了密码朋克成员的贡献。
密码朋克本身就是数字货币最早的传播者,在其电子邮件组中,常见关于数字货币的讨论,并有一些想法付诸实践。在比特币之前,有很多失败的尝试。在这里我们简要列举一些之前探路者。
亚当·贝克(Adam Back)是一位英国的密码学家,1997年,他发明了哈希现金(hashcash),其中用到了工作量证明机制(proof of work)。这个机制的原型是用于解决互联网垃圾信息问题的。工作量证明机制后来成为比特币的核心要素之一。
哈伯和斯托尼塔(Haber and Stornetta)在1997年提出了一个用时间戳的方法保证数字文件安全的协议,这个协议成为比特币区块链协议的原型。
戴伟(W Dai)是一位兴趣广泛的密码学专家,他在1998年发明了B-money,B-money强调点对点的交易和不可更改的交易记录。不过在B-money中,每台计算机各自单独书写交易记录,这很容易造成系统账本的不一致。戴伟为此设计了复杂的奖惩机制以防止作弊,但是并没有能从根本上解决问题。中本聪发明比特币的时候,借鉴了很多戴伟的设计,并和戴伟有很多邮件交流。
哈尔·芬尼(Hal Finney)是PGP公司的一位顶级开发人员,也是密码朋克运动早期和重要的成员。2004年,芬尼推出了自己版本的电子货币,在其中采用了可重复使用的工作量证明机制(RPOW)。哈尔·芬尼是第一笔比特币转账的接受者,在比特币发展的早期与中本聪有大量互动与交流。由于身患绝症,哈尔·芬尼已于2014年去世。
2. 比特币的诞生
2008年9月,以雷曼兄弟的倒闭为开端,金融危机在美国爆发并向全世界蔓延。为应对危机,各国政府采取量化宽松等措施,救助由于自身过失、陷入危机的大型金融机构。这些措施带来了广泛的质疑,并一度引发了“占领华尔街”运动。
2008年10月31日纽约时间下午2点10分,在一个普通的密码学邮件列表中,几百个成员均收到了自称是中本聪的人的电子邮件,“我一直在研究一个新的电子现金系统,这完全是点对点的,无需任何可信的第三方”,然后他将它引向一个九页的白皮书,其中描述了一个新的货币体系。同年11月16日,中本聪放出了比特币代码的先行版本。
2009年1月3日,中本聪在位于芬兰赫尔辛基的一个小型服务器上挖出了比特币的第一个区块——创世区块(Genesis Block),并获得了首矿”奖励——50个比特币。在创世区块中,中本聪写下这样一句话:“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”——“财政大臣站在第二次救助银行的边缘”,这句话是当天泰晤士报头版的标题。中本聪将它写进创世区块,不但清晰地展示着比特币的诞生时间,还表达着对旧体系的嘲讽。
3. 什么是比特币
比特币是一个去中心化的账本系统,通过一个叫“区块链”的系列技术集合,来保证这账本不被修改。他设定了这么一套规则,规定比特币网络大约每 10 分钟出一页账单,账单上记录这段时间网络里的来往交易,我们把这一页账单叫 “区块”。大体来说区块包含两部分信息:
- 第一部分信息是这个区块的身份信息。包括这个区块诞生的时间、是第多少个、哈希值是多少、整个区块大小多少。这些信息证明了这个区块是正确的,是沿着上一个区块往下的区块,也给下一个区块提供了验证身份的信息。
- 第二部分信息是这段时间内产生的网络里的交易,也就是这个账本的里记录的每一笔交易。
每个区块被打上时间戳,按照严格的先后顺序,连接起来,叫 “区块链”。
3.1 交易
比特币交易的基本诉求,是付款人汇款给收款人。技术挑战是加密,目的是不让第三者截获甚至篡改汇款金额。比特币的交易加密方式沿用了现成的基于公钥、私钥的非对称加密体系。
Owner0 先查到 Owner1 的公钥。用 Owner1 的公钥把汇款详情加密。这样,只有 Owner1 本人用自己的私钥才能打开加了密的汇款详情。在图例中,没有画汇款详情。
为了方便 Owner1 验证这笔汇款的确来自 Owner0,而不是别人,Owner0 发出的汇款单里,除了有加了密的汇款详情,还有 Owner0 的数字签名。Owner1 拿到汇款时,为了验证这笔汇款的确来自 Owner0,他可以用 Owner0 的公钥,来验证汇款单中 Owner0 的数字签名。
Owner0 发出汇款单时,汇款单不仅仅投递到 Owner1,而且还要广而告之,任何人只要愿意参与比特币 审计,都可以收到全球所有人发出的所有汇款单。
沿用 1、2、3 的原理,Owner1 给 Owner2 汇款,然后 Owner2 给 Owner3 汇款。比特币通过 Hash 机制,把涉及同一枚比特币的所有汇款交易串连起来,目的是为了追查双花(double spending)的欺诈行为。
交易在网络中的传播:
- 1)新的交易向全网进行广播;
- 2)每一个节点都将收到的交易信息纳入一个区块中;
- 3)每个节点都尝试在自己的区块中找到一个具有足够难度的工作量证明;
- 4)当一个节点找到了一个工作量证明,它就向全网进行广播;
- 5)当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性;
- 6)其他节点表示他们接受该区块,而表示接受的方法,则是在跟随该区块的末尾,制造新的区块以延长该链条,而将被接受区块的随机散列值视为先于新区快的随机散列值。
3.2 工作量证明
比特币系统每次记账的时候会把上一个块的Hash值和当前的账页信息一起作为原始信息进行Hash。如果仅仅是这样,显然每个人都可以很轻松的完成记账。为了保证10分钟左右只有一个人可以记账,就必须要提高记账的难度,使得Hash的结果必须以若干个0开头。同是为了满足这个条件,在进行Hash时引入一个随机数变量。用伪代码表示一下:
没有难度时为:Hash(上一个Hash值,交易记录集) = 456635BCD
Hash(上一个Hash值,交易记录集,随机数) = 0000aFD635BCD
我们知道改变Hash的原始信息的任何一部分,Hash值也会随之不断的变化,因此在运算Hash时,不断的改变随机数的值,总可以找的一个随机数使Hash的结果以若干个0开头,率先找到随机数的节点就获得此次记账的唯一记账权。
把“付出劳动”即获得“记账所有权”的方式通过数学模拟出来,这是最公平的一种所有权分发机制。
3.3 网络
比特币采用了基于互联网的点对点(P2P:peer-to-peer)分布式网络架构。P2P网络是指位于同一网络中的每台计算机都彼此对等,各个节点共同提供网络服务,不存在任何“特殊”节点,每个网络节点以扁平的拓扑结构相互连通。
P2P网络的节点之间交互连接、协同,每个节点在对外提供服务的同时也使用网络中其他节点所提供的服务,每个节点即是服务端又是客户端。既然每个网络节点都是平等的(是指在网络层面上节点是平等的,但各节点在功能上可以有不同的分工, 如钱包节点、挖矿节点等),不存在任何“特殊”中心节点,那么当新的网络节点启动后,它是如何跟其他的节点建立连接,从而加入到比特币网络呢?
为了能够加入到比特币网络,比特币客户端会做一下几件事情:
- 节点会记住它最近成功连接的网络节点,当重新启动后它可以迅速与先前的对等节点网络重新建立连接。
- 节点会在失去已有连接时尝试发现新节点。
- 当建立一个或多个连接后,节点将一条包含自身IP地址消息发送给其相邻节点。相邻节点再将此消息依次转发给它们各自的相邻节点,从而保证节点信息被多个节点所接收、保证连接更稳定。
- 新接入的节点可以向它的相邻节点发送获取地址getaddr消息,要求它们返回其已知对等节点的IP地址列表。节点可以找到需连接到的对等节点。
- 在节点启动时,可以给节点指定一个正活跃节点IP, 如果没有,客户端也维持一个列表,列出了那些长期稳定运行的节点。这样的节点也被称为种子节点(其实和BT下载的种子文件道理是一样的),就可以通过种子节点来快速发现网络中的其他节点。
3.4 激励
比特币系统的记账是把交易记录、交易时间、账本序号、上一个Hash值等信息计算Hash打包的过程。我们知道所有的计算和存贮是需要消耗计算机资源的,既然要付出成本,那节点为什么还要参与记账呢?在中本聪的设计里,完成记账的节点可以获得系统给与的一定数量的比特币奖励,这个奖励的过程也就是比特币的发行过程。
最开始每个区块的奖励是50枚比特币,大概每4年减半一次,一直到2140年全部奖励完,也就是比特币全部发行完毕。
3.5 简化的支付确认(SPV)
SPV节点是通过区块头进行支付验证的,区块头中一般包括如下信息:前一区块的哈希值、区块中交易默克尔树的根哈希值、时间戳等,通过区块的哈希值,可以识别出区块链中的对应区块。区块前后有序链接,每一个区块都可以通过其区块头的“前一区块的哈希值”字段引用前一区块。这样把每个区块均链接到各自前一区块的哈希值序列,就创建了一条一直可以追溯到第一个区块(创世区块)的链条。
当比特币网络需要利用SPV进行简单支付验证时步骤如下:
- 计算待验证支付的交易哈希值。
- 节点从区块链网络上获取并存储最长链的所有区块头至本地。
- 节点从区块链获取待验证支付对应的默克尔树哈希认证路径,根据哈希认证路径,计算默克尔树的根哈希值,将计算结果与本地区块头中的默克尔树的根哈希值进行比较,定位到包含待验证支付的区块。
- 根据该区块头所处的位置,验证该区块的区块头是否已经包含在已知最长链中,确定该支付已经得到的确认数量,如果包含则证明支付真实有效。
简单的讲,其实SPV就做了两件事:
- 找到要验证的这笔交易在哪个区块。
- 确定这个交易是否被6次确认过了。
4. 比特币的意义
当初中本聪发布比特币,对它的前途以及是否能真正造就“一种点对点的电子现金系统”其实信心是不足的,从维基解密使用比特币捐款的事件就可以看出。
2010年,维基解密宣布接受用比特币的捐款时,社区一片欢呼,中本聪出人意料地提出了反对意见:“不,请不要揠苗助长。比特币这个项目需要平静地成长,这样软件才能够逐渐强化。我请求维基解密现在不要使用比特币。比特币还是一个非常小的测试项目,还处在婴儿期。在这个阶段,你们所带来的关注将摧毁我们。”
比特币经过近10年的发展,中本聪肯定也没有想到现在比特币以及它所带动的区块链产业的发展,甚至由其可能推动又一次技术革命。
比特币已经不再是当初的比特币,随着越来越多的人对其产生共识,越来越多地应用使用其技术改变我们的生活,它将会像手机一样,有一天终将成为我们生活的一部分,我期待那一天的到来。