以太坊区块链的区块(Block)结构

这里以以太坊区块链为基础进行讲解。直接看代码:

区块结构代码:block.go

1、block的header

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"`

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

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

}

区块的头部包含内容说明如下:

ParentHash:指向父区块(parentBlock)的指针。除了创世块(Genesis Block)外,每个区块有且只有一个父区块。

Coinbase:挖掘出这个区块的作者地址。在每次执行交易时系统会给与一定补偿的Ether,这笔金额就是发给这个地址的。

UncleHash:指向叔区块的指针

Root:状态数根节点的哈希值。状态数用来记录账号信息, 合约账户和用户账户等信息。

TxHash: 交易树根节点的哈希值。

ReceiptHash:收据树根节点的哈希值。收据树记录交易执行过程中的一些数据。

Bloom:Bloom过滤器(Filter),用来快速判断一个参数Log对象是否存在于一组已知的Log集合中。

Difficulty:区块的难度。Block的Difficulty由共识算法基于parentBlock的Time和Difficulty计算得出,它会应用在区块的‘挖掘’阶段。

Number:区块的序号。Block的Number等于其父区块Number +1。

Time:区块“应该”被创建的时间。由共识算法确定,一般来说,要么等于parentBlock.Time + 10s,要么等于当前系统时间。

GasLimit:区块内所有Gas消耗的理论上限。该数值在区块创建时设置,与父区块有关。具体来说,根据父区块的GasUsed同GasLimit * 2/3的大小关系来计算得出。

GasUsed:区块内所有Transaction执行时所实际消耗的Gas总和。

Nonce:一个64bit的哈希数,它被应用在区块的"挖掘"阶段,并且在使用中会被修改。

2、block的body

type Body struct {

    Transactions []*Transaction

    Uncles       []*Header

}

Body主要记录交易事物的主体。

3block的定义

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{}

}

所以整个区块链blockChina的结构如下:

猜你喜欢

转载自blog.csdn.net/luoye4321/article/details/82531212