比特币的地址是由一个字符串表示的。比较常见的是以1
开头的字符串,也有以2
, 3
, m
, 和 n
开头的字符串。关于这些字符串的区别和联系,笔者一直有很多问题,也在网上搜过很多答案。因此,这篇文章主要是做一个问题和答案的汇总,也包括我自己的一些理解。
I. 比特币地址以什么字符开头
本文列举一些最常见的地址类型,更详细的地址类型及其前缀字符见链接 主网 (Mainet):
P2PKH
类型的地址以1
开头P2SH
类型的地址以3
开头
测试网 (Testnet):
P2PKH
类型的地址以m
或n
开头P2SH
类型的地址以2
开头
II. 比特币地址以什么字符开头
本节主要介绍主网上的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”过程
- 更为详细的变量之间的推导计算参见链接.
III. 比特币P2PKH类型地址的位数
经常访问一些比特币区块浏览器的数据,我们可以发先比特币的
P2PKH
的地址位数不全是一样的。举例来说,11111111111111111111BZbvjr只有26
位,而1BnWPuYQ57dRcWMERGCBnHwv9tKLiw4JFB地址有34
位。 我们在上表中,也提前列出了common bitcoin address
的长度区间为26
到35
. 那么,为什么这些地址的长度会不同呢?
观察上表,容易发现一直到8
号变量,所有的变量长度都是固定且相同的。但问题就出来了从8
号变量向9
号变量转化的计算中。这个计算是个Base58Check编码过程,其将若干个前缀0表示为一个字符“1”,这直接导致了地址变量的长度不一样。