UTXO

UTXO 代表未花费交易输出 (Unspent Transaction Output),它是比特币交易模型的基本组成部分。在 UTXO 模型中,没有“账户”或“余额”的概念。区块链追踪的是尚未花费的单个交易输出。

用户的“余额”是其控制的所有UTXO的总和。进行交易时,UTXO作为输入被消耗,新的UTXO作为输出被创建新的UTXO。这种模型提供了固有的双重支付保护和增强的隐私性,并且至今仍是比特币和其他几个主流区块链的底层数据模型。

UTXO模型是如何起源和发展的?

2009 年:中本聪从一开始就使用 UTXO 模型设计比特币,借鉴了早期的电子现金概念,其中每个 UTXO 的功能都类似于数字钞票。

2010 年代:莱特币和比特币现金采用了相同的 UTXO 模型,因为它们要么是从比特币的架构分叉出来的,要么是紧密地遵循比特币的架构。

2015 年:以太坊推出,采用了一种从根本上不同的设计——账户模型,确立了 UTXO 和基于账户的账本作为区块链架构中的两大主导范式。

2021 年: Cardano 在 Alonzo 升级中引入了其扩展 UTXO (eUTXO) 模型,向 UTXO 添加了“datum”字段,以便该模型可以支持智能合约,同时保留原始 UTXO 设计的大部分并行性和可预测性。

2024 年至 2026 年: Ergo 和其他较新的区块链继续构建 eUTXO 风格的设计,随着比特币钱包添加更智能的币种选择算法以减少日常用户的费用和灰尘积累,UTXO 管理工具也日趋成熟。

如何用简单的语言解释UTXO?

在比特币中,你没有像银行账户那样的“余额”。相反,你拥有的是一系列不同大小的“数字货币”(UTXO)。如果你拥有价值分别为 0.3 BTC、0.5 BTC 和 0.2 BTC 的 UTXO,你的总“余额”为 1.0 BTC,但实际上这只是三种独立货币价值的总和。

消费时,您会使用完整的UTXO,并收到找零,就像使用纸币支付一样。如果您用10美元的纸币购买一件7美元的商品,您会收到3美元的找零。同样,如果您使用0.5 BTC的UTXO进行0.3 BTC的支付,您会收到0.2 BTC的找零(扣除网络手续费)。

UTXO 模型为何重要?

双重支付防护是核心保障:每个UTXO只能被花费一次,这是系统的一项基本安全属性。隐私性自然得到提升,因为每笔交易都可以使用新的地址,这使得链上追踪比使用重复的静态地址更加困难。并行处理成为可能,因为可以同时验证独立的UTXO,而无需按顺序更新单个共享账户状态。验证过程保持简单,因为全节点只需检查输入是否有效且输出是否未花费,而无需跟踪余额。真正理解UTXO是理解比特币交易底层工作原理的关键。

UTXO交易究竟是如何运作的?

考虑一个简单的例子。Alice 有两个 UTXO:UTXO A 价值 0.5 BTC,UTXO B 价值 0.3 BTC。Alice 想向 Bob 发送 0.6 BTC。

她的交易消耗了两个UTXO作为输入,总计0.8 BTC。然后,它产生了三个输出:0.6 BTC作为全新的UTXO发送给Bob,0.19 BTC作为找零UTXO返还给Alice,0.01 BTC作为交易费支付给矿工。UTXO A和UTXO B现在被标记为已花费并从UTXO集合中移除,而两个新的UTXO,即Bob的0.6 BTC和Alice的0.19 BTC找零,被添加到UTXO集合中。

UTXO 有哪些特性?

UTXO 是不可分割的,这意味着它必须在交易中被完全消耗,而不能部分消耗。根据定义,它是未花费的,只有当它尚未被用作其他地方的输入时才会出现在 UTXO 集合中。它由脚本锁定,通常需要有效的数字签名才能花费。而且,一旦创建,UTXO 就不可更改;它不能被修改,只能被花费(从集合中移除)或保持未花费状态。

UTXO模型与以太坊的账户模型有何异同?

特性UTXO模型(比特币)账户模型(以太坊)
州未使用的产出集合账户余额加上合同存储
余额持有的UTXO总额每个账户只有一个账号
隐私性更高(每次交易使用新地址很容易)较低(地址重用很常见)
排比自然(独立UTXO)更复杂(共享状态)
智能合同虽然受到 Cardano 的 eUTXO 等设计的扩展,但其功能仍然有限。完全原生支持
交易规模随输入和输出的数量而变化更可预测
双重支付保护这是固有的,因为UTXO一旦被消耗就消失了。通过按账户进行 nonce 跟踪来处理

