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