
自动选择 inputs、找零和手续费:钱包如何为你构建完整交易
使用高级SDK时,钱包可以自动选择可花费的UTXO、生成找零output并计算手续费。本文解释这一过程的工作原理、益处和潜在风险。
林知衡
technical_editor
一句话理解
使用 WalletClient.createAction() 时,钱包可以替应用选择可花费 inputs、生成找零 output,并计算需要支付的手续费。这正是高级 SDK 对新手最有价值的地方:你先描述想要的输出,钱包再把交易补成一笔可处理的完整交易。
为什么需要自动处理
在 BSV 的 UTXO 模型里,花钱不是从账户余额里扣一个数字,而是选择若干个旧 output 作为 inputs,再创建若干个新 outputs。
假设你要创建一个 100 satoshis 的数据输出。你的钱包里可能没有一个刚好 100 satoshis 的 UTXO,而是有这些 UTXO:
- UTXO A: 300 satoshis
- UTXO B: 500 satoshis
- UTXO C: 1200 satoshis
钱包要决定选哪个或哪些 UTXO。选完之后,还要支付手续费。如果输入金额大于输出金额加手续费,多出来的钱不能消失,通常要回到钱包控制的找零 output。
简化公式是:
手动做这件事时,新手常见错误是忘记找零、低估手续费、选错 UTXO 或构造出无法被验证的 input。
钱包自动选择 inputs
当你调用 createAction() 并只给出 outputs 时,钱包可以根据自己的 UTXO 集选择 inputs。这一步不是随便选。钱包通常会考虑:
- 可用 UTXO 是否足够。
- UTXO 是否已被锁定或正在使用。
- 交易大小和费用。
- 是否需要保留某些 UTXO。
- 钱包自己的隐私和资金管理策略。
应用只看到结果,但不应该误以为这些细节不存在。自动选择 inputs 是方便,不是魔法。
钱包自动生成找零
如果钱包选择了一个 1000 satoshis 的 UTXO,而你的目标输出只有 100 satoshis,剩余部分需要处理。真实交易不能只写:
否则差额会全部变成手续费。多数情况下钱包会创建找零 output:
找零 output 仍然是链上的 output,未来可以继续被花费。它也可能暴露资金关联,所以生产钱包会尽量用策略减少隐私问题。
钱包自动计算手续费
手续费通常与交易大小、网络策略和矿工费率有关。BSV 的大区块路线让低费用大规模交易成为设计目标之一,但每笔交易仍然需要满足处理网络接受的费用要求。
SDK 和钱包可以帮助估算费用,但应用仍要知道两件事。第一,手续费不是固定常数。inputs 越多、outputs 越多、脚本越复杂,交易体积通常越大。第二,手续费过低可能导致交易不被接受或处理失败。自动估算降低了出错概率,但不等于永远成功。
createAction 中的对应关系
入门阶段的调用通常只给 outputs:
你没有在代码中写 inputs、找零和手续费,但钱包会在背后处理它们。如果未来进入更低层的交易构造,你会开始显式处理这些内容:
- inputs:引用哪个旧 UTXO,提供什么 unlocking script
- outputs:给谁,锁定脚本是什么,金额是多少
- fee:输入总额减输出总额
第 7 阶段先理解自动流程,第 8 阶段再手动拆开。
在 BSV 技术栈里的位置
钱包层在 BSV 应用里承担资金管理责任。它不是简单的签名按钮,而是 UTXO 管理器、授权入口和交易构造助手。这符合 BSV 应用开发的分层思路:
- 应用层:描述业务动作
- 钱包层:管理 UTXO、授权、签名、找零、费用
- 网络层:接受、验证、传播、打包交易
- 索引层:让应用查询业务数据
越往后学,你会越清楚每一层的边界。
自动处理带来的风险
自动处理很方便,但生产应用不能完全无感。
- 如果钱包选择了很多小 UTXO,交易体积可能变大。
- 如果找零策略不好,可能暴露地址或资金关联。
- 如果应用重复发起同类 action,可能需要处理幂等和重试,避免同一业务动作创建多笔交易。
- 如果网络服务暂时不可用,交易可能进入延迟处理或失败状态。
所以新手可以先依赖自动处理,但要知道自动处理背后仍然是确定的交易结构。
新手常见误解
- 自动选择 inputs,不代表钱包永远会选出最优组合。不同钱包策略不同。
- 找零不是“钱包内部记账”。找零 output 也是链上的真实 output。
- 手续费不是应用随便省掉的成本。没有足够手续费,交易可能无法被处理。
- 交易创建成功,不等于应用业务已经完成。你仍要跟踪状态。
- 使用高级接口,不代表不需要理解 UTXO。只是学习顺序先后不同。
参考来源
推荐文章
区块链2026年5月20日
WIF、助记词与 HD Wallet:BSV 钱包密钥管理入门
WIF、助记词和 HD Wallet 都与密钥保存、恢复和派生有关,但含义不同。本文解释它们的区别、xpub 的作用,以及在 BSV 钱包和应用开发中的安全实践。
区块链2026年6月15日
使用 createAction() 创建你的第一笔 BSV 交易:入门指南
createAction() 是 BSV SDK 的核心方法,让应用通过高级接口描述交易动作,钱包自动处理签名、费用和广播。本文带你理解其原理、参数和实际用法。
区块链2026年6月15日
WalletClient:应用与钱包之间的通信入口
WalletClient 是 BSV 应用中连接钱包的标准化客户端,它让应用描述交易意图,钱包负责授权、签名和 UTXO 管理,从而隔离私钥、UTXO 和签名等复杂度。