最近在看到区块链的底层内容,看到了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没有账户,所以需要改写成

  1. 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和去中心化系统的设计

区块链 UTXO

已有 4 条评论
  1. 软件开发

    看得云里雾里

    软件开发 回复
    1. hundred

      我也不是很会描述,可能得结合比特币理解好一些

      hundred 回复
  2. 旧日的足迹

    传说中的虚拟货币?看得蒙查查..

    旧日的足迹 回复
    1. hundred

      就是虚拟货币。做这个底层技术的开发,所以得了解一些

      hundred 回复
发表新评论