区块链的区块结构

 

 

区块链的区块结构

在比特币网络中,数据会以文件的形式被永久记录,我们称这些文件为区块。一个区块是一些或所有最新比特币交易的记录集,且未被其他先前的区块记录。可以将区块想象为一个城市记录者其记录本上单独的一页纸(对房地产产权的变更记录),或者是股票交易所的总账本。在绝大多数情况下,新区块会被加入到记录的最后(在比特币中的名称为区块链),一旦写上,就再也不能改变和删除。每个区块记录了它被创建之前发生的所有事件。

一个区块的区块结构如下所示:

数据项 描述 长度
Magic no(魔法数) 总是0xD9B4BEF9 4字节
Blocksize(区块大小) 到区块结束的字节长度 4字节
Blockheader(区块头) 包含6个数据项 80字节
Transaction counter(交易数量) 正整数VI=VarInt 1-9字节
Transactions(交易) 交易列表(非空) <Transaction counter>-许多交易

每个区块都包括了一个被称为魔法数的常数、区块的大小、区块头、区块所包含的交易数量及部分或所有的近期新交易。在每个区块中,对整个区块链起决定作用的是区块头。

区块头描述:

目录

        1 获取区块数据
        2 区块结构
        3 区块头数据分析
        4 交易
            4.1 coinbase交易结构
            4.2 coinbase交易数据分析
            4.3 普通交易信息结构
            4.4 普通交易数据分析
        5 特殊的区块——创世区块

1 获取区块数据

有多个区块链浏览器可以查询比特币区块值,本节使用 https://blockchain.info 获取高度为170的区块数据。通过其API可以很方便的获取区块的json和hex格式数据。

使用以下链接获取json格式区块数据:

https://blockchain.info/rawblock/00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee

获取的json格式区块数据:

{
    "hash":"00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee",
    "ver":1,
    "prev_block":"000000002a22cfee1f2c846adbd12b3e183d4f97683f85dad08a79780a84bd55",
    "mrkl_root":"7dac2c5666815c17a3b36427de37bb9d2e2c5ccec3f8633eb91a4205cb4c10ff",
    "time":1231731025,
    "bits":486604799,
    "fee":0,
    "nonce":1889418792,
    "n_tx":2,
    "size":490,
    "block_index":15019,
    "main_chain":true,
    "height":170,
    "tx":[

{
   "lock_time":0,
   "ver":1,
   "size":134,
   "inputs":[
      {
         "sequence":4294967295,
         "witness":"",
         "script":"04ffff001d0102"
      }
   ],
   "weight":536,
   "time":1231731025,
   "tx_index":15030,
   "vin_sz":1,
   "hash":"b1fea52486ce0c62bb442b530a3f0132b826c74e473d1f2c220bfa78111c5082",
   "vout_sz":1,
   "relayed_by":"0.0.0.0",
   "out":[
      {
         "spent":false,
         "tx_index":15030,
         "type":0,
         "addr":"1PSSGeFHDnKNxiEyFrD1wcEaHr9hrQDDWc",
         "value":5000000000,
         "n":0,
         "script":"4104d46c4968bde02899d2aa0963367c7a6ce34eec332b32e42e5f3407e052d64ac625da6f0718e7b302140434bd725706957c092db53805b821a85b23a7ac61725bac"
      }
   ]
},

{
   "lock_time":0,
   "ver":1,
   "size":275,
   "inputs":[
      {
         "sequence":4294967295,
         "witness":"",
         "prev_out":{
            "spent":true,
            "tx_index":14862,
            "type":0,
            "addr":"12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S",
            "value":5000000000,
            "n":0,
            "script":"410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac"
         },
         "script":"47304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901"
      }
   ],
   "weight":1100,
   "time":1231731025,
   "tx_index":15029,
   "vin_sz":1,
   "hash":"f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16",
   "vout_sz":2,
   "relayed_by":"0.0.0.0",
   "out":[
      {
         "spent":true,
         "tx_index":15029,
         "type":0,
         "addr":"1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3",
         "value":1000000000,
         "n":0,
         "script":"4104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84cac"
      },
      {
         "spent":true,
         "tx_index":15029,
         "type":0,
         "addr":"12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S",
         "value":4000000000,
         "n":1,
         "script":"410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac"
      }
   ]
}]
 }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96

