区块Body存储db
key:b + number(区块高度) + hash(区块hash)
value:Body
1.通过block number和block hash生成key
go-ethereum/core/rawdb/schema.go
//b + number + hash
// blockBodyKey = blockBodyPrefix + num (uint64 big endian) + hash
func blockBodyKey(number uint64, hash common.Hash) []byte {
return append(append(blockBodyPrefix, encodeBlockNumber(number)...), hash.Bytes()...)
}
2.通过block number和block hash读取Body
go-ethereum/core/rawdb/accessors_chain.go
// ReadBody retrieves the block body corresponding to the hash.
func ReadBody(db DatabaseReader, hash common.Hash, number uint64) *types.Body {
data := ReadBodyRLP(db, hash, number) //通过key读取data
if len(data) == 0 {
return nil
}
body := new(types.Body)
if err := rlp.Decode(bytes.NewReader(data), body); err != nil { //data解析成Body
log.Error("Invalid block body RLP", "hash", hash, "err", err)
return nil
}
return body
}
网友评论