
什么是 UTXO:理解 BSV 交易模型的基础
UTXO 是“未花费交易输出”,是 BSV 交易模型的基本单位。钱包余额并不是链上的账户字段,而是一组可控制 UTXO 的金额总和。理解 UTXO,有助于理解 BSV 的 input、output、找零、手续费、双花、Script 以及并行处理。
林知衡
technical_editor
一句话理解 UTXO
UTXO 是 Unspent Transaction Output 的缩写,意思是“还没有被花掉的交易输出”。
在 BSV 中,钱包显示的“余额”并不是链上某个账户字段,而是一组你能够控制的 UTXO 金额之和。理解 UTXO,是理解 BSV 交易、钱包、找零、手续费、双花、并行处理以及应用状态设计的基础。
从 output 到 UTXO
一笔交易可以创建多个 output。每个 output 至少包含两类关键信息:
- 金额
- locking script,即未来花费它时需要满足的条件
如果某个 output 还没有被后续交易作为 input 花掉,它就是 UTXO。
可以用一个简单流程表示:
如果后来交易 B 的 input 引用了交易 A 的 output 0,那么这个 output 就被花掉了:
因此,UTXO 的生命周期非常明确:
- 被某笔交易创建;
- 保持未花费状态;
- 被后续某笔交易作为 input 消耗。
UTXO 与账户余额有什么不同
很多人初学区块链时,会先接触账户模型。账户模型通常可以理解为:
UTXO 模型不是这样。它更像现金纸币。
如果你手上有一张 100 元纸币,想买 30 元的东西,你不能把纸币撕下一部分交给商家。你会把 100 元交出去,商家再给你 70 元找零。
UTXO 的逻辑类似。假设你有一个 100 satoshis 的 UTXO,要支付 30 satoshis,那么这个 100 satoshis 的 UTXO 会整体作为 input 被消耗,然后创建新的 outputs:
结果是:旧的 100 satoshis UTXO 消失,新的 30 satoshis 和 69 satoshis outputs 出现。其中,30 satoshis 属于收款人,69 satoshis 通常作为找零返回给付款方,1 satoshi 作为手续费。
钱包余额是如何计算出来的
钱包会扫描或查询自己能够控制的 UTXO,然后把这些 UTXO 的金额加总,得到界面上显示的余额。
例如:
钱包显示的余额就是:
链上并没有一个字段写着“这个钱包余额是 750 satoshis”。这个数字是钱包根据相关 UTXO 集合计算出来的。
这也是为什么同一个钱包可以有很多地址、很多 UTXO、很多找零输出。钱包界面隐藏了这些复杂性,但底层仍然是 UTXO 模型。
一个 UTXO 如何被定位
一个 UTXO 通常由两部分定位:
其中:
txid标识创建这个 UTXO 的交易;output index标识它是这笔交易中的第几个 output。
例如:
这表示:交易 abc...123 的第 1 个 output。
只保存 TXID 不够,因为一笔交易可能包含多个 output。要准确引用某个 UTXO,必须同时保存 TXID 和 output index。
UTXO 不只是金额,还包含 locking script
UTXO 不只是一个金额记录。它还带有 locking script。
locking script 决定未来谁能花费这个 UTXO。在普通支付场景中,locking script 可能要求未来花费者提供:
- 对应的公钥;
- 有效签名。
因此,UTXO 可以理解为“金额 + 花费条件”的组合。
这一点很重要:BSV 不是把余额绑定到账户,而是把价值绑定到可验证的花费条件。只有满足 locking script 要求的交易,才能花费对应的 UTXO。
为什么学习 BSV 必须先理解 UTXO
BSV 交易中的很多核心概念都建立在 UTXO 之上:
- input:引用旧的 UTXO;
- output:创建新的 UTXO;
- 找零:创建一个新的 UTXO 返回给自己;
- fee:旧 UTXO 总额减去新 outputs 总额;
- 双花:同一个 UTXO 被重复引用;
- Script:定义 UTXO 的花费条件;
- 钱包:管理可用 UTXO;
- token:常把状态表达为特定 UTXO 的转移。
如果不理解 UTXO,BSV 交易会显得很反直觉:为什么付款时会产生找零?为什么一个地址可以有多个“余额片段”?为什么引用交易输出时还要指定 output index?这些问题都需要从 UTXO 模型中找到答案。
BSV 视角下的 UTXO
BSV 强调链上扩容和并行处理,UTXO 模型是这一技术路线的重要基础之一。
不同 UTXO 之间可以相对独立地验证。只要两笔交易花费的是不同 UTXO,它们在状态上没有直接冲突。这为并行验证提供了结构基础。
当然,UTXO 本身并不等于无限扩展。高吞吐还需要节点软件、存储、网络传播、矿工策略,以及 Teranode 这样的架构配合。但 UTXO 是底层模型,理解它有助于进一步理解 BSV 为什么能够围绕并行处理和大规模链上交易进行设计。
新手常见误解
学习 UTXO 时,可以先记住以下几点:
- UTXO 不是账户;
- UTXO 不是地址;
- UTXO 是交易 output 的一种状态:未花费;
- 一个地址可以对应多个 UTXO;
- 钱包余额是 UTXO 的汇总,不是链上的余额字段;
- 花费 UTXO 时,旧 UTXO 会被整体消耗;
- 保存 UTXO 引用时,要保存 TXID 和 output index。
小结
UTXO 是 BSV 交易模型的基本单位。它表示一个尚未被花费的交易输出,同时包含金额和花费条件。
从用户角度看,钱包余额像是一个数字;但从链上数据结构看,它是一组可被控制的 UTXO 的总和。交易发生时,旧 UTXO 被作为 input 消耗,新 outputs 被创建,其中可能包括收款输出、找零输出和手续费差额。
掌握 UTXO 后,再理解 BSV 的交易结构、钱包行为、双花检测、Script 条件和并行处理,就会清晰很多。
参考链接
推荐文章
区块链2026年5月26日
一个地址可以有很多 UTXO:理解 BSV 中的地址、余额与交易构造
在 BSV 的 UTXO 模型中,一个地址不是账户,也不是单一余额槽。同一个地址可以关联多个 UTXO,钱包余额只是这些 UTXO 的汇总。理解这一点,有助于正确处理交易构造、手续费、UTXO 碎片化和隐私问题。
区块链2026年5月26日
在 BSV 中,花钱就是消耗旧 UTXO、创造新 UTXO
在 BSV 中,花钱不是修改余额,而是消耗旧 UTXO、创建新 UTXO。理解这一点,有助于掌握付款、找零、交易链以及 token 和应用状态转移的基本逻辑。
区块链2026年5月26日
BSV 交易调试中的 Endian 问题:为什么 TXID 看起来会反过来
Endian 是 BSV 交易调试中常见的字节序问题,尤其容易出现在 raw transaction、TXID、outpoint、数字字段和 Merkle proof 中。理解显示格式与底层序列化字节的区别,可以避免很多“TXID 不匹配”或“proof 算错”的误判。