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

Block数据结构解析

源代码

// Block represents an entire block in the Ethereum blockchain.

type Block struct {

    header       *Header

    uncles       []*Header

    transactions Transactions

    // caches

    hash atomic.Value

    size atomic.Value

    // Td is used by package core to store the total difficulty

    // of the chain up to and including the block.

    td *big.Int

    // These fields are used by package eth to track

    // inter-peer block relay.

    ReceivedAt   time.Time

    ReceivedFrom interface{}

}

主要属性:

- header:          该区块的信息

- uncles:           该区块所包含的叔块的信息

- transactions:  该区块所包含的交易信息

- td:                   总难度,即从开始区块到本区块(包括本区块)所有的难度的累加

- ReceivedAt:     用于跟踪区块的生成       

- ReceivedFrom:用于跟踪区块的生成

Header数据结构解析

源代码

// Header represents a block header in the Ethereum blockchain.

type Header struct {

   ParentHash  common.Hash    `json:"parentHash" gencodec:"required"`

   UncleHash   common.Hash    `json:"sha3Uncles" gencodec:"required"`

   Coinbase    common.Address `json:"miner" gencodec:"required"`

   Root        common.Hash    `json:"stateRoot" gencodec:"required"`

   TxHash      common.Hash    `json:"transactionsRoot" gencodec:"required"`

   ReceiptHash common.Hash    `json:"receiptsRoot" gencodec:"required"`

   Bloom       Bloom          `json:"logsBloom" gencodec:"required"`

   Difficulty  *big.Int       `json:"difficulty" gencodec:"required"`

   Number      *big.Int       `json:"number" gencodec:"required"`

   GasLimit    uint64         `json:"gasLimit" gencodec:"required"`

   GasUsed     uint64         `json:"gasUsed" gencodec:"required"`

   Time        *big.Int       `json:"timestamp" gencodec:"required"`

   Extra       []byte `json:"extraData" gencodec:"required"`

   Extra2      []byte `json:"extraData2" gencodec:"required"`

   MixDigest   common.Hash    `json:"mixHash" gencodec:"required"`

   Nonce       BlockNonce     `json:"nonce" gencodec:"required"`

}

主要属性:

- ParentHash:  该区块的父区块的哈希值

- UncleHash:   该区块所包含的叔块的哈希值

- Coinbase:     打包该区块矿工的地址,矿工费和打包区块的奖金将发送到这个地址

- Root:             存储账户状态的Merkle树的根节点的哈希

- TxHash:        存储该区块中的交易的Merkle树的根节点的哈希

- ReceiptHash:存储该区块的交易的回单的Merkle树的根节点的哈希

- Bloom:          交易日志的布隆过滤器,用于查询

- Difficulty:       该区块的难度

- Number:       区块号,也是区块高度,也是所有祖先区块的数量

- GasLimit:      该区块的汽油(gas)上限

- GasUsed:     该区块使用的汽油(gas)

- Time:            区块开始打包时间戳(调用Engine.Prepare函数的时候设置)

- MixDigest:    该哈希值与Nonce值一起证明该区块上已经进行了足够的计算,用于证明挖矿成功

- Nonce:         该哈希值与MixDigest哈希值一起证明该区块上已经进行了足够的计算,用于证明挖矿成功

- Extra:           预留它用(例如Clique共识机制使用)

你可能感兴趣的:(以太坊区块与区块头的数据结构解析)