为了BCH十一月份的网络升级能够顺利进行,BCH的各个开发团队都已经为此准备了将近半年时间。Bitcoin ABC 早已发布了更新所需的软件新版本,并进行多次测试和修复。Bitcoin Unlimited开发团队紧随其后,也已经发布了 1.7.0,不过其功能更加丰富。
根据BCH关于11月15日升级的规范,BCH将会在协议中添加了两个功能:用于OP_Checkmultisig(Verify)的Schnorr签名和在脚本中执行Minimaldata。添加Schnorr对OP_Checkmultisig的支持,这将允许更复杂的机制来处理多签名交易,所有签名检查操作都将支持Schnorr签名。通过在脚本中强制使用Minimaldata(也称为“Minimaldata”规则),升级将完成BIP62可延展性向量。这种增强旨在使“BCH网络上的大多数交易(包括所有P2Pkh交易)是不可扩展的。
以上两项是BCH十一月份升级中所有节点必须要同步的协议共识。BU开发团队在新发布的1.7.0软件版本中也包含了这两项内容的更改。不过,BU的软件还包含了一项比较特别的内容:基于Ancestor Grouped Transactions (AGT)的Child-Pay-For-Parent (CPFP)实现。
新的CPFP和未确认交易的长链
之所以BU会在这次升级中添加新的CPFP代码,其主要作用是提升Mempool未确认交易限制。
未确认交易限制是指对一笔未确认交易的转账次数进行限制,这为了防止零确认交易情况下出现回滚或者双花的风险。BCH的未确认交易限制是25,也就意味着一笔未确认交易最多只能在10分钟的时间内连续转账25次,多出的交易次数将不会被打包进区块。这些限制是BCH从BTC身上沿袭过来的,2015年7月限制代码被添加到比特币中。
在之前的讨论了中,基于BCH的SatoshiDice运营者曾在在2019年8月3日在BCH社区论坛R/BTC发帖表达了网站对于BCH的诉求,他们希望BCH的技术开发人员能在今年年底取消BCH的25未确认交易限制,并承诺在更改后向BCH发展基金捐赠1000个BCH。他们表示此限制是经营赌场的障碍,并且阻止他们采取新的举措前进。
MemoBCH在8月16日进行了跟进,表示BCH的25未确认交易限制使Memo用户难以在每个块间隔发送25条以上的消息。显然,25未确认交易限制已经成为BCH的正在问题。
对于这个问题,BU开发人员通过以下方式解决了BCH的问题:
1、推出更快的CPFP算法
BU开发人员Peter Tschipper消除了ABC使用的child-pays-for-parent (CPFP)算法中的瓶颈,该算法使处理未经确认的长链交易变得缓慢(BU以前不支持CPFP,所以它没有这个问题)。随后推出了新的CPFP算法,通过引进AGT原则使得其速度比之前的快100多倍。AGT是将一组祖先交易看作单个交易来实现的分组方法,这种分组方法使我们处理包的速度比其他包挖掘方法快几个数量级,因为在挖掘未确认链的一部分时,我们不再需要不断更新后代状态。
下图显示了在BU所实行的CPFP和bitcoin core所实行的CPFP的情况下,交易时间的进程与未经确认的交易链的最大长度这件的关系。这意味着BU可以将未确认交易的最大链长增加2个数量级,而且不会降低性能。
2、降低零确认交易的风险
虽然增加Mempool未确认交易限制是可行的,而且是有效的,但是这也增加了双花攻击成功的机会。因此为减轻这种副作用,BU开发人员Andrew Stone构建了一种方法,允许矿工以不协调的方式增加他们的mempool链接限制,并且对0-conf安全性的影响最小。它使用BU“覆盖网络”来保留这些链上交易,然后一旦ABC节点接受它们,就将它们转发给ABC节点。
随后,BU开发人员与Bitcoin.com矿池协调,开始在主网上挖掘多达500笔未确认交易的链。这表示最长链交易时间增加了20倍,而Mempool未确认交易限制可以增加到500。这意味着对于交易频次比较高的应用,BCH将会表现的更好。
最后BU开发团队也对CPFP进行了说明:CPFP在BCH中的作用与在BTC中的作用是非常不同的。BTC的正常操作点是满区块、收费浮动。CPFP对于确保合理的用户体验是必要的。在BCH中,CPFP只在特殊情况下才真正有用。我们不会以牺牲普通用户为代价来优化特殊情况。
除了添加CPFP,BU在此次升级中还有几项变更:通过Graphene基元进行Mempool同步、智能的未确认交易转发、石墨烯2.1版和IBLT规范、新的死锁检测机制、新的getblockstats rpc调用、交易索引数据库的改进……所做的一切都是为了优化BCH,为用户提供更多的便利。
写在最后
Mempool未确认交易限制在中本聪首次发布比特币客户端时是没有的,是被Bitcoin core开发者添加进去的,而现在BU为了用户推出解决办法,正是验证了一句话:坏的开发者发明问题,好的开发者解决问题!
领取专属 10元无门槛券
私享最新 技术干货