BTC transaction rawtx 解析

很多情况下,我们都需要对交易中的某一些rawtx进行解析,以便更加清楚的理解,其在交易过程中的一些详细信息,现在,详细罗列一下rawtx中每一个字节码究竟代表什么,建议一定要耐心阅读,可能有点恶心。
先来一段交易过程中的原始rawtx:

0100000001697f98c004bbb7d184119a31b2b8c96683fa8c7ca0d7755c6196888fb6ba046e010000006a473044022077de54191ae91b502d03a83bd1d580a8b4467fc3d205c7bce169f13e6abc1c91022064f759845c960b04ddf9dd5a635da5f8b990fc934fced06747d52f2658603735012103c426034f05b3b66700f151991e6e45f2d63545a73b36c0a8e8c4200c53f7fd2cfeffffff02a0f53813000000001976a914e85324d4402d9758122c5498de80d1cfcc6330cb88aca09f6636000000001976a914093f4c533deb449f6bd0a427bddb0f02c297101388ac5dad0700

这个是截取的块高度为503134,交易为27f5f35b447e219d0b3a3ac55f9dc6aacf2d4145fbd930207ef5b7710c47d883的rawtx。

在了解如何解析之前,首先我们需要了解 tx 中都包含哪些字段,究竟有哪些格式:

tx

field size description data type comments
4 version int32_t Transaction data format version (note, this is signed)
0 or 2 flag optional uint8_t[2] If present, always 0001, and indicates the presence of witness data
1+ tx_in count var_int Number of Transaction inputs (never zero)
41+ tx_in tx_in[] A list of 1 or more transaction inputs or sources for coins
9+ tx_out count var_int Number of Transaction outputs
41+ tx_out tx_out[] A list of 1 or more transaction outputs or destinations for coins
0+ tx_witnesses tx_witness[] A list of witnesses, one for each input; omitted if flag is omitted above
4 lock_time uint32_t 一般为 00000000

TxIn consists of the following fields:

field size description data type comments
36 previous_output outpoint The previous output transaction reference, as an OutPoint structure
1+ script length var_int The length of the signature script
? signature script uchar[] Computational Script for confirming transaction authorization
4 sequence uint32_t 一般为 FFFFFFFF

The OutPoint structure consists of the following fields:

field size description data type comments
32 hash char[32] The hash of the referenced transaction.
4 index uint32_t The index of the specific output in the transaction. The first output is 0, etc.

The TxOut structure consists of the following fields:

field size description data type comments
8 value int64_t Ttransaction value.
1+ pk_script length var_int Length of the pk_script
? pk_script uchar[] Usually contains the public key as a Bitcoin script setting up conditions to claim this output.

Standard Transaction to Bitcoin address (pay-to-pubkey-hash)

scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
scriptSig: <sig> <pubKey>

To demonstrate how scripts look on the wire, here is a raw scriptPubKey:

  76       A9             14
OP_DUP OP_HASH160    Bytes to push89 AB CD EF AB BA AB BA AB BA AB BA AB BA AB BA AB BA AB BA   88         ACData to push                     OP_EQUALVERIFY OP_CHECKSIG

比特币交易(P2PKH:对公钥哈希的付款)的解锁和锁定脚本的示例,显示了在脚本验证之前从解锁和锁定脚本的并置产生的组合脚本

签名+pubKey

PUB_KEY 格式:

  1. pubkey分为压缩和未压缩两种方式
  2. 公钥是在椭圆曲线上的一个点,由一对坐标(x,y)组成。
04  //代表未压缩公钥(02、03 代表压缩公钥)
025a1cffe502a80dfa1f543ae14c082aff24d5ecadab160ca904d288eed8e3d8 //x
cacef0985f690868df4f416c3890909b4c0c843da153d41382ac20c80170240a //y

ok,对上述格式有一个简单的了解之后,我们来解析上述rawtx,看看它究竟为何方神圣。

======================================================
===================飙车 分割线==========================
======================================================

tx describes a bitcoin transaction, in reply to getdata

  • tx字节解释链接
  • 每个脚本含义(script wiki)
  • signature script具体含义
  • 公钥的拆分格式
  • bip coinBase增加的新规范(141)
