eth, trie: removed key prefixing from state entries & merge db fix
Fixed database merge strategy to use the correct database. Due to a copy paste fail when doing type evaluation the same database was being iterated (chain), all others were ignored. Removed state prefixing because {H(code): code} is stored in the same database as the rest of the state.
This commit is contained in:
parent
a89cfe92cc
commit
b8ca0a830e
@ -45,7 +45,6 @@ import (
|
||||
"github.com/ethereum/go-ethereum/p2p"
|
||||
"github.com/ethereum/go-ethereum/p2p/discover"
|
||||
"github.com/ethereum/go-ethereum/p2p/nat"
|
||||
"github.com/ethereum/go-ethereum/trie"
|
||||
"github.com/ethereum/go-ethereum/whisper"
|
||||
)
|
||||
|
||||
@ -738,48 +737,53 @@ func mergeDatabases(datadir string, newdb func(path string) (common.Database, er
|
||||
}
|
||||
defer database.Close()
|
||||
|
||||
glog.Infoln("Merging blockchain database...")
|
||||
// Migrate blocks
|
||||
chainDb, err := newdb(chainPath)
|
||||
if err != nil {
|
||||
return fmt.Errorf("state db err: %v", err)
|
||||
}
|
||||
defer chainDb.Close()
|
||||
|
||||
if db, ok := chainDb.(*ethdb.LDBDatabase); ok {
|
||||
it := db.NewIterator()
|
||||
if chain, ok := chainDb.(*ethdb.LDBDatabase); ok {
|
||||
glog.Infoln("Merging blockchain database...")
|
||||
it := chain.NewIterator()
|
||||
for it.Next() {
|
||||
database.Put(it.Key(), it.Value())
|
||||
}
|
||||
it.Release()
|
||||
}
|
||||
|
||||
glog.Infoln("Merging state database...")
|
||||
state := filepath.Join(datadir, "state")
|
||||
stateDb, err := newdb(state)
|
||||
// Migrate state
|
||||
stateDb, err := newdb(filepath.Join(datadir, "state"))
|
||||
if err != nil {
|
||||
return fmt.Errorf("state db err: %v", err)
|
||||
}
|
||||
defer stateDb.Close()
|
||||
|
||||
if db, ok := chainDb.(*ethdb.LDBDatabase); ok {
|
||||
it := db.NewIterator()
|
||||
if state, ok := stateDb.(*ethdb.LDBDatabase); ok {
|
||||
glog.Infoln("Merging state database...")
|
||||
it := state.NewIterator()
|
||||
for it.Next() {
|
||||
database.Put(append(trie.StatePre, it.Key()...), it.Value())
|
||||
database.Put(it.Key(), it.Value())
|
||||
}
|
||||
it.Release()
|
||||
}
|
||||
|
||||
glog.Infoln("Merging transaction database...")
|
||||
extra := filepath.Join(datadir, "extra")
|
||||
extraDb, err := newdb(extra)
|
||||
// Migrate transaction / receipts
|
||||
extraDb, err := newdb(filepath.Join(datadir, "extra"))
|
||||
if err != nil {
|
||||
return fmt.Errorf("state db err: %v", err)
|
||||
}
|
||||
defer extraDb.Close()
|
||||
|
||||
if db, ok := chainDb.(*ethdb.LDBDatabase); ok {
|
||||
it := db.NewIterator()
|
||||
if extra, ok := extraDb.(*ethdb.LDBDatabase); ok {
|
||||
glog.Infoln("Merging transaction database...")
|
||||
|
||||
it := extra.NewIterator()
|
||||
for it.Next() {
|
||||
database.Put(it.Key(), it.Value())
|
||||
}
|
||||
it.Release()
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@ -38,8 +38,6 @@ func NewCache(backend Backend) *Cache {
|
||||
}
|
||||
|
||||
func (self *Cache) Get(key []byte) []byte {
|
||||
key = append(StatePre, key...)
|
||||
|
||||
data := self.store[string(key)]
|
||||
if data == nil {
|
||||
data, _ = self.backend.Get(key)
|
||||
@ -49,8 +47,6 @@ func (self *Cache) Get(key []byte) []byte {
|
||||
}
|
||||
|
||||
func (self *Cache) Put(key []byte, data []byte) {
|
||||
key = append(StatePre, key...)
|
||||
|
||||
self.batch.Put(key, data)
|
||||
self.store[string(key)] = data
|
||||
}
|
||||
|
@ -27,8 +27,6 @@ import (
|
||||
"github.com/ethereum/go-ethereum/crypto"
|
||||
)
|
||||
|
||||
var StatePre = []byte("state-")
|
||||
|
||||
func ParanoiaCheck(t1 *Trie, backend Backend) (bool, *Trie) {
|
||||
t2 := New(nil, backend)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user