一笔比特币交易必须完整花掉选中的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核对清单复核。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。