关于UTXO 模型和Account模型笔记分享

最近一直看NX-MAX共识协议,以前没有看过NC共识,很多基本的概念不是很了解,边看边做了些笔记,和大家分享:

Account模型

首先我们来看看Account模型是怎样的,举个例子A的银行账户里面有1000元,B有2000元,C有3000元,现做两个操作:

操作一,在A向B转账500

操作二,B向C转账1000元。

在正常操作逻辑下,账户模型的数据是这样的:

操作一

账户 转账金额 余额
A 1000 - 500 500
B 2000 + 500 2500
C 3000 3000

操作二

账户 转账金额 余额
A 500 500
B 2500 - 1000 1500
C 3000 + 1000 4000

现在的银行系统,证券系统以及我们常点的微信支付,支付宝,都是Account模型,底层数据库采用关系型数据库。支持事务处理,ACID特性(原子性,一致性,隔离性,持久性)。其实这个Account模型很容易理解,ETH也大致采用这个模型。

UTXO模型

UTXO的英文全称为Unspent Transaction Output, 未消费的交易输出。在UTXO模型,每一笔交易都有交易输入和交易输出两个部分。怎么理解,也同样举个例子:

假设A地址有10个比特币,B地址有5个比特币,C地址有0个比特币;现在进行如下操作:

操作一: A向C支付5个比特币;

操作二: A向C支付2个比特币;

操作三: B向C支付1个比特币;

操作四: C向A支付3.5个比特币;

起UTXO模型中的变化是这样的:

操作一:

地址 交易记录 净UTXO
A 交易输入:5 5
B 5
C 交易输出:5 5

操作二:

地址 交易记录 净UTXO
A 交易输入:5。交易输入:2 3
B 5
C 交易输出:5, 交易输出:2 7

操作三:

地址 交易记录 净UTXO
A 交易输入:5。交易输入:2 3
B 交易输入:1 4
C 交易输出:5, 交易输出:2; 交易输出:1 8

操作四:

地址 交易记录 净UTXO
A 交易输入:5;交易输入:2;交易输入:3.5 6.5
B 交易输入:1 4
C 交易输出:5, 交易输出:2; 交易输出:1;交易输入:5;交易输出:1.5 4.5

可以看见,在操作四的过程中:C地址有5,2,1三个交易输出,可以理解为有5,2,1三枚硬币,当要花出去3.5的时候,这三枚硬币不可以拆分,所以花出去5,找零1.5. 这个找零的操作是UTXO模型自己自动来处理的。所以,要统计某一个比特币地址有多少比特币,起本质是统计这个地址下所有净未花费的交易输出个数。

3 Likes

在 UTXO 模型的表格里面感觉有点问题,这是一个封闭的体系,为什么你每次的净 UTXO 总量和最初的总量都是不相等的呢?

比如操作一,不是 A向B支付5个比特币么,为什么 B 这边的净 UTXO 是 2 呢

操作一, A向C支付5个。写错了。谢谢指正

1 Like