来历
恨啊,这个拗口的词,害的员外一直理解不了这是个什么意思。好在员外不懈的努力下今天终于理解了个七七八八了,原来这个未消费的交易输出就是别人支付给了你,而你还没有花出去的钱。是挺难理解的吧,怎么不干脆叫自己的账户余额呢?非要叫个未消费的交易输出???搞的这么高大上的样子,接下来就切好瓜,边吃边看员外为您解读。
其实之所以叫这个,是因为它的英文是:Unspent Transaction Output。
Unspent:没有用完的、未耗尽的;
Transaction:交易、执行、办理;
Output:输出、生产、从电脑输出的信息。
所以连起来叫未消费的交易输出。那为啥缩写就成了 UTXO 呢,怎么中间多了个 X?
员外认为应该是在用比特币浏览器查看比特币区块信息时,里面是这么写的,用Tx标注交易笔数,所以大家慢慢的用TX来代替Transaction,而且在比特币社区里面大家也都是这么叫的。
好了,现在知道了这个词的来历,员外接着来解释这个词的意思吧!
UTXO是什么
其实就是一个交易模型,想要理解这个特殊模型的交易流程,我们先从传统的支付模型说起,我们用微信发红包来举例子吧,毕竟每个人都发过红包。
假设员外、天宇、死磕侠三个人每人微信里面都有100元的余额,现在员外给天宇发了50块钱红包,然后天宇又给死磕侠发了80块钱的红包。这个交易流程是这样的:
姓名 | 未交易的初始账户余额 |
---|---|
员外 | 100 |
天宇 | 100 |
死磕侠 | 100 |
姓名 | 第一次交易后账户余额 |
---|---|
员外 | 100-50=50 |
天宇 | 100+50=150 |
死磕侠 | 100 |
姓名 | 第二次交易后账户余额 |
---|---|
员外 | 50 |
天宇 | 150-80=70 |
死磕侠 | 100+80=180 |
这里面有一个需要注意的问题,就是在每一次交易成功的同时,微信服务器里面所有人的账户余额就会实时刷新一下。注意是所有人,再强调一下是所有用户的账户都会同步刷新一下,目的是为了防止双花,也就是一份钱可以花多次,那就乱套了。想想看关是微信每天就有多少的交易订单,员外想象一下一天成百上千万单应该都不止吧,同时也就意味着说不管有多少次交易达成,你的账户余额就会被实时的刷新多少次。
当然这个在中心化的系统内部是比较容易达成的,但是在去中心化的比特币中,压根不可能!!!所以未消费的交易输出(UTXO)完美的解决了这个问题。
UTXO的模型是这样的,每一笔交易都有一个交易输入,即资产的来源,给你转账的人是谁;还有一个交易输出,即资产的去向,你在给谁转账,这些交易都会以时间的顺序首尾相连被打包到区块内部,且不可更改。
假如员外钱包里面有5个比特币,其实本质是UTXO,天宇钱包里面一个也没有,死磕侠也是一个没有。现在员外要转给天宇5个UTXO,天宇需要给死磕侠3个UTXO,那么转账记录是这样的:
姓名 | UTXO(没有交易前) |
---|---|
员外 | 5 |
天宇 | 0 |
死磕侠 | 0 |
姓名 | UTXO(第一次交易) |
---|---|
员外 | 5-5=0 |
天宇 | 0+5=5 |
死磕侠 | 0 |
姓名 | UTXO(第二次交易) |
---|---|
员外 | 0 |
天宇 | 5-5+2=2 |
死磕侠 | 3 |
嗯?发生了什么?怎么第二次交易的时候,天宇的账户是5-5+2呢?为啥不是5-3=2!
因为在UTXO模型中,每一笔的交易输入都必须是上一笔或者多笔的交易输出,这样才能让每一笔交易都串起来,不会错乱。不同于传统中心化的交易,UTXO会有一个找零的过程。我们把员外给天宇转的5个UTXO当成是一个面值为5元的纸币,当天宇要想给死磕侠3块钱的时候,是不可能把这5块钱撕3/5给死磕侠的,而是把这一整张5块钱都做一个提交,系统会自动为天宇找回2块钱,死磕侠得到3块钱,这个找零的过程,死磕侠是不参与也不知情的,而死磕侠收到的这3块钱,又是一张面值为3元的纸币,以此类推。这个交易就此结束。
比特币使用了UTXO模型后,就不需要实时的刷新每位用户的账户了,因为系统可以根据每个用户的UTXO来推算出该用户所拥有的UTXO个数来,所以UTXO中每一笔交易输入都必须是上一笔或多笔订单的交易输出,这样交易才能实现首尾相连,有据可循!