區塊鏈智能合約開發實戰

江海、於洪偉、吳書博、孫劼、尹鈞

  • 出版商: 清華大學
  • 出版日期: 2024-03-01
  • 定價: $354
  • 售價: 8.5$301
  • 語言: 簡體中文
  • ISBN: 7302652953
  • ISBN-13: 9787302652953
  • 相關分類: 區塊鏈 Blockchain
  • 下單後立即進貨 (約4週~6週)

  • 區塊鏈智能合約開發實戰-preview-1
  • 區塊鏈智能合約開發實戰-preview-2
  • 區塊鏈智能合約開發實戰-preview-3
區塊鏈智能合約開發實戰-preview-1

商品描述

智能合約是區塊鏈技術的重要組成部分,同時也是去中心化應用(DApp)開發過程中的核心。智能合約可以使用戶實現與區塊鏈的交互,執行用戶操作。本書分為8章,講解了以太坊和智能合約、搭建以太坊智能合約環境、Solidity基礎、Solidity高級用法、智能合約應用、智能合約安全、智能合約交互、智能合約開發框架等內容。本書致力於讓讀者在學會Solidity語法的同時,也能通過案例編碼練習提升編程能力。 本書適合作為高等院校區塊鏈、軟件工程相關專業的教材,也可作為有編程基礎或經驗的讀者、去中心化應用開發工程師的自學用書。

目錄大綱

第1章 以太坊和智能合約……………………………………………………………………1

   1.1 區塊鏈簡介及分類………………………………………………………………… 1

1.1.1 區塊鏈發展起源…………………………………………………………… 1

1.1.2 從0到1的比特幣系統…………………………………………………… 1

1.1.3 從比特幣到區塊鏈………………………………………………………… 3

1.1.4 區塊鏈簡介………………………………………………………………… 3

1.1.5 區塊鏈分類………………………………………………………………… 4

1.2 以太坊基礎………………………………………………………………………… 5

1.2.1 以太坊簡介………………………………………………………………… 5

1.2.2 以太坊發展歷史…………………………………………………………… 5

1.3 以太坊核心概念…………………………………………………………………… 6

1.3.1 以太坊……………………………………………………………………… 6

1.3.2 以太幣……………………………………………………………………… 6

1.3.3 Gas、Gas Price、Gas Fees………………………………………………… 7

1.3.4 以太坊虛擬機……………………………………………………………… 7

1.3.5 賬戶………………………………………………………………………… 8

1.3.6 交易………………………………………………………………………… 9

1.3.7 區塊……………………………………………………………………… 10

1.3.8 節點和客戶端…………………………………………………………… 10

1.3.9 共識機制………………………………………………………………… 12

1.4 智能合約與去中心化應用………………………………………………………… 14

1.4.1 智能合約………………………………………………………………… 14

1.4.2 去中心化應用…………………………………………………………… 14

1.4.3 去中心化應用的特點…………………………………………………… 14

1.5 比特幣與以太坊系統架構………………………………………………………… 15

1.5.1 比特幣系統架構………………………………………………………… 15

1.5.2 以太坊系統架構………………………………………………………… 16

本章小結………………………………………………………………………………… 17

能力自測………………………………………………………………………………… 17

第2章 搭建以太坊智能合約環境 ………………………………………………………… 18 

 2.1 以太坊公共網絡…………………………………………………………………… 18

2.1.1 以太坊主網絡…………………………………………………………… 18

2.1.2 以太坊測試網絡………………………………………………………… 18

2.1.3 Layer 2測試網絡……………………………………………………… 20

2.2 以太坊專用網絡…………………………………………………………………… 21

2.2.1 開發網絡………………………………………………………………… 21

2.2.2 聯盟鏈…………………………………………………………………… 22

2.3 以太坊客戶端……………………………………………………………………… 22

2.3.1 為什麽要有客戶端……………………………………………………… 22

2.3.2 安裝Geth客戶端……………………………………………………… 22

2.3.3 同步區塊………………………………………………………………… 24

2.3.4 數據存放目錄…………………………………………………………… 24

2.3.5 啟動節點………………………………………………………………… 24

2.4 啟動客戶端………………………………………………………………………… 24

2.4.1 啟動主網客戶端………………………………………………………… 24

