一、账务里多了一条黏人的记录
闪电节点的链上钱包会遇到一种黏人状态:一笔交易被另一笔 RBF 交易顶替,链上走的是新版本,但 LND 内部交易库里那条旧记录还挂着——界面一边显示在途,余额怎么都对不上,要等替代交易真的被挖出来,钱包才会自行消解这场冲突,而这段时间可能长得离谱。LND 在 walletkit 里为此留了 RemoveTransaction,命令行入口 lncli wallet removetx,参数只有一个 txid。
二、命令的准确语义
按 v0.19.0-beta 命令源码里的帮助文本逐句读。removetx 把指定 txid 的交易连同它的所有子交易从底层内部钱包中移除,文本明确两件事:交易必须仍未确认;典型动机正是被 RBF 替代后钱包迟迟不解冲突的等待期。返回结构只有一个 status 字段。三个限定要记住:第一,未确认是硬前提,已确认交易不归它管;第二,移除的是 LND 本地记账,链上什么都没发生;第三,动作范围是那笔交易加它的子交易,不是整条地址历史。
三、官方后悔药:publishtx 重播
帮助文本把恢复路径写得非常具体。如果误删了一笔其实还活着的交易,用 wallet publishtx 把原交易重新广播一遍,成功后这笔交易的输出会重新登记回钱包;如果重播因为内存池里已有 RBF 替代品而失败,那恰好证明当初删得没错。文本还补了一句兜底:一笔被移除的交易日后真的被确认,资金仍会被钱包重新登记——删除动作不会让你在链上丢币,它改变的是本地视图和与视图联动的选币逻辑。这使它和比特币核心的 abandontransaction 属于同一族的记账修正,区别在于 LND 围绕 RBF 冲突设计,并且自带 publishtx 这条官方回滚路径,操作上比核心版更有一攻一防的对称感。
四、动手前三步核对
第一步,确认目标确实未确认:别看界面状态就动手,向比特币核心 getrawtransaction 查确认数,或看 getmempoolentry 它还在不在池里。第二步,确认冲突里另一笔交易存在且更接近上链:内存池中是否真有花费同一输入的替代交易、费率是否更高;如果两条都没进池,删掉旧记录不会带来任何进展,你需要的其实是重建交易重出价。第三步,先备份原始交易十六进制:publishtx 回滚依赖你拿得出完整原文,动删除命令前把它存进本地文件,是成本最低的一步保险。
五、它不该干的三件事
不要用它清理已确认的历史记录——那是发票与付款历史命令的地盘,removetx 只认未确认。不要把它当隐私工具——删的是本机数据库行,链上公开记录一个字都不会变。不要在多任务并发动同一钱包的部署里随手执行:接口注释同时提醒请求内部分字段随 UtxoSweeper 内部机制演化、不保证长期稳定,属于贴着实现开的窗;并发选币流程正持有这笔交易的视图时删除记账,会让其他任务短时间对着过期数据做决定,先停并发任务再操作。
六、什么时候该耐心等
如果冲突双方都迟迟不上链,删记录毫无意义——两条都没赢的时候,正确动作是重新出价:用原来的输入重建交易拉高费率重发,或对着仍在清扫排队的输出走 wallet bumpfee。removetx 的最佳适用窗口只有一个:链上已经分出赢家、本地却还背着输家的账。按这条标准判断,能避开绝大多数误删;误删了也有 publishtx 对称兜底,但前提仍然是你留了原文。
风险提示:本文涉及的钱包操作影响本地账务视图,请先备份再操作。本文不构成投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。