|
|
@ -252,65 +252,6 @@ func upgradeSequentialBlockData(db ethdb.Database, hash []byte) error { |
|
|
|
return nil |
|
|
|
return nil |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// upgradeChainDatabase ensures that the chain database stores block split into
|
|
|
|
|
|
|
|
// separate header and body entries.
|
|
|
|
|
|
|
|
func upgradeChainDatabase(db ethdb.Database) error { |
|
|
|
|
|
|
|
// Short circuit if the head block is stored already as separate header and body
|
|
|
|
|
|
|
|
data, err := db.Get([]byte("LastBlock")) |
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
|
|
return nil |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
head := common.BytesToHash(data) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if block := core.GetBlockByHashOld(db, head); block == nil { |
|
|
|
|
|
|
|
return nil |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// At least some of the database is still the old format, upgrade (skip the head block!)
|
|
|
|
|
|
|
|
log.Info(fmt.Sprint("Old database detected, upgrading...")) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if db, ok := db.(*ethdb.LDBDatabase); ok { |
|
|
|
|
|
|
|
blockPrefix := []byte("block-hash-") |
|
|
|
|
|
|
|
for it := db.NewIterator(); it.Next(); { |
|
|
|
|
|
|
|
// Skip anything other than a combined block
|
|
|
|
|
|
|
|
if !bytes.HasPrefix(it.Key(), blockPrefix) { |
|
|
|
|
|
|
|
continue |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// Skip the head block (merge last to signal upgrade completion)
|
|
|
|
|
|
|
|
if bytes.HasSuffix(it.Key(), head.Bytes()) { |
|
|
|
|
|
|
|
continue |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// Load the block, split and serialize (order!)
|
|
|
|
|
|
|
|
block := core.GetBlockByHashOld(db, common.BytesToHash(bytes.TrimPrefix(it.Key(), blockPrefix))) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if err := core.WriteTd(db, block.Hash(), block.NumberU64(), block.DeprecatedTd()); err != nil { |
|
|
|
|
|
|
|
return err |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if err := core.WriteBody(db, block.Hash(), block.NumberU64(), block.Body()); err != nil { |
|
|
|
|
|
|
|
return err |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if err := core.WriteHeader(db, block.Header()); err != nil { |
|
|
|
|
|
|
|
return err |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if err := db.Delete(it.Key()); err != nil { |
|
|
|
|
|
|
|
return err |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// Lastly, upgrade the head block, disabling the upgrade mechanism
|
|
|
|
|
|
|
|
current := core.GetBlockByHashOld(db, head) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if err := core.WriteTd(db, current.Hash(), current.NumberU64(), current.DeprecatedTd()); err != nil { |
|
|
|
|
|
|
|
return err |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if err := core.WriteBody(db, current.Hash(), current.NumberU64(), current.Body()); err != nil { |
|
|
|
|
|
|
|
return err |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if err := core.WriteHeader(db, current.Header()); err != nil { |
|
|
|
|
|
|
|
return err |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return nil |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func addMipmapBloomBins(db ethdb.Database) (err error) { |
|
|
|
func addMipmapBloomBins(db ethdb.Database) (err error) { |
|
|
|
const mipmapVersion uint = 2 |
|
|
|
const mipmapVersion uint = 2 |
|
|
|
|
|
|
|
|
|
|
|