2.4.2 啟動測試網絡客戶端…………………………………………………… 25

2.4.3 啟動客戶端的可選項配置……………………………………………… 25

2.5 搭建私有鏈………………………………………………………………………… 25

2.5.1 準備工作………………………………………………………………… 26

2.5.2 創建創世區塊配置文件………………………………………………… 26

2.5.3 初始化:將創世區塊信息寫入區塊鏈…………………………………… 27

2.5.4 啟動私有節點…………………………………………………………… 28

2.5.5 Geth的JavaScript控制台操作………………………………………… 29

2.6 搭建多節點私有鏈………………………………………………………………… 31

2.6.1 創建節點目錄…………………………………………………………… 32

2.6.2 分別初始化節點………………………………………………………… 32

2.6.3 啟動節點………………………………………………………………… 32

2.6.4 查看節點信息…………………………………………………………… 32

2.6.5 手動添加節點…………………………………………………………… 33

2.7 以太坊錢包………………………………………………………………………… 33

2.7.1 以太坊錢包的概念……………………………………………………… 33

2.7.2 錢包的分類……………………………………………………………… 34

2.7.3 錢包中的重要概念……………………………………………………… 35

2.8 MetaMask錢包…………………………………………………………………… 36

2.8.1 MetaMask簡介………………………………………………………… 36

2.8.2 MetaMask的安裝……………………………………………………… 36

2.8.3 創建新錢包……………………………………………………………… 36

2.8.4 連接不同的網絡………………………………………………………… 38

2.9 Solidity編程語言和開發工具…………………………………………………… 40

2.9.1 Solidity簡介…………………………………………………………… 40

2.9.2 Solidity程序結構和編程規範………………………………………… 41

2.9.3 智能合約開發工具Remix ……………………………………………… 42

2.9.4 智能合約部署和調用…………………………………………………… 43

本章小結………………………………………………………………………………… 43

能力自測………………………………………………………………………………… 44

第3章 Solidity基礎………………………………………………………………………… 45

3.1 值類型……………………………………………………………………………… 45

3.1.1 布爾型…………………………………………………………………… 45

3.1.2 整型……………………………………………………………………… 46

3.1.3 地址類型………………………………………………………………… 47

3.1.4 字節數組………………………………………………………………… 48

3.1.5 枚舉……………………………………………………………………… 49

3.2 函數………………………………………………………………………………… 50

3.2.1 函數的概念和定義……………………………………………………… 50

3.2.2 函數的可見性…………………………………………………………… 50

3.2.3 pure和view關鍵字…………………………………………………… 51

3.2.4 payable關鍵字…………………………………………………………… 53

3.2.5 函數的返回值…………………………………………………………… 53

3.3 引用類型…………………………………………………………………………… 54

3.3.1 數據存儲位置…………………………………………………………… 55

3.3.2 數據位置與賦值規則…………………………………………………… 56

3.3.3 數組……………………………………………………………………… 58

3.3.4 結構體…………………………………………………………………… 62

3.3.5 映射類型………………………………………………………………… 63

3.4 變量初始值和常量………………………………………………………………… 64

3.4.1 變量初始值……………………………………………………………… 65

3.4.2 delete操作符…………………………………………………………… 65

3.4.3 常量……………………………………………………………………… 66

3.5 流程控制…………………………………………………………………………… 67

3.5.1 條件語句………………………………………………………………… 67

3.5.2 循環語句………………………………………………………………… 69

3.5.3 中斷語句………………………………………………………………… 71

3.6 特殊函數…………………………………………………………………………… 73

3.6.1 構造函數………………………………………………………………… QE_肨麭_73

3.6.2 析構函數………………………………………………………………… 74

3.6.3 函數修改器……………………………………………………………… 74

3.6.4 常見內置函數…………………………………………………………… 75

3.7 事件………………………………………………………………………………… 76

3.7.1 事件的定義……………………………………………………………… 76

3.7.2 觸發事件………………………………………………………………… 76

3.8 繼承………………………………………………………………………………… 77

3.8.1 繼承……………………………………………………………………… 77

3.8.2 函數重寫………………………………………………………………… 78

3.8.3 多繼承…………………………………………………………………… 79

3.9 抽象合約…………………………………………………………………………… 79

3.10 接口……………………………………………………………………………… 80

