比特币的UTXO是什么?

 2023-09-02 15:54:36发布 2023-09-03 11:39:42更新

UTXO,全称Unspent Transaction Output,意思是“未花费交易输出”。

每笔比特币交易都有输入和输出,别人付给你的钱是“交易输入”,你收到的钱是“交易输出”。只不过当你没支付出去之前是“未花费的交易输出”,一旦你支付出去,就变成了真正的“交易输出”。

UTXO

UTXO

帐户的余额模型和UTXO模型

余额模型生活中很常见,比如我们的银行帐户、微信帐户,都是基于余额模型。

帐户内的余额是作为一个整体存在的。李雷的帐户上有多少钱,看一下余额便知道,在发生交易时,变动的是余额。

假如情人节当天,李雷通过微信给韩梅梅转520元,李雷微信帐户余额会减掉520元,而韩梅梅帐户余额会增加520 元。

UTXO模型则不同于帐户模型。李雷有多少比特币,要对他比特币地址所有UTXO求和才知道。

简单来说,UTXO模型就像我们用的钱包,而钱包里的每张纸币或每枚硬币都是一个单独的UTXO,因此钱包里有多少钱,并不一目了然,需要把所有纸币和硬币面额相加才能得出。

而每一次收付款,是以UTXO为单位消耗或者接收的。比如我们用10元钱买5 元早餐时,这个10 元作为一个UTXO先整体付给卖家,卖家再找零给你。

举例来说:

情人节当天,李雷给韩梅梅买花,价格520 元。用现金支付,他掏出6 张百元大钞(相当于6 个100 元的UTXO)给卖家,卖家需要给李雷找零80 元(50 元、20 元和10 元纸币各一张)。这个过程中显而易见,李雷花600元买花,得到80 元找零,卖家卖出花,得到520 元。

从UTXO 的角度看,李雷花掉了6 个UTXO(6 张100 元),得到3 个UTXO(3 张找零);卖家得到6 UTXO,找零时花掉了3 个UTXO。

如果用比特币完成这笔交易,过程就会稍有不同。

假设李雷用6 个均为1 BTC 的UTXO 付给卖家5.2 BTC,最后卖家得到一个价值5.2 BTC 的UTXO,找零给李雷是一个价值0.8 BTC 的UTXO,换句话说6 个UTXO 被「销毁」,变成了两个新的UTXO。

(两者不同的原因在于,纸币面额的种类有限,而比特币不受这个限制)。

如果这一过程发生在比特币网路上,转帐过程是怎样的?

李雷挖矿得到系统奖励的12.5 枚比特币,于是李雷比特币地址上就有一个12.5 BTC 的UTXO。

李雷要转5.2 BTC 给韩梅梅,12.5 BTC 的UTXO 将会被整体花掉,其中5.2BTC 转给韩梅梅,剩下的7.3 BTC 找零给自己(为方便讨论,此处忽略矿工费)。

换句话说,之前12.5 BTC 是以一个UTXO 的形式整体存在的,在进行转帐时,这个UTXO 被「销毁」了,不存在了,变成了两个新的UTXO:一个属于韩梅梅,这个UTXO 价值5.2 BTC,另一个属于李雷,这个UTXO 价值7.3 BTC,这是找零给李雷的。

UTXO

两种模型的转帐对比

UTXO 核心设计思路是:记录交易事件,而不记录最终状态。要计算某个用户有多少比特币,就要对其钱包里所有的UTXO 求和,得到结果就是他的持币数量。

需要注意的是,UTXO 模型在转帐交易时,是以UTXO 为单位的,也就是说在支付时,调用的是整数倍UTXO,比如1 个UTXO,3 个UTXO,没有0.5 个UTXO 的说法。

推荐阅读