什么是比特币选币以及钱包如何选择要花费的 UTXO

XTS Insights 新手指南带你了解比特币钱包如何选择交易输入

引言

比特币钱包显示余额时,看起来很像银行账户中的一个数字。但在这个数字背后,钱包通常管理着许多独立的未花费交易输出,也就是 UTXO。

当你发送比特币时,钱包必须决定使用哪些 UTXO 作为交易输入。这个过程称为 选币(Coin Selection)。

选币表面上似乎很简单,只要选择足够的比特币来支付转账金额即可。实际上,钱包还需要估算交易手续费、判断是否创建找零、计算未来花费找零的成本、遵守安全与确认政策,并尽量避免不必要的隐私泄露。

即使收款人最终收到的金额完全相同,不同的 UTXO 选择也可能产生不同的手续费、交易体积、隐私影响和未来钱包成本。

本篇 XTS Insights 指南将解释比特币选币如何运作、钱包为何采用不同策略、找零地址如何参与其中,以及用户在手动选择 UTXO 前需要了解什么。

什么是比特币选币

比特币选币是钱包从可用 UTXO 中选择交易输入的过程。

一个钱包可能只控制一个 UTXO,也可能控制数千个。为了创建有效付款,所选输入必须足以支付:

发送给收款人的金额

支付给矿工的交易手续费

用户要求创建的其他输出

如果所选输入的总价值高于付款金额和手续费,钱包通常会通过 找零输出 将剩余部分返还给自己。

选币属于钱包层面的逻辑,并不是比特币共识规则。比特币网络不会要求所有钱包使用相同算法。只要最终交易符合比特币验证规则,钱包开发者可以采用不同方法。

简单来说

比特币钱包会检查允许花费的 UTXO,估算每个 UTXO 的使用成本,并寻找能够支付转账金额和手续费的组合。随后,钱包会比较交易体积、找零、隐私和未来花费成本等因素,再构建交易。

基本关系如下:

所选输入总额 = 收款输出 + 找零输出 + 交易手续费

如果没有创建找零输出,剩余价值将成为交易手续费的一部分。

为什么比特币需要选币

比特币并不像银行账本那样维护单一余额。区块链记录的是交易输出,而尚未被花费的输出就是 UTXO。

假设一个钱包先后收到四笔付款:

0.010 BTC

0.025 BTC

0.040 BTC

0.100 BTC

钱包可能显示总余额为 0.175 BTC,但这些资金仍以四个独立 UTXO 的形式存在。如果用户想发送 0.050 BTC,钱包必须选择其中一个或多个输出作为输入。

钱包可以使用 0.100 BTC 的 UTXO 并产生找零,也可以在能够覆盖手续费的情况下组合 0.010 BTC 和 0.040 BTC,还可以选择 0.025 BTC 与 0.040 BTC。每一种选择都会带来不同结果。

选币就是比较这些可能性的过程。

UTXO 基础回顾

UTXO 是一笔由花费条件锁定的特定数量比特币。当钱包能够满足该条件时,通常通过有效数字签名来花费它。

UTXO 更像独立的现金,而不是单一余额中的数字。当 UTXO 被用作输入时,它会被完整花费,交易随后创建新的输出。

例如,花费一个 0.100 BTC 的 UTXO,并不是只从中扣除 0.030 BTC。整个 0.100 BTC 都会成为输入。交易可以向收款人发送 0.030 BTC、支付手续费,并将剩余部分作为找零返还给钱包。

正是这种输入必须完整花费的模式,使选币和找零输出成为必要机制。

钱包需要支付哪些部分

在选择 UTXO 之前,钱包需要确定交易目标。

目标通常包括:

所有收款输出的总金额

根据预计交易体积计算的手续费

用户或应用程序要求的其他输出

在输入尚未选择之前,手续费往往无法完全确定,因为每增加一个输入,交易重量都会上升。钱包因此需要先估算手续费,测试候选组合,再根据结果调整计算。

这形成一个循环:输入选择影响交易体积,而交易体积又影响所选输入必须覆盖的手续费。

比特币选币如何运作

不同钱包的实现方式并不相同,但整体流程通常相似。

第一步 确定付款目标

钱包首先读取收款金额、目标地址、手续费目标和用户设置。如果有多个收款人,钱包会将所有输出金额相加。

钱包还会估算交易中不属于输入的部分,包括版本、锁定时间、输出脚本及其他必要数据。