使用以下链接获取十六进制格式区块数据:

https://blockchain.info/rawblock/00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee?format=hex

十六进制格式区块数据:

0100000055bd840a78798ad0da853f68974f3d183e2bd1db6a842c1feecf222a00000000ff104ccb05421ab93e63f8c3ce5c2c2e9dbb37de2764b3a3175c8166562cac7d51b96a49ffff001d283e9e700201000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704ffff001d0102ffffffff0100f2052a01000000434104d46c4968bde02899d2aa0963367c7a6ce34eec332b32e42e5f3407e052d64ac625da6f0718e7b302140434bd725706957c092db53805b821a85b23a7ac61725bac000000000100000001c997a5e56e104102fa209c6a852dd90660a20b2d9c352423edce25857fcd3704000000004847304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901ffffffff0200ca9a3b00000000434104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84cac00286bee0000000043410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac00000000
2 区块结构

区块整体结构:
字节长度     字段     说明
4     区块大小     用字节表示的该字段之后的区块大小
80     区块头     组成区块头的几个字段
1-9     交易计数器     该区块包含的交易数量,包含coinbase交易
不定     交易列表     记录在区块里的交易信息

区块头结构:
字节长度     字段     说明
4     区块版本号     区块版本号
32     父区块头哈希值     前一个区块头的哈希值
32     Merkle根哈希     交易列表生成的默克尔树根哈希
4     时间戳     该区块产生的近似时间,精确到秒的UNIX时间戳
4     难度目标     难度目标,挖矿难度值
4     Nonce     挖矿过程中使用的随机值

下文主要具体分析一个区块头和交易的值,通过逐字节分析,找出与比特币区块字段对应的部分,就可以加深对比特币区块的了解。
3 区块头数据分析

前面已经提到比特币区块头有80个字节长度,首先分析前80字节的区块头信息:

0100000055bd840a78798ad0da853f68974f3d183e2bd1db6a842c1feecf222a00000000ff104ccb05421ab93e63f8c3ce5c2c2e9dbb37de2764b3a3175c8166562cac7d51b96a49ffff001d283e9e70

按照字节长度和字段顺序逐步对80字节区块头数据进行分析,为了便于理解,将json格式和hex格式数据进行对比。比特币的原始数据保存方式是小端格式编码。也就是原始十六进制格式值需要字节逆转转化为大端格式数据然后才能转化为正常的数值。因为大端格式编码就是内存地址大的空间保存高位,书写出来就是左边的数据表示高位,与十进制表示法相同,更符合人的阅读习惯,

例如小端十六进制格式数据为0x01020304,那么转化为大端正常的数据就是0x04030201。04代表高位字节值,01代表低位字节值,转化为十进制数为4∗166+3∗164+2∗162+1∗160=67305985

4∗166+3∗164+2∗162+1∗160=67305985。

首先4个字节是区块版本号:

    json格式ver字段:1
    hex格式4个字节数据:01000000

将小端十六进制数据0x01000000转化为大端格式数据0x00000001,则转化为十进制数值为1。

其次32个字节是父区块头哈希值:

    json格式prev_block字段:000000002a22cfee1f2c846adbd12b3e183d4f97683f85dad08a79780a84bd55
    hex格式32个字节数据:55bd840a78798ad0da853f68974f3d183e2bd1db6a842c1feecf222a00000000

将小端十六进制数据0x55bd840a78798ad0da853f68974f3d183e2bd1db6a842c1feecf222a00000000转化为大端格式数据0x000000002a22cfee1f2c846adbd12b3e183d4f97683f85dad08a79780a84bd55,则在验证的时候需要将此数据转化为大数与标准难度值进行比较,最高有效位为0x2a,最低有效位为0x55。

