为隐私多花多少钱有预算:-maxapsfee 与”避免部分花费”的讨价还价
钱包选币时经常要在两难里挑一边:把同一地址下的一堆零钱整组端走,链上更干净、隐私更好,但手续费更高;只挑刚好够付的零钱,省钱,却暴露了”这组钱是同一家”的聚类线索。比特币核心给这个两难设了一个可以报价的预算:-maxapsfee。
帮助文本里的原话
Bitcoin Core v31.0 的 wallet/init.cpp 里,这条参数登记在钱包分组,帮助文本的说法是:如果启用部分花费避免(partial spend avoidance)能带来额外开销,最多愿意为此多付多少绝对费用。注意两个关键词——“绝对费用”意味着单位是币本身,不是费率;“额外”意味着比较基准是”不启用时的费用”。默认值取自 wallet.h 的 DEFAULT_MAX_AVOIDPARTIALSPEND_FEE,为 0。
默认 0 并不是”关闭”。真正的开关藏在选币代码里:wallet/spend.cpp 在构造交易时,会分别试算”不整组”和”整组”两种方案,只有当整组方案的费用不超过不整组方案的费用加上 m_max_aps_fee 时,才采用整组方案。预算为 0 时,规则退化成”两边完全持平才选整组”;想让钱包彻底不掺和这套隐私权衡,要显式设成 -1——源码对字符串 -1 有专门分支,写 -1 即关掉这条路。
一条高费用警示线
钱包初始化时还有第二段逻辑:如果你填的值超过 HIGH_APS_FEE(v31.0 里定义为一个比特币的万分之一,即 0.0001 枚),启动时会被塞进一条警告,原文大意是”这是你为了优先部分花费避免、在正常费用之上愿意支付的最高交易费用”。这条警示的用途不是拦你,而是提醒单位没搞错——它很容易被当成费率填,而它其实是每笔交易多花的聪数预算。
和相邻两个概念划清界限
第一个容易混的是避免部分花费开关本身。avoidpartialspends 决定”要不要在选币时把同地址的输出当一个整组看”,-maxapsfee 决定”愿意为这个整组多看一眼的方案多付多少钱”,一个是立场、一个是预算。另一个容易混的是找零折损线 -discardfee,它管的是”不值钱的零头干脆别当零头、直接烧进手续费”,同样和隐私无关。
还要补一句口径:部分花费避免的”组”是钱包按地址归组的结果,与链上聚合规则(同一地址的输出攒到一百个会拆组)共同决定钱包实际看到的候选集合,所以同样的参数在不同钱包里效果并不相同——参数只影响你这一台钱包的算账,不会改变网络对交易的判断。
什么时候值得调
如果钱包的默认行为经常”为省几聪把手指头一根根亮出去”,可以把预算抬到几聪到几十聪的量级试一试,观察构造出的交易输入是否变成整齐的同地址组;如果预算给得过大,长期累积的手续费也会可观——这是一笔用真金白银换聚类阻力的买卖。快速自检的办法:改前后各造一次同样金额的交易,对比输入条数与费用差。
一笔预算的体检流程
上线前先给预算做一次三步体检。第一步看默认:不改任何配置造一笔小额交易,记录输入条数与总费用,作为基线。第二步给小预算:把值设成几聪再造同样一笔,看选币是否开始成组吞掉同地址输出、费用差是否落在预算内——两处对不上,多半是单位理解错了。第三步观察警告:如果启动日志出现高额警示语句,说明填的值已经越过源码里那条万分之一枚的高费线,回到第二步的量级重新校准。
还要提醒一个长期效应:预算生效期间,钱包的候选集划分、找零输出位置、甚至变更地址的使用频率都会跟着变,这些痕迹本身就是钱包指纹的一部分。隐私是相对的:整组花费压制了地址内聚类,却可能让”这台钱包的组很大”成为新的可观察特征。预算买到的从来不是隐身,只是把识别成本抬高一点。
风险提示:本文只解释钱包参数机制,不构成费率建议;涉及资金的参数改动请以你所用版本的实际帮助文本为准。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。