第二步 识别可用 UTXO

钱包控制的 UTXO 不一定全部都能用于当前付款。

钱包可能排除以下输出:

已被冻结或手动锁定的输出

已为另一笔交易预留的输出

在钱包政策要求确认时仍未确认的输出

尚未成熟的 Coinbase 输出

仅可观察但缺乏签名权限的输出

不属于用户所选账户或标签的输出

在当前手续费率下不具经济性的输出

剩余输出构成候选集合。

第三步 估算每个输入的成本

增加输入会提高交易重量,从而提高总手续费。不同输出类型所需的签名或见证数据不同,因此花费成本也不同。

钱包可以为 UTXO 计算 有效价值(Effective Value):

有效价值 = UTXO 面值 — 花费该 UTXO 的预计手续费

当手续费较高时,小额 UTXO 的有效价值可能很低。在极端情况下,花费它所需的手续费可能等于或高于它能贡献的价值。

第四步 比较候选组合

钱包会寻找能够支付目标金额的一个或多个组合。它可能偏好精确或接近精确的组合、重量较低的组合、更符合隐私要求的分组,或者有助于管理 UTXO 集合的选择。

有效组合可能很多。拥有几十个 UTXO 的钱包就可能产生数量庞大的输入组合,因此实际算法通常会限制搜索范围,并比较找到的最佳候选结果。

第五步 决定是否创建找零

如果所选输入超过付款金额和手续费,钱包会考虑创建找零输出。

找零虽然有用,但也会带来成本:

找零输出会增加当前交易的体积

以后花费找零会产生新的输入成本

可被识别的找零可能暴露钱包信息

如果剩余金额太小,不值得创建并在未来花费,钱包可能将其计入手续费。如果存在合适的接近精确组合,钱包也可能创建无找零交易。

第六步 选择较优结果

钱包会根据自身政策比较有效候选方案。考虑因素可能包括当前手续费、预计未来手续费、输入重量、找零成本、隐私、确认状态和用户的 Coin Control 设置。

选定的输入随后会与收款输出和找零输出一起写入未签名交易。

第七步 签名并广播交易

钱包或连接的签名设备会核对交易详情,并为每个选定输入签名。签名完成后,交易即可广播到比特币网络。

节点会根据比特币共识规则和转发政策验证完整交易,但不会判断钱包的选币决定是否最省手续费或最有利于隐私。

一个简单的选币示例

假设钱包控制以下 UTXO:

UTXO A = 0.020 BTC

UTXO B = 0.035 BTC

UTXO C = 0.060 BTC

UTXO D = 0.120 BTC

用户希望发送 0.050 BTC,并支付相应手续费。

多种选择都可能有效:

只使用 UTXO C,价值足够,并产生相对较小的找零

使用 UTXO A 加 UTXO B,金额接近目标,但两个输入会增加交易重量

只使用 UTXO D,输入数量少,但会产生更大的找零

组合多个小额 UTXO,可能有助于整合钱包,但会提高当前手续费

最佳选择取决于手续费率、脚本类型、钱包政策、隐私历史和预计未来成本。仅比较 UTXO 面值并不足够。

什么是有效价值

有效价值帮助钱包在扣除输入使用成本后比较不同 UTXO。

假设两个 UTXO 的面值相同,但它们采用不同脚本类型。如果其中一个需要更多交易重量才能花费,那么在相同手续费率下,它的有效价值会更低。

有效价值也会随网络手续费变化。小额 UTXO 在低手续费环境下可能很有用,但在高费率时可能不具经济性。

这并不代表该 UTXO 已经消失或失效,只是说明在当前交易中使用它,扣除手续费后可能无法提供足够的实际购买力。

什么是浪费指标

部分钱包会用一种通常称为 Waste Metric 的概念比较候选结果。

从整体上看,浪费值可能考虑:

按当前手续费率花费所选输入的成本

未来长期花费这些输入的预计成本

创建找零并在以后花费找零的成本

无找零交易中被计入手续费的多余金额

目标并不只是把今天的手续费降到最低。当前稍大的交易可能降低未来成本,而今天看似便宜的选择,也可能产生以后花费成本很高的找零。

Bitcoin Core 的实现会在比较部分选币结果时使用浪费值。其他钱包可以采用不同公式和假设。

选币的主要目标

选币通常需要平衡多个目标,而不是只优化一个数字。

确保交易能够完成

所选输入必须覆盖所有输出和手续费,并为最终交易结构保留足够空间。

