diff --git a/common/constants.go b/common/constants.go index e3e2d8c04d..c21e9ed420 100644 --- a/common/constants.go +++ b/common/constants.go @@ -48,6 +48,7 @@ var TIPXDCXCancellationFeeTestnet = big.NewInt(38383838) var TIPXDCXMinerDisable = big.NewInt(80370000) // Target 2nd Oct 2024 var TIPXDCXReceiverDisable = big.NewInt(80370900) // Target 2nd Oct 2024, safer to release after disable miner var Eip1559Block = big.NewInt(9999999999) +var CancunBlock = big.NewInt(9999999999) var BerlinBlock = big.NewInt(76321000) // Target 19th June 2024 var LondonBlock = big.NewInt(76321000) // Target 19th June 2024 var MergeBlock = big.NewInt(76321000) // Target 19th June 2024 diff --git a/common/constants/constants.go.devnet b/common/constants/constants.go.devnet index a71257ae6f..d4619de09a 100644 --- a/common/constants/constants.go.devnet +++ b/common/constants/constants.go.devnet @@ -52,6 +52,7 @@ var LondonBlock = big.NewInt(0) var MergeBlock = big.NewInt(0) var ShanghaiBlock = big.NewInt(0) var Eip1559Block = big.NewInt(0) +var CancunBlock = big.NewInt(9999999999) var TIPXDCXTestnet = big.NewInt(0) var IsTestnet bool = false diff --git a/common/constants/constants.go.local b/common/constants/constants.go.local index 6c51143137..8c9da8ea26 100644 --- a/common/constants/constants.go.local +++ b/common/constants/constants.go.local @@ -52,6 +52,7 @@ var LondonBlock = big.NewInt(0) var MergeBlock = big.NewInt(0) var ShanghaiBlock = big.NewInt(0) var Eip1559Block = big.NewInt(9999999999) +var CancunBlock = big.NewInt(9999999999) var TIPXDCXTestnet = big.NewInt(0) var IsTestnet bool = false diff --git a/common/constants/constants.go.testnet b/common/constants/constants.go.testnet index a7e9fb64ba..7567bc6daa 100644 --- a/common/constants/constants.go.testnet +++ b/common/constants/constants.go.testnet @@ -52,6 +52,7 @@ var LondonBlock = big.NewInt(61290000) var MergeBlock = big.NewInt(61290000) var ShanghaiBlock = big.NewInt(61290000) // Target 31st March 2024 var Eip1559Block = big.NewInt(9999999999) +var CancunBlock = big.NewInt(9999999999) var TIPXDCXTestnet = big.NewInt(23779191) var IsTestnet bool = true diff --git a/eth/backend.go b/eth/backend.go index dcfbf8c137..16bbabd4ae 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -22,6 +22,7 @@ import ( "fmt" "math/big" "runtime" + "strings" "sync" "sync/atomic" @@ -128,7 +129,11 @@ func New(ctx *node.ServiceContext, config *ethconfig.Config, XDCXServ *XDCx.XDCX return nil, genesisErr } - log.Info("Initialised chain configuration", "config", chainConfig) + log.Info(strings.Repeat("-", 153)) + for _, line := range strings.Split(chainConfig.Description(), "\n") { + log.Info(line) + } + log.Info(strings.Repeat("-", 153)) eth := &Ethereum{ config: config, diff --git a/les/backend.go b/les/backend.go index 80ec371c8c..fabfb6d5ef 100644 --- a/les/backend.go +++ b/les/backend.go @@ -19,6 +19,7 @@ package les import ( "errors" + "strings" "sync" "time" @@ -90,7 +91,11 @@ func New(ctx *node.ServiceContext, config *ethconfig.Config) (*LightEthereum, er if _, isCompat := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !isCompat { return nil, genesisErr } - log.Info("Initialised chain configuration", "config", chainConfig) + log.Info(strings.Repeat("-", 153)) + for _, line := range strings.Split(chainConfig.Description(), "\n") { + log.Info(line) + } + log.Info(strings.Repeat("-", 153)) peers := newPeerSet() quitSync := make(chan struct{}) diff --git a/params/config.go b/params/config.go index 01904c794b..b7919b946f 100644 --- a/params/config.go +++ b/params/config.go @@ -402,6 +402,7 @@ type ChainConfig struct { MergeBlock *big.Int `json:"mergeBlock,omitempty"` ShanghaiBlock *big.Int `json:"shanghaiBlock,omitempty"` Eip1559Block *big.Int `json:"eip1559Block,omitempty"` + CancunBlock *big.Int `json:"cancunBlock,omitempty"` // Various consensus engines Ethash *EthashConfig `json:"ethash,omitempty"` @@ -535,8 +536,8 @@ func (v *V2) ConfigIndex() []uint64 { return v.configIndex } -// String implements the fmt.Stringer interface. -func (c *ChainConfig) String() string { +// Description returns a human-readable description of ChainConfig. +func (c *ChainConfig) Description() string { var engine interface{} switch { case c.Ethash != nil: @@ -566,24 +567,30 @@ func (c *ChainConfig) String() string { if c.Eip1559Block != nil { eip1559Block = c.Eip1559Block } - return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Istanbul: %v BerlinBlock: %v LondonBlock: %v MergeBlock: %v ShanghaiBlock: %v Eip1559Block: %v Engine: %v}", - c.ChainId, - c.HomesteadBlock, - c.DAOForkBlock, - c.DAOForkSupport, - c.EIP150Block, - c.EIP155Block, - c.EIP158Block, - c.ByzantiumBlock, - c.ConstantinopleBlock, - common.TIPXDCXCancellationFee, - berlinBlock, - londonBlock, - mergeBlock, - shanghaiBlock, - eip1559Block, - engine, - ) + cancunBlock := common.CancunBlock + if c.CancunBlock != nil { + cancunBlock = c.CancunBlock + } + + var banner = "Chain configuration:\n" + banner += fmt.Sprintf(" - ChainID: %-8v\n", c.ChainId) + banner += fmt.Sprintf(" - Homestead: %-8v\n", c.HomesteadBlock) + banner += fmt.Sprintf(" - DAO Fork: %-8v\n", c.DAOForkBlock) + banner += fmt.Sprintf(" - DAO Support: %-8v\n", c.DAOForkSupport) + banner += fmt.Sprintf(" - Tangerine Whistle (EIP 150): %-8v\n", c.EIP150Block) + banner += fmt.Sprintf(" - Spurious Dragon (EIP 155): %-8v\n", c.EIP155Block) + banner += fmt.Sprintf(" - Byzantium: %-8v\n", c.ByzantiumBlock) + banner += fmt.Sprintf(" - Constantinople: %-8v\n", c.ConstantinopleBlock) + banner += fmt.Sprintf(" - Petersburg: %-8v\n", c.PetersburgBlock) + banner += fmt.Sprintf(" - Istanbul: %-8v\n", c.IstanbulBlock) + banner += fmt.Sprintf(" - Berlin: %-8v\n", berlinBlock) + banner += fmt.Sprintf(" - London: %-8v\n", londonBlock) + banner += fmt.Sprintf(" - Merge: %-8v\n", mergeBlock) + banner += fmt.Sprintf(" - Shanghai: %-8v\n", shanghaiBlock) + banner += fmt.Sprintf(" - Eip1559: %-8v\n", eip1559Block) + banner += fmt.Sprintf(" - Cancun: %-8v\n", cancunBlock) + banner += fmt.Sprintf(" - Engine: %v", engine) + return banner } // IsHomestead returns whether num is either equal to the homestead block or greater. @@ -653,6 +660,10 @@ func (c *ChainConfig) IsEIP1559(num *big.Int) bool { return isForked(common.Eip1559Block, num) || isForked(c.Eip1559Block, num) } +func (c *ChainConfig) IsCancun(num *big.Int) bool { + return isForked(common.CancunBlock, num) || isForked(c.CancunBlock, num) +} + func (c *ChainConfig) IsTIP2019(num *big.Int) bool { return isForked(common.TIP2019Block, num) } @@ -761,6 +772,28 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, head *big.Int) *Confi if isForkIncompatible(c.ConstantinopleBlock, newcfg.ConstantinopleBlock, head) { return newCompatError("Constantinople fork block", c.ConstantinopleBlock, newcfg.ConstantinopleBlock) } + if isForkIncompatible(c.PetersburgBlock, newcfg.PetersburgBlock, head) { + // the only case where we allow Petersburg to be set in the past is if it is equal to Constantinople + // mainly to satisfy fork ordering requirements which state that Petersburg fork be set if Constantinople fork is set + if isForkIncompatible(c.ConstantinopleBlock, newcfg.PetersburgBlock, head) { + return newCompatError("Petersburg fork block", c.PetersburgBlock, newcfg.PetersburgBlock) + } + } + if isForkIncompatible(c.IstanbulBlock, newcfg.IstanbulBlock, head) { + return newCompatError("Istanbul fork block", c.IstanbulBlock, newcfg.IstanbulBlock) + } + if isForkIncompatible(c.BerlinBlock, newcfg.BerlinBlock, head) { + return newCompatError("Berlin fork block", c.BerlinBlock, newcfg.BerlinBlock) + } + if isForkIncompatible(c.LondonBlock, newcfg.LondonBlock, head) { + return newCompatError("London fork block", c.LondonBlock, newcfg.LondonBlock) + } + if isForkIncompatible(c.ShanghaiBlock, newcfg.ShanghaiBlock, head) { + return newCompatError("Shanghai fork timestamp", c.ShanghaiBlock, newcfg.ShanghaiBlock) + } + if isForkIncompatible(c.CancunBlock, newcfg.CancunBlock, head) { + return newCompatError("Cancun fork block", c.CancunBlock, newcfg.CancunBlock) + } return nil } @@ -832,6 +865,7 @@ type Rules struct { IsMerge, IsShanghai bool IsXDCxDisable bool IsEIP1559 bool + IsCancun bool } func (c *ChainConfig) Rules(num *big.Int) Rules { @@ -855,5 +889,6 @@ func (c *ChainConfig) Rules(num *big.Int) Rules { IsShanghai: c.IsShanghai(num), IsXDCxDisable: c.IsXDCxDisable(num), IsEIP1559: c.IsEIP1559(num), + IsCancun: c.IsCancun(num), } }