天天看點

關于比特币位址的一些問題和解答

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類型位址的位數

經常通路一些比特币區塊浏覽器的資料,我們可以發先比特币的

P2PKH

的位址位數不全是一樣的。舉例來說,11111111111111111111BZbvjr隻有

26

位,而1BnWPuYQ57dRcWMERGCBnHwv9tKLiw4JFB位址有

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?