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