最近在看到区块链的底层内容,看到了UTXO,看的一头雾水,结合网上的帖子有了一些理解。

概念

UTXO: Unspent Transaction Output,未花费交易输出。挺奇怪的一个名词。我们先举一个比较直观的例子。 有一家仓库,每天进货出货,管理员人比较懒,不愿意进仓库看有多少货物,就只记录有多少货进来了,有多少货出去了。 1. 13:00进来了10支钢笔 2. 13:05进来了8块橡皮 3. 14:15出去了2支钢笔 4. 14:30出去了5块橡皮 5. ...

我们也不知道仓库里面到底有多少货物,只需要保证出来的货物能够用进来的填充上就好。 似乎有点跟我们的直观感受不同,我们都是习惯看结果的,保证库存大于取出,就可以方便的存取了。 我们容易理解的是基于账户的,而比特币是基于交易的,这个就可以理解为区别了。

流程

我们已经知道了,在UTXO中是没有账户概念的,所以每一笔交易都得保持等值,进来的钱与出去的钱要相等才行。比如以下例子 1. 小明 挖矿 15¥ 2. 小明 转账 小红 5¥

按照我们直观的理解,剩下的10¥肯定是小明的,但是,记住了,UTXO没有账户,所以需要改写成 2. 2.1小明 转账 小红 5¥ 2.2小明 转账 小明 10¥

我们现在看到的都是输出结果,钱从哪来的?第一笔钱是挖矿挣来的,后续的都是通过交易产生的。所以全部的流程应该是这样的。 交易序列| 输入 | 输出 :-| - | :- 1 | 挖矿 | 小明 15¥ 2(1) | 1 | 小红 5¥ 2(2) | 1 |小明 10¥ 3(1) | 2(1) | 小李 3¥ 3(2) | 2(1) | 小红 2¥ 从这个表格我们可以清晰的看出每一笔交易的输入输出,虽然每一个人具体多少钱得去遍历整个交易流水,但是我们可以保证每一笔交易都是正确的,都已经记录在案了。

特点

比特币交易不是账户的增减,而是相互联系的输入输出交易事务。 每一笔交易都有一个输入,也有一个输出。这个输出就是我们所说的UTXO了。我们要交易就拿这个交易序列ID进行交易就可以了。 由于比特币没有账户,所以输入和输出必须等值。这笔输入的交易钱多的话,输出上必须给自己找零钱找回来

问题

1.我怎么知道这个交易ID是没被使用过的? 这个就是区块链在研究的了,如何达成一致性。 我们可以从以下方面来理解 1. 你是个好人,我就相信你没用这笔交易 2. 我多找几个人问问,他们都说你没用。我读书少,你们这么多人不会骗我。

2.由于没有账户,怎么说UTXO是我的? 很简单,在生成UTXO的时候,就用我的私钥加密,然后我在使用的时候,你可以用我的公钥解密,不就证明是我的了吗? 3.我怎么知道发生了双花? 这个问题其实很简单,所有交易都是基于UTXO的,只要这笔交易不是UTXO了就不用了!创建一个UTXO交易池就好啦! 这个问题是跟同学在讨论的时候想到的,理论来说并不复杂,就是两个人都固定思维了,导致蒙了!

参考

  1. 其实并没有什么比特币,只有 UTXO
  2. 比特币账户模型:UTXO
  3. 比特币UTXO和去中心化系统的设计