比特币节点关停时会把内存池里的交易连同元数据写进数据目录的 mempool.dat,下次启动自动读回——这是 -persistmempool(v31.1 默认开启)的常规循环。但这份文件还有一重身份:跨节点共享”在途交易清单”的介质。v26.0 起,importmempool RPC 让你不必重启、不必改数据目录,就能把另一台节点导出的 mempool.dat 灌进自己的内存池。
一条不显眼却重要的警告
importmempool 的帮助文本开头就把风险摆明:“Importing a mempool.dat file and attempt to add its contents to the mempool. Warning: Importing untrusted files is dangerous, especially if metadata from the file is taken over.”——导入不受信的文件是危险的,尤其当你连文件里的元数据也照单全收。这句话里”元数据”三个字,正是这个 RPC 全部复杂性的来源。
交易本身是公共可验证的:任何节点拿字节重跑一遍验证,结论一致。但 mempool.dat 除交易外还记录着原节点对每笔交易的本地账目——大概三类:
- 入场时间:这笔交易是什么时候进池的。它影响过期判断和队列里的相对位置。
- 费用加权值(fee delta):由
prioritisetransaction设置的人为加减分,矿工节点常拿它偏爱某些交易。 - 未广播集合:记录哪些交易还没向对端播出去,是节点自己的”欠账本”。
这些账目是别人的上下文,不是共识数据。照抄别人的账本,可能改变你自己内存池的行为。
三个开关,默认值偏保守
importmempool 第一个参数是文件路径,第二个参数对象里三个布尔值精确对应上面三类账:
use_current_time,默认 true:给导入的交易用当前时间当入场时间。设 false 才沿用文件里的原始时间戳——适合”恢复自己节点上原样时间”的场景,从别人节点导入时慎用。apply_fee_delta_priority,默认 false:是否把文件里的费用加权值叠加到你的池子上(注意是叠加,不是覆盖)。官方发布说明专门提醒:如果你真要设置优先级,更稳妥的做法是用getprioritisedtransactions读出两边的账,再逐笔prioritisetransaction重新表达——直接开这个开关,容易对同一笔交易双重加权。apply_unbroadcast_set,默认 false:是否接管”还没广播出去”的欠账记录。默认关,意味着导入的交易会走正常的广播流程重新推给对端。
三个默认值合起来读就是一句话:只收交易字节,不收别人的账本。
使用时机与失败形态
典型用法有二:升级或重启前,用 savemempool 导出、起新节点后导入,把重启期间正在排队的交易清单带给新版本(帮助文本还留了一句坑:“Dumps the mempool to disk. It will fail until the previous dump is fully loaded.”——上一次的导入没完成前,导出会直接失败);以及跨节点喂池子,比如给一台刚同步完、内存池还很空的节点快速补上网络在途交易。
失败形态各有名目:节点还在初始块下载时导入,会得到 “Can only import the mempool after the block download and sync is done.”;文件本身有问题则返回 “Unable to import mempool file, see debug.log for details.”——细节在日志里,RPC 只给一句指引。导入成功的返回是一个空对象,别把”没有输出”当成没有成功。
账本从哪来、到哪去
补一张 mempool.dat 的流转图。节点正常关停时把交易与三类元数据写入数据目录,下次启动自动读回,这是 -persistmempool 的默认循环。savemempool 手动触发同样格式的导出,运行中随时可取快照。importmempool 自 v26.0 起从任意路径读文件入池,不碰数据目录、不重启,适合跨节点搬运。loadmempool 自 v30.0 起提供,按默认路径补一次导入。四者共享同一条底线:导入不是覆盖,文件里的交易仍要过一遍与常规入池完全相同的共识与标准性检查,过期、双花、不合规的都会被挡下,池子里留下的只有今天仍然合法的那部分。元数据则另算——自动读回时账本是自己记的,天然可信;跨节点导入时,三本账各归各的开关表态。
风险提示:导入外来 mempool 文件会直接影响你节点看到的费率环境与(在开启开关时)队列账目,用于挖矿或费率敏感业务前先确认来源可信;本文不构成投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。