比特币原理——交易与UTXO
UTXO
UTXO (Unspent Transaction Output) 未花费交易输出
传统的支付系统都是基于账户(account based)的,即:
若A向B转账20元
- 判断A的账户余额大于等于20元;
- 在B的账户上加20元;
- 同时在A的账户上减20元。
使用UTXO模型的加密货币中,某一个“账户”中的余额并不是由一个数字表示,而是当前区块链网络中所有跟当前“账户”有关的UTXO组成。也就是,比特币地址账户中的“余额”实际上并不是比特币,而是“UTXO”。
个人感觉直接看概念不太好理解,举例子更好些。
交易1001:张三通过挖矿得到12.5个比特币(或者叫12.5个UTXO),输出到张三的地址上
交易2001:张三转账给李四2.5个比特币,输入来自交易1001中张三地址的12.5个UTXO,输出包括给李四的2.5比特币还包括10个UTXO回到张三的地址
交易3001:张三和李四分别向王五转2.5个比特币,本次交易的输入来自2001中的两个输出,本次交易的输出分别为王五得到的5个UTXO和张三剩余的7.5个UTXO。
每个区块中的第一个交易都是挖矿所得的比特币,只有输出没有输入,叫做Coinbase。

{
"addr":"14uhqGYDEhqwfdoP59QdLWdt4ha5CHttwQ",
"n":1,
"script":"76a9142ae017a5bd24a3f935897085253e503fbfd66f4e88ac",
"spent":false,
"tx_index":335926477,
"type":0,
"value":21680000
}
上面展示了一个UTXO的json数据,其中包含了当前UTXO所属的交易索引tx_index、交易接收方地址addr以及交易数额value。
交易
UTXO属于交易中的一部分,交易由输入和输出两部分组成。一笔交易的数据格式如下:
{
"txid":"5be7a9e47f56c98e5297a44df52da0475f448ece98bb51489103cdf70653092f",
"hash":"5be7a9e47f56c98e5297a44df52da0475f448ece98bb51489103cdf70653092f",
"version":1,
"size":224,
"vsize":224,
"locktime":0,
"vin": [...],
"vout": [...],
"hex":"0100000001a90b4101e6cbb75e1ff885b6358264627581e9f96db9ae609acec98d72422067000000006b483045022100c42c89eb2b10aeefe27caea63f562837b20290f0a095bda39bec37f2651af56b02204ee4260e81e31947d9297e7e9e027a231f5a7ae5e21015aabfdbdb9c6bbcc76e0121025e6e9ba5111117d49cfca477b9a0a5fba1dfcd18ef91724bc963f709c52128c4ffffffff02a037a0000000000017a91477df4f8c95e3d35a414d7946362460d3844c2c3187e6f6030b000000001976a914aba7915d5964406e8a02c3202f1f8a4a63e95c1388ac00000000",
"blockhash":"0000000000000000000c23ca00756364067ce5e815deb5982969df476bfc0b5c",
"confirmations":5,
"time":1521981077,
"blocktime":1521981077
}
其中“vin”和“vout”就是代表输入和输出。
每笔合法交易中,所有的输入之和必须大于所有的输出之和,其中的差值就是交易手续费。
sum(inputs.vlaue) = sum(outputs.value) + fee
输入
输入如下:
{
"vin":[
{
"txid":"672042728dc9ce9a60aeb96df9e9817562648235b685f81f5eb7cbe601410ba9",
"vout":0,
"scriptSig":{
"asm":"3045022100c42c89eb2b10aeefe27caea63f562837b20290f0a095bda39bec37f2651af56b02204ee4260e81e31947d9297e7e9e027a231f5a7ae5e21015aabfdbdb9c6bbcc76e[ALL] 025e6e9ba5111117d49cfca477b9a0a5fba1dfcd18ef91724bc963f709c52128c4",
"hex":"483045022100c42c89eb2b10aeefe27caea63f562837b20290f0a095bda39bec37f2651af56b02204ee4260e81e31947d9297e7e9e027a231f5a7ae5e21015aabfdbdb9c6bbcc76e0121025e6e9ba5111117d49cfca477b9a0a5fba1dfcd18ef91724bc963f709c52128c4"
},
"sequence":4294967295
}
]
}
输入数据包含 引用的UTXO所在交易的哈希txid,引用的UTXO索引(从0开始)vout。通过txid和vout两个字段,就可以在区块链上定位到唯一的UTXO。
输出
输出如下:
{
"vout":[
{
"value":0.10500000,
"n":0,
"scriptPubKey":{
"asm":"OP_HASH160 77df4f8c95e3d35a414d7946362460d3844c2c31 OP_EQUAL",
"hex":"a91477df4f8c95e3d35a414d7946362460d3844c2c3187",
"reqSigs":1,
"type":"scripthash",
"addresses":[
"3CcqrGq4oQcfx3u75ijj4tDiqf4HJvhoeP"
]
}
},
{
"value":1.84809190,
"n":1,
"scriptPubKey":{
"asm":"OP_DUP OP_HASH160 aba7915d5964406e8a02c3202f1f8a4a63e95c13 OP_EQUALVERIFY OP_CHECKSIG",
"hex":"76a914aba7915d5964406e8a02c3202f1f8a4a63e95c1388ac",
"reqSigs":1,
"type":"pubkeyhash",
"addresses":[
"1GedHcxdxq2tab98hqAmREUK9BBYHKznof"
]
}
}
]
}
每一个未被使用的vout就是一个UTXO,vout中包含了输出的额度value,以及对应的到账地址。
在每一笔交易中,可以存在多个输入和多个输出,比如一个地址的比特币是由多个地址的转账而来的。每一个UTXO相当于一个面值不可分割的硬币,A拥有一个1比特币的UTXO和一个5比特币的UTXO,当向B转账2比特币时,就会从A的5比特币UTXO花费掉,其中2比特币UTXO给了B,另外3比特币UTXO找零返还给自己。
这张图就是一个地址的多个UTXO作为输入:

