UTXO是什么?

UTXO是英文Unspent Transaction Output(未花费的输出)的缩写,Transaction简写为TX,其中X是act发音简写。

本文围绕以下几点展开:

什么是交易?

UTXO是什么?

为什么数字货币区块链系统选择了UTXO?

区块链系统中可以舍弃UTXO吗?

这里,我只谈数字货币系统,数字货币交易系统中的一笔交易是指一个账户(一个私钥)把自己拥有的货币转给另一个(或几个)账户的过程。每当一个区块产生,交易就被写入区块。目前数字货币系统,为了追溯每一笔交易,系统设计成把每一笔交易记录到数据库中。

如果我来设计这个系统。可能会是下面这个样子。

新建一张Transaction表,里面有transactionId/from user/to user/amount三个字段。

transactionId fromUser toUser amount

每次打包交易的时候,先校验交易合法性(from账户是否有足够的资金转账),把交易写入Transaction表,生成一个区块(计算一次Hash)。

这个设计有什么缺陷?为什么比特币创始人不按照一般人的思路进行设计。

表会无限增大。

目前比特币交易数据200GB。可以想象一张200GB的数据表。200GB的表已经无法优化。这种问题只有在设计层面解决。

UTXO是中本聪最早在比特币中采用的一种技术设计方案,解决表数据无限增大的问题。UTXO是一种技术方案,因此UTXO不是必须的,据说以太币设计之初没有采用UTXO,尴尬的是后来要改用UTXO。

UTXO技术以交易为中心,amount是与交易绑定的,表结构如下

transactionId fromTransactionId toAccount amount info

0001 null account001 100 挖矿奖励

上述行说明0001交易来源于挖矿奖励,交易输出给账户account001。账户account001拥有交易0001的支配权。

transactionId fromTransactionId toAccount amount info

0002 null account001 100 挖矿奖励

上述行说明0002交易来源于挖矿奖励,交易输出给账户account001。账户account001拥有交易0002的支配权。

transactionId 0001与0002的交易输出amount都属于账户account001。account001拥有两个交易输出amount。

UTXO要求交易的输入是一个交易id,并且每笔交易的id只能用一次。

transactionId fromTransactionId toAccount amount info

0003 0001 account002 100 转账

上述行表明account001转账给account002 100比特币。(仔细思考:为什么能确定转账方?为什么每笔交易id只能用一次?)

以上验证了UTXO可以用于追溯交易。

最后,我们来看一下UTXO如何减少表数据。

因为每笔交易只能被使用一次,因此用过一次以后,就不可以再次被使用,所以可以从表中删除,表中只保留有效信息,因此表数据在设计层面得以指数级减少。

你可能感兴趣的:(blockchain)