前言

2016年12月,“区块链”(BlockChain)被列入国家十三五规划,并作为未来重点突破与发展的六大关键技术之一。2018年5月,两院院士大会将区块链的发展趋势表述为“以人工智能、量子信息、移动通信、物联网、区块链为代表的新一代信息技术加速突破应用”。区块链领域正在以前所未有的速度聚集着社会资源,加速技术应用与关键技术的突破,并受到国家、企业、资本等各方的广泛关注。当前,区块链作为风口概念受到国内外媒体的火热炒作,同时受到大量VC风投的极力热捧。

根据产业创新创投数据平台Innov100的数据统计,2017年全球ICO(Initial Coin Offering,首次代币发行)融资金额高达350亿元。2018年1月至5月,ICO融资规模为118亿美元。博链研究发布的《全球区块链+创投报告》指出,截至2017年4月底,全球455家区块链公司累计获得融资金额达19.47亿美元。在获投公司数量上,中国共有61家位列全球第二。2018年第1季度,“俄罗斯微信”Telegram进行了两轮ICO融资分别获得8.5亿美元共17亿美元。中国平安旗下金融管理门户金融壹账通获得SBI投资(思佰益)和IDG资本的6.5亿美元融资,成为2018年第1季度中国区块链行业融资额最高的项目。2018年6月,Block.one推出的加密数字货币EOS结束了为期350天的众筹活动,总融资额近42亿美元。

截至2018年3月底,我国以区块链业务为主营业务的区块链公司数量已经达到了456家,区块链产业初步形成规模。同时,区块链明星创业公司如井通科技、智链、量子链、小蚁、趣链、布比等如雨后春笋般纷纷出现并迅速成长,国内BAT、小米等互联网巨头与众安保险等新型互联网公司相继投入资源,研发核心技术与探索应用落地,传统行业巨头如中国平安、万向集团等也耗巨资,成立新型网络科技公司或实验室,研究区块链技术与应用。这些企业都试图在未来的科技竞争中弯道超车,抢占先发优势,积累资源与技术壁垒。鉴于国内行业发展的碎片化,以及应用存在一定的盲目性,国家工信部在区块链产业整合上积极引导,由中国电子技术标准化研究院牵头,联合国内典型区块链企业成立中国区块链技术和产业发展论坛,共同制定我国区块链技术的相关标准与推动产业发展。该组织于2016年10月18日发布了《2016年中国区块链技术和应用发展白皮书》;2017年5月与12月分别提出了我国区块链技术和产业发展论坛标准《区块链参考架构》与《区块链数据格式规范》,其中,《区块链参考架构》已处于国家标准立项阶段;2018年5月发布了《2018年中国区块链产业白皮书》,2018年6月拟筹建全国区块链和分布式记账技术标准化技术委员会,推进区块链标准体系框架工作,提出了基础、业务和应用、过程和方法、可信和互操作、信息安全等标准,并初步明确了21个标准化重点方向及相关标准化方案。同时,2016年12月以来,中国信息通信研究院联合数据中心联盟等单位相继发布了可信区块链系列标准《第1部分 区块链技术参考框架》 《第2部分 总体要求和评价指标》 《第3部分 评测方法》等,2018年4月9日,牵头与158家企业联手启动了“可信区块链推进计划”,截至2018年9月初,推进计划成员已发展至225家,陆续成立了标准与评测、知识产权、云服务等10个工作组,积极推动国内外企业的可信区块链标准以及产品评测工作。另外,中国电子产品可靠性与环境试验研究所、中国银联电子支付研究院与同济苏州区块链研究院、贵阳区块链测试中心等都在研究与提供相应的区块链平台测评服务。国内的这些工作都在积极推动和促进国内区块链产业的发展,并积极与国际标准(ISO/TC 307等)、ITU-T FGDLT组与SG16研究组等进行接轨及交流,这有利于统一对区块链新兴技术的认知和共同解决区块链关键技术问题,对我国区块链产业的发展具有重大意义。

