比特币现金(BCH)网络11月硬分叉升级技术详解

来源: 巴比特
比特币现金(BCH)网络将于UNIX时间戳1542300000(北京时间2018年11月16 日0:40:0)进行一次硬分叉协议升级,本文将进行技术详解。

根据bitcoincash.org网站提供的信息显示,

比特币
现金(BCH)网络将于UNIX时间戳1542300000(北京时间2018年11月16 日0:40:0)进行一次硬分叉协议升级,而使用BCH网络的企业和个人,都应该检查自己运行的软件,以确保自己的软件与这次升级相兼容。

截至目前,已实现兼容的客户端包括Bitcoin ABC 0.18.2、Bitcoin Unlimited Cash Edition 1.5.0.0, 而即将实现兼容的客户端还有bcoin-bcash 1.1.0。

(如果用户因不熟悉或其他原因,也可以将自己的资产存放于支持这次硬分叉升级的可靠交易所,截至目前,已明确支持这次升级的交易所包括币安、火币、coinbase、Poloniex等。当然,如果读者对自己的技术的很有信心,自行操作会是更好的一种选择,因为如果万一出现了链分裂的情况,你就可以第一时间获取到分叉币。)

WechatIMG1

(图片拍自:bitcoincash.org)

以下为这次硬分叉协议升级的具体说明:

摘要

当最近11个区块(MTP-11)的时间中位数 [1] 大于或等于UNIX时间戳1542300000(译者注:北京时间2018年11月16 日0:40:0)时,比特币现金(BCH)将根据此规范执行网络共识规则升级。而从下一个区块开始,这些共识规则的更改将会生效:

  1. 删除拓扑交易排序限制,并强制执行规范交易排序;
  2. 启用OP_CHECKDATASIGOP_CHECKDATASIGVERIFY操作码;
  3. 实施最小交易大小规则;
  4. 为scriptSig(脚本签名)强制执行“push only”规则;
  5. 实施“清理堆栈”规则;

以下部分不是共识方面的更改,而是对比特币现金(BCH)实施的推荐更改:

  1. 对于未来升级的自动重放攻击保护;

规范交易排序

除了coinbase交易之外,区块内的交易必须按交易 id的数字升序排序,它们会被解释为256位的小端整数(little endian integers)。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)全节点必须执行以下规则:

  1. forkid [5]等于0.

当最近11个区块(MTP-11)的时间中位数 [1]大于或等于UNIX时间戳1557921600(2019年5月15日),执行2018年11月份共识规则的比特币现金全节点,应该执行以下更改:

  1. forkid [5]更新为等于0xFF0001,以0xFF开头的ForkID,将被保留,以用于将来的协议升级。

这一特殊的共识规则,绝不能由比特币现金软件钱包来实现。跟随升级的钱包,不应该改变任何东西。

【参考】

[1]中位值时间的描述来自bitcoin.it wiki, [2] https://github.com/bitcoincashorg/bitcoincash.org/blob/master/spec/op_checkdatasig.md

[3]比特币默克尔树设计中的叶节点弱点 [4] BIP 62 [5] forkId是根据重放攻击保护的签名哈希(sighash)规范定义的。

本文来源于“巴比特”,原文标题《比特币现金(BCH)网络11月硬分叉升级技术详解》。

参与评论
收藏
qrcode
相关资讯
写评论

icon-emoji表情