前言
为什么要写这本书
区块链是在全球范围内受到极高关注的技术。简而言之,区块链就是防篡改并且由大家共同维护的账本,其中包含不断增长的数据记录列表。根据现在的发展趋势,区块链将在商用领域得到广泛应用。
超级账本(Hyperledger)是Linux基金会旗下的区块链开发平台项目,致力于发展跨行业的商用区块链平台技术。超级账本项目自创立伊始便吸引了众多行业的领头羊,包括金融、银行、互联网、运输、制造等行业。目前,超级账本项目在全球拥有超过100个成员,包括IBM、Cisco、Intel、J.P. Morgan、荷兰银行、SWIFT、R3等。基于区块链技术、智能合约及其他相关技术,超级账本项目致力于建立新一代的分布式账本交易应用平台,从而在简化与商业流程相关的事务的同时,建立起商业信任、透明、审查等能力。Hyperledger Fabric子项目是以IBM早期捐献出的Open Blockchain为主体搭建而成的,是一个带有可插入各种功能模块架构的区块链实施方案,其目标是建立一个更加标准化的开源区块链开发平台,类似OpenStack之于云计算。开源地址是:https://github.com/hyperledger/fabric。Fabric主要框架的核心开发语言是Go语言,它非常适合联盟链,具有更高的商业应用前景。
从2015年开始,由于在IBM中国实验室工作,我开始接触区块链技术和IBM的Open Blockchain项目(即Hyperledger Fabric的前身),并开始为中国的金融用户推荐它,帮助这些用户借助区块链的技术价值来实现科技和业务的创新。到了2016年下半年,Hyperledger Fabric开发平台阶段性地稳定在0.6版本,无论是IBM还是云图智链(后来被智链ChainNova并购),都在很多行业应用场景中开始实践Fabric 0.6版本。那时在国内,绝大多数的金融企业都在尝试通过Hyperledger Fabric 0.6平台来开发属于自己的区块链应用,我在那个时候有机会参与了不少相关的区块链项目,涉及领域包括数字积分、资产托管和交易、保险、高价值商品溯源等。也正是从那时起,萌生了编写一本书来解释Hyperledger原理,介绍各项开发组件,并通过真实案例还原区块链开发全过程,让更多的人觉得区块链或者Hyperledger离自己并不遥远。于是,当时我们几个作者从社区、不同的开发项目,以及各个开发团队中开始收集和整理资料,完成了基于0.6版内容的大部分写作工作。
但恰逢此时,Hyperledger的第一个商用版本1.0准备推出,我们也第一时间从Linux基金会得到了这个消息。从当时1.0版本的计划来看,推出它的目的主要有两个方面:一是Hyperledger希望以这个版本为基调,作为企业级区块链平台;二是为了解决0.6版本中出现的一些问题,1.0版本进行了很大的改变和调整,可以说这个变化是翻天覆地的,以至于我们半开玩笑地说从0.6版本到1.0版本甚至没有可直接升级的路径。当时我还在IBM工作,第一时间找到了云图智链的张增骏老师等几位作者和出版社的高婧雅编辑,和他们商量是否需要调整写作方向和内容,因为在此之前实际上张增骏老师已经在上一个版本的写作中付出了很多的时间和精力。几乎是在十分钟之内我们就一致决定要基于Hyperledger Fabric 1.0版本重新组织材料,重新编写这本书,因为我们希望自己投入的时间和付出的精力为社区、众多开发者和广大对区块链技术感兴趣的读者带来一本真正实用的书,而不是仅仅为了把我们几个人的名字留在封面上。数月后的今天,我们把初审过的稿件提交给出版社。这个过程中由于Hyperledger开源社区和代码版本不断迭代内容也不断调整,经历了更多我们之前没涉及的新行业和应用场景,甚至经历了我个人工作角色的变化,我们几个作者最终坚持完成了本书的写作。当然必须承认,由于能力和经验不足,本书还有很多提升空间,内容本身也难免出现表达不准确的地方。本书希望抛砖引玉,欢迎读者多提宝贵意见,指出本书存在的技术错误,争取在下一版本中能纠正错误,不断完善,进一步提升质量。同时,我们还会一直基于Hyperledger这个平台不断地进行产业实践,后面还会以本书为起点策划系列丛书,把我们在工作学习过程中得到的启发和经验分享给读者。
本书作者大多来自智链ChainNova,均具有多年IT工作、实践经验。智链ChainNova与超级账本社区一直有非常紧密的合作。2017年智链ChainNova研究院联手Linux Foundation和IBM,共同主办了HyperLedger Fabric商用正式版本1.0发布后Hyperledger开源社区第一次线下会议(北京Meetup), Hyperledger全球副总裁、亚太区负责人Julian Gordan和多家国内知名金融企业、科技企业高层出席。在2018年,智链ChainNova正在计划携手Linux Foundation、北京大学和IBM共同主办超级账本黑客马拉松大赛(HyperLedger Hackathon)。同时为了进一步活跃Hyperledger社区,我们还即将承办多项开源社区活动,欢迎读者积极参与。相信读者将在学习区块链技术和Hyperledger的过程中获益匪浅。
本书特色
笔者是Hyperledger社区成员,参与超级账本社区的日常工作,了解超级账本发展和技术细节的第一手资料。本书以Fabric商用正式版本1.0作为底层平台,其中也凝结了我们在Hyperledger开发理论和实际操作方面的经验。
本书深入讨论Hyperledger的核心技术,帮读者分析原理、关键实现与使用,是为数不多深入探讨和研究区块链的书籍之一。
我们的目标是把本书作为高校、科研院所、职业培训、企业技术学习的教材,向社会普及Hyperledger,培养更多的Hyperledger开发人才。
读者对象
□区块链从业者
□区块链应用开发人员
□其他区块链技术爱好者(金融/Fintec从业者、产品经理、企业管理者等)
□计算机及相关专业师生
如何阅读本书
本书共有12章内容,大体可以分为三篇内容。
准备篇(第1~2章),介绍区块链的基本概念,感受区块链的魅力。
第1章 本章是区块链技术与生态的概览,涉及区块链的基本概念、演进、主流平台,并着重分析企业级区块链平台的应用场景,有助于读者对区块链和Hyperledger Fabric 1.0(以下简称Fabric)的设计理念有整体性的了解。
第2章 本章介绍Fabric的安装、部署与调试。抛开复杂的底层技术细节,简化复杂的部署过程,快速体验Fabric的强大功能,以便有直观的感受。
核心篇(第3~9章),从系统架构开始讲解内部实现机制。
第3章 本章基于Fabric 1.0讲解区块链的架构,这是后续章节的基础,高屋建瓴地看待各个部件之间的关系和运行逻辑。本章涉及系统逻辑架构、网络节点架构、典型的交易流程、消息协议结构、策略管理和访问控制等内容,后面章节会从技术角度逐一“拆解”。
第4章 本章介绍基于Gossip的P2P数据分发机制,包括节点启动与成员管理、主节点选举与基于反熵的状态同步、身份认证与管理、多路分用与分区处理过程、消息的多种验证策略等。
第5章 本章介绍最为基础的分布式账本技术,它涵盖账本数据、索引数据、状态数据、历史数据等的实现技术。
第6章 本章介绍如何在排序服务上实现多通道的数据隔离,包括创建通道、节点加入通道等。排序服务采用插件化设计,可以根据业务场景的需求采用不同的共识算法。本章后面的内容详细介绍了排序服务的接口,以及实现了排序服务接口的Solo和Kafka模式。
第7章 本章介绍Fabric 1.0支持的多链及其内部的实现,多个链同时运行是一个系统工程,本章从数据存储、链码、命令行工具和SDK实现等多个方面分析如何支持多链。
第8章 本章介绍成员管理机制。它分为两个部分,第一部分详细介绍了MSP机制,包括MSP成员的验证、目录结构和配置最佳实践等;第二部分介绍可选的Fabric CA,包括服务端的安装部署和客户端的使用,还介绍了服务端提供的RESTful接口。
第9章 本章介绍Fabric 1.0上智能合约的实现。包括的内容有链码的生命周期管理、内置的系统链码、链码的相互调用、背书节点和链码的有限状态机等。
应用篇(第10~12章),从安装部署和应用开发的角度,通过一个票据背书的案例讲解如何基于Hyperledger Fabric 1.0开发区块链应用。
第10章 本章介绍Fabric 1.0的应用开发模型。从应用开发的角度看,开发者需要关注两部分:一部分是基于不同语言的SDK开发和区块链网络交互的应用程序;另一部分是实现超级账本的智能合约。本章详细介绍HFC SDK各个模块及其主要功能,链码的主要接口及其功能。
第11章 本章介绍多种Fabric 1.0的部署方式,包括分别基于Vagrant、Virtualbox、Docker的运行环境,以及BYFN脚本的使用。详细说明如何手动构建Fabric 1.0网络等。
第12章 本章通过一个票据背书示例,讲解如何实际开发一个基于Fabric 1.0的区块链应用。通过本章的实践,读者能够掌握区块链应用开发的方方面面,然后就可以动手开发具体的项目了。
读者反馈与勘误
欢迎读者朋友反馈,请让我们知道你对本书的看法——你喜欢哪些地方,不喜欢哪些地方。读者反馈对于我们很重要,因为这将帮助我们继续写作使你获益的书籍。反馈意见请发送E-mail至jessie@chainnova.com,并在邮件主题中指明书名,我们将尽力解决问题。如果你有专长领域,并对写书或为书做出其他贡献感兴趣,请访问www.chainnova.com参见作者指南。
特别致谢
首先感谢本书的其他作者——张增骏老师、朱轩彤老师和陈剑雄老师。他们在工作之余,挤出宝贵时间为本书贡献了他们对区块链技术和Hyperledger的理解和洞察。特别感谢张增骏老师在工作本身比较繁忙的前提下,为本书花费了很多精力,他不仅在内容上积极供稿,还在审定、修改和校正方面下了很多工夫。朱轩彤老师博闻强识,本身具有很强的行业背景,对科技产业的发展又格外关注,这些在本书第1章中得到了充分体现。智链首席科学家陈剑雄也对本书的内容给出了很多宝贵的意见和建议,同时对本书合作的达成给予了支持。
万分感谢超级账本执行董事Brian Behlendorf先生,北京大学陈钟教授和中国信息通信研究院云计算与大数据所何宝宏所长在百忙之中拨冗为本书做序,让我感觉特别荣幸。他们在各自领域都是最顶尖的专家,同时对区块链技术都有深刻且独到的见解。还有苏州同济金融科技研究院马小峰院长、中国电子学会区块链专委会孙贻滋秘书长和超级账本中国技术工作组杨保华主席为本书写来热情洋溢的推荐,令人备感温暖。
在成书的过程中,和我一起工作和合作的很多专家对本书都给予了不同程度的支持和帮助,像Linux基金会超级账本亚太区副总裁Julian Gordon和中国地区顾问龙文选先生,北京大学(天津滨海)新一代信息技术研究院马修军副院长,中国信息通信研究院云计算与大数据所魏凯主任和卿苏德博士,IBM的各位领导和专家,以及其他各个单位的领导和大咖,在此抱歉不能一一尽述。
非常感谢机械工业出版社华章公司的编辑高婧雅,她的敬业精神和编辑效率令我由衷敬佩,她的反馈、建议、鼓励和帮助引导我们克服诸多困难完成全部书稿。同时,本书的推广得到了CSDN及其副总裁孟岩先生、InfoQ及其总编辑郭蕾先生这些好朋友的大力支持。
最后,因为工作和写作,牺牲了很多本该陪伴家人的时间。我要特别感谢我的家人长期以来对我的默默支持和理解。
谨以本书献给我最亲爱的家人,多年以来帮助、支持我的师友,以及众多热爱区块链技术的朋友!
董宁
2017年12月