其次32个字节是默克尔树根哈希值:

    json格式mrkl_root字段:7dac2c5666815c17a3b36427de37bb9d2e2c5ccec3f8633eb91a4205cb4c10ff
    hex格式32个字节数据:ff104ccb05421ab93e63f8c3ce5c2c2e9dbb37de2764b3a3175c8166562cac7d

同理,小端十六进制值转化为大端格式的默克尔树根需要将32字节逆序转换。

其次4个字节是时间戳:

    json格式time字段:1231731025
    hex格式4个字节数据:51b96a49

将小端十六进制数据0x51b96a49转化为大端格式数据0x496ab951,则转化为十进制数值为1231731025,表示的是自1970年1月1日0时0分0秒以来的秒数,转化为格林尼治时间为2009-01-12 03:30:25,这说明矿工挖出该区块的时间在这附近。

其次4个字节是难度目标:

    json格式bits字段:486604799
    hex格式4个字节数据:ffff001d

将小端十六进制数据0xffff001d转化为大端格式数据0x1d00ffff,则转化为十进制数值为486604799。

其次4个字节是Nonce:

    json格式nonce字段:1889418792
    hex格式4个字节数据:283e9e70

将小端十六进制数据0x283e9e70转化为大端格式数据0x709e3e28,则转化为十进制数值为1889418792。
4 交易

接下来分析交易信息:

0201000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704ffff001d0102ffffffff0100f2052a01000000434104d46c4968bde02899d2aa0963367c7a6ce34eec332b32e42e5f3407e052d64ac625da6f0718e7b302140434bd725706957c092db53805b821a85b23a7ac61725bac000000000100000001c997a5e56e104102fa209c6a852dd90660a20b2d9c352423edce25857fcd3704000000004847304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901ffffffff0200ca9a3b00000000434104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84cac00286bee0000000043410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac00000000

交易信息前面几个字节表示的是该区块包含的交易数量,coinbase交易也计入在内。交易数量类型采用的是一种压缩尺寸的变长整型。可以看出第一个字节是0x02,这就说明本区块只有2个交易:一个coinbase交易和一个普通交易。每个区块第一个交易规定为coinbase交易。

coinbase交易的交易哈希值为:b1fea52486ce0c62bb442b530a3f0132b826c74e473d1f2c220bfa78111c5082

普通交易的交易哈希值为:f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16

接下来将对这两个交易进行逐字段分析。
4.1 coinbase交易结构

每个区块的第一个交易叫做coinbase交易,它的结构如下:
字节长度     字段     说明
4     交易版本号     明确这笔交易参照的规则
1-9     输入计数器     包含的交易输入数量
不定     交易输入     一个或多个交易输入
1-9     输出计数器     包含的交易输出数量
不定     交易输出     一个或多个交易输出
4     锁定时间     一个区块号或UNIX时间戳

coinbase的交易输入结构为:
字节长度     字段     说明
32     交易哈希值     固定为全0
4     输出索引     固定为全1
1-9     Coinbase脚本长度     coinbase的脚本字节长度
不定     coinbase脚本     coinbase脚本,可以任意填充
4     序列号     固定值0xFFFFFFFF

coinbase交易的输入格式经过数次改变,在高度227836之前遵从的区块版本号为1。因为本文分析的区块实例高度为170,则coinbase交易遵从版本1的规定。之后的区块版本中规定coinbase数据中需要添加区块高度值,版本2、3、4更详细的说明可以查看比特币官网的开发文档,在此不再赘述。

coinbase的交易输出结构为:
字节长度     字段     说明
8     总量     用聪表示的比特币值
1-9     锁定脚本大小     用字节表示的后面的锁定脚本长度
不定     锁定脚本     一个定义了支付输出所需条件的脚本
4.2 coinbase交易数据分析

使用以下链接获取coinbase交易的对应json数据:

https://api.blockcypher.com/v1/btc/main/txs/b1fea52486ce0c62bb442b530a3f0132b826c74e473d1f2c220bfa78111c5082