UTXO模型的优点和缺点是什么?

UTXO 的优势显而易见。UTXO 本身就具备双重支付证明机制,因为每个 UTXO 只能被花费一次。每笔交易使用一个新地址,自然而然地保障了隐私性。由于可以同时验证多个独立的 UTXO,因此可以实现并行处理。验证过程也十分简单,验证者只需检查给定的 UTXO 是否未被花费,这是一个二元的“是”或“否”问题。交易结果具有确定性,因为交易结果完全由其输入决定。此外,UTXO 集合能够清晰、可审计地记录任何时间点所有可花费代币的快照。

缺点也确实存在。对于日常用户而言,这种模型不如基于账户余额的模型直观。它更难用于有状态智能合约,这也是以太坊选择账户模型的部分原因。“UTXO 尘埃”(UTXO 非常小,其花费成本高于其价值)会随着时间的推移而积累。钱包必须通过代币选择算法主动管理 UTXO 的选择,这增加了后台的复杂性。包含大量输入的交易比简单的基于账户的转账更大、更昂贵。而且,随着网络使用量的增加,UTXO 的总量也会增长,这会影响节点存储和同步时间。

UTXO 管理的实际应用案例有哪些?

场景:比特币用户,例如矿工或频繁接收小额付款的商家,随着时间的推移会积累数百个小型UTXO。当他们最终需要进行大额付款时,一次性消耗100个或更多UTXO的交易会因为其规模过大而变得异常庞大且费用昂贵。

实现方法:精明的用户会在网络费用较低时进行“UTXO合并”,即提前将多个小的UTXO合并成一个更大的UTXO。这类似于在银行用零钱换取纸币:虽然不会改变你拥有的金额,但会让未来的交易更便宜、更便捷。

结果:用户通过在低手续费时期进行交易整合,而不是等到急需大额支付时才进行,可以避免在网络活动高峰期(也就是手续费高峰期)支付高额费用。对于任何长期积累大量小额UTXO的用户来说,这都是一条实用的建议,例如矿池支付小额份额,以及商家处理频繁的小额交易。

关于UTXO的常见问题

什么是UTXO粉尘? UTXO粉尘指的是极小的UTXO,通常约为0.00000546 BTC(546聪),这是历史上被认为经济实惠的最小交易额。然而,这些UTXO的交易手续费却超过了它们的价值。UTXO粉尘会随着零钱的积累而累积,并在网络手续费高企时变得几乎无法使用。

如果没有账户,我的钱包如何知道我的余额?你的钱包会扫描整个UTXO集合,查找锁定在你地址上的输出。它会使用你的私钥,将你可以花费的每个UTXO的价值相加,并将总和显示为你的“余额”。区块链本身并不存储余额;你的钱包每次都会根据底层UTXO数据重新计算余额。

什么是扩展UTXO (eUTXO)? Cardano 使用的扩展UTXO在UTXO中添加了一个“数据”(datum)字段,从而在UTXO模型中实现了智能合约功能。这既保留了UTXO模型固有的并行性和确定性,又支持可编程逻辑,这种方法介于比特币的简单UTXO模型和以太坊的完全有状态账户模型之间。

为什么以太坊选择账户模型而不是UTXO?以太坊的创建者希望支持复杂且有状态的智能合约,而使用账户余额和持久化合约存储通常比使用UTXO集更容易理解和实现。但账户模型的权衡之处在于,它牺牲了UTXO的一些固有隐私性和并行性优势,以换取更灵活的可编程性。

其他区块链可以使用UTXO模型吗?可以。莱特币和比特币现金本质上都使用了与比特币相同的UTXO模型,因为它们都是比特币代码库的衍生版本。卡尔达诺和Ergo则使用了扩展UTXO的变体,在保留UTXO核心结构的同时,增加了对智能合约的支持。UTXO模型和账户模型仍然是目前区块链架构中两种主流的架构方式。

相关条款

比特币:最初的区块链,也是引入UTXO模型的网络。

账户模型:以太坊使用的替代账本设计,它跟踪每个账户的余额,而不是未花费的输出。

双花攻击:UTXO 消耗通过确保每个输出只能使用一次,从而从本质上防止了这种攻击。

私钥:用于解锁和花费UTXO的加密密钥。钱包:扫描UTXO集合并代表用户管理币种选择的软件。

挖矿:确认新交易(包括新的UTXO)并将其添加到区块链的过程。

来源

比特币白皮书,《比特币:点对点电子现金系统》(2008 年)

Bitcoin Core 开发者文档中关于 UTXO 集的内容;Cardano 文档中关于扩展 UTXO (eUTXO) 模型的内容

新闻