本文由币乎(bihu.com)优质内容计划支持
最初对于比特币交易的理解,仅限于使用比特币买卖某商品,买家账户余额-1,而卖家账户余额+1,直到了解了 UTXO。
UTXO (Unspent Transaction Output),译为中文的意思是未花费的输出。
我们先来了解一下传统的支付系统,场景是这样的:张三要付给李四 10 块钱,基本流程是这样的:
- 检查张三账户余额是否有 10 块钱,如果没有终止交易
- 如果存在 10 块钱,张三账户减去10元
- 李四账户增加 10 块钱
这个场景很容易理解,这也是现在的银行、电商交易系统的设计,由关系数据库支持,数据库要确保事务性、原子性、一致性等等,这种基于账户的设计,简单直观。
而比特币没有设计成基于账户的系统,而是 UTXO。
要理解 UTXO,我们假设一个这样的场景:张三挖到 12.5 枚比特币。过了几天,他把其中 2.5 枚支付给李四。又过了几天,他和李四各出资 2.5 比特币凑成 5 比特币付给王五。
基于账户的设计,张、李、王三人在数据库中各有一个账户,账户余额变化如下:
账户余额变化而通过 UTXO 实现如下图:
UTXO图片来源见水印,侵删。
初次看到这两张图片的时候,感觉 UTXO 和基于账户这两种方案没什么区别,但是,但是,不要只是盯着账户余额看。看这两张图片的不同之处,直觉是“少了一个交易步骤”。
这就要说一说 UTXO 设计的高明之处了,为什么要这么设计呢?
传统的关系型数据库的一笔交易,需要登记两条以上的账目,本质上记录的是“交易的结果”,而不是“交易本身”。
而 UTXO,本质上,就是只记录交易本身,而不记录交易的结果,从金融系统设计角度来说,这种方式有点“交易清算分离”的意思。
UTXO 系统遵守两个规则:
-
除了 CoinBase(挖矿交易)之外,所有的资金来源都必须来自前面某一个或者几个交易的 UTXO;
-
任何一笔交易的输入总量必须等于输出总量,等式两边必须配平。
UTXO 模式最大的优势就是,忠实地记录了交易,只要交易记录清晰准确,那么每个人进行清算的结果就都不会出错。
对于 UTXO,是区块链设计思想的核心之一,本文建议你只字不差的阅读,即使我是一位程序员,对于概念,理解上也是花费了较多时间。
网友评论