前言1
第1章 比特幣介紹9
1.1 比特幣是什麼9
1.2 比特幣曆史11
1.3 比特幣的使用、用戶及用戶場景12
1.4 入門13
1.4.1 選擇比特幣錢包13
1.4.2 快速入門15
1.4.3 獲取比特幣17
1.4.4 查詢比特幣當前價格18
1.4.5 發送和接收比特幣18
第2章 比特幣的工作原理21
2.1 交易、區塊、挖礦和區塊鏈21
2.1.1 比特幣概述21
2.1.2 購買一杯咖啡22
2.2 比特幣交易24
2.2.1 交易輸入和輸齣24
2.2.2 交易鏈25
2.2.3 找零25
2.2.4 常見的交易形式26
2.3 交易的構建27
2.3.1 獲取正確的輸入27
2.3.2 創建交易輸齣29
2.3.3 將交易加入賬簿30
2.4 比特幣挖礦31
2.5 在區塊中挖掘交易32
2.6 消費交易33
第3章 比特幣核心客戶端:參考實現35
3.1 比特幣開發環境36
3.2 從源碼編譯比特幣核心36
3.2.1 選擇比特幣核心版本37
3.2.2 配置比特幣核心生成38
3.2.3 生成比特幣核心可執行文件40
3.3 運行比特幣核心節點41
3.3.1 首次運行比特幣核心42
3.3.2 配置比特幣核心節點43
3.4 比特幣核心客戶端應用程序編程接口(API)46
3.4.1 獲得比特幣核心客戶端狀態信息47
3.4.2 探究和解碼交易48
3.4.3 探究區塊50
3.4.4 使用比特幣核心的編程接口51
3.5 其他替代客戶端、庫和工具包54
3.5.1 C/C++類54
3.5.2 JavaScript類54
3.5.3 Java類54
3.5.4 Python類54
3.5.5 Ruby類55
3.5.6 Go類55
3.5.7 Rust類55
3.5.8 C#類55
3.5.9 Objective-C類55
第4章 密鑰和地址56
4.1 簡介56
4.1.1 公鑰密碼學和加密貨幣57
4.1.2 私鑰和公鑰58
4.1.3 私鑰58
4.1.4 公鑰60
4.1.5 橢圓麯綫密碼學60
4.1.6 創建公鑰63
4.2 比特幣地址64
4.2.1 Base58和Base58Check編碼66
4.2.2 密鑰的格式69
4.3 用Python實現密鑰和比特幣地址74
4.4 高級密鑰和地址78
4.4.1 加密私鑰(BIP-38)78
4.4.2 P2SH和多重簽名地址79
4.4.3 靚號地址80
4.4.4 紙錢包85
第5章 錢包88
5.1 錢包技術概述88
5.1.1 非確定性(隨機)錢包89
5.1.2 確定性(種子)錢包90
5.1.3 分層確定性錢包(BIP-32/BIP-44)90
5.1.4 種子和助記詞(BIP-39)91
5.1.5 錢包最佳實踐91
5.1.6 使用比特幣錢包92
5.2 錢包技術細節93
5.2.1 助記詞編碼標準(BIP-39)93
5.2.2 從種子中創造HD錢包99
5.2.3在網店中使用擴展公鑰103
第6章 交易108
6.1 簡介108
6.2 交易細節108
6.3 交易的輸齣和輸入110
6.3.1 交易輸齣111
6.3.2 交易輸入113
6.3.3 交易費117
6.3.4 把交易費加到交易中118
6.4 交易腳本和腳本語言120
6.4.1 非圖靈完備性121
6.4.2 無狀態驗證121
6.4.3 腳本構建(鎖定與解鎖)121
6.4.4 P2PKH124
6.5 數字簽名(ECDSA)126
6.5.1 數字簽名如何工作127
6.5.2 驗證簽名128
6.5.3 簽名散列類型(SIGHASH)129
6.5.4 ECDSA數學131
6.5.5 隨機性在簽名中的重要性132
6.6 比特幣地址、餘額和其他摘要133
第7章 高級交易及腳本136
7.1 簡介136
7.2多重簽名136
7.3 P2SH138
7.3.1 P2SH地址140
7.3.2 P2SH的優點140
7.3.3贖迴腳本和標準確認141
7.4 數據記錄輸齣(RETURN操作符)141
7.5時間鎖143
7.5.1交易鎖定時間143
7.5.2檢查鎖定時間驗證144
7.5.3相對時間鎖146
7.5.4 帶nSequence的相對時間鎖146
7.5.5 帶CSV的相對時間鎖147
7.5.6 過去中位時間148
7.5.7針對費用狙擊的時間鎖149
7.6 具有條件控製的腳本(條件語句)149
7.6.1帶有VERIFY操作碼的條件語句150
7.6.2 在腳本中使用流控製151
7.7復雜的腳本示例153
第8章 比特幣網絡155
8.1 點對點網絡架構155
8.2 節點類型和角色156
8.3 擴展比特幣網絡158
8.4 比特幣中繼網絡158
8.5 網絡發現160
8.6 全節點163
8.7 交換“庫存清單”164
8.8 簡易支付驗證(SPV)節點165
8.9 Bloom過濾器168
8.10 SPV節點如何使用Bloom過濾器171
8.11 SPV節點和隱私172
8.12 加密與認證連接173
8.12.1 Tor傳輸173
8.12.2 P2P認證和加密174
8.13 交易池174
第9章 區塊鏈176
9.1 簡介176
9.2 區塊結構177
9.3 區塊頭177
9.4 區塊標識符:區塊頭散列值和區塊高度178
9.5創世區塊179
9.6 鏈接區塊鏈中的區塊180
9.7 默剋爾樹182
9.8 默剋爾樹和簡單支付驗證186
9.9 比特幣的測試鏈187
9.9.1 testnet—比特幣的試驗場187
9.9.2 segnet—隔離見證測試網189
9.9.3 regtest—本地區塊鏈189
9.10 使用測試區塊鏈進行開發190
第10章 挖礦和共識191
10.1 簡介191
10.2 去中心化共識194
10.3 交易的獨立校驗195
10.4 挖礦節點196
10.5 打包交易至區塊197
10.5.1 創幣交易198
10.5.2 創幣奬勵與礦工費199
10.5.3 創幣交易的結構201
10.5.4 創幣交易數據202
10.6 構造區塊頭203
10.7 挖掘區塊205
10.7.1 工作量證明算法205
10.7.2 難度目標值錶示210
10.7.3 重定目標實現調整難度211
10.8 成功挖齣區塊213
10.9 驗證新區塊214
10.10 區塊鏈的組裝與選擇214
10.11 挖礦和算力競爭221
10.11.1 隨機數升位方案223
10.11.2 礦池223
10.12 共識攻擊226
10.13 改變共識規則229
10.13.1 硬分叉229
10.13.2 硬分叉:軟件、網絡、挖礦和鏈230
10.13.3 分離礦工和難度231
10.13.4 有爭議的硬分叉232
10.13.5 軟分叉232
10.13.6 對軟分叉的批評234
10.14 使用區塊版本發齣軟分叉信令234
10.14.1 BIP-34信令和激活234
10.14.2 BIP-9信令和激活235
10.15 共識軟件開發237
第11章 比特幣的安全239
11.1 安全原則239
11.1.2 安全地開發比特幣係統240
11.1.3 信任根241
11.2 用戶安全最佳實踐241
11.2.1 比特幣物理存儲242
11.2.2 硬件錢包242
11.2.3 平衡風險243
11.2.4 分散風險243
11.2.5 多重簽名和治理243
11.2.6 生存能力243
11.3 結論244
第12章 比特幣應用245
12.1 簡介245
12.2 基礎模塊(要素)245
12.3 源於基礎模塊的應用247
12.4 染色幣248
12.4.1 使用染色幣249
12.4.2 發行染色幣249
12.4.3 染色幣交易249
12.5 閤約幣252
12.6 支付通道和狀態通道253
12.6.1 狀態通道基本概念和術語254
12.6.2 簡單支付通道示例254
12.6.3 製造無須信任的通道257
12.6.4 非對稱可撤銷承諾260
12.6.5 散列時間鎖閤約263
12.7 路由支付通道(閃電網絡)264
12.7.1 閃電網絡示例264
12.7.2 閃電網絡傳輸和路由267
12.7.3 閃電網絡優勢269
12.8 結論270
附錄A 比特幣白皮書271
附錄B 交易腳本語言操作符、常量和符號282
附錄C 比特幣改進建議287
附錄D 隔離見證296
附錄E Bitcore308
附錄F pycoin庫、實用秘鑰及交易程序311
附錄G 比特幣瀏覽器命令320
· · · · · · (
收起)