理解比特币的raw transaction (1) P2PKH类型输出

1. 写在前面

我们经常需要查看比特币中的一些交易数据,比如说一笔交易的发送方和接收方账户是什么,交易额为多少。其实,通过一些比特币的区块浏览器很容易能够查询到。区块浏览器其实是帮我们提前解析好了数据,并通过网页的形式展现出来。
比特币中真实存储在区块中的数据其实是一些raw transaction,这些raw transaction是怎么被解析出来的呢?或者说,raw transaction中的各个字段分别代表什么含义。
这篇博客将首先介绍raw transaction的一般格式。然后以一个简单的raw transaction为例,理解其中各个字段的含义。
这篇博客主要关注最简单的只包含P2PKH类型的交易。

2. Raw transaction的一般格式

2.1 Raw transaction的总体描述

理解比特币的raw transaction (1) P2PKH类型输出_第1张图片
一个raw transaction的一般格式如上表所示,该表格参考该博客.
需要注意的是:

  • 若交易中的某个字段包含多个字节,字节可能按照小端(低位字节在前,高位字节在后)或大端进行排序,表格中已经注明
  • 发送方地址可由scriptSig中的PubK计算得到,可借助在线工具bitcoinvalued实现转换
  • 接收方地址可由scriptPubKey中的PubKHash计算得到,可借助在线工具bitcoinvalued实现转换

2.2 scriptSig和scriptPubKey字段

理解比特币的raw transaction (1) P2PKH类型输出_第2张图片
其中各种op操作符的含义可参考链接。
需要指出的是,位于区间0x01-0x4b的操作符都是用来将紧接着的数据入栈的。scriptSig中的op操作符大多是这样的操作符,如0x47, 0x21等。

3. 举例说明

不失一般性地,本文以测试网testnet中的一个交易64f14bf86bbc45b2cc924c3a5da547868754af3e79493fe60aadfc1718ae9cce来举例。该交易的raw transaction可以从本地同步的测试网节点中获得,也可以通过查询smartbit区块浏览器获得。信息如下所示

010000000196c472ac5cbc3cf6acae1493d4d32f119f39ec9e440176b2fb7de6e6024b9f21010000006a473044022034519a85fb5299e180865dda936c5d53edabaaf6d15cd1740aac9878b76238e002207345fcb5a62deeb8d9d80e5b412bd24d09151c2008b7fef10eb5f13e484d1e0d01210207c9ece04a9b5ef3ff441f3aad6bb63e323c05047a820ab45ebbe61385aa7446ffffffff0140420f00000000001976a914053496c1ea3d54d649ed54de490fda342522244088ac00000000

对该信息按照上图中字段进行划分,结果如下所示:
理解比特币的raw transaction (1) P2PKH类型输出_第3张图片4. 参考链接

  • Deconstructing Bitcoin Transactions Part 1
  • How to redeem a basic Tx?

你可能感兴趣的:(区块链技术)