BTC交易数据是什么样子的

如何储存

交易数据是用字节的形式存储在区块链中,但是我们分析和处理的时候一般使用16进制。另外BTC的数据都是通过小端模式存储的。

16进制:计算机的世界只有2进制,但是为了节省空间已经增加可读性,BTC使用了16进制的形式来保存数据。两位16进制 能表示 8位的2进制数据,一个字节的长度是 8位。所以两个16进制的数能表示一个字节。

小端模式:就是解析数据的时候,先出现的字节要放到数据的最后面。比如16进制的151413通过解析后应该是131415。解析都是按照每个字节一个个进行的。

小端法读取

真实的交易数据

这是一个真实的交易信息

源数据的16进制表示

010000000181f46502fd3a9e7df61e409ace29acaba95130a041cd4467c299984d6849bd09010000006a47304402204300d701d7beb055b369955adf7fa39faedc2c0d1f1cd49b4c7e7913ac937d9c0220713f7f19b72e4399db2a1a627176c4a093db8ea72bb612dd949f3e0c0cf28a3c012103683ad7dd8a485e4be62e963d8f60cf51aca0652660b1ed8cf2b6b2a2e34631f0ffffffff01a0860100000000001976a9144d6567616e264769616e6e69466f72657665722188ac00000000

数据格式

我们把上面的数据先进行一下分割并添加说明:

01000000 # 前4个字节 表示 版本号
01 # 第5个字节 表示 有几个输入,使用VanInt表示
81f46502fd3a9e7df61e409ace29acaba95130a041cd4467c299984d6849bd09 # 第 6-37 位 表示 第1个输入的前一笔交易的哈希值(也称为散列值)
01000000 # 第38 - 41 位表示 前一笔交易的输出索引(因为一个交易中可能有多个输出)
6a # 第42个字节表示 解锁脚本长度,这里转成10进制是106;此字段使用 VarInt 表示ScriptSig的长度,有时候可能不是一个字节(后续文章介绍)
47304402204300d701d7beb055b369955adf7fa39faedc2c0d1f1cd49b4c7e7913ac937d9c0220713f7f19b72e4399db2a1a627176c4a093db8ea72bb612dd949f3e0c0cf28a3c012103683ad7dd8a485e4be62e963d8f60cf51aca0652660b1ed8cf2b6b2a2e34631f0 # 这 106 个字节就是解锁脚本
ffffffff # Sequence(后续文章介绍)
01 # 表示有一个输出,使用VanInt表示
a086010000000000 # 表示输出金额,按照小端法转成10进制是 100,000 单位是 satoshi,也是 0.001 BTC
19 # 表示 锁定脚本长度,转成10进制是 25,此字段使用 VarInt表示
76a9144d6567616e264769616e6e69466f72657665722188ac # 锁定脚本
00000000 # 表示锁定时间:多久之后这个输出才能被写入区块。

使用表格整理

数据项英文名长度16进制表示的源数据重新组装好的数据可读数据
版本号Version固定4字节0100000000000001版本号1
输入数量Input Length不固定,1字节0101有1个输入
第一个输入的前一笔交易的哈希Pre Trade Tx固定32字节81f46502fd3a9e7df61e409ace29acaba95130a041cd4467c299984d6849bd0909bd49684d9899c26744cd41a03051a9abac29ce9a401ef67d9e3afd0265f481上个交易链接
锁定脚本长度ScriptSig Size不固定,当期是1字节6a6a输出脚本有106字节
锁定脚本ScriptSig不固定,当前106字节47304402204300…34631f0之后文章详解之后文章详解
序列Sequence固定长度,4字节fdffffff之后文章详解之后文章详解
输出数量Outputs Length不固定,1字节0101有1个输出
金额Value固定长度,8字节a08601000000000000000000000186a0转账金额是10,0000
锁定脚本长度Script Size不固定,1字节191925
锁定脚本Script不固定,25字节76a9144d6567616e264769616e6e69466f72657665722188ac之后文章详解
锁定时间LockTime固定长度,4字节00000000000000000表示立即可用

分析脚本分享

from bitcoin.core import CTransaction, b2lx