01000000 //[4字节] 的版本号(16进制,两位一个字节)//[0或2字节] no flag( If present, always 0001, and indicates the presence of witness data)
01       //[1字节] tx_in count(01代表一个输入,可能有多个)
// tx_in array:
2ac424bf26875f2fa550b6df61a49564d510c6e8b535fd6f8870a0dc4b3711a301000000       //[36字节]的previous_output
8a       //[1字节]的script length(16进制,8a=138 )47304402205a2041854aba3d33ec92fae4894eb38c99aab1e6cfca619c08545f5eb757925902205f5593e104860a300df6c0d463744fed610a6bc914ee9959be467dae9b306623014104025a1cffe502a80dfa1f543ae14c082aff24d5ecadab160ca904d288eed8e3d8cacef0985f690868df4f416c3890909b4c0c843da153d41382ac20c80170240a// [138字节]的signature script
ffffffff  //[4字节]的sequence
02      //[1字节]的tx_out count,02代表有两个输出。
//tx_out array:
//第一个输出:
40420f0000000000  //[8字节]的Transaction Value(这里是小端,从后往前看(0f4240的十六进制转化为十进制,之后除以1亿,就是交易比特币的值。))
19    //[1字节]的pk_script length(代表pk_script长度是16进制的19(25字节))
76a914ae3b0aaf5e2ab94e0c8297fe055df443c69b4bdc88ac //pk_script(25字节)
//第二个输出:
fe130e9400000000  //[8字节]的 Transaction Value(2位在一起看(94 0e 13 fe))19    //[1字节]的pk_script length
76a914bae025140c454518b8cba0c25d45a6dc87f4b9ce88ac //pk_script(25字节)
00000000     //[4字节]的lock_time

继续拆分signature script(一个签名,一个pubKey)

// [138字节]的signature script
47  //数据的长度。//47代表*******所包含的范围,是一个签名******************
30  //表示DER序列的开始
44  //序列的长度(16进制,68字节)//44代表的是>>>>>所包含的范围>>>>>>>>>>>>
02  //一个整数值
20  //整数的长度(32字节)
5a2041854aba3d33ec92fae4894eb38c99aab1e6cfca619c08545f5eb7579259 //R
02  //一个整数值
20  //整数的长度(32字节)
5f5593e104860a300df6c0d463744fed610a6bc914ee9959be467dae9b306623 //S
>>>>>>>>>>>>>01  //签名hash类型(sighash)
*******************41  //(16进制的65,有65个字节) 这个是pubKey的长度
04025a1cffe502a80dfa1f543ae14c082aff24d5ecadab160ca904d288eed8e3d8cacef0985f690868df4f416c3890909b4c0c843da153d41382ac20c80170240a
//65字节 未压缩公钥(pubKey)

继续拆分pk_script

//pk_script(25字节)
76  //OP_DUP
a9  //OP_HASH160
14  //(20字节的push数据)
ae3b0aaf5e2ab94e0c8297fe055df443c69b4bdc //20字节 data to push
88  //OP_EQUALVERIFY
ac  //OP_CHECKSIG

P2SH MULTISIG (2 of 3)拆分

00    //00是当时候设计的一个bug,目前已经成为一种共识,只有当多重签名的时候,才会使用 00//两个签名脚本
47    //OP_DATA_71
304402206a46d2803f9bc7bb59fd66a7e2eb19625bc7c897e0ab84d841179fdfdfb2ebbb02202949e64609827687fd9b2c7cbb3b706a34e67cdd3f6536c630dcac78a8eb6cf00147
304402207946b95930ce13d96592a35b278df16ff6544083ab18dd3a7fb35a2cc118a88102203bcb33f08b3230cc0c42ac77050bcbdc4e3a5643b4c29986d844c6314e71614c014c    //操作码--> OP_PUSHDATA169 //105字节 代表>>>所包含的内容
>>>>>
52
21028bb6ee1127a620219c4f6fb22067536649d439929e177ebfe76386dff52a7084
2102f9cd8728b12b6c8a17a15cb4a19de000641f78a449c1b619dc271b84643ce0e9
2103d33aef1ae9ecfcfa0935a8e34bb4a285cfaad1be800fc38f9fc869043c1cbee2
53       //代表有3个公钥
ae       //代表脚本OP_XXX(OP_CHECKMULTISIG 校验多重签名是否正确)
>>>>>>

