bitcoind -printpriority 是一个藏在调试选项里的开关:打开之后,节点在给自己组块时,会把每一笔被选进块的交易连同它的费率一起写进日志。它不改任何共识或中继规则,纯粹是给组块决策装的一台记录仪。参数定义在 src/init.cpp,落地的行为在 src/node/miner.cpp 里。
参数怎么定义
在源码里它是这样注册的:一个 DEBUG_ONLY 的调试测试类参数,帮助文本写着”在组块时按每千虚拟字节多少币的单位记录交易费率(默认关闭)“,默认值取自 DEFAULT_PRINT_MODIFIED_FEE,而这个常量是 false。也就是说默认不打印。要开就得显式带上 -printpriority。它归类在调试测试类目下,和一堆只用于内部诊断的开关放一起,普通节点不会在正常帮助里注意到它。

打印发生在哪里
真正的打印发生在区块组装器把一笔交易加进候选块的那一刻。组装器在把交易塞进块、累加重量和签名操作数、累加费用之后,检查一个 print_modified_fee 选项;为真时,它输出一行”fee rate 某费率 txid 某交易哈希”。要点在”modified”这个词:它取的是交易经调整后的费用,也就是把外部通过 prioritisetransaction 施加的费用增减也算进去后再折算费率,而不是交易原始上链费用。所以你在日志里看到的费率,反映的是这台节点此刻在组块排序里真正用来排座次的数字。
它能帮你看出什么
对跑测试网或做挖矿接口开发的人,这行日志是验证”我改的优先级、我设的组块策略到底生效没有”最直接的一手证据。比如你怀疑 prioritisetransaction 的费用偏移没起作用,看日志里对应交易那一行的费率是否和原始费率不同就能判定;又如你调整了祖先费率的排序逻辑,日志能回放组块实际吃进了哪些交易、各自按什么费率被吃。相比 getblocktemplate 只在被请求时给一份静态模板快照,-printpriority 是在节点自发组块的时刻把决策流水摊开。
边界与代价
它记录的是这台节点的组块视图,不代表全网通行的排序,也不影响别的节点怎么组块。它是 DEBUG_ONLY 调试项,帮助说明里也归在内部诊断一类,把它长期挂在生产节点上会把大量”fee rate … txid …”写进日志文件,在组块频繁时占用磁盘。要控制日志膨胀,可以配合日志分类或限速类开关,或者只在复现问题的窗口里临时打开。它不改变任何交易、不动内存池、不碰共识,价值只在观测这一侧。
默认关闭与打开方式
源码里它的注册携带 DEBUG_ONLY 标记,归在调试测试类目,默认值来自常量 DEFAULT_PRINT_MODIFIED_FEE,取值为假——不带参数启动时什么都不会多打,要观察就在启动命令或配置文件里显式加 -printpriority。打印动作发生在组装器把一笔交易正式计入候选块之后:累加完重量、签名操作数与费用,若 print_modified_fee 为真,就输出一行”fee rate 某费率 txid 某哈希”。这里的费率是原始费用经外部调整后的折算值,prioritisetransaction 对某笔交易施加的费用增减会原样体现在这一行里,所以它是验证优先级注入是否真正影响组块的最直接证据。与 getblocktemplate 的关系是互补而非替代:后者在矿机请求模板时给一份静态清单,-printpriority 在节点自发组块的每个入选瞬间打点,一个像快照、一个像流水。还有一点容易踩坑:这行日志走的是无条件信息级输出,不挂在任何 debug 分类下,无法用日志分类单独过滤掉,只能靠参数本身控制。组块频繁时它会持续写盘,建议只在排查窗口内临时开启、看完即关,这也是节点日志运维的一般纪律。本文仅讨论节点软件机制与日志观测,不构成任何投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。