以太坊智慧型契約開發實戰

以太坊智慧型契約開發實戰

《以太坊智慧型契約開發實戰》一書由唐盛彬編寫,由機械工業出版社出版發行。

基本介紹

  • 中文名:以太坊智慧型契約開發實戰 
  • 作者:唐盛彬
  • 類別:區塊鏈
  • 出版社:機械工業出版社
  • 出版時間:2019年4月 
  • 頁數:488 頁
  • 定價:118 元
  • 開本:16 開
  • 裝幀:精裝
  • ISBN:9787111623717
內容簡介,圖書目錄,作者簡介,

內容簡介

本書從區塊鏈的概念、原理、核心技術和套用四個方面,系統地介紹了以太坊區塊鏈開發的相關知識。其中,重點介紹了以太坊的相關概念和原理、以太坊客戶端Geth、以太坊常用智慧型契約開發工具、Solidity語言和智慧型契約開發等內容,並介紹了眾籌契約和代幣契約兩個項目實戰案例,可以讓讀者對智慧型契約開發的整體流程有一個全面的了解。另外,書中結合示例對web3.js的相關知識也做了詳細介紹,以幫助讀者更好地理解和利用以太坊的相關數據。
本書共17章,分為4篇,涵蓋的主要內容有區塊鏈的概念、原理與底層技術;以太坊的相關概念與原理;以太坊相關協定;以太坊客戶端Geth;以太坊智慧型契約的其他常用工具與客戶端;Solidity語言的基本概念與數據類型;使用Solidity進行以太坊智慧型契約開發;通過web3.js與以太坊區塊鏈數據進行互動;眾籌智慧型契約與代幣智慧型契約項目實戰案例。
本書內容豐富,講解通俗易懂,案例典型,實用性強,特別適合區塊鏈技術愛好者和智慧型契約開發的相關從業人員閱讀,也適合區塊鏈底層研究人員閱讀。另外,本書還適合區塊鏈培訓機構作為相關課程的培訓教材。

圖書目錄

