钱包的默认六块:txconfirmtarget 怎么接住没传参数的付款 图 1
钱包的默认六块:txconfirmtarget 怎么接住没传参数的付款 · 图 1

钱包的默认六块:txconfirmtarget 怎么接住没传参数的付款

给比特币核心钱包下付款指令时,多数人不带任何费用参数:sendtoaddress 给地址和金额,钱包自己决定出多少钱上链。这个”自己决定”的链条起点,是一个叫 -txconfirmtarget 的钱包参数——默认值六,含义是”平均六个区块内开始确认”。它可以被命令行、配置文件或钱包标志覆盖,但更多时候是被忘记。本文全部以 Bitcoin Core v31.0 源码为准,拆开这个默认目标从设置到生效的完整路径,以及它在费率阶梯里的真实位置。

参数注册与默认常量

src/wallet/init.cpp 里注册着这条参数:-txconfirmtarget=<n>,帮助文本写”Include enough fee so transactions begin confirmation on average within n blocks (default: 6)“。数值落在钱包对象成员 m_confirm_target 上,成员声明处的初始值同样引用常量 DEFAULT_TX_CONFIRM_TARGET = 6(src/wallet/wallet.h)。也就是说,无论你用配置文件还是启动参数,改写的都是同一个字段;没改,它就以六的身份参与每一次费用计算。

它在阶梯里排第几

真正的选价逻辑在 src/wallet/fees.cpp 的 GetMinimumFeeRate,源码注释把用户可控参数列成严格的优先级。第一档:显式给了 fee_rate(coin control 的 m_feerate),直接采用,连默认下限检查都可以被 fOverrideFeeRate 跳过。第二档:给了 conf_target 但没给具体费率,用它做估算目标。第三档才是钱包的 m_confirm_target——前两者都缺省时,六号目标登场,钱包拿它调用链上估算器的智能费率查询。往下还有一串兜底:估算器数据不足返回零时,落入 fallbackfee,且当回退费被设为零(表示禁用)时直接返回;智能估算成功时再与节点内存池当前最低费比较,取高者;最后还有一道 GetRequiredFeeRate,把结果钳到钱包最低费与中继最低费的较大值。默认目标六只在链条最上游起作用,越往下它越可能被显式参数或网络现实覆盖。

六块目标还会决定估算风格

同一函数里有一行容易被略过的逻辑:估算的保守程度取决于这笔交易是否带 RBF 信号——带信号走 economical(取更快分位偏省的估算),不带则用 conservative。而信号与否取自 coin control 或钱包的 m_signal_rbf(受 walletrbf 参数影响)。所以调整 txconfirmtarget 改变的不只是等待时长,它还会通过估算器内部的确认目标到费率分位的映射,改变钱包查询哪一档历史数据。目标越大,取的估算费率越低,这是设计初衷;但目标与分位的换算由估算器根据链上历史完成,没有全网统一承诺”六块等于多少聪”。

实操上的三个边界

第一,参数作用域是钱包实例:多钱包节点上不同 datadir 参数可以不同,用 -loadwallet 后期挂入的钱包按当前启动参数初始化,容易与主钱包行为不一致。第二,它对创建交易与费用提升路径同源生效:bumpfee 类命令若不给新费率,同样沿阶梯取默认目标,改参数会同时影响加急行为。第三,六号目标在费用繁忙期常常”过不了钳”:智能估算结果低于内存池最低费时被抬高、低于钱包最低费时被再抬高,用户看似设了省钱的慢目标,实际出价由网络地板决定——这时日志与 feeCalc 原因字段(FALLBACK、MEMPOOL_MIN 等标签)才是判断真实出价来源的依据,而不是配置文件里那个数字。

风险提示:本文为钱包费用机制科普,参数与默认值以 Bitcoin Core 当前版本源码为准,可能随版本调整;确认速度受全网费率环境影响,本文不承诺任何确认时效或费用水平;不构成投资建议。

怎么确认当前生效值

这个值没有一个专门的查询 RPC:getwalletinfo 的返回字段清单里没有确认目标,源码显示 m_confirm_target 只在钱包加载时从 -txconfirmtarget 参数读入一次(wallet.cpp 里那句 m_confirm_target = args.GetIntArg(...))。要确认现值,可靠的办法是核对节点实际的启动命令行(getsettings 或进程参数),或者观察不带费用参数的付款行为。想临时改一次而不重启,应当在每次付款调用里显式传 conf_target 参数——spend 类 RPC 的帮助文本对这个参数的默认提示写的就是”wallet -txconfirmtarget”,传了它这一笔用新目标,其余继续吃默认值;把”改全局参数”当”改这一笔”是新手常见的范围错误,改的是整个钱包实例的缺省行为,影响之后每一笔不带参数的付款。