def print_transaction_info(tx):
    print("Transaction Information:")
    print(f"  Version: {tx.nVersion}")
    print(f"  Inputs ({len(tx.vin)}):")
    for i, txin in enumerate(tx.vin):
        print(f"    Input {i + 1}:")
        print(f"      Previous Tx Output: {b2lx(txin.prevout.hash)}:{txin.prevout.n}")
        print(f"      ScriptSig: {txin.scriptSig.hex()}")
        # 获取witness
        witness_data = tx.wit.vtxinwit[i].scriptWitness.stack if tx.wit.vtxinwit else None
        if witness_data:
            print(f"      Witness (SegWit): {witness_data}")
    print(f"  Outputs ({len(tx.vout)}):")
    for i, txout in enumerate(tx.vout):
        print(f"    Output {i + 1}:")
        print(f"      Amount: {txout.nValue / 100000000} BTC")
        print(f"      ScriptPubKey (hex): {txout.scriptPubKey.hex()}")
    print(f"  Lock Time: {tx.nLockTime}")

# 输入你的原始交易数据
raw_transaction = "010000000181f46502fd3a9e7df61e409ace29acaba95130a041cd4467c299984d6849bd09010000006a47304402204300d701d7beb055b369955adf7fa39faedc2c0d1f1cd49b4c7e7913ac937d9c0220713f7f19b72e4399db2a1a627176c4a093db8ea72bb612dd949f3e0c0cf28a3c012103683ad7dd8a485e4be62e963d8f60cf51aca0652660b1ed8cf2b6b2a2e34631f0ffffffff01a0860100000000001976a9144d6567616e264769616e6e69466f72657665722188ac00000000"

# 将十六进制字符串转换为字节数组
raw_transaction_bytes = bytes.fromhex(raw_transaction)

# 使用CTransaction解析交易数据
tx = CTransaction.deserialize(raw_transaction_bytes)

# 打印交易信息
print_transaction_info(tx)

整理

  1. 源码地址

  2. 参考的交易地址

  3. 交易的详情

  4. 交易源数据

  5. 上个交易链接

关注我,关注我的专栏,一起探索Web3的世界

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/359590.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯 第 1 场 小白入门赛

