目錄
前言
第1章以太坊簡介1
11以太坊1
111不對稱加密體系2
112密碼學哈希函數(shù)4
113對稱點對點網絡4
114區(qū)塊鏈4
115以太坊虛擬機5
116節(jié)點5
117礦工5
118工作量證明6
119去中心化應用6
1110Solidity6
12智能合約6
13燃料7
131為什么需要燃料?8
132燃料組成8
14ether9
15賬戶9
16交易10
第2章預備知識11
21簡單的例子11
22工具準備12
221編程環(huán)境準備12
222編程工具準備16
223區(qū)塊鏈瀏覽器26
23測試環(huán)境26
231MetaMask訪問測試環(huán)境27
232測試環(huán)境領取測試用幣27
233開發(fā)時連接測試環(huán)境28
24以太坊源碼編譯29
第3章Solidity編程基礎31
31sol文件結構31
311編譯開關31
312引用其他源文件31
313注釋31
314合約32
315庫32
316接口33
32合約文件結構33
33變量類型33
331值類型34
332引用類型35
333字典/映射37
334特殊情況37
34操作符38
35語句39
351條件語句39
352循環(huán)語句40
353其他40
36修飾符40
361標準修飾符40
362自定義修飾符44
37數(shù)據(jù)位置46
38事件47
381智能合約返回值給用戶接口48
382異步的帶數(shù)據(jù)的觸發(fā)器49
383一種比較便宜的存儲49
384事件里的Indexed參數(shù)50
39繼承51
391單繼承51
392多重繼承51
310其他52
3101內置52
3102特殊單位54
3103類型轉換及推斷55
3104異常56
3105匯編56
第4章Solidity編程的高級話題59
41This關鍵字59
42ERC20標準接口59
421方法61
422事件62
423OpenZepplin框架62
43ERC721標準接口63
431ERC721接口定義63
432元數(shù)據(jù)擴展75
433可枚舉擴展77
434ERC165標準81
44合約間調用82
441函數(shù)調用82
442依賴注入84
443消息調用84
444獲取合約間調用的返回值88
45基礎算法90
46用Go與合約交互93
461創(chuàng)建項目93
462創(chuàng)建一個簡單的以太坊合約93
463用Go訪問以太坊合約94
464本地測試94
465連接到一個以太坊節(jié)點98
466為賬戶創(chuàng)建加密的JSON鑰匙98
467最后驗證98
第5章ABI接口102
51內存結構102
52函數(shù)選擇子102
53類型的定義102
54EVM里的數(shù)據(jù)表示103
541固定長度數(shù)據(jù)類型的表示104
542動態(tài)長度數(shù)據(jù)類型的表示105
55編碼108
551簡單的例子108
552外部調用例子109
553外部方法調用的ABI編碼112
56基于ABI的編程116
第6章智能合約運行原理118
61設計模式118
611合約自毀118
612工廠合約模式119
613名字登錄120
614映射迭代121
615撤出模式122
62省燃料122
621注意數(shù)據(jù)類型123
622以字節(jié)編碼的形式存儲值123
623利用SOLC編譯器壓縮變量123
624使用匯編代碼壓縮變量124
625合并函數(shù)參數(shù)125
626使用默克爾樹證明減少存儲成本125
627無狀態(tài)的合約127
628在IPFS上存儲數(shù)據(jù)127
629位壓縮127
6210批處理128
6211Storage結構類型讀寫分離129
6212uint256和直接內存存儲130
6213匯編代碼優(yōu)化130
63匯編代碼130
631棧131
632調用數(shù)據(jù)131
633內存132
634存儲133
64解構智能合約134
641合約創(chuàng)建138
642合約本體通用部分141
643合約本體特定代碼145
第7章可升級的合約147
71方法147
711代理合約147
712分離邏輯和數(shù)據(jù)147
713通過鍵值對來分離數(shù)據(jù)和邏輯147
714部分升級148
715比較148
716簡單的代理合約例子148
72通用的代理模式150
73Storage154
731繼承存儲154
732永久存儲154
733非結構化存儲155
74Augur156
741合約部署156
742存儲部署157
75Colony158
751存儲部署158
752合約部署159
76總結159
第8章編寫安全的合約161
81以太坊已知常見漏洞 161
811上溢和下溢161
812Solidity可見性修飾符的差別165
813重入問題166
814出乎意料的ether操作170
815代理調用174
816默認可見性修飾符178
817熵隨機源180
818外部合約引用180
819短地址/參數(shù)攻擊184
8110未驗證的CALL返回值185
8111競爭條件186
8112阻塞攻擊188
8113操縱塊時間戳190
8114謹慎使用構造函數(shù)191
8115未初始化的存儲指針192
8116浮點數(shù)精度193
8117交易授權194
82以太坊一些奇怪的特性195
821沒有Key的ether195
822一次性地址197
823一個交易的空投197
83以太坊智能合約——最佳安全開發(fā)指南198
831盡早且明確的暴露問題198
832在支付時使用(pull)模式而不是(push)模式199
833函數(shù)代碼的順序:條件,行為,交互200
834留意平臺局限性201
835測試用例203
836容錯及自動b