【区块链实战】什么是比特币的 UTXO 模型

目录

一、简介

二、知识点

UTXO 记账模型

账户余额记账模型

UTXO 余额计算方式

三、UTXO 和比特币的关系

1、什么是 UTXO

2、UTXO 如何得到账户的余额

3、实例说明


一、简介

在比特币社区内,有一种这样的说法:其实并没有比特币,有的只是 UTXO。还有一种说法是:如果理解了 UTXO,你就理解了比特币。

扫描二维码关注公众号,回复: 14342645 查看本文章

以上说法足以体现 UTXO 之于比特币的重要性。

二、知识点

  • UTXO 记账模型

  • 账户余额记账模型

  • UTXO 余额计算方式

三、UTXO 和比特币的关系

1、什么是 UTXO

在当前的区块链项目中,主要有两种记录保存方式,一种是账户/余额模型,一种是UTXO模型。比特币采用就是UTXO模型,以太坊、EOS等则采用的是账户/余额模型。

UTXO 是 Unspent Transaction Output 的缩写,意思是未花费的输出,可以简单理解为还没有用掉的收款。比如 A 收到一个比特币没有用掉,这一个比特币对她来说就是一个 UTXO。

账户/余额模型生活中很常见,比如我们的银行账户、微信账户,都是基于账户/余额模型。

UTXO模型则不同于账户模型。A有多少比特币,要对他比特币地址所有 UTXO 求和才知道。每一次收付款,是以 UTXO 为单位消耗或者接收的。

2、UTXO 如何得到账户的余额

比特币系统其实不存在账户,而只有地址,这个地址是用公钥经过 2 次 hash 得来的,只有掌握了私钥的人才可以动用这个地址里面的余额,然而,比特币的记账算法里没有余额这个概念,在区块链的分布式账本上记录的只有一笔笔的交易,并不会直接记录一个账户当前余额是多少。

一个人 A 的比特币余额实际是看 A 所掌管的地址里包含多少比特币,计算这个比特币数量的数据结构就是 UTXO。

假设当前用户 A 余额是 1000 元,如果用户 A 给用户 B 转 100 元,这笔转账会被记录成:

交易ID 发送方 接收方 金额
交易1 A B 100
交易1 UTXO A A 900

这里的交易1 UTXO 虽然是一笔交易,但从功能上来说他担当了账户余额的作用,表示在完成这笔 100 元转账后 A 的账户上还剩余 900 元。

如果没有这个 UTXO 的话,要计算余额需要把一个账户的所有交易的入账和出账全部累加一遍,这是个非常消耗时间和计算资源的事情,而 UTXO 的出现巧妙的避免了在计算余额时要回溯所有交易的痛点问题。

3、实例说明

我们假设在没有任何转账的情况下因为挖矿奖励,用户ABC分别有100元在自己的账户上。

用户A 100元
用户B 100元
用户C 100元

之后发生了几笔交易

交易ID 发送方 接收方 金额
交易1 A B 10
交易2 B A 20
交易3 B C 10
交易4 A C 30
交易5 A B 40

我们要计算在完成交易5后,A 的当前余额的话,我们需要从最开始A账户上的 100 元开始,把交易1到交易5涉及A的交易(交易1,2,4,5)都计算出来:

A的余额 = 100 - 10 + 20 - 30 - 40 = 40

这种要回溯所有交易的计算方式在实际有大量交易的情况下是不可取的,因此在有 UTXO 的情况下,这些转账就变成:

交易ID 发送方 接收方 金额
交易1 A B 10
交易1 UTXO A A 90
交易2 B A 20
交易2 UTXO B B 90
交易3 B C 10
交易3 UTXO B B 80
交易4 A C 30
交易4 UTXO A A 80
交易5 A B 40
交易5 UXTO A A 40

看起来交易的数目变多了,但其实在算交易5后A的余额的时候反而变的简单。因为交易5 UXTO这笔 A 转给 A 自己的金额就是 A 的余额,完全不需要回溯到交易1。

B的最近一次UTXO是交易3UTXO,有80元,我们只需要计算交易3之后的所有涉及转给B的交易就能算出B的余额 = 80 + 40 = 120。

而C因为从来没有给别人转过账,所以他的余额还是要从最开始100看所有给他转账的交易 = 100 +10 + 30 = 140。

从上面的例子我们可以看出,通过 UTXO 来计算余额,只需要看最近一次 UTXO 本身和这个 UTXO 后给自己转账的金额就好了。UTXO 像是一个阶段性的小结,每当自己给别人做一次转账的时候都记录下当前自己的余额,然后这笔转账之前的所有交易都不需要参与后续的计算了。

UTXO 是基于账户交易模型的记账方式,方便在以交易为核心数据的分布式账本上快速计算用户余额,避免回溯所有历史交易。这种记账方式现在不仅仅在比特币上运用,在DCEP和其他一些数字货币上也都有采用。

从技术角度看,某个 UTXO 只要被引用就会失效,很容易实现交易的原子性,更利于保证比特币不被双花攻击。每个人持有多个地址,用户总资产就是所有地址加起来的 UTXO 总和。

一句话总结,你的比特币就是 UTXO。

猜你喜欢

转载自blog.csdn.net/qq_39816613/article/details/125486826