3.10.1 接口的定義…………………………………………………………… 80

3.10.2 實現接口……………………………………………………………… 80

3.10.3 接口與抽象合約的區別……………………………………………… 81

3.11 錯誤處理………………………………………………………………………… 81

3.11.1 錯誤處理機制………………………………………………………… 81

3.11.2 require和assert……………………………………………………… 82

3.11.3 revert函數…………………………………………………………… 83

3.11.4 自定義error ………………………………………………………… 84

本章小結………………………………………………………………………………… 85

能力自測………………………………………………………………………………… 85

第4章 Solidity高級用法…………………………………………………………………… 86

4.1 函數重載…………………………………………………………………………… 86

4.1.1 函數重載的定義………………………………………………………… 86

4.1.2 實參匹配………………………………………………………………… 86

4.2 庫的使用…………………………………………………………………………… 87

4.2.1 庫的概念和定義………………………………………………………… 87

4.2.2 使用庫合約……………………………………………………………… 88

4.2.3 庫示例和OpenZeppelin………………………………………………… 88

4.3 導入並使用其他合約……………………………………………………………… 92

4.3.1 文件路徑導入…………………………………………………………… 92

4.3.2 URL導入………………………………………………………………… 93

4.3.3 安裝庫文件導入………………………………………………………… 94

4.4 接收以太幣………………………………………………………………………… 94

4.4.1 msg全局變量…………………………………………………………… 94

4.4.2 payable修飾符…………………………………………………………… 95

4.4.3 receive和fallback函數………………………………………………… 95

4.5 轉賬交易…………………………………………………………………………… 98

4.5.1 transfer函數…………………………………………………………… 98

4.5.2 send函數………………………………………………………………… 98

4.5.3 call函數………………………………………………………………… 98

4.6 合約間的交互……………………………………………………………………… 99

4.6.1 庫的缺點………………………………………………………………… 99

4.6.2 通過合約(接口)和地址創建合約引用………………………………… 100

4.6.3 使用call調用其他合約………………………………………………… 103

4.6.4 使用delegatecall調用其他合約……………………………………… 103

4.7 創建合約………………………………………………………………………… 105

4.7.1 CREATE操作碼……………………………………………………… 105

4.7.2 CREATE2操作碼……………………………………………………… 106

4.8 ABI ……………………………………………………………………………… 110

4.8.1 ABI簡介………………………………………………………………… 110

4.8.2 ABI的結構……………………………………………………………… 110

4.8.3 ABI編解碼……………………………………………………………… 113

4.9 字節碼…………………………………………………………………………… 114

4.10 哈希函數………………………………………………………………………… 114

4.10.1 哈希函數……………………………………………………………… 114

4.10.2 哈希函數的分類……………………………………………………… 115

4.10.3 Keccak算法的使用………………………………………………… 116

4.11 異常捕獲與處理………………………………………………………………… 117

本章小結………………………………………………………………………………… 119

能力自測………………………………………………………………………………… 119

第5章 智能合約應用……………………………………………………………………… 120

5.1 錢包應用………………………………………………………………………… 120

5.1.1 錢包合約程序…………………………………………………………… 120

5.1.2 多簽錢包合約…………………………………………………………… 122

5.2 ERC系列代幣…………………………………………………………………… 126

5.2.1 ERC簡介……………………………………………………………… 126

5.2.2 ERC20代幣…………………………………………………………… 127

5.2.3 ERC721代幣…………………………………………………………… 131

5.2.4 ERC1155代幣………………………………………………………… 141

5.3 默克爾樹及其應用……………………………………………………………… 152

5.3.1 默克爾樹簡介…………………………………………………………… 152

5.3.2 默克爾樹和默克爾證明………………………………………………… 153

5.3.3 默克爾樹的應用………………………………………………………… 155

本章小結………………………………………………………………………………… 160

能力自測………………………………………………………………………………… 160

第6章 智能合約安全……………………………………………………………………… 161

6.1 重放攻擊………………………………………………………………………… 161

6.1.1 重放攻擊原理…………………………………………………………… 161

6.1.2 事件回顧及分析………………………………………………………… 161

6.1.3 簡單重放攻擊保護提案………………………………………………… 162

6.1.4 防止重放攻擊…………………………………………………………… 162

