序 言
前 言
理 論 篇
第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
· · · · · · (
收起)