本書從零開始介紹Solidity程序開發(fā),從Solidity語(yǔ)言中基礎(chǔ)的關(guān)鍵字和語(yǔ)句開始介紹,逐步深入到高級(jí)應(yīng)用,包括設(shè)計(jì)模式、合約可升級(jí)的設(shè)計(jì)、合約的安全性問題及對(duì)策等,并結(jié)合EVM的實(shí)現(xiàn),討論Solidity語(yǔ)句的匯編實(shí)現(xiàn);對(duì)一些原理的講解,提供了相對(duì)應(yīng)的實(shí)例,以期更易于理解原理的實(shí)現(xiàn)機(jī)理;同時(shí),對(duì)Solidity應(yīng)用于DApp開發(fā),及使用區(qū)塊鏈上的去中心化存儲(chǔ)(IPFS)也有詳細(xì)的介紹。
本書可作為對(duì)區(qū)塊鏈感興趣的程序開發(fā)人員、高校師生等的參考書,也可作為相關(guān)課程的培訓(xùn)教材。
目錄
前言
第1章以太坊簡(jiǎn)介1
11以太坊1
111不對(duì)稱加密體系2
112密碼學(xué)哈希函數(shù)4
113對(duì)稱點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)4
114區(qū)塊鏈4
115以太坊虛擬機(jī)5
116節(jié)點(diǎn)5
117礦工5
118工作量證明6
119去中心化應(yīng)用6
1110Solidity6
12智能合約6
13燃料7
131為什么需要燃料?8
132燃料組成8
14ether9
15賬戶9
16交易10
第2章預(yù)備知識(shí)11
21簡(jiǎn)單的例子11
22工具準(zhǔn)備12
221編程環(huán)境準(zhǔn)備12
222編程工具準(zhǔn)備16
223區(qū)塊鏈瀏覽器26
23測(cè)試環(huán)境26
231MetaMask訪問測(cè)試環(huán)境27
232測(cè)試環(huán)境領(lǐng)取測(cè)試用幣27
233開發(fā)時(shí)連接測(cè)試環(huán)境28
24以太坊源碼編譯29
第3章Solidity編程基礎(chǔ)31
31sol文件結(jié)構(gòu)31
311編譯開關(guān)31
312引用其他源文件31
313注釋31
314合約32
315庫(kù)32
316接口33
32合約文件結(jié)構(gòu)33
33變量類型33
331值類型34
332引用類型35
333字典/映射37
334特殊情況37
34操作符38
35語(yǔ)句39
351條件語(yǔ)句39
352循環(huán)語(yǔ)句40
353其他40
36修飾符40
361標(biāo)準(zhǔn)修飾符40
362自定義修飾符44
37數(shù)據(jù)位置46
38事件47
381智能合約返回值給用戶接口48
382異步的帶數(shù)據(jù)的觸發(fā)器49
383一種比較便宜的存儲(chǔ)49
384事件里的Indexed參數(shù)50
39繼承51
391單繼承51
392多重繼承51
310其他52
3101內(nèi)置52
3102特殊單位54
3103類型轉(zhuǎn)換及推斷55
3104異常56
3105匯編56
第4章Solidity編程的高級(jí)話題59
41This關(guān)鍵字59
42ERC20標(biāo)準(zhǔn)接口59
421方法61
422事件62
423OpenZepplin框架62
43ERC721標(biāo)準(zhǔn)接口63
431ERC721接口定義63
432元數(shù)據(jù)擴(kuò)展75
433可枚舉擴(kuò)展77
434ERC165標(biāo)準(zhǔn)81
44合約間調(diào)用82
441函數(shù)調(diào)用82
442依賴注入84
443消息調(diào)用84
444獲取合約間調(diào)用的返回值88
45基礎(chǔ)算法90
46用Go與合約交互93
461創(chuàng)建項(xiàng)目93
462創(chuàng)建一個(gè)簡(jiǎn)單的以太坊合約93
463用Go訪問以太坊合約94
464本地測(cè)試94
465連接到一個(gè)以太坊節(jié)點(diǎn)98
466為賬戶創(chuàng)建加密的JSON鑰匙98
467最后驗(yàn)證98
第5章ABI接口102
51內(nèi)存結(jié)構(gòu)102
52函數(shù)選擇子102
53類型的定義102
54EVM里的數(shù)據(jù)表示103
541固定長(zhǎng)度數(shù)據(jù)類型的表示104
542動(dòng)態(tài)長(zhǎng)度數(shù)據(jù)類型的表示105
55編碼108
551簡(jiǎn)單的例子108
552外部調(diào)用例子109
553外部方法調(diào)用的ABI編碼112
56基于ABI的編程116
第6章智能合約運(yùn)行原理118
61設(shè)計(jì)模式118
611合約自毀118
612工廠合約模式119
613名字登錄120
614映射迭代121
615撤出模式122
62省燃料122
621注意數(shù)據(jù)類型123
622以字節(jié)編碼的形式存儲(chǔ)值123
623利用SOLC編譯器壓縮變量123
624使用匯編代碼壓縮變量124
625合并函數(shù)參數(shù)125
626使用默克爾樹證明減少存儲(chǔ)成本125
627無狀態(tài)的合約127
628在IPFS上存儲(chǔ)數(shù)據(jù)127
629位壓縮127
6210批處理128
6211Storage結(jié)構(gòu)類型讀寫分離129
6212uint256和直接內(nèi)存存儲(chǔ)130
6213匯編代碼優(yōu)化130
63匯編代碼130
631棧131
632調(diào)用數(shù)據(jù)131
633內(nèi)存132
634存儲(chǔ)133
64解構(gòu)智能合約134
641合約創(chuàng)建138
642合約本體通用部分141
643合約本體特定代碼145
第7章可升級(jí)的合約147
71方法147
711代理合約147
712分離邏輯和數(shù)據(jù)147
713通過鍵值對(duì)來分離數(shù)據(jù)和邏輯147
714部分升級(jí)148
715比較148
716簡(jiǎn)單的代理合約例子148
72通用的代理模式150
73Storage154
731繼承存儲(chǔ)154
732永久存儲(chǔ)154
733非結(jié)構(gòu)化存儲(chǔ)155
74Augur156
741合約部署156
742存儲(chǔ)部署157
75Colony158
751存儲(chǔ)部署158
752合約部署159
76總結(jié)159
第8章編寫安全的合約161
81以太坊已知常見漏洞 161
811上溢和下溢161
812Solidity可見性修飾符的差別165
813重入問題166
814出乎意料的ether操作170
815代理調(diào)用174
816默認(rèn)可見性修飾符178
817熵隨機(jī)源180
818外部合約引用180
819短地址/參數(shù)攻擊184
8110未驗(yàn)證的CALL返回值185
8111競(jìng)爭(zhēng)條件186
8112阻塞攻擊188
8113操縱塊時(shí)間戳190
8114謹(jǐn)慎使用構(gòu)造函數(shù)191
8115未初始化的存儲(chǔ)指針192
8116浮點(diǎn)數(shù)精度193
8117交易授權(quán)194
82以太坊一些奇怪的特性195
821沒有Key的ether195
822一次性地址197
823一個(gè)交易的空投197
83以太坊智能合約——最佳安全開發(fā)指南198
831盡早且明確的暴露問題198
832在支付時(shí)使用(pull)模式而不是(push)模式199
833函數(shù)代碼的順序:條件,行為,交互200
834留意平臺(tái)局限性201
835測(cè)試用例203
836容錯(cuò)及自動(dòng)bug獎(jiǎng)勵(lì)203
837限制可存入的資金205
838簡(jiǎn)單和模塊化的代碼206
839不要從0開始寫所有的代碼206
84代碼審計(jì)206
85總結(jié)207
第9章DApp開發(fā)208
91DApp的特點(diǎn)208
92DApp架構(gòu)211
921客戶端211
922服務(wù)器端212
923流程詳解214
93以太坊DApp217
931環(huán)境準(zhǔn)備218
932項(xiàng)目218
933智能合約Solidity編程219
934項(xiàng)目部署224
94IPFS DApp225
941環(huán)境準(zhǔn)備225
942項(xiàng)目225
943編譯運(yùn)行230
第10章調(diào)試231
101編程語(yǔ)言231
1011事件231
1012Assert/Require語(yǔ)句236
1013測(cè)試案例237
102Testrpc/Ganache測(cè)試環(huán)境239
103Truffle Debugger241
1031調(diào)試界面241
1032增加和刪除斷點(diǎn)242
1033如何調(diào)試交易243
1034調(diào)試一個(gè)食物購(gòu)物車的合約243
104Remix調(diào)試251
105其他工具254
1051JEB254
1052Prosity254
1053Binary Ninja255
參考文獻(xiàn)257