UTXO

UTXO (Unspent Transaction Output) 未花费交易输出

传统的支付系统都是基于账户(account based)的,即:
若A向B转账20元

  1. 判断A的账户余额大于等于20元;
  2. 在B的账户上加20元;
  3. 同时在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:

转载于:https://www.cnblogs.com/KRDecad3/p/11025768.html

比特币原理——交易与UTXO相关推荐

  1. 深入比特币原理(三)——交易的输入(input)与输出(output)

    本节内容非常重要,如果你不能很好的掌握本节内容,你无法真正理解比特币的运行原理,请务必要学习清楚. 比特币的交易模型为UTXO(unspend transaction output),即只记录未花费的 ...

  2. 深入比特币原理(五)——高级交易与脚本

    [摘要] 多重签名交易允许同一笔交易输出需要多个私钥才能解锁,即锁定脚本设置条件,有N个公钥(注意不是公钥hash)被记录在脚本中,其中至少有M个必须提供签名才能解锁,也被成为M-N方案. 一.多重签 ...

  3. 基于Java语言构建区块链(四)—— 交易(UTXO)

    基于Java语言构建区块链(四)-- 交易(UTXO) 2018年03月11日 00:48:01 wangwei_hz 阅读数:909 标签: 区块链比特币 更多 个人分类: 区块链 文章的主要思想和 ...

  4. 深入比特币原理(一)——比特币白皮书总结与点评

    2008年,中本聪发布了比特币白皮书<一种点对点的电子现金系统>,从此开启了区块链技术的新天地,虽然中本聪在2011年后销声匿迹,但白皮书中涵盖了中本聪最希望传递的比特币的世界观,对于每一 ...

  5. 用人话解释比特币原理

    究竟是什么让一枚虚拟货币的汇率在3年间翻了25000倍,是什么力量让央行副行长"感兴趣"但"不承认",抛开投机与商业欺诈比特币作为一种工具究竟有没有价值?欢迎收 ...

  6. 【数据显示:比特币单日交易费用是BCH和BSV一年交易费用的4倍】

    据ZyCrypto消息,比特币现金(BCH)从比特币中分离后,它的块大小限制从比特币的1MB增加到8MB,之后增加到32MB.随后,BSV从BCH分叉后将此限制增加到128MB.这些巨大的区块大小是为 ...

  7. 为什么说比特币的交易属性优于储值属性

    2010年5 月22日,一个名叫Laszlo Hanyecz的程序员使用1万个比特币购买了2个披萨饼,这是比特币第一次在现实世界表现出支付性,也是这次标志性的支付让比特币在现实世界里有了价格,两个披萨 ...

  8. 深入比特币原理(四)——锁定脚本(locking script)与解锁脚本(unlocking script)

    通常比特币都是以虚拟货币的概念出现在大众眼前,实际上比特币是第一个真正的区块链"平台",利用它去中心化.不可篡改.可追溯等特点不光可以实现多种交易模式(如点对点交易.多重签名交易等 ...

  9. 比特币量化交易:利用Python构建自己的算法交易系统

    随着科技的不断发展,传统的手工交易已经不再是唯一的路径,自动化交易系统越来越受到投资者们的欢迎.尤其是在高频率交易中,精细的算法能够让交易决策更快速.准确和有效. 本文将介绍以比特币为例,如何使用Py ...

  10. 深入比特币原理(二)——比特币密钥地址生成

    [摘要] 比特币的安全性是由现代密码学所提供,其中最重要的既是比特币的密钥,下面我们来看一下比特币的密钥生成过程. 比特币地址实际上是公钥转换而来,而公钥实际上是由私钥转换得到,所以实际上一切的来源都 ...

最新文章

  1. 有没搞错?Java 对象不使用时要赋值为 null?
  2. 数据库事务原理及并发、死锁
  3. python3 ipaddress模块 创建 检查 操作ip地址 简介
  4. phpmyadmin忘记mysql密码_忘记phpmyadmin登录密码怎么办
  5. 一、flask的基本使用-flask
  6. FILA之后又有Amer,安踏能成为“世界的安踏”吗?
  7. js定时器、高亮修改单元格背景色
  8. 常用负载均衡策略分析
  9. 软件工程师工作内容和从业要求
  10. java获得当前路径_JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址...
  11. 向前的快捷键_平面设计基础知识:平面设计师应该知道的快捷键。
  12. php登入模块代码,thinkphp LoginAction.class.php 登录模块
  13. layui中折叠面板的使用
  14. 数理统计中的卡方分布,t分布和F分布
  15. 等保2.0三级物联网安全扩展要求
  16. JetBrains推出体验版Fleet神器
  17. IDEA将后端代码上传至远程服务器
  18. springboot快速开发框架,适合二次开发(一)
  19. Cascadeur笔记:导出非ASC II格式FBX的方法
  20. Kanzi常用操作4

热门文章

  1. java 有界泛型_JAVA泛型中的有界类型(extends super)
  2. Leetcode116. 填充每个节点的下一个右侧节点指针(宽搜或深搜)
  3. javascript ()、[]、{}的区别
  4. eclipse注释模板与代码规范导入例子及配置文件
  5. maven配置eclipse案例及命令
  6. 字符串统计,一个中文算2个字符,一个英文算一个字符
  7. 小D课堂 - 新版本微服务springcloud+Docker教程_4-02 微服务调用方式之ribbon实战 订单调用商品服务...
  8. 阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第3节 注解_18_注解_案例_简单的测试框架...
  9. iptables与Netfilter概念
  10. CentOS 7 x64部署tomcat