第1部分 区块链及其商业应用
第1章 区块链技术的演进
1.1 比特币
1.1.1 起源
区块链技术起源于比特币。比特币是一种点对点的电子现金系统,由中本聪(Satoshi Nakamoto)于2008年设计开发。这是一个分布式系统,其价值流通媒介是虚拟的加密数字货币:比特币。比特币的发行和流通不受任一中心机构控制,只要有算力并接入互联网,就可以参与其中。其代码开源,由全世界极客组成的比特币核心钱包(Bitcoin Core)的核心开发者在GitHub(源代码托管仓库)上共同维护更新,在GitHub上有4万多人收藏,代码被分叉(fork)24 000多次。比特币是密码学和经济学的集大成者,让人类第一次掌握了自己的数据主权,将打破现有互联网巨头垄断的数据孤岛状态。所有的数据都在区块链上,这将会是一个全人类共同维护的分式数据库。
比特币所采用的关键技术其实可以追溯到20世纪70年代。
1977年,罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出非对称加密算法RSA。非对称加密思想第一次落实到具体算法。
1980年,拉尔夫·默克尔(Ralph Merkle)提出默克尔(Merkle)数据结构,该数据结构广泛应用于文件系统和点对点(P2P)(peer-to-peer)网络系统中。比特币利用Merkle树计算交易根哈希值(hash)。
1982年,莱斯利·兰波特(Leslie Lamport)提出拜占庭将军问题,用来描述分布式系统中的一致性问题。莱斯利·兰波特提出的Paxos算法,仅适用于无拜占庭错误的可信环境中,中本聪在比特币中创造性地引入了工作量证明(Proof of Work,POW)来解决这个问题。
1983年,大卫·乔姆(David Chaum)发表了论文Blind Signatures for Untraceable Payments。在论文中,他提出盲签名的密码学算法,用这种算法实现电子交易中的匿名性,这也是他所提出的eCash中重要的密码学技术。
1985年,尼尔·科布利茨(Neal Koblitz)和维克多·米勒(Victor Miller)分别独立提出椭圆曲线密码学(Elliptic Curve Cryptography),它是一种基于椭圆曲线数学的公开密钥加密算法。比特币利用ECDSA secp256k1算法实现其公钥签名体系。
1997年,亚当·班克(Adam Back)提出哈希现金(HashCash)方法,工作量证明的概念出现在该算法论文中,该算法在当时主要用于反垃圾邮件。如果给目标邮箱发送电子邮件,那么必须满足一个特定的计算结果,才能被目标邮箱系统所接收。对于普通邮件发送者来说,计算满足要求的数据在不经意间就完成了,但是对于垃圾邮件的发送系统来说,每天要完成大量的邮件发送任务,这些邮件所需的计算时间累加起来就能大大增加系统的负担,从而增加了垃圾邮件的发送成本。
1998年,戴维(Wei Dai)提出B-money(一种可匿名、分布式的电子加密货币系统),它占据了比特币白皮书的参考资源第一位。它继承了用工作量证明造币的思想,并把记账工作分配到一个点对点的网络中,但距离一个可以使用的P2P电子支付系统还有很大的差距,因为它缺少最关键的技术—共识机制,也就是说它没有办法解决双花问题,所以交易的双方必须信任一个第三方。
1998年,肖恩·范宁(Shawn Fanning)在美国波士顿东北大学读一年级的时候,为室友开发了一个音乐搜集程序,该程序能在互联网上搜索音乐文件,将其整理并做成索引,使用者可以很容易地找到自己想要的音乐。该程序被肖恩·范宁命名为Napster,从此,越来越多的人在互联网上开始使用P2P技术。
2001年,由美国国家安全局(NSA)研发、美国国家标准与技术研究院(NIST)发布的SHA2(Secure Hash Algorithm 2)算法诞生。它是一种密码哈希函数算法标准,属于SHA算法之一,又可再分为6个不同的算法标准,包括SHA224、SHA256、SHA384、SHA512、SHA512/224、SHA512/256。比特币使用SHA256算法计算区块数字摘要,并两次使用SHA256算法进行挖矿运算。
1.1.2 发展
2008年11月,中本聪发表了《比特币:一种点对点的电子货币系统》,比特币时代正式开启。中本聪在文中描述数据结构时,使用了Block和Chain等词,后来人们在提炼比特币底层实现技术时,把抽象出的技术体系用Block和Chain表示,创造出Blockchain这个词,可以说是比特币的底层设计思想衍生出了区块链(Blockchain)的概念。中本聪在论文中阐述,区块链由一串使用密码学方法产生的区块(Block)组合而成,这些区块前后依次关联,新增的区块总是添加在区块链的尾部。区块链由点对点网络节点共同产生,所有网络中的交易由全网节点共同维护,并存储在本地,数据与其他节点一致,因此区块链也可以被看成一个去中心化的分布式数据库。
2009年1月5日,比特币主网上的第一枚比特币诞生。比特币的网络节点采用工作量证明算法来产生区块,这也就是通常所说的“挖矿”。“挖矿”是指使用计算机解决一项复杂的数学问题,谁的算力强谁就有可能先解决难题并广播到网络中,而这个数学问题的验证过程很简单,其他节点可以快速校验该答案的正确性。如果正确,那么承认这个难题(区块数据)的合法性。区块数据里包含着交易,网络节点在确认数学问题答案的同时,也将确认交易的合法性,并将其记录在本地的区块链中。
为了激励网络节点积极打包出块,并用以抵消节点利用算力带来的电力消耗和设备损耗,开发者在比特币系统中设计了一套挖矿激励机制,即出块奖励机制。给初始区块奖励50枚比特币,随后每隔10分钟就会增加一个区块,并奖励50枚比特币。比特币的总产量为2100万枚,每当开采总量达到剩余的一半时,区块奖励减半,例如当开采量达到1050万枚(2100万枚×1/2)时,区块奖励为25枚(50枚×1/2),当开采量达到1575万枚(1050枚+1050枚×1/2)时,区块奖励为12.5枚(25枚×1/2),以此方式反复减半。每个减半周期约为4年,大约在2140年时出产总量接近2100万枚。用户在发起交易时,需要附加交易费用,而这笔费用也将随同区块奖励一起奖励给挖矿打包的网络节点。
在比特币系统中,用户签名并发起的交易如同实体经济中的交易一样,是指在商业行为上用户发起转账的操作实体,包含发起人、收款人、金额、描述等。在比特币系统中所有的交易都存储在区块链账本里,这也被称为区块链账本的记账。中本聪在白皮书《比特币:一种点对点的电子货币系统》中创新性地使用了未花费的交易输出(Unspent Transaction Output,UTXO)来记录比特币的交易。比特币的交易由交易输入和交易输出组成,每笔交易都要花费(Spend)一笔(或多笔)输入(Input),同时产生一笔(或多笔)输出(Output),而其所产生的输出,就是“未花费的交易输出”。交易需要由发起方使用私钥完成对交易的签名,用以证明资产所有权和交易合法性,交易的接收者不用参与整个过程。
如图1-1所示,A、B、C为三个账户,定义Tx为交易,每笔交易由输入和输出两部分组成,每笔交易的输入指向上一笔UTXO,在交易完成后该UTXO将变成已花费的交易输出,不能再次被使用;而该交易产生的输出即为新的UTXO,其所有权归属于接收者,如果交易过程中有多余的资产,将会产生一个找零UTXO,接收人为自己。交易的过程如下:
(1)交易-1(铸币)表示该交易由矿工挖矿所得,输入标识为挖矿(Mining)获取,输出的所有者为A,表示矿工挖矿得到UTXO-A-1归属于A账户。
(2)交易-2的输入指向交易-1的输出,即A账户使用自己的UTXO作为交易-2的输入,输出为B和A,意味着,A账户转账给B账户,同时剩余一笔资金并找零给自己,此时UTXO-A-1将变成已花费的交易输出,不能再次被使用,标识为灰色。
(3)交易-3为B账户转账给C账户,交易-4为A账户转账给C账户,同时分别找零给自己形成新的输出,C账户此时拥有UTXO-C-1和UTXO-C-2两笔UTXO。
(4)交易-5的输入由两笔C账户的UTXO组成(UTXO-C-1和UTXO-C-2),输出为B账户和自己的C账户,表示为转移资产给B账户,同时找零给自己。
图1-1
由于各个账户的余额由最终属于自己的所有UTXO之和组成,在经过这5笔交易之后,A账户的资产有UTXO-A-3,B账户的资产有UTXO-B-2和UTXO-B-3,C账户的资产有UTXO-C-3,每个账户只能控制自己的UTXO,这是它们的剩余资产。所以,从这个角度来说,比特币区块链里并没有余额的概念,只有UTXO。
比特币的项目地址可以在GitHub网站中搜索到,搜索Bitcoin之后的结果如图1-2所示。
图1-2
Bitcoin项目主要包含两个工程:bitcoin和bips。bitcoin是比特币客户端源代码项目,使用C++语言开发实现,用户可以在下载并编译后用于挖矿或者当成全节点钱包使用。bips(Bitcoin Improvement Proposals)是比特币改进提案项目,用于接收比特币升级和改善的提案列表,任何人都可以到该项目下提出自己的改进想法,使之成为一个新的提案,每个提案有多种状态,如接收、拒绝、草案、最终版等。比特币的升级和维护更多依赖于这些提案最终是否被确认,这些提案由比特币的社区共同维护和确认。
1.1.3 技术创新
比特币是第一个基于区块链技术的去中心化支付系统,有较多的特性和创新,主要体现在两个方面,一是作为支付系统的创新,二是去中心化的创新。
作为支付系统的创新主要表现为以下几个方面:比特币可以作为全球性的资产,在任何情况下无论多大的资产都可以通过区块链网络转移到目标账户里,比特币的出块时间是10分钟,交易地点不受任何物理限制,只要有网络,用户就可以通过工具发起交易进行资产转移,没有国界和地域之分;比特币的交易成本极低,普通的跨境支付费用大约为1%,而有的支付方式的费用会高达3%左右,如果使用比特币网络支付,那么只需要支付少量的交易打包费即可,并且与金额大小无关,特别是在大额支付中更能体现其手续费低的优势;比特币是去中心化的网络和系统,不归属于某一个中心化组织或者个人,它制定的规则不会被轻易修改,它的网络也不会由个别机器控制,例如发行至今,网络稳定运行已经足够证明其安全性,且其总量为2100万枚的机制至今都由所有矿工维护并未有更改;交易公开并且匿名,任何人都有参与交易的机会,且其账户具有匿名性,无须申请特殊的权限即可进入网络,仅仅通过密码学的方式来证明身份的合法性,与现实的身份无关,具备一定的匿名性。
在去中心化的创新方面,比特币带来了对系统构建的全新思考,核心是去中心化,但是仍需要正确理解比特币的“去中心化”属性,下面从3个维度来讲:
(1)架构层。在物理世界里,系统由多台计算机组成,在运行过程中,我们可以容忍部分计算机宕机而系统不受影响。比特币的网络节点分别部署在世界的各个角落里,这些节点同时也都保存着完整的区块链数据,任何一台或者多台计算机宕机,都不会影响比特币网络的其他节点,更不会影响整个区块链网络的使用。
(2)治理层。系统的所有权并不受控于某一个中心,而由多个机构或者个人共同所有。比特币网络的治理由所有参与的矿工决定,矿工的算力是分布均匀的,某个人或者组织很难控制大部分数量(51%)的矿工,这就保证了比特币系统在治理上的去中心化特性。
(3)逻辑层。从系统的设计和数据结构上看,它是一个完整的不可分割的整体,所有参与方维护的是同一份账本数据。每个参与计算的网络节点,其本身维护全量的区块链账本,且节点之间的账本具有强一致性,它们也是基于同一份数据进行验证、打包、增长区块的,其数据层实质上是一个强一致性的分布式账本。