比特币核心会在数据目录里留一个不起眼的小文件:fee_estimates.dat。它记录着节点从最近几百个区块里学到的”多少费率的交易大概多久能进块”这套经验。钱包调用费率估算接口时给出的那些”六块目标""二十四块目标”,底子都来自这里。冷启动的节点没有这些经验,前几天给出的估算会明显偏保守,这个文件就是用来消灭冷启动期的。但它的规则里藏着一个少有人知的保质期。
它怎么攒经验
节点一边处理区块一边统计:这些交易选了什么费率、后来等了几个区块被包进块。统计结果按固定周期刷写进文件——间隔是一个小时一次,不需要你做任何操作。下次启动时节点读回这份文件,费率估算器于是”接着上次继续学”。这也是为什么长期在线的公共节点和刚装好的节点,估算质量差距很大:经验数据的积累没有捷径。
六十小时的保质期
关键规则在读取端:文件只有一致性判断,没有永久有效。如果文件的时间戳距今超过六十小时——也就是两天半——节点会直接放弃读取它,并在日志里留一句警告,说明”为避免提供过期估算,该文件不会被使用”。逻辑很朴素:费率的”市场共识”变化很快,两天半不看新数据的经验,用它做决策可能比不用更糟,宁可退回冷启动状态重新观察。
这里有个容易踩的组合坑:一台只在需要同步时才开机的节点,每次开机发现文件太新于是继续用,用几天关机,下次开机又太旧于是整份作废——估算永远在”半新不旧”和”归零重来”之间摇摆,钱包给出的建议费率忽高忽低。现象像是估算器抽风,根源其实是运行习惯与文件保质期的错配。
那个只能在你自己链上生效的开关
参数表里有一个专门用来关保质期的选项:-acceptstalefeeestimates,默认关闭。它有一个比保质期本身更硬的规则:在主网、测试网或 signet 上打开它,节点会直接以一条启动错误退出,报错明说这个选项在该链上不受支持;只有 regtest 允许。也就是说,这不是”主网上不推荐”,而是根本不给你用。设计意图很清楚:测试环境里区块不连续产生,估算文件天然容易过期,需要一种方式让节点照用不误;而在真实链上,官方不希望任何人拿一份两天半之前的经验去做付款决策。
顺带一个更彻底的细节:如果节点开了 blocksonly 这类不收交易的模式,初始化阶段会干脆不创建费率估算器,连读文件这一步都不做——因为交易永远不会被观察到,读回来的经验也永远无法更新。这类节点适合做数据镜像,不适合兼任费率估算源。
实用清单
第一,把 fee_estimates.dat 视为可再生缓存而不是需要备份的资产:丢了不丢钱,也不影响共识数据,删掉最多少几天经验。真正需要按备份标准对待的是钱包文件与密钥材料,这个文件不在同一等级。
第二,长期离线又需要准确估算的场景(比如只在发交易那天才启动节点),别指望本地估算,直接参照区块浏览器或公共费率源交叉核对,再叠加自己的判断。刚启动的节点在头几个区块的观察窗口里给出的估算,通常比实际市场保守不少,这是设计使然而非故障。
第三,看到日志里那句”too old”的警告不必惊慌,那是保质期机制正常工作,不是文件损坏,也不需要”修复”。想彻底避免这条警告,唯一的办法是提高节点的在线率,让文件在两个半天之内必定被刷新一次。
第四,把这台节点当估算数据源给别人用时,先确认它的运行时长与在线率。一台三天打鱼的节点做估算源,会连累所有信任它的钱包:要么长期返回过时的保守值,要么反复退回冷启动、给出明显偏高的建议。公共估算服务的价值本质上就是”一直在线换来的经验连续性”,这一点在自建时同样成立。
风险提示:费率估算反映历史规律而非承诺,实际入块受网络拥堵影响,不构成任何交易或投资建议;涉及费用请以发送时的实际估算与市场状况为准。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。