作者:Gloria Zhao
来源:https://bitcoinops.org/zh/newsletters/2023/06/28/
本文为 Gloria Zhao 在 Optech Newsletter 上编写的 “交易池” 系列周刊的第七篇。
前一篇文章讨论了保护节点资源的问题。由于各个节点的资源不同,因此有些规则是可配置的。我们还提出了为什么最好统一规则的理由,但是哪些内容应该包含在这个规则里呢?本文将讨论网络范围的资源概念,这对于可扩展性、可升级性和启动和维护全节点的可访问性等方面至关重要。
正如在之前的文章中讨论的那样,比特币网络的许多意识形态目标体现在其分布式结构中。比特币的点对点性质允许网络规则从各个节点运营者所选择的粗略共识中产生,同时抑制在网络中获取不当影响力的企图。然后这些规则由每个节点通过对每个交易进行独立验证来强制执行。一个多样化和健康的节点群体需要保持节点运营成本低廉。在全球范围内拓展任何项目都很困难,而在不牺牲去中心化的情况下拓展就像是一只手被绑在背后进行战斗。比特币项目通过严格保护其共享的网络资源(UTXO 集、区块链的数据占用和处理所需的计算工作量以及演化比特币协议的升级钩子)来尝试实现这种平衡。
我们无需重述整个区块体积战争来认识到限制区块链增长是必要的、我们以此来保证个人运行得起自己的节点。但是,区块链的增长在交易池规则层面上也会得到抑制:minRelayTxFee
的值为 1 sat/vbyte,表示了“对超多副本的永久存储的无限需求”的最低成本。
最初,网络状态是通过保留所有仍有未花费输出的交易来跟踪的。随着 UTXO 集的引入作为跟踪资金的手段,区块链的这一部分大大减少了。自那时以来,UTXO 集一直是一个核心数据结构。特别是在初始区块下载(IBD)期间,但也是普遍情况下,UTXO 查找占据了节点所有内存访问的主要部分。Bitcoin Core 已经使用了一个手动优化的 UTXO 缓存的数据结构,但 UTXO 集的大小也决定了集合中有多少交易无法进入节点的缓存。较大的 UTXO 集意味着更多的缓存未命中,从而降低了块验证、IBD 和交易验证速度。粉尘限制是一种限制 UTXO 创建的策略,特别是限制那些可能永远不会被花费的 UTXO,因为它们的金额不足以支付它们的成本。即便如此,有着数千笔交易的“粉尘风暴”近在 2020 年仍发生过。
当使用裸多签输出将数据发布到区块链上变得流行起来时,标准交易的定义已经修改,允许使用单个 OP_RETURN 输出作为替代方案。人们意识到,无法阻止用户在区块链上发布数据,但至少这些数据不需要永远存在于未使用交易输出集中。Bitcoin Core 0.13.0 引入了一个启动选项 -permitbaremultisig
,用户可以切换以拒绝带有裸多签输出的未确认交易。
尽管共识规则允许自由格式的输出脚本,但 Bitcoin Core 节点只会中继少数一些被较好理解了的模式。这样更容易推理网络中的许多问题,包括验证成本和协议升级机制等。例如,交易中包含操作码的输入脚本、具有超过 15 个签名的P2SH输入或者每个见证堆栈中有超过 100 个项的 P2WSH 输入都将使该交易成为非标准交易(请查看此政策概述以获取更多政策示例及其动机)。
最后,比特币协议是一个不断发展的软件项目,需要不断演进以应对未来的挑战和用户需求。为此,有一些升级钩子被故意保留为共识有效但未使用,例如附录、taproot 叶子版本、见证版本、OP_SUCCESS 以及一些 no-op 操作码。然而,就像因为没有单点故障而阻碍了攻击一样,网络范围下的软件升级要涉及到协调数以万计的独立节点运营者。在其含义被明确定义前,节点不会转发使用了保留的升级钩子的交易。这种阻碍旨在防止应用程序各自独立地创建相互冲突的标准。这种冲突使得共识无法在采用一个应用程序的标准的同时避免另一个标准无效。 此外,当共识真的发生变更时,没有立即升级的节点(因此不了解新的共识规则)无法“被骗”去接受一个现在无效的交易进入他们的交易池中。这种主动阻碍方式可以帮助节点具备向前兼容性,并使网络能够安全升级共识规则而不需要完全同步地进行软件升级。
我们可以看到,使用交易池规则来保护共享网络资源有助于保护网络的特性,并使未来协议的开发路径保持开放。与此同时,我们正在看到,如何在严格限制区块重量的情况下来扩展网络的矛盾正在推动着最佳实践、良好的技术设计和创新的采用:下周的文章将探讨交易池规则作为二层协议和智能合约系统的接口。