core/rawdb: calculate the hash in the fly

This commit is contained in:
rjl493456442 2019-11-19 16:04:20 +08:00
parent 59a0610670
commit 18e74e9448

View file

@ -23,6 +23,7 @@ import (
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/params"
@ -177,11 +178,8 @@ func ReadHeaderRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValu
// comparison is necessary since ancient database only maintains // comparison is necessary since ancient database only maintains
// the canonical data. // the canonical data.
data, _ := db.Ancient(freezerHeaderTable, number) data, _ := db.Ancient(freezerHeaderTable, number)
if len(data) > 0 { if len(data) > 0 && crypto.Keccak256Hash(data) == hash {
h, _ := db.Ancient(freezerHashTable, number) return data
if common.BytesToHash(h) == hash {
return data
}
} }
// Then try to look up the data in leveldb. // Then try to look up the data in leveldb.
data, _ = db.Get(headerKey(number, hash)) data, _ = db.Get(headerKey(number, hash))
@ -193,11 +191,8 @@ func ReadHeaderRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValu
// but when we reach into leveldb, the data was already moved. That would // but when we reach into leveldb, the data was already moved. That would
// result in a not found error. // result in a not found error.
data, _ = db.Ancient(freezerHeaderTable, number) data, _ = db.Ancient(freezerHeaderTable, number)
if len(data) > 0 { if len(data) > 0 && crypto.Keccak256Hash(data) == hash {
h, _ := db.Ancient(freezerHashTable, number) return data
if common.BytesToHash(h) == hash {
return data
}
} }
return nil // Can't find the data anywhere. return nil // Can't find the data anywhere.
} }