目 錄
第1章 區(qū)塊鏈基礎知識準備 1
1.1 認識區(qū)塊鏈 1
1.1.1 區(qū)塊鏈的概念 1
1.1.2 鏈的分類 2
1.1.3 區(qū)塊鏈能做什么 3
1.2 共識的作用 3
1.3 常見的共識算法 4
1.3.1 PoW算法 5
1.3.2 PoS算法 7
1.3.3 DPoS算法 8
1.3.4 共識算法的編碼嘗試 9
1.4 鏈的分叉 14
1.4.1 軟分叉 16
1.4.2 硬分叉 18
1.4.3 常見的分叉情況 18
1.4.4 PoW共識機制的51%算力攻擊 20
1.5 小結 22
第2章 以太坊基礎知識準備 23
2.1 什么是以太坊 23
2.2 以太坊的架構 24
2.3 什么是DApp 26
2.3.1 DApp概述 26
2.3.2 以太坊上的DApp 28
2.4 區(qū)塊的組成 29
2.4.1 區(qū)塊的定義 29
2.4.2 以太坊地址(錢包地址) 31
2.4.3 Nonce的作用 33
2.4.4 燃料費 34
2.4.5 GasUsed的計算 35
2.4.6 叔塊 38
2.4.7 挖礦獎勵 40
2.5 賬戶模型 42
2.5.1 比特幣UTXO模型 43
2.5.2 Trie樹 45
2.5.3 Patricia Trie樹 47
2.5.4 默克爾樹(Merkle Tree) 47
2.5.5 以太坊MPT樹 50
2.5.6 MPT樹節(jié)點存儲到數據庫 53
2.5.7 組建一棵MPT樹 54
2.5.8 MPT樹如何體現默克爾樹的驗證特點 57
2.5.9 以太坊錢包地址存儲余額的方式 57
2.5.10 余額查詢的區(qū)塊隔離性 58
2.5.11 余額的查詢順序 58
2.5.12 UTXO模型和Account模型的對比 59
2.6 以太坊的版本演變 60
2.6.1 以太坊與PoW共識機制 60
2.6.2 君士坦丁堡 60
2.7 以太坊Ghost協(xié)議 61
2.8 Casper:PoS的變種共識機制 62
2.8.1 如何成為驗證人 63
2.8.2 驗證人如何獲取保證金 63
2.8.3 候選區(qū)塊的產生 64
2.8.4 勝出區(qū)塊的判斷 64
2.9 智能合約 64
2.9.1 簡介與作用 64
2.9.2 合約標準 66
2.10 以太坊交易 75
2.10.1 交易的發(fā)起者、類型及發(fā)起交易的函數 75
2.10.2 交易和智能合約的關系 76
2.10.3 交易參數的說明 77
2.10.4 交易方法的真實含義 79
2.10.5 交易的狀態(tài) 80
2.10.6 交易被打包 82
2.11 “代幣”余額 83
2.12 以太坊瀏覽器 84
2.12.1 區(qū)塊鏈瀏覽器訪問合約函數 86
2.12.2 區(qū)塊鏈瀏覽器查看交易記錄 89
2.12.3 非ETH交易記錄不能作為資產轉賬成功的依據 90
2.12.4 區(qū)塊鏈瀏覽器查看智能合約的代碼 91
2.13 以太坊零地址 94
2.13.1 零地址的交易轉出假象 94
2.13.2 零地址的意義 96
2.14 小結 97
第3章 智能合約的編寫、發(fā)布和調用 98
3.1 智能合約與以太坊DApp 98
3.2 認識Remix 99
3.3 實現加法程序 101
3.4 實現ERC20代幣智能合約 103
3.4.1 定義標準變量 103
3.4.2 事件與構造函數 103
3.4.3 Solidity的常見關鍵字 104
3.4.4 授權與余額 105
3.4.5 轉賬函數 106
3.4.6 合約的代碼安全 109
3.5 鏈上的合約 110
3.6 認識Mist 111
3.6.1 節(jié)點的切換 112
3.6.2 區(qū)塊的同步方式 113
3.7 創(chuàng)建以太坊錢包 113
3.8 使用Mist轉賬代幣 116
3.9 使用Mist發(fā)布智能合約 119
3.9.1 合約Solidity源碼 121
3.9.2 認識“ABI” 122
3.9.3 提取ABI和Bytecode 124
3.9.4 使用Bytecode發(fā)布合約 125
3.9.5 使用合約的函數 128
3.10 小結 130
第4章 實現以太坊中繼——基礎接口 131
4.1 認識以太坊中繼 131
4.2 區(qū)塊遍歷 132
4.3 RPC接口 134
4.4 以太坊接口 135
4.4.1 重要接口詳解 136
4.4.2 節(jié)點鏈接 141
4.4.3 獲取鏈接 141
4.4.4 進行測試 144
4.4.5 獲取測試幣 147
4.5 項目準備 148
4.6 創(chuàng)建項目 151
4.7 第一個Go程序 154
4.8 封裝“RPC”客戶端 156
4.8.1 下載依賴庫 156
4.8.2 編寫“RPC”客戶端 158
4.8.3 單元測試 161
4.9 編寫訪問接口代碼 162
4.9.1 認識“Call”函數 163
4.9.2 查找請求的參數 164
4.9.3 實現獲取交易信息 166
4.9.4 認識“BatchCall”函數 170
4.9.5 批量獲取交易信息 171
4.9.6 批量獲取代幣余額 173
4.9.7 獲取最新區(qū)塊號 179
4.9.8 根據區(qū)塊號獲取區(qū)塊信息 181
4.9.9 根據區(qū)塊哈希值獲取區(qū)塊信息 184
4.9.10 使用“eth_call”訪問智能合約函數 186
第5章 實現以太坊中繼——應用 191
5.1 創(chuàng)建以太坊錢包 191
5.1.1 以太坊錢包術語 192
5.1.2 創(chuàng)建錢包 194
5.2 實現以太坊交易 197
5.2.1 以太坊交易的原理 197
5.2.2 以太坊ETH的交易 206
5.3 區(qū)塊事件監(jiān)聽 224
5.3.1 創(chuàng)建數據庫 225
5.3.2 實現數據庫的連接器 226
5.3.3 生成數據表 230
5.3.4 區(qū)塊遍歷器 232
5.3.5 理解監(jiān)聽區(qū)塊事件 246
5.4 小結 247
后記 248