序一
序二
前言
第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 安装Docker11
1.2.1 macOS11
1.2.2 Ubuntu12
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 flogging38
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用法的Demo45
3.4.2 Fabric中的grpc服务接口和实例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 Admin56
4.2.2 Endorser58
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 kingpin73
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 Broadcast83
5.3.3 orderer83
5.3.4 Deliver86
第6章 chaincode的设计与实现89
6.1 chaincode生命周期管理89
6.1.1 打包89
6.1.2 安装chaincode91
6.1.3 实例化chaincode91
6.1.4 升级chaincode92
6.1.5 停止与启动93
6.1.6 CLI93
6.2 chaincode原理浅析94
6.2.1 什么是chaincode94
6.2.2 Chaincode Support服务95
6.2.3 FSM95
6.2.4 Register96
6.2.5 Handler97
6.2.6 processStream97
6.2.7 HandleMessage97
6.2.8 serialSend或serialSendAsync99
6.2.9 系统chaincode99
6.3 chaincode数据结构分析100
6.3.1 chaincode元数据100
6.3.2 chaincode的元工具102
6.4 SystemChaincode讲解103
6.4.1 SystemChaincode104
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 Launch118
6.10.5 Execute123
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 Launch127
6.11.6 Execute127
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 初始化chaincode140
6.13.4 调用chaincode142
6.13.5 实现chaincode应用143
6.13.6 整合全部代码143
6.13.7 编译chaincode145
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 测试新的chaincode147
第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 side150
7.1.4 Channel MSP setup150
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/producer209
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 为什么要使用ECDSA223
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-Server240
10.2.1 初始化服务端241
10.2.2 算法和密钥长度242
10.2.3 启动服务端243
10.2.4 配置数据库243
10.2.5 PostgreSQL243
10.2.6 PostgreSQL SSL配置244
10.2.7 MySQL245
10.2.8 MySQL SSL配置245
10.2.9 配置LDAP246
10.2.10 构建一个集群249
10.2.11 构建多个CA249
10.2.12 登录一个中间CA250
10.2.13 升级服务端251
10.2.14 升级一个集群251
10.3 fabric-ca-client253
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 生成一个CRL259
10.3.8 启用TLS259
10.3.9 基于属性的访问控制260
10.3.10 动态更新服务器配置261
10.3.11 联系特定的CA实例265
10.4 HSM265
第11章 账本机制的设计与实现267
11.1 Ledger架构概述267
11.1.1 总览267
11.1.2 ledger部分摘要268
11.2 Ledger之Block-Storage275
11.2.1 peer节点中的leveldb276
11.2.2 peer节点中的账本276
11.2.3 创建276
11.2.4 使用277
11.2.5 idStore278
11.2.6 存储账本ID278
11.2.7 ConstructionFlag278
11.2.8 账本恢复279
11.2.9 BlockStore280
11.3 Ledger之VersionedDB286
11.3.1 peer节点使用VersionedDB286
11.3.2 交易模拟器/交易查询器288
11.3.3 重启恢复298
11.4 Ledger之HistoryDB300
11.4.1 历史查询器300
11.4.2 使用301
第12章 chaincode智能合约案例分析303
12.1 encc_example303
12.1.1 chaincode代码分析303
12.1.2 使用EncCC307
12.2 eventsender308
12.3 example01310
12.4 example02311
12.5 example03314
12.6 example04315
12.7 example05317
12.8 invokereturnsvalue319
12.9 map320
12.10 marbles02324
12.11 passthru332
12.12 sleeper332
第13章 Fabric-samples项目分析与实践334
13.1 Fabric-samples项目结构334
13.2 First-network335
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 了解Docker Compose技术347
13.2.11 使用CouchDB348
13.2.12 关于数据持久化的提示350
13.2.13 故障排除350
13.3 basic-network351
13.4 Fabcar353
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 transfer360
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 Generator374
14.4.1 crypto-config.yaml375
14.4.2 crypto-config文件夹375
14.5 Configuration Transaction Generator376
14.6 networkUp-启动Fabric网络378
14.7 运行容器+区域链操作378
附录 专业术语381
· · · · · · (
收起)