首页 > 技术文章 > UTXO

Severus-Cavendish 2021-11-22 15:07 原文

定义

UTXO 是 Unspent Transaction Outputs(未使用的交易输出) 的缩写,每一个比特币其实都是 UTXO,它是比特币的最核心概念之一。

在比特币系统上其实并不存在“账户”,而只有“地址”。只要你愿意,你就可以在比特币区块链上开设无限多个钱包地址,你拥有的比特币数量是你所有的钱包地址中比特币的总和。比特币系统并不会帮你把这些地址汇总起来形成你的账户。

从以上讨论中我们可以看到,的确不存在比特币,只有未使用的交易输出(UTXO)。每一笔比特币都源自上一个交易,可以一直向上追溯上去。而一直向上追溯,在每一笔比特币的源头,都有一种特殊的交易,即比特币矿工因挖矿获得奖励的创币交易,每一个比特币都是通过挖矿被创造出来的。假设我作为比特币矿工挖矿成功赢得了 25 个比特币,那么这个特殊交易是,它的输入是 0,而输出是 25 个比特币进到矿工的钱包地址中。

优点

UTXO设计易于确认比特币的所有权

如果采用传统的账户设计,当我要转账 8 个比特币出去时,为了完全避免造假,我们就需要逐一向上追溯,确认之前的每一笔交易,从而证明我的确拥有 8 个比特币。

采用现在的 UTXO 设计,要确认我拥有 8 个比特币,只要确认上一个交易我的确获得了它们即可。通常只要上一个交易是真实的,我就的确拥有这些比特币。而我们都知道,一个区块经过 6 次确认,其中的交易可被认为是真实无误的。

UTXO设计与区块链账本是完全融为一体的

区块链账本存储的是状态。以太坊是对比特币区块链的改进,在白皮书中,以太坊创始人维塔利克分析了比特币,他认为,“比特币账本可以被认为是一个状态转换系统(state transition system)”。以太坊也是采用这种状态转换系统的设计,但对之进行了改进。

微观地看,每一个区块链中的交易都是一个状态转换函数,以太坊白皮书就用“以太坊状态转换函数”(Ethereum state transition function)来讨论在区块链上一个交易的进行过程。

为什么采用UTXO的形式

UTXO 与我们熟悉的账户概念的差别很大。我们日常接触最多的是账户,比如,我在银行开设一个账户,账户里的余额就是我的钱。

但在比特币网络中没有账户的概念,你可以有多个钱包地址,每个钱包地址中都有着多个 UTXO,你的钱是所有这些地址中的 UTXO 加起来的总和。

中本聪发明比特币的目标是创建一个点对点的电子现金,UTXO 的设计正可以看成是借鉴了现金的思路:我们可能在这个口袋里装点现金,在那个柜子角落里放点现金,在这种情况下不存在一个账户,你放在各处的现金加起来就是你所有的钱。

采用 UTXO 设计还有一个技术上的理由,这种特别的数据结构可以让双重花费更容易验证。对比一下:

  • 如果采用账户和账户余额设计,Alice 要转账给 Bob,为了确保 Alice 的确有钱,我们需要核查她之前所有的交易。随着时间的推移,比特币的交易越来越多,这个验证的难度会持续上升。
  • 采用 UTXO 设计,我们只要沿着每个交易的输入逐级向上核查,直到查到这笔比特币的创币交易即可。随着时间的推移,这个核查也会变难,但变难的速度要远低于采用账户和账户余额设计。

这种设计使得比特币系统作为一种电子现金系统有着非常大的可扩展性。当然,我们很快会看到,通常被认为是区块链 2.0 的以太坊没有继续采用 UTXO 设计,而是考虑到其他因素,采用了账户余额的设计,其代价正是中本聪可能已经考虑到的复杂性。

推荐阅读