[转帖]比特币本质其实是UTXO
比特币本质其实是UTXO
- https://www.jianshu.com/p/7071e68c5262
其实并没有什么比特币,我们在交易所里或者钱包里显示的比特币余额其实是UTXO。那到底什么是UTXO呢,UTXO的全称为Unspent Transaction Output,翻译过来就是未被花费的交易输出。
好像觉得还是不太理解。。。。?
在比特币区块链账本上记录了一笔一笔的交易,每一笔交易都有若干个交易输入(转账者),也就是资金来源,同时也有若干个交易输出(收款者),也就是资金去向。每一笔交易都要花费一笔输入,产生一笔输出,而产生的这笔输出,就是UTXO。
举个简单的例子:
A地址下有1个btc,A要把1个btc转给B,则账本上交易的输入就是A,输出为B的地址,这时脚本会校验A地址是否有1个btc(余额都不够怎么会给你转),即在某一笔输出(UTXO)中查询到了A确实有1个btc。所以A可以作为输入转给B一个btc,这时就有一笔价值1个btc的输出指向B地址,直到B进行下一次转账前这笔交易都是B未被花费的输出(UTXO)。后续B要转给C时又重复A转B的操作。
再来一个复杂一点的例子:

- 第一个交易#1001号是张三挖矿所得的coinbase交易,coinbase交易就是挖矿交易,当矿机找到一个合格的区块后,它就获得一个特权,能创造一个coinbase交易,并且把交易输出写上自己的地址,张三通过挖矿获得了12.5个btc,即价值12.5个btc的UTXO指向的是他的地址。
- 第二个交易张三转账2.5个btc给李四,张三就发起了#2001号交易,资金的输入为#1001(1),而在本次交易输出的UTXO中,把2.5个btc的收款人地址为李四。但是这笔交易必须把上一个UTXO全部消耗,所以还剩下的10btc的交易输出的收款地址为张三自己。
- 第三个交易张三和李四一起转给王五5个btc,张三或李四发起#3001号交易,输入来源有两个部分,一个是#2001(1)和#2001(2),输出为王五的收款地址。并且张三还剩下的7.5个btc输出到自己的地址。后续王五如果需要花费他的5个btc,输入就需要为#3001(1)
一笔交易数据例子

如上图是一笔交易,有多个输入TxIn和多个输出TxOut。
- prev hash,表示该输入是在哪个交易hash输出的。
- index,表示在prev hash的那个交易的索引。
- btc,到账btc个数
- pkScript,即publicKey Script,锁定脚本,花费该UTXO时需要执行。
第一行挖矿收入交易通常被称为coinbase,它没有输入,所以TxIn的hash被标记为00000...000,index为ffff。
从第二行开始都是一些转账交易,任何一个TxIn都会唯一追溯到区块链上在本区块之前的某个交易hash,以及索引。

