內(nèi)容簡介
這是一本從原理和實踐兩個層面系統(tǒng)、深入講解以太坊技術的專著,從設計理念、技術架構、共識算法、智能合約、以太坊虛擬機、開發(fā)工具、DApp開發(fā)、企業(yè)以太坊解決方案、跨鏈技術等近10個方面進行了詳細講解,既適合初學者系統(tǒng)學習以太坊的原理和應用開發(fā),又適合有一定基礎的開發(fā)者深入掌握以太坊的底層運行機制。
全書一共11章:
第1~3章對以太坊的系統(tǒng)架構、設計理念和技術架構進行了系統(tǒng)介紹,包括以太坊項目的起源和發(fā)展路線圖、核心技術、共識問題、圖靈完備性、整體設計思路和各模塊的核心功能實現(xiàn)等核心內(nèi)容。
第4章深入剖析了PoW、PoA、PoS等共識算法的適用場景、設計思想、技術實現(xiàn)和優(yōu)缺點。
第5~7章圍繞智能合約展開,系統(tǒng)講解了智能合約語言Solidity、智能合約應用開發(fā)、智能合約運行原理和實現(xiàn)細節(jié),以及以太坊虛擬機的運行原理和智能合約字節(jié)碼的解析等內(nèi)容。
第8章介紹了以太坊周邊的工具,教讀者如何在不開發(fā)代碼的情況下完成與以太坊網(wǎng)絡的交互。
第9章介紹了以太坊技術的企業(yè)級應用以及企業(yè)以太坊聯(lián)盟的標準化進展。
第10章對跨鏈技術和方案進行了方向性探討,雖然目前跨鏈技術還不成熟,但被視為后以太坊時代的區(qū)塊鏈技術熱點。
第11章分析了以太坊現(xiàn)階段面臨的發(fā)展瓶頸,并對可能的解決方案進行了展望。
(1)作者是中國以太坊企業(yè)聯(lián)盟的聯(lián)合發(fā)起人和核心成員,是中國區(qū)塊鏈和以太坊技術的早期布道者。(2)三位作者在中興、華為等大企業(yè)工作多年,有豐富的系統(tǒng)架構和軟件開發(fā)經(jīng)驗,技術功底深厚。(3)從設計理念、技術架構、共識算法、智能合約、DApp開發(fā)、以太坊虛擬機等近10個維度系統(tǒng)、深入講解以太坊。
2017年年初,IBM宣布在德國慕尼黑設立物聯(lián)網(wǎng)事業(yè)部,旨在圍繞區(qū)塊鏈、安全,通過Watson物聯(lián)網(wǎng)技術,從嵌在機器、汽車、無人駕駛飛機、滾珠軸承、設備部件甚至醫(yī)院中的數(shù)十億傳感器中獲取實時數(shù)據(jù),構建全新的物聯(lián)網(wǎng)。
身處物聯(lián)網(wǎng)行業(yè)的我,隱約感覺到區(qū)塊鏈將會成為新的研究方向,為傳統(tǒng)行業(yè)帶來新的助力。隨后,我查閱了大量相關資料,想盡可能多地了解區(qū)塊鏈。一個偶然的機會,我結識了南京一家區(qū)塊鏈初創(chuàng)公司的技術負責人,并受邀加入他們的團隊,開始全身心投入?yún)^(qū)塊鏈行業(yè)中。
我的初始工作圍繞以太坊開源項目展開,范圍包括白皮書、黃皮書、源碼、工具、共識算法、智能合約、雷電網(wǎng)絡、零知識證明等。短短幾個月的時間,我學習到的新知識比過去幾年加起來還要多。沒過幾個月,本書的另外兩位作者史欽鋒和程杰也加入團隊,并一起成立了以太坊技術研究小組。在大家的共同努力下,我們從理論到實踐,完整地總結出一套借助以太坊技術實現(xiàn)區(qū)塊鏈應用落地的技術方案。
一路走來,我們深深感受到區(qū)塊鏈理論涉及的概念之多,技術涉及的門類之廣。這對于一個初學者來說實屬不易。另外,一些不法分子利用區(qū)塊鏈技術創(chuàng)新之名,行招搖撞騙、擄掠錢財之實。作為相關從業(yè)人員,我們有能力,也有必要盡自己的微薄之力,將自己所學和心得體會用文字記錄下來,讓廣大的讀者客觀理性地認識這個新事物。如若讀者能就其中一兩點產(chǎn)生共鳴,激發(fā)創(chuàng)新、創(chuàng)造的熱情,那實在是意外的收獲。
本書僅僅針對以太坊開源項目。回想筆者的工作經(jīng)歷,雖然也接觸過其他項目,但總體比較來看,以太坊是最適合初學者入門的技術棧。因為以太坊技術社區(qū)在全球范圍最完善,參考資料多;以太坊核心團隊最具備極客精神,開發(fā)速度快;以太坊主網(wǎng)上線運行時間長,經(jīng)歷了最嚴苛的安全性檢驗;以太坊的目標最遠大,它要成為世界的計算機。
本書共分11章。書中不僅歸納總結了以太坊項目的整體現(xiàn)狀,也對未來的發(fā)展和技術走向進行了總體預測和分析。
第1章 從比特幣說起,談以太坊項目的起源,對項目整體情況做了概述。
第2章 從理論入手,介紹了以太坊知識體系的諸多概念,比如密碼學、共識和圖靈完備特性。
第3章 從架構入手,介紹了以太坊設計的整體思路、模塊劃分以及核心功能實現(xiàn)。
第4章 討論共識,共識是區(qū)塊鏈最核心的問題,共識的設計也是區(qū)塊鏈的難點所在。從PoW到PoA,再到PoS,我們比較了各種共識算法的優(yōu)缺點,也分析了不同算法的適用場景。
第5~7章 圍繞智能合約展開討論。智能合約是以太坊的最大創(chuàng)新點,它將區(qū)塊鏈變成了可以服務任何行業(yè)、任何場景的可編程平臺。從開發(fā)步驟、技術原理到底層實現(xiàn),覆蓋了智能合約軟件支持的方方面面。對于偏向區(qū)塊鏈技術應用的開發(fā)者,我們建議將學習重點放在第5章;對于偏向底層的區(qū)塊鏈協(xié)議開發(fā)者,相信第6、7章會帶給你不少收獲。
第8章 指導讀者熟練掌握以太坊周邊的工具,在不開發(fā)代碼的情況下,完成與以太坊網(wǎng)絡的交互。
第9章 介紹了以太坊技術的企業(yè)級應用以及企業(yè)以太坊聯(lián)盟的標準化進展。
第10章 對跨鏈方案進行了探討。由于目前跨鏈技術還不成熟,本章僅對大體的技術方向做了介紹?珂溡脖灰暈楹笠蕴粫r代的區(qū)塊鏈技術熱點,將引領區(qū)塊鏈3.0時代的到來。
第11章 分析了以太坊現(xiàn)階段面臨的發(fā)展瓶頸,并對可能的解決方案進行了展望。
本書內(nèi)容包羅萬象,有項目概述、架構設計、實現(xiàn)細節(jié)和開發(fā)方法,適合對區(qū)塊鏈理論和實現(xiàn)感興趣的讀者閱讀,也適合作為技術手冊,供讀者遇到具體問題時查閱參考。由于區(qū)塊鏈技術發(fā)展迅速,水平有限,書中難免存在錯誤或不當之處,希望得到廣大讀者的批評指正。后續(xù),我們將通過線上專欄(https://zhuanlan.zhihu.com/c_210509549)的方式,保持和讀者的溝通,并針對大家感興趣的話題進行討論。
感謝帶領我進入?yún)^(qū)塊鏈行業(yè)的技術大咖Denny,感謝曾經(jīng)一起工作的同事,也感謝為本書出版費盡心血的華章出版社的各位老師。在本書的編寫過程中,占用了很多陪伴家人的時間,但得到了家人充分的鼓勵與支持,深深地感謝他們。
王欣
作者介紹
王欣
前浙江華信區(qū)塊鏈技術總監(jiān),中國企業(yè)以太坊聯(lián)合發(fā)起人,對以太坊有非常深入的研究。
曾就職于愛立信和中興通訊,有10余年軟件架構和國際項目咨詢經(jīng)驗。目前專注于區(qū)塊鏈底層協(xié)議、智能合約安全以及隱私保護的研究。
史欽鋒
前浙江華信區(qū)塊鏈研究員,負責以太坊智能合約相關技術的研究和開發(fā),對以太坊底層技術原理、智能合約、跨鏈技術以及EOS等有非常深入的認識。
曾就職于中興通訊、華為和北京賽思信安等公司,精通C、Python和Go等多門語言,有多年通信產(chǎn)品底層驅動、通信網(wǎng)絡協(xié)議和后端核心業(yè)務開發(fā)經(jīng)驗。
程杰
資深區(qū)塊鏈技術專家和架構師,對以太坊、EOS等開源區(qū)塊鏈協(xié)議和各種共識算法有深入研究,負責DApp的整體軟件方案設計。
曾就職于世界500強企業(yè),有超過13年的軟件行業(yè)和通信行業(yè)的研發(fā)經(jīng)驗,熟悉大型分布式、微服務軟件架構、軟件設計模式相關技術,對基于云計算、區(qū)塊鏈、微服務和DevOps的軟件架構棧有豐富的實踐經(jīng)驗,對可落地的高并發(fā)、高可用的軟件系統(tǒng)有自己的見解。
前言
第1章 以太坊概述 1
1.1 區(qū)塊鏈起源 1
1.2 以太坊發(fā)展之路 3
1.3 以太坊核心技術 6
1.3.1 智能合約 6
1.3.2 PoS 7
1.4 以太坊系統(tǒng)架構 8
1.5 以太坊社區(qū) 9
1.6 以太坊路線圖 10
1.7 本章小結 11
第2章 設計理念 12
2.1 密碼學 13
2.1.1 Hash 13
2.1.2 橢圓曲線的加解密 18
2.1.3 簽名 20
2.1.4 Merkle樹和驗證 24
2.1.5 MPT狀態(tài)樹 24
2.2 共識問題 28
2.2.1 分布式一致性問題 28
2.2.2 Paxos 和Rfat 30
2.2.3 拜占庭容錯及PBFT 31
2.2.4 以太坊IBFT共識 33
2.2.5 PoW 35
2.2.6 Casper 36
2.2.7 以太坊性能 38
2.3 圖靈完備 40
2.3.1 比特幣腳本 41
2.3.2 EVM虛擬機 44
2.3.3 Gas機制 46
2.4 本章小結 49
第3章 技術架構 50
3.1 分層設計 51
3.1.1 應用層 51
3.1.2 合約層 54
3.1.3 激勵層 55
3.1.4 共識層 56
3.1.5 網(wǎng)絡層 59
3.1.6 數(shù)據(jù)層 60
3.2 數(shù)據(jù)結構設計 62
3.2.1 交易 62
3.2.2 狀態(tài)樹 65
3.2.3 區(qū)塊 67
3.2.4 區(qū)塊鏈 71
3.2.5 數(shù)據(jù)庫 72
3.3 P2P網(wǎng)絡 76
3.3.1 節(jié)點發(fā)現(xiàn) 76
3.3.2 節(jié)點管理 78
3.4 客戶端 84
3.4.1 RPC 85
3.4.2 web3 88
3.5 本章小結 89
第4章 共識算法 90
4.1 PoW 90
4.1.1 算法概述 90
4.1.2 設計實現(xiàn) 93
4.1.3 優(yōu)缺點分析 96
4.2 PoA 97
4.2.1 算法概述 97
4.2.2 設計實現(xiàn) 99
4.2.3 優(yōu)缺點分析 102
4.3 PoS 103
4.3.1 算法概述 103
4.3.2 優(yōu)缺點分析 111
4.4 本章小結 112
第5章 智能合約開發(fā) 113
5.1 智能合約的誕生 113
5.2 以太坊上的智能合約 114
5.2.1 以太坊智能合約概述 114
5.2.2 關于智能合約的理解誤區(qū) 114
5.2.3 合約賬戶 115
5.2.4 智能合約舉例 116
5.2.5 智能合約在以太坊上的運行流程 118
5.3 智能合約編程語言 119
5.4 智能合約應用開發(fā) 120
5.4.1 連接和訪問以太坊 120
5.4.2 以太坊集成開發(fā)環(huán)境remix 120
5.4.3 truffle 126
5.4.4 智能合約編譯器solc 129
5.5 solidity語法詳解 130
5.5.1 智能合約源文件 130
5.5.2 solidity數(shù)據(jù)類型 132
5.5.3 智能合約的內(nèi)建全局變量和函數(shù) 141
5.5.4 智能合約中的單位 143
5.5.5 solidity表達式和控制結構 144
5.5.6 函數(shù) 148
5.5.7 常量狀態(tài)變量 152
5.5.8 智能合約的事件 153
5.5.9 智能合約的繼承性 153
5.5.10 智能合約的創(chuàng)建 154
5.5.11 智能合約的銷毀 154
5.6 solidity編程規(guī)范 155
5.6.1 代碼布局 155
5.6.2 編碼約定 157
5.6.3 命名約定 159
5.7 本章小結 159
第6章 智能合約運行機制 160
6.1 調(diào)用智能合約函數(shù) 160
6.1.1 外部調(diào)用 161
6.1.2 內(nèi)部調(diào)用 162
6.2 以太坊ABI協(xié)議 163
6.2.1 ABI接口定義 164
6.2.2 函數(shù)選擇器 165
6.2.3 參數(shù)編碼 165
6.2.4 abi編碼舉例 166
6.3 交易的費用和計算 167
6.3.1 什么是Gas機制 167
6.3.2 為什么需要Gas機制 168
6.3.3 交易費用計算法方法 169
6.3.4 交易費用的組成 170
6.4 智能合約的事件 170
6.4.1 事件的存儲和解析 170
6.4.2 Logs的底層接口 173
6.4.3 事件的查詢 174
6.4.4 事件查詢過程 174
6.5 庫和鏈接原理 175
6.5.1 庫的定義 175
6.5.2 庫的使用 175
6.5.3 庫的連接 176
6.5.4 庫中的事件 176
6.6 智能合約元數(shù)據(jù) 177
6.7 智能合約安全性分析 179
6.7.1 智能合約中的陷阱 179
6.7.2 建議 182
6.7.3 案例分析:資金回退流程 183
6.8 智能合約和外界的通信 184
6.8.1 oracle介紹 184
6.8.2 oracle需要解決的問題 185
6.8.3 數(shù)據(jù)商店 185
6.9 智能合約的動態(tài)升級 185
6.9.1 solidity是一個受限的語言 185
6.9.2 動態(tài)升級的實現(xiàn) 186
6.10 智能合約的數(shù)據(jù)存儲 187
6.10.1 存儲 187
6.10.2 內(nèi)存 187
6.10.3 棧 188
6.11 本章小結 188
第7章 智能合約字節(jié)碼與匯編 189
7.1 智能合約匯編指令集 189
7.2 智能合約字節(jié)碼解析 192
7.3 狀態(tài)變量的存儲 196
7.3.1 普通狀態(tài)變量的存儲 196
7.3.2 動態(tài)數(shù)據(jù)的storage存儲 198
7.3.3 總結 201
7.4 solidity內(nèi)嵌匯編 201
7.4.1 內(nèi)嵌匯編指令 201
7.4.2 單獨使用匯編指令 203
7.5 本章小結 204
第8章 開發(fā)者工具 205
8.1 MetaMask 205
8.1.1 MetaMask安裝 205
8.1.2 MetaMask作為Web錢包 206
8.1.3 MetaMask作為DApp客戶端 207
8.2 以太坊測試網(wǎng)絡 209
8.2.1 Morden 209
8.2.2 Ropsten 210
8.2.3 Kovan 210
8.2.4 Rinkeby 211
8.2.5 本地以太坊私鏈 212
8.2.6 連接測試網(wǎng)絡 213
8.3 Remix 213
8.3.1 本地安裝Remix 213
8.3.2 在線Remix 214
8.4 truffle 217
8.4.1 安裝truffle 218
8.4.2 構建應用項目 218
8.4.3 demo合約實踐 220
8.4.4 智能合約測試和驗證 222
8.5 myetherwall