以太坊区块数据详解

在以太坊区块链上,任何需要更改链上数据的行为(转账、部署合约、调用合约方法),都会被记录为一笔交易,被打包进区块中,下面我们来看详细了解下区块中到底保存了哪些信息。

区块字段解析

字段名

类型

描述

number

QUANTITY

块编号,挂起块为null

hash

DATA, 32 Bytes

块哈希,挂起块为null

mixHash

DATA, 32 Bytes

块mix哈希(另外一种哈希算法),挂起块为null

parentHash

DATA, 32 Bytes

父块的哈希

nonce

DATA, 8 Bytes

生成的pow哈希,挂起块为null

sha3Uncles

DATA, 32 Bytes

块中叔伯数据的SHA3哈希

logsBloom

DATA, 256 Bytes

块日志的bloom过滤器,挂起块为null

transactionsRoot

DATA, 32 Bytes

块中的交易树根节点

stateRoot

DATA, 32 Bytes

块最终状态树的根节点

receiptsRoot

DATA, 32 Bytes

块交易收据树的根节点

miner

DATA, 20 Bytes

挖矿奖励的接收账户

difficulty

QUANTITY

块难度,整数

totalDifficulty

QUANTITY

截止到本块的链上总难度

extraData

DATA

块额外数据

size

QUANTITY

本块字节数

gasLimit

QUANTITY

本块允许的最大gas用量

gasUsed

QUANTITY

本块中所有交易使用的总gas用量

timestamp

QUANTITY

块时间戳

transactions

Array

交易对象数组,或32字节长的交易哈希数组

uncles

Array

叔伯哈希数组(叔伯块与正常区块结构一致,只是不包含交易)

区块数据样例

{
    "difficulty": "0xb8b44f7581df",
    "extraData": "0x6e616e6f706f6f6c2e6f7267",
    "gasLimit": "0x3f27b3",
    "gasUsed": "0x18546c",
    "hash": "0xaaba9374f37e7596c57fd24606a451843bdffa589de019ae8ffeb3e695f3f5c4",
    "logsBloom": "0x00000000040000000000000000000002080000000400000000900000800020000000000000000000000001040080000008000000004040000005000000000040000002000000000000000088000000000001000000000000000100000000000001100000000000000000004000000000000000000200010020020010000010000800620000000000200000000004000000000000001000000000000000000100000000000000004000000000000000000000010000000000000000000000000000000002000000000000040000000001000000000000000020120000000000200000000011100000000000020000000000000000400000000000000000000002",
    "miner": "0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5",
    "mixHash": "0x01e3648def8c780480b22451fe69d82e4750d6c45c4d7963b5b8228f48b42d3e",
    "nonce": "0x497068ac0559ee54",
    "number": "0x33e05c",
    "parentHash": "0x65974f61f18bde849c04a3218275ddfbb8d782096e4f749bc3be1627864d20b1",
    "receiptsRoot": "0x2450bd1030611c2538f5be2c9db8849ef55952c9562895966edde5059a4a1696",
    "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
    "size": "0x2016",
    "stateRoot": "0xa08c50c149a69a0b0bd92b95f3bedcc9519b3fcf912e7340db98810123d16d21",
    "timestamp": "0x58d2c9a7",
    "totalDifficulty": "0x98a24ba984762ebb7",
    "transactions": [
        ...
    ],
    "transactionsRoot": "0x849c7bce118da09709f9b08e948b7fca1332bd3fa9a9bccf6776ad761ffd7e9c",
    "uncles": []
}

交易记录字段解析

字段名

类型

描述

应用场景

hash

DATA, 32字节

交易哈希

nonce

QUANTITY

本次交易之前发送方已经生成的交易数量

blockHash

DATA, 32字节

交易所在块的哈希,对于挂起块,该值为null

blockNumber

QUANTITY

交易所在块的编号,对于挂起块,该值为null

transactionIndex

QUANTITY

交易在块中的索引位置,挂起块该值为null

from

DATA, 20字节

交易发送方地址

to

DATA, 20字节

交易接收方地址,对于合约创建交易,该值为null

value

QUANTITY

发送的以太数量,单位:wei

gasPrice

QUANTITY

发送方提供的gas价格,单位:wei

gasPrice * gas 等于本次交易的矿工费,单位为wei

gas

QUANTITY

发送方提供的gas可用量

input

DATA

随交易发送的数据

type

QUANTITY

类型(应该已经没用了)

r

DATA

签名值

r、s、v 共同组成一个签名值

s

DATA

签名值

v

QUANTITY

签名值

交易记录数据样例

