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