跳转到正文
buybitcoinsmart

术语表 /交易与手续费

内存池策略

又称 Mempool policy。

内存池策略是什么?
内存池策略是节点在接受并转发一笔交易之前额外适用的一套规则,比共识规则更严格,且可由运行该节点的人自行调整。

共识决定一个区块可以合法包含什么;策略则决定在此之前哪些交易会被转发。Bitcoin Core 将标准交易限制在400,000个权重单位以内,并拒绝支付低于其转发下限的交易,这两项限制都不在共识规则之中。一笔交易可以完全有效,却哪里也传不出去。

运作方式

策略是位于共识检查之前的第二道关口。到达节点的交易必须有效,还必须看起来是运营者愿意存储和转发的那类交易。未通过第一项检验,交易在所有地方都无效;未通过第二项检验,它只是在这里不受欢迎,而在隔壁的节点上可能完全可以接受。

Bitcoin Core 的默认设置涵盖几类限制。标准性规则限制哪些脚本类型可以被转发,使新颖或格式错误的花费条件在网络理解它们之前不会扩散。大小限制将标准交易限制在400,000个权重单位以内,即一个区块的四分之一。手续费限制设定转发下限,在30.0版本中由1 sat/vB 下调至0.1,同时设定单个输出的粉尘阈值,该阈值仍维持原来的3 sat/vB。拓扑限制将相互关联的未确认交易组限制在64个成员和101 KB 的虚拟大小以内,这就是31.0版本中取代原先25个祖先交易和25个后代交易计数的集群规则。

这些数字每一个都是设置项,而不是法律。运营者可以用 -minrelaytxfee 提高转发下限,用 -datacarriersize 改变 OP_RETURN 输出可以携带的数据量,或者运行默认设置刻意更严格的 Bitcoin Knots。数据载体输出的83字节上限成为多年来争论最激烈的策略问题,最终以 Bitcoin Core 30.0将默认值提高到100,000字节收场,实际上等于取消了上限,同时仍保留 -datacarriersize=83 供希望沿用旧行为的人使用。

策略的变化也比共识更快。完全的 replace-by-fee 于2024年10月在 Bitcoin Core 28.0中成为默认设置,同一版本还加入了父交易与子交易一并转发的机会性转发,这两项改动在运营者升级后立即生效,没有任何形式的分叉。

在哪里会遇到它

策略会以您自己钱包报错的形式出现,远早于任何矿工的介入。提示转发手续费、粉尘输出、未确认花费集群过大或非标准脚本的拒绝信息,都是策略在起作用,每一条都意味着这笔交易从未交给任何一个对等节点。

它也解释了为什么一笔交易有时在一个区块浏览器上存在,在另一个上却看不到。浏览器显示的是其自身节点的内存池,因此被该节点策略过滤的交易在那里不可见,在其他地方却正常确认。也可以通过提交端点把交易直接发送给矿工,完全绕过转发,这就是非标准交易偶尔出现在区块中、却从未被看到在等待的原因。

对购买并持有比特币的人来说,实际的启示范围有限但有用。策略是钱包拒绝创建300聪输出的原因,是一串未确认花费最终不再接受下一笔子交易的原因,也是卡住的交易有时需要重新广播而不是加价的原因。

内存池策略 vs 共识规则

违反共识规则会使区块无效,并被整个网络永久拒绝。违反策略规则只意味着您的交易在等待,或者根本无法传播,而它仍然完全可以被合法挖出。策略也是软分叉预演的地方:新的花费类型通常在激活之前或同时被设为可标准转发,以便网络能够安全地承载它们。共识是宪法;策略是每个节点各自的惯例。

请勿混淆

常见问题

一笔交易有效,却仍然被拒绝,这可能吗?

可能,而且每天都在发生。策略位于共识之前,因此一笔没有违反任何共识规则的交易,仍可能因支付低于下限、创建粉尘输出或使未确认集群超出限制而被拒绝转发。

谁来决定内存池策略?

每个节点运营者通过选择软件和设置来决定。Bitcoin Core 自带一套默认设置,Bitcoin Knots 自带一套更严格的设置,二者都可以通过命令行选项调整,而不会改变节点接受哪些区块。

相关术语

交易与手续费中的更多术语

阅读本页英文版