以太坊区块的数据结构解析

时间:2024-04-02 16:28:14

刚刚在Linux上部署了私有链:分析一下前3个区块

block(0):

以太坊区块的数据结构解析

block(1):

以太坊区块的数据结构解析

block(2):

以太坊区块的数据结构解析

介绍一下各个字段的含义:

  • Difficulty:区块的难度。Block的Difficulty由共识算法基于parentBlock的Time和Difficulty计算得出,它会应用在区块的‘挖掘’阶段。
  •  extradata:预留它用(例如Clique共识机制使用)
  • GasLimit:区块内所有Gas消耗的理论上限。该数值在区块创建时设置,与父区块有关。具体来说,根据父区块的GasUsed同GasLimit * 2/3的大小关系来计算得出。
  • GasUsed:区块内所有Transaction执行时所实际消耗的Gas总和。
  • hash:该区块的哈希值
  • logsBloom:Bloom过滤器(Filter),用来快速判断一个参数Log对象是否存在于一组已知的Log集合中,用于查询。
  • miner:产生这个区块的矿工账号地址
  • mixhash:可以简单理解为比特币区块头里的随机值,以太坊具体的挖矿计算比比特币复杂得多,但大概的流程就是不断尝试不同的mixHash来获得符合条件的Nonce。
  • Nonce:一个64bit的哈希数,它被应用在区块的"挖掘"阶段。
  • Number:区块的序号。Block的Number等于其父区块Number +1。
  • ParentHash:该区块的父区块的哈希值。除了创世块(Genesis Block)外,每个区块有且只有一个父区块。我们可以看到创世块的parenthash是0。 
  • ReceiptRoot:存储该区块的交易的回单的Merkle树的根节点的哈希。
  • UncleHash:   该区块所包含的叔块的哈希值。
  • size:区块大小。
  • stateroot:StateDB中的“state Trie”的根节点的RLP哈希值。Block中,每个账户以stateObject对象表示,账户以Address为唯一标示,其信息在相关交易(Transaction)的执行中被修改。所有账户对象可以逐个插入一个Merkle-PatricaTrie(MPT)结构里,形成“state Trie”。
  • Timestamp:区块“应该”被创建的时间。由共识算法确定,一般来说,要么等于parentBlock.Time + 10s,要么等于当前系统时间。
  • totaldifficulty:产生区块花费的总难度。
  • transactions:交易列表(数组),这边是空的,说明以太坊产生新的block不需要交易,只要满足工作量证明(pow)就可以产生new block。

 

Reference:

https://www.jianshu.com/p/b7e6e8d1b9cb

https://blog.csdn.net/weixin_41545330/article/details/79394153