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?