區塊鏈編程 Programming Bitcoin

Jimmy Song

買這商品的人也買了...

商品描述

本書是一本區塊鏈技術入門指南,內容涵蓋密碼學數學基礎(包括有限域、橢圓曲線、橢圓曲線密碼學)、
序列化工具、交易數據的結構與傳輸,以及數字簽名的構造與驗證等。
通過本書,讀者將學習如何使用這種流行的加密貨幣及其區塊鏈支付系統背後的基礎知識,包括數學、密碼學、區塊、網絡等。

作者簡介

Jimmy Song

是一位擁有20多年經驗的開發人員,其中有5年的時間從事比特幣的相關工作。
他是 bitcointechtalk.com 的編輯,也為雜誌 Bitcoin Magazine撰稿,
同時也是 Blockchain Capital 的合夥人以及得克薩斯州大學比特幣編程課程的授課教師。
Jimmy 是Bitcoin Core(比特幣核心)以及其他比特幣相關項目的開發貢獻者。
他也曾是比特幣錢包Armory的技術副總裁。

目錄大綱

前言 1
第1章 有限域 11
學習更高等的數學 11
有限域的定義 12
定義有限集合 12
使用Python構建有限域 13
練習1 14
模運算 14
Python的模運算 16
有限域的加法和減法 16
練習2 18
使用Python編寫有限域的加法和減法 18
練習3 19
有限域的乘法和指數運算 19
練習4 20
練習5 20
使用Python編寫乘法 20
練習6 20
使用Python編寫指數運算 21
練習7 21
有限域的除法 21
練習8 23
練習9 23
重新定義指數運算 24
總結 25

第2章 橢圓曲線 26
定義 26
使用Python編寫橢圓曲線 31
練習1 32
練習2 32
點的加法 32
點加法的性質 35
實現點加法 37
練習3 38
x1≠x2時的點加法 38
練習4 40
實現x1≠x2時的點加法 40
練習5 40
P1 = P2時的點加法 40
練習6 42
實現P1 = P2時的點加法 42
練習7 42
實現另一個特例 42
總結 43

第3章 橢圓曲線密碼學 44
實數域上的橢圓曲線 44
有限域上的橢圓曲線 45
練習1 46
實現有限域上的橢圓曲線 46
有限域上的點加法 48
實現有限域上的點加法 49
練習2 49
練習3 49
橢圓曲線的標量乘法 49
練習4 51
再議標量乘法 51
數學上的群 52
恆等元 53
封閉性 53
可逆性 54
交換律 54
結合律 55
練習5 56
實現標量乘法 56
定義比特幣的曲線 58
使用secp256k1 59
公鑰密碼學 61
簽名和驗證 61
雕刻靶坐標 62
驗證的細節 64
驗證簽名 65
練習6 66
編程實現簽名驗證 66
簽名的細節 67
創造簽名 67
練習7 68
編程實現消息簽名 68
總結 70

第4章 序列化 72
未壓縮的SEC格式 72
練習1 73
壓縮的SEC格式 73
練習2 77
DER簽名 77
練習3 79
Base58 79
轉錄你的公鑰 79
練習4 81
地址格式 81
練習5 82
WIF格式 82
練習6 83
再議大端序和小端序 83
練習7 83
練習8 83
練習9 84
總結 84


第5章 交易 85
交易的組成 85
版本號 87
練習1 88
輸入 88
解析腳本 92
練習2 92
輸出 93
練習3 94
時間鎖 94
練習4 95
練習5 95
實現交易的序列化 96
交易手續費 96
計算交易手續費 98
練習6 98
總結 98

第6章 Script 99
Script機制 99
Script如何運作 100
幾個操作符的例子 101
實現操作符 101
練習1 102
解析腳本字段 102
實現一個Script解析工具和序列化工具 103
合併腳本字段 105
實現合併命令集 106
標準腳本 106
p2pk 107
實現腳本計算 110
棧元素的本質 112
練習2 113
p2pk的缺陷 113
使用p2pkh修復問題 114
p2pkh 114
腳本可以被任意構建 118
練習3 120
腳本的使用 121
練習4 121
SHA-1 Pin躠ta 122
總結 122

第7章 交易的創建與驗證 123
驗證交易 123
校驗交易輸入是否可用 123
校驗交易輸入的總和與交易輸出的總和 124
校驗簽名 125
練習1 129
練習2 129
校驗交易的全部內容 129
創建交易 129
構建交易 130
製作交易 132
簽名交易 133
練習3 134
在測試鏈上創建你自己的交易 134
練習4 135
練習5 135
總結 135

第8章 支付到腳本哈希交易 136
裸多簽 136
實現OP_CHECKMULTISIG 140
練習1 140
裸多籤的問題 141
支付到腳本哈希 141
實現p2sh 147
更複雜的腳本 148
地址 148
練習2 149
練習3 149
p2sh簽名驗證 149
練習4 152
練習5 152
總結 152

第9章 區塊 153
創塊交易 153
練習1 154
簽名腳本 154
BIP0034 155
練習2 156
區塊頭 156
練習3 157
練習4 157
練習5 157
版本號 157
練習6 158
練習7 159
練習8 159
父區塊 159
默克爾根 159
時間戳 159
工作量 160
序號 160
工作量證明 160
礦工如何生chengxin的哈希 161
計算目標 161
練習9 162
計算難度 162
練習10 163
校驗工作量證明 163
練習11 163
計算難度調整 163
練習12 165
練習13 165
總結 165

第10章 比特幣網絡通信 166
網絡消息 166
練習1 168
練習2 168
練習3 168
解析payload 168
練習4 169
網絡握手 170
連接到比特幣網絡 170
練習5 172
獲取區塊頭信息 173
練習6 174
區塊頭響應 174
總結 176

第11章 簡單支付驗證 177
動機 177
默克爾樹 178
默克爾樹的父哈希 179
練習1 180
默克爾父節點層數 180
練習2 181
默克爾根 181
練習3 182
區塊中的默克爾根 182
練習4 183
默克爾樹的使用 183
默克爾塊 184
默克爾樹結構 186
練習5 187
實現默克爾樹 187
默克爾塊命令 192
練習6 193
標記位和哈希的使用 193
練習7 197
總結 197

第12章 布隆過濾器 198
什麼是布隆過濾器 198
練習1 200
布隆過濾器進階 200
BIP0037布隆過濾器 201
練習2 203
練習3 203
載入一個布隆過濾器 203
練習4 204
獲取默克爾塊 204
練習5 205
獲取相關交易 205
練習6 206
總結 206

第13章 隔離見證 207
支付到見證公鑰哈希 207
交易的延展性 207
修復延展性問題 208
p2wpkh交易 209
p2sh-p2wpkh 212
實現p2wpkh和p2sh-p2wpkh交易 216
支付到見證腳本哈希 220
p2sh-p2wsh 223
實現p2wsh和p2sh-p2wsh交易 228
其他方面的改善 230
總結 230

第14章 高級主題和進階 231
推薦的學習主題 231
錢包 231
支付通道和閃電網絡 232
貢獻代碼 232
推薦的項目 233
測試鏈錢包 233
區塊鏈瀏覽器 233
網上商店 233
工具庫 234
尋找工作 234
總結 234
附錄 練習答案 235