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共识机制使用)