Bitcoin Cash的新地址格式CashAddr

转自:https://zhuanlan.zhihu.com/p/34931303

Bitcoin Cash,老的比特币格式的地址被称为Legacy(遗产)地址,升级节点至0.16.2后,所有的RPC地址展示都用了CashAddr格式,包括listunspent,listtransactions,validateaddress等常用的RPC命令。

BCH新老地址的对比:

1. 新地址是和老地址一一对应的,它们对应了同一个私钥,只是换了种写法

2. 新地址可以发送余额给老地址,老地址可以发送余额到新地址

3. 新地址是大小写不敏感的,可以全部转成大写,也可以全部转成小写,优先小写格式,同一地址不能大小写混用

4. 新地址的前缀可写可不写,老地址没有前缀,通过首字符来标识类型

5. 新地址用base32编码,老地址用base58编码

6. 新地址格式不是一个软分叉,也不是一个硬分叉(这个有点争议,改了大家都依赖的节点程序其实算是一个软分叉)

自从比特币分叉出BCH以来,两个分叉币就逐渐地往不同的方向走了,软分叉的BTC支持了隔离见证,也增加了隔离见证地址等功能,默认生成新地址(getnewaddress)是p2sh-segwit隔离见证地址了,如果想要生成其它格式的地址,可以使用address_type来指定地址类型,例如要生成原始格式地址,address_type要填legacy。现在,Bitcoin Cash也有了自己的地址格式,而且推荐用户优先选用新的地址格式。

BCH的新地址格式类似这样:

bitcoincash:qpg6rgmpxr838cnwjhatdyuxkdz644xku54fe5yk99

bchtest:qqfpw4e90jhanpz2uspe29czwswgk5rd9v3yczymwq

开头是一个网络名,后面是一个q开头的base32编码的字符串,包含了版本号、公钥哈希值、校检码等信息,它们根据一些规则来拼接成这样一个地址,具体原理请参考这里。

新节点支持使调用接口数据时使用老地址:在节点配置usecashaddr=0

新弄一个地址格式的初衷,在于区别老地址和新地址,以免用户充错币。例如充错BTC到BCH地址,由于BCH已经做了防重放攻击,这样相当于将BTC打过去了与BCH地址相同的一个BTC地址上去了,要找回的话还挺麻烦,需要将BCH钱包的私钥,导入到BTC钱包上,才能将币打出,类似的将BCH充值到BTC地址也一样。如果私钥不由自己掌握,或者交易所、钱包等商家不提供找回服务,那么这个币就相当于丢了。有些服务商为了防止用户打错,干脆将BTC和BCH地址充值地址弄成一致的,这样用户就不会打错了,即使打错了,也是充值到自己的账号去,可以随时提走。

新格式解决了一些问题,新老地址混用,可能会造成阅读障碍。

除了新老地址混用的问题,老的比特币地址其实经过了精心的设计,通过base58编码,避免了一些容易看错的字母和数字;使用首字母来标识类型,能够让人一眼知道这是个啥地址,比如m或n开头的,是一个测试环境地址,而1开头是正式环境地址,如果是3开头的,那么它是一个P2SH地址。新地址格式,通过前面的版本号来看地址所属的网络,不能再轻松看出差别了,新地址格式的确没有老地址那么简洁易用。

BCH地址转换器

https://cashaddr.bitcoincash.org/

https://bch.btc.com/tools/address-converter

https://www.viabtc.com/

参考资料

https://zhuanlan.zhihu.com/p/34931303

https://github.com/bitcoincashorg/spec/blob/master/cashaddr.md

https://github.com/bitcoincashorg/bitcoincash.org/blob/master/spec/cashaddr.md

你可能感兴趣的:(Bitcoin Cash的新地址格式CashAddr)