控制交易手续费

每个输入都会增加数据量。使用更少或重量更低的输入,可以在相同手续费率下降低总费用。

避免不必要的找零

接近精确的组合可以避免创建找零的当前和未来成本。但如果无找零会导致过高的额外手续费,钱包不应强行采用这种方案。

保护用户隐私

组合 UTXO 可能连接不同地址和付款历史。注重隐私的钱包会尽量避免混合原本无关的资金组。

管理 UTXO 集合

经常收到小额付款的钱包可能累积大量 UTXO。在手续费较低时选择更多输入,可能降低未来复杂度,但也会扩大当前交易。

遵守钱包政策

钱包可能需要遵守标签、冻结输出、确认要求、避免地址重用及其他用户设置。

选币与交易手续费

比特币交易手续费主要取决于交易重量,而不是转账金额。

输入通常占据交易重量的重要部分。使用十个小额输入的交易,可能比只使用一个较大输入的交易更昂贵,即使两者发送的金额相同。

因此,选币会直接影响手续费。

钱包通常会考虑:

输入数量

脚本类型和预计输入重量

输出的数量与类型

所选手续费率

是否需要找零输出

今天最便宜的选择,不一定是钱包整个生命周期内成本最低的选择。未来花费成本同样重要。

选币与找零地址

选币决定交易会产生多少找零。

如果所选输入总计 0.080 BTC,而付款与手续费合计 0.051 BTC,钱包大约会剩余 0.029 BTC。它通常会把这部分金额发送到由自己控制的新找零地址。

采用不同输入组合,可能产生更少找零,甚至完全没有找零。

因此,关于比特币找零地址的 Article 24 与本篇文章密切相关。找零正是因为所选输入价值高于交易目标而产生的。

常见选币策略

钱包可以使用单一策略,也可以组合多种方法。

精确匹配或无找零选择

钱包寻找有效价值接近交易目标的输入组合。如果成功,就可以避免创建找零输出。

这种方式可能降低未来花费成本,也可能让找零识别更加困难。但钱包仍需避免因选择过多金额而支付不合理的额外手续费。

最低重量选择

钱包寻找能够以较低输入重量完成付款的组合。这在手续费较高时尤其有用。

最小足额输入

钱包可以选择能够覆盖目标的最小单一 UTXO。这个方法简单,但不一定带来最佳隐私或长期费用结果。

整合型选择

当手续费率较低时,钱包可能加入更多小额 UTXO,以减少未来需要管理的输出数量。

整合可以降低未来成本,但也可能连接原本分离的资金,并提高当前交易体积。

随机选择

随机化可以降低钱包行为的可预测性。但仅靠随机选择并不能保证隐私,也可能产生效率较低的交易。

手动 Coin Control

部分钱包允许用户直接选择 UTXO,这项功能通常称为 Coin Control。

Coin Control 可用于分离账户、避免花费特定输出、整合资金或保留某段付款历史。如果用户不了解相关权衡,也可能造成更高手续费或隐私错误。

Bitcoin Core 中的选币

Bitcoin Core 钱包代码展示了选币可能达到的复杂程度。当前源代码包含多种算法类型,具体实现也可能随版本更新。

其中包括:

分支定界算法(Branch and Bound 或 BnB),搜索能够落入目标区间并避免创建找零的组合

背包算法(Knapsack),搜索可用输出的子集

单次随机抽取(Single Random Draw 或 SRD),以随机顺序加入候选项,直到达到目标

CoinGrinder,为包含找零的交易搜索重量较低的输入组合

Manual,用于直接指定输入的情况

Bitcoin Core 可以生成多个候选结果,并通过浪费值进行比较。这些算法示例并不代表所有钱包的行为完全相同,用户也不应假设每个软件版本都采用固定不变的逻辑。

为什么不存在通用最佳算法

选币包含真实的取舍。

手续费较低的选择可能会组合用户原本想分开的资金。更注重隐私的选择可能需要更多输入。无找零交易可能比创建找零的交易支付更高手续费。整合能够降低未来成本,却可能暴露多个 UTXO 属于同一钱包。

最佳结果取决于用户目的、钱包历史、当前手续费市场、未来预期和软件政策。

因此,比特币协议只规定交易有效性,而把选币政策交给钱包处理。

隐私注意事项

选币可能暴露资金之间的关系。

共同输入所有权启发式

