UTXO介绍

2023-10-27

什么是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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UTXO介绍 的相关文章

  • 取字典的第一个值

    proxy http http 180 107 243 177 4257 https http 180 107 243 177 4257 print list proxy values 0 输出 http 180 107 243 177 4
  • P2P协议简介

    最近因为有些需要业务大文件分发 传统文件分发策略都是中心化 要么是推送 要么是拉取 中心节点很容易成为瓶颈 而P2P的点对点 去中心化能很好的解决这个问题 P2P协议 P2P是英文Peer to Peer的简称 大家对它并不陌生 找种子下电
  • 显存不够,如何训练大型神经网络

    之前写过一篇PyTorch节省显存的文章 在此基础上进行补充 老博文传送门 本篇参考自夕小瑶的卖萌屋公众号 一 单卡加载大型网络 1 1 梯度累加Gradient Accumulation 单卡加载大型网络 一般受限于大量的网络参数 训练时

随机推荐

  • [项目管理-24]:非暴力沟通的本质就是:”用大家都舒服的方式解决问题“

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 126810464 目录 前言 第1章
  • iscsitarget+ipxe无盘启动详解

    服务器 1 启动dhcp 1 1 设置静态ip ifconfig eth0 192 168 0 1 netmask 255 255 255 0 也可以使用网上的配置 interface 脚本的方法配置静态ip 1 2 启用dhcp dhcp
  • leetcode-不同路径

    leetcode 不同路径 题目链接 题目链接 题目大意是存在一个二维矩阵 从左上角起点出发 求到达右下角终点的总路径条数 看到二维矩阵的话 首先想到的dp数组应该是二维的 我们使用dp i j 表示从起点到达point i j 位置有的路
  • JavaScript——概念(JavaScript是什么?组成、输入语法等)

    目录 JavaScript的概念 JavaScript是什么 JavaScript组成 JavaScript如何写 JavaScript书写位置 注释 结束符 输出和输入语法 输出语法 输入语法 代码执行顺序 字面量 总结 JavaScri
  • WLAN的几个名词解释

    1 无线电波 无线电波是电磁播的一种 电磁波又称为电磁辐射 是指同相振荡 且互相垂直的电场与磁场 在空间中以波的形式传递能量和动量 其传播方向垂直于电场与磁场的振荡方向 前进速度为光速 2 无线电波的频率与波长 相位 频率是单位时间内完成周
  • vscode登录同步打开vscode.dev失败解决方法

    添加hosts记录 13 107 213 46 vscode dev 重新打开vscode dev可以看到访问正常 再在vscode中重新登录同步功能
  • 二叉树(树的开始)

    文章目录 一 树形结构 二 树的概念 三 二叉树 四 特殊二叉树 五 二叉树的性质 六 二叉树的存储方式及表示方式 七 二叉树的基本操作 1 二叉树的遍历 2 求节点的个数 3 求叶子节点的个数 4 求k层节点的个数 5 求二叉树的高度 6
  • mac查看ruby版本出错undefined local variable or method `rsion‘ for main:Object (NameError)

    当使用终端输入命令 ruby version 查看ruby版本时出现error ruby 2 6 8p205 2021 07 07 revision 67951 universal arm64e darwin21 e 1 in
  • 模型分类结果都分到一类

    在做活体检测的时候 出现这样的结果 4000张假脸全部认为是真脸 非常不合理 理论上二分类就算是瞎猜也应该有0 5的概率判断是对的 出现这种可能的原因是样本不均衡 但我的不属于这种 最后的原因是测试时候的预处理和模型训练中不一样 更改后结果
  • 华为0510 实习笔试

    1 栈数据合并 向一个空栈压入正整数 每当压入一个整数时 执行以下规则 设 栈顶至栈底整数依次编号为n1 n2 nx n1为最新压入的整数 1 如果n1 n2 则n1 n2全部出栈 压入新数据m m 2 n1 2 如果n1 n2 ny y的
  • Unity3D视图介绍

    unity视图介绍 Unity 3D 拥有强大的编辑界面 游戏开发者在创建游戏过程中可以通过可视化的编辑界面创建游戏 Unity 3D 的基本界面非常简单 主要包括菜单栏 工具栏以及五大视图 几个窗口就可以实现几乎全部的编辑功能 一 Uni
  • Windows环境下编译Assimp库生成Android可用的.so文件

    Windows环境下编译Assimp库生成Android可用的 so文件 前言 在做项目过程中需要使用Assimp这个3D模型读取库来读取obj格式的模型 因为项目是基于Android平台 采用NDK开发 所以就打算编译Assimp库并生成
  • 开关电源PFC电路原理详解及matlab仿真

    PFC全称 Power Factor Correction 意为 功率因数校正 PFC电路即能对功率因数进行校正 或者说能提高功率因数的电路 在电学中 功率因数PF指有功功率P 单位w 与视在功率S 单位VA 的比值 在初高中的电学中 我们
  • 计算机各外设的作用,计算机外设的功能是什么

    外部设备简称 外设 是指连在计算机主机以外的硬件设备 对数据和信息起着传输 转送和存储的作用 是计算机系统中的重要组成部分 随着我国计算机应用的迅速普及以及网络化 信息化应用的日益广泛 使市场对计算机外部设备的需求不断增长 从而拉动了我国计
  • 已知IP地址是192.168.5.121,子网掩码是255.255.255.248,试求网络地址和主机地址。...

    根据子网掩码的规则 将 IP 地址和子网掩码进行二进制 AND 操作 即可得到网络地址 IP 地址 11000000 10101000 00000101 01111001 192 168 5 121 子网掩码 11111111 111111
  • 负载均衡器技术Nginx和F5的优缺点对比

    nginx 一 nginx详解 nginx是一个被广泛使用的集群架构组件 我们有必要对它有足够的了解 下面将先认识nginx 包括应用场景 nginx基本架构 功能特性 并发模型以及配置说明 最后我们再总结下 为什么选择nginx的原因 1
  • 编译支付宝小程序 设置页面滚动时 overflow-y: auto不生效

    前言 由于公司业务调整 特意学习下uni项目框架 其实根据官方api就是实现很多功能 其实都是一些小坑 uni编译支付宝小程序 设置页面滚动时 overflow y auto不生效 解决 设置页面滚动时 不能设置overflow y aut
  • JavaScript教程-对象,文本和属性,方括号,计算属性,属性名称限制,in操作符,for..in,对象引用复制,深层克隆const修改

    对象 正如我们在 数据类型 一章学到的 JavaScript 中有八种数据类型 有七种原始类型 因为它们的值只包含一种东西 字符串 数字或者其他 相反 对象则用来存储键值对和更复杂的实体 在 JavaScript 中 对象几乎渗透到了这门编
  • 选择CentOS还是Ubuntu?

    Ubuntu和CentOS都是常见的Linux发行版 它们都有其优点和适用场景 Ubuntu是一种易于使用的操作系统 适合初学者 它具有良好的社区支持和广泛的软件库 因此很容易找到和安装需要的软件 Ubuntu还经常更新软件包 提供新功能和
  • UTXO介绍

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