UTXO介绍

news/2025/1/11 12:44:52/

什么是UTXO

在比特币钱包当中,我们通常能够看到账户余额,然而在中本聪设计的比特币系统中,并没有余额这个概念。“比特币余额”是由比特币钱包应用派生出来的产物。中本聪发明了UTXO交易模型,并将其应用到比特币当中。

UTXO(Unspent Transaction Outputs)是未花费的交易输出,它是比特币交易生成及验证的一个核心概念。交易构成了一组链式结构,所有合法的比特币交易都可以追溯到前向一个或多个交易的输出,这些链条的源头都是挖矿奖励,末尾则是当前未花费的交易输出。

基于账户的交易

我们先看下传统的交易是如何进行的:我们设计一个支付系统,给张三一个账户,里面有余额100 元,李四有一个账户,里面有余额50元。当张三要付给李四20元时,做以下操作:

1. 检查张三账户余额是否充足,如果不足20元就终止交易,向张三报“余额不足”

2. 在张三账户里减去20元(假设零手续费)

3. 在李四账户里增加20元

现在的银行也好、信用卡也好、证券交易系统也好,互联网第三方支付系统也好,其核心都是基于账户(account based)的设计,由关系数据库支撑。

基于UTXO的交易

要理解UTXO,最简单的办法就是把一枚比特币从诞生到在商海中沉浮的经历描述一下。我们假设一个这样的场景:张三挖到12.5 枚比特币。过了几天,他把其中 2.5 枚支付给李四。又过了几天,他和李四各出资 2.5 比特币凑成 5 比特币付给王五。

比特币的区块链账本里记录的是一笔又一笔的交易。

每笔交易都有若干交易输入,也就是资金来源,也都有若干笔交易输出,也就是资金去向。一般来说,每一笔交易都要花费(spend)一笔输入,产生一笔输出,而其所产生的输出,就是“未花费过的交易输出”,也就是 UTXO。

比特币交易遵守几个规则:

第一,除了 coinbase交易之外,所有的资金来源都必须来自前面某一个或者几个交易的 UTXO,就像接水管一样,一个接一个,此出彼入,此入彼出,生生不息,钱就在交易之间流动起来了。

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

上图第一个交易#1001 号交易是 coinbase 交易。比特币是矿工挖出来的。当一个矿机费尽九牛二虎之力找到一个合格的区块之后,它就获得一个特权,能够创造一个 coinbase 交易,在其中放入一笔新钱,并且在交易输出的收款人地址一栏,堂堂正正的写上自己的地址。假设这笔比特币的数额为12.5 枚,这个coinbase 交易随着张三挖出来的区块被各个节点接受,经过六个确认以后永远的烙印在历史中。

过了几天,张三打算付 2.5 个比特币给李四,张三就发起#2001号交易,这个交易的资金来源项写着“#1001(1)”,也就是 #1001 号交易——张三挖出矿的那个 coinbase 交易——的第一项 UTXO。然后在本交易的交易输出 UTXO 项中,把2.5个比特币的收款人地址设为李四的地址。

请注意,这一笔交易必须将前面产生那一项 12.5 个比特币的输出项全部消耗,而由于张三只打算付给李四 2.5 个比特币,为了要消耗剩下的10比特币,他只好把剩余的那 10 个比特币支付给自己,这样才能符合输入与输出配平的规则。

再过几天,张三和李四打算AA制合起来给王五付 5 枚比特币。那么张三或李四发起 #3001 号交易,在交易输入部分,有两个资金来源,分别是#2001(1) 和 #2001(2),代表第 #2001 号交易的第 (1) 和第 (2) 项 UTXO。然后在这个交易的输出部分里如法炮制,给王五5比特币,把张三剩下的 7.5 比特币发还给自己。以后王五若要再花他这5比特币,就必须在他的交易里注明资金的来源是 #3001(1)。

所以,其实并没有什么比特币,只有UTXO。当我们说张三拥有 10 枚比特币的时候,我实际上是说,当前区块链账本中,有若干笔交易的 UTXO 项收款人写的是张三的地址,而这些 UTXO 项的数额总和是 10。而我们在比特币钱包中所看到的账户余额,实际上是钱包通过扫描区块链并聚合所有属于该用户的UTXO计算得来的。