BTC transaction rawtx 解析相关推荐

  1. spring中@Transaction注解解析

    首先是会自动创建事务的Advisor 1.创建事务Advisor是如何开始的? 在Spring boot的TransactionAutoConfiguration中有开启@EnableTransact ...

  2. 名派照明连接天猫精灵_统一的动态精灵照明

    名派照明连接天猫精灵 Sprites in Daedalus make use of Unity's lighting system to appear with 3D-like properties ...

  3. BTC系列 - UTXO事务模型

    UTXO Bitcoin 采用了 UTXO 模型作为其底层存储的数据结构,其全称为 Unspent Transaction output,也就是未被使用的事务输出. Bitcoin客户端会在每次接收到 ...

  4. fabric-sdk-go解析交易数据详解

    fabric-sdk-go不如Node.js SDK和Java SDK完善,提供的接口功能有限.例如虽然它提供了一个通过交易ID查询交易的方法,但直接返回的信息不易读,在使用中带来了不便 .为此,笔者 ...

  5. PostgreSQL源码分析

    PostgreSQL源码结构 PostgreSQL的使用形态 PostgreSQL采用C/S(客户机/服务器)模式结构.应用层通过INET或者Unix Socket利用既定的协议与数据库服务器进行通信 ...

  6. Mybatis源码笔记之浅析ParameterHandler

    目录 概念 职责 类图 源码 ParameterHandler对象创建 ParameterHandler解析参数 总结 概念 职责 ParameterHandler是用来设置参数规则的.Stateme ...

  7. 开源GIS(十三)——openlayers通过geoserver中WFS添加要素

    目录 一.引言 二.WFS添加要素实现 三.WFS添加要素原理 1.请求xml 2.postman使用 3.要素添加 4.返回xml 四.总结 一.引言 ArcGIS server的要素增删改查实在是 ...

  8. 你真的会解决android ANR 问题吗?

    前言 ​ 还记得之前写过一篇关于ANR 的介绍,现在看来,那个只是皮毛.现实中遇到应用或系统ANR 的问题,是很难解决的.下面进入正题,来详细了解下如何解决. 一. ANR 分析步骤 Log分析: 1 ...

  9. 应用系统如何与外部渠道进行对接?java代码实现篇

    一个应用系统要与支付对接,要与短信平台对接,要与其他业务系统对接,甚至于qq.微博.微信等平台对接.与每一个系统对接,我们就得根据相应平台提供的SDK进行开发.相信大家都明白,如果这么搞,那么后期维护 ...

最新文章

  1. 基于TerraDeveloper的三维GIS开发研究
  2. Redis的安装和部署
  3. Java并发基础总结_Java并发编程笔记之基础总结(二)
  4. 如何连动作导入3dmax_教你如何将犀牛(Rhino)模型导入3dmax并进行渲染
  5. spring boot 创建第一个
  6. python三元一次方程代码_求三元一次方程计算器代码
  7. python工程师简历项目经验怎么写_班长项目经验简历范文
  8. 《全职高手》的全部职业和职业技能(最新版)
  9. 提高谷歌浏览器下载速度
  10. 安装MySQL说cab文件损坏_安装Office出现的CAB文件受损解决方法
  11. 微信扫描普通二维码进入小程序
  12. 【记录】gis空间分析poi点分布的影响因素操作过程
  13. 服务器ie安全增强关闭后还是显示,怎么关掉ie浏览器的增强安全配置
  14. idea 使用debug模式自动编译的设置
  15. KenLM语言模型工具
  16. idea上一步失效:Ctrl+Alt+左箭头 Ctrl+Alt+右箭头
  17. 腾讯云智后台开发实习面试全纪录(已offer)
  18. 如何尽早解决需求变更隐患,降低项目延期风险?
  19. 闲逸联运平台为何迎来加盟热?
  20. R语言如何绘制散点图和相关图,并且使散点颜色渐变

热门文章

  1. python函数求导_python怎么实现函数求导
  2. html页面怎么四舍五入,javascript如何四舍五入保留几位小数?
  3. springcloud讲解
  4. 如何在Mac或iPhone上设置 iCloud 钥匙串?
  5. 别再开省电模式了!华为手机调整这4个设置,手机电量会更持久
  6. HTML学生个人网站作业设计:动漫网站设计——海绵宝宝(5页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
  7. MATLAB符号绘图——相见恨晚的MATLAB绘图命令
  8. 坚定的信念就是成功的一大半
  9. 一文看懂:史上最通俗的视频编码技术详解
  10. Sqlserver With用法