第1篇 基礎理論與原理
第1章 與區塊鏈的第一次親密接觸 2
1.1 什麼是區塊鏈 2
1.1.1 區塊鏈簡介 2
1.1.2 區塊鏈的鏈式結構 3
1.1.3 區塊鏈上的區塊常見數據 4
1.2 工作量證明機制(PoW) 6
1.2.1 區塊鏈遭遇的問題 6
1.2.2 PoW模型 8
1.2.3 PoW為什麼能防止篡改 9
1.3 權益證明機制(PoS) 11
1.3.1 什麼是PoS 12
1.3.2 PoS的優勢與劣勢 12
1.4 委託權益證明(DPoS) 12
1.5 權威證明(PoA) 13
1.6 區塊鏈的套用 13
1.7 本章小結 13
第2章 去中心化套用——DApp 15
2.1 DApp簡介 15
2.1.1 什麼是DApp 15
2.1.2 DApp網路組建過程 16
2.1.3 DApp的優點 16
2.1.4 DApp存在的問題 16
2.2 中心化與去中心化 17
2.2.1 身份驗證 17
2.2.2 通信 17
2.2.3 數據互動 17
2.2.4 系統維護 18
2.3 DApp網路與通信 18
2.3.1 P2P網路與WWW 19
2.3.2 P2P網路拓撲結構類型 20
2.3.3 小結 21
2.4 DApp貨幣與中心化數據互動 22
2.4.1 DApp貨幣 22
2.4.2 中心化套用獲取去中心化數據 22
2.4.3 去中心化套用獲取中心化數據 22
2.5 常見的DApp 23
2.5.1 比特幣 23
2.5.2 以太坊 23
2.5.3 IPFS存儲系統 23
第3章 比特幣那些事 25
3.1 比特幣簡介 25
3.1.1 比特幣公鑰與私鑰 25
3.1.2 數字簽名 26
3.2 橢圓曲線算法 26
3.2.1 群 26
3.2.2 橢圓曲線算法定義 28
3.2.3 橢圓曲線幾何運算 29
3.2.4 橢圓曲線算法的代碼實現 30
3.2.5 橢圓曲線加密與簽名原理 37
3.3 比特幣私鑰、公鑰與地址 39
3.3.1 從私鑰到地址 39
3.3.2 公鑰壓縮 40
3.3.3 私鑰格式 41
3.3.4 私鑰與安全 41
3.4 比特幣交易 44
3.4.1 交易簡介 44
3.4.2 交易輸出 44
3.4.3 交易輸入 44
3.4.4 交易費 45
3.4.5 付款至公鑰哈希(P2PKH) 45
3.4.6 多重簽名與P2SH 46
3.5 比特幣錢包 46
3.5.1 錢包簡介 46
3.5.2 生成助記詞 47
3.5.3 從助記詞生成種子 48
3.5.4 從種子生成HD錢包 48
3.5.5 HD錢包密鑰路徑 50
3.6 比特幣相關資源 51
第4章 以太坊 52
4.1 以太坊簡介 52
4.1.1 什麼是以太坊 52
4.1.2 以太坊虛擬機(EVM) 53
4.1.3 以太坊智慧型契約與高級語言 53
4.1.4 以太幣單位 54
4.1.5 以太坊發行版本與提案 54
4.2 以太坊賬戶 55
4.2.1 外部賬戶 55
4.2.2 契約賬戶 56
4.2.3 外部賬戶與契約賬戶的異同 56
4.3 以太坊交易 57
4.3.1 gas、gasPrice與gasLimit 57
4.3.2 gasUsed與交易花費 58
4.3.3 什麼是以太坊交易與訊息 58
4.4 以太坊網路 59
4.4.1 以太坊網路簡介 59
4.4.2 以太坊與Kademlia 59
4.4.3 以太坊客戶端 61
4.5 挖礦 62
4.5.1 什麼是挖礦 62
4.5.2 挖礦獎勵 62
4.5.3 以太坊區塊 63
4.6 GHOST協定 64
4.6.1 區塊時間 64
4.6.2 區塊分叉 65
4.6.3 普通分叉帶來的問題 66
4.6.4 GHOST協定的具體內容 67
4.7 Ethash算法之DAG 68
4.7.1 什麼是DAG 68
4.7.2 DAG生成過程 69
4.7.3 為什麼要使用DAG 69
4.8 Ethash算法 70
4.8.1 Ethash算法簡介 70
4.8.2 Ethash算法流程 70
4.9 本章小結 71
第2篇 開發工具
第5章 智慧型契約開發常用工具 74
5.1 Git簡介 74
5.1.1 Git安裝 74
5.1.2 Git常用命令 75
5.1.3 Git資源推薦 76
5.2 Node.js簡介 76
5.2.1 什麼是Node.js 76
5.2.2 Node.js安裝 77
5.3 NPM簡介 78
5.3.1 npm config命令 78
5.3.2 NPM與語義化版本 80
5.3.3 npm install命令 82
5.3.4 NPM鏡像 83
5.3.5 NPM的其他常用命令 84
5.4 webpack簡介 85
5.4.1 認識webpack 85
5.4.2 webpack首秀 85
5.4.3 webpack 與webpack-dev-server 87
5.4.4 webpack常用功能與配置 90
5.4.5 webpack總結 92
5.5 Postman簡介 92
5.5.1 認識Postman 93
5.5.2 Postman的簡單用法 94
5.5.3 Postman腳本 95
5.6 LevelDB簡介 96
5.6.1 認識LevelDB 96
5.6.2 LevelDB檔案 97
5.6.3 SST結構與數據查找 99
第6章 以太坊私鏈神器——Ganache 102
6.1 Ganache簡介 102
6.1.1 什麼是Ganache 102
6.1.2 ganache-cli命令安裝 103
6.1.3 Ganache圖形界面 104
6.2 Ganache常見命令參數 106
6.2.1 挖礦時間 106
6.2.2 主機連線埠與網路 106
6.2.3 gas相關參數 106
6.2.4 其他參數 106
6.3 Ganache賬戶 107
6.3.1 能多給我點錢嗎 107
6.3.2 能多給我幾個賬戶嗎 108
6.3.3 助記詞相關參數 108
6.3.4 指定賬戶 108
6.3.5 鎖定賬戶與解鎖 109
6.4 Ganache與JavaScript 109
6.4.1 在工程中引用Ganache的Provider 109
6.4.2 在工程中啟動Ganache的Server 110
6.4.3 配置工程中依賴的Ganache 111
6.5 Ganache交易相關RPC方法 112
6.5.1 eth_sendTransaction方法 113
6.5.2 eth_getTransactionCount方法 115
6.5.3 eth_getTransactionReceipt方法 116
6.5.4 eth_getTransactionByHash方法 116
6.5.5 交易相關的其他方法 117
6.6 Ganache賬戶相關RPC方法 117
6.6.1 eth_accounts方法 118
6.6.2 eth_getBalance方法 118
6.6.3 eth_coinbase方法 119
6.7 Ganache區塊相關RPC方法 119
6.7.1 eth_getBlockByHash方法 119
6.7.2 eth_getBlockByNumber方法 122
6.7.3 其他相關方法 122
6.8 Ganache日誌相關RPC方法 123
6.8.1 eth_newFilter方法 123
6.8.2 eth_getFilterLogs方法 124
6.8.3 eth_getLogs方法 125
6.8.4 其他關聯方法 126
6.9 Ganache的其他RPC方法 127
6.9.1 web3_clientVersion方法 127
6.9.2 net_version方法 127
6.9.3 eth_getCode方法 128
6.9.4 eth_sign方法 129
第7章 以太坊官方客戶端——Geth 130
7.1 Geth簡介 130
7.1.1 Geth是什麼 130
7.1.2 Geth安裝 130
7.1.3 Geth相關目錄 132
7.1.4 Geth相關工具 134
7.2 Geth子命令 134
7.2.1 Geth子命令概述 135
7.2.2 Geth子命令之account 136
7.2.3 Geth子命令之console與attach 137
7.2.4 Geth子命令之copydb與removedb 137
7.3 Geth啟動參數 138
7.3.1 Geth數據同步模式 138
7.3.2 Geth網路相關參數 138
7.3.3 Geth以太坊相關參數 139
7.3.4 Geth RPC相關參數 140
7.3.5 Geth挖礦相關參數 141
7.3.6 Geth ethash算法參數 142
7.3.7 Geth交易池配置 142
7.3.8 Geth日誌參數 145
7.3.9 Geth的其他參數 146
7.4 Geth啟動實例 146
7.4.1 Geth啟動單個節點 146
7.4.2 Geth啟動多節點組網 148
7.5 Geth控制台與管理接口 149
7.5.1 admin模組 149
7.5.2 debug模組 150
7.5.3 miner模組 151
7.5.4 personal模組 152
7.5.5 txpool模組 153
7.6 keystore檔案 153
7.6.1 keystore檔案簡介 153
7.6.2 從密鑰到密鑰檔案 154
7.6.3 從密鑰到密鑰檔案流程驗證 155
第8章 以太坊錢包與瀏覽器 158
8.1 MetaMask外掛程式 158
8.1.1 MetaMask簡介 158
8.1.2 MetaMask安裝 159
8.1.3 第一次使用MetaMask 160
8.1.4 MetaMask的連線配置 161
8.1.5 MetaMask的其他配置 162
8.1.6 MetaMask賬戶管理 163
8.1.7 MetaMask交易 164
8.1.8 小結 165
8.2 Ethereum Wallet錢包 166
8.2.1 Ethereum Wallet簡介 166
8.2.2 安裝Ethereum Wallet與Mist 166
8.2.3 使用Ethereum Wallet 169
8.3 Mist與Ethereum Wallet 170
8.3.1 Ethereum Wallet與Mist的區別 171
8.3.2 Mist的配置與使用 171
8.3.3 小結 172
8.4 MyEtherWallet網頁錢包 172
8.4.1 MyEtherWallet簡介 173
8.4.2 MyEtherWallet契約互動 174
8.4.3 MyEtherWallet離線交易 175
8.4.4 MyEtherWallet的其他功能 177
第3篇 Solidity與智慧型契約開發
第9章 Solidity初遇 180
9.1 Solidity簡介 180
9.1.1 什麼是Solidity 180
9.1.2 智慧型契約示例 181
9.1.3 Solidity編譯版本 182
9.2 Solidity編輯器 182
9.2.1 Sublime編輯器 182
9.2.2 Atom編輯器 185
9.2.3 IDEA編輯器 187
9.3 Remix編輯器 188
9.3.1 Remix簡介 188
9.3.2 Remix檔案管理 189
9.3.3 Remix編輯面板與控制台 190
9.3.4 Remix編譯與運行面板 191
9.3.5 Remix基本配置面板 193
9.3.6 Remix分析配置面板 194
9.4 Solidity常見概念 196
9.4.1 狀態變數 196
9.4.2 局部變數 196
9.4.3 Solidity函式 197
9.4.4 返回多值 197
9.4.5 構造函式 198
9.4.6 異常 200
9.4.7 Solidity注釋與文檔 201
9.5 Solidity運算符 203
9.5.1 Solidity運算符簡介 203
9.5.2 Solidity運算符注意事項 204
9.6 Solidity控制結構 205
9.6.1 控制結構簡介 205
9.6.2 判斷語句 205
9.6.3 for循環 206
9.6.4 while與do…while循環 206
9.6.5 continue與break 207
9.6.6 三目運算符 208
9.7 可見性修飾符 209
9.7.1 public修飾符 209
9.7.2 internal修飾符 210
9.7.3 private修飾符 213
9.7.4 external修飾符 214
9.8 函式其他修飾符 216
9.8.1 constant修飾符 216
9.8.2 view修飾符 217
9.8.3 pure修飾符 217
第10章 Solidity數據類型 219
10.1 數據類型簡介 219
10.1.1 值類型 219
10.1.2 引用類型 220
10.1.3 小結 221
10.2 Booleans類型 221
10.2.1 Booleans類型簡介 221
10.2.2 Booleans類型支持的運算符 221
10.3 Integers類型 223
10.3.1 Integers類型簡介 223
10.3.2 Integers類型支持的運算符 224
10.3.3 Integers整除問題 225
10.4 定點數類型 226
10.4.1 定點數類型簡介 226
10.4.2 定點數類型支持的運算符 227
10.5 字面量 227
10.5.1 字元串字面量 227
10.5.2 十六進制字面量 229
10.5.3 有理數字面量 230
10.6 Enum類型 231
10.6.1 枚舉類型簡介 231
10.6.2 枚舉類型實例 231
10.7 mapping類型 232
10.7.1 mapping類型簡介 232
10.7.2 mapping類型實例 232
10.8 struct類型 233
第11章 Solidity數據類型進階 235
11.1 Solidity固定大小位元組數組 235
11.1.1 固定大小位元組數組類型 235
11.1.2 固定大小位元組數組支持的運算符 236
11.1.3 固定大小位元組數組的成員 236
11.1.4 固定大小位元組數組與字元串 237
11.1.5 固定大小位元組數組之間的轉換 240
11.1.6 小結 241
11.2 Solidity動態大小位元組數組 242
11.2.1 動態大小位元組數組簡介 242
11.2.2 創建動態大小位元組數組 242
11.2.3 動態大小位元組數組成員 243
11.2.4 位元組數組間的轉換 245
11.2.5 小結 247
11.3 Solidity數組 247
11.3.1 固定長度數組 248
11.3.2 動態長度數組 249
11.3.3 二維數組 250
11.3.4 小結 251
11.4 以太坊地址類型 251
11.4.1 地址簡介 252
11.4.2 transfer、send與balance 254
11.4.3 call、callcode與delegatecall 255
11.5 函式類型 257
11.5.1 函式類型簡介 258
11.5.2 函式簽名 258
11.5.3 函式類型實例 260
11.6 數據類型轉換 262
11.6.1 隱式轉換 262
11.6.2 顯式轉換 263
11.6.3 var關鍵字 264
11.7 delete運算符 265
11.7.1 delete與常見類型 265
11.7.2 delete與數組 266
11.7.3 delete與mapping 267
11.7.4 delete與struct 267
11.8 本章小結 268
第12章 Solidity開發智慧型契約 270
12.1 智慧型契約簡介 270
12.1.1 智慧型契約的概念 270
12.1.2 EVM結構與數據 271
12.1.3 智慧型契約執行 271
12.2 事件與日誌簡介 272
12.2.1 事件簡介 272
12.2.2 事件主題 272
12.2.3 事件與日誌 274
12.3 Solidity中的單位後綴 276
12.3.1 以太幣單位 276
12.3.2 時間單位 277
12.4 區塊與交易屬性 279
12.4.1 區塊的相關屬性 279
12.4.2 訊息的相關屬性 281
12.4.3 交易的相關屬性 282
12.5 錯誤處理函式 283
12.5.1 assert函式 283
12.5.2 require函式 283
12.5.3 revert函式 284
12.6 數學與Hash函式 285
12.6.1 數學運算函式 285
12.6.2 Hash函式 285
12.6.3 ecrecover函式 286
12.7 ABI編碼與編碼函式 287
12.7.1 ABI編碼簡介 287
12.7.2 ABI編碼數據類型 289
12.7.3 常見數據類型ABI編碼規則 290
12.7.4 複雜類型ABI編碼規則 292
12.7.5 ABI編碼實例 295
12.8 特殊類型函式 296
12.8.1 回退函式 296
12.8.2 析構函式 297
12.8.3 函式重載 298
12.8.4 使用new創建契約函式調用 299
第13章 Solidity開發智慧型契約進階 303
13.1 Solidity數據位置 303
13.1.1 什麼是數據位置 303
13.1.2 memory簡介 304
13.1.3 storage簡介 304
13.1.4 calldata簡介 307
13.1.5 小結 308
13.2 數據位置與賦值 308
13.2.1 狀態變數賦值給局部storage變數 308
13.2.2 狀態變數賦值給memory局部變數 310
13.2.3 局部memory變數賦值給狀態變數 310
13.2.4 狀態變數賦值狀態變數 311
13.2.5 局部memory變數賦值給局部memory變數 312
13.2.6 局部storage變數賦值給局部storage變數 313
13.2.7 局部storage變數賦值給局部memory變數 314
13.2.8 局部storage變數賦值給狀態變數 315
13.2.9 小結 316
13.3 函式修改器 317
13.3.1 函式修改器簡單實例 317
13.3.2 函式修改器複雜實例 319
13.3.3 小結 321
13.4 契約繼承 324
13.4.1 繼承簡介 324
13.4.2 super關鍵字 327
13.4.3 抽象契約 328
13.4.4 接口契約 328
13.5 Solidity庫 329
13.5.1 Solidity庫簡介 329
13.5.2 Solidity庫套用實例 329
13.5.3 Solidity導入源檔案 330
13.5.4 using for語句 331
13.6 Solidity編譯 333
13.6.1 solc簡介 333
13.6.2 solc編譯契約 336
13.6.3 solc導入與庫 338
13.6.4 solc.js簡介 340
13.6.5 使用solc.js在項目中編譯單個契約 340
13.6.6 使用solc.js在項目中編譯多個契約 342
13.7 Solidity編碼風格 344
13.7.1 命名風格 344
13.7.2 控制結構 344
13.7.3 函式相關風格 345
13.7.4 其他部分 346
第14章 通過web3.js與以太坊客戶端進行互動 347
14.1 web3.js簡介 347
14.1.1 web3.js概念 347
14.1.2 web3.js原理 348
14.1.3 web3.js模組 348
14.2 web3.js與以太坊節點 348
14.2.1 HTTP方式 348
14.2.2 IPC方式 349
14.2.3 WebSocket方式 350
14.3 web3.js工具的相關方法 350
14.3.1 以太幣單位轉換方法 351
14.3.2 十六進制、數字與字元串轉換 351
14.3.3 填充字元與getStorageAt 352
14.4 web3.js賬戶的相關方法 354
14.4.1 獲取賬戶與賬戶餘額 354
14.4.2 創建賬戶 355
14.4.3 解鎖賬戶 356
14.4.4 賬戶的其他相關方法 356
14.5 web3.js的ABI編碼方法 357
14.5.1 函式簽名與事件簽名 357
14.5.2 函式單參數編碼與解碼 359
14.5.3 函式多參數編碼與解碼 360
14.5.4 編碼函式調用 360
14.5.5 解碼日誌 361
14.6 web3.js契約的相關方法 362
14.6.1 創建與克隆契約 362
14.6.2 契約部署deploy 363
14.6.3 send函式與call函式 369
14.6.4 estimateGas函式與encodeABI函式 370
14.6.5 契約方法的調用 370
14.6.6 契約事件的處理 375
14.7 web3.js交易的相關方法 380
14.7.1 簽名簡介 380
14.7.2 簽名與交易 381
14.7.3 傳送交易 384
14.7.4 簽名交易與傳送簽名交易 386
14.7.5 獲取交易的相關數據 387
14.8 web3.js和IBAN的相關接口 388
14.8.1 IBAN簡介 389
14.8.2 BBAN、IBAN與地址 390
14.8.3 IBAN的其他方法 390
14.9 web3.js的其他方法 391
14.9.1 訂閱事件 391
14.9.2 網路及ENS的相關方法 392
14.9.3 與Swarm和Whisper互動的方法 392
14.10 與Ethereum相關的JavaScript庫 393
14.10.1 BigNumber.js庫 393
14.10.2 ethjs-abi庫 395
14.10.3 其他Ethereum庫 399
第4篇 項目案例實戰
第15章 工程化項目開發利器——Truffle 402
15.1 Truffle簡介 402
15.1.1 Truffle的主要功能 402
15.1.2 Truffle的安裝及其相關命令 403
15.2 Truffle創建項目 404
15.2.1 init命令 405
15.2.2 unbox命令 406
15.3 通過Truffle編譯項目 408
15.3.1 前置條件與編譯 408
15.3.2 Truffle編譯輸出 409
15.3.3 Truffle編譯依賴 410
15.4 Truffle配置檔案 411
15.4.1 網路配置 411
15.4.2 輸出目錄配置 412
15.4.3 測試配置 413
15.4.4 編譯配置 413
15.4.5 包管理相關配置 414
15.5 Truffle單元測試與部署 415
15.5.1 使用JavaScript測試 415
15.5.2 JavaScript測試交易 417
15.5.3 使用Solidity測試 419
15.5.4 契約部署 419
15.6 Truffle的其他命令 420
15.6.1 create命令 420
15.6.2 包管理相關命令 421
15.6.3 其他命令 421
第16章 項目流程與眾籌實戰案例 423
16.1 契約部分 423
16.1.1 項目簡介 423
16.1.2 初始化與契約目錄 424
16.1.3 部署與測試腳本目錄 424
16.2 眾籌契約 425
16.2.1 Owned契約 425
16.2.2 SafeMath契約 426
16.2.3 Crowd契約 427
16.3 契約的部署與使用 429
16.3.1 本地部署與測試環境搭建 429
16.3.2 本地部署與測試網路配置 429
16.3.3 本地部署 430
16.3.4 本地測試 430
16.3.5 Ropsten網路測試部署 431
16.4 項目的Web部分 432
16.4.1 初始化Web項目 432
16.4.2 webpack配置 432
16.4.3 package.json配置 433
16.4.4 運行Web項目 434
第17章 以太坊代幣標準與ERC20代幣案例 437
17.1 代幣簡介 437
17.1.1 ERC20簡介 437
17.1.2 ERC223簡介 438
17.1.3 ERC721簡介 438
17.2 ERC20標準接口簡介 438
17.2.1 基本信息 439
17.2.2 總額與餘額 439
17.2.3 轉賬與授權 439
17.2.4 事件 440
17.3 ERC20代幣實例 440
17.3.1 查看以太坊上已有的Token 440
17.3.2 創建Token 441
17.3.3 查看和轉移Token 443
17.4 擴展ERC20標準代幣 448
17.4.1 銷毀代幣 448
17.4.2 添加Token 449
17.4.3 凍結與解凍賬戶 449
17.4.4 買賣Token 450
17.4.5 小結 451
17.5 ERC20代幣擴展實例 451
17.5.1 初始化項目 451
17.5.2 添加三方庫契約 452
17.5.3 代幣契約的邏輯實現 460
17.5.4 代幣契約的部署 465

作者簡介

唐盛彬 就職於國內領先的手機遊戲平台當樂網(d.cn),主要負責當樂遊戲中心App平台的SDK及區塊鏈遊戲眾籌平台DOGI.IO的智慧型契約開發工作。熟悉以太坊,對以太坊底層原理和相關協定有較為深入的研究;熟悉以太坊智慧型契約開發的核心技術與常用工具,如Solidity語言、web3.js、Truffle和Geth等;對使用Solidity語言進行以太坊智慧型契約開發有豐富的實戰經驗,特別是在眾籌和代幣開發等相關領域。

熱門詞條

聯絡我們