序
BCH的开发者已经在商讨下一次升级事项了,具体会升级哪些东西将在2019年8月15日之前敲定。现在升级草案已经出来了。
【看上去“不痛不痒”的升级草案】
升级草案的围观地址
https://github.com/bitcoincashorg/bitcoincash.org/blob/master/spec/2019-11-15-upgrade.md#summary
注意了,这个草案正在进行中,在8月15日之前很可能会添加新的东西。但是目前这个草案提及的协议上的变化一共就这四条:
1 为操作码OP_CHECKMULTISIG(VERIFY)启用Schnorr签名
2 在脚本中强制执行最小推送和最小编码规则。
3 实施NULLDUMMY
4 更改脚本中限制签名操作的规则
这几条看上去平平无奇,一点都不给力。于是我找到一个比较熟的开发者询问他,为什么这次的升级怎么都是些“无关痛痒”的变化。
他告诉我: 上述四条变化中的2和3就是用来修复延展性BUG的,不知道有其他什么比这更有关痛痒的了。
原来是这样! 早就听说BCH要在11月份修复延展性BUG了,只是这个草案中的表达方式过于术语化,让人摸不着头脑。
【什么是延展性BUG】
当一笔交易被广播出去后,在获得确认之前,某些恶作剧的矿工可以使用别的签名方式替换这笔交易原来的签名方式。因为交易的TXID其实就是对交易内容进行哈希计算获得的,如果里面的签名方式变了,TXID也就会变掉。这就是延展性BUG。
但是就算受到了延展性攻击,交易的资金本身不会受到任何影响,该转给谁还是转给谁。
唯一受到影响的就是那些依赖TXID的应用,比如交易所。他们会记录每笔交易的TXID,如果TXID发生变化就容易导致账目混乱。所以交易所都要求至少一个确认才入账。
由于这个BUG造成的影响很小,所以一直以来很多人觉得修不修这BUG都无关紧要。
【修复延展性BUG有什么意义】
1 让交易所接受0确认充值成为了可能。
我记得对BCH最友好的交易所coinex的CEO杨海坡曾经说过,如果BCH修复了延展性BUG,那么coinex可以考虑接受0确认充值。
有人会问:交易所接受0确认充值不怕被攻击吗?说实话,还真的不怕。因为他们可以设置0确认充值入账,6个或者更多个确认才可以提币。当然了,如果真有交易所接受0确认充值,应该也都是小额的。
2 使doublespend proof有了意义
double spend proof是BCH的双花检测工具。开发者早就在开发这个工具了,但是当他们写到一半,发现必须先修复延展性BUG,才可以继续往下写,否则这个工具毫无意义。
先说一下这个检测的是什么双花。
BCH有两种双花攻击的方式,一种是需要大量算力配合的双花攻击,需要的成本非常高。不可能用来双花小额交易。
还有一种是快速双花: 比如有某个出售数字商品的商家支持BCH付款,他接受0确认支付,只要显示收到BCH了,就立刻自动发货(数字商品)。这时候攻击者就可以尝试快速双花攻击了。他先给商家转账一笔BCH,这里称之为TX1;然后同时把这笔资金转给自己的另外一个地址,这里称之为TX2,TX2会通过工具以更快的速度传播到全网其他节点,尤其是让矿工先收到。当商家的系统显示出TX1时,他会以为已经到账,于是自动发货,但是矿工却打包了TX2。最后TX1就会被作废,商家产生了损失,攻击成功。
因为无需算力,快速双花的攻击成本是远远低于第一种攻击方式的,因此对小额0确认支付存在威胁,当然这种快速双花成功率也非常低。但是从经济角度看,攻击者因为有利可图,是存在攻击可能性的。
而double spend proof这个工具就是用来专门检测快速双花攻击的。这个工具会监听全网的BCH节点,如果发现存在双花交易,就会发出警告,提醒收款方。收款方如果发现存在双花,可以拒绝这笔交易,或者要求必须获得一个确认。
11.15之后,我们应该会看到主流的BCH钱包陆续添加double spendproof。届时,一笔交易有没有被双花,用户可以直观的看到状态,不像以前那样纯靠感觉了,这会极大的提升用户对于0确认交易的信心。当然对于交易所来说,因为这个工具的存在,接受0确认充值的风险又被极大的降低了。
【当初BTC是如何修复延展性BUG的?】
BTC的开发团队core一直力推闪电网络,但是他们发现如果不修复延展性BUG,闪电网络就会变得很难用。于是他们使用软分叉升级segwit来“修复”这个BUG。之所以我要打引号,是因为只有segwit地址才避免了延展性BUG,而普通地址的延展性BUG依旧存在。
而BCH则是全面的解决了延展性BUG,因此在下一次升级之后,BCH也可以轻松的部署闪电网络了(虽然我觉得这玩意没啥用)。
结束语
再强调一遍,这个草案不是最终版,在截止日之前,很可能会添加新的东西进来。
另外有些非协议层面的变动也在进行中,比如我上一篇文章提到的统一地址格式的事情,已经有大交易所确认在下次升级后全面启用cashaddr了。