UTXO的全称是unspent transaction output。有些同学对比特币的交易细节不是很了解的话,可能都没有听说过UTXO。有些同学听说过UTXO,但是一直不理解是什么意思。
今天我就UTXO进行一些解释,也把自己学习过程中容易出现的一些误解和体会分享给大家。有不正确的地方,请大家指正。
先让我们看一些理解误区。大牛不要以为这些不都是理所当然的嘛,其实对于很多新手来讲,很多理所当然的事情没有弄懂的话,就会更加陷入后面的云里雾里。我还是相信一句话,没有差的学生,只有不好的老师。
我们都知道现实中的货币为了方便管理,给每一张纸币都进行了编号,你不会发现重号的纸币。那么比特币作为一种数字电子货币。是不是发行每一个比特币也都带一个编号呢?如果你陷入这个误区,那么有很多事情你就无法理解了。
比特币无论是从发行还是交易,其精度是小数点后8位。比特币没有面额的说法。单个比特币(或者说固定面额个的比特币)是没有编号的。
会产生这个误区的原因是一张物理人民币你用了,别人还能继续用这张物理人民币。而在比特币的世界里,一份比特币被用的话(无论你是用整份还是半份还是三分之一份),这份比特币就被全部销毁了。
注意:这里用“一份“的概念,看下去就明白为什么用“一份“了。
现在我们来分析一个场景,假设A没有比特币,A挖矿成功,得到了50个比特币的奖励, 10天后,A转10个比特币给B。我们看看这样子一个场景,在区块链的世界里面到底是怎么记录的。
场景上图
在图中,上面一笔Transaction对应记录的是A挖到50个比特币。下面一笔Transaction记录的是10天后A转10个比特币给B。
所以大家可以发现区块链通过这种记账方法巧妙的解决了币的追踪问题。就是每一份比特币的生存周期都是可以追查到了。
* 输出区的东西意味着新的一份比特币的诞生
* 输入区的东西意味着老的一份比特币的销毁
* 输出区的一份比特币可以作为新的交易的输入
其实在每一个记账节点,除了有全账本之外,还维护了一个UTXO的数据库。也就是所有没有被spent的票,都会存在这个UTXO的数据库中。而你指定一个交易的输出区的那份比特币去库中查找的话,这个查找速度是很快的。如果这个库告诉你库里面有,那么就是unspent的状态。如果库里面没有,那么就是spent的状态。这个库也会被用来防止双花(double spent),也就是UTXO数据库里面的一份一份的比特币,能用且仅能用一次就被销毁,而无法用两次以上。
若有指正或探讨区块链可加微信&QQ:122823025。