区块链学习笔记(3):深刻理解比特币交易 UTXO

本文由币乎(bihu.com)优质内容计划支持

最初对于比特币交易的理解,仅限于使用比特币买卖某商品,买家账户余额-1,而卖家账户余额+1,直到了解了 UTXO。

UTXO (Unspent Transaction Output),译为中文的意思是未花费的输出。

我们先来了解一下传统的支付系统,场景是这样的:张三要付给李四 10 块钱,基本流程是这样的:

  1. 检查张三账户余额是否有 10 块钱,如果没有终止交易
  2. 如果存在 10 块钱,张三账户减去10元
  3. 李四账户增加 10 块钱

这个场景很容易理解,这也是现在的银行、电商交易系统的设计,由关系数据库支持,数据库要确保事务性、原子性、一致性等等,这种基于账户的设计,简单直观。

而比特币没有设计成基于账户的系统,而是 UTXO。

要理解 UTXO,我们假设一个这样的场景:张三挖到 12.5 枚比特币。过了几天,他把其中 2.5 枚支付给李四。又过了几天,他和李四各出资 2.5 比特币凑成 5 比特币付给王五。

基于账户的设计,张、李、王三人在数据库中各有一个账户,账户余额变化如下:

区块链学习笔记(3):深刻理解比特币交易 UTXO_第1张图片
账户余额变化

而通过 UTXO 实现如下图:

区块链学习笔记(3):深刻理解比特币交易 UTXO_第2张图片
UTXO

图片来源见水印,侵删。

初次看到这两张图片的时候,感觉 UTXO 和基于账户这两种方案没什么区别,但是,但是,不要只是盯着账户余额看。看这两张图片的不同之处,直觉是“少了一个交易步骤”。

这就要说一说 UTXO 设计的高明之处了,为什么要这么设计呢?

传统的关系型数据库的一笔交易,需要登记两条以上的账目,本质上记录的是“交易的结果”,而不是“交易本身”。

而 UTXO,本质上,就是只记录交易本身,而不记录交易的结果,从金融系统设计角度来说,这种方式有点“交易清算分离”的意思。

UTXO 系统遵守两个规则:

  1. 除了 CoinBase(挖矿交易)之外,所有的资金来源都必须来自前面某一个或者几个交易的 UTXO;

  2. 任何一笔交易的输入总量必须等于输出总量,等式两边必须配平。

UTXO 模式最大的优势就是,忠实地记录了交易,只要交易记录清晰准确,那么每个人进行清算的结果就都不会出错。

对于 UTXO,是区块链设计思想的核心之一,本文建议你只字不差的阅读,即使我是一位程序员,对于概念,理解上也是花费了较多时间。

你可能感兴趣的:(区块链学习笔记(3):深刻理解比特币交易 UTXO)