區塊鏈智能合約
內容描述
本書詳細而深入地介紹了區塊鏈技術和智能合約技術,包括算法、數據結構及相關學科的相關理論。本書介紹了基於以太坊的智能合約編程語言Solidity,結合以太坊虛擬機(EVM)的實現,討論了Solidity語句的匯編實現,介紹瞭如何應用Solidity來開發去中心化應用(DApp)、如何使用區塊鏈的去中心化存儲(IPFS)。同時,出於全面性和前瞻性的考慮,本書詳細介紹了智能合約的重要分支:基於超級賬本的鏈碼編程和智能合約編程的明日之星Web Assembly(WASM)編程技術。 本書可以作為高等學校區塊鏈工程與技術、電腦科學與技術、金融科技、商務智能等相關專業的教學參考書,也可作為區塊鏈從業人員和相關企事業單位技術人員的參考書。
目錄大綱
第1章區塊鏈概述 1
1.1 什麼是區塊鏈 1
1.2 區塊鏈歷史 2
1.3 區塊鏈的分類 5
1.4 區塊鏈解決的問題 6
1.5 區塊鏈技術概述 9
1.6 區塊鏈面臨的挑戰 10
1.6.1 安全性挑戰 10
1.6.2 效率挑戰 14
1.6.3 落地應用的有效性 15
1.6.4 區塊鏈發展的政策法規監管 15
習題1 15
第2章區塊鏈技術 17
2.1 區塊鏈的架構 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 博弈論在區塊鏈的應用 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 智能合約的實現機制:虛擬機 57
3.3.2 智能合約的實現機制:容器 58
3.4 現有智能合約框架介紹 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 循環語句 70
4.5.3 其他 70
4.6 修飾符 70
4.6.1 修飾符說明 71
4.6.2 修飾符的區別 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章智能合約開發 86
5.1 智能合約開發的特點 86
5.2 智能合約的生命週期和開發週期 88
5.2.1 智能合約的生命週期 88
5.2.2 智能合約的開發週期 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 狀態機 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 智能合約最佳安全開髮指南 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 節省燃料 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的優越性 213
9.2 WASM特色 213
9.2.1 WASM特點 214
9.2.2 WASM動態運行庫 215
9.3 eWASM前後端交互 216
9.4 從Solidity遷移到WASM 218
習題9 218
第10章開發環境和工具安裝 220
10.1 實驗1:區塊鏈開發基本語言工具包安裝配置 220
10.1.1 編程語言包的安裝 220
10.1.2 Node.js環境的安裝 221
10.1.3 Git包的安裝 222
10.2 實驗2:以太坊開發環境安裝 222
10.2.1 web3安裝 222
10.2.2 Ganache安裝 222
10.2.3 Truffle安裝 223
10.2.4 區塊鏈瀏覽器 225
10.2.5 測試環境 225
10.3 實驗3:以太坊開發工具 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智能合約開發 236
11.1 實驗4:以太坊Solidity智能合約ERC20開發 236
11.1.1 方法 237
11.1.2 事件 238
11.1.3 OpenZeppline框架 238
11.2 實驗5:以太坊Solidity智能合約ERC721開發 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 標准開發流程 264
11.4 實驗7:Solidity智能合約調試 268
11.4.1 編程語言 268
11.4.2 Testrpc/Ganache測試環境 276
11.4.3 Truffle Debugger 277
11.4.4 Remix調試 285
第12章智能合約應用案例 289
12.1 實驗8:以太坊DApp開發和調試 289
12.1.1 環境準備 290
12.1.2 項目 290
12.1.3 智能合約Solidity編程 291
12.2 實驗9:以太坊IPFS DApp開發和調試 296
12.2.1 DApp環境準備 296
12.2.2 DApp項目 297
12.2.3 編譯運行 301
第13章超級賬本Fabric開發 302
13.1 實驗10:超級賬本Fabric開發環境 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簡單合約開發 340
13.2.1 Go + WASM的基本用法 340
13.2.2 WASM的例子 341
第14章智能合約實驗練習 344
14.1 實驗練習1:商業名片系統 344
14.2 實驗練習2:基於ERC721/NFT的學位證書認證系統 344
附錄A Solidity常用函數 346
附錄B 區塊鏈大事記 349
附錄C 區塊鏈術語 358
附錄D 以太坊內置合約 363
參考文獻 366
作者介紹
黃立群
主持研究項目5項,參加自然科學基金、863項目和九五攻關項目各一項,參加其他科研項目12項。在《通信學報》《電子學報》《電子科學學刊》《華中理工大學學報》《計算機工程與應用》等刊物及國際會議上發表十篇論文。主要研究方向為計算機網絡技術與應用、移動計算、決策支持系統、嵌入式系統的研究。