目录 1.蘑菇炸弹 2.构造数字 3.小蓝的金牌梦 4.合并石子加强版 5.简单的LIS问题 6.期望次数 1.蘑菇炸弹 我们直接依照题目 在中间位置的数进行模拟即可 void solve(){cin>>n;vector<int> a(n1);for(int i1;i<n;i) cin>>a[i];int ans0;for(int i2;i…

氢气泄漏检测仪使用方法:守护安全,从细节开始

随着科技的发展&#xff0c;我们的生活和工作环境中充满了各种潜在的危险。其中&#xff0c;氢气作为一种清洁能源&#xff0c;其使用日益广泛&#xff0c;但同时也带来了泄漏的风险。为了确保我们的安全&#xff0c;了解并正确使用氢气泄漏检测仪至关重要。下面将详细介绍氢气…

Optimism的挑战期

1. 引言 前序博客&#xff1a; Optimism的Fault proof 用户将资产从OP主网转移到以太坊主网时需要等待一周的时间。这段时间称为挑战期&#xff0c;有助于保护 OP 主网上存储的资产。 而OP测试网的挑战期仅为60秒&#xff0c;以简化开发过程。 2. OP与L1数据交互 L1&#xf…

STM32学习笔记二——STM32时钟源时钟树

目录 STM32芯片内部系统架构详细讲解&#xff1a; 1.芯片内部混乱电信号解决方案&#xff1a; 2.时钟树&#xff1a; 1.内部RC振荡器与外部晶振的选择 2. STM32 时钟源 3.STM32中几个与时钟相关的概念 4.时钟输出的使能及其流程 5.时钟设置的基本流程 时钟源——单片机…

上海亚商投顾:创业板指失守1600点 全市场超5000只个股下跌

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日低开低走&#xff0c;深成指跌超2%&#xff0c;创业板指失守1600点&#xff0c;续创年内新低。脑机接…

C语言KR圣经笔记 6.6 表查询 6.7 typedef

6.6 表查询 为了说明结构体的更多方面&#xff0c;本节我们来写一个表查询功能包的内部代码。在宏处理器或编译器的符号表管理例程中&#xff0c;这个代码是很典型的。例如&#xff0c;考虑 #define 语句&#xff0c;当遇到如下行 #define IN 1 时&#xff0c;名称 IN 与其对…

n-皇后-dfs

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.Scanner;public class Main {static int n,N 20; //这里只会用到2 * n - 1的格子,开大点保险static char[][] g new c…

Makefile编译原理 makefile中的include关键字

一.makefile中的include关键字 类似C语言中的include 将其他文件的内容原封不动的搬入当前文件 make对include关键字的处理方式&#xff1a; 在当前目录搜索或指定目录搜索目标文件 搜索成功&#xff1a;将文件内容搬入当前makefile中 搜索失败&#xff1a;产生警告&…

聚观早报 | 360 AI搜索App上线;岚图汽车与京东达成合作

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 1月30日消息 360 AI搜索App上线 岚图汽车与京东达成合作 三星电子在硅谷新设实验室 小米平板7系列参数曝光 Spa…

大创项目推荐 题目:基于深度学习的中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分&#xff1a;4.2 损失函数&#xff1a;4.3 搭建seq2seq框架&#xff1a;4.4 测试部分&#xff1a;4.5 评价NLP测试效果&#xff1a;4.6 梯度截断…

代码随想录算法刷题训练营day20

代码随想录算法刷题训练营day20&#xff1a;LeetCode(654)最大二叉树、LeetCode(617)合并二叉树、LeetCode(700)二叉搜索树中的搜索、LeetCode(700)二叉搜索树中的搜索、LeetCode(98)验证二叉搜索 LeetCode(654)最大二叉树 题目 代码 import java.util.Arrays;/*** Definit…

MATLAB有限元应用-四边形八节点梁受力弯曲

MATLAB在处理平面有限元问题和梁弯曲问题上有很强的能力,主要体现在以下几个方面: 建模与网格划分 MATLAB内置了方便的图形界面工具(pdetoolbox等),可以快速对几何模型进行二维三维网格划分,生成有限元分析需要的网格。 求解器 MATLAB内置了多种求解偏微分方程的有限元求解器…

大模型重塑车载语音交互:赛道巨头如何引领新周期?

车载语音交互赛道正进入新一轮竞争周期。 高工智能汽车注意到&#xff0c;传统车载语音交互赛道当前基本已进入成熟期&#xff0c;主要为任务型助手&#xff0c;包括从单轮对话到多轮对话&#xff0c;单音区到多音区&#xff0c;从单一的导航、多媒体娱乐等座舱功能扩展智能驾…

钢材表面缺陷YOLOV8,OPENCV调用

【免费】钢材表面缺陷YOLOV8资源-CSDN文库 钢材表面缺陷YOLOV8NANO&#xff0c;训练得到PT模型&#xff0c;然后转换成ONNX&#xff0c;OPENCV的DNN调用&#xff0c;支持C,PYTHON,ANDROID

VScode中使用Xdebug调试PHP

君衍. 一、下载VScode与PHPstudy二、配置PHP环境变量三、PHPstudy中启用xdebug扩展四、打开php.ini&#xff0c;修改配置五、修改vscode配置六、VScode安装相关插件七、配置launch.json八、设置断点&#xff0c;开始调试 一、下载VScode与PHPstudy 首先我们自然是需要搭建环境…

C++ 数论相关题目 博弈论 Nim游戏

给定 n 堆石子&#xff0c;两位玩家轮流操作&#xff0c;每次操作可以从任意一堆石子中拿走任意数量的石子&#xff08;可以拿完&#xff0c;但不能不拿&#xff09;&#xff0c;最后无法进行操作的人视为失败。 问如果两人都采用最优策略&#xff0c;先手是否必胜。 输入格式…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第5章 决策树(代码python实践)

文章目录 第5章 决策树—python 实践书上题目5.1利用ID3算法生成决策树&#xff0c;例5.3scikit-learn实例 《统计学习方法&#xff1a;李航》笔记 从原理到实现&#xff08;基于python&#xff09;-- 第5章 决策树 第5章 决策树—python 实践 import numpy as np import pand…

Docusaurus 文档侧边栏增加 New 标识

在使用 Docusaurus 搭建文档站点的时候&#xff0c;我们经常要给某个侧边栏菜单增加一些醒目的标识&#xff0c;比如针对新创建的文档给它一个 New 的标识&#xff0c; 以提醒过来看文档的用户这是一个新增加项或者新特性&#xff08;阅读的时候不要遗漏&#xff09;。 然而这个…

C#: form 添加窗体最小化事件,添加系统托盘图标,点击后可以打开、最小软件窗口

说明&#xff1a; 1.实现窗体在最小化后触发一个事件&#xff0c;可以去实现需要的功能。 2.最小化后软件图标出现在系统右下角的托盘串口。 3.点击托盘口的图标可以实现软件弹出窗口和最小化的切换。 1.参考办法 以下是判断C#窗体最小化到状态栏的状态的方法&#xff1a;…

[AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言4.5key价格泄漏ChatGPT4.0使用地址ChatGPT正确打开方式最新功能语音助手存档…