分享

UTXO

 yliu277 2022-05-08 发布于湖北省

一、什么是UTXO?

UTXO(Unspent Transaction Output)指未花费的交易输出。

每笔比特币交易都有输入和输出,别人付给你的钱是“交易输入”,你收到的钱是“交易输出”。

你一定会奇怪,你收到的钱明明放在账户里没动,为什么会被叫做“输出”?

对,这就是“输出”,只不过是“未花费的交易输出”。一旦你支付出去,就是真正的“交易输出”。

如果xxx昨天转你1.5个比特币,交易是这样的:

绿箭头左右两侧,分别是xxx和你的地址。

注意:地址看起来像账户,但它不是账户,因为账户的另一头对应你的姓名和密码,而地址的另一头却只有公钥和私钥。

换句话说,比特币系统根本不认识持币者是谁,它只认识私钥和公钥。

那么飘来一个问题:xxx转给你你1.5个比特币,你的地址收到币的一瞬间,余额是多少?

答案是:没有余额。

这1.5个比特币不是余额,而是你地址里的未花费交易输出(UTXO)。

xxx账户之所以没有余额,不是因为没有币,而是比特币系统没有“账户”一说,只有“地址”的概念。“账户”对应“余额”;而“地址”只对应UTXO。

你一定会更奇怪,余额和UTXO都代表拥有的财富,不就是一回事么?

其实,看起来相似的东西,实际上可能完全不同。

二、UTXO和余额区别在哪?

回答这个问题前,我们首先一起思考:如果比特币和传统货币一样,使用账户系统,会有什么问题?

首先需要一个数据库,记录所有人的余额。

如果所有人的余额都像刻在石碑上一样,风吹雨打十年不变,那没问题。可实际上,我们的账户余额常常一天变十次。

记录余额不算个事,更新余额才折腾人。

如果全世界有10亿用户,每人每天交易10次,那么平均每秒余额变动将达11万次。按照这个速度生产余额表,几周之后,就能撑爆Google和支付宝两家店所有的服务器。

而且,如果每次支付都更新余额表,那么一定有信息冗余:如果你双十一那天什么都没买,但你的余额会随着全国人民被更新14.8亿次:

任何一笔交易发生后,所有人的余额即使没变也要更新,这又是为什么?

因为要避免双重支付。

比如这种情况:

有人给我1个比特币,我很高兴,但我转念一想:应该确认这笔钱别人有没有付给过其他人,否则我就会像收到空头支票一样。

于是,我打开余额表一看,发现别人确实有这笔钱,我更高兴了,一激动给别人发货。晚上噩耗传来:我被双重支付了,收到的那个比特币根本没法用,因为已经被支付给其他人了,而我查的那张余额表在当时还没更新。

都找不到衙门喊冤。

点对点系统没有中心的权威账本,达成共识需要经过大多数节点确认,如果信息传递有时间差,就不能同时确认所有账户余额,所以必然面临双重支付。

如果比特币被设计成这样,一定出师未捷身先死,而UTXO一举扫平余额方案搬不走的两座大山:数据库肥硕和双重支付问题。

UTXO的方案简单到极致:只确认交易本身

使用UTXO产生的数据库比使用余额系统的数据库小得多。比特币运行八年多,全部交易记录不过几百G,一台普通家用电脑就能装下。

至于账户余额嘛,你从上到下扫描一遍同一地址所有的进进出出,立等可取。你只要等上6个区块的确认时间,就能确保不被双重支付,因为这笔交易得到了全网的确认。

中本聪在比特币白皮书上说:

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.

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

中本聪的意思是:我根本不怕交易多,因为我的工具和别人不一样。

三、反直觉的UTXO

几年前,如果不理解UTXO你甚至都不敢做交易。因为你会经历这样的场景:

12月1日,你爸爸给你1个币;

12月2日,你妈妈给你2个币;

12月3日,你客户给你5个币;

现在你的地址上一共有8个币。

如果你要花4个币买饼吃,那么你会看到交易记录是这样的:

从你地址上减5个币。

可是,你明明只要花4个币,为什么会扣5个?

因为比特币没有余额,只有UTXO。

你有三个未支付的交易输出(UTXO),分别是1、2和5,这三个UTXO像三个硬币一样,没办法掰开来花,只能全部付出去,但系统会给你找零。

所以别担心,看起来你多付了钱,但其中4个币给卖饼的,另外1个币会回到你地址上,而这一切都由系统自动完成。

原来这些都要我们自己动手编程做,所以我们不得不感谢现在的比特币钱包,是它们让我们即使不理解UTXO,也不影响使用。

UTXO的设计非常反直觉,得到专栏作家卓克曾经有篇文章介绍比特币付款的过程:

他说他给奶茶妹妹5个比特币,系统会在他的账上扣5个币,在奶茶妹妹账上加5个币,然后这笔交易全世界都帮他记入区块中永久保存。

这篇文章非常精彩,但在这点上卓老板彻底搞错了。这种理解是完美的余额系统定式思维,他一定没读过这篇文章,才会犯下这样的错误。

关于比特币的一切都是公开的:账本公开、白皮书公开、源代码公开,但就是这么一个完全公开的东西,大多数人没有理解,这是比较好玩的。

结语

现在你一定明白:其实并没有什么比特币,只有UTXO

如果比特币价格一直涨,手握6位数比特币的李笑来身价超过比尔·盖茨也不会成为世界首富,不是因为他没有余额,而是因为另一个人有7位数的比特币,他就是比特币之父中本聪(Satoshi Nakamoto),我们都听过他名字,却不知道这名字背后对应的是谁。

但他一定是个高质量的思想者,所谓“高质量”,不是“什么都想到”,而是尽可能做到“想到那些必要条件”,而UTXO就是其中之一。

于是,仅仅是设计思想的分岔,面对平庸和不朽两条大道,比特币头也不回地向后者奔去。

附封面图:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多