当多个 UTXO 同时出现在一笔交易的输入中,链上分析可能推测控制这些输入密钥的是同一实体。这个推测并非永远正确,但应用十分广泛。

组合无关 UTXO,可能连接此前互不关联的地址历史。

找零识别

如果观察者能够判断哪个输出是付款、哪个输出是找零,就可能继续追踪找零在后续交易中的流向。钱包会使用新的找零地址,但地址更新并不能消除所有交易模式线索。

避免部分花费

部分钱包政策会把同一地址收到的输出分组,并尝试一起花费。这可以减少多次暴露地址所有权的情况,但也可能需要更多输入和更高手续费。

标签与账户

钱包标签可以帮助用户避免混合商业资金、个人储蓄、捐款或其他类别。隐私效果取决于钱包是否持续遵守这些边界。

UTXO 整合

UTXO 整合是把多个小额 UTXO 合并成更少、更大的输出,通常通过把资金发送回同一个钱包完成。

选币可以在普通付款中顺带完成部分整合,尤其是在手续费较低时。例如,Bitcoin Core 提供整合手续费率政策,在特定条件下允许使用比严格必要数量更多的输入。

整合可能降低未来交易成本,但用户需要考虑:

当前手续费率

简化 UTXO 集合的未来价值

连接多个输入带来的隐私影响

目标地址和找零策略是否已正确备份

未来手续费是否更低无法保证,因此整合是一项规划决定,而不是确定收益。

不具经济性的 UTXO 与 Dust

UTXO 可以保持有效,却在某个手续费率下不值得花费。

钱包通常会区分:

Dust 输出,低于与花费成本相关的政策阈值

经济价值过小的 UTXO,虽然高于 Dust 限制,但在当前费率下有效价值很低

选币过程可能忽略有效价值为零或负数的输出,除非特殊整合政策允许使用它们。

用户不应假设钱包显示的余额始终能够以相同成本花费。拥有大量微小 UTXO 的钱包,可能需要比持有相同总额但只有少量输出的钱包更大的交易。

确认状态与花费资格

钱包可能以不同方式处理已确认和未确认的 UTXO。

一笔未确认的收款可以是有效交易,但仍依赖内存池中的父交易。花费它会形成交易链,并可能影响转发、手续费提升和确认预期。

钱包政策还可能排除:

来自冲突交易的输出

受到时间锁限制的输出

尚未成熟的 Coinbase 奖励

被用户冻结的输出

因此,选币判断的不只是金额。

面向高级用户的 Coin Control

Coin Control 让用户直接影响输入选择。

它适用于以下情况:

保持不同资金来源相互分离

花费指定 UTXO

避免动用长期储蓄

在低手续费时期整合小额输出

为协作或审计交易选择特定输入

确认手动选择的交易前,请检查:

所选输入及其标签

收款地址和金额

找零地址和找零金额

手续费率和总手续费

组合输入带来的隐私影响

是否涉及未确认父交易

手动选择会覆盖部分钱包自动化逻辑,因此应谨慎使用。

硬件钱包 多重签名与 PSBT

选币通常发生在签名之前。

在硬件钱包设置中,软件钱包可能负责选择 UTXO,并构建交易或 PSBT。随后,硬件钱包会显示或核对交易详情,再进行签名。

在多重签名流程中,协调方通常执行选币,并为所需签名者创建 PSBT。每位参与者都应在批准前确认收款输出、找零输出、手续费和钱包政策。

签名设备并不能自动保证协调方做出了最有利于隐私或费用的选择。它只是授权呈现给它的交易。

选币与手续费提升

选币可能影响后续提升手续费的方式。

使用 Replace by Fee 时,钱包可以以更高手续费重建交易。根据钱包和可用金额,它可能减少找零或增加新的输入。

使用 Child Pays for Parent 时,钱包会花费未确认交易的某个输出,并为整个交易包支付足够手续费。这需要一个合适的可花费输出,通常是钱包自己的找零。

良好的交易构建可以为钱包保留清晰选项,但任何选币方法都无法预测所有未来手续费市场情况。

应避免的常见错误

每次都选择最大 UTXO

这可能减少输入数量,却会产生较大找零,并形成容易识别的行为模式。

不考虑隐私就合并所有小额 UTXO

整合可能在一笔交易中连接许多付款历史。

忽略总手续费

即使手续费率合理,当选中很多输入时,总手续费仍可能很高。

认为手动选择一定更好

现代钱包能够比较的组合和成本因素,往往比用户凭肉眼判断的更多。

