1. 寫在前面
比特币的位址是由一個字元串表示的。比較常見的是以
1
開頭的字元串,也有以
2
,
3
,
m
, 和
n
開頭的字元串。關于這些字元串的差別和聯系,筆者一直有很多問題,也在網上搜過很多答案。是以,這篇文章主要是做一個問題和答案的彙總,也包括我自己的一些了解。
2. Q&A
2.1 比特币位址以什麼字元開頭
本文列舉一些最常見的位址類型,更詳細的位址類型及其字首字元見連結
主網 (Mainet):
-
類型的位址以P2PKH
開頭1
-
類型的位址以P2SH
開頭3
測試網 (Testnet):
-
類型的位址以P2PKH
或m
開頭n
-
類型的位址以P2SH
開頭2
2.2 比特币位址有哪些形式以及互相關系
本節主要介紹主網上的
P2PKH
類型的位址相關變量。
比特币位址相關的變量形式包括:
ECDSA private key
,
ECDSA public key
,
SHA-256 hash value
,
RIPEMD-160 hash value
,
address
等,如下表所示。
- 下方的變量主要由上方的變量計算得到
- 計算主要分為兩種:可逆的和不可逆的。一般而言,生成公鑰的計算和哈希計算是不可逆的;字元串拼接和編碼是可逆的。
- 由于可以從
号變量計算出9
号變量,從8
号變量計算出8
号變量,從4
号變量計算出4
号變量。是以從3
号、3
号、4
号和8
号變量之間可以互相推導得到,由其中的9
個變量可以推導出其他1
個變量。3
- 在部落格了解比特币的raw transaction (1) P2PKH類型交易中,我們提到比特币交易中的
包含input
字段,PubK
中包含output
字段。其分别對應着表中的PubKHash
号變量的壓縮格式和1
号變量。3
- 我們通常說的比特币位址是
号變量9
- 5号變量往後的計算過程稱為“Base58Check Encoding”過程
- 更為詳細的變量之間的推導計算參見連結.
2.3 比特币P2PKH類型位址的位數
經常通路一些比特币區塊浏覽器的資料,我們可以發先比特币的的位址位數不全是一樣的。舉例來說,11111111111111111111BZbvjr隻有
P2PKH
位,而1BnWPuYQ57dRcWMERGCBnHwv9tKLiw4JFB位址有
26
34
位。
我們在上表中,也提前列出了
的長度區間為
common bitcoin address
到
26
. 那麼,為什麼這些位址的長度會不同呢?
35
觀察上表,容易發現一直到
8
号變量,所有的變量長度都是固定且相同的。但問題就出來了從
8
号變量向
9
号變量轉化的計算中。這個計算是個Base58Check編碼過程,其将若幹個字首0表示為一個字元“1”,這直接導緻了位址變量的長度不一樣。
3.參考連結
- List of address prefixes
- Technical background of version 1 Bitcoin addresses
- What are the minimum and maximum lengths of a Mainnet Bitcoin address?