获取的json格式交易数据:

{
  "block_hash": "00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee",
  "block_height": 170,
  "block_index": 0,
  "hash": "b1fea52486ce0c62bb442b530a3f0132b826c74e473d1f2c220bfa78111c5082",
  "addresses": [
    "1PSSGeFHDnKNxiEyFrD1wcEaHr9hrQDDWc"
  ],
  "total": 5000000000,
  "fees": 0,
  "size": 134,
  "preference": "low",
  "confirmed": "2014-11-16T18:53:46.237Z",
  "received": "2014-11-16T18:53:46.237Z",
  "ver": 1,
  "double_spend": false,
  "vin_sz": 1,
  "vout_sz": 1,
  "confirmations": 541062,
  "confidence": 1,
  "inputs": [
    {
      "output_index": -1,
      "script": "04ffff001d0102",
      "sequence": 4294967295,
      "script_type": "empty",
      "age": 170
    }
  ],
  "outputs": [
    {
      "value": 5000000000,
      "script": "4104d46c4968bde02899d2aa0963367c7a6ce34eec332b32e42e5f3407e052d64ac625da6f0718e7b302140434bd725706957c092db53805b821a85b23a7ac61725bac",
      "addresses": [
        "1PSSGeFHDnKNxiEyFrD1wcEaHr9hrQDDWc"
      ],
      "script_type": "pay-to-pubkey"
    }
  ]
}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40

coinbase交易的原始数据为:

0201000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704ffff001d0102ffffffff0100f2052a01000000434104d46c4968bde02899d2aa0963367c7a6ce34eec332b32e42e5f3407e052d64ac625da6f0718e7b302140434bd725706957c092db53805b821a85b23a7ac61725bac00000000

首先4个字节表示交易版本号:

    json格式ver字段:1
    hex格式4个字节数据:01000000

将小端格式数据0x01000000转化为大端格式数据为0x00000001,转化为十进制数值为1。表示coinbase交易的数据格式遵循的格式版本号为1。

其次1个字节表示交易输入的个数:

    json格式vin_sz字段:1
    hex格式1个字节数据:01

表示coinbase交易输入只有一个。

其次32个字节表示引用的UTXO交易哈希值:

    json格式字段:无对应
    hex格式32个字节数据:0000000000000000000000000000000000000000000000000000000000000000

32字节全0为固定值。

其次4个字节表示引用的UTXO所对应的输出索引:

    json格式output_index字段:-1
    hex格式4个字节数据:ffffffff

4个字节全1为固定值。

其次1个字节表示coinbase脚本数据的长度:

    json格式字段:无对应
    hex格式4个字节数据:07

0x07表示之后的coinbase脚本数据长度为7字节。

其次7个字节表示coinbase脚本:

    json格式script字段:04ffff001d0102
    hex格式4个字节数据:04ffff001d0102

coinbase脚本数据和普通交易的解锁脚本不同,因为coinbase是创币交易,则coinbase的脚本不需要对其它UTXO进行解锁,故可以填充任意数据。

其次4个字节序列号为固定值0xffffffff:

    json格式sequence字段:4294967295
    hex格式4个字节数据:ffffffff

十六进制0xffffffff转化为十进制值为4294967295。

其次1个字节表示交易输出的个数:

    json格式vout_sz字段:1
    hex格式1个字节数据:01

表明该交易有1个交易输出。

其次8个字节表示挖出新比特币的数量,单位为聪:

    json格式value字段:5000000000
    hex格式8个字节数据:00f2052a01000000

小端格式十六进制值0x00f2052a01000000转化为大端格式十六进制值0x000000012a05f200,之后转化为十进制值为5000000000,表示该交易输出转出比特币的值为50亿聪,表明该区块新挖出50个比特币。

其次1个字节表示锁定脚本的字节长度:

    json格式字段:无对应
    hex格式8个字节数据:43

