Patch for concurrent iterator & others (onto v1.11.6) #386
@ -138,7 +138,7 @@ func (ga *GenesisAlloc) deriveHash() (common.Hash, error) {
|
|||||||
// flush is very similar with deriveHash, but the main difference is
|
// flush is very similar with deriveHash, but the main difference is
|
||||||
// all the generated states will be persisted into the given database.
|
// all the generated states will be persisted into the given database.
|
||||||
// Also, the genesis state specification will be flushed as well.
|
// Also, the genesis state specification will be flushed as well.
|
||||||
func (ga *GenesisAlloc) flush(db ethdb.Database, triedb *trie.Database) error {
|
func (ga *GenesisAlloc) flush(db ethdb.Database, triedb *trie.Database, blockhash common.Hash) error {
|
||||||
statedb, err := state.New(common.Hash{}, state.NewDatabaseWithNodeDB(db, triedb), nil)
|
statedb, err := state.New(common.Hash{}, state.NewDatabaseWithNodeDB(db, triedb), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -166,15 +166,15 @@ func (ga *GenesisAlloc) flush(db ethdb.Database, triedb *trie.Database) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
rawdb.WriteGenesisStateSpec(db, root, blob)
|
rawdb.WriteGenesisStateSpec(db, blockhash, blob)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// CommitGenesisState loads the stored genesis state with the given block
|
// CommitGenesisState loads the stored genesis state with the given block
|
||||||
// hash and commits it into the provided trie database.
|
// hash and commits it into the provided trie database.
|
||||||
func CommitGenesisState(db ethdb.Database, triedb *trie.Database, hash common.Hash) error {
|
func CommitGenesisState(db ethdb.Database, triedb *trie.Database, blockhash common.Hash) error {
|
||||||
var alloc GenesisAlloc
|
var alloc GenesisAlloc
|
||||||
blob := rawdb.ReadGenesisStateSpec(db, hash)
|
blob := rawdb.ReadGenesisStateSpec(db, blockhash)
|
||||||
if len(blob) != 0 {
|
if len(blob) != 0 {
|
||||||
if err := alloc.UnmarshalJSON(blob); err != nil {
|
if err := alloc.UnmarshalJSON(blob); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -186,7 +186,7 @@ func CommitGenesisState(db ethdb.Database, triedb *trie.Database, hash common.Ha
|
|||||||
// - supported networks(mainnet, testnets), recover with defined allocations
|
// - supported networks(mainnet, testnets), recover with defined allocations
|
||||||
// - private network, can't recover
|
// - private network, can't recover
|
||||||
var genesis *Genesis
|
var genesis *Genesis
|
||||||
switch hash {
|
switch blockhash {
|
||||||
case params.MainnetGenesisHash:
|
case params.MainnetGenesisHash:
|
||||||
genesis = DefaultGenesisBlock()
|
genesis = DefaultGenesisBlock()
|
||||||
case params.RinkebyGenesisHash:
|
case params.RinkebyGenesisHash:
|
||||||
@ -202,7 +202,7 @@ func CommitGenesisState(db ethdb.Database, triedb *trie.Database, hash common.Ha
|
|||||||
return errors.New("not found")
|
return errors.New("not found")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return alloc.flush(db, triedb)
|
return alloc.flush(db, triedb, blockhash)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GenesisAccount is an account in the state of the genesis block.
|
// GenesisAccount is an account in the state of the genesis block.
|
||||||
@ -493,7 +493,7 @@ func (g *Genesis) Commit(db ethdb.Database, triedb *trie.Database) (*types.Block
|
|||||||
// All the checks has passed, flush the states derived from the genesis
|
// All the checks has passed, flush the states derived from the genesis
|
||||||
// specification as well as the specification itself into the provided
|
// specification as well as the specification itself into the provided
|
||||||
// database.
|
// database.
|
||||||
if err := g.Alloc.flush(db, triedb); err != nil {
|
if err := g.Alloc.flush(db, triedb, block.Hash()); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
rawdb.WriteTd(db, block.Hash(), block.NumberU64(), block.Difficulty())
|
rawdb.WriteTd(db, block.Hash(), block.NumberU64(), block.Difficulty())
|
||||||
|
@ -82,15 +82,15 @@ func WriteChainConfig(db ethdb.KeyValueWriter, hash common.Hash, cfg *params.Cha
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ReadGenesisStateSpec retrieves the genesis state specification based on the
|
// ReadGenesisStateSpec retrieves the genesis state specification based on the
|
||||||
// given genesis hash.
|
// given genesis (block-)hash.
|
||||||
func ReadGenesisStateSpec(db ethdb.KeyValueReader, hash common.Hash) []byte {
|
func ReadGenesisStateSpec(db ethdb.KeyValueReader, blockhash common.Hash) []byte {
|
||||||
data, _ := db.Get(genesisStateSpecKey(hash))
|
data, _ := db.Get(genesisStateSpecKey(blockhash))
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteGenesisStateSpec writes the genesis state specification into the disk.
|
// WriteGenesisStateSpec writes the genesis state specification into the disk.
|
||||||
func WriteGenesisStateSpec(db ethdb.KeyValueWriter, hash common.Hash, data []byte) {
|
func WriteGenesisStateSpec(db ethdb.KeyValueWriter, blockhash common.Hash, data []byte) {
|
||||||
if err := db.Put(genesisStateSpecKey(hash), data); err != nil {
|
if err := db.Put(genesisStateSpecKey(blockhash), data); err != nil {
|
||||||
log.Crit("Failed to store genesis state", "err", err)
|
log.Crit("Failed to store genesis state", "err", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user