比特币核心的早期版本没有对它们存储在内存池中的未确认交易数量设置任何限制(请参阅第244页的“内存池和孤块池”)。当然,无论是内存(RAM)还是磁盘空间,计算机都有物理限制——一个完整的节点无法存储无限数量的未确认交易。比特币核心的后续版本将内存池的大小限制在大约一天的交易量,仅存储具有最高费率的交易或交易包。
这对大多数情况都非常有效,但它会产生依赖性问题。为了计算交易包的费率,我们需要父交易和子交易——但如果父交易的费率不够高,它就不会保留在节点的内存池中。如果一个节点收到一个子交易而没有访问其父交易,它就无法对该交易进行任何操作。
解决这个问题的方法是将交易作为一个整体进行中继,称为交易包中继,这样接收节点就可以在对任何单个交易进行操作之前评估整个包的费率。截至目前,致力于比特币核心的开发人员在实施事务包中继方面取得了显著进展,而且在本书出版时可能会提供一个有限的早期版本。
交易包中继对于基于时间敏感的预签名交易协议特别重要,例如闪电网络(LN)。在非合作情况下,一些预签名交易无法使用RBF进行费率提升,因此它们必须依赖CPFP。在这些协议中,一些交易可能也会在需要广播之前很长时间被创建,从而有效地无法估计适当的费率。如果一个预签名交易的费率低于进入节点内存池所需的金额,那么就无法通过子交易对其进行费率提升。如果这阻止了交易及时确认,一个诚实的用户可能会损失金钱。交易包中继是解决这个关键问题的解决方案。