區塊鏈通俗讀本
內容描述
本書以區塊鏈科普內容為主,同時兼顧專業級別的實戰技能。
科普級別的內容旨在以妙趣橫生的手法向公眾普及區塊鏈知識,包括公共賬本的概念及記賬機制、
數據塊的“指紋”與“指針”、解答謎題證明工作量、區塊樹被剪枝成樹幹(鏈)、公有鏈的社會條件、
分蛋糕的“軍備競賽”、貨幣發行、賬戶與錢包、礦池與交易所、以太坊的機器人造“幣”(Token)、聯盟鏈的“減”與“加”,等等。
專業級別的內容旨在為區塊鏈技術從業者提供必要的理論知識、操作實踐和應用開發實例,
包括密碼學應用、共識算法、比特幣閃電網絡、以太坊工作原理、以太坊組網實踐、
Solidity語言、智能合約開發、以太坊DApp,以及如何將傳統的數據庫應用改造成區塊鏈應用,等等。
目錄大綱
目錄
第1章從這裡開始1
1.1改革1
1.2共識機制2
1.2.1記賬員的工作2
1.2.2審核員的工作2
1.2.3權威發布3
1. 3競爭機制4
1.3.1記賬與審核串行4
1.3.2記賬與審核並行5
1.4向“去中心化”邁進6
1.4.1神奇的“縮放機” 6
1.4.2隱性投票6
1.4.3改弦易轍8
1.5防篡改原理8
1.6去中心化10
1.6.1自動發放獎金10
1.6.2改革的“最後一公里” 10
1.7行為藝術11
1.8小結14
第2章“請簽名並按手印” 16
2.1密碼本16
說明:帶星號的內容為專業篇
2.2攪拌機16
2.2. 1 ASCII編碼17
2.2.2公開算法17
2.2.3信息攪拌18
2.2.4攪拌16次18
2.2.5加密與解密18
2.3非對稱密碼體系18
2.3. 1快!來不及了18
2.3.2 RSA三人首功19
2.3.3橢圓曲線密碼體系20
2.3.4加密與解密20
2.3.5數字簽名21
2.4哈希函數Hash 21
2.4.1消息摘要21
2.4.2數字指紋22
2.4.3數據塊的指針22
2.4.4基於Hash的數字簽名23
2.5小結24
2.6附:閒話Hash 24
2.6.1此哈希非彼哈希24
2.6.2碰撞,別發生26
2 .6.3碰撞,不會發生26
2.6.4妙用Hash 27
第3章下載那些事29
3.1服務器癱了29
3.2計數器廢了30
3.3 “縮放機”原理30
3. 4網上的“縮放機” 31
3.5過濾31
3.5.1降低一點兒標準32
3.5.2一個算法33
3.5.3對算法的優化33
3.5.4布隆過濾器34
3.5.5布隆過濾器效率優化35
3.5.6缺點及應對36
3.5.7應用舉例36
3.6公共賬本的副本37
3.7小結38
第4章物競天擇39
4.1運氣39
4.1.1公平悖論39
4.1.2射箭比賽40
4.2計算謎題40
4.2.1謎題(一) 40
4.2.2謎題(二) 41
4.2.3謎題(三) 41
4.3長枝生存42
4.3 .1挖礦43
4.3.2軟分叉43
4.3.3剪枝成乾44
4.3.4不被剪掉46
4.4工作量證明47
4.5小結48
第5章良序社會50
5.1社區假設50
5.2守規矩的記賬員53
5.2.1作為網絡節點53
5.2.2作為審計員54
5.2.3作為記賬員54
5.2. 4作為礦工54
5.3天下無惡55
5.3.1難度優先55
5.3.2惡者無利55
5.4且慢,且慢56
5.4.1 “雙花” 56
5.4. 2作惡的付款者57
5.4.3多次確認57
5.4.4何時發貨58
5.4.5連鎖交易59
5.4.6 “雙花”趣事60
5.5佈道者60
5.6小結61
第6章蛋糕之誘惑63
6.1分蛋糕63
6.1.1固定大小的蛋糕63
6.1.2 “備競賽” 64
6.1.3宣傳機器64
6.1.4偷懶驗證與私自挖礦65
6.2硬分叉66
6.2.1分裂66
6.2.2私有網絡環境67
6.2.3比特幣分叉大戰69
6.3 “無限”發幣71
6.3.1比特幣溢出72
6.3.2美鏈溢出72
6.4盜幣72
6.4 .1兩種“幣” 72
6.4.2分裂73
6.4.3攻擊74
6.4.4分叉之戰75
6.4.5兩難境地76
6.5小結77
6.6附:溢出原理77
6.7附:怪函數,隱問題79
第7章瘦身,瘦身81
7.1分體式區塊81
7.2梅克爾樹82
7.2.1梅克爾樹82
7 .2.2梅克爾樹的防篡改功能83
7.2.3殘梅克爾樹84
7.3區塊頭85
7.3.1區塊頭模板85
7.3.2挖礦86
7.4全節點與輕量節點87
7.4.1兩種驗證與兩類節點87
7.4.2全節點87
7.4.3輕量節點88
7.5小結89
第8章賬號與錢包91
8.1身份證明91
8.2賬號太長92
8.2.1用Hash函數壓縮92
8.2.2用大進製表示92
8.3地址93
8.3. 1 Base58Check 93
8.3.2二維碼地址94
8.3.3要一個漂亮的賬號94
8.4錢包95
8.4.1錢包不存錢95
8.4.2查詢餘額96
8.4 .3多個私鑰與多個錢包97
8.4.4私鑰及其表示形式97
8.5跟踪與隱私98
8.6小結99
8.7附:進制轉換100
8.8附:密鑰樹101
8.8.1分裂101
8.8.2關聯102
8.8.3公鑰樹(拓展公鑰) 102
8.8.4加強(拓展私鑰) 103
8.8.5訂規範104
8.8.6助記詞105
第9章UTXO交易模型107
9.1交易新觀念107
9.1.1交易成鏈107
9.1.2 “產幣”交易109
9.1. 3解鎖與上鎖109
9.1.4 IN與OUT 111
9.1.5腳本112
9.2交易與簽名112
9.2.1原始交易112
9.2.2簽名交易112
9.2.3合資交易113
9.2.4多簽交易114
9.2.5兩種地址115
9.2.6交易類型115
9.2.7共管賬戶116
9.3無塊之鍊116
9.3.1賬本的體系結構116
9.3.2交易鏈與區塊鏈的區別118
9. 4交易驗證118
9.4.1這筆交易是真的118
9.4.2這筆資金未花119
9.5交易的跟踪與反跟踪120
9.5.1熔舊與鑄新120
9. 5.2隱身人121
9.6存下證據121
9.6.1中本聰的嘲諷121
9.6.2證據在某時點之前122
9.6.3證據的精確時間123
9.7小結124
9.8附:借助本地數據庫124
9.8.1區塊的高度124
9.8.2判斷雙重支付125
9.9附:交易格式127
9.9.1幣基交易127
9. 9.2組合交易128
9.10附:腳本體系130
第10章聚與散132
10.1核心132
10.2礦池133
10.2.1擴展“幸運數” 133
10.2.2礦池的控制中心134
10.2.3算力合併的效果134
10.3交易所136
10.3 .1關聯136
10.3.2隔離138
10.3.3風險140
10.4小結141
第11章螢火與閃電142
11.1老闆與農民工模型142
11.1.1保證金142
11.1 .2鏈下交易系列144
11.1.3預約交易145
11.1.4損失風險146
11.2預約與撤銷146
11.2.1絕對時間146
11.2.2相對時間148
11.2. 3阻止與撤銷150
11.3兩賭徒模型151
11.3.1問題來了152
11.3.2共同基金152
11.3.3調整份額交易152
11.3.4 “螢火蟲” 153
11. 3.5開通與關閉通道155
11.3.6損失風險156
11.4借道156
11.4.1購“物” 157
11.4.2特殊的賭博157
11.4.3三賭徒模型158
11.4.4一串賭徒模型159
11.5小結161
11.6附:預約與撤銷(續) 162
11.6.1 RSMC交易及其阻止交易162
11.6.2 HTLC交易及其阻止交易165
11.6.3 HTLC與RSMC組合168
11.6.4組合交易的應用模型170
第12章鏈上機器人174
12.1賬戶及狀態174
12.1.1賬戶餘額174
12.1. 2世界狀態(一) 175
12.2智能合約機器人175
12.2.1圖靈兩難176
12.2.2 “機器人” 176
12.2.3機器人的小世界177
12.2.4世界狀態(二) 178
12.2.5別讓機器人累死179
12.2.6人類指使機器人180
12.2.7對機器人查賬181
12.2.8製造與安裝機器人182
12.3礦工的以太幣183
12.3.1競爭協議183
12.3.2挖礦獎勵184
12.3.3交易費184
12.3.4叔祖先區塊184
12.3.5 “助人獎”與“安撫獎” 185
12.4以太坊交易185
12.4.1交易發起人185
12.4.2交易結構186
12.5區塊結構187
12.5.1三棵樹187
12.5.2 Storage樹188
12.5.3區塊頭188
12.5.4區塊189
12.6其他特色190
12.6.1區塊大小190
12.6.2抵抗專用芯片191
12.7小結191
12.8附:MPT 192
12.8. 1簡介192
12.8.2先躺著192
12.8.3查增刪193
12.8.4 “站”起來195
12.8.5防篡改196
12.9附:RLP 198
12.9. 1 RLP簡介198
12.9.2表達單個字符198
12.9.3表達短字符串198
12.9.4表達長字符串199
12.9.5表達短列表200
12.9.6表達長列表201
12.9.7遞歸202
第13章公鏈上的“貨幣”發行203
13.1比特幣的發行203
13.1.1挖礦發行203
13.1.2控制總量203
13.1.3總量的耗損205
13.2利息發行205
13.3以太坊項目206
13.3.1眾籌比特幣206
13.3.2團隊的證明206
13.3.3出資者的證明207
13.4以太幣208
13. 5以太坊代幣209
13.5.1代幣存在哪兒209
13.5.2眾籌發行209
13.5.3代幣的特徵210
13.5.4多重簽名210
13.6 ICO 211
13. 7鏈上動物園212
13.7.1以太貓212
13.7.2非同質代幣212
13.8小結213
第14章聯盟“戀”鏈215
14.1聯盟鏈的特點215
14.1. 1聯盟鏈的建立215
14.1.2聯盟鏈的特點216
14.2減法217
14.2.1不需挖礦217
14.2.2不需原生幣217
14.2.3沒有分叉218
14.2.4不需要特殊的虛擬機218
14.2.5節點很少218
14.3加法219
14.3.1節點分工219
14.3.2多通道與多鏈219
14.3.3成員管理220
14.3.4驗證策略220
14.3.5配置區塊220
14.4變化221
14.4.1交易221
14.4.2區塊222
14.4.3 “樹”再沒必要222
14.5交易過程223
14.5.1世界狀態223
14.5.2 “算”與“記”分開223
14.5.3找“認可人” 224
14.5.4交易排序225
14.5 .5批量記賬226
14.6智能合約226
14.6.1智能合約的特徵226
14.6.2智能合約接口227
14.6.3鏈碼部署227
14.6.4鏈碼運行228
14 .7超級賬本229
14.7.1設計理念230
14.7.2網絡架構230
14.7.3證書管理232
14.7.4共識算法232
14.7.5數據存儲233
14.7. 6創建通道234
14.7.7創建區塊235
14.7.8系統鏈碼及系統鏈236
14.7.9 “讀”與“寫” 237
14.8小結237
14.9附:交易結構238
14.10附:再談速度240
14.10.1造塊速度的限制241
14.10.2公有鏈一定是一個慢系統242
14.10.3串行執行的限制242
14.11附:再談防篡改243
14.11.1三個階段的防篡改243
14.11.2防篡改與防偽245
14.12附:私有鏈245
第15章以太坊初級實踐247
15.1以太坊客戶端簡介247
15.1.1客戶端的種類247
15.1.2 Geth客戶端簡介247
15.1.3 Ethereum Wallet客戶端簡介248
15.1.4客戶端操作方式248
15.2參與以太坊公鏈249
15.2.1安裝Geth客戶端249
15.2.2安裝Ethereum Wallet客戶端250
15.2.3創建賬戶252
15.2.4接收以太幣253
15.2.5轉賬操作254
15.2.6挖礦255
15.2 .7瀏覽公鍊網絡狀態256
15.3搭建以太坊私有鏈257
15.3.1安裝Go語言258
15.3.2安裝Geth客戶端258
15.3.3初始化節點259
15.3.4啟動節點260
15.3.5創建賬戶261
15.3.6挖礦262
15.3.7轉賬263
15.3.8組建網絡265
15.4小結268
第16章以太坊智能合約原理269
16.1以太坊中的智能合約269
16.1.1智能合約生命流程269
16.1.2什麼是EVM字節碼270
16.1.3什麼是ABI 271
16.2 Solidity語言273
16.2.1語法結構273
16.2.2地址275
16.2.3狀態變量和局部變量277
16.2.4 memory和storage 278
16.2.5 constant、view和pure 281
16.2.6 payable函數282
16. 2.7 fallback函數283
16.2.8可見性284
16.2.9內置的單位、變量和函數284
16.2.10事件286
16.2.11繼承287
16.2.12庫288
16. 3 EVM 290
16.3.1 EVM結構290
16.3.2 EVM指令表291
16.3.3棧、內存、數據存儲291
16.3.4輸入數據與Gas池293
16.3.5執行智能合約293
16.4以太坊DApp 294
16.4.1以太坊DApp生態295
16.4.2以太坊DApp運行流程296
16 .5小結298
第17章以太坊進階實踐299
17.1開發以太坊智能合約299
17.1.1環境準備299
17.1.2編寫合約300
17.1.3編譯合約301
17.1 .4調試合約303
17.1.5部署合約304
17.1.6調用合約307
17.2開發以太坊DApp 308
17.2.1要做什麼308
17.2.2環境準備310
17.2 .3創建項目310
17.2.4初始化數據庫310
17.2.5編寫DAO 311
17.2.6編寫Service 312
17.2.7編寫Controller 312
17.2.8編寫前端頁面312
17.2. 9先運行看看313
17.2.10如何改造成DApp 316
17.2.11增加區塊鏈配置參數317
17.2.12生成智能合約Java Bean 320
17.2.13改造Service 322
17.2.14增加調度分配以太幣325
17.2.15再運行看看326
17.2.16還可以怎麼優化330
17.3小結331
第18章共識算法332
18.1什麼是共識算法332
18.1.1狀態機複製332
18.1.2分佈式的問題333
18.2 Paxos算法334
18.2.1算法流程334
18.2.2算法要點337
18.2.3算法與區塊鏈338
18.3 RAFT算法339
18.3.1節點狀態339
18.3.2選舉領導者340
18.3.3區塊複製344
18.4 PBFT算法347
18.4.1拜占庭將軍問題347
18.4.2算法簡介348
18.4.3一致性協議350
18.4.4檢查點協議353
18.4.5視圖切換協議355
18.5 PoS機制357
18.5.1 PoW的問題357
18.5.2 PoS機制簡介358
18.5.3 PoW+PoS機制359
18.5.4純PoS機制360
18.5.5新的挑戰362
18.6 DPoS機制364
18.6.1 DPoS機制簡介364
18.6.2選舉超級節點365
18.6.3生成區塊365
18.6.4穩定運行366
18.6.5高吞吐量367
18.7各有千秋367
18.7.1 CAP定律367
18.7.2不可能三角368
18.8小結369
作者介紹
漆英碩士
國家認證系統分析師,高級程序員,高級工程師,PMP。
現任中國工商銀行軟件開發中心資深技術經理,長期從事銀行軟件開發,成果多次獲獎
(作為主要完成人獲中國人民銀行“銀行科技發展獎”一等獎一項、二等獎一項、三等項獎二項,獲工商銀行“科技創新獎”多項),
獲發明專利多項,發表論文多篇,曾參與多本計算機技術類書籍編寫,著有《簡明銀行會計――程序員視角》 。
作為工行軟件開發中心“工軟學院”的兼職講師,主講的系列課程深受員工歡迎,多次被評為優秀講師。
馮浩銘
中國工商銀行軟件開發中心區塊鏈實驗室技術骨幹,
工行區塊鏈技術平台“工銀璽鏈”團隊核心成員,對密碼學、共識算法、以太坊、
超級賬本等區塊鏈理論及產品有深入研究,具有區塊鏈平台設計、
開發及應用的實踐經驗,獲多項發明專利多項。