什么是UTXO?

经常看到区块链技术中提及UTXO,究竟什么是UTXO呢?

————————

个人技术公众号:解决方案工程师

欢迎同领域的朋友关注、相互交流。

————————

搜索了半天,讲的都不太好理解,尤其是不明白UTXO比现在的记账方式有哪些优势。

集百家之长,成一家之言。我来通俗地讲一讲吧。争取看了这篇讲解,就不用像我一样,搜这个问题搜了十几个网页。

比较统一的解释:

UTXO(Unspent Transaction Outputs)是未花费的交易输出,它是比特币交易生成及验证的一个核心概念。交易构成了一组链式结构,所有合法的比特币交易都可以追溯到前向一个或多个交易的输出,这些链条的源头都是挖矿奖励,末尾则是当前未花费的交易输出。


读完这段话,似懂非懂,但仍然不明白这样设计的目的是什么。

我就以自问自答的方式来讲讲,中本聪为什么设计UTXO这个机制吧。

区块链是怎么记录比特币交易的?——记账。

怎么记账?——每个区块是由区块头和区块体组成,区块体中有账本,在账本上记就行了。

那如果交易特别多的话,记录的信息会不会很占内存?——如果像支付宝的账单、微信支付的账单那样,是很占内存的。比如,你有10元钱,花了5块钱,出来一个“-5元”的账单;然后收到3元钱,又出来一个“+3元”的账单;... ... 以此类推。那么计算余额时是这样计算的:“10-5+3=8(元)”。不但计算过程比较复杂,还很占内存。

有多占内存?——假设比特币和传统货币一样,使用账户余额系统,首先需要一个数据库,记录所有人的余额。这里假设全世界使用比特币的用户有10亿人,每个人每天交易10次,那么平均每秒余额变动将达11万次,如果按照这个频次继续下去,用不了多久相关数据就会撑爆线上的服务器。

那怎么办呢?——所以,中本聪提出了UTXO,一种基于交易的记账方式。刚才讲的,支付宝、微信那种记账方式,是基于账户的记账方式。仍然举这个例子,通过使用UTXO记账方式。比如,你有10元钱,花了5块钱,出来一个“之前剩余10元,现在剩余5元”的UTXO账单;然后收到3元钱,又出来一个“上次剩余5元,现在剩余8元”;... ... 以此类推。那么这种模式下,即使你之前的账单丢失了,也能知道当前的余额。并且与基于账户的记账方式相比,在计算复杂度、存储空间等方面,都很占优势。

哦,大体明白了,那我支付宝里钱,每花一笔钱,余额会减少相应的钱数啊,感觉也很方便啊?——是的,那是因为第三方中心化机构在你历史的交易账单基础上计算出来的。但是去中心化的系统中,你的余额没有第三方中心化机构给你计算余额,所以每次都得通过历史账单自己计算余额。这就回到了开篇提出的“占内存大”的问题了。

附上一个 UTXO账单解释图。(图片来源于知乎作者:悦诗LY)

相信大家应该能明白UTXO的概念和工作方式了吧,UTXO的方案简单到极致,只确认交易本身。总结一下UTXO的优点:

(1) UTXO不能分割,只能被消耗,独立的数据结构大大减少了计算量。

(2) UTXO配合地址使用,具备天然的匿名性,保证了账户的安全。

(3) 因为地址的存在,UTXO的销毁和产生,都可追溯,很难伪造。

(4)长期来看,UTXO的数据占用更小,而余额系统会越来越臃肿。

所以大家看明白了吧,比特币不是具体的钱币,只是UTXO账单上的一个数。

最后,附上一段话。正如,中本聪在比特币白皮书上说:

It should be noted that fan-out, where a transaction depends on several transactions, and those transactions depend on many more, is not a problem here. There is never the need to extract a complete standalone copy of a transaction’s history.

当一笔交易基于之前的多笔交易时,这些交易又各自基于多笔交易,但这并不存在任何问题。因为这个系统永远不需要提取一份所有历史交易的完整记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值