Solidity 智能合約開發技術與實戰

李曉黎

  • Solidity 智能合約開發技術與實戰-preview-1
  • Solidity 智能合約開發技術與實戰-preview-2
Solidity 智能合約開發技術與實戰-preview-1

買這商品的人也買了...

商品描述

在區塊鏈發展歷程中,以太坊的誕生具有里程碑式的意義。本書介紹使用Solidity開發以太坊智能合約DApp的方法,內容涵蓋Solidity的基本語法,使用開發框架Truffle開發、部署、測試以太坊DApp的方法,通過以太坊測試網絡進行交易的方法,開發安全智能合約所應遵守的規範和對智能合約進行安全審計的方法等。讀者在閱讀本書時可以充分瞭解和體驗以太坊智能合約的強大功能,以及使用Solidity開發以太坊智能合約DApp的便利。

本書可作為高等院校電腦、軟件工程、大數據、人工智能等專業相關課程的教材,也可供區塊鏈應用程序開發人員參考使用。

作者簡介

李晓黎:

软件开发工程师,毕业于吉林大学计算机系;自2006年以来,带领团队一直从事网络管理软件、企业ERP系统和电商平台等的开发与建设工作,具有中国投资银行、国家开发银行、中信银行等多家银行从业经历,参与银行信息化建设、网银平台开发、智能合约设计与开发工作多年,在系统软件开发、团队组织管理和系统架构设计等领域积累了丰富的实战经验。

目錄大綱

【章名目錄】

第 1章 區塊鏈技術基礎

第 2章 以太坊區塊鏈

第3章 Solidity編程基礎

第4章 常用語句

第5章 智能合約與函數

第6章 以太坊JavaScript API——Web3.js

第7章 事件與日誌

第8章 以太坊DApp開發框架Truffle

第9章 以太坊測試網絡

第 10章 編寫安全的智能合約

 

【詳細目錄】

第 1章 區塊鏈技術基礎

1.1 從比特幣說起 1

1.1.1 比特幣的發展歷程 1

1.1.2 什麽是比特幣系統 2

1.1.3 共識算法和比特幣的挖礦 7

1.1.4 雙花問題 10

1.1.5 區塊鏈技術賦予比特幣“價值” 13

1.2 區塊鏈的工作原理及底層技術 15

1.2.1 分佈式系統的概念 15

1.2.2 區塊鏈的架構設計 15

1.2.3 加密算法 17

1.2.4 區塊鏈的分類 19

1.2.5 區塊鏈為什麽會成為國家戰略 19

1.2.6 區塊鏈技術的發展歷程 21

1.2.7 智能合約 22

1.2.8 區塊鏈的編程語言 23

1.3 本章小結 24

習題 24

 

第2章 以太坊區塊鏈

2.1 以太坊的發展歷程與特色 25

2.1.1 以太坊的誕生與發展 25

2.1.2 以太坊與比特幣系統的對比 27

2.2 以太坊的工作原理 28

2.2.1 以太坊節點 28

2.2.2 以太坊的狀態機 28

2.2.3 以太坊網絡的總體架構 29

2.2.4 DApp 31

2.2.5 DApp瀏覽器 32

2.2.6 以太坊的數據結構與存儲方式 33

2.2.7 以太坊的分叉 36

2.2.8 Gas和以太幣 36

2.2.9 以太坊賬戶、錢包和交易 38

2.2.10 以太坊的PoS共識算法 38

2.3 搭建以太坊私有鏈 39

2.3.1 搭建測試環境 39

2.3.2 安裝以太坊客戶端Geth 46

2.3.3 初始化創世區塊 49

2.3.4 創建開發者賬戶 50

2.3.5 以開發者模式啟動私有鏈 51

2.3.6 私有鏈賬戶管理 51

2.3.7 在私有鏈中挖礦 53

2.3.8 轉賬操作 54

2.4 本章小結 55

習題 55

 

第3章 Solidity編程基礎

3.1 Solidity的第 一個示例程序 57

3.1.1 實時在線Solidity編輯器Remix 57

3.1.2 Solidity Hello World程序 58

3.1.3 使用Visual Studio Code開發Solidity程序 61

3.2 常量和變量 63

3.2.1 常量 63

3.2.2 變量 64

3.3 基本數據類型 66

3.3.1 字符串型 66

3.3.2 整型 68

3.3.3 定長浮點型 69

3.3.4 布爾類型 69

3.3.5 地址類型 70

3.3.6 合約類型 72

3.4 復合數據類型 72

3.4.1 枚舉類型 72

3.4.2 結構體 73

3.4.3 映射 74

3.4.4 數組 75

3.5 本章小結 77

習題 77

 

第4章 常用語句

4.1 賦值語句 79

4.2 分支語句 80

4.2.1 if語句 80

4.2.2 if…else if…else…語句 81

4.3 循環語句 82

4.3.1 for語句 82

4.3.2 while語句 83

4.3.3 do…while…語句 84

4.4 本章小結 85

習題 86

 

第5章 智能合約與函數

5.1 智能合約編程基礎 87

5.1.1 狀態變量的可見性 87

5.1.2 智能合約的構造函數 90

5.1.3 智能合約之間的繼承 91

5.2 函數編程基礎 92

5.2.1 定義函數 92

5.2.2 函數修飾符 93

5.2.3 函數的參數 97

5.3 函數的高級應用 98

5.3.1 自毀函數 98

5.3.2 內置函數 99

5.3.3 函數重載 100

5.4 外部函數 101

5.4.1 導入外部函數 101

5.4.2 函數庫 102