两种交易方式对比

1.UTXO只需要看最后一次交易,而账户系统要看历史全数据后所有的增减操作全部加起来才能获得正确的余额,两者效率差异随着时间推移会越来越大;

2.UTXO未来可以裁剪历史老数据,而账户系统则不能丢弃老数据,前者区块链可以控制住整体大小,而后者只能持续膨胀。

一点思考

比特币规定每一笔新的交易的输入必须是某笔交易未花费的输出,每一笔输入同时也需要上一笔输出所对应的私钥进行签名,并且每个比特币的节点都会存储当前整个区块链上的UTXO,整个网络上的节点通过UTXO及签名算法来验证新交易。

转自:
作者:悦诗LY
链接:https://www.jianshu.com/p/02fd289e8853


http://www.ppmy.cn/news/262109.html

相关文章

【UmiJS 3.x入门】

目录 1.定义 2.特点 3.搭建umi项目 4.路由分类 5.新建页面 6.页面跳转 7.路径传值 8.解析路径传值 9.请求接口 10.使用本地测试数据 11.使用umi项目自带的antd-mobile样式库 umi定位 插件化的企业前端应用框架 umi特点 可扩展:拥有完整的生命周期 开…

UniRX

凉鞋Qframework作者文章链接:https://zhuanlan.zhihu.com/p/85663335 王小TuniRX精讲链接:https://gitee.com/xiaoTNT/uni-rx-intensive-lecture/tree/master uniRX下载链接:https://assetstore.unity.com/packages/tools/integration/unirx-…

达梦数据库dblink测试(DM-ORACLE19c及DM8-DM8)

目录 DM与DM创建DBLINK. 3 一、配置203服务器... 3 1、主服务器203开启mal服务... 3 2、主服务器203配置dmmal.ini文件... 3 3、重启203数据库... 4 二、配置200服务器... 4 三、创建dblink. 4 DM与Oracle数据库创建dblink. 5 一、DM服务器:... 6 1、初始…

《精通特征工程》学习笔记(3):特征缩放的效果-从词袋到tf-idf

1.TF-IDF原理 tf-idf 是在词袋方法基础上的一种简单扩展,它表示词频 - 逆文档频率。tf-idf 计算的不是数据集中每个单词在每个文档中的原本计数,而是一个归一化的计数,其中每个单词的计数要除以这个单词出现在其中的文档数量。 词袋bow(w, …

蒙特卡洛及其衍生

这些方法都依赖于我们知道输入和输出,但只是不知道这个映射 f f f。很多时候需要计算关于 f f f的积分,逐个带点显然太费劲了。 蒙特卡罗抽样方法 假设我们要求积分 h ( θ ) ∫ E h ( θ ) π ( θ ∣ x ) d θ h(\theta)\int_E h(\theta)\pi(\theta…

什么是IT服务请求管理

什么是服务请求 用户每天都会提出各种 IT 请求。它可能是对新软件的请求、旧硬件的更换、对应用程序的访问或资产组件的更改。这些请求被归类为服务请求。 服务请求是向 IT 团队发出的请求,以满足最终用户的需求。理想情况下,请求是从服务请求目录中选择…

超级计算器

#main{border: 10px outset orange;margin: 30px auto;background: #ABABAB;box-shadow: 5px 5px #CCCCCC inset;padding-top: 20px; }/*设置最外层表格样式*/ th{height: 40px;border: 2px outset #CCCCCC; } #result{width: 100%;height: 100%;box-shadow: 3px 3px #…

英特尔傲腾 DC P4800X 固态盘

一. 传统数据中心的性能瓶颈 在传统的CPU、内存DRAM、固态盘SSD和磁盘的数据中心架构里面,存在一个巨大的瓶颈和鸿沟就是,NAND SSD的时延与DRAM内存的时延是一万倍级别的差距。 二.傲腾技术 为了解决这个SSD与内存均有的时延问题,英特尔推出…