6.2 重入攻擊………………………………………………………………………… 163

6.2.1 重入攻擊原理…………………………………………………………… 163

6.2.2 事件回顧及分析………………………………………………………… 163

6.2.3 解決思路………………………………………………………………… 165

6.3 整數溢出………………………………………………………………………… 165

6.3.1 整型溢出問題…………………………………………………………… 165

6.3.2 溢出漏洞事件分析……………………………………………………… 166

6.4 訪問控制………………………………………………………………………… 166

6.4.1 訪問控制………………………………………………………………… 166

6.4.2 漏洞分析………………………………………………………………… 167

6.4.3 訪問控制總結…………………………………………………………… 168

6.5 條件競爭………………………………………………………………………… 170

6.5.1 條件競爭概念…………………………………………………………… 170

6.5.2 分析和修復……………………………………………………………… 171

6.6 選擇器沖突……………………………………………………………………… 172

6.6.1 選擇器沖突概念………………………………………………………… 172

6.6.2 事件回顧分析…………………………………………………………… 173

6.7 短地址攻擊……………………………………………………………………… 175

6.7.1 短地址攻擊簡介………………………………………………………… 175

6.7.2 短地址攻擊防禦………………………………………………………… 176

本章小結………………………………………………………………………………… 176

能力自測………………………………………………………………………………… 177

第7章 智能合約交互……………………………………………………………………… 178

7.1 以太坊JavaScript庫及環境準備……………………………………………… 178

7.1.1 Node.js簡介…………………………………………………………… 179

7.1.2 Node.js環境安裝……………………………………………………… 179

7.1.3 Node.js程序示例……………………………………………………… 180

7.1.4 剖析package.json …………………………………………………… 181

7.1.5 npm使用介紹………………………………………………………… 183

7.2 Web3.js使用方法……………………………………………………………… 184

7.2.1 Web3.js簡介…………………………………………………………… 184

7.2.2 Web3.js安裝…………………………………………………………… 185

7.2.3 連接到以太坊節點……………………………………………………… 186

7.2.4 查看以太坊鏈上信息…………………………………………………… 188

7.2.5 Web3庫的API介紹…………………………………………………… 191

7.2.6 使用Web3編譯部署合約……………………………………………… 195

7.3 Ethers.js使用方法……………………………………………………………… 200

7.3.1 Ethers.js簡介………………………………………………………… 200

7.3.2 Ethers.js模塊及API介紹…………………………………………… 200

7.3.3 安裝Ethers.js庫……………………………………………………… 203

7.3.4 使用Ethers.js連接到本地節點……………………………………… 204

7.3.5 Ethers.js的基本使用方法…………………………………………… 205

本章小結………………………………………………………………………………… 208

能力自測………………………………………………………………………………… 208

第8章 智能合約開發框架………………………………………………………………… 209

8.1 框架的功能和舉例……………………………………………………………… 209

8.2 Truffle框架基礎………………………………………………………………… 210

8.2.1 Truffle簡介…………………………………………………………… 210

8.2.2 Truffle的構成及作用………………………………………………… 210

8.2.3 Truffle安裝…………………………………………………………… 210

8.2.4 Truffle命令…………………………………………………………… 211

8.2.5 使用Truffle創建項目………………………………………………… 211

8.2.6 truffle-config.js文件解析…………………………………………… 213

8.2.7 編譯部署合約…………………………………………………………… 215

8.3 Truffle框架進階………………………………………………………………… 217

8.3.1 控制台交互……………………………………………………………… 217

8.3.2 與合約交互……………………………………………………………… 217

8.4 Hardhat框架…………………………………………………………………… 220

8.4.1 Hardhat簡介…………………………………………………………… 220

8.4.2 安裝Hardhat ………………………………………………………… 221

8.4.3 創建智能合約應用……………………………………………………… 221

8.4.4 編寫智能合約程序……………………………………………………… 222

8.4.5 編寫測試合約…………………………………………………………… 224

8.4.6 編譯和部署合約………………………………………………………… 225

8.4.7 部署到指定網絡環境…………………………………………………… 227

本章小結………………………………………………………………………………… 228

能力自測………………………………………………………………………………… 229

附錄 本書教學資源………………………………………………………………………… 230

參考文獻……………………………………………………………………………………… 231