BTC transaction rawtx 解析
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:对公钥哈希的付款)的解锁和锁定脚本的示例,显示了在脚本验证之前从解锁和锁定脚本的并置产生的组合脚本
![](https://upload-images.jianshu.io/upload_images/6967649-164ec2c154f297ee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
PUB_KEY 格式:
- pubkey分为压缩和未压缩两种方式
- 公钥是在椭圆曲线上的一个点,由一对坐标(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 解析相关推荐
- spring中@Transaction注解解析
首先是会自动创建事务的Advisor 1.创建事务Advisor是如何开始的? 在Spring boot的TransactionAutoConfiguration中有开启@EnableTransact ...
- 名派照明连接天猫精灵_统一的动态精灵照明
名派照明连接天猫精灵 Sprites in Daedalus make use of Unity's lighting system to appear with 3D-like properties ...
- BTC系列 - UTXO事务模型
UTXO Bitcoin 采用了 UTXO 模型作为其底层存储的数据结构,其全称为 Unspent Transaction output,也就是未被使用的事务输出. Bitcoin客户端会在每次接收到 ...
- fabric-sdk-go解析交易数据详解
fabric-sdk-go不如Node.js SDK和Java SDK完善,提供的接口功能有限.例如虽然它提供了一个通过交易ID查询交易的方法,但直接返回的信息不易读,在使用中带来了不便 .为此,笔者 ...
- PostgreSQL源码分析
PostgreSQL源码结构 PostgreSQL的使用形态 PostgreSQL采用C/S(客户机/服务器)模式结构.应用层通过INET或者Unix Socket利用既定的协议与数据库服务器进行通信 ...
- Mybatis源码笔记之浅析ParameterHandler
目录 概念 职责 类图 源码 ParameterHandler对象创建 ParameterHandler解析参数 总结 概念 职责 ParameterHandler是用来设置参数规则的.Stateme ...
- 开源GIS(十三)——openlayers通过geoserver中WFS添加要素
目录 一.引言 二.WFS添加要素实现 三.WFS添加要素原理 1.请求xml 2.postman使用 3.要素添加 4.返回xml 四.总结 一.引言 ArcGIS server的要素增删改查实在是 ...
- 你真的会解决android ANR 问题吗?
前言 还记得之前写过一篇关于ANR 的介绍,现在看来,那个只是皮毛.现实中遇到应用或系统ANR 的问题,是很难解决的.下面进入正题,来详细了解下如何解决. 一. ANR 分析步骤 Log分析: 1 ...
- 应用系统如何与外部渠道进行对接?java代码实现篇
一个应用系统要与支付对接,要与短信平台对接,要与其他业务系统对接,甚至于qq.微博.微信等平台对接.与每一个系统对接,我们就得根据相应平台提供的SDK进行开发.相信大家都明白,如果这么搞,那么后期维护 ...
最新文章
- 基于TerraDeveloper的三维GIS开发研究
- Redis的安装和部署
- Java并发基础总结_Java并发编程笔记之基础总结(二)
- 如何连动作导入3dmax_教你如何将犀牛(Rhino)模型导入3dmax并进行渲染
- spring boot 创建第一个
- python三元一次方程代码_求三元一次方程计算器代码
- python工程师简历项目经验怎么写_班长项目经验简历范文
- 《全职高手》的全部职业和职业技能(最新版)
- 提高谷歌浏览器下载速度
- 安装MySQL说cab文件损坏_安装Office出现的CAB文件受损解决方法
- 微信扫描普通二维码进入小程序
- 【记录】gis空间分析poi点分布的影响因素操作过程
- 服务器ie安全增强关闭后还是显示,怎么关掉ie浏览器的增强安全配置
- idea 使用debug模式自动编译的设置
- KenLM语言模型工具
- idea上一步失效:Ctrl+Alt+左箭头 Ctrl+Alt+右箭头
- 腾讯云智后台开发实习面试全纪录(已offer)
- 如何尽早解决需求变更隐患,降低项目延期风险?
- 闲逸联运平台为何迎来加盟热?
- R语言如何绘制散点图和相关图,并且使散点颜色渐变
热门文章
- python函数求导_python怎么实现函数求导
- html页面怎么四舍五入,javascript如何四舍五入保留几位小数?
- springcloud讲解
- 如何在Mac或iPhone上设置 iCloud 钥匙串?
- 别再开省电模式了!华为手机调整这4个设置,手机电量会更持久
- HTML学生个人网站作业设计:动漫网站设计——海绵宝宝(5页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
- MATLAB符号绘图——相见恨晚的MATLAB绘图命令
- 坚定的信念就是成功的一大半
- 一文看懂:史上最通俗的视频编码技术详解
- Sqlserver With用法