5.4.3 Fallback函數 103

5.5 抽象合約、接口和繼承 106

5.5.1 抽象合約 106

5.5.2 接口 107

5.5.3 繼承 107

5.6 異常處理函數 108

5.6.1 assert() 函數 108

5.6.2 require() 函數 109

5.6.3 revert() 函數 109

5.7 本章小結 110

習題 110

 

第6章 以太坊JavaScript API——Web3.js

6.1 Web3.js概述 111

6.1.1 什麽是Web3.js 111

6.1.2 安裝Web3.js 111

6.1.3 第 一個Web3.js的小實例 113

6.1.4 在網頁中使用Web3.js 114

6.1.5 本章實例的執行環境 115

6.1.6 JavaScript Promise對象 115

6.2 區塊編程 117

6.2.1 標識區塊 117

6.2.2 獲取當前區塊編號 118

6.2.3 獲取默認區塊編號 119

6.2.4 獲取指定區塊詳情 119

6.2.5 獲取指定叔區塊 120

6.3 以太坊賬戶與交易編程 120

6.3.1 獲取賬戶列表 120

6.3.2 默認賬戶和幣基賬戶 121

6.3.3 獲取賬戶餘額 122

6.3.4 獲取指定區塊中的交易數量 123

6.3.5 獲取指定區塊中的交易詳情 125

6.3.6 根據交易哈希獲取交易對象 126

6.3.7 獲取交易的收據對象 127

6.3.8 向以太坊網絡提交交易 129

6.3.9 估算交易的Gas用量 131

6.4 智能合約編程基礎 132

6.4.1 以太坊智能合約的ABI 132

6.4.2 以太坊智能合約的字節碼 135

6.4.3 在Visual Studio Code中生成智能合約的 ABI和字節碼 140

6.4.4 JSON-RPC 141

6.5 在Web3.js中與智能合約進行交互 148

6.5.1 創建合約對象 148

6.5.2 調用合約函數 151

6.6 Web3.js開發實例:“明日之星”在線投票 155

6.6.1 編寫投票智能合約 155

6.6.2 部署和測試投票智能合約 157

6.7 本章小結 167

習題 167

 

第7章 事件與日誌

7.1 事件 169

7.1.1 事件模型 169

7.1.2 定義和觸發事件 170

7.1.3 在Web3.js中監聽事件 170

7.2 日誌 176

7.2.1 在Remix中查看日誌數據 176

7.2.2 底層日誌接口 177

7.2.3 檢索日誌 179

7.3 本章小結 180

習題 181

 

第8章 以太坊DApp開發框架Truffle

8.1 Truffle開發框架概述 182

8.1.1 Truffle開發框架的基本特性 182

8.1.2 安裝Truffle開發框架 182

8.1.3 選擇以太坊客戶端 183

8.1.4 個人區塊鏈Ganache 183

8.2 Truffle項目管理 185

8.2.1 創建項目 185

8.2.2 配置Truffle項目 188

8.2.3 編譯合約 189

8.2.4 部署合約 190

8.3 智能合約編程 193

8.3.1 與合約進行交互 193

8.3.2 Truffle Develop 198

8.3.3 Truffle框架與智能合約MetaCoin交互的前端應用示例 200

8.3.4 在Truffle框架中使用MetaMask 205

8.3.5 使用Truffle react項目模板開發基於以太坊智能合約的DApp 211

8.4 測試合約 221

8.4.1 Mocha測試框架簡介 221

8.4.2 使用JavaScript編寫測試腳本 223

8.4.3 使用Solidity編寫測試腳本 224

8.5 Truffle示例項目寵物商店pet-shop 226

8.5.1 創建pet-shop項目 226

8.5.2 編寫智能合約 226

8.5.3 編譯和部署智能合約 227

8.5.4 開發前端應用 227

8.5.5 安裝並配置MetaMask錢包 231

8.5.6 運行應用程序 232

8.6 本章小結 234

習題 234

 

第9章 以太坊測試網絡

9.1 主網絡和測試網絡 236

9.1.1 以太坊測試網絡概述 236

9.1.2 獲取測試幣 237

9.2 通過Infura節點集群連接以太坊網絡 238

9.2.1 註冊Infura賬戶 238

9.2.2 通過Infura連接以太坊網絡 238

9.2.3 項目ID和項目密鑰 241

9.2.4 白名單 243

9.2.5 部署智能合約到Ropsten網絡 243

9.3 在測試網絡中基於Web3.js完成以太坊交易 245

9.3.1 以太坊交易的過程 245

9.3.2 使用ethereumjs-tx實現與以太坊的交易 246

9.3.3 完整的交易實例 249

9.4 本章小結 252

習題 252

 

第 10章 編寫安全的智能合約

10.1 以太坊智能合約安全設計的基本原則 253

10.1.1 需要遵循的安全理念 253

10.1.2 從軟件工程技術角度規避風險 256

10.1.3 開發文檔 263

10.1.4 關於報錯賞金 264

10.2 常見的針對智能合約的攻擊 265

10.2.1 重入問題 265

10.2.2 搶先交易 268

10.2.3 強制發送以太幣到智能合約 269

10.3 智能合約開發過程中的安全建議 269

10.3.1 關於以太坊智能合約系統開發的建議 270

10.3.2 Solidity的安全問題 271

10.4 智能合約的安全審計 274

10.4.1 如何對智能合約進行審計 274

10.4.2 一個審計報告的例子 275

10.4.3 使用Mythril分析Solidity智能合約的安全漏洞 282

10.5 本章小結 287

習題 287