博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
区块链100篇之第五篇--UTXO
阅读量:5038 次
发布时间:2019-06-12

本文共 2380 字,大约阅读时间需要 7 分钟。

第一次看到UTXO是去年10月份的时候在一个微信群上有一个人说了一句话,说:”只要理解了UTXO就理解了比特币“,虽然这话有点夸大了,毕竟比特币并不只有UTXO这个技术,涉及到的东西还是很多的,但可以把这句话改成”只要理解了UTXO就能理解比特币的去中心化的含义“,因为UTXO区别于我们传统上的交易都是基于账户模型的,它是中本聪发明的交易模型,暂且叫UTXO模型,理解了UTXO的交易模型就能明白为什么比特币是去中性化的。

什么是UTXO?

UTXO的全称叫Unspent Transaction Output,因为外国人习惯把Translation叫做TX,所以就简称为UTXO,中文翻译过来就是“未消费的交易输出”,从字面上的意思可以从两点入手来理解,第一是:未消费;第二是:输出。 

未消费就是还没有花出去的,这就好比你现在手上有一张十块跟一张五块,这时候你去吃个饭花了十块,那么你手上就只剩五块了,而这五块就是未消费的。 
什么是输出?刚开始看到这两个字时可能会有些疑问,输出意味着拿出去,也就是花出去,那都花出去了怎么能叫未消费呢?按正常的逻辑确实讲不通,但可以换个思路。既然有输出那自然对应的就会有输入,那什么是输入呢?输入就是交易时的给那笔钱,举个例子,本来你打算只吃十块钱的饭,但是你发现只要再加两块钱就可以多加一个鸡腿,于是你改变主意想吃十二块的饭,这时你手里只有一张十块的跟一张五块的,没有两张一块的,于是你就拿着十块跟五块给老板。这里的十块跟五块就是你跟老板之间的交易的输入,然后老板就把饭打给你,接着还找了三张一块钱的给你,这里的三张一块钱便是输出,而且这三张一块钱你还没有花出去,也就是“未消费”,那么就可以把这三张一块钱称为“UTXO”。 
这里可以给UTXO下个简单的定义:UTXO = 一笔交易的总输入 - 在这笔交易中花费了多少钱(包括手续费)。为什么说是简单的定义,因为UTXO也有可能是挖矿得到的,比如中本聪挖的第一个区块(也就是创世区块)得到的50个比特币,这50比特币就是UTXO,所以说我刚才的定义并不准确,我下的定义是排除了挖矿这种情况,只在正常的交易过程中适用。到这里你可能会有些疑问,第一,你付给老板的那十二块算不算UTXO?这个问题需要单独写一篇才能说明白,也就是比特币的找零机制,留到第十篇讲,这里先说一下为什么不能简单的说那十二块是不是UTXO,在概念层面上,答案是肯定的,因为这十二块就是“未消费的输出”,但是在实际上我们并不能将你付给老板的那一张十块跟一张五块拆开来,你不能把那张五块钱撕成两半,一半代表两块钱一半代表三块钱,这个在现实世界里是做不到的,但是在比特币的世界里却是很轻松,这个之后再详细讲;第二,既然UTXO可以作为交易的输入,那么交易完成后这个UTXO如何处理,答案是销毁,一旦交易被确认并记录到比特币的区块中,那么这个UTXO就会被永久的销毁掉。

比特币是如何通过UTXO实现交易的?

大概明白了什么是UTXO,那么就来讲讲UTXO的交易过程是怎样的。为了理解我们可以举个现实交易的例子,现在我要转一百块钱到你的账户去,基本的过程是这样的,银行会先检查我的账户里的余额有没有大于等于一百块,如果有那么就会将我的账户减去100,接着会在你的账户上增加一百,这个过程看起来很容易理解,因为银行确实就是这么干的,但是这里要注意的就是在你我之间存在着一个中心机构,它帮我们进行账户的验证以及转账的操作,但是在比特币的世界里是没有中心机构的,那么它是如何做到即使没有中心机构依然可以让交易顺利的进行? 

假设我现在手里总共有十个比特币,这个十个比特币可能是很多个UTXO组成的,比如0.1BTC,0.5BTC,3BTC,0.0123BTC,6.18BTC,0.2077BTC,这些UTXO总共加起来有10个BTC,这个时候我想转3.55个BTC给你,那么这个时候交易的输入就是0.1BTC,0.5BTC,3BTC,而交易输出就是3.55BTC跟0.05BTC,其中3.55BTC这个UTXO会使用你的公钥进行“锁定”,而0.05BTC的UTXO会使用我的公钥进行“锁定”(这里涉及到非对称加密,可以看我的第二篇博客),一旦被脚本锁定就说明这个比特币是属于谁的,因为只有拥有公钥对应的私钥的人才能进行解锁。到这里我的账户上的比特币总量是6.45个比特币,分别是0.0123BTC,6.18BTC,0.2077BTC跟0.05BTC,注意到没,这里我账户“余额”并不是6.45BTC,而是被我(所有者)锁住的、分散的UTXO,在比特币世界里并没有所谓的“余额”,只有UTXO,我们平常所说的比特币“余额”多少,是通过扫描区块链并聚合所有属于该用户的UTXO来计算该用户的余额。注意到这里你我之间并没有任何的第三方介入,纯粹就是我们两人之间的交易而已,这边是去中心化。

UTXO有什么优点?

看完上面可能会云里雾里,你可能会说这不就跟我们现实生活中给钱差不多嘛,假如现在我有五张一块钱的,现在我需要给你两块钱,我直接把两张一块钱的给你就行了,这其中也不需要什么人来介入,我们两个人就可以搞定这笔交易。 

确实是这样,但是区别就在于UTXO是可分割的,假如现在你要我给你两块五而不是两块,但我现在并没有五毛,我没办法将一块钱撕成两半,所以这笔交易在现实中就比较难达成,但是UTXO就不一样了,它可以切割到小数点后八位,比如可以有0.00023546BTC,所以基本可以满足大部分的交易需求,可以这么说,UTXO使得比特币既解决了传统现金不可分割的问题也避免了传统电子货币的中心化弊端,是去中心化的电子现金。

转载于:https://www.cnblogs.com/wangsea/p/9429297.html

你可能感兴趣的文章
【oracle】dmp导数据库
查看>>
微软 SqlHelper代码、功能、用法介绍:高效的组件
查看>>
丰子恺-《豁然开朗》
查看>>
JavaScript 对象
查看>>
原生js轮播图(面向对象)
查看>>
数据分析软件及spss简单操作
查看>>
自定义通信协议
查看>>
Unity3d--Space Shooter(官方教程)--学习感想(3)
查看>>
java中Collections.sort()方法实现集合排序
查看>>
nodejs笔记之事件循环
查看>>
JVM之垃圾收集器
查看>>
Windows下R画图举例
查看>>
php-fpm 重启 nginx单独配置 重启
查看>>
JS正则表达式RegExp 对象
查看>>
Springboot
查看>>
go语言之进阶篇值语义和引用语义
查看>>
go语言之进阶篇无缓冲channel
查看>>
linux 常见命令
查看>>
func_get_args 笔记
查看>>
hdu 2881(LIS变形)
查看>>