內容簡介
智慧型契約是近年來出現的一種旨在以信息化方式傳播、驗證、執行契約的計算機協定。儘管可程式的區塊鏈為去中心化的概念在生活中的套用創造了無限可能,但區塊鏈項目的大規模落地與推廣仍面臨一系列挑戰。本書秉承由淺入深、理論與實踐相結合的思想,在闡述理論的同時,也對相關操作進行了詳細說明。相信讀者在閱讀完本書後,會對以太坊智慧型契約有比較完整的了解,更重要的是,會對與以太坊智慧型契約相關的網路安全問題有充分的認識,並能夠在開發和審計過程中積極應對常見的網路安全問題。
本書適合智慧型契約開辯櫻禁發人員、智慧型契約審計人員、網路安全研究人員,以及對區塊鏈、智慧型契約感興趣的讀者閱讀。
目錄
第1章 由淺入深理解區塊鏈
1.1 區塊鏈簡介 1
1.2 區塊鏈1.0 ——比特幣,一種點對點的現金支付系統 1
1.2.1 比特幣的產生 1
1.2.2 深入分析比特幣的工作機制 5
1.2.3 結合《比特幣白皮書》理解比特幣 9
1.2.4 比特幣的回顧與剖析 13
1.2.5 比特幣的不足 16
1.3 區塊鏈2.0 ——以太坊 18
1.3.1 以太坊的產生 18
1.3.2 深入理解以太坊 18
1.4 區塊鏈3.0 ——DApp 25
1.5 基於以太坊的智慧型契約入門 25
1.5.1 智慧型契約的結構 26
1.5.2 EOS上的智慧型契約及其與以太坊的對比 27
第2章 智慧型契約開發實戰
2.1 以太坊網路 29
2.2 私有鏈的搭建 30
2.2.1 geth簡介 30
2.2.2 geth的安裝探舉棄洪與配置 31
2.2.3 geth的操作及相關說明 33
2.2.4 以太坊中的賬戶與密鑰 39
2.2.5 查看以太坊網路的狀態 40
2.3 Mist和Ethereum Wallet的安裝、配置與操作 42
2.3.1 下載與安裝 42
2.3.2 通過Ethereum Wallet連線本地私有庫 42
2.3.3 用Mist實現習記勸章多重簽名 45
2.4 以太坊智慧型契約開發實戰 52
2.4.1 開發環境 52
2.4.2 編寫第一個智慧型契約 54
2.5 ERC-20 Token契約 58
2.5.1 Token契約概述 58
2.5.2 ERC-20 Token契約詳解 60
2.5.3 對ERC-20 Token契約的進一步說明 61
2.6 本章小結 63
第3章 智慧型契約語法實戰
3.1 造就骨架——建立契約框架 64
3.2 初添血肉——添加狀態變數 66
3.2.1 數據類型簡介 66
3.2.2 添加uint類型的變數 67
3.2.3 添加結構體 67
3.2.4 添加數組 68
3.3 再添經脈——添加函式 70
3.3.1 添加一個簡單的函式 70
3.3.2 添加一個複雜的函式 72
3.3.3 特別的函式——回退函式 75
3.4 與外界互動——添加事件 80
3.5 說犁姜大腦的溝通——多用戶拓展 82
3.5.1 神經的連線——映射和地址 82
3.5.2 神經的傳輸——msg.sender 85
3.5.3 神經興奮的判別——require方法 87
3.5.4 生命的傳承付廈刪——Inheritance 87
3.5.5 血液里的本能——“獵食”和“繁殖” 90
3.5.6 DNA的融合 91
3.5.7 各司其職的隱私——關於函式可見性的更多內容 92
3.5.8 同化作用——契約互動 93
3.5.9 同詢鍵化作用的結果——獲得獎勵 98
3.6 高級Solidity理論 100
3.6.1 外部依賴關係 100
3.6.2 許可權的產生——Ownable Contracts 101
3.6.3 許可權的確認——函式修飾符onlyOwner 105
3.6.4 運轉的動力——gas 107
3.7 Truffle的介紹與安裝 108
3.8 創建、部署、使用Token契約 110
3.8.1 Truffle的box和立整嫌OpenZeppelin 110
3.8.2 安裝tutorialtoken box和OpenZeppelin 111
3.8.3 創建TutorialToken契約 112
3.8.4 契約的編譯與部署 114
3.8.5 契約操作與實踐 116
3.9 創建、部署、使用ICO契約 121
3.9.1 ICO簡介 121
3.9.2 創建ICO契約 122
3.9.3 ICO契約的編譯與部署 125
3.9.4 ICO契約的操作實踐 130
3.10 本章小結 131
第4章 智慧型契約常見漏洞
4.1 智慧型契約審計指南 132
4.1.1 智慧型契約審計概述 132
4.1.2 智慧型契約審計報告的結構 132
4.2 整型溢出漏洞 133
4.2.1 漏洞概述 133
4.2.2 代碼片段 133
4.2.3 漏洞分析與調試 134
4.2.4 相關案例 139
4.2.5 規避整型溢出的神器——SafeMath庫 140
4.3 重入漏洞 141
4.3.1 漏洞概述 141
4.3.2 代碼片段 148
4.3.3 漏洞分析、調試與防範 149
4.3.4 相關案例 155
4.4 訪問控制缺陷 155
4.4.1 漏洞概述 155
4.4.2 代碼片段 156
4.4.3 漏洞分析、調試與防範 157
4.4.4 相關案例 162
4.5 特權功能暴露 162
4.5.1 漏洞概述 162
4.5.2 代碼片段 163
4.5.3 漏洞分析、調試與防範 163
4.5.4 相關案例 170
4.6 跨契約調用漏洞 170
4.6.1 漏洞概述 170
4.6.2 代碼片段 172
4.6.3 漏洞分析、調試與防範 173
4.6.4 相關案例 176
4.7 拒絕服務漏洞 177
4.7.1 漏洞概述 177
4.7.2 代碼片段 177
4.7.3 漏洞分析、調試與防範 178
4.7.4 相關案例 185
4.8 礦工特權隱患 185
4.8.1 漏洞概述 185
4.8.2 代碼片段 185
4.8.3 漏洞分析與防範 186
4.8.4 相關案例 187
4.9 短地址攻擊 187
4.9.1 漏洞概述 187
4.9.2 代碼片段 189
4.9.3 漏洞分析、調試與防範 190
4.10 tx.origin漏洞 195
4.10.1 漏洞概述 195
4.10.2 代碼片段 195
4.10.3 漏洞分析、調試與防範 195
4.11 本章小結 199
第5章 智慧型契約蜜罐
5.1 智慧型契約蜜罐概述 201
5.2 WhaleGiveaway1 201
5.2.1 蜜罐分析 201
5.2.2 代碼復現 203
5.3 Gift_1_ETH 207
5.3.1 蜜罐分析 207
5.3.2 代碼復現 210
5.4 MultiplicatorX3 213
5.4.1 蜜罐分析 213
5.4.2 代碼復現 215
5.5 TestBank 217
5.5.1 蜜罐分析 217
5.5.2 代碼復現 221
5.6 CryptoRoulette 223
5.6.1 蜜罐分析 223
5.6.2 代碼復現 225
5.7 OpenAddressLottery 226
5.7.1 蜜罐分析 226
5.7.2 代碼復現 229
5.8 KingOfTheHill 231
5.8.1 蜜罐分析 231
5.8.2 代碼復現 233
5.9 RACEFORETH 235
5.10 For_Test 237
5.10.1 蜜罐分析 237
5.10.2 代碼復現 239
5.11 DividendDistributor 240
5.11.1 蜜罐分析 240
5.11.2 代碼復現 244
5.12 與智慧型契約蜜罐相關的安全建議 246
5.13 本章小結 246
第6章 常見智慧型契約分析與審計工具
6.1 智慧型契約分析工具——Solgraph 247
6.1.1 Solgraph簡介 247
6.1.2 Solgraph的安裝與使用 248
6.2 智慧型契約審計工具——mythril 250
6.2.1 mythril的安裝 251
6.2.2 mythril的使用與功能說明 252
6.3 智慧型契約審計平台——SECURIFY 257
6.3.1 SECURIFY概述 257
6.3.2 SECURIFY系統探究 259
6.3.3 SECURIFY的使用 261
第7章 智慧型契約審計實戰
7.1 智慧型契約審計清單 264
7.2 博彩遊戲契約審計 265
7.2.1 契約代碼與契約功能瀏覽 265
7.2.2 審計報告 268
7.3 CryptoKitties契約審計 274
7.4 本章小結 277
第8章 智慧型契約位元組碼解構
8.1 打開引擎蓋——智慧型契約下的位元組碼 278
8.2 解構第一步——creation 282
8.3 解構第二步——runtime 291
8.3.1 函式選擇器 292
8.3.2 函式包裝器 295
8.3.3 函式主體 301
8.3.4 元數據散列 305
8.4 本章小結 309
參考文獻 310,第1章 由淺入深理解區塊鏈
1.1 區塊鏈簡介 1
1.2 區塊鏈1.0 ——比特幣,一種點對點的現金支付系統 1
1.2.1 比特幣的產生 1
1.2.2 深入分析比特幣的工作機制 5
1.2.3 結合《比特幣白皮書》理解比特幣 9
1.2.4 比特幣的回顧與剖析 13
1.2.5 比特幣的不足 16
1.3 區塊鏈2.0 ——以太坊 18
1.3.1 以太坊的產生 18
1.3.2 深入理解以太坊 18
1.4 區塊鏈3.0 ——DApp 25
1.5 基於以太坊的智慧型契約入門 25
1.5.1 智慧型契約的結構 26
1.5.2 EOS上的智慧型契約及其與以太坊的對比 27
第2章 智慧型契約開發實戰
2.1 以太坊網路 29
2.2 私有鏈的搭建 30
2.2.1 geth簡介 30
2.2.2 geth的安裝與配置 31
2.2.3 geth的操作及相關說明 33
2.2.4 以太坊中的賬戶與密鑰 39
2.2.5 查看以太坊網路的狀態 40
2.3 Mist和Ethereum Wallet的安裝、配置與操作 42
2.3.1 下載與安裝 42
2.3.2 通過Ethereum Wallet連線本地私有庫 42
2.3.3 用Mist實現多重簽名 45
2.4 以太坊智慧型契約開發實戰 52
2.4.1 開發環境 52
2.4.2 編寫第一個智慧型契約 54
2.5 ERC-20 Token契約 58
2.5.1 Token契約概述 58
2.5.2 ERC-20 Token契約詳解 60
2.5.3 對ERC-20 Token契約的進一步說明 61
2.6 本章小結 63
第3章 智慧型契約語法實戰
3.1 造就骨架——建立契約框架 64
3.2 初添血肉——添加狀態變數 66
3.2.1 數據類型簡介 66
3.2.2 添加uint類型的變數 67
3.2.3 添加結構體 67
3.2.4 添加數組 68
3.3 再添經脈——添加函式 70
3.3.1 添加一個簡單的函式 70
3.3.2 添加一個複雜的函式 72
3.3.3 特別的函式——回退函式 75
3.4 與外界互動——添加事件 80
3.5 大腦的溝通——多用戶拓展 82
3.5.1 神經的連線——映射和地址 82
3.5.2 神經的傳輸——msg.sender 85
3.5.3 神經興奮的判別——require( )方法 87
3.5.4 生命的傳承——Inheritance 87
3.5.5 血液里的本能——“獵食”和“繁殖” 90
3.5.6 DNA的融合 91
3.5.7 各司其職的隱私——關於函式可見性的更多內容 92
3.5.8 同化作用——契約互動 93
3.5.9 同化作用的結果——獲得獎勵 98
3.6 高級Solidity理論 100
3.6.1 外部依賴關係 100
3.6.2 許可權的產生——Ownable Contracts 101
3.6.3 許可權的確認——函式修飾符onlyOwner 105
3.6.4 運轉的動力——gas 107
3.7 Truffle的介紹與安裝 108
3.8 創建、部署、使用Token契約 110
3.8.1 Truffle的box和OpenZeppelin 110
3.8.2 安裝tutorialtoken box和OpenZeppelin 111
3.8.3 創建TutorialToken契約 112
3.8.4 契約的編譯與部署 114
3.8.5 契約操作與實踐 116
3.9 創建、部署、使用ICO契約 121
3.9.1 ICO簡介 121
3.9.2 創建ICO契約 122
3.9.3 ICO契約的編譯與部署 125
3.9.4 ICO契約的操作實踐 130
3.10 本章小結 131
第4章 智慧型契約常見漏洞
4.1 智慧型契約審計指南 132
4.1.1 智慧型契約審計概述 132
4.1.2 智慧型契約審計報告的結構 132
4.2 整型溢出漏洞 133
4.2.1 漏洞概述 133
4.2.2 代碼片段 133
4.2.3 漏洞分析與調試 134
4.2.4 相關案例 139
4.2.5 規避整型溢出的神器——SafeMath庫 140
4.3 重入漏洞 141
4.3.1 漏洞概述 141
4.3.2 代碼片段 148
4.3.3 漏洞分析、調試與防範 149
4.3.4 相關案例 155
4.4 訪問控制缺陷 155
4.4.1 漏洞概述 155
4.4.2 代碼片段 156
4.4.3 漏洞分析、調試與防範 157
4.4.4 相關案例 162
4.5 特權功能暴露 162
4.5.1 漏洞概述 162
4.5.2 代碼片段 163
4.5.3 漏洞分析、調試與防範 163
4.5.4 相關案例 170
4.6 跨契約調用漏洞 170
4.6.1 漏洞概述 170
4.6.2 代碼片段 172
4.6.3 漏洞分析、調試與防範 173
4.6.4 相關案例 176
4.7 拒絕服務漏洞 177
4.7.1 漏洞概述 177
4.7.2 代碼片段 177
4.7.3 漏洞分析、調試與防範 178
4.7.4 相關案例 185
4.8 礦工特權隱患 185
4.8.1 漏洞概述 185
4.8.2 代碼片段 185
4.8.3 漏洞分析與防範 186
4.8.4 相關案例 187
4.9 短地址攻擊 187
4.9.1 漏洞概述 187
4.9.2 代碼片段 189
4.9.3 漏洞分析、調試與防範 190
4.10 tx.origin漏洞 195
4.10.1 漏洞概述 195
4.10.2 代碼片段 195
4.10.3 漏洞分析、調試與防範 195
4.11 本章小結 199
第5章 智慧型契約蜜罐
5.1 智慧型契約蜜罐概述 201
5.2 WhaleGiveaway1 201
5.2.1 蜜罐分析 201
5.2.2 代碼復現 203
5.3 Gift_1_ETH 207
5.3.1 蜜罐分析 207
5.3.2 代碼復現 210
5.4 MultiplicatorX3 213
5.4.1 蜜罐分析 213
5.4.2 代碼復現 215
5.5 TestBank 217
5.5.1 蜜罐分析 217
5.5.2 代碼復現 221
5.6 CryptoRoulette 223
5.6.1 蜜罐分析 223
5.6.2 代碼復現 225
5.7 OpenAddressLottery 226
5.7.1 蜜罐分析 226
5.7.2 代碼復現 229
5.8 KingOfTheHill 231
5.8.1 蜜罐分析 231
5.8.2 代碼復現 233
5.9 RACEFORETH 235
5.10 For_Test 237
5.10.1 蜜罐分析 237
5.10.2 代碼復現 239
5.11 DividendDistributor 240
5.11.1 蜜罐分析 240
5.11.2 代碼復現 244
5.12 與智慧型契約蜜罐相關的安全建議 246
5.13 本章小結 246
第6章 常見智慧型契約分析與審計工具
6.1 智慧型契約分析工具——Solgraph 247
6.1.1 Solgraph簡介 247
6.1.2 Solgraph的安裝與使用 248
6.2 智慧型契約審計工具——mythril 250
6.2.1 mythril的安裝 251
6.2.2 mythril的使用與功能說明 252
6.3 智慧型契約審計平台——SECURIFY 257
6.3.1 SECURIFY概述 257
6.3.2 SECURIFY系統探究 259
6.3.3 SECURIFY的使用 261
第7章 智慧型契約審計實戰
7.1 智慧型契約審計清單 264
7.2 博彩遊戲契約審計 265
7.2.1 契約代碼與契約功能瀏覽 265
7.2.2 審計報告 268
7.3 CryptoKitties契約審計 274
7.4 本章小結 277
第8章 智慧型契約位元組碼解構
8.1 打開引擎蓋——智慧型契約下的位元組碼 278
8.2 解構第一步——creation 282
8.3 解構第二步——runtime 291
8.3.1 函式選擇器 292
8.3.2 函式包裝器 295
8.3.3 函式主體 301
8.3.4 元數據散列 305
8.4 本章小結 309
參考文獻 310
2.5.2 ERC-20 Token契約詳解 60
2.5.3 對ERC-20 Token契約的進一步說明 61
2.6 本章小結 63
第3章 智慧型契約語法實戰
3.1 造就骨架——建立契約框架 64
3.2 初添血肉——添加狀態變數 66
3.2.1 數據類型簡介 66
3.2.2 添加uint類型的變數 67
3.2.3 添加結構體 67
3.2.4 添加數組 68
3.3 再添經脈——添加函式 70
3.3.1 添加一個簡單的函式 70
3.3.2 添加一個複雜的函式 72
3.3.3 特別的函式——回退函式 75
3.4 與外界互動——添加事件 80
3.5 大腦的溝通——多用戶拓展 82
3.5.1 神經的連線——映射和地址 82
3.5.2 神經的傳輸——msg.sender 85
3.5.3 神經興奮的判別——require方法 87
3.5.4 生命的傳承——Inheritance 87
3.5.5 血液里的本能——“獵食”和“繁殖” 90
3.5.6 DNA的融合 91
3.5.7 各司其職的隱私——關於函式可見性的更多內容 92
3.5.8 同化作用——契約互動 93
3.5.9 同化作用的結果——獲得獎勵 98
3.6 高級Solidity理論 100
3.6.1 外部依賴關係 100
3.6.2 許可權的產生——Ownable Contracts 101
3.6.3 許可權的確認——函式修飾符onlyOwner 105
3.6.4 運轉的動力——gas 107
3.7 Truffle的介紹與安裝 108
3.8 創建、部署、使用Token契約 110
3.8.1 Truffle的box和OpenZeppelin 110
3.8.2 安裝tutorialtoken box和OpenZeppelin 111
3.8.3 創建TutorialToken契約 112
3.8.4 契約的編譯與部署 114
3.8.5 契約操作與實踐 116
3.9 創建、部署、使用ICO契約 121
3.9.1 ICO簡介 121
3.9.2 創建ICO契約 122
3.9.3 ICO契約的編譯與部署 125
3.9.4 ICO契約的操作實踐 130
3.10 本章小結 131
第4章 智慧型契約常見漏洞
4.1 智慧型契約審計指南 132
4.1.1 智慧型契約審計概述 132
4.1.2 智慧型契約審計報告的結構 132
4.2 整型溢出漏洞 133
4.2.1 漏洞概述 133
4.2.2 代碼片段 133
4.2.3 漏洞分析與調試 134
4.2.4 相關案例 139
4.2.5 規避整型溢出的神器——SafeMath庫 140
4.3 重入漏洞 141
4.3.1 漏洞概述 141
4.3.2 代碼片段 148
4.3.3 漏洞分析、調試與防範 149
4.3.4 相關案例 155
4.4 訪問控制缺陷 155
4.4.1 漏洞概述 155
4.4.2 代碼片段 156
4.4.3 漏洞分析、調試與防範 157
4.4.4 相關案例 162
4.5 特權功能暴露 162
4.5.1 漏洞概述 162
4.5.2 代碼片段 163
4.5.3 漏洞分析、調試與防範 163
4.5.4 相關案例 170
4.6 跨契約調用漏洞 170
4.6.1 漏洞概述 170
4.6.2 代碼片段 172
4.6.3 漏洞分析、調試與防範 173
4.6.4 相關案例 176
4.7 拒絕服務漏洞 177
4.7.1 漏洞概述 177
4.7.2 代碼片段 177
4.7.3 漏洞分析、調試與防範 178
4.7.4 相關案例 185
4.8 礦工特權隱患 185
4.8.1 漏洞概述 185
4.8.2 代碼片段 185
4.8.3 漏洞分析與防範 186
4.8.4 相關案例 187
4.9 短地址攻擊 187
4.9.1 漏洞概述 187
4.9.2 代碼片段 189
4.9.3 漏洞分析、調試與防範 190
4.10 tx.origin漏洞 195
4.10.1 漏洞概述 195
4.10.2 代碼片段 195
4.10.3 漏洞分析、調試與防範 195
4.11 本章小結 199
第5章 智慧型契約蜜罐
5.1 智慧型契約蜜罐概述 201
5.2 WhaleGiveaway1 201
5.2.1 蜜罐分析 201
5.2.2 代碼復現 203
5.3 Gift_1_ETH 207
5.3.1 蜜罐分析 207
5.3.2 代碼復現 210
5.4 MultiplicatorX3 213
5.4.1 蜜罐分析 213
5.4.2 代碼復現 215
5.5 TestBank 217
5.5.1 蜜罐分析 217
5.5.2 代碼復現 221
5.6 CryptoRoulette 223
5.6.1 蜜罐分析 223
5.6.2 代碼復現 225
5.7 OpenAddressLottery 226
5.7.1 蜜罐分析 226
5.7.2 代碼復現 229
5.8 KingOfTheHill 231
5.8.1 蜜罐分析 231
5.8.2 代碼復現 233
5.9 RACEFORETH 235
5.10 For_Test 237
5.10.1 蜜罐分析 237
5.10.2 代碼復現 239
5.11 DividendDistributor 240
5.11.1 蜜罐分析 240
5.11.2 代碼復現 244
5.12 與智慧型契約蜜罐相關的安全建議 246
5.13 本章小結 246
第6章 常見智慧型契約分析與審計工具
6.1 智慧型契約分析工具——Solgraph 247
6.1.1 Solgraph簡介 247
6.1.2 Solgraph的安裝與使用 248
6.2 智慧型契約審計工具——mythril 250
6.2.1 mythril的安裝 251
6.2.2 mythril的使用與功能說明 252
6.3 智慧型契約審計平台——SECURIFY 257
6.3.1 SECURIFY概述 257
6.3.2 SECURIFY系統探究 259
6.3.3 SECURIFY的使用 261
第7章 智慧型契約審計實戰
7.1 智慧型契約審計清單 264
7.2 博彩遊戲契約審計 265
7.2.1 契約代碼與契約功能瀏覽 265
7.2.2 審計報告 268
7.3 CryptoKitties契約審計 274
7.4 本章小結 277
第8章 智慧型契約位元組碼解構
8.1 打開引擎蓋——智慧型契約下的位元組碼 278
8.2 解構第一步——creation 282
8.3 解構第二步——runtime 291
8.3.1 函式選擇器 292
8.3.2 函式包裝器 295
8.3.3 函式主體 301
8.3.4 元數據散列 305
8.4 本章小結 309
參考文獻 310,第1章 由淺入深理解區塊鏈
1.1 區塊鏈簡介 1
1.2 區塊鏈1.0 ——比特幣,一種點對點的現金支付系統 1
1.2.1 比特幣的產生 1
1.2.2 深入分析比特幣的工作機制 5
1.2.3 結合《比特幣白皮書》理解比特幣 9
1.2.4 比特幣的回顧與剖析 13
1.2.5 比特幣的不足 16
1.3 區塊鏈2.0 ——以太坊 18
1.3.1 以太坊的產生 18
1.3.2 深入理解以太坊 18
1.4 區塊鏈3.0 ——DApp 25
1.5 基於以太坊的智慧型契約入門 25
1.5.1 智慧型契約的結構 26
1.5.2 EOS上的智慧型契約及其與以太坊的對比 27
第2章 智慧型契約開發實戰
2.1 以太坊網路 29
2.2 私有鏈的搭建 30
2.2.1 geth簡介 30
2.2.2 geth的安裝與配置 31
2.2.3 geth的操作及相關說明 33
2.2.4 以太坊中的賬戶與密鑰 39
2.2.5 查看以太坊網路的狀態 40
2.3 Mist和Ethereum Wallet的安裝、配置與操作 42
2.3.1 下載與安裝 42
2.3.2 通過Ethereum Wallet連線本地私有庫 42
2.3.3 用Mist實現多重簽名 45
2.4 以太坊智慧型契約開發實戰 52
2.4.1 開發環境 52
2.4.2 編寫第一個智慧型契約 54
2.5 ERC-20 Token契約 58
2.5.1 Token契約概述 58
2.5.2 ERC-20 Token契約詳解 60
2.5.3 對ERC-20 Token契約的進一步說明 61
2.6 本章小結 63
第3章 智慧型契約語法實戰
3.1 造就骨架——建立契約框架 64
3.2 初添血肉——添加狀態變數 66
3.2.1 數據類型簡介 66
3.2.2 添加uint類型的變數 67
3.2.3 添加結構體 67
3.2.4 添加數組 68
3.3 再添經脈——添加函式 70
3.3.1 添加一個簡單的函式 70
3.3.2 添加一個複雜的函式 72
3.3.3 特別的函式——回退函式 75
3.4 與外界互動——添加事件 80
3.5 大腦的溝通——多用戶拓展 82
3.5.1 神經的連線——映射和地址 82
3.5.2 神經的傳輸——msg.sender 85
3.5.3 神經興奮的判別——require( )方法 87
3.5.4 生命的傳承——Inheritance 87
3.5.5 血液里的本能——“獵食”和“繁殖” 90
3.5.6 DNA的融合 91
3.5.7 各司其職的隱私——關於函式可見性的更多內容 92
3.5.8 同化作用——契約互動 93
3.5.9 同化作用的結果——獲得獎勵 98
3.6 高級Solidity理論 100
3.6.1 外部依賴關係 100
3.6.2 許可權的產生——Ownable Contracts 101
3.6.3 許可權的確認——函式修飾符onlyOwner 105
3.6.4 運轉的動力——gas 107
3.7 Truffle的介紹與安裝 108
3.8 創建、部署、使用Token契約 110
3.8.1 Truffle的box和OpenZeppelin 110
3.8.2 安裝tutorialtoken box和OpenZeppelin 111
3.8.3 創建TutorialToken契約 112
3.8.4 契約的編譯與部署 114
3.8.5 契約操作與實踐 116
3.9 創建、部署、使用ICO契約 121
3.9.1 ICO簡介 121
3.9.2 創建ICO契約 122
3.9.3 ICO契約的編譯與部署 125
3.9.4 ICO契約的操作實踐 130
3.10 本章小結 131
第4章 智慧型契約常見漏洞
4.1 智慧型契約審計指南 132
4.1.1 智慧型契約審計概述 132
4.1.2 智慧型契約審計報告的結構 132
4.2 整型溢出漏洞 133
4.2.1 漏洞概述 133
4.2.2 代碼片段 133
4.2.3 漏洞分析與調試 134
4.2.4 相關案例 139
4.2.5 規避整型溢出的神器——SafeMath庫 140
4.3 重入漏洞 141
4.3.1 漏洞概述 141
4.3.2 代碼片段 148
4.3.3 漏洞分析、調試與防範 149
4.3.4 相關案例 155
4.4 訪問控制缺陷 155
4.4.1 漏洞概述 155
4.4.2 代碼片段 156
4.4.3 漏洞分析、調試與防範 157
4.4.4 相關案例 162
4.5 特權功能暴露 162
4.5.1 漏洞概述 162
4.5.2 代碼片段 163
4.5.3 漏洞分析、調試與防範 163
4.5.4 相關案例 170
4.6 跨契約調用漏洞 170
4.6.1 漏洞概述 170
4.6.2 代碼片段 172
4.6.3 漏洞分析、調試與防範 173
4.6.4 相關案例 176
4.7 拒絕服務漏洞 177
4.7.1 漏洞概述 177
4.7.2 代碼片段 177
4.7.3 漏洞分析、調試與防範 178
4.7.4 相關案例 185
4.8 礦工特權隱患 185
4.8.1 漏洞概述 185
4.8.2 代碼片段 185
4.8.3 漏洞分析與防範 186
4.8.4 相關案例 187
4.9 短地址攻擊 187
4.9.1 漏洞概述 187
4.9.2 代碼片段 189
4.9.3 漏洞分析、調試與防範 190
4.10 tx.origin漏洞 195
4.10.1 漏洞概述 195
4.10.2 代碼片段 195
4.10.3 漏洞分析、調試與防範 195
4.11 本章小結 199
第5章 智慧型契約蜜罐
5.1 智慧型契約蜜罐概述 201
5.2 WhaleGiveaway1 201
5.2.1 蜜罐分析 201
5.2.2 代碼復現 203
5.3 Gift_1_ETH 207
5.3.1 蜜罐分析 207
5.3.2 代碼復現 210
5.4 MultiplicatorX3 213
5.4.1 蜜罐分析 213
5.4.2 代碼復現 215
5.5 TestBank 217
5.5.1 蜜罐分析 217
5.5.2 代碼復現 221
5.6 CryptoRoulette 223
5.6.1 蜜罐分析 223
5.6.2 代碼復現 225
5.7 OpenAddressLottery 226
5.7.1 蜜罐分析 226
5.7.2 代碼復現 229
5.8 KingOfTheHill 231
5.8.1 蜜罐分析 231
5.8.2 代碼復現 233
5.9 RACEFORETH 235
5.10 For_Test 237
5.10.1 蜜罐分析 237
5.10.2 代碼復現 239
5.11 DividendDistributor 240
5.11.1 蜜罐分析 240
5.11.2 代碼復現 244
5.12 與智慧型契約蜜罐相關的安全建議 246
5.13 本章小結 246
第6章 常見智慧型契約分析與審計工具
6.1 智慧型契約分析工具——Solgraph 247
6.1.1 Solgraph簡介 247
6.1.2 Solgraph的安裝與使用 248
6.2 智慧型契約審計工具——mythril 250
6.2.1 mythril的安裝 251
6.2.2 mythril的使用與功能說明 252
6.3 智慧型契約審計平台——SECURIFY 257
6.3.1 SECURIFY概述 257
6.3.2 SECURIFY系統探究 259
6.3.3 SECURIFY的使用 261
第7章 智慧型契約審計實戰
7.1 智慧型契約審計清單 264
7.2 博彩遊戲契約審計 265
7.2.1 契約代碼與契約功能瀏覽 265
7.2.2 審計報告 268
7.3 CryptoKitties契約審計 274
7.4 本章小結 277
第8章 智慧型契約位元組碼解構
8.1 打開引擎蓋——智慧型契約下的位元組碼 278
8.2 解構第一步——creation 282
8.3 解構第二步——runtime 291
8.3.1 函式選擇器 292
8.3.2 函式包裝器 295
8.3.3 函式主體 301
8.3.4 元數據散列 305
8.4 本章小結 309
參考文獻 310