当我通过BTC的listtransactions接口获取查询最近发生的钱包交易时,需要将用户的充值记录写到数据库时,发现了一些令人巨大的误解。

例如,txid字段并不是唯一的,所以写到数据库时,会有交易哈希重复的可能性(有可能你的两个用户在币安交易所同时发起了BTC提现到你的钱包中,为节省手续费及上链时间,那么这两笔交易就有可能在同一笔交易中)

那么如何解决交易的唯一性呢,只有与神秘的“vout”字段结合使用时,它才是独一无二的。

vout是基于 0 的输出索引。它可能不仅仅是0or 1,但这些往往是最常见的,因为人们不会进行具有大量输出的交易。

要了解vout,您必须了解比特币交易的实际运作方式。比特币交易使用交易输出作为输入,并创建交易输出。它可以消费多个交易输出,并创建多个交易输出。此外,这些交易输出可以被不同的交易消费,因此每一个交易都需要能够被唯一标识。因此,唯一标识符包含两项:

  • txid:用于标识输出所属交易的交易 id,
  • vout: 以及指向该特定交易中输出列表中位置的索引。

vout:与计算机科学中的许多事物一样,它是一个基于 0 的计数器,因此第一项位于 index 0,第二项位于1,依此类推。

listsinceblock, listtransactions, 和 Bitcoin Core 中的一些其他 RPC 实际上并没有列出比特币交易。相反,他们列出了合乎逻辑的交易——人类倾向于想到的交易。这是因为单笔比特币交易既可以将比特币从你身边发送出去,也可以让你接收比特币。

在单个比特币交易中,您可以使用自己的交易输出,因此该交易会将您的比特币发送出去。然而,并非所有交易都包含来自同一个人的输入。该交易可能涉及另一个人,该人拥有自己的交易输出作为该交易的输入。也许他们正在创造一个你可以消费的产出。所以这个交易也在向你发送比特币。然后,这个单一的比特币交易将包含两个逻辑交易——一个是你发送的地方,一个是你接收的地方。

这通常会发生在更改输出中,但软件不应该向您显示这些,因为它足够聪明,可以隐藏它们,而不是将它们视为一个独特的逻辑事务。更改输出是指您创建的交易输出将比特币发回给您自己。它们的存在是因为交易输出必须全部花费,但您实际发送的金额通常与您花费的输出的确切金额不完全匹配。因此,您必须创建一个输出,将剩余部分发回给您自己

比特币资金在未使用的交易输出 (UTXO)中进行跟踪。每当您发送比特币时,您的钱包软件都会声明使用了哪些特定的 UTXO,并创建新的 UTXO 以将资金分配给付款方。即使在最简单的情况下,一笔交易通常也会产生两种新的输出:一种用于支付收款人,另一种用于将剩余的零钱重新分配给发送者。

由于交易可以有多个输出,因此txid不足以唯一地识别 UTXO。但是,由于交易中输出的顺序是固定的,并且每个位置只能出现一次,因此 UTXO 可以由创建它的交易加上输出列表中的位置来唯一标识。vout是交易输出列表中 UTXO 的索引。我们称其txid:vout为UTXO的外点。

在这个来自blockstream.info的带注释的屏幕截图中,您可以看到 transaction 39b6bcf049fbfba73c2e594327cafd4f93b1c23979e138d4c56ab3b7d04172ad。它花费了一个 UTXO,即 transaction 的第 5 个输出(vout:4,我们从 0 开始计数) ,并创建了 7 个标识为through的cc90096df338a6894aeef47043b995942758a1dfe52e579560e39730602a7ca4新 UTXO 。39b6bc…4172ad:039b6bc…4172ad:6

