1、 内 容 简 介 2018 年是中国区块链发展的元年,火热的市场环境下,各互联网公司纷纷试水区块链落地项目。本书以区块链原理及其对应的 Java 实现为主线展开,详细剖析区块链底层技术,主要内容包括区块链的底层架构、密码学原理、P2P 网络原理、分布式一致性算法、知名公链区块设计、知名公链区块存储技术、知名公链币的设计、联盟链管理后台的原理等。读者在学完本书后,可自行设计联盟链。本书内容基于 Java 语言,为读者打开了区块链底层研发大门。未经许可,不得以任何方式复制或抄袭本书之部分或全部内容。版权所有,侵权必究。图书在版编目(CIP)数据 区块链底层设计 Java 实战/牛冬编著.北京:电子
2、工业出版社,2019.1 ISBN 978-7-121-35525-7.区.牛.电子商务支付方式JAVA 语言程序设计.F713.361.3 TP312.8 中国版本图书馆 CIP 数据核字(2018)第 259630 号 责任编辑:安 娜 印 刷:三河市君旺印务有限公司 装 订:三河市君旺印务有限公司 出版发行:电子工业出版社 北京市海淀区万寿路 173 信箱 邮编:100036 开 本:787980 1/16 印张:18.5 字数:352.8 千字 版 次:2019 年 1 月第 1 版 印 次:2019 年 1 月第 1 次印刷 定 价:69.00 元 凡所购买电子工业出版社图书有缺损问
3、题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888,88258888。质量投诉请发邮件至 ,盗版侵权举报请发邮件至 。本书咨询联系方式:010-51260888-819,。序 自 20 世纪 80 年代计算机技术兴起以来,几乎每隔 10 年就会有一次比较重大的技术变革。20 世纪 90 年代互联网和搜索技术从美国风靡全球;21 世纪初,云计算和移动互联网成了弄潮儿。而今,区块链浪潮袭来!特别是 2018 年初以来,区块链成了街谈巷议的话题。在招聘市场上,区块链人才炙手可热,一些城市为了吸引区块链人才下足血本。杭州区块链产业园为了吸引高层次区块链人才
4、入驻,实行购房补贴最高达 300 万元人民币的政策,并补贴公用住房、云服务补助和研发经费;上海杨浦区对引入的区块链人才给予 10 万元人民币住房补贴,补贴最长时限可达 3 年。在研发领域,各个互联网公司纷纷试水区块链落地项目。与之对应,区块链职位的招聘市场也是热火朝天。随着区块链研发的热浪,区块链培训机构也纷纷进场。目前区块链研发培训周期基本都在两周左右,收费 20000 元人民币以上。但培训效果却不尽如人意,笔者面试区块链岗位的人才时,发现几乎所有的小伙伴只是对区块链概念有模糊印象,至于如何实战知之甚少,如何自研区块链底层技术知之更少。所以说,区块链人才的火热最主要或者最根本的原因是真正的区
5、块链高端人才极为稀少。因此,这也成了本书写作的初衷,即试图降低区块链底层学习和开发的门槛,缩小学习区块链原理和理论到进入实战的鸿沟。本书以区块链原理及其对应的 Java 实现为主线展开,各章内容如下:第 1 章是区块链简介,从研发维度戏说、正说区块链,评说区块链的应用前景。第 2 章介绍区块链的底层架构。第 3 章讲区块链中所用的密码学原理及 Java 实现。IV 区块链底层设计 Java 实战 第 4 章讲 P2P 网络原理及 Java 实现。第 5 章讲分布式一致性算法及 Java 实现。第 6 章讲知名公链的区块设计及 Java 实现。第 7 章讲知名公链的区块存储技术及 Java 实现
6、。第 8 章讲知名公链币的设计及 Java 实现。第 9 章讲联盟链管理后台的原理及实现。第 10 章讲联盟链的运营。本书适用于区块链爱好者、区块链初学者、想自行开发设计区块链底层的有 Java基础的读者。当然,笔者学习和实践区块链技术刚刚 2 年,因此书中难免有理解和实践不足之处,“卑辞俚语,不揣浅陋”,欢迎读者和笔者交流学习,共同进步,一起为区块链落地和人才培养体系建设略尽绵薄!目录 V 目录 第 1 章 区块链简介.1 1.1 戏说区块链.2 1.2 正说区块链.3 1.3 区块链的未来:联盟链.5 1.4 小结.7 第 2 章 区块链架构.8 2.1 比特币架构.9 2.2 以太坊架构
7、.10 2.3 Hyperledger 架构.13 2.4 区块链通用架构.16 2.5 小结.19 第 3 章 密码学.20 3.1 加密与解密.21 3.1.1 加密与解密简介.21 3.1.2 Java 实现.22 3.2 哈希.46 3.2.1 散列函数简介.46 3.2.2 SHA-256 Java 实战.47 3.3 Merkle 树.50 3.3.1 Merkle 树简介.50 3.3.2 Merkle 树 Java 实战.52 3.4 小结.63 VI 区块链底层设计 Java 实战 第 4 章 P2P 网络构建.64 4.1 P2P 简介.65 4.2 区块链 P2P 网络实
8、现技术总结.66 4.3 基于 WebSocket 构建 P2P 网络.68 4.3.1 WebSocket 介绍.68 4.3.2 基于 WebSocket 构建 P2P 网络.69 4.4 基于 t-io 构建 P2P 网络.78 4.4.1 t-io 介绍.78 4.4.2 t-io 的主要用法.80 4.4.3 基于 t-io 构建 P2P 网络.83 4.5 小结.96 第 5 章 分布式一致性与共识算法.97 5.1 区块链的分布式.98 5.2 Paxos 算法.99 5.3 ZooKeeper 中的分布式一致算法实现.100 5.4 二、三阶段提交协议.103 5.4.1 二阶
9、段提交协议.104 5.4.2 三阶段提交协议.105 5.5 区块链中的分布式一致性.106 5.5.1 PoW 算法.107 5.5.2 PoW 算法在比特币系统的源码实现.107 5.5.3 以太坊的 PoW 实现.109 5.6 联盟链中 PBFT 的实现.111 5.6.1 什么是 PBFT.112 5.6.2 PBFT 基于 WebSocket 的实现.114 5.6.3 PBFT 基于 t-io 的实现.128 5.7 小结.147 第 6 章 区块设计.148 6.1 比特币的区块设计.149 6.2 以太坊的区块设计.151 目录 VII 6.3 Hyperledger 的区
10、块设计.152 6.4 Java 版区块设计.153 6.5 小结.160 第 7 章 区块存储.161 7.1 区块存储技术.162 7.2 用 Java 实现文件存储.163 7.2.1 Guava 文件操作.163 7.2.2 Guava 实现文件存储.165 7.3 用 Java 实现 SQLite 存储.170 7.3.1 SQLite 介绍.170 7.3.2 SQLite 的使用.171 7.4 用 Java 实现 LevelDB 存储.185 7.4.1 LevelDB 介绍.185 7.4.2 LevelDB 的使用.186 7.5 用 Java 实现 RocksDB 存储.
11、191 7.5.1 RocksDB 介绍.191 7.5.2 RocksDB 的使用.192 7.6 用 Java 实现 CouchDB 存储.195 7.6.1 CouchDB 介绍.195 7.6.2 CouchDB 的使用.196 7.7 小结.201 第 8 章 联盟链中的币设计.202 8.1 比特币的币设计.203 8.2 以太币的激励机制.206 8.3 Java 版联盟链的币设计与实现.208 8.3.1 管理后台币的配置.208 8.3.2 Java 实现币交易.212 8.4 小结.235 第 9 章 联盟链管理后台.236 9.1 超级账本的成员管理.237 VIII 区
12、块链底层设计 Java 实战 9.2 Java 版联盟链成员管理设计与实现.238 9.2.1 加入联盟模块的设计与实现.239 9.2.2 联盟成员认证模块.246 9.2.3 联盟成员密钥分发模块.257 9.3 小结.260 第 10 章 联盟链的运营.261 10.1 联盟链会员章程.262 10.2 联盟链代码使用方式.269 10.3 联盟链代码升级.272 10.4 联盟链代码安全.273 10.5 联盟链激励体系运营.273 10.6 小结.274 附录 A TextNG.275 附录 B Mockito.279 附录 C CouchDB 的安装.283 后记.286 第 1
13、章 区块链简介 与君初相识 犹如故人归 2 区块链底层设计 Java 实战 1.1 戏说区块链 当笔者奉调出任区块链研发负责人之初,加班相对之前又多了些。加班多了,自然陪家里小宝宝玩儿的时间就少了。为此,小宝宝有点儿不开心。家里三岁的小宝宝和笔者有过这样一段对话。小宝宝:“爸爸,你怎么不回来陪我玩儿啊,我睡觉的时候你还没回来!”笔者:“宝宝,爸爸去做区块链了。事情很多,所以加班多啦。”小宝宝:“什么是区块链啊?好玩不?”笔者:“区块链是一个游戏,这个游戏可好玩了!”小宝宝:“我也想玩,怎么玩啊?”笔者:“比如,过年的时候,你会收到什么呀?”小宝宝:“压岁钱!”笔者:“对,那爸爸妈妈还会说什么呢
14、?”小宝宝:“爸爸妈妈先把毛爷爷帮我收起来,我长大了再花!”笔者:“对。可是,如果等你长大了,爸爸妈妈没给你曾经收到的这么多压岁钱花,你怎么办?”小宝宝:笔者:“有了区块链就不会出现这种假设的问题啦。比如过年的时候,爷爷给了你 1000 块压岁钱,爷爷就在自己的小本本上写:今天给了宝宝 1000 块压岁钱。然后爷爷大声告诉奶奶、爸爸、妈妈:我今天给了宝宝 1000 块压岁钱。奶奶、爸爸、妈妈听到之后都在自己的小本本上写:爷爷今天给了宝宝 1000 块压岁钱。”“然后奶奶给了你 2000 块压岁钱,奶奶就在自己的小本本上写:今天给了宝宝2000 块压岁钱。然后奶奶大声告诉爷爷、爸爸、妈妈:我今天
15、给了宝宝 2000 块压岁钱。爷爷、爸爸、妈妈听到之后都在自己的小本本上写:奶奶今天给了宝宝 2000块压岁钱。”第 1 章 区块链简介 3 “之后爸爸给了你 3000 块压岁钱,爸爸就在自己的小本本上写:今天给了宝宝3000 块压岁钱。然后爸爸大声告诉爷爷、奶奶、妈妈:我今天给了宝宝 3000 块压岁钱。爷爷、奶奶、妈妈听到之后都在自己的小本本上写:爸爸今天给了宝宝 3000块压岁钱。”“最后妈妈给了你 4000 块压岁钱,妈妈就在自己的小本本上写:今天给了宝宝4000 块压岁钱。然后妈妈大声告诉爷爷、奶奶、爸爸:我今天给了宝宝 4000 块压岁钱。爷爷、奶奶、爸爸听到之后都在自己的小本本上
16、写:妈妈今天给了宝宝 4000块压岁钱。”“每年过年大家给完宝宝压岁钱之前后都这样写在小本本上,然后告诉其他人也写在自己的小本本上,这就是区块链。”“我们还可以约定宝宝 10 岁时就可以拿出 1000 块钱买好吃的,到你 10 岁的时候呢,1000 块钱就会送到你手上。这就是智能合约。”小宝宝:“区块链这个游戏真好玩,快给我拿纸和笔,我也要写!”1.2 正说区块链 2018 年年初以来,区块链一词火遍了大街小巷,出租车司机、程序员、培训机构等都在谈论区块链。区块链在网络上也成了热门搜索词汇,在百度指数上搜索区块链可以看到,区块链从 2018 年 1 月陡然成为热词,之后持续保持“网红”趋势,搜索指数居高不下,如图 1-1 所示。什么是区块链呢?区块链一词最早出现在中本聪(Satoshi Nakamoto)的“比特币:一种点对点的电子现金系统(Bitcoin:A Peer-to-Peer Electronic Cash System)”一文中。在比特币系统中,区块链作为存储底层,承载了上层众多认同比特币相关协议并严格遵守及维护协议的节点(个人或组织)的记录各类信息的行为。4 区块链底层设