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