比特币钱包如何选择UTXO? 图 1
比特币钱包如何选择UTXO? · 图 1

一笔比特币交易必须完整花掉选中的UTXO,多出的金额通常成为找零。钱包选哪些输入,不只决定当前交易大小,还会影响是否产生粉尘、未来手续费和链上隐私。

先计算“有效价值”

某个UTXO面值减去按当前费率花费该输入所需成本,才是它对本次付款的有效价值。小额UTXO在高费率时可能有效价值很低,甚至为负;强行加入只会让交易更大。不同脚本类型的输入虚拟字节不同,不能只按UTXO数量估费。

找零有两次成本

创建找零输出会增加本次交易大小,未来花掉找零还要再付一次输入成本。钱包常把两者合成change cost。若能找到一组输入,使付款加手续费落在不需要找零的范围内,就可能减少总浪费;但“多付给矿工”超过合理范围同样不是好方案。

目标可能偏好的策略代价
不产生找零Branch and Bound寻找接近匹配不一定每次有解
控制当前费率选择高有效价值输入可能暴露较大余额
整理小UTXO低费率时合并会暴露共同控制关系
保护隐私避免跨标签合并交易可能更大或需等待

为什么“输入越少越好”不总对

只选一个大UTXO虽然交易短,却可能产生很大的找零并暴露钱包规模;选多个同来源UTXO可能符合业务标签,却增加费用。钱包还要考虑避免部分花费:一旦某地址的多个UTXO中的一个被花费,剩余输出可能更容易被链上分析关联。

一次选币应经过五步

先锁定不可用或尚未确认的UTXO;按脚本类型和目标费率计算有效价值;尝试无找零组合;若失败,评估找零输出与未来花费成本;最后按地址标签、冻结状态和隐私策略复核。计算得到的手续费还要随交易序列化重新校验。

手动选币时不要误碰冷存储、托管证明或特定税务批次。钱包显示的标签通常是本地元数据,恢复到另一软件后可能丢失;重要标签应独立备份。

启用RBF时,替换交易可能重新运行选币并改变找零;使用CPFP时,子交易还要花费父交易输出。费用加速功能因此也会改变隐私和成本,不能在签名前只看原交易。批量系统应把已锁定输入保留到替换或确认结束,避免并发任务双花同一UTXO。

粉尘不是固定聪数

粉尘判断与输出脚本和花费成本有关,不是所有地址都共享一个永恒阈值。交易能广播也不代表经济上值得花费。批量提现系统应按目标脚本和当前中继策略计算,避免把产品界面的最小提现额当成协议dust规则。

手续费不是输入金额的百分比

比特币手续费约等于交易虚拟字节数乘费率。输入数量和脚本类型通常比转账金额更影响大小:花费多个小UTXO会增加见证与输入开销,而一个大UTXO可能产生找零并降低未来隐私。选择器应在当前费率、找零成本和未来花费成本之间权衡。

设置输入nSequence仍可表达钱包希望交易可替换,并兼容依赖BIP-125信号的旧策略;但当前Bitcoin Core采用full-RBF,节点接受替换不再以该信号为必要条件。钱包仍需预留可增加的手续费,并按对端节点的实际mempool策略处理广播结果;启用CPFP则要确保自己控制可花费输出。合并碎片适合在低费率时进行,但把多个来源一起合并会公开它们由同一实体控制,隐私代价应在确认前提示。

UTXO基础可先看比特币UTXO模型,手续费目标与锁定时间结合比特币时间锁理解,最终PSBT输出与找零按PSBT核对清单复核。