比特币本质其实是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的更多相关文章

  1. 比特币原理——交易与UTXO

    UTXO UTXO (Unspent Transaction Output) 未花费交易输出 传统的支付系统都是基于账户(account based)的,即: 若A向B转账20元 判断A的账户余额大于 ...

  2. 比特币系列钱包的UTXO总结

    1.通过比特币钱包的WalletNotify配置来处理 本钱包内的交易信息的 推送.BlockNotify数据更多,不适合交易所的监听

  3. 04.UTXO:未使用的交易输出,比特币核心概念之一

    在比特币系统上其实并不存在“账户”,而只有“地址”.只要你愿意,你就可以在比特币区块链上开设无限多个钱包地址,你拥有的比特币数量是你所有的钱包地址中比特币的总和.比特币系统并不会帮你把这些地址汇总起来 ...

  4. 比原链设计思考: 扩展性UTXO模型

    用户模型是比原链在最初就需要确定的重要数据结构, 团队的选择还是聚焦在两种典型的模型系统中,Account模型和UTXO模型,和其他大多数区块链设计一样, 选择了模型就决定了协议层的重要实现,两种模型 ...

  5. UTXO是什么?

    以易于理解的方式解释了比特币交易中的"UTXO" UTXO 2017年11月1日 让我们看看当你发一点硬币时会发生什么. 比特币交易通过UTXO执行.通过在比特硬币的所有交易中新生 ...

  6. Blockchain technology and Application

    BTC-密码学原理 比特币本质:crypto currency[加密货币] 比特币用到的两个功能: 1.哈希 crypto graphic hash function 2.签名(非对称加密) 哈希cr ...

  7. Block Chain Learning Notes

    区块链是什么 区块链技术是由比特币创造的,本文也将从比特币开始进行引导,一步一步告诉大家什么是区块链.如果你想立马知道区块链是什么,也可以直接转到文章末尾的区块链定义. 区块链,可能是当下最有前景又充 ...

  8. Rust 实现一个简单的区块链

    一.背景 近期用 Rust 实现了 Jeiwan/blockchain_go,与原项目相比没有加入新的功能,只是换了一个编程语言实现了一遍,源码放在 Github 上. 开发这个项目,花费了好几个周末 ...

  9. blockchain 名词解释

    1.UTXO UTXO是比特币交易的基本单位UTXO(Unspent Transaction Outputs)是未花费的交易输出,它是比特币交易生成及验证的一个核心概念.交易构成了一组链式结构,所有合 ...

随机推荐

  1. Tips on Python

    python是一种解释性文件,代码要通过解释器解释运行.python解释器就是python.exe这个程序. pip也是一个pip.exe的程序,是用来管理python的第三方库. 有两种执行方式:脚 ...

  2. 【洛谷P4319】 变化的道路 线段树分治+LCT

    最近学了一下线段树分治,感觉还蛮好用... 如果正常动态维护最大生成树的话用 LCT 就行,但是这里还有时间这一维的限制. 所以,我们就把每条边放到以时间为轴的线段树的节点上,然后写一个可撤销 LCT ...

  3. Html结构标准

    < ! doctype html> 声明文档类型 <html> 根标签 <head> 头标签 <title></title> 标题标签 &l ...

  4. shell test条件检查

    Shell test 命令 Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt ...

  5. luoguP1576 最小花费

    LOL新英雄皮肤弹丸天使点击就送 两种做法: 1.边的权值为手续费z,从b向a跑最短路,边跑边处理答案 2.边的权值为汇率,从a向b跑最短路,边跑边处理答案 #include<cstdio> ...

  6. A. The Fair Nut and Elevator (Codeforces Round #526 (Div. 2))

    A. The Fair Nut and Elevator 好笨啊QAQ. 暴力枚举的题,连分类都不用. 从电梯初始位置到第一层.人到第一层.间隔的层数,往返路程. #include <bits/ ...

  7. 转载:线性回归建模–变量选择和正则化(1):R包glmnet

    2013-07-15 21:41:04   #本文的目的在于介绍回归建模时变量选择和正则化所用的R包,如glmnet,ridge,lars等.算法的细节尽量给文献,这个坑太大,hold不住啊. 1.变 ...

  8. 可持久化01trie树——模板

    给你一个数,在一段区间内找到另一个数,使得他们的异或最大: trie树上存储每个数的二进制位,查询时贪心查询能让当前高位取得1的位置: 实际上是一个求前缀和的思想.每个数都开一个trie树浪费空间,当 ...

  9. 配置nRF52832 的NFC 专用引脚为 GPIO

    nRF52832 是支持NFC的,真可惜本码农没用过. NFC的引脚为 P0.09/P0.10,这两个引脚正常情况下是不能直接当做GPIO来用的,要用的时候,需要在编译环境配置一个宏. 下面是Keil ...

  10. 微信小程序 base64格式图片的显示及保存

    当我们拿到如下base64格式的图片(如下图)时, base64格式的图片数据: 如何显示 ? 使用image标签,src属性添加data:image/png;base64, (注意:若imgData ...