比特币的“交易替换”规则允许用更高费用覆盖同一笔钱的另一个花法,这本是加急手段的基础,却也催生了对攻:一方不停用微小的加价反复替换自己的交易,逼另一方一次次掏出更高的绝对费用应战,打一场费用拉锯战。社区把这种打法称为“替换循环”(Replacement Cycling),它主要针对的是依赖加费才能确认的交易,闪电网络强制关闭和零确认收款场景首当其冲。
攻击发生在什么样的对局里
最常见的背景是闪电通道。双方各持一笔可以单方面公布的“惩罚性退出交易”,两笔交易花的是同一笔通道资金,互相冲突,谁进块谁结算。为了让自己的退出交易在费用市场里挤得上去,双方通常会带一笔子交易做 CPFP 加费——父交易费用很低,靠孩子补钱。
攻击者不需要打败你的交易本身,只需要操纵“谁的交易在内存池里活着”。流程是:你先广播自己的退出交易加加费子交易;对手随后广播他那一版冲突退出交易,配一个出价更高的子交易,把你的整族挤出内存池——这一步对你未必是坏事,因为两版退出交易哪个确认都能结算。真正的杀招在后面:对手再广播一笔与自己前一笔冲突的新交易,但这笔不再给他的退出交易补费。他的退出交易因费用过低被内存池丢弃,而你的交易早已出局,内存池里一时间谁都没有。你想重播原交易,他再重复一遍循环。只要他控制的输入允许反复替换(要么换不同的 UTXO 出资,要么按规则逐轮抬高费用),这个循环可以持续到他满意为止。
为什么费用天平是歪的
BIP125 定义的替换条件里有一条“费用增量”规则:新交易不仅要费率更高,绝对费用还要比被它替换掉的整族费用总和再多付一笔增量费,增量按新旧体积差与递增中继费率折算。这条本意防止“便宜换贵”骚扰的规则,在对抗中变成了一台抽水机:诚实方每一轮必须压过对手当前占位的整族费用,出价只能单调上涨;攻击方替换自己的交易时只需多付最小增量,单位成本极低。研究者在 2023 年 10 月公开这一攻击形态时给出的核心判断就是这种成本不对称:对攻击者接近廉价,对防守方则可能贵到放弃。
谁最需要担心
时间敏感的协议最危险。闪电路由器在强制关闭场景里必须在 HTLC 超时前把赎回交易推上链,费用拉锯拖得越久,错过截止时间的风险越大,输掉的就不只是手续费。其次是零确认依赖方:对方口头说“交易已在内存池”,但内存池里躺着谁、由谁出价,攻击者有巨大操纵空间。蚂蚁搬家式的普通用户单笔转账通常感受不到,因为攻击成本虽小也要真金白银,攻击者一般会挑对局紧张、金额可观的时刻出手。
协议层的修补与用户的防御
比特币核心近年上线的 v3 交易规则与“临时锚点”输出,就是为了压缩这类操纵空间:v3 限定单亲单子的极简拓扑,允许“兄弟替换”让你换掉对手占位交易时不必替对方的带宽买单,锚点输出则不再能被第三方随意花走补费。围绕锚点的循环变种在 2024 年 12 月的开发者邮件列表里仍被继续讨论,可见对抗是持续演化的,没有一劳永逸的补丁。
站在普通用户角度,防御清单并不玄学:收款时别把“未确认”当“已到账”,把等待确认写进风控底线;运行闪电节点的一方要为赎回交易预留充足的超时余量,别把截止时间压到贴着链上拥堵极限;准备持续重播自己的能力,重播本身就是对抗循环的主要解法,而不是无限追价;对赌的是时间而非手续费的输赢时,优先用确认数说话。
风险提示:本文讨论的是交易广播与费用市场的攻防机制,涉及的规则细节会随节点软件版本演进,请以对应版本的官方文档为准;文中不构成任何投资建议,也不评价任何资产的买卖时机。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。