{
    "blockHash": "0xe68ad67b389dc1605628b7896a3af40ee3d4c370e8c19b9bd9e59f8af676e22d",
    "blockNumber": "0xc48f2d",
    "from": "0xa62d81ee7757d7ec89db63e32351d86537a3bf80",
    "gas": "0x11a0e",
    "gasPrice": "0x4e3b29200",
    "hash": "0x77bbc9747fd58efeeecd7576edc47dfceb186df391b8594769f72c874845adb7",
    "input": "0xe9ec429000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fdc920d30358000000000000000000000000000000000000000000000000000000000000000001ceb09db58c17f40fb211dbf8668a05d55567ae7858dad0848f21cfcc1ee6b1c074fe2057e18af7c0e024a0b55c29e63395ed2677eb080fb3f3559b9ebf92b5246",
    "nonce": "0xd",
    "r": "0x6c5c028c0d9f067213228d13ab123ad7335bc92c26e5ef98a5c34aa2f1f2749d",
    "s": "0x51a4f6cb76e703e2996349220b1dd85e2169ea5ec6f7ee1146b78d7aa480c475",
    "to": "0x6ca45993fd7271bc44030bafc4ff1a575a03e4f2",
    "transactionIndex": "0x99",
    "type": "0x0",
    "v": "0x25",
    "value": "0x0"
}

交易收据字段解析

字段名

类型

描述

应用场景

transactionHash

DATA, 32字节

交易哈希

transactionIndex

QUANTITY

交易在块内的索引序号

blockHash

DATA, 32字节

交易所在块的哈希

blockNumber

QUANTITY

交易所在块的编号

from

DATA, 20字节

交易发送方地址

过滤这两个地址,可拉出一个用户完整的交易记录

to

DATA, 20字节

交易接收方地址,对于合约创建交易该值为null

cumulativeGasUsed

QUANTITY

交易所在块消耗的gas总量

gasUsed

QUANTITY

该次交易消耗的gas用量

contractAddress

DATA, 20字节

对于合约创建交易,该值为新创建的合约地址,否则为null

logs

Array

本次交易生成的日志对象数组

logsBloom

DATA, 256字节

bloom过滤器,轻客户端用来快速提取相关日志

root

DATA 32字节

后交易状态根(pre Byzantium)

status

QUANTITY

1 (成功) 或 0 (失败)

交易收据数据样例

{
    "blockHash": "0xe68ad67b389dc1605628b7896a3af40ee3d4c370e8c19b9bd9e59f8af676e22d",
    "blockNumber": "0xc48f2d",
    "contractAddress": null,
    "cumulativeGasUsed": "0xe41c44",
    "effectiveGasPrice": "0x4e3b29200",
    "from": "0xa62d81ee7757d7ec89db63e32351d86537a3bf80",
    "gasUsed": "0x11a0e",
    "logs": [
        ...
    ],
    "logsBloom": "0x00000000000010000000000000000000000000000000000800000000000000000000000000000000000000000000000000000200000000000000000020040000000000000000000000000008000002000000800000040000000000000000000000000000000010000000000000000000000000000000000000002012000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000002000000000000001040000000010000000000000000000000000040000000000000000002000000000000000000000000000000000010000000000000",
    "status": "0x1",
    "to": "0x6ca45993fd7271bc44030bafc4ff1a575a03e4f2",
    "transactionHash": "0x77bbc9747fd58efeeecd7576edc47dfceb186df391b8594769f72c874845adb7",
    "transactionIndex": "0x99",
    "type": "0x0"
}

交易收据日志字段解析

字段名

类型

描述

应用场景

removed

TAG

如果日志已被删除则返回true,如果是有效日志则返回false

logIndex

QUANTITY

日志在块内的索引序号。对于挂起日志,该值为null

transactionIndex

QUANTITY

创建日志的交易索引序号,对于挂起日志,该值为null

transactionHash

DATA, 32字节

创建该日志的交易的哈希。对于挂起日志,该值为null

blockHash

DATA, 32字节

该日志所在块的哈希。对于挂起日志,该值为null

blockNumber

QUANTITY

该日志所在块的编号。对于挂起日志,该值为null

address

DATA, 20字节

该日志的源地址

data

DATA

包含该日志的一个或多个32字节无索引参数

topics

Array of DATA

0~4个32字节索引日志参数的数据

  • topics[0]的值为触发的事件名称哈希值,解析合约时,可对所有事件生成此值,用于判定交易记录中与合约的哪个方法进行交互;

  • 如标准 ERC20/ERC721 合约的Transfer事件,此值为0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

  • topics数组每个元素分别代表:0-事件名称哈希值 1-事件第一个indexed参数的值 2-事件第二个indexed参数的值,以此类推,最多4个;

  • 可以过滤topic[0]的值为0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef的交易记录,生成用户的Token列表和NFT列表,Token列表的topics长度为3,NFT列表的topics长度为4;

交易收据日志数据样例

{
    "address": "0xda86006036540822e0cd2861dbd2fd7ff9caa0e8",
    "blockHash": "0xe68ad67b389dc1605628b7896a3af40ee3d4c370e8c19b9bd9e59f8af676e22d",
    "blockNumber": "0xc48f2d",
    "data": "0x0000000000000000000000000000000000000000000000002fdc920d30358000",
    "logIndex": "0xf7",
    "removed": false,
    "topics": [
        "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
        "0x0000000000000000000000006ca45993fd7271bc44030bafc4ff1a575a03e4f2",
        "0x000000000000000000000000a62d81ee7757d7ec89db63e32351d86537a3bf80"
    ],
    "transactionHash": "0x77bbc9747fd58efeeecd7576edc47dfceb186df391b8594769f72c874845adb7",
    "transactionIndex": "0x99"
}

参考资料

Last updated