第1章 准备工作 1
1.1 Go语言环境配置 1
1.1.1 Go语言简介 1
1.1.2 Go安装 2
1.1.3 Go标准包安装 4
1.1.4 第三方工具安装 6
1.1.5 Go环境配置 7
1.1.6 代码目录结构规划 8
1.1.7 编译应用 9
1.1.8 获取远程包 10
1.1.9 程序的整体结构 11
1.2 安装Docker 11
1.2.1 macOS 11
1.2.2 Ubuntu 12
1.2.3 Docker的简易使用 13
1.3 Hyperledger社区介绍 14
第2章 架构分析 18
2.1 Fabric整体架构 18
2.1.1 概述 18
2.1.2 系统架构 19
2.1.3 交易背书的基本工作流程 24
2.1.4 背书策略 27
2.1.5 证实账本和节点账本检查 28
2.2 Fabric交易流程 30
2.3 Fabric整体项目结构介绍 33
2.3.1 Fabric项目结构 33
2.3.2 Fabric源码中相关缩写的含义 34
第3章 源码分析 37
3.1 Logging日志模块浅析 37
3.1.1 go-logging简介 37
3.1.2 flogging 38
3.1.3 init函数、MustGetLogger函数与其他函数 38
3.2 Error错误机制设计 39
3.2.1 总体概览 39
3.2.2 使用说明 40
3.2.3 显示错误消息 40
3.2.4 错误处理的一般准则 41
3.3 Config配置模块的设计 41
3.3.1 viper简介 41
3.3.2 安全文件配置 44
3.3.3 命令选项配置 44
3.3.4 环境变量配置 44
3.4 grpc服务 45
3.4.1 grpc用法的Demo 45
3.4.2 Fabric中的grpe服务接口和实例 46
第4章 peer的设计与实现 53
4.1 CommandLine解析 53
4.1.1 peer目录结构 53
4.1.2 第三方包 54
4.1.3 peer命令结构解析 55
4.1.4 以node为例进行子命令结构解析 55
4.1.5 peer命令结构 55
4.2 Admin及Endorser服务的实现 56
4.2.1 Admin 56
4.2.2 Endorser 58
4.2.3 频道中的策略检查器 64
4.3 Committer的机制 66
4.3.1 committer.go分析 66
4.3.2 committer_impl.go分析 67
4.3.3 validator.go分析 70
4.3.4 vscc_validator.go分析 71
第5章 order的设计与实现 73
5.1 orderer内部机制窥探 73
5.1.1 kingpin 73
5.1.2 模块 74
5.1.3 配置 74
5.1.4 模块的初始化 75
5.2 kafka排序服务机制讲解 79
5.3 orderer在Fabric中的交互流程 82
5.3.1 建立连接 82
5.3.2 Broadcast 83
5.3.3 orderer 83
5.3.4 Deliver 86
第6章 chaincode的设计与实现 89
6.1 chaincode生命周期管理 89
6.1.1 打包 89
6.1.2 安装chaincode 91
6.1.3 实例化chaincode 91
6.1.4 升级chaincode 92
6.1.5 停止与启动 93
6.1.6 CLI 93
6.2 chaincode原理浅析 94
6.2.1 什么是chaincode 94
6.2.2 Chaincode Support服务 95
6.2.3 FSM 95
6.2.4 Register 96
6.2.5 Handler 97
6.2.6 processStream 97
6.2.7 HandleMessage 97
6.2.8 serialSend或serialSendAsync 99
6.2.9 系统chaincode 99
6.3 chaincode数据结构分析 100
6.3.1 chaincode元数据 100
6.3.2 chaincode的元工具 102
6.4 SystemChaincode讲解 103
6.4.1 SystemChaincode 104
6.4.2 预定义和注册 104
6.5 CSCC分析 106
6.5.1 结构体 106
6.5.2 函数 106
6.6 ESCC分析 108
6.6.1 结构体 108
6.6.2 Init函数 108
6.7 LSCC分析 109
6.7.1 结构体和接口 110
6.7.2 函数操作 110
6.7.3 安装、部署和升级 111
6.7.4 chaincode stub接口实现 112
6.8 QSCC分析 113
6.8.1 结构体 113
6.8.2 函数操作 114
6.8.3 路由规则 114
6.9 VSCC分析 115
6.9.1 结构体 115
6.9.2 函数 115
6.10 SystemChaincode的注册和实例化 116
6.10.1 概述 116
6.10.2 安装 117
6.10.3 部署 117
6.10.4 Launch 118
6.10.5 Execute 123
6.10.6 部署后状态 124
6.11 ApplicationChaincode的部署 124
6.11.1 概述 125
6.11.2 生成签名申请包 125
6.11.3 处理安装申请 125
6.11.4 执行申请 126
6.11.5 Launch 127
6.11.6 Execute 127
6.11.7 一路返回 128
6.11.8 安装后的状态 129
6.12 ApplicationChaincode的实例化 129
6.12.1 概述 129
6.12.2 起点 130
6.12.3 部署 130
6.12.4 广播 139
6.12.5 部署后的状态 139
6.13 chaincode操作步骤 140
6.13.1 选择一个代码存放位置 140
6.13.2 内务处理 140
6.13.3 初始化chaincode 140
6.13.4 调用chaincode 142
6.13.5 实现chaincode应用 143
6.13.6 整合全部代码 143
6.13.7 编译chaincode 145
6.13.8 在开发者模式下测试 145
6.13.9 安装Hyperledger Fabric样例 145
6.13.10 下载Docker镜像 146
6.13.11 1号终端 146
6.13.12 2号终端 146
6.13.13 3号终端 147
6.13.14 测试新的chaincode 147
第7章 MSP成员服务提供者 148
7.1 MSP的设计思路 148
7.1.1 MSP配置 149
7.1.2 如何生成MSP证书和它们的签名匙 150
7.1.3 MSP setup on the peer&orderer side 150
7.1.4 Channel MSP setup 150
7.1.5 最佳实践 151
7.2 MSP实现剖析 153
7.2.1 目录结构 153
7.2.2 MSP配置 154
第8章 Gossip节点间的流言蜚语 162
8.1 Gossip协议原理解析 162
8.1.1 Gossip协议(Gossip protocol) 162
8.1.2 Gossip消息传输(Gossip messaging) 163
8.2 Gossip之服务组件 163
8.2.1 protos/gossip分析 163
8.2.2 Gossip服务组件 169
8.2.3 gossip消息发送方式详解 176
8.3 Gossip之服务初始化 178
8.3.1 gossipSvc组件 179
8.3.2 chains组件 185
8.3.3 leaderElection组件 187
8.3.4 gossip服务的停止 193
8.4 Gossip之消息广播 194
8.4.1 gossip服务消息的散播过程 194
8.4.2 消息从何而来 194
8.4.3 消息如何散播 196
8.4.4 消息去往何方 200
8.5 channel通道的设计与实现 201
8.5.1 概述 201
8.5.2 配置文件 202
8.5.3 命令 203
8.6 事件机制 208
8.6.1 Fabric中Event相关实现 208
8.6.2 events/producer 209
8.6.3 Go SDK中Event相关实现 210
第9章 BCCSP加密服务提供者的设计与实现 212
9.1 密码学相关知识介绍 212
9.1.1 安全基础 212
9.1.2 加密基础 213
9.1.3 哈希函数 214
9.1.4 共享密钥加密 214
9.1.5 公钥加密 215
9.1.6 混合加密 216
9.1.7 消息验证码 216
9.1.8 数字签名 218
9.1.9 数字证书 219
9.2 BCCSP概要 220
9.2.1 BCCSP简介 220
9.2.2 陷阱函数 222
9.2.3 为什么要使用ECDSA 223
9.2.4 生成签名 223
9.2.5 验证签名 224
9.3 BCCSP源码剖析 224
9.3.1 BCCSP服务结构 224
9.3.2 BCCSP中的接口和选项 225
9.3.3 SW实现方式 227
9.3.4 pkcs11实现方式 230
第10章 Fabric CA架构设计与讲解 233
10.1 Fabric CA用户指南 233
10.2 Fabric-CA-Server 240
10.2.1 初始化服务端 241
10.2.2 算法和密钥长度 242
10.2.3 启动服务端 243
10.2.4 配置数据库 243
10.2.5 PostgreSQL 243
10.2.6 PostgreSQL SSL配置 244
10.2.7 MySQL 245
10.2.8 MySQL SSL配置 245
10.2.9 配置LDAP 246
10.2.10 构建一个集群 249
10.2.11 构建多个CA 249
10.2.12 登录一个中间CA 250
10.2.13 升级服务端 251
10.2.14 升级一个集群 251
10.3 fabric-ca-client 253
10.3.1 登录启动用户 253
10.3.2 注册一个新身份 253
10.3.3 登录一个节点 256
10.3.4 从另一个Fabric CA服务器获得CA证书链 257
10.3.5 重新登录一个身份 257
10.3.6 撤销一个证书或身份 257
10.3.7 生成一个CRL 259
10.3.8 启用TLS 259
10.3.9 基于属性的访问控制 260
10.3.10 动态更新服务器配置 261
10.3.11 联系特定的CA实例 265
10.4 HSM 265
第11章 账本机制的设计与实现 267
11.1 Ledger架构概述 267
11.1.1 总览 267
11.1.2 ledger部分摘要 268
11.2 Ledger之Block-Storage 275
11.2.1 peer节点中的leveldb 276
11.2.2 peer节点中的账本 276
11.2.3 创建 276
11.2.4 使用 277
11.2.5 idStore 278
11.2.6 存储账本ID 278
11.2.7 ConstructionFlag 278
11.2.8 账本恢复 279
11.2.9 BlockStore 280
11.3 Ledger之VersionedDB 286
11.3.1 peer节点使用VersionedDB 286
11.3.2 交易模拟器/交易查询器 288
11.3.3 重启恢复 298
11.4 Ledger之HistoryDB 300
11.4.1 历史查询器 300
11.4.2 使用 301
第12章 chaincode智能合约案例分析 303
12.1 encc_example 303
12.1.1 chaincode代码分析 303
12.1.2 使用EncCC 307
12.2 eventsender 308
12.3 example01 310
12.4 example02 311
12.5 example03 314
12.6 example04 315
12.7 example05 317
12.8 invokereturnsvalue 319
12.9 map 320
12.10 marbles02 324
12.11 passthru 332
12.12 sleeper 332
第13章 Fabric-samples项目分析与实践 334
13.1 Fabric-samples项目结构 334
13.2 First-network 335
13.2.1 安装预置环境 335
13.2.2 想要现在运行吗? 335
13.2.3 生成网络神器 336
13.2.4 启动网络 337
13.2.5 关闭网络 339
13.2.6 加密生成器 339
13.2.7 配置交易生成器 340
13.2.8 运行工具 341
13.2.9 启动网络 342
13.2.10 了解DockerCompose技术 347
13.2.11 使用CouchDB 348
13.2.12 关于数据持久化的提示 350
13.2.13 故障排除 350
13.3 basic-network 351
13.4 Fabcar 353
13.4.1 编写第一个应用 353
13.4.2 下载测试网络(Getting a Test Network) 354
13.4.3 应用程序如何与网络进行交互 355
13.4.4 查询账本 355
13.4.5 更新账本 358
13.5 Balance transfer 360
13.5.1 预置环境 360
13.5.2 工件 360
13.5.3 运行示例程序 360
13.5.4 示例——REST APIs请求 361
13.6 Hyperledger Fabric CA示例 365
13.6.1 运行这个示例 366
13.6.2 了解这个例子 366
13.7 高性能网络 367
13.7.1 用例 368
13.7.2 如何使用 368
第14章 部署教程 371
14.1 下载部署环境 371
14.2 编译peer、orderer、configtxgen等程序 373
14.3 部署 374
14.4 Crypto Generator 374
14.4.1 crypto-config.yaml 375
14.4.2 crypto-config文件夹 375
14.5 Configuration Transaction Generator 376
14.6 networkUp-启动Fabric网络 378
14.7 运行容器+区域链操作 378
附录 专业术语 381