Bitcoin Cash從0.16.2版本開始推出了CashAddr格式,老的比特幣格式的地址被稱為Legacy(遺產(chǎn))地址,升級節(jié)點至0.16.2后,所有的RPC地址展示都用了CashAddr格式,包括listunspent,listtransactions,validateaddress等常用的RPC命令。
快速看看BCH新老地址的對比:
1. 新地址是和老地址一一對應的,它們對應了同一個私鑰,只是換了種寫法
2. 新地址可以發(fā)送余額給老地址,老地址可以發(fā)送余額到新地址
3. 新地址是大小寫不敏感的,可以全部轉成大寫,也可以全部轉成小寫,優(yōu)先小寫格式,同一地址不能大小寫混用
4. 新地址的前綴可寫可不寫,老地址沒有前綴,通過首字符來標識類型
5. 新地址用base32編碼,老地址用base58編碼
6. 新地址格式不是一個軟分叉,也不是一個硬分叉(這個有點爭議,改了大家都依賴的節(jié)點程序其實算是一個軟分叉)
自從比特幣分叉出BCH以來,兩個分叉幣就逐漸地往不同的方向走了,軟分叉的BTC支持了隔離見證,也增加了隔離見證地址等功能,默認生成新地址(getnewaddress)是p2sh-segwit隔離見證地址了,如果想要生成其它格式的地址,可以使用address_type來指定地址類型,例如要生成原始格式地址,address_type要填legacy?,F(xiàn)在,Bitcoin Cash也有了自己的地址格式,而且推薦用戶優(yōu)先選用新的地址格式。
BCH的新地址格式類似這樣:
bitcoincash:qpg6rgmpxr838cnwjhatdyuxkdz644xku54fe5yk99
bchtest:qqfpw4e90jhanpz2uspe29czwswgk5rd9v3yczymwq
開頭是一個網(wǎng)絡名,后面是一個q開頭的base32編碼的字符串,包含了版本號、公鑰哈希值、校檢碼等信息,它們根據(jù)一些規(guī)則來拼接成這樣一個地址,具體原理請參考這里。
新弄一個地址格式的初衷,在于區(qū)別老地址和新地址,以免用戶充錯幣。例如充錯BTC到BCH地址,由于BCH已經(jīng)做了防重放攻擊,這樣相當于將BTC打過去了與BCH地址相同的一個BTC地址上去了,要找回的話還挺麻煩,需要將BCH錢包的私鑰,導入到BTC錢包上,才能將幣打出,類似的將BCH充值到BTC地址也一樣。如果私鑰不由自己掌握,或者交易所、錢包等商家不提供找回服務,那么這個幣就相當于丟了。有些服務商為了防止用戶打錯,干脆將BTC和BCH地址充值地址弄成一致的,這樣用戶就不會打錯了,即使打錯了,也是充值到自己的賬號去,可以隨時提走。
新格式解決了一些問題,然而也帶來了一些問題,特別是在新舊格式交替的過程中,會使人懵逼,一會新地址格式,一會老地址格式,雖然背后都是同一個私鑰,但是人閱讀起來還是有非常大差別。全部人都用老地址格式,或者全部人用新地址格式,都不會有問題,部分人使用新地址格式,部分人使用老的,就會像語言障礙一樣,需要轉換一下,才能看得懂。
除了新老地址混用的問題,其次新地址看起來其實蠻丑的,使用小寫使得整個地址看起來密集,冗長,雖然開發(fā)者說是為了更易于書寫和閱讀,其實完全沒有起到這個作用,比起 18SdNMjLMA9PJLnYr2MJtH8fndwYhq26vP 這樣的老地址,實在是難看了很多,老的比特幣地址其實經(jīng)過了精心的設計,通過base58編碼,避免了一些容易看錯的字母和數(shù)字;使用首字母來標識類型,能夠讓人一眼知道這是個啥地址,比如m或n開頭的,是一個測試環(huán)境地址,而1開頭是正式環(huán)境地址,如果是3開頭的,那么它是一個P2SH地址。新地址格式,通過前面的版本號來看地址所屬的網(wǎng)絡,不能再輕松看出差別了,新地址格式的確沒有老地址那么簡潔易用。
不過,目前走到這步,也都需要支持新地址格式,這樣才能盡快解決這個兼容問題,讓人們不再去關注這種差別,而可以自然地使用BCH。Bitcoin Cash開發(fā)者的方向,也應該將精力用在刀刃上,去解決那些更重要的問題,而不是解決一個問題,引入另外一個問題,因為要解決類似這種地址兼容的問題,需要漫長的時間等待所有人都用上新地址,甚至直到永遠,也還是有人用老地址,這樣總是要做兼容,這是非常不好的實踐。
由于BTC和BCH在分叉路上越走越遠,因為它們有更多的不一樣了,自然對應的業(yè)務邏輯也都不一樣了,這點對于該生態(tài)的開發(fā)者來說,需要付諸更多精力,及時關注二者的技術發(fā)展動態(tài),及時更新業(yè)務邏輯。