Add support for PulseChain genesis

This commit is contained in:
Shane Bammel 2022-10-03 22:19:05 -05:00
parent f8bf51978e
commit a96a211bbb

View File

@ -280,16 +280,25 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, triedb *triedb.Database, g
} }
return genesis.Config, block.Hash(), nil return genesis.Config, block.Hash(), nil
} }
// Assume mainnet chainId first
chainId := params.MainnetChainConfig.ChainID.Uint64()
// Note: The `genesis` argument will be one of:
// - nil: if running without the `init` command and without providing a network flag (--pulsechain, --ropsten, etc..)
// - defaulted: when a network flag is provided (--pulsechain, --ropsten, etc..), genesis will hold the defaults
// - custom: if running with the `init` command supplying a custom genesis.json file, genesis will hold the file contents
// Check whether the genesis block is already written. // Check whether the genesis block is already written.
if genesis != nil { if genesis != nil {
applyOverrides(genesis.Config) applyOverrides(genesis.Config)
if genesis.Config.ChainID != nil {
chainId = genesis.Config.ChainID.Uint64()
}
hash := genesis.ToBlock().Hash() hash := genesis.ToBlock().Hash()
if hash != stored { if hash != stored {
return genesis.Config, hash, &GenesisMismatchError{stored, hash} return genesis.Config, hash, &GenesisMismatchError{stored, hash}
} }
} }
// Get the existing chain configuration. // Get the existing chain configuration.
newcfg := genesis.configOrDefault(stored) newcfg := genesis.configOrDefault(stored, chainId)
applyOverrides(newcfg) applyOverrides(newcfg)
if err := newcfg.CheckConfigForkOrder(); err != nil { if err := newcfg.CheckConfigForkOrder(); err != nil {
return newcfg, common.Hash{}, err return newcfg, common.Hash{}, err
@ -306,7 +315,10 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, triedb *triedb.Database, g
// chain config as that would be AllProtocolChanges (applying any new fork // chain config as that would be AllProtocolChanges (applying any new fork
// on top of an existing private network genesis block). In that case, only // on top of an existing private network genesis block). In that case, only
// apply the overrides. // apply the overrides.
if genesis == nil && stored != params.MainnetGenesisHash { // Added: support custom config for PrimordialPulse fork with mainnet genesis
// and non-standard chain id.
if genesis == nil && (storedcfg.PrimordialPulseBlock != nil ||
stored != params.MainnetGenesisHash) {
newcfg = storedcfg newcfg = storedcfg
applyOverrides(newcfg) applyOverrides(newcfg)
} }
@ -360,12 +372,19 @@ func LoadChainConfig(db ethdb.Database, genesis *Genesis) (*params.ChainConfig,
return params.MainnetChainConfig, nil return params.MainnetChainConfig, nil
} }
func (g *Genesis) configOrDefault(ghash common.Hash) *params.ChainConfig { func (g *Genesis) configOrDefault(ghash common.Hash, chainId uint64) *params.ChainConfig {
switch { switch {
case g != nil: case g != nil:
return g.Config return g.Config
case ghash == params.MainnetGenesisHash: case ghash == params.MainnetGenesisHash:
return params.MainnetChainConfig switch chainId {
case params.PulseChainConfig.ChainID.Uint64():
return params.PulseChainConfig
case params.PulseChainTestnetConfig.ChainID.Uint64():
return params.PulseChainTestnetConfig
default:
return params.MainnetChainConfig
}
case ghash == params.HoleskyGenesisHash: case ghash == params.HoleskyGenesisHash:
return params.HoleskyChainConfig return params.HoleskyChainConfig
case ghash == params.SepoliaGenesisHash: case ghash == params.SepoliaGenesisHash: