From 4ad33fd49a283fd440fc5c526a694e1d797a8110 Mon Sep 17 00:00:00 2001 From: begmaroman Date: Fri, 28 Apr 2023 16:14:46 +0100 Subject: [PATCH 1/2] Implementation --- command/genesis/params.go | 33 ++++++++++++++++++++----------- command/genesis/polybft_params.go | 25 +++++++++++++++-------- 2 files changed, 38 insertions(+), 20 deletions(-) diff --git a/command/genesis/params.go b/command/genesis/params.go index c2be9bf5c5..474ea192ff 100644 --- a/command/genesis/params.go +++ b/command/genesis/params.go @@ -356,6 +356,12 @@ func (p *genesisParams) generateGenesis() error { } func (p *genesisParams) initGenesisConfig() error { + // Disable london hardfork if burn contract address is not provided + enabledForks := chain.AllForksEnabled + if len(p.burnContracts) == 0 { + enabledForks.London = nil + } + chainConfig := &chain.Chain{ Name: p.name, Genesis: &chain.Genesis{ @@ -364,25 +370,28 @@ func (p *genesisParams) initGenesisConfig() error { Alloc: map[types.Address]*chain.GenesisAccount{}, ExtraData: p.extraData, GasUsed: command.DefaultGenesisGasUsed, - BaseFee: command.DefaultGenesisBaseFee, - BaseFeeEM: command.DefaultGenesisBaseFeeEM, }, Params: &chain.Params{ - ChainID: int64(p.chainID), - Forks: chain.AllForksEnabled, - Engine: p.consensusEngineConfig, - BurnContract: map[uint64]string{}, + ChainID: int64(p.chainID), + Forks: enabledForks, + Engine: p.consensusEngineConfig, }, Bootnodes: p.bootnodes, } - for _, burnContract := range p.burnContracts { - block, address, err := parseBurnContractInfo(burnContract) - if err != nil { - return err - } + if len(p.burnContracts) > 0 { + chainConfig.Genesis.BaseFee = command.DefaultGenesisBaseFee + chainConfig.Genesis.BaseFeeEM = command.DefaultGenesisBaseFeeEM + chainConfig.Params.BurnContract = map[uint64]string{} + + for _, burnContract := range p.burnContracts { + block, address, err := parseBurnContractInfo(burnContract) + if err != nil { + return err + } - chainConfig.Params.BurnContract[block] = address.String() + chainConfig.Params.BurnContract[block] = address.String() + } } // Predeploy staking smart contract if needed diff --git a/command/genesis/polybft_params.go b/command/genesis/polybft_params.go index 25d79ce7f7..385e1d8673 100644 --- a/command/genesis/polybft_params.go +++ b/command/genesis/polybft_params.go @@ -111,15 +111,20 @@ func (p *genesisParams) generatePolyBftChainConfig(o command.OutputFormatter) er NativeTokenConfig: p.nativeTokenConfig, } + // Disable london hardfork if burn contract address is not provided + enabledForks := chain.AllForksEnabled + if len(p.burnContracts) == 0 { + enabledForks.London = nil + } + chainConfig := &chain.Chain{ Name: p.name, Params: &chain.Params{ ChainID: int64(p.chainID), - Forks: chain.AllForksEnabled, + Forks: enabledForks, Engine: map[string]interface{}{ string(server.PolyBFTConsensus): polyBftConfig, }, - BurnContract: map[uint64]string{}, }, Bootnodes: p.bootnodes, } @@ -156,13 +161,17 @@ func (p *genesisParams) generatePolyBftChainConfig(o command.OutputFormatter) er } } - for _, burnContract := range p.burnContracts { - block, addr, err := parseBurnContractInfo(burnContract) - if err != nil { - return err - } + if len(p.burnContracts) > 0 { + chainConfig.Params.BurnContract = map[uint64]string{} + + for _, burnContract := range p.burnContracts { + block, addr, err := parseBurnContractInfo(burnContract) + if err != nil { + return err + } - chainConfig.Params.BurnContract[block] = addr.String() + chainConfig.Params.BurnContract[block] = addr.String() + } } validatorMetadata := make([]*polybft.ValidatorMetadata, len(initialValidators)) From f3a5687b831361b3fe93a7c481d78ab759f94805 Mon Sep 17 00:00:00 2001 From: begmaroman Date: Mon, 1 May 2023 09:03:36 +0100 Subject: [PATCH 2/2] Addressing comments --- command/genesis/params.go | 2 +- command/genesis/polybft_params.go | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/command/genesis/params.go b/command/genesis/params.go index 474ea192ff..d6ef529286 100644 --- a/command/genesis/params.go +++ b/command/genesis/params.go @@ -382,7 +382,7 @@ func (p *genesisParams) initGenesisConfig() error { if len(p.burnContracts) > 0 { chainConfig.Genesis.BaseFee = command.DefaultGenesisBaseFee chainConfig.Genesis.BaseFeeEM = command.DefaultGenesisBaseFeeEM - chainConfig.Params.BurnContract = map[uint64]string{} + chainConfig.Params.BurnContract = make(map[uint64]string, len(p.burnContracts)) for _, burnContract := range p.burnContracts { block, address, err := parseBurnContractInfo(burnContract) diff --git a/command/genesis/polybft_params.go b/command/genesis/polybft_params.go index 385e1d8673..8142c4dda3 100644 --- a/command/genesis/polybft_params.go +++ b/command/genesis/polybft_params.go @@ -162,7 +162,7 @@ func (p *genesisParams) generatePolyBftChainConfig(o command.OutputFormatter) er } if len(p.burnContracts) > 0 { - chainConfig.Params.BurnContract = map[uint64]string{} + chainConfig.Params.BurnContract = make(map[uint64]string, len(p.burnContracts)) for _, burnContract := range p.burnContracts { block, addr, err := parseBurnContractInfo(burnContract) @@ -204,8 +204,6 @@ func (p *genesisParams) generatePolyBftChainConfig(o command.OutputFormatter) er ExtraData: genesisExtraData, GasUsed: command.DefaultGenesisGasUsed, Mixhash: polybft.PolyBFTMixDigest, - BaseFee: chain.GenesisBaseFee, - BaseFeeEM: chain.GenesisBaseFeeEM, } if len(p.contractDeployerAllowListAdmin) != 0 { @@ -262,6 +260,13 @@ func (p *genesisParams) generatePolyBftChainConfig(o command.OutputFormatter) er } } + if len(p.burnContracts) > 0 { + // only populate base fee and base fee multiplier values if burn contract(s) + // is provided + chainConfig.Genesis.BaseFee = command.DefaultGenesisBaseFee + chainConfig.Genesis.BaseFeeEM = command.DefaultGenesisBaseFeeEM + } + return helper.WriteGenesisConfigToDisk(chainConfig, params.genesisPath) }