天天看点

关于比特币地址的一些问题和解答

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?