比特幣現(xiàn)金B(yǎng)CH網(wǎng)絡(luò)硬分叉協(xié)議升級(jí)技術(shù)解析
根據(jù)bitcoincash.org網(wǎng)站提供的信息顯示,比特幣現(xiàn)金(BCH)網(wǎng)絡(luò)將于UNIX時(shí)間戳1542300000進(jìn)行一次硬分叉協(xié)議升級(jí),而使用BCH網(wǎng)絡(luò)的企業(yè)和個(gè)人,都應(yīng)該檢查自己運(yùn)行的軟件,以確保自己的軟件與這次升級(jí)相兼容。
截至目前,已實(shí)現(xiàn)兼容的客戶端包括Bitcoin ABC 0.18.2、Bitcoin Unlimited Cash Edition 1.5.0.0, 而即將實(shí)現(xiàn)兼容的客戶端還有bcoin-bcash 1.1.0。
(如果用戶因不熟悉或其他原因,也可以將自己的資產(chǎn)存放于支持這次硬分叉升級(jí)的可靠交易所,截至目前,已明確支持這次升級(jí)的交易所包括幣安、火幣、coinbase、Poloniex等。當(dāng)然,如果讀者對(duì)自己的技術(shù)的很有信心,自行操作會(huì)是更好的一種選擇,因?yàn)槿绻f(wàn)一出現(xiàn)了鏈分裂的情況,你就可以第一時(shí)間獲取到分叉幣。)
以下為這次硬分叉協(xié)議升級(jí)的具體說(shuō)明:
當(dāng)最近11個(gè)區(qū)塊(MTP-11)的時(shí)間中位數(shù) [1] 大于或等于UNIX時(shí)間戳1542300000(譯者注:北京時(shí)間2018年11月16 日0:40:0)時(shí),比特幣現(xiàn)金(BCH)將根據(jù)此規(guī)范執(zhí)行網(wǎng)絡(luò)共識(shí)規(guī)則升級(jí)。而從下一個(gè)區(qū)塊開始,這些共識(shí)規(guī)則的更改將會(huì)生效:
刪除拓?fù)浣灰着判蛳拗疲?qiáng)制執(zhí)行規(guī)范交易排序;
啟用OP_CHECKDATASIG和OP_CHECKDATASIGVERIFY操作碼;
實(shí)施最小交易大小規(guī)則;
為scriptSig(腳本簽名)強(qiáng)制執(zhí)行“push only”規(guī)則;
實(shí)施“清理堆?!币?guī)則;
以下部分不是共識(shí)方面的更改,而是對(duì)比特幣現(xiàn)金(BCH)實(shí)施的推薦更改:
對(duì)于未來(lái)升級(jí)的自動(dòng)重放攻擊保護(hù);
規(guī)范交易排序
除了coinbase交易之外,區(qū)塊內(nèi)的交易必須按交易 id的數(shù)字升序排序,它們會(huì)被解釋為256位的小端整數(shù)(little endian integers)。coinbase交易必須是一個(gè)區(qū)塊當(dāng)中的第一筆交易。
操作碼(OpCode)
新的操作碼OP_CHECKDATASIG以及OP_CHECKDATASIGVERIFY將按照 op_checkdatasig.md [2]中的規(guī)定得到啟用。
最小交易大小
小于100字節(jié)的交易,應(yīng)被視為無(wú)效交易。這可以防止黑客利用默克爾樹(Merkle tree )漏洞,針對(duì)輕錢包(SPV) [3]實(shí)施欺詐交易攻擊而造成影響。
Push Only
如果在一個(gè)腳本簽名當(dāng)中,出現(xiàn)了編號(hào)大于96(十六進(jìn)制編碼為0x60)的操作碼,則交易會(huì)被認(rèn)為是無(wú)效的。這和比特幣BIP 62 #2 規(guī)則 [4]是相同的。
清理堆棧
而要使一筆交易是有效的,在完成腳本評(píng)估的時(shí)候,堆棧上必須只有一個(gè)非零項(xiàng)。如果堆棧上仍然有額外的數(shù)據(jù)元素,則腳本的計(jì)算結(jié)果為“false”。這與比特幣BIP 62 #6規(guī)則[4]是相同的。
自動(dòng)重放攻擊保護(hù)
當(dāng)最近11個(gè)區(qū)塊(MTP-11)的時(shí)間中位數(shù) [2] 小于UNIX時(shí)間戳1557921600(2019年5月15日)時(shí),比特幣現(xiàn)金(BCH)全節(jié)點(diǎn)必須執(zhí)行以下規(guī)則:
forkid [5]等于0.
當(dāng)最近11個(gè)區(qū)塊(MTP-11)的時(shí)間中位數(shù) [1]大于或等于UNIX時(shí)間戳1557921600(2019年5月15日),執(zhí)行2018年11月份共識(shí)規(guī)則的比特幣現(xiàn)金全節(jié)點(diǎn),應(yīng)該執(zhí)行以下更改:
將forkid [5]更新為等于0xFF0001,以0xFF開頭的ForkID,將被保留,以用于將來(lái)的協(xié)議升級(jí)。
這一特殊的共識(shí)規(guī)則,絕不能由比特幣現(xiàn)金軟件錢包來(lái)實(shí)現(xiàn)。跟隨升級(jí)的錢包,不應(yīng)該改變?nèi)魏螙|西。