本书由超级账本核心设计和开发者撰写,是区块链开发落地专业指南。由浅入深,系统化介绍超级账本Fabric设计精华、应用开发等。全书分为理论篇和实践篇两大部分;第1~3章介绍区块链技术的由来、核心思想及典型的应用场景;第4~5章重点介绍区块链技术中大量出现的分布式系统技术和密码学安全技术;第6~8章介绍区块链领域的三个典型开源项目:比特币、以太坊以及超级账本;第9~11章以超级账本 Fabric 项目为例,具体讲解了安装部署、配置管理,以及使用 Fabric CA 进行证书管理的实践经验;第12章重点剖析超级账本 Fabric 项目的核心架构设计;第13章介绍区块链应用开发的相关技巧和示例;第14章介绍区块链服务平台的设计与开发,并讲解应用超级账本 Cello 项目构建服务平台的相关知识。本书覆盖了区块链和分布式账本领域的最新技术,可帮助读者深入理解区块链核心原理和典型设计实现,以及高效地开发基于区块链平台的分布式应用。
目录
- 序 言
- 前 言
- 理 论 篇
- 第1章 区块链思想的诞生 2
- 1.1 从实体货币到数字货币 2
- 1.2 站在巨人的肩膀上 5
- 1.3 了不起的社会学实验 5
- 1.4 潜在的商业价值 7
- 1.5 本章小结 8
- 第2章 核心技术概览 9
- 2.1 定义与原理 9
- 2.2 技术的演化与分类 11
- 2.3 关键问题和挑战 13
- 2.4 趋势与展望 17
- 2.5 认识上的误区 19
- 2.6 本章小结 19
- 第3章 典型应用场景 20
- 3.1 应用场景概览 20
- 3.2 金融服务 22
- 3.2.1 银行业金融管理 22
- 3.2.2 证券交易 24
- 3.2.3 众筹投资 25
- 3.3 征信和权属管理 26
- 3.4 资源共享 28
- 3.5 贸易管理 29
- 3.6 物联网 30
- 3.7 其他场景 31
- 3.8 本章小结 33
- 第4章 分布式系统核心问题 34
- 4.1 一致性问题 34
- 4.1.1 定义与重要性 34
- 4.1.2 问题与挑战 35
- 4.1.3 一致性要求 36
- 4.1.4 带约束的一致性 36
- 4.2 共识算法 37
- 4.2.1 问题与挑战 38
- 4.2.2 常见算法 38
- 4.2.3 理论界限 38
- 4.3 FLP 不可能原理 39
- 4.3.1 定义 39
- 4.3.2 正确理解 39
- 4.4 CAP 原理 40
- 4.4.1 定义 40
- 4.4.2 应用场景 41
- 4.5 ACID 原则 41
- 4.6 Paxos 算法与 Raft 算法 42
- 4.6.1 Paxos 算法 42
- 4.6.2 Raft 算法 45
- 4.7 拜占庭问题与算法 45
- 4.8 可靠性指标 48
- 4.8.1 几个 9 的指标 48
- 4.8.2 两个核心时间 49
- 4.8.3 提高可靠性 49
- 4.9 本章小结 49
- 第5章 密码学与安全技术 50
- 5.1 Hash 算法与数字摘要 50
- 5.1.1 Hash定义 50
- 5.1.2 常见算法 51
- 5.1.3 性能 51
- 5.1.4 数字摘要 52
- 5.1.5 Hash 攻击与防护 52
- 5.2 加解密算法 52
- 5.2.1 加解密系统基本组成 53
- 5.2.2 对称加密算法 53
- 5.2.3 非对称加密算法 54
- 5.2.4 选择明文攻击 55
- 5.2.5 混合加密机制 56
- 5.2.6 离散对数与 Diffie–Hellman密钥交换协议 57
- 5.3 消息认证码与数字签名 57
- 5.3.1 消息认证码 58
- 5.3.2 数字签名 58
- 5.3.3 安全性 59
- 5.4 数字证书 59
- 5.4.1 X.509 证书规范 60
- 5.4.2 证书格式 61
- 5.4.3 证书信任链 62
- 5.5 PKI 体系 63
- 5.5.1 PKI 基本组件 63
- 5.5.2 证书的签发 63
- 5.5.3 证书的撤销 66
- 5.6 Merkle树结构 66
- 5.7 布隆过滤器 67
- 5.8 同态加密 68
- 5.9 其他问题 70
- 5.10 本章小结 71
- 第6章 比特币——区块链思想诞生的摇篮 72
- 6.1 比特币项目简介 72
- 6.1.1 比特币大事记 73
- 6.1.2 其他数字货币 74
- 6.2 原理和设计 75
- 6.2.1 基本交易过程 75
- 6.2.2 重要概念 76
- 6.2.3 创新设计 78
- 6.3 挖矿 80
- 6.3.1 基本原理 80
- 6.3.2 挖矿过程 81
- 6.3.3 如何看待挖矿 81
- 6.4 共识机制 82
- 6.4.1 工作量证明 82
- 6.4.2 权益证明 83
- 6.5 闪电网络 83
- 6.6 侧链 85
- 6.6.1 SPV 证明 85
- 6.6.2 双向挂钩 86
- 6.6.3 最新进展 87
- 6.7 热点问题 87
- 6.7.1 设计中的权衡 87
- 6.7.2 分叉 87
- 6.7.3 交易延展性 88
- 6.7.4 扩容之争 89
- 6.7.5 比特币的监管和追踪 90
- 6.8 相关工具 91
- 6.9 本章小结 92
- 第7章 以太坊——挣脱数字货币的枷锁 93
- 7.1 以太坊项目简介 93
- 7.1.1 以太坊项目简史 94
- 7.1.2 主要特点 95
- 7.2 核心概念 95
- 7.3 主要设计 97
- 7.3.1 智能合约相关设计 97
- 7.3.2 交易模型 97
- 7.3.3 共识 97
- 7.3.4 降低攻击 98
- 7.3.5 提高扩展性 98
- 7.4 相关工具 98
- 7.4.1 客户端和开发库 98
- 7.4.2 以太坊钱包 99
- 7.4.3 IDE 100
- 7.4.4 网站资源 100
- 7.5 安装客户端 100
- 7.5.1 从 PPA 直接安装 100
- 7.5.2 从源码编译 101
- 7.6 使用智能合约 102
- 7.6.1 搭建测试用区块链 102
- 7.6.2 创建和编译智能合约 104
- 7.6.3 部署智能合约 105
- 7.6.4 调用智能合约 106
- 7.7 智能合约案例:投票 106
- 7.7.1 智能合约代码 107
- 7.7.2 代码解析 109
- 7.8 本章小结 111
- 第8章 超级账本——面向企业的分布式账本 112
- 8.1 超级账本项目简介 112
- 8.2 社区组织结构 114
- 8.2.1 基本结构 114
- 8.2.2 大中华区技术工作组 114
- 8.3 顶级项目介绍 115
- 8.3.1 Fabric 项目 116
- 8.3.2 Sawtooth 项目 117
- 8.3.3 Iroha 项目 117
- 8.3.4 Blockchain Explorer 项目 117
- 8.3.5 Cello 项目 118
- 8.3.6 Indy 项目 118
- 8.3.7 Composer 项目 118
- 8.3.8 Burrow 项目 119
- 8.4 开发必备工具 119
- 8.4.1 Linux Foundation ID 119
- 8.4.2 Jira——任务和进度管理 119
- 8.4.3 Gerrit——代码仓库和 Review管理 120
- 8.4.4 RocketChat——在线沟通 121
- 8.5 贡献代码 121
- 8.6 本章小结 126
- 实 践 篇
- 第9章 超级账本 Fabric 部署和使用 128
- 9.1 简介 128
- 9.2 本地编译安装 129
- 9.2.1 操作系统 130
- 9.2.2 环境配置 130
- 9.2.3 获取代码 131
- 9.2.4 编译安装 fabric-peer 组件 131
- 9.2.5 编译安装 fabric-orderer 组件 132
- 9.2.6 编译安装 fabric-ca 组件 133
- 9.2.7 编译安装辅助工具 133
- 9.2.8 获取 chaintool 133
- 9.2.9 安装Go语言相关工具 134
- 9.2.10 示例配置 134
- 9.3 使用 Docker 镜像 134
- 9.3.1 安装 Docker 服务 134
- 9.3.2 安装 docker-compose 135
- 9.3.3 获取 Docker 镜像 135
- 9.3.4 镜像 Dockerfile 138
- 9.4 启动 Fabric 网络 143
- 9.4.1 网络拓扑 143
- 9.4.2 准备相关配置文件 144
- 9.4.3 启动 Orderer 节点 150
- 9.4.4 启动 Peer 节点 151
- 9.4.5 操作网络 152
- 9.4.6 基于容器方式 156
- 9.5 链码的概念与使用 157
- 9.5.1 链码操作命令 158
- 9.5.2 命令参数 158
- 9.5.3 安装链码 159
- 9.5.4 实例化链码 162
- 9.5.5 调用链码 165
- 9.5.6 查询链码 167
- 9.5.7 升级链码 168
- 9.5.8 打包链码和签名 169
- 9.6 使用多通道 170
- 9.6.1 通道操作命令 170
- 9.6.2 命令选项 171
- 9.6.3 创建通道 172
- 9.6.4 加入通道 174
- 9.6.5 列出所加入的通道 175
- 9.6.6 获取某区块 176
- 9.6.7 更新通道配置 177
- 9.7 SDK 支持 178
- 9.8 生产环境注意事项 179
- 9.9 本章小结 181
- 第10章 超级账本 Fabric 配置管理 182
- 10.1 简介 182
- 10.1.1 配置文件 182
- 10.1.2 配置管理工具 183
- 10.2 Peer 配置剖析 183
- 10.2.1 logging部分 184
- 10.2.2 peer部分 184
- 10.2.3 vm部分 188
- 10.2.4 chaincode部分 189
- 10.2.5 ledger部分 190
- 10.3 Orderer 配置剖析 191
- 10.4 cryptogen 生成组织身份配置 194
- 10.4.1 配置文件 195
- 10.4.2 子命令和参数 196
- 10.4.3 生成密钥和证书文件 196
- 10.4.4 查看配置模板信息 198
- 10.5 configtxgen 生成通道配置 199
- 10.5.1 configtx.yaml配置文件 199
- 10.5.2 命令选项 203
- 10.5.3 生成Orderer初始区块并进行查看 203
- 10.5.4 生成新建通道交易文件并进行查看 211
- 10.5.5 生成锚节点更新交易文件 215
- 10.6 configtxlator 转换配置 215
- 10.6.1 RESTful接口 215
- 10.6.2 解码为Json格式 216
- 10.6.3 编码为二进制格式 217
- 10.6.4 计算配置更新量 217
- 10.6.5 更新通道配置 218
- 10.7 本章小结 219
- 第11章 超级账本 Fabric CA 应用与配置 220
- 11.1 简介 220
- 11.2 安装服务端和客户端 221
- 11.2.1 本地编译 221
- 11.2.2 获取和使用Docker镜像 223
- 11.2.3 示例Dockerfile 223
- 11.3 启动 CA 服务 225
- 11.4 服务端命令剖析 228
- 11.4.1 全局命令参数 228
- 11.4.2 init命令 230
- 11.4.3 start命令 230
- 11.5 服务端配置文件解析 231
- 11.6 与服务端进行交互 235
- 11.7 客户端命令剖析 237
- 11.7.1 全局命令参数 237
- 11.7.2 enroll命令 239
- 11.7.3 getcacert命令 240
- 11.7.4 reenroll命令 241
- 11.7.5 register命令 241
- 11.7.6 revoke命令 242
- 11.8 客户端配置文件解析 243
- 11.9 生产环境部署 245
- 11.10 本章小结 247
- 第12章 超级账本 Fabric 架构与设计 248
- 12.1 整体架构概览 248
- 12.1.1 核心特性 248
- 12.1.2 整体架构 249
- 12.1.3 典型工作流程 249
- 12.2 核心概念与组件 251
- 12.2.1 网络层相关组件 252
- 12.2.2 共识相关组件 254
- 12.2.3 权限管理相关组件 255
- 12.2.4 业务层相关组件 257
- 12.3 gRPC 消息协议 262
- 12.3.1 Envelope消息结构 262
- 12.3.2 客户端访问Peer节点 263
- 12.3.3 客户端、Peer节点访问Orderer 265
- 12.3.4 链码容器和Peer节点之间的操作 265
- 12.3.5 多个节点之间的操作 266
- 12.4 权限管理和策略 267
- 12.4.1 策略应用场景 267
- 12.4.2 身份证书 268
- 12.4.3 权限策略的实现 268
- 12.4.4 通道策略 272
- 12.4.5 背书策略 273
- 12.4.6 实例化策略 273
- 12.5 用户链码 274
- 12.5.1 基本结构 274
- 12.5.2 链码与Peer的交互过程 275
- 12.5.3 链码处理状态机 277
- 12.6 系统链码 279
- 12.7 排序服务 281
- 12.7.1 gRPC服务接口 282
- 12.7.2 链和账本管理 283
- 12.7.3 通道配置更新 284
- 12.7.4 共识插件 286
- 12.8 本章小结 288
- 第13章 区块链应用开发 290
- 13.1 简介 290
- 13.2 链码的原理、接口与结构 292
- 13.2.1 Chaincode接口 292
- 13.2.2 链码结构 293
- 13.2.3 链码基本工作原理 294
- 13.3 链码开发 API 295
- 13.3.1 账本状态交互API 296
- 13.3.2 交易信息相关API 296
- 13.3.3 参数读取API 297
- 13.3.4 其他API 297
- 13.4 应用开发案例一:转账 298
- 13.4.1 链码结构 298
- 13.4.2 Init方法 299
- 13.4.3 Invoke方法 300
- 13.5 应用开发案例二:资产权属管理 301
- 13.5.1 链码结构 301
- 13.5.2 Invoke方法 303
- 13.6 应用开发案例三:调用其他链码 312
- 13.7 应用开发案例四:发送事件 313
- 13.8 开发最佳实践小结 314
- 13.9 本章小结 316
- 第14章 区块链服务平台设计 317
- 14.1 简介 317
- 14.1.1 参考架构 318
- 14.1.2 考量指标 318
- 14.2 IBM Bluemix 云区块链服务 319
- 14.3 微软 Azure 云区块链服务 321
- 14.4 使用超级账本 Cello 搭建区块链服务 324
- 14.4.1 基本架构和特性 324
- 14.4.2 环境准备 325
- 14.4.3 下载Cello源码 325
- 14.4.4 配置Worker节点 325
- 14.4.5 配置Master节点 326
- 14.4.6 使用Cello管理区块链 327
- 14.4.7 基于Cello进行功能扩展 330
- 14.5 本章小结 330
- 附 录
- 附录A 术语表 334
- 附录B 常见问题解答 338
- 附录C Golang 开发相关 342
- 附录D ProtoBuf 与 gRPC 349
- 附录E 参考资源 353