与此同时,国际上影响力较大的主流区块链开源平台逐渐融合发展,互相借鉴,目前已经涌现出数个典型的生态体系及平台。

□ 以比特币为代表的“虚拟货币”平台开源社区生态体系。比特币就是以区块链作为底层技术进行设计与研发的,中本聪(Satoshi Nakamoto)在2008年发表的论文《Bitcoin: A Peer-to-Peer Electronic Cash System》中就曾指出,比特币是通过随机哈希值为全部交易加上时间戳,并将它们融入不断延伸的、基于随机哈希值的工作量证明链条中作为交易记录(即区块),除非重新完成全部的工作量证明,否则形成的交易记录将不可更改。这种独特的记账方式使得比特币的发行可以不依赖于任何政府与货币机构的公信力,而是根据特定共识算法并通过大规模计算来生成的,由全系统所有节点共同背书,其记账权由全网51%的算力决定,第一次在全球范围内实现了一个去中心化的真实的点对点电子现金系统。这完全颠覆了以往人们对“货币”的认知,点燃了以比特币为代表的“虚拟货币”风口。

□ 以以太坊(Ethereum)为代表的支持可编程智能合约的公有链或公链平台开源社区生态体系。其核心理念是将区块链作为可编程的分布式信用基础设施,支持自动化运行的智能合约应用,并将平台交易内容扩展到金融、股权、债务凭证等领域。Vitalik Buterin等创始人于2013年12月开始发起以太坊项目,并迅速激发了人们在可信平台上交易金融资产的热情与创造力,现在应用方面有超过上千个DApp上链(https://www.stateofthedapps.com/),已经成为具有国际影响力的开源公链平台。

□ 以超级账本Hyperledger Fabric为代表的联盟链平台开源社区生态体系。其目标是完全面向企业级应用场景的许可区块链(Permissioned Chain),用以解决多个弱信任企业主体之间的信任问题,以降低企业间复杂繁琐业务流程带来的信任成本,实现在可控主体范围内共享敏感数据,从而有效提升企业主体之间大规模协作活动的效率。Hyperledger Fabric开源社区提供带有身份权限认证的商用区块链平台,采用模块化插件的灵活设计架构,避免了比特币类公链平台与以太坊类公链平台交易效率低下、缺乏完善的身份认证模块等问题,能够广泛应用于金融资产存管、供应链、共享经济等领域。Hyperledger Fabric自2015年底开源以来发展迅速,已经成为主流的联盟链开源平台。另外,值得注意的是,企业以太坊联盟(Enterprise Ethereum Alliance, EEA)、蚂蚁金服、腾讯、百度、BCOS(由微众银行、万向、矩阵元共同发布的开源联盟链平台)、众安、趣链、CITA(秘猿科技)等都是其潜在的竞争对手或产品。企业级BaaS(Blockchain as a Service)平台作为基础设施服务亦是未来国际企业市场的竞争焦点,国际巨头IBM、微软等已经在此领域深耕发力多年,以实现高效动态的部署跨域区块链网络的能力,从而提供高质量的商用企业级服务。

此外,目前还涌现出IPFS(InterPlanetary File System,星际文件系统)、石墨烯(Graphene)、哈希图(Hashgraph)、Blockstack、侧链、DAG、分片技术(Sharding)、抗量子攻击算法、高性能跨链技术、新型共识机制(如拜占庭协商BA-VRF、DDPOS、HyperPOW等)等众多的新型区块链平台、新型底层支撑技术以及相关方向,以着力解决当前区块链系统面向领域应用中遇到的关键技术问题(如指数量级提升单链或多链交易处理性能),积极探索新型技术落地与大规模应用场景,这些都是未来具有前景与值得关注的潜在技术。

本书重点介绍了Hyperledger Fabric系统架构的设计与实现,根据Hyperledger的官网介绍,超级账本旨在通过创建企业级的开源分布式账本框架,协助组织扩展、建立行业专属的应用程序、平台和硬件系统来支持交易业务,是全球跨行业领导者的合作项目,覆盖金融、银行、物联网、供应链、制造行业和技术领域。Hyperledger Fabric作为联盟链的典型架构,逐渐得到了国际主流公司与研究机构的青睐与大力支持。截至2018年2月底,已经有260个组织机构加入了Hyperledger社区阵营,包括IBM、Intel、Oracle、思科、摩根大通、富国银行、百度、阿里巴巴、腾讯、联想、小米、迅雷、华为等,分为高级会员、标准会员与联盟会员;另外还有一种学术性机构联盟会员,如剑桥大学贾吉商学院、北京大学、浙江大学等。Hyperledger项目设有理事会、技术指导委员会、市场委员会和用户顾问团等,代码许可协议采用Apache License Version 2.0,以满足大多数商业用途需求。截至2018年7月底,超级账本亚太副总裁Julian Gordon声称超级账本中20%的会员(50多个中国会员,百度属于高级会员)与10%的贡献都来自中国。目前,Hyperledger开源社区包括11个商业区块链和分布式账本项目,其中3个项目是中国企业与个人首先发起或提供主要工作的,包括Hyperledger Caliper(区块链性能测试平台,华为等)、Hyperledger Cello(区块链平台部署和运行管理项目,Oracle区块链首席架构师杨保华博士等)以及Hyperledger Explorer(区块链数据可视化工具项目,上海旺链科技等)。另外,中国企业与个人也为Hyperledger Fabric等项目做出了重大贡献。

Hyperledger Fabric得益于模块化插件架构等良好特性,近年来的发展异常迅速,已经开始在很多国内外机构和大公司的实际PoC(Proof of Concept,概念验证)项目以及实际应用系统中推广使用,如民生银行贸易金融领域产品即国内信用证信息传输系统目前支撑数十亿级别的交易业务量,以及智链ChainNova航运物流行业项目等。Hyperledger Fabric所在的GitHub开源社区也非常活跃,Meetup以及国内外会议上的相关研讨交流同样异常频繁。自2017年3月正式发布1.0测试版本以来,GitHub代码更新速度飞快,经过2016年0.6技术预览版本的升级之后,1.0版架构重新分离出Orderer节点与Committer节点,以提高系统的可扩展性与并发性,并且引入模块插件化的共识算法,整个系统架构日臻成熟实用。Hyperledger Fabric于2017年7月在社区正式发布了1.0正式版代码,在这个过程中约有27个组织、159名开发者、3500多个代码修改以及超过一年的协作和测试。发布1.0版是超级账本社区真正的里程碑事件,用户和技术供应商可以基于Hyperledger Fabric来推进产品的部署和运营。这标志着Hyperledger Fabric已经能够作为一个较为独立完整的开源软件被集成到其他系统中,提供给全世界的开发者进行研究。然而,Hyperledger Fabric开源社区并没有在1.0版本中发布sbft等支持拜占庭容错的重要共识机制模块,而是谨慎地推迟了该模块加入发布的时间,因此,Hyperledger Fabric还有很长的路要走。但是作为一个开源区块链系统,Hyperledger Fabric已经可以作为一个有影响力的典型联盟链范例来进行深入研究,这对于普及推广区块链技术有着积极意义。

作为Blockstream、Digital Asset Holdings与IBM贡献给开源社区的许可联盟链平台,Hyperledger Fabric是一个模块插件化的链式区块数据共享账本平台,支持自动化智能合约。更准确地说,它是利用密码学特征将构造成区块的交易数据集合基于区块哈希值链接起来,按时间戳顺序形成以区块对象为基本单元的“链”,并在参与节点之间共享该“链”,同时链上内容根据共识机制由参识节点集体维护,而不再由单一节点决定记账权,关于其来源在本书中会有更详细的探讨。总体来说,Hyperledger Fabric具有如下鲜明的技术特点:

□ 支持可插拔的架构;

□ 基于PKI体系与X.509标准身份证书的安全管理体系;

□ 支持多通道、隐私数据集合等多粒度的数据隐私保护特性;

□ Peer、Orderer等节点可扩展性良好;

□ 支持多种链码(智能合约)开发语言(Node.js、Go、Java等);

□ 基于Docker容器技术提供链码运行时环境等。

这些特点使得Hyperledger Fabric能够具备提供高效可靠的企业级区块链平台服务能力的潜质,并真正从研究走向实用,企业界与开源社区对Hyperledger Fabric异常热情,纷纷表示热烈拥抱与接纳。除了Fabric项目外,Hyperledger还包括Burrow(支持以太坊虚拟机)、Indy(提供去中心化的身份管理机制)、Iroha(关注移动特性的账本平台项目)、Sawtooth(区块链平台)、Caliper(区块链性能测试平台)、Cello(提供区块链平台部署和运行管理)、Composer(提供面向链码开发的高级语言支持)、Explorer(区块链数据可视化工具)、Quilt(关注账本互操作性)、uRSA(共享加密库项目)等,这些项目构成了相对完善的区块链生态系统。

笔者正是在了解Hyperledger Fabric源码中逐渐熟悉其系统架构与实现机制的,并选择1.1.0正式版作为剖析对象,能够体现当前Fabric架构设计发展的主流新特性(隐私数据集合等)演变,并兼顾Fabric 1.2(1.2.0与1.2.1版本)与Fabric 1.3(1.3.0版本)中架构与功能升级的源码,以帮助读者能够深入了解整体架构的演变,让读者在应用Hyperledger Fabric时有所参考,从而对推进项目落地能够有所帮助。

本书面向的读者

□ 区块链应用开发人员

□ 区块链底层开发人员

□ 区块链技术爱好者

□ 分布式计算方向研究人员

如何阅读本书

限于篇幅,本书没有深入介绍比特币、以太坊等主流平台体系架构以及Docker、gRPC、protocol buffer、yaml配置文件、现代密码学等常用系统知识。本书不是一本初级入门资料,所以需要读者具备相关的基础知识。同时,Hyperledger Fabric知识体系非常丰富,本书也不试图成为一部能够兼顾所有方面的百科全书式的权威指南,例如本书就没有重点分析Fabric CA与Fabric SDK等相关模块。

本书介绍了Hyperledger Fabric的架构设计与实现原理,基于源码剖析了Hyperledger Fabric核心模块,以Hyperledger Fabric系统运行流程为主线展开分析,是一部面向Hyperledger Fabric系统架构的技术专著。因此,本书更适合于Hyperledger Fabric底层架构开发者与应用开发者,以及对Hyperledger Fabric感兴趣的技术爱好者。

希望读者学习相关知识(现代密码学、X.509标准等),搭建实验环境以配合源码阅读学习(推荐JetBrains GoLand或IDEA编程开发环境阅读源码与编写Go程序)。Hyperledger Fabric官方网站提供了非常不错的入门教程与背景资料,介绍了Hyperledger Fabric的专业知识与示例。如果读者对现代密码学和PKI安全体系有所了解,将更容易理解Fabric的身份权限控制机制,有兴趣的读者可以进一步参考相关资料。当然,最重要的学习资源还是源代码本身,正如大师所言,“源码面前,了无秘密”。

研究底层架构需要把握真正有价值的整体系统架构,应该将研究的关注点集中在理解系统设计的逻辑思路、重要原理与机制、核心模块接口等方面,如果不是为了改进和优化专用模块,则不必过分关注局部实现细节,从而丢失全局架构设计的宏观视野。因此,结合整体系统架构去研究核心模块会更容易理解Hyperledger Fabric系统设计的精髓。

对于区块链应用开发者,推荐按照交易处理流程的顺序阅读本书。对于区块链底层开发者,推荐按照本书章节的正常顺序进行阅读。对于区块链技术爱好者,推荐除了核心模块章节之外,可以尝试研究第6章Gossip消息模块,该模块是通道上组织节点间通信的基础,提供了高效数据分发与状态的同步机制,属于更底层的基础服务,实现机制相对比较复杂。如果读者更关注Hyperledger Fabric其他层次的主题,则可以暂时跳过不作深入了解。

本书结构

本书分为7个正文章节与附录。第1章介绍区块链的基本概念、Hyperledger Fabric架构等基础知识。第2章至第7章分别介绍Orderer排序节点、Peer节点、Endorser背书节点、Committer记账节点、Gossip消息模块、公共功能模块等核心模块的底层细节,使得读者可以完整了解Hyperledger Fabric架构的设计思想与实现机制。

第1章介绍了区块链的基本概念、Hyperledger Fabric架构与流程,并以e2e_cli为例介绍Fabric系统部署流程,帮助读者搭建实验环境进行研究。

第2章介绍了Orderer排序节点,包括Orderer服务节点启动流程、Broadcast交易广播服务、Orderer共识排序服务、Deliver区块分发服务等。

第3章介绍了Peer节点功能模块,包括Peer节点启动流程与Peer命令模块(Channel通道子命令、chaincode链码子命令等)。

第4章介绍了Endorser背书节点的背书处理流程,负责启动链码容器提供链码服务,对模拟执行结果签名背书并返回提案响应消息。

第5章介绍了Committer记账节点的功能模块。其中,交易验证器用于验证交易数据,并调用VSCC验证背书策略的有效性,账本提交器执行MVCC检查以标记交易的有效性,并提交数据更新账本。

第6章介绍了Gossip消息功能模块,包括Gossip消息模块的启动流程、消息通信与处理机制、节点管理机制、数据分发与状态同步机制、反熵算法等,可以支持节点的动态加入与退出,提供高效的数据分发与状态同步机制。

第7章介绍了Hyperledger Fabric中常见的公共功能模块,包括账本数据存储模块、安全服务模块、Events事件模块等。

附录包括Hyperledger Fabric相关文件的解析,包括orderer.yaml配置文件、core.yaml配置文件、e2e_cli示例相关文件等。

关于本书代码

本书分析的代码版本为Hyperledger Fabric 1.1.0正式版(2018年3月发布),研究思路是以Hyperledger Fabric运行流程为主线展开分析,重点解析Hyperledger Fabric的架构设计与实现原理,完整代码请从Github官网https://github.com/hyperledger/fabric下载。

致谢

非常感谢Hyperledger Fabric开源社区贡献者以及本书所有文献引用的原作者,开源共享促进社会与技术进步!

非常感谢机械工业出版社华章分社的编辑杨福川、张锡鹏以及背后的工作人员,是你们的专业精神、严格要求与辛勤付出使得本书的出版成为可能!

在撰写本书的同时,本人获得了互联网上众多区块链开发人员以及高校、企业同行们的无私支持,他们对技术的执着追求令人印象深刻,是值得尊敬与学习的资深领域专家。同时本人也得到很多领导、同事与朋友的热情帮助,如果没有他们的默默支持,本人是无法完成本书的,在此一并致谢。

因时间仓促与水平有限,本书难免有错误遗漏之处。欢迎读者批评指正,将错误与不当之处发送至邮箱xinli@nudt.edu.cn,或者通过QQ交流群491318059以及微信群与笔者(QQ号/微信号501319508)交流,以便重印或再版时及时更正。同时,本书在撰写过程中参考了大量文献与互联网资料并标注了引用出处,在此表示感谢,如果存在疏漏或版权问题,请发送邮件或直接联系笔者,以便及时更正。

李鑫