为了便于读者了解区块链技术的发展历程和现状,本节介绍几个经典的区块链平台。
从2008年11月1日中本聪发表《比特币:一种点对点的电子现金系统》论文的时候算起,区块链技术已经经历了10多年的发展。通常,可以将区块链技术的发展分为以下3个阶段。
(1)区块链1.0:以比特币为代表的数字货币是区块链1.0的经典应用。这个阶段区块链技术的应用场景基本局限在与数字货币或金融相关的应用上,比如数字货币钱包和交易所。很多数字货币只是在比特币源代码的基础上做了简单升级。
(2)区块链2.0:以太坊的诞生,拉开了区块链2.0的帷幕,智能合约的概念拓展了区块链的应用场景,使区块链技术可以应用到社会生产、生活的各个领域。
(3)区块链3.0:区块链1.0和区块链2.0时期的项目大多数都是公有链项目,企业使用区块链技术的成功案例并不多。区块链3.0的经典应用是实现具有完备权限控制和安全保障的企业级区块链——联盟链。联盟链可以解决企业间的信用问题,其由产业链中相关企业共同开发、建设,信息上链后不可随意修改。只要对相关企业做好科普工作,就可以大大提高企业间相互配合的效率,打通一个个信息孤岛,最终形成行业大数据。联盟链的代表项目是Hyperledger Fabric,它由Linux基金会管理,国外的微软、摩根大通、世界银行和国内的华为、阿里巴巴、百度、腾讯等都参与了Hyperledger社区的建设,可以说“巨头”云集。
虽然区块链技术经过了多年的发展,但是公众对其认可和接受程度还比较有限,大规模普及和推广区块链技术的时机也不够成熟。但是随着国家的高度重视,区块链技术的落地应用正在稳步推进。随着基础设施建设的日臻完善,时机成熟的时候社会上会爆发性地涌现一大批区块链应用,这会对社会生产、生活的各个方面产生深远的影响。
比特币系统是区块链技术落地应用的第一个项目,也是经典的区块链平台。
2009年1月3日,中本聪“挖”出了比特币的第一个区块,也就是创世区块(Genesis Block),并得到了50个比特币的奖励,这也意味着比特币从理论变成了现实。
比特币最大的特色就是没有任何特定金融机构发行比特币,也没有任何机构为比特币的价值背书。比特币系统每隔一段时间就会产生一个区块,用于记录所发生的交易,记录和验证交易会得到一定数额的比特币奖励,这个过程被形象地称为“挖矿”,记录和验证交易的参与者被称为“矿工”。比特币系统是开放的,任何人下载并安装比特币客户端都可以参与挖矿,赚取比特币。
最初的比特币矿工大多是技术社区里的技术人员和爱好者。由于参与的人并不多,因此挖到比特币相对比较容易。但是那时的比特币几乎是没有价值的。最初的比特币开发者之一加文·安德烈森(Gavin Andresen)为了宣传和推广比特币,还创办了一个比特币网站,只要访问该网站的人都可以得到5个比特币。
2010年5月22日是比特币发展历程中具有里程碑意义的一天。在这一天,早期的比特币矿工拉斯洛·豪涅茨(Laszlo Hanyecz)用10 000比特币给自己的女儿买了2个比萨,大约相当于41美元。这标志着比特币第一次有了实际的价值。
2011年,津巴布韦发生了严重的通货膨胀。当时的津巴布韦政府发行了据称是人类历史上最大面额的纸币——一百万亿津巴布韦元。津巴布韦人民对政府的金融体系丧失了信心,转而追捧比特币。这进一步推高了比特币的价值。到2013年11月,1个比特币的价格飙升到了1 000美元。
比特币也经历过一些“黑暗”时刻。比如,2014年2月,世界上最大的比特币交易商Mt.Gox(昵称为门头沟)被黑客攻击,损失了85万个比特币;按当时的市值算,其价值超过4.5亿美元。随后Mt.Gox宣布破产。该事件影响了人们对比特币的信心,导致比特币大规模地贬值。
但是冷静下来后,人们意识到,安全漏洞并不是出现在比特币系统本身,而是出现在中心化的交易所系统。这其实从另一个侧面证实了去中心化的比特币系统的稳定性和安全性。随着时间的推移,人们的信心逐渐恢复。现在1个比特币的市值(截至完稿时)已经高达20 000多美元,越来越多的国家和企业开始接受、认可比特币。
● 德国财政部认可比特币为合法的私有资产,拥有者可以使用比特币缴纳税金等。
● 日本允许使用比特币来支付水电费。
● 微软、戴尔、维基百科和PayPal等知名企业陆续宣布接受比特币。
中本聪打造的比特币系统已经成长为一个庞大的数字货币“帝国”。
比特币系统是一个去中心化的分布式系统,由分布在世界各地的很多矿工参与记账,那么怎样在所有矿工之间达成共识、防止矿工在记账时作假就很重要。共识算法可以解决这个问题,实现不同节点上数据的一致性和正确性。
分布式系统是一个不稳定的系统,其中的节点随时可能掉线或死机,而且不能排除节点恶意作假,因此共识算法应具有容错性。分布式系统的核心问题就是在各节点间达成共识。达成共识的方法被称为共识算法。
在比特币系统中,共识算法需要解决以下2个问题。
● 确定选择记账节点的机制。
● 确保账本数据在全网保持正确且一致。
比特币系统通过挖矿解决以上2个问题。挖矿既是比特币系统的记账过程,又是比特币的发行机制。在比特币系统中,平均每10min会产生一个区块,矿工会将最近发生的交易记录在新区块中。那么谁才能得到记账奖励呢?比特币系统采用PoW共识算法。这是一种简单、“粗暴”的共识算法,就是谁的算力大,就由谁记账。这有点儿类似于矿工之间的“华山论剑”。那么,比特币系统是如何进行算力“比武”的呢?
当产生新区块时,网络中所有在线矿工都会参与争夺记账权,这个过程就是挖矿。比特币的区块头中包含一个“难度目标”字段,这就是系统给所有矿工出的一道数学题。
比特币的区块头中还包含一个字段 Nonce,这是为了找到满足难度目标的矿工而设定的随机数。解题的过程就是不断地调整Nonce的值,然后对区块头进行双重SHA-256运算,进而得到result。可以使用如下代码表示运算的过程:
result = SHA256(SHA256(区块头数据))
如果result小于给定的难度目标值,则视为成功解题。最先解题的矿工会取得记账权。
节点在成功解题后,会立即广播打包的区块。收到被打包的区块后,网络中的节点会按以下步骤进行处理。
(1)对打包的区块进行验证。验证的过程比较复杂,这里不展开介绍。
(2)如果未通过验证,则丢弃该区块,不做处理。比特币系统规定只有经过6个确认的交易才被认为是真实的交易。这样,即使有些矿工想作弊,也会因为得不到足够的确认而无法得逞。
(3)如果通过验证,则说明本轮挖矿已经结束,其他节点放弃竞争记账权,本节点将该区块记录在自己的账本中。
PoW算法保证了全网只有一个节点将一个区块添加到账本中,其他节点均复制账本中该区块的数据,从而保证了比特币账本的全网一致性和唯一性。
在比特币网络刚刚建立的时候,参与挖矿的人很少,中本聪本人也要亲自参与挖矿,才能维持比特币系统的运转。那时候只需要用普通的PC就可以挖到比特币。
随着比特币的推广和普及,越来越多的人接受比特币,参与挖矿。于是诞生了生产专业矿机的硬件厂商。有些矿机利用GPU(Graphics Processing Unit,图形处理单元)的计算能力进行挖矿,这种矿机被称为GPU矿机。
还有利用ASIC(Application Specific Integrated Circuit,专用集成电路)芯片进行计算的 ASIC 矿机。ASIC 芯片是一种专门为某种特定用途而设计的芯片。例如比特币采用SHA-256算法,那么比特币ASIC矿机的芯片就被设计为仅能计算SHA-256。还有一些其他种类的矿机,这里不展开介绍。
矿机出现后,普通计算机已经很难挖到比特币了。还有一些公司大量购置矿机,组成矿场,凭借规模优势提高挖矿的成功率。矿场通常开设在水电站旁边,因为那里的电费相对低廉。
为了进一步提高算力,矿池产生了。矿场和少量拥有矿机的个人可以联合起来,将算力合并,联合运作。以这种方式搭建的网站就是矿池。矿池挖到比特币后,由参与者按照贡献度分配。
以太坊的创始人维塔利克·布特林(Vitalik Buterin,人称“V神”)在区块链领域可以说是仅次于中本聪的传奇人物。他是一个俄罗斯人,4岁开始编程,12岁开始玩自己开发的游戏。17岁那年,维塔利克的爸爸向他介绍了比特币,这很快就引起了维塔利克浓厚的兴趣,他开始为《比特币周报》撰写文章,这样可以赚取一些比特币。后来他创办了《比特币杂志》,为比特币的推广和普及做出了贡献。为了专心投入比特币的研究和推广,维塔利克在入学8个月后便从加拿大滑铁卢大学休学,并活跃于欧美各国的比特币开发者社群,参与比特币的转型工作。
2013年末,维塔利克发布了以太坊(Ethereum)初版白皮书,吸引了一批认可以太坊理念的合作伙伴,并启动了相关项目。2014年,以太坊陆续发布了几个版本的测试网络,并且发起了为期42天的以太币预售,共募集到31 531个比特币,按照当时的比特币汇率,相当于1 843万美元。
2015年7月,以太坊网络正式发布,标志着以太坊区块链上线运行。
与比特币系统一样,以太坊也基于区块链的底层技术,而且它们都属于公有链,开放源代码,任何人都可以参与挖矿。从这个意义上说,比特币系统和以太坊都是“世界计算机”,它们都有遍布全球的参与者。
不同的是,数字货币不是以太坊的全部,尽管以太坊也支持数字货币,即以太币(ETH)。以太币是市值仅次于比特币的数字货币,但是以太币与比特币的设计初衷不尽相同。比特币为了实现点对点支付的功能,它的货币属性更强一些,可以在持有人之间互相流通,也可以用于购买各种商品和服务,而以太币则主要用于支付使用以太坊平台的费用。
以太坊是一个开放的开发平台,每个人都可以在以太坊平台中部署自己的应用。这一点与安卓系统很类似。但是在以太坊平台中部署应用、在区块中存储数据都是收费的。
在以太坊平台上运行的是一种叫作“智能合约”(Smart Contract)的特殊应用程序。智能合约的概念最早于1996年由法律学者尼克·绍博(Nick Szabo)提出。以太坊的诞生使智能合约从理论过渡到了实践。以太坊平台专为执行智能合约而设计,所有参与者都可以开发属于自己的智能合约应用,这使智能合约可以存储和运行在分布式账本上。
Hyperledger项目由Linux基金会于2015年发起,目的是推动跨行业的区块链技术发展。与发布单一的区块链标准不同,Hyperledger项目鼓励通过合作的方式开发区块链技术。
Hyperledger项目的核心目标如下。
● 通过使用企业级的DLT(Distributed Ledger Technology,分布式账本技术)解决方案提供对商业交易的支持。
● 建立和支持技术社区。
● 对区块链技术进行科普和推广,并提供市场机会。
● 提供促进社区发展的工具集。
● 提供由社区驱动的、开放的基础设施。
Hyperledger是开源的、发展区块链技术的协作项目,由Linux基金会管理,目前已有超过100家公司参与,包括一些大的知名公司,例如IBM、Intel、Oracle、微软、以太坊、华为、京东等。
Hyperledger 项目于2016年2月9日诞生于旧金山,由 Linux 基金会发布。那时候Hyperledger项目有30个创始会员,还有SWIFT、IBM、VMware等知名企业参与。他们的目标是发展区块链技术。Hyperledger这个名字是由Digital Asset公司捐献给Linux基金会的。
截至2020年2月,Hyperledger项目已经有超过100个会员。这些会员被分为重要会员、普通会员、准会员和学术准会员4个类型。重要会员包括IBM、摩根大通、富士通、日立等知名企业。尽管重要会员中没有国内的企业,但是普通会员和准会员中既包括华为、腾讯、京东、联想等国内知名企业,也包括北京大学、浙江大学、中山大学、湖南大学等高校,还有中国信息通信研究院、中关村区块链产业联盟、福建省区块链协会、浙江省区块链技术应用协会等组织,加上一些暂时还不知名的国内区块链企业,共有20多个国内机构参与Hyperledger项目。可见Hyperledger项目在国内引起了广泛的关注和一定程度的普及。
Hyperledger项目中包含一系列区块链子项目,具体如表1-3所示。
表1-3 Hyperledger项目中包含的子项目
Hyperledger项目使用开放的技术管理结构,它们建立了一个社区。在实现区块链项目时,社区遵循标准框架和指导方针,并欢迎志愿者对完善代码库和设计原则提出建议。
本书重点介绍Hyperledger Fabric,这是 Hyperledger家族中最大的分布式账本项目。为了便于阅读和学习,本书后文多将Hyperledger Fabric简称为Fabric。
与其他区块链网络相似,Hyperledger Fabric也提供智能合约、账本和协议来帮助参与者管理自己的交易。但是与其他区块链平台相比,Hyperledger Fabric有自己的特色。首先,它并不是与比特币和以太坊一样的公有链,它是需要授权才能访问的许可链。Fabric 区块链引入了成员的概念,只有经过认证并授权的成员才可以加入Fabric网络。这对于企业级区块链应用很有意义,因为可以很好地保障企业的数据安全。
Fabric区块链具有以下优势和特色。
(1)开源:Fabric 区块链是开源平台,任何人都可以在自己的项目中免费使用它。当然,在使用之前要了解:Fabric 区块链是为开发区块链应用提供支持的基础设施平台,使用它的企业应该具有开发团队,进而基于 Fabric 区块链开发自己的企业级区块链应用。Hyperledger项目提供了很多示例代码,供使用者参考并在开发过程中使用。
(2)广泛的适用性:Fabric 区块链广泛适用于各个行业。也就是说,无论什么样的企业都可以很方便地基于Fabric区块链搭建区块链应用。在供应链、银行、物联网、医疗、媒体、网络安全等领域,Fabric区块链都有很多应用案例。
(3)高质量的代码:Hyperledger项目对所有新增的代码都会进行仔细的检查,而且在开发文档中可以看到他们对代码所做的关键检查。所有示例程序也都是开源的,可供大家检查,这可以保障Fabric区块链代码的质量。
(4)更高的效率:Fabric 区块链的内部结构提供了更高效的能力,网络中的每个节点都承担着不同的职责,节点可以同时处理多个交易,而且不会使系统的运行速度变慢。并不是所有的节点都会用于处理交易,有的节点用于维护账本或身份验证,有的节点用于对交易进行排序。这可减少负责交易处理的节点的工作量。
(5)模块化的设计:Fabric区块链支持模块化的设计,可以为不同的应用场景开发不同的算法。例如,可以为加密选择一种算法,为共识选择另一种算法。这种即插即用的模块化设计使Fabric区块链更便于扩展、更加灵活。
(6)性能和扩展性:区块链的性能受很多因素影响,例如交易的大小、区块的大小、网络的规模和硬件限制等。在Fabric区块链中,节点都是经过认证的,它们彼此互信,且所有节点的操作都是有迹可循的,无须通过烦琐、耗时的挖矿过程争夺记账权。
Hyperledger社区的“性能与规模工作组”正在制定一套衡量区块链性能的标准草案,并开发了一个区块链性能测试框架Hyperledger caliper。随着工作的推进,区块链平台性能与规模特性的衡量标准规范逐步形成。IBM研究院曾发表过一篇关于Fabric区块链的评估报告,对Fabric区块链的系统架构进行深入探讨,并对Fabric1.1.0平台进行性能评测。
该团队的评测结果表明:与1.0.0版本相比,1.1.0版本在性能上有了大幅提高。本书介绍的Fabric 2.x也对区块链的性能进行了全面优化。
随着区块链技术的普及和推广,越来越多的程序员开始从事区块链开发工作。经典的区块链编程语言如下。
(1)Solidity:以太坊推出的智能合约开发语言。由于以太坊的影响力,加上Solidity又是一门专注于开发智能合约的语言,因此它是应用比较广泛的区块链编程语言。
(2)Java:作为历史悠久、热度很高的编程语言,Java 拥有超过900万的开发者。很多区块链应用是使用Java开发的。
(3)Go:Google公司于2009年推出的编程语言,也是本书的主题之一。而其他流行的编程语言几乎都是20世纪的产物。Go语言是近年来非常流行的一门新兴编程语言,具有语法简洁、高并发、高效运行等特性,比较适合区块链底层系统的开发。Fabric 区块链和以太坊官方客户端Geth都是使用Go语言开发的。
(4)JavaScript:常用的开发Web应用的前端脚本语言。在开发区块链应用时,经常会使用JavaScript。
(5)Python:近年来很流行的编程语言。编者在编写本书时,Python在知名的TIOBE开发语言排行榜中排名第1名。
(6)C#:微软公司推出的编程语言,广泛应用于Windows应用和Web应用的开发。
(7)C++:经典的编程语言,比较适合区块链底层系统的开发。比特币就是使用 C++开发的。
Go语言既可以用于开发Fabric区块链平台,也可以用于开发Fabric区块链应用。本书第3部分将介绍Go语言编程基础,以及使用Go语言开发Fabric区块链智能合约和客户端应用的方法。