理论篇 2
第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
实践篇 128
第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
附录 334
附录A术语表 334
附录B常见问题解答 338
附录C Golang开发相关 342
附录D ProtoBuf与gRPC 349
附录E参考资源 353