什么是 UTXO:理解 BSV 交易模型的基础

UTXO 是“未花费交易输出”,是 BSV 交易模型的基本单位。钱包余额并不是链上的账户字段,而是一组可控制 UTXO 的金额总和。理解 UTXO,有助于理解 BSV 的 input、output、找零、手续费、双花、Script 以及并行处理。

林知衡

林知衡

technical_editor

发布于 2026年5月26日15 分钟阅读

一句话理解 UTXO

UTXO 是 Unspent Transaction Output 的缩写,意思是“还没有被花掉的交易输出”。

在 BSV 中,钱包显示的“余额”并不是链上某个账户字段,而是一组你能够控制的 UTXO 金额之和。理解 UTXO,是理解 BSV 交易、钱包、找零、手续费、双花、并行处理以及应用状态设计的基础。

从 output 到 UTXO

一笔交易可以创建多个 output。每个 output 至少包含两类关键信息:

  • 金额
  • locking script,即未来花费它时需要满足的条件

如果某个 output 还没有被后续交易作为 input 花掉,它就是 UTXO。

可以用一个简单流程表示:

TEXT
1交易 A 创建 output 0
2output 0 尚未被花费
3output 0 = UTXO

如果后来交易 B 的 input 引用了交易 A 的 output 0,那么这个 output 就被花掉了:

TEXT
1交易 B input -> 引用交易 A output 0
2交易 A output 0 不再是 UTXO

因此,UTXO 的生命周期非常明确:

  1. 被某笔交易创建;
  2. 保持未花费状态;
  3. 被后续某笔交易作为 input 消耗。

UTXO 与账户余额有什么不同

很多人初学区块链时,会先接触账户模型。账户模型通常可以理解为:

TEXT
1Alice balance = 100
2Alice pays Bob 30
3Alice balance = 70
4Bob balance += 30

UTXO 模型不是这样。它更像现金纸币。

如果你手上有一张 100 元纸币,想买 30 元的东西,你不能把纸币撕下一部分交给商家。你会把 100 元交出去,商家再给你 70 元找零。

UTXO 的逻辑类似。假设你有一个 100 satoshis 的 UTXO,要支付 30 satoshis,那么这个 100 satoshis 的 UTXO 会整体作为 input 被消耗,然后创建新的 outputs:

TEXT
1收款人 output: 30
2找零 output: 69
3手续费: 1

结果是:旧的 100 satoshis UTXO 消失,新的 30 satoshis 和 69 satoshis outputs 出现。其中,30 satoshis 属于收款人,69 satoshis 通常作为找零返回给付款方,1 satoshi 作为手续费。

钱包余额是如何计算出来的

钱包会扫描或查询自己能够控制的 UTXO,然后把这些 UTXO 的金额加总,得到界面上显示的余额。

例如:

TEXT
1UTXO A: 500 satoshis
2UTXO B: 200 satoshis
3UTXO C: 50 satoshis

钱包显示的余额就是:

TEXT
1750 satoshis

链上并没有一个字段写着“这个钱包余额是 750 satoshis”。这个数字是钱包根据相关 UTXO 集合计算出来的。

这也是为什么同一个钱包可以有很多地址、很多 UTXO、很多找零输出。钱包界面隐藏了这些复杂性,但底层仍然是 UTXO 模型。

一个 UTXO 如何被定位

一个 UTXO 通常由两部分定位:

TEXT
1txid + output index

其中:

  • txid 标识创建这个 UTXO 的交易;
  • output index 标识它是这笔交易中的第几个 output。

例如:

TEXT
1txid: abc...123
2output index: 1

这表示:交易 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 条件和并行处理,就会清晰很多。

参考链接

推荐文章