上图通过交易hash和索引(从0开始),即可唯一确定一个未花费的交易输出,这样每一个Tx In都和之前某个TxOut 关联起来。其中pkScript为锁定脚本,使用该UTXO时需要验证通过该脚本才能花费这笔UTXO。
总结
比特币并不是基于账户的方案,而是基于UTXO方案。这个和传统银行账户的思维完全不一样。张三拥有10个btc,其实就是当前区块链账本中,有若干笔交易的输出(UTXO)收款人都是张三的地址,而这些UXTO的总额为10。这个地址一共收了多少UTXO,则是要通过比特币钱包代为跟踪计算,所以钱包里显示的余额其实是有多少价值btc的输出指向你的地址。
1人点赞
[转帖]比特币本质其实是UTXO的更多相关文章
- 比特币原理——交易与UTXO
UTXO UTXO (Unspent Transaction Output) 未花费交易输出 传统的支付系统都是基于账户(account based)的,即: 若A向B转账20元 判断A的账户余额大于 ...
- 比特币系列钱包的UTXO总结
1.通过比特币钱包的WalletNotify配置来处理 本钱包内的交易信息的 推送.BlockNotify数据更多,不适合交易所的监听
- 04.UTXO:未使用的交易输出,比特币核心概念之一
在比特币系统上其实并不存在“账户”,而只有“地址”.只要你愿意,你就可以在比特币区块链上开设无限多个钱包地址,你拥有的比特币数量是你所有的钱包地址中比特币的总和.比特币系统并不会帮你把这些地址汇总起来 ...
- 比原链设计思考: 扩展性UTXO模型
用户模型是比原链在最初就需要确定的重要数据结构, 团队的选择还是聚焦在两种典型的模型系统中,Account模型和UTXO模型,和其他大多数区块链设计一样, 选择了模型就决定了协议层的重要实现,两种模型 ...
- UTXO是什么?
以易于理解的方式解释了比特币交易中的"UTXO" UTXO 2017年11月1日 让我们看看当你发一点硬币时会发生什么. 比特币交易通过UTXO执行.通过在比特硬币的所有交易中新生 ...
- Blockchain technology and Application
BTC-密码学原理 比特币本质:crypto currency[加密货币] 比特币用到的两个功能: 1.哈希 crypto graphic hash function 2.签名(非对称加密) 哈希cr ...
- Block Chain Learning Notes
区块链是什么 区块链技术是由比特币创造的,本文也将从比特币开始进行引导,一步一步告诉大家什么是区块链.如果你想立马知道区块链是什么,也可以直接转到文章末尾的区块链定义. 区块链,可能是当下最有前景又充 ...
- Rust 实现一个简单的区块链
一.背景 近期用 Rust 实现了 Jeiwan/blockchain_go,与原项目相比没有加入新的功能,只是换了一个编程语言实现了一遍,源码放在 Github 上. 开发这个项目,花费了好几个周末 ...
- blockchain 名词解释
1.UTXO UTXO是比特币交易的基本单位UTXO(Unspent Transaction Outputs)是未花费的交易输出,它是比特币交易生成及验证的一个核心概念.交易构成了一组链式结构,所有合 ...
随机推荐
- 八.python文件操作
一,初识文件操作. 引子: 现在这个世界上,如果可以操作文件的所有软件都消失了,比如word,wps等等,此时你的朋友通过qq给你发过来一个文件,文件名是:美女模特空姐护士联系方式.txt,在座的所有 ...
- Deep Learning 简介
机器学习算法概述参见:https://zhuanlan.zhihu.com/p/25327755 深度学习可以简单理解为NN的发展,二三十年前,NN曾经是ML领域非常火热的一个方向,后来慢慢淡出,原因 ...
- Tensorflow可视化-P295-Tensorboard可视化
各模块含义 1>表示一个Batch的大小是不确定的 2>当两个节点之间传输的张量多与1时,可视化效果图将只显示张量的个数 3>效果图上的粗细表示两个节点之间传输的标量维度的总大小,而 ...
- C# where 泛型类型约束
泛型定义中的 where 子句指定对用作泛型类型.方法.委托或本地函数中类型参数的参数类型的约束. 约束可指定接口.基类或要求泛型类型为引用.值或非托管类型. 它们声明类型参数必须具备的功能. 作为约 ...
- learning scasl notes
接收类型参数的类和特质是“泛型”的,但是它们生成的类型是"参数化". ”泛型“的意思是我们用一个泛化的类或特质来定义许许多多具体的类型. 如果说S是类型T的子类型,那么Queue[ ...
- circus docker image web 运行异常问题的解决
经过查看官方文档,因为我使用的是python 较高版本,存在兼容问题,解决方法 修改基础镜像版本 代码如下: FROM python:2.7-slim-stretch LABEL AUTHOR=&qu ...
- C语言第一篇博客
你对网络专业或者计算机专业了解是怎样? 进行网络安全,防止信息泄露. 你了解C语言么?C语言主要应用有哪些? C语言简言之就是一门计算机的编程语言. C语言主要应用于应用软件,服务器端开发,系统软件和 ...
- 第09组 团队Git现场编程实战
组长博客链接 1.团队分工 团队成员 分工明细 王耀鑫 博客撰写,数据处理 陈志荣 前端界面,前端功能实现 陈超颖 前端界面,前端功能实现 沈梓耀 前端界面,前端功能实现 林明镇 数据处理 滕佳 前端 ...
- DML 语言
数据操纵语言(Data Manipulation Language, DML)是SQL语言中,负责对数据库对象运行数据访问工作的指令集. 以INSERT.UPDATE.DELETE三种指令为核心,分别 ...
- Beta冲刺(2/5)
队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 数据库实践 提交记录(全组共用) 接下来的计划 加快校园百科的进度 还剩下哪些任务 学习软工的理论课 学习代码评估.测试 ...