把找零当成额外手续费

找零仍由钱包控制,与矿工手续费完全不同。

在不了解依赖关系时花费未确认输入

新交易可能依赖更早的交易,并继承它们的确认问题。

关于比特币选币的常见误区

钱包直接从一个余额中扣款

显示的余额只是界面汇总。交易真正花费的是特定 UTXO。

网络负责选择输入

钱包会在广播前选择输入。节点随后验证这些输入是否存在、尚未花费,并满足锁定条件。

最大的 UTXO 一定最便宜

输入重量、脚本类型、找零、隐私和未来成本都需要考虑。

无找零交易永远最好

避免找零可能有利,但如果因此丢弃过多价值作为手续费,就不一定合理。

选币能让无效交易变得有效

选币只负责挑选候选输入,最终交易仍需满足比特币共识规则和适用的转发政策。

XTS 如何看待比特币选币

在 XTS 看来,选币是连接比特币 UTXO 模型与日常钱包体验的重要环节。

用户通常只看到余额和发送按钮,而钱包必须把这个简单请求转换成包含具体输入、输出、找零和手续费的有效交易。

理解选币,可以帮助用户解释为什么相同金额的两笔付款可能拥有不同手续费、钱包为什么会创建找零、小额 UTXO 为什么可能变得昂贵,以及手动 Coin Control 为什么会影响隐私。

实际建议很简单:使用信息透明的钱包软件,在签名前核对交易详情,并且只在理解相关权衡时手动选择输入。

常见问题

什么是比特币选币

比特币选币是钱包选择哪些 UTXO 来支付转账金额和交易手续费的过程。

谁负责执行选币

通常由钱包软件在交易签名前完成。支持 Coin Control 的钱包也允许用户覆盖或引导自动选择。

选币属于比特币共识规则吗

不属于。比特币规则决定完整交易是否有效,而钱包可以采用不同输入选择政策。

为什么钱包会使用多个输入

钱包可能没有单一合格 UTXO 足以支付转账和手续费,也可能正在整合输出,或遵守隐私与其他政策设置。

为什么输入越多手续费越高

每个输入都会增加交易数据。相同手续费率下,交易重量越大,总手续费通常越高。

选币能避免找零输出吗

有时可以。如果钱包找到有效价值接近目标的输入组合,就可能构建无找零交易。

什么是手动 Coin Control

Coin Control 允许用户选择指定 UTXO,而不是完全接受钱包的自动结果。

手动 Coin Control 是否更保护隐私

谨慎使用时,它可以帮助管理隐私。但错误选择也可能连接更多资金,并暴露比自动选择更多的信息。

太小而不值得花费的 UTXO 会怎样

它们仍然是有效 UTXO。钱包可能暂时不使用,直到手续费条件或整合政策使其花费变得合理。

所有比特币钱包都使用相同算法吗

不是。不同钱包的算法和政策可能不同,并且会随软件版本更新。

硬件钱包会选择输入吗

通常由连接的钱包软件或协调方选择输入并准备交易。硬件钱包随后根据自身功能和政策核对详情并签名。

选币与找零地址有什么关系

当所选输入超过付款金额和手续费时,钱包通常会把剩余部分返还到自己控制的找零地址。

总结

比特币选币是钱包把一组 UTXO 转换为新交易输入的过程。

钱包必须支付收款输出和手续费,同时考虑交易重量、有效价值、找零、隐私、确认状态和未来花费成本。由于这些目标可能相互冲突,并不存在适用于所有钱包和所有付款的唯一最佳策略。

对于大多数用户而言,自动选币能够在便利性和钱包政策之间取得合理平衡。高级用户可以在需要特定会计、隐私或 UTXO 管理结果时使用 Coin Control,但必须检查总手续费,以及组合输入所暴露的资金关系。

理解这一过程,可以让用户更容易解释钱包行为,也为继续学习 UTXO 整合、Dust、交易批处理和手续费管理打下基础。

重点整理

选币决定哪些 UTXO 会成为交易输入

所选输入必须覆盖收款输出和交易手续费

输入数量和脚本类型会影响交易重量与总手续费

有效价值会从 UTXO 面值中扣除预计花费成本

钱包可能比较当前费用、未来成本、找零和隐私

无找零选择可能有帮助,但不一定永远最佳

手动 Coin Control 提高控制权,也增加用户责任

不同钱包可以使用不同算法和政策

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注