【区块链实战】什么是比特币的 UTXO 模型 |猿创征文

菜鸟实战 2022-07-01 09:41:39

目录

一、简介

二、知识点

UTXO 记账模型

账户余额记账模型

UTXO 余额计算方式

三、UTXO 和比特币的关系

1、什么是 UTXO

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

3、实例说明


一、简介

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

以上说法足以体现 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发送方接收方金额
交易1AB100
交易1 UTXOAA900
    

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

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

3、实例说明

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

用户A100元
用户B100元
用户C100元

之后发生了几笔交易

交易ID发送方接收方金额
交易1AB10
交易2BA20
交易3BC10
交易4AC30
交易5AB40

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

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

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

交易ID发送方接收方金额
交易1AB10
交易1 UTXOAA90
交易2BA20
交易2 UTXOBB90
交易3BC10
交易3 UTXOBB80
交易4AC30
交易4 UTXOAA80
交易5AB40
交易5 UXTOAA40

看起来交易的数目变多了,但其实在算交易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。

...全文
100 回复 打赏 收藏 举报
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复
相关推荐
发帖
Ethereum中文社区

187

社区成员

这里是由区块链、以太坊、Web3.0、元宇宙等相关技术组成的国内最大的开发者聚集地,帮助社区成员快速获得更全面、更深度的技术信息,链接更多资源,让开发者更好地入门学习、成长与应用实践。
以太坊区块链开源 企业社区
社区管理员
  • ETHPlanet
  • kkkuntor
  • 活动助手
加入社区
帖子事件
创建了帖子
2022-07-01 09:41
社区公告

Hi,欢迎加入我们!

 

在这里你可以:

  • 获取最官方最新最全的区块链、以太坊、Web3.0学习内容与资源
  • 获取行业内更有价值的研讨会、公开课资源,或参与社区发起的主题活动课程
  • 获得专业的以太坊、区块链、Web3.0相关技术资深专家/讲师的回复或指导,突破学习瓶颈
  • 进行学习打卡、提问或回答问题,提高个人或在社区的影响力,将有机会与各大技术官方深度合作
  • 参与丰富的社区活动,获得更多学习资源、行业资源等
  • 结识更多行业伙伴,参与线上/线下课程、交流会,拓展行业交流圈

 

【最新活动】:

1、6月1日21:00-21:30,DappLearning Infura AMA(线上)点击查看详情