BTC txid与vote的关系相关推荐

  1. BTC 固定的货币政策,真的无懈可击吗?

    来源 |  Unitimes 编辑 | Summer 出品 | 区块链大本营(blockchain_camp) BTC 的货币政策被高估了. 准确地说,BTC 的货币政策被一些人高估了.当然,也被很多 ...

  2. 【ES实战】ES6.X Join

    ES6.X Join 文章目录 ES6.X Join 1.什么是join 2.join可以用来干什么? 3.如何使用join? 4.join的使用约束 5.join类型的检索与聚合 5.1 全量检索 ...

  3. ES中通过join类型字段构建父子关联

    一.前言 ES中支持非常丰富的关联查询实现方式,本节主要介绍如何通过join类型字段,实现同索引中的父子关联查询. 二.Join field type 1.介绍 官网地址:Join field typ ...

  4. 钱包开发经验分享:BTC篇

    钱包开发经验分享:BTC篇 文章目录 钱包开发经验分享:BTC篇 BTC节点搭建 BTC的账户模型--UTXO 计算余额 计算矿工费: 获取未花费列表 离线签名 广播交易 计算矿工费 优化矿工费 生成 ...

  5. 【BZOJ2768】[JLOI2010]冠军调查/【BZOJ1934】[Shoi2007]Vote 善意的投票 最小割

    [BZOJ2768][JLOI2010]冠军调查 Description 一年一度的欧洲足球冠军联赛已经进入了淘汰赛阶段.随着卫冕冠军巴萨罗那的淘汰,英超劲旅切尔西成为了头号热门.新浪体育最近在吉林教 ...

  6. PyFlink + 区块链?揭秘行业领头企业 BTC.com 如何实现实时计算

    大家好,我们是 BTC.com 团队.2020 年,我们有幸接触到了 Flink 和 PyFlink 生态,从团队自身需求出发,完善了团队内实时计算的任务和需求,搭建了流批一体的计算环境. 在实现实时 ...

  7. pandas plot label_Python+Pandas | 分析比特币与股票市场的关系

    - 点击上方"中国统计网"订阅我吧!- 我们通过使用Python和Pandas技术进行分析,我们将能够在本文中回答该问题.首先,我们将使用免费的API检索过去几年的比特币和股票价格 ...

  8. 【鉴轻尘】BTC的暴跌的是因为BCH的分叉,但是你知道为什么?

    要说最近两周,整个区块链世界"最火"的事件是什么,想必你会脱口而出"当然是BCH分叉加撕逼"这事件啦! 其实,这次的分叉事件,可能是检验你对区块链理解程度的最好 ...

  9. btb和oto,btc模式是什么意思

    BTC(BusinessToCustomer) 又称B2C,电子商务按交易对象分类中的一种,即表示商业机构对消费者的电子商务.这种形式的电子商务一般以网络零售业为主,主要借助于Internet开展在线 ...

最新文章

  1. strcpy,memcpy和memmove区别
  2. fileupload控件在ajax中无法使用
  3. 深度跑车 - DeepRacer
  4. 用mansard对cell的子控件设置约束,并且自动计算cell高度的问题,ios7警告
  5. visio2013跨线问题
  6. Win11手机应用大改!全新界面来袭
  7. 甜甜圈和拓扑学也有关系,你想的到吗?
  8. Typora Mermaid 使用指南
  9. 《机器学习实战》学习总结(五)K-means算法原理
  10. 中英文对照 —— 数学
  11. iOS 时间格式错误导致的坑
  12. CommandName 限制
  13. 零经验小白的独游历程——U3d学习经验与教程分享
  14. 谷粒商城 高级篇 (十四) ---------- 商品详情
  15. getchar 和 getch区别
  16. Python爬虫新手教程:微医挂号网医生数据抓取!
  17. sw模型生成urdf文件的详细流程
  18. javascript的原型,原型链,内置对象 拖曳对话框 放大镜显示和隐藏遮挡层及大层
  19. PhiloGL学习(6)——深情奉献:快乐的一家
  20. 安装STK-CS61A 2011使用的Scheme解释器

热门文章

  1. iOS UIScrollView 无法滚动 没有弹簧效果解决方案
  2. IE浏览器的一些技巧
  3. 工作中“偷懒”的窍门?这些技巧请你收下!
  4. android q状态栏,用腻了导航栏?在一加Android Q beta中强行开启全面屏手势
  5. 2022最新u盘升级重装win10方法
  6. ehvierwer登录与不登录_【更新】亿寻—免登录不限速下载百度网盘
  7. 腾讯云服务器修改ssh端口,简谈腾讯云更换SSH登录端口
  8. Android卡顿掉帧问题分析之原理篇
  9. 【计算机科学】【2019.05】城市街道交叉口三维点云和照片模型的精度分析
  10. 智慧交通怎样利用科技打造一个“最强大脑”