表明接下来的锁定脚本字节长度为67个字节,转化为十六进制值为0x43。

其次67个字节表示锁定脚本:

    json格式script字段:4104d46c4968bde02899d2aa0963367c7a6ce34eec332b32e42e5f3407e052d64ac625da6f0718e7b302140434bd725706957c092db53805b821a85b23a7ac61725bac
    hex格式67个字节数据:4104d46c4968bde02899d2aa0963367c7a6ce34eec332b32e42e5f3407e052d64ac625da6f0718e7b302140434bd725706957c092db53805b821a85b23a7ac61725bac

锁定脚本开头的0x41表示将后面的65个字节压入堆栈。

其次4个字节表示锁定时间:

    json格式字段:无对应
    hex格式4个字节数据:00000000

锁定时间为0,表示立即执行。
4.3 普通交易信息结构

剩余的信息就是一个普通交易信息,普通交易结构为:
字节长度     字段     说明
4     交易版本号     明确这笔交易参照的规则
1-9     输入计数器     包含的交易输入数量
不定     交易输入     一个或多个交易输入
1-9     输出计数器     包含的交易输出数量
不定     交易输出     一个或多个交易输出
4     锁定时间     一个区块号或UNIX时间戳

普通交易输入结构为:
字节长度     字段     说明
32     交易哈希值     指向被花费的UTXO所在的交易的哈希
4     输出索引     被花费的UTXO的索引号,第一个是0
1-9     解锁脚本大小     用字节表示的后面的解锁脚本长度
不定     解锁脚本     满足UTXO解锁脚本条件的脚本
4     序列号     固定值0xFFFFFFFF

普通交易输出结构为:
字节长度     字段     说明
8     总量     用聪表示的比特币值
1-9     锁定脚本大小     用字节表示的后面的锁定脚本长度
不定     锁定脚本     一个定义了支付输出所需条件的脚本
4.4 普通交易数据分析

使用以下链接获取该普通交易的对应json数据:

https://api.blockcypher.com/v1/btc/main/txs/f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16

获取的json格式交易数据:

{
  "block_hash": "00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee",
  "block_height": 170,
  "block_index": 1,
  "hash": "f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16",
  "addresses": [
    "12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S",
    "1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3"
  ],
  "total": 5000000000,
  "fees": 0,
  "size": 275,
  "preference": "low",
  "confirmed": "2009-01-12T03:30:25Z",
  "received": "2009-01-12T03:30:25Z",
  "ver": 1,
  "double_spend": false,
  "vin_sz": 1,
  "vout_sz": 2,
  "confirmations": 541034,
  "confidence": 1,
  "inputs": [
    {
      "prev_hash": "0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9",
      "output_index": 0,
      "script": "47304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901",
      "output_value": 5000000000,
      "sequence": 4294967295,
      "addresses": [
        "12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S"
      ],
      "script_type": "pay-to-pubkey",
      "age": 9
    }
  ],
  "outputs": [
    {
      "value": 1000000000,
      "script": "4104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84cac",
      "spent_by": "ea44e97271691990157559d0bdd9959e02790c34db6c006d779e82fa5aee708e",
      "addresses": [
        "1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3"
      ],
      "script_type": "pay-to-pubkey"
    },
    {
      "value": 4000000000,
      "script": "410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac",
      "spent_by": "a16f3ce4dd5deb92d98ef5cf8afeaf0775ebca408f708b2146c4fb42b41e14be",
      "addresses": [
        "12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S"
      ],
      "script_type": "pay-to-pubkey"
    }
  ]
}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56

普通交易的原始数据为:

0100000001c997a5e56e104102fa209c6a852dd90660a20b2d9c352423edce25857fcd3704000000004847304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901ffffffff0200ca9a3b00000000434104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84cac00286bee0000000043410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac00000000

首先4个字节表示交易版本号:

    json格式ver字段:1
    hex格式4个字节数据:01000000

将小端格式数据0x01000000转化为大端格式数据为0x00000001,转化为十进制数值为1。

