xiyu

Posted on Feb 08, 2023Read on Mirror.xyz

#004 比特币的几种地址类型

Segwit地址又称隔离见证地址。在比特币区块链上,经常可以看到类似bc1qmy63mjadtw8nhzl69ukdepwzsyvv4yex5qlmkd这样的以bc开头的地址,这种地址就是隔离见证地址。

Segwit地址有好几种,一种是以3开头的隔离见证兼容地址(Nested Segwit Address),从该地址上无法区分到底是多签地址还是隔离见证兼容地址,好处是钱包程序不用修改,可直接付款到该地址。

另一种是原生隔离见证地址(Native Segwit Address),即以bc开头的地址,它本质上就是一种新的编码方式。

我们回顾一下1开头的比特币地址是如何创建的:

  1. 根据公钥计算hash160;

  2. 添加固定头并计算带校验的Base58编码。

简单地概括就是使用Base58编码的公钥哈希。

bc地址使用的不是Base58编码,而是Bech32编码,它的算法是:

  1. 根据公钥计算hash160;

  2. 使用Base32编码得到更长的编码;

  3. bc作为识别码进行编码并带校验。

和Base58地址相比,Bech32地址的优点有:

  1. 不用区分大小写,因为编码用的字符表没有大写字母;

  2. 有个固定前缀,可任意设置,便于识别;

  3. 生成的二维码更小。

它的缺点是:

  1. 和现有地址不兼容,钱包程序必须升级;

  2. 使用1作为分隔符,却使用了字母l,容易混淆;

  3. 地址更长,有42个字符。

HD钱包

可以通过某种确定性算法,先确定一个私钥k1,然后计算出k2、k3、k4……等其他私钥,就相当于只需要管理一个私钥,剩下的私钥可以按需计算出来。

这种根据某种确定性算法,只需要管理一个根私钥,即可实时计算所有“子私钥”的管理方式,称为HD钱包。

HD是Hierarchical Deterministic的缩写,意思是分层确定性。先确定根私钥root,然后根据索引计算每一层的子私钥。