比特币现金BCH网络硬分叉协议升级技术解析
3372
根据bitcoincash.org网站提供的信息显示, 比特币 现金(BCH)网络将于UNIX时间戳1542300000进行一次硬分叉协议升级,而使用BCH网络的企业和个人,都应该检查自己运行的软件,以确保自己的软件与这次升级相兼容。
截至目前,已实现兼容的客户端包括Bitcoin ABC 0.18.2、Bitcoin Unlimi te d Cash Edi ti on 1.5.0.0, 而即将实现兼容的客户端还有bcoin-bcash 1.1.0。
(如果用户因不熟悉或其他原因,也可以将自己的资产存放于支持这次硬分叉升级的可靠交易所,截至目前,已明确支持这次升级的交易所包括币安、火币、coinbase、Poloniex等。当然,如果读者对自己的技术的很有信心,自行操作会是更好的一种选择,因为如果万一出现了链分裂的情况,你就可以第一时间获取到分叉币。)
以下为这次硬分叉协议升级的具体说明:
当最近11个区块(MTP-11)的时间中位数 [1] 大于或等于UNIX时间戳1542300000(译者注:北京时间2018年11月16 日0:40:0)时,比特币现金(BCH)将根据此规范执行网络共识规则升级。而从下一个区块开始,这些共识规则的更改将会生效:
删除拓扑交易排序限制,并强制执行规范交易排序;
启用OP_CHECKDATASIG和OP_CHECKDATASIGVERIFY操作码;
实施最小交易大小规则;
为scriptSig(脚本签名)强制执行“push only”规则;
实施“清理堆栈”规则;
以下部分不是共识方面的更改,而是对比特币现金(BCH)实施的推荐更改:
对于未来升级的自动重放攻击保护;
规范交易排序
除了coinbase交易之外,区块内的交易必须按交易 id的数字升序排序,它们会被解释为256位的小端整数(little endian intege rs )。coinbase交易必须是一个区块当中的第一笔交易。
操作码(OpCode)
新的操作码OP_CHECKDATASIG以及OP_CHECKDATASIGVERIFY将按照 op_checkdatasig.md [2]中的规定得到启用。
最小交易大小
小于100字节的交易,应被视为无效交易。这可以防止黑客利用默克尔树(Merkle tree )漏洞,针对轻钱包(SPV) [3]实施欺诈交易攻击而造成影响。
Push Only
如果在一个脚本签名当中,出现了编号大于96(十六进制编码为0x60)的操作码,则交易会被认为是无效的。这和比特币BIP 62 #2 规则 [4]是相同的。
清理堆栈
而要使一笔交易是有效的,在完成脚本评估的时候,堆栈上必须只有一个非零项。如果堆栈上仍然有额外的数据元素,则脚本的计算结果为“false”。这与比特币BIP 62 #6规则[4]是相同的。
自动重放攻击保护
当最近11个区块(MTP-11)的时间中位数 [2] 小于UNIX时间戳1557921600(2019年5月15日)时,比特币现金(BCH)全节点必须执行以下规则:
forkid [5]等于0.
当最近11个区块(MTP-11)的时间中位数 [1]大于或等于UNIX时间戳1557921600(2019年5月15日),执行2018年11月份共识规则的比特币现金全节点,应该执行以下更改:
将forkid [5]更新为等于0xFF0001,以0xFF开头的ForkID,将被保留,以用于将来的协议升级。
这一特殊的共识规则,绝不能由比特币现金软件钱包来实现。跟随升级的钱包,不应该改变任何东西。