这张图是一个地址的UTXO转账一部分,剩余的作为找零,成为发送方的一个新UTXO:

比特币原理——交易与UTXO的更多相关文章
- 深入比特币原理(三)——交易的输入(input)与输出(output)
本节内容非常重要,如果你不能很好的掌握本节内容,你无法真正理解比特币的运行原理,请务必要学习清楚. 比特币的交易模型为UTXO(unspend transaction output),即只记录未花费的 ...
- 比特币交易本质--UTXO(Unspent Transaction Output)
UTXO 代表 Unspent Transaction Output. Transaction 被简称为 TX,所以上面这个短语缩写为 UTXO. 现在的银行也好.信用卡也好.证券交易系统也好,互联网 ...
- [转帖]比特币本质其实是UTXO
比特币本质其实是UTXO https://www.jianshu.com/p/7071e68c5262 其实并没有什么比特币,我们在交易所里或者钱包里显示的比特币余额其实是UTXO.那到底什么是UTX ...
- 《Master Bitcoin》学习笔记02——比特币的交易模型
比特币的交易模型 模型基本描述 前面一篇学习笔记01提到了一个交易模型(第三章的内容),在第五章中,除了对这个模型做个详细介绍之外,其实和我上一篇理解的交易模型差不多,一个交易包含输入与输出,比特币是 ...
- 比特币系列钱包的UTXO总结
1.通过比特币钱包的WalletNotify配置来处理 本钱包内的交易信息的 推送.BlockNotify数据更多,不适合交易所的监听
- 深入比特币原理(四)——锁定脚本(locking script)与解锁脚本(unlocking script)
通常比特币都是以虚拟货币的概念出现在大众眼前,实际上比特币是第一个真正的区块链"平台",利用它去中心化.不可篡改.可追溯等特点不光可以实现多种交易模式(如点对点交易.多重签名交易等 ...
- 04.UTXO:未使用的交易输出,比特币核心概念之一
在比特币系统上其实并不存在“账户”,而只有“地址”.只要你愿意,你就可以在比特币区块链上开设无限多个钱包地址,你拥有的比特币数量是你所有的钱包地址中比特币的总和.比特币系统并不会帮你把这些地址汇总起来 ...
- 通过blockchain_go分析区块链交易原理
原文链接-石匠的Blog 1.背景 在去中心化的区块链中进行交易(转账)是怎么实现的呢?本篇通过blockchain_go来分析一下.需要进行交易,首先就需要有交易的双方以及他们的认证机制,其次是各自 ...
- BitcoinJS - 支持比特币交易的 JavaScript 库
BitcoinJS 是一个干净,可读的 JavaScript 开发库,用于比特币交易.支持 Node.js 平台和浏览器端.已有超过150万的钱包用户在使用, BitcoinJS 是几乎所有的 Web ...
随机推荐
- 使用Docker测试静态网站
参考书籍 :第一本docker书[澳]James Turnbull 1.Sample网站的初始Dockerfile 文件目录如下: Dockerfile文件代码: 安装nginx 在容器中创建一个目 ...
- ThreadLocal解决了什么问题
小明所在的项目组(迭代组:一直在迭代的路上),经常会在已有接口的基础上开发一些小功能,并且前提是在保证现有用户的不受影响基础上迭代.功能迭代,在代码层面小明有1w种实现方法(吹牛的),一起来看看这次小 ...
- LSI系列芯片Raid卡配置方法、管理手册
说明 本手册适用于LSI芯片Raid卡 包括但不限于Inspur 2008/2108 Raid卡.LSI 9240/9260/9261/ 9271 等Raid卡. 不同型号的Raid卡在某些功能上的支 ...
- 关于 Kafka 的一些面试题目
上周客串了一下面试官,在这里就简单记录一下期间我问到的一些关于 Kafka 的面试题目,这些都是我平时在学习 Kafka 的一些总结要点. 谈谈你对 kafka 的整体认识? 问这个问题主要是想知道面 ...
- 【CentOS7】curl命令
[CentOS7]curl命令 转载: 参考 https://www.thegeekstuff.com/2012/04/curl-examples/ http://www.cnblogs.com/gb ...
- 【MyBatis】ResultMap
[MyBatis]ResultMap 转载:https://www.cnblogs.com/yangchongxing/p/10486854.html 支持的 JDBC 类型为了未来的参考,MyBat ...
- 面试百度、阿里、腾讯,这134道Java面试题你会多少?
这里一共是134道Java面试题,看看你能对几道吧! 1. Java 语言有哪些特点 2. 面向对象和面向过程的区别 3. 关于 JVM JDK 和 JRE 最详细通俗的解答 4. Oracle JD ...
- windows系统下sublime text3开发工具前端配置
1.打开https://www.sublimetext.com/3下载最新版Sublime Text 3安装. 2.打开packagecontrol安装方法按提示安装packagecontrol,或者 ...
- 聊聊 Python 的内置电池
本文原创并首发于公众号[Python猫],未经授权,请勿转载. 原文地址:https://mp.weixin.qq.com/s/XzCqoCvcpFJt4A-E4WMqaA (一) 最近,我突然想到一 ...
- [ASP.NET Core 3框架揭秘] 依赖注入[6]:服务注册
通过<利用容器提供服务>我们知道作为依赖注入容器的IServiceProvider对象是通过调用IServiceCollection接口的扩展方法BuildServiceProvider创 ...