date
Oct 12, 2024
icon
password
Pin
Pin
Hide-in-Web
Hide-in-Web
网址
type
Page
slug
btc-utxo
tags
知识点
category
bottom
bottom
Hide-in-Config
Hide-in-Config
comment
Show
status
Published
summary
UTXO(Unspent Transaction Output,未花费交易输出)模型是区块链系统中一种用于记录交易的机制,最早由比特币采用。UTXO 模型通过追踪未花费的交易输出来管理账户余额和交易处理。
UTXO 模型的基本概念
- 交易输出 (Transaction Output):每笔交易都有输出,即将某个金额从一个地址转移到另一个地址。输出记录了资金的归属和金额,只有未被花费的输出才能用于新交易,这些未花费的部分就是 UTXO。
- 交易输入 (Transaction Input):新的交易使用之前的交易输出(UTXO)作为输入。这意味着新交易会“消费”之前的某些交易输出。

- 交易的组成:每笔交易由多个输入和输出构成。输入代表资金的来源,输出代表资金的去向。
UTXO 模型的工作原理
- 生成 UTXO:当某个地址接收到一笔资金时,这笔资金被记录为 UTXO,并与该地址相关联。直到这笔资金被花费之前,它都是“未花费”的。
- 消费 UTXO:当用户进行新的交易时,系统会使用一个或多个现有的 UTXO 作为输入,形成新的交易输出。每笔交易都会消耗输入的 UTXO 并创建新的 UTXO。被消耗的 UTXO 就不再是“未花费”的状态。
这里有一点非常重要,那就是用户在使用 UTXO 集合中的比特币进行消费的时候,使用的都是整块整块的 UTXO,比如 B 有两笔收入 A → B 和 C → B,金额分别是 4 BTC 和 5 BTC ,那么下次 B 在支付一个 6 BTC 的商品时,就需要这两笔交易同时作为输入地址,此时 total inputs = 9 ;输出地址也会有两个,一个是收款地址 T₁,一个是找零地址 T₂,因此 total outputs = T₁ + T₂(当然,total inputs > total outputs,差值支付交易费了)。商家收到钱后,会再发起一笔交易 T₂ → B,将零钱转给 B。
比特币中的交易无法像我们使用现金一样精确地支付小额,这时由 UTXO 的特性决定的。
- UTXO 集合:每个区块链节点都会维护一个 UTXO 集合,存储当前区块链上所有未花费的交易输出。这是确定某个地址有多少余额的方式。
- 余额计算:某个地址的余额等于与该地址相关联的所有未花费 UTXO 的总和。并没有直接的“账户余额”字段,余额是通过汇总该地址的 UTXO 来计算的。
UTXO 模型的优点
- 提高隐私性:由于每笔交易可以有多个输入和输出,并且 UTXO 没有与特定账户绑定,不同的 UTXO 可能与不同的地址相关联,使得资金流动的隐私性增强。
- 去中心化且简单:每个节点只需要追踪未花费的交易输出,而不需要管理账户状态,系统设计相对简单且易于去中心化管理。
- 并行处理:UTXO 模型允许多个交易同时处理,因为每个交易处理的是不同的 UTXO。这使得系统在高并发情况下表现更好。
UTXO 模型的缺点
- 复杂性:对于用户而言,理解 UTXO 模型比理解账户余额模型复杂。每次交易需要指定具体的 UTXO 来作为输入,这可能导致很多零散的小额输出,形成所谓的“零钱”(dust)。
- 交易膨胀:随着交易的不断生成,UTXO 集合会不断膨胀,这会增加节点存储和处理的负担。