美文网首页
ETH源码阅读(区块Body的存储)

ETH源码阅读(区块Body的存储)

作者: 坠叶飘香 | 来源:发表于2018-09-19 20:46 被阅读0次

区块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
}

相关文章

网友评论

      本文标题:ETH源码阅读(区块Body的存储)

      本文链接:https://www.haomeiwen.com/subject/burwnftx.html