本書詳細而深入地介紹了區(qū)塊鏈技術和智能合約技術,包括算法、數據結構及相關學科的相關理論。本書介紹了基于以太坊的智能合約編程語言Solidity,結合以太坊虛擬機(EVM)的實現(xiàn),討論了Solidity語句的匯編實現(xiàn),介紹了如何應用Solidity來開發(fā)去中心化應用(DApp)、如何使用區(qū)塊鏈的去中心化存儲(IPFS)。同時,出于全面性和前瞻性的考慮,本書詳細介紹了智能合約的重要分支:基于超級賬本的鏈碼編程和智能合約編程的明日之星Web Assembly(WASM)編程技術。 本書可以作為高等學校區(qū)塊鏈工程與技術、計算機科學與技術、金融科技、商務智能等相關專業(yè)的教學參考書,也可作為區(qū)塊鏈從業(yè)人員和相關企事業(yè)單位技術人員的參考書。
黃立群,男,博士,副教授。主持研究項目5項,參加自然科學基金、863項目和九五攻關項目各一項,參加其他科研項目12項。在《通信學報》《電子學報》《電子科學學刊》《華中理工大學學報》《計算機工程與應用》等刊物及國際會議上發(fā)表十篇論文。主要研究方向為計算機網絡技術與應用、移動計算、決策支持系統(tǒng)、嵌入式系統(tǒng)的研究。
目 錄
第1章 區(qū)塊鏈概述 1
1.1 什么是區(qū)塊鏈 1
1.2 區(qū)塊鏈歷史 2
1.3 區(qū)塊鏈的分類 5
1.4 區(qū)塊鏈解決的問題 6
1.5 區(qū)塊鏈技術概述 9
1.6 區(qū)塊鏈面臨的挑戰(zhàn) 10
1.6.1 安全性挑戰(zhàn) 10
1.6.2 效率挑戰(zhàn) 14
1.6.3 落地應用的有效性 15
1.6.4 區(qū)塊鏈發(fā)展的政策法規(guī)監(jiān)管 15
習題1 15
第2章 區(qū)塊鏈技術 17
2.1 區(qū)塊鏈的架構 17
2.2 哈希函數 18
2.3 密碼學算法 19
2.3.1 對稱加密算法 19
2.3.2 不對稱加密算法 21
2.3.3 國密 22
2.3.4 RSA 23
2.3.5 橢圓曲線算法家族 24
2.4 共識算法 26
2.4.1 拜占庭將軍問題 27
2.4.2 共識算法的兩個定理 27
2.4.2 共識算法的目的 28
2.4.3 工作量證明 29
2.4.4 權益證明 30
2.4.5 委托權益證明 31
2.5 博弈論 31
2.5.1 博弈論原理 32
2.5.2 博弈論在區(qū)塊鏈的應用 33
2.6 P2P算法 34
2.6.1 Gossip 35
2.6.2 Kademlia 37
2.7 數據結構及其算法 42
2.7.1 默克爾樹 42
2.7.2 布隆過濾器 44
習題2 46
第3章 以太坊與智能合約 47
3.1 以太坊介紹 47
3.1.1 燃料 48
3.1.2 以太坊虛擬機 50
3.1.3 賬戶 50
3.2 以太坊關鍵數據結構及其算法 51
3.2.1 遞歸長度前綴編碼 51
3.2.2 梅克爾–帕特里夏樹 52
3.3 智能合約介紹 57
3.3.1 智能合約的實現(xiàn)機制:虛擬機 57
3.3.2 智能合約的實現(xiàn)機制:容器 58
3.4 現(xiàn)有智能合約框架介紹 58
習題3 59
第4章 Solidity編程 61
4.1 SOL文件結構 61
4.2 合約結構 64
4.3 變量類型 64
4.3.1 值類型 64
4.3.2 引用類型 66
4.3.3 字典 67
4.3.4 特殊情況 67
4.4 操作符 68
4.5 語句 69
4.5.1 條件語句 69
4.5.2 循環(huán)語句 70
4.5.3 其他 70
4.6 修飾符 70
4.6.1 修飾符說明 71
4.6.2 修飾符的區(qū)別 72
4.6.3 自定義修飾符 74
4.7 數據位置 75
4.8 事件 77
4.9 繼承 80
4.10 其他 81
4.10.1 類型轉換及推斷 81
4.10.2 異常 82
4.10.3 匯編 82
4.10.4 This關鍵字 84
習題4 84
第5章 智能合約開發(fā) 86
5.1 智能合約開發(fā)的特點 86
5.2 智能合約的生命周期和開發(fā)周期 88
5.2.1 智能合約的生命周期 88
5.2.2 智能合約的開發(fā)周期 88
5.3 設計模式 89
5.3.1 工廠合約模式 90
5.3.2 映射迭代 90
5.3.3 名字登錄 91
5.3.4 回退模式 92
5.3.5 合約自毀 92
5.3.6 訪問限制 93
5.3.7 斷路器 94
5.3.8 狀態(tài)機 95
5.4 基礎算法 97
5.5 智能合約的安全 99
5.5.1 編程語言相關的攻擊 99
5.5.2 平臺相關的攻擊 107
5.5.3 重入攻擊 115
5.5.4 阻塞攻擊 116
5.6 智能合約最佳安全開發(fā)指南 118
5.7 代碼審計 126
小結 126
習題5 126
第6章 Solidity智能合約應用 127
6.1 可升級 127
6.1.1 升級智能合約要考慮的問題 127
6.1.2 智能合約升級方法 128
6.1.3 通用的代理模式 131
6.1.4 存儲升級 133
6.2 節(jié)省燃料 140
6.3 匯編代碼 147
6.3.1 棧 147
6.3.2 調用數據 148
6.3.3 內存 149
6.3.4 存儲 149
6.4 合約間調用 151
6.4.1 函數調用 151
6.4.2 依賴注入 152
6.4.3 消息調用 153
6.4.4 獲取合約間調用的返回值 156
6.5 ABI編程 158
6.5.1 內存結構 159
6.5.2 函數選擇子 159
6.5.3 類型定義 159
6.5.4 數據表示 160
6.5.5 編碼 165
6.6 運行原理 173
習題6 178
第7章 去中心化應用 180
7.1 DApp概述 180
7.2 DApp架構 183
7.2.1 客戶端 183
7.2.2 服務器端 184
7.2.3 流程詳解 186
7.3 去中心化數據存儲 188
7.3.1 Swarm 189
7.3.2 IPFS/FileCoin 191
7.4 消息通信 193
7.5 名字解析 194
習題7 194
第8章 超級賬本 195
8.1 Fabric概述 195
8.1.1 Fabric結構 196
8.1.2 Fabric組件 197
8.1.3 Fabric技術架構 202
8.1.4 Fabric網絡架構 204
8.2 鏈碼 204
8.2.1 鏈碼的分類 204
8.2.2 鏈碼的生命周期 205
8.3 鏈碼交互 206
習題8 207
第9章 Web Assembly 209
9.1 為什么需要WASM 209
9.1.1 EVM的缺陷 209
9.1.2 WASM的優(yōu)越性 213
9.2 WASM特色 213
9.2.1 WASM特點 214
9.2.2 WASM動態(tài)運行庫 215
9.3 eWASM前后端交互 216
9.4 從Solidity遷移到WASM 218
習題9 218
第10章 開發(fā)環(huán)境和工具安裝 220
10.1 實驗1:區(qū)塊鏈開發(fā)基本語言工具包安裝配置 220
10.1.1 編程語言包的安裝 220
10.1.2 Node.js環(huán)境的安裝 221
10.1.3 Git包的安裝 222
10.2 實驗2:以太坊開發(fā)環(huán)境安裝 222
10.2.1 web3安裝 222
10.2.2 Ganache安裝 222
10.2.3 Truffle安裝 223
10.2.4 區(qū)塊鏈瀏覽器 225
10.2.5 測試環(huán)境 225
10.3 實驗3:以太坊開發(fā)工具 227
10.3.1 Remix的使用 227
10.3.2 Infura的使用 230
10.3.3 MetaMask的使用 231
10.3.4 Mist的使用 233
10.3.5 以太坊源碼編譯 234
10.3.6 其他 235
動手實驗 235
第11章 Solidity智能合約開發(fā) 236
11.1 實驗4:以太坊Solidity智能合約ERC20開發(fā) 236
11.1.1 方法 237
11.1.2 事件 238
11.1.3 OpenZeppline框架 238
11.2 實驗5:以太坊Solidity智能合約ERC721開發(fā) 239
11.2.1 ERC721接口定義 239
11.2.2 元數據擴展 250
11.2.3 可枚舉擴展 251
11.2.4 ERC165標準 255
11.3 實驗6:用編程語言與智能合約交互 256
11.3.1 用Go語言程序與智能合約交互 256
11.3.2 基于ABI的編程 264
11.2.3 標準開發(fā)流程 264
11.4 實驗7:Solidity智能合約調試 268
11.4.1 編程語言 268
11.4.2 Testrpc/Ganache測試環(huán)境 276
11.4.3 Truffle Debugger 277
11.4.4 Remix調試 285
第12章 智能合約應用案例 289
12.1 實驗8:以太坊DApp開發(fā)和調試 289
12.1.1 環(huán)境準備 290
12.1.2 項目 290
12.1.3 智能合約Solidity編程 291
12.2 實驗9:以太坊IPFS DApp開發(fā)和調試 296
12.2.1 DApp環(huán)境準備 296
12.2.2 DApp項目 297
12.2.3 編譯運行 301
第13章 超級賬本Fabric開發(fā) 302
13.1 實驗10:超級賬本Fabric開發(fā)環(huán)境 302
13.1.1 Fabric安裝 302
13.1.2 First-network例子 314
13.1.3 Test-network示例 319
13.1.2 鏈碼交互 326
13.1.3 鏈碼調試 330
13.1.4 鏈碼簡例 331
13.2 實驗11:WASM簡單合約開發(fā) 340
13.2.1 Go + WASM的基本用法 340
13.2.2 WASM的例子 341
第14章 智能合約實驗練習 344
14.1 實驗練習1:商業(yè)名片系統(tǒng) 344
14.2 實驗練習2:基于ERC721/NFT的學位證書認證系統(tǒng) 344
附錄A Solidity常用函數 346
附錄B 區(qū)塊鏈大事記 349
附錄C 區(qū)塊鏈術語 358
附錄D 以太坊內置合約 363
參考文獻 366