Segwit地址又称隔离见证地址。在比特币区块链上,经常可以看到类似bc1qmy63mjadtw8nhzl69ukdepwzsyvv4yex5qlmkd
这样的以bc
开头的地址,这种地址就是隔离见证地址。
Segwit地址有好几种,一种是以3
开头的隔离见证兼容地址(Nested Segwit Address),从该地址上无法区分到底是多签地址还是隔离见证兼容地址,好处是钱包程序不用修改,可直接付款到该地址。
另一种是原生隔离见证地址(Native Segwit Address),即以bc
开头的地址,它本质上就是一种新的编码方式。
我们回顾一下1
开头的比特币地址是如何创建的:
-
根据公钥计算hash160;
-
添加固定头并计算带校验的Base58编码。
简单地概括就是使用Base58编码的公钥哈希。
而bc
地址使用的不是Base58编码,而是Bech32编码,它的算法是:
-
根据公钥计算hash160;
-
使用Base32编码得到更长的编码;
-
以
bc
作为识别码进行编码并带校验。
和Base58地址相比,Bech32地址的优点有:
-
不用区分大小写,因为编码用的字符表没有大写字母;
-
有个固定前缀,可任意设置,便于识别;
-
生成的二维码更小。
它的缺点是:
-
和现有地址不兼容,钱包程序必须升级;
-
使用
1
作为分隔符,却使用了字母l
,容易混淆; -
地址更长,有42个字符。
HD钱包
可以通过某种确定性算法,先确定一个私钥k1,然后计算出k2、k3、k4……等其他私钥,就相当于只需要管理一个私钥,剩下的私钥可以按需计算出来。
这种根据某种确定性算法,只需要管理一个根私钥,即可实时计算所有“子私钥”的管理方式,称为HD钱包。
HD是Hierarchical Deterministic的缩写,意思是分层确定性。先确定根私钥root,然后根据索引计算每一层的子私钥。