其次1个字节表示交易输入的数量:

    json格式vin_sz字段:1
    hex格式1个字节数据:01

其次32个字节表示引用的UTXO交易哈希值:

    json格式prev_hash字段:0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9
    hex格式32个字节数据:c997a5e56e104102fa209c6a852dd90660a20b2d9c352423edce25857fcd3704

原生数据是小端格式,json格式数据是大端格式。

其次4个字节表示引用的UTXO所对应的输出索引:

    json格式output_index字段:0
    hex格式4个字节数据:00000000

这说明该交易输入引用的UTXO是交易 0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9 的第一个输出。

其次1个字节表示解锁脚本字节长度:

    json格式字段:无对应
    hex格式1个字节数据:48

表明接下来的解锁脚本字节长度为72个字节,转化为十六进制值为0x48。

其次72个字节表示解锁脚本:

    json格式script字段:47304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901
    hex格式72个字节数据:47304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901

解锁脚本开头的0x47表示将后面的71个字节压入堆栈。

其次4个字节序列号为固定值0xffffffff:

    json格式sequence字段:4294967295
    hex格式4个字节数据:ffffffff

十六进制0xffffffff转化为十进制值为4294967295。

其次1个字节表示交易输出的个数:

    json格式vout_sz字段:2
    hex格式1个字节数据:02

表明该交易有两个交易输出。

其次8个字节表示转出的btc的数量,单位为聪:

    json格式value字段:1000000000
    hex格式8个字节数据:00ca9a3b00000000

小端格式十六进制值0x00ca9a3b00000000转化为大端格式十六进制值0x000000003b9aca00,之后转化为十进制值为1000000000,表示该交易输出转出比特币的值为10亿聪,1亿聪=1BTC,因此该交易输出转出了10个比特币。

其次1个字节表示锁定脚本的字节长度:

    json格式字段:无对应
    hex格式8个字节数据:43

表明接下来的锁定脚本字节长度为67个字节,转化为十六进制值为0x43。

其次67个字节表示锁定脚本:

    json格式script字段:4104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84c
    hex格式67个字节数据:4104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84cac

锁定脚本开头的0x41表示将后面的65个字节压入堆栈。

其次8个字节表示转出的btc的数量,单位为聪:

    json格式value字段:4000000000
    hex格式8个字节数据:00286bee00000000

小端格式十六进制值0x00286bee00000000转化为大端格式十六进制值0x00000000ee6b2800,之后转化为十进制值为4000000000,表示该交易输出转出比特币的值为40亿聪,因此该交易输出转出了40个比特币。

其次1个字节表示锁定脚本的字节长度:

    json格式字段:无对应
    hex格式1个字节数据:43

表明接下来的锁定脚本字节长度为67个字节,转化为十六进制值为0x43。

其次67个字节表示锁定脚本:

    json格式script字段:410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac
    hex格式67个字节数据:410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac

其次4个字节表示锁定时间:

    json格式字段:无对应
    hex格式4个字节数据:00000000

锁定时间为0,表示立即执行。
5 特殊的区块——创世区块

创世区块的UTXO无法被消费。
---------------------
原文:https://blog.csdn.net/u013137970/article/details/69891985
 

数据项 目的 更新时间 大小(字节)
Version(版本) 区块版本号 更新软件后,它指定了一个新的版本号 4
hashPrevBlock(前一区块的Hash) 前一区块的256位Hash值 新的区块进来时 32
hashMerkleRoot Merkle(根节点Hash值) 基于一个区块中所有交易的256位Hash值 接受一个交易时 32
Time(时间戳) 从1970-01-01 00:00 UTC开始到现在,以秒为单位的当前时间戳 每几秒就更新 4
Bits(当前目标的Hash值) 压缩格式的当前目标Hash值 当挖矿难度调整时 4
Nonce(随机数) 从0开始的32位随机数 产生Hash时(每次产生Hash随机数时都要增长)

猜你喜欢

转载自blog.csdn.net/TuxedoLinux/article/details/86037956