# 比特币的 UTXO 模型是什么样

By [May](https://paragraph.com/@may-3) · 2021-11-28

---

　　**什么是 UTXO?**

　　一个未花费的交易输出(UTXO)就代表一定数量的比特币。多个 UTXO 可以组合、单个 UTXO 也可以拆分，做出支付所需的任何面额。

　　我们可以将 UTXO 理解成实物货币，因为它们必须作为完整的一个单元来使用。如果你想花 5 毛钱，你不可能掰开一个 1 块钱硬币来付款。相反，你必须花掉整个 1 块钱，然后拿 5 毛钱的找零。但是，不同于实物货币，UTXO 没有标准面额。一个 UTXO 可以是任意数量的比特币。

　　顾名思义，一个 UTXO 就是一个比特币交易的输出。输出以 UTXO 的形式存在，直到被用作另一个交易的输入为止，这时就不再是未花费的。

　　在任意时间点，现有 UTXO 的集合都被称为 UTXO 集。比特币节点会追踪 UTXO 集，从而确定哪些代币未被花费，以及哪些人可以花费它们。该系统可以让比特币解决多重支付(Double Spend)问题。双重花费问题是长期困扰数字货币尝试的一大难题。

　　**UTXO 是如何创建的?**

　　新的 UTXO 是通过花费现有 UTXO 创建的。每个比特币交易都由输入和输出组成。输入花费已有 UTXO，输出则创建新的 UTXO。

　　那么，如果新的 UTXO 是通过销毁已有 UTXO 创建的，那么最初的 UTXO 是怎么来的?

　　Coinbase 交易

　　Coinbase 交易是一种特殊类型的交易，通过创建新的比特币来奖励找到区块的矿工。由于创造了新的比特币，coinbase 交易没有输入，但是会产生一个或多个输出。就像所有正常输出一样，coinbase 交易的输出是新的 UTXO。

　　每个 UTXO 的历史都可以追溯到 coinbase 交易的一个或多个输出。

　　**理解比特币的 UTXO 模型**

　　比特币的 UTXO 模型不同于大多数数字货币系统。这是因为比特币的设计目的有别于传统金融系统。比特币的初衷是实现完全透明化、公平性和可审计性。UTXO 可以帮助比特币实现这些目标。那么 UTXO 模型是如何运作的?

　　**地址和 UTXO**

　　在传统金融系统中，交易会从一个账户中取出资金转移到另一个账户中。比特币的 UTXO 模型没有账户，因此没有专门的发送方 账户/地址。地址虽然被用来接收 UTXO，但是永远不会直接记录在区块链上。比特币地址是 scriptPubKeys 的编码，包含在每个交易的输出中。

　　当比特币被花费出去时，输入只包含执行 scriptPubKey 所必需的签名和公钥，并没有提到比特币来自区块链上的哪个地址。但是，UTXO 的上一个地址是可以轻松计算得出的。每个交易输入都通过交易 id 来指明其前序交易，并通过索引来指明使用该前序交易的哪一个输出(实质上就是在引用现有的 UTXO)。被引用的交易输出的 scriptPubKey 可以被转化成比特币地址。

　　**比特币的货币政策**

　　UTXO 模型可以让所有比特币节点在任意时刻就比特币的存在情况达成共识。也就是说，任何人都可以审计比特币的总供应量，来确保比特币的货币政策被严格遵守。

　　**UTXO 的组合和拆分**

　　一个比特币交易可以包含任意数量的输入和输出。因此，用户可以任意组合和拆分 UTXO 来完成任意金额的付款。

　　例如，Alice 持有两个 UTXO，分别价值 0.5 BTC 和 0.7 BTC。当她向 Bob 支付 1 BTC 时，可以使用这两个 UTXO 作为输入，然后将 1 BTC 的输入发送给 Bob。

　　Alice 还另外创建了一个 0.199 BTC 的输出作为找零发送给自己。由于需要支付交易费，她无法给自己发送 0.2 BTC。

　　交易费不以交易输出(UTXO)的形式体现。它是通过输入值和输出值之间的差额推算得出。

　　**交易验证**

　　UTXO 模型可以让比特币节点有效验证链上的每个交易。当节点收到一个交易时，无论该交易是否已经打包进区块，均可验证该交易内的 UTXO 是否真的有效且没有被花费。正因如此，比特币可以在不依赖可信第三方的情况下解决双重花费问题。

　　**UTXO 模型 vs. 账户模型**

　　大多数金融系统(包括银行和密码学货币)不使用 UTXO 模型。因此，用户不依靠某几种代币来控制资产，而是使用一个或多个账户，且每个账户都有余额。账户模型可以让金融机构和商家精确记录个人账户的借入贷出情况，避免找零和选币问题。

　　**账户模型的可靠性问题**

　　账户模型的优势是以牺牲透明性和可审计性为代价的。审计所有银行账户中的美元总量是不可能的。

　　另外，大多数账户模型饱受退单和账户透支等问题的困扰。由于比特币交易必须引用要被花费的 UTXO，无效交易不可能被添加到区块链上。

　　**UTXO 模型的隐私问题**

　　UTXO 模型为用户提供隐私优势。比特币用户可以将每个 UTXO 存储在不同的地址中分别处理。通过这种方式，用户可以隐藏其持有的 UTXO 之间的联系，避免暴露在公众视线中。对于区块链观察者来说，确定哪些 UTXO 属于哪些用户会变得更有难度。

　　比特币的设计极大降低了生成新地址的难度。账户模型系统(尤其在传统金融体系中)使得生成新账户变得非常麻烦，甚至不可行，迫使用户将全部或大部分资金存放在一个账户中。

　　链分析公司试图通过各种方法破坏比特币的隐私性并确定 UTXO 的所有权。然而，这些方法靠的是假设和间接证据，而非严格的逻辑。

　　相关术语

　　交易

　　交易是比特币从一个地址转移到另一个地址的记录。所有交易都记录在区块链上的区块中。

　　UTXO 集

　　UTXO 集是某一时间点存在的所有 UTXO 的集合。所有 UTXO 的总量就是比特币的当前供应量。

　　交易 ID(txid)

　　交易 ID(txid)是标识特定交易的一串字母和数字。这个字符串只是对交易进行二次 SHA 256 计算得到的哈希值。

　　多重支付

　　所谓的多重支付，就是有人将同一笔钱花了不止一次，并让一方或双方相信他们已经拿到了钱。比特币利用去中心化账本和带有时间戳的区块链解决了双重花费问题。

　　稀缺性

　　货币稀缺性指的是货币很难被找到或创造出来。虽然货币普及很重要，但是一旦货币可以被轻而易举地创造出来，会对经济产生负面影响。

---

*Originally published on [May](https://paragraph.com/@may-3/utxo)*
