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

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

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

区块的hash在db中存储:

key:h + number(区块高度) + n

value:block hash

1.通过区块高度生成key

go-ethereum/core/rawdb/schema.go

//h + number + n
// headerHashKey = headerPrefix + num (uint64 big endian) + headerHashSuffix
func headerHashKey(number uint64) []byte {
    return append(append(headerPrefix, encodeBlockNumber(number)...), headerHashSuffix...)
}
2.通过高度获得区块hash

go-ethereum/core/rawdb/accessors_chain.go

// ReadCanonicalHash retrieves the hash assigned to a canonical block number.
func ReadCanonicalHash(db DatabaseReader, number uint64) common.Hash {
    data, _ := db.Get(headerHashKey(number)) //通过key获得区块hash
    if len(data) == 0 {
        return common.Hash{}
    }
    return common.BytesToHash(data)
}

相关文章

网友评论

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

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