
在 BSV 中,花钱就是消耗旧 UTXO、创造新 UTXO
在 BSV 中,花钱不是修改余额,而是消耗旧 UTXO、创建新 UTXO。理解这一点,有助于掌握付款、找零、交易链以及 token 和应用状态转移的基本逻辑。
林知衡
technical_editor
在 BSV 中,花钱并不是“修改账户余额”,而是通过一笔交易消耗旧的 UTXO,并创建新的 UTXO。
这句话是理解 UTXO 模型的核心。无论是普通付款、找零、交易链,还是 token 与应用状态转移,都可以从这个动作展开理解。
UTXO 不是账户余额
在账户模型中,转账通常可以理解为修改余额:
但 UTXO 模型不是这样工作。
如果 Alice 有一个 100 satoshis 的 UTXO,想给 Bob 支付 30 satoshis,那么系统不会把这个 UTXO 的金额从 100 改成 70。相反,交易会:
- 把 Alice 的 100 satoshis UTXO 作为 input 消耗;
- 创建一个给 Bob 的 30 satoshis output;
- 创建一个给 Alice 自己的找零 output;
- 留出手续费。
交易确认后,原来的 UTXO 会被标记为已花费。Alice 以后能继续使用的,不是“被改小的旧 UTXO”,而是新创建的找零 UTXO。
一个具体例子
假设 Alice 当前有一个 UTXO:
Alice 要给 Bob 30 satoshis,交易手续费为 1 satoshi。交易结构可以简化为:
交易确认后,结果是:
UTXO A: 100被花费,不能再次使用;- Bob 得到一个新的
30 satoshisUTXO; - Alice 得到一个新的
69 satoshis找零 UTXO; - 矿工获得
1 satoshi手续费。
因此,整个过程不是“把 Alice 的余额从 100 改为 69”,而是“消耗一个旧 UTXO,创建两个新 UTXO,并留下手续费”。
为什么旧 UTXO 必须整体消耗
可以把 UTXO 理解为一张纸币。你不能直接把纸币上的面额改小,只能把这张纸币交出去,再拿回找零。
UTXO 模型也是类似逻辑:一个 UTXO 要么未花费,要么已花费,不会被部分修改。
这种设计带来几个重要特性:
- 交易历史清晰;
- 每个 UTXO 的来源可以追溯;
- 双花检查更明确;
- 更容易进行并行验证;
- 状态转移可以通过交易链表达。
同时,它也要求开发者和钱包处理更多细节,例如找零、UTXO 选择和 UTXO 碎片化。
一笔交易可以消耗多个旧 UTXO
交易不一定只有一个 input,也不一定只有一个 output。它可以同时消耗多个旧 UTXO,并创建多个新 UTXO。
例如,Alice 的钱包里有三个 UTXO:
现在需要支付 90 satoshis,手续费为 2 satoshis。钱包可以选择消耗 A、B、C,总输入为 110 satoshis,然后创建:
交易完成后,A、B、C 三个旧 UTXO 都会被花掉。收款人的 90 satoshis output 和 Alice 的 18 satoshis 找零 output 会成为新的 UTXO。
找零不是实现细节,而是模型的一部分
很多新手会把找零看成钱包的实现细节。但在 UTXO 模型中,只要 input 总额大于目标付款和手续费,剩余金额就必须通过新的 output 找回。
如果没有创建找零 output,input 和 output 之间的差额就会变成手续费。
因此,手动构造交易时必须明确这个等式:
这也是开发 BSV 应用时必须理解的基础规则。
新 UTXO 可以继续形成交易链
一笔交易创建的新 UTXO,可以继续被下一笔交易花费。
例如:
这就形成了一条交易链。
在 BSV 应用中,许多状态更新都可以用这种链式结构表达。例如,一个凭证、token 或业务状态,每次更新时都消耗旧状态 UTXO,并创建新状态 UTXO。
BSV 应用中的状态转移
BSV 不只是支付系统,也常被设计为数据和应用状态网络。UTXO 的“消耗旧状态、创造新状态”模式,适合表达多种业务过程,例如:
- token 转移;
- 数字凭证更新;
- 合约状态推进;
- 供应链事件变更;
- 应用记录版本更新。
每次状态变化都可以由一笔交易表达,历史天然可追溯。
不过,这并不意味着只要把数据写入链上就自动具备良好的应用体验。实际应用通常还需要配套的协议设计和 Overlay 索引,否则链上记录会很难被应用高效查询和使用。
新手常见误解
理解 UTXO 模型时,可以重点避免以下误解:
- 花钱不是修改旧 UTXO 的金额;
- 旧 UTXO 被花后不能再次使用;
- 找零必须作为新的 output 创建;
- input 总额和 output 总额之间的差额是手续费;
- 交易可以同时消耗多个旧 UTXO,也可以创建多个新 UTXO;
- 状态转移可以用 UTXO 链表达,但需要清晰的协议规则。
参考资料
推荐文章
区块链2026年5月26日
一个地址可以有很多 UTXO:理解 BSV 中的地址、余额与交易构造
在 BSV 的 UTXO 模型中,一个地址不是账户,也不是单一余额槽。同一个地址可以关联多个 UTXO,钱包余额只是这些 UTXO 的汇总。理解这一点,有助于正确处理交易构造、手续费、UTXO 碎片化和隐私问题。
区块链2026年5月26日
什么是 UTXO:理解 BSV 交易模型的基础
UTXO 是“未花费交易输出”,是 BSV 交易模型的基本单位。钱包余额并不是链上的账户字段,而是一组可控制 UTXO 的金额总和。理解 UTXO,有助于理解 BSV 的 input、output、找零、手续费、双花、Script 以及并行处理。
区块链2026年5月26日
BSV 交易调试中的 Endian 问题:为什么 TXID 看起来会反过来
Endian 是 BSV 交易调试中常见的字节序问题,尤其容易出现在 raw transaction、TXID、outpoint、数字字段和 Merkle proof 中。理解显示格式与底层序列化字节的区别,可以避免很多“TXID 不匹配”或“proof 算错”的误判。