6666 ConstantinopleBlock : big .NewInt (7280000 ),
6767 PetersburgBlock : big .NewInt (7280000 ),
6868 IstanbulBlock : big .NewInt (9069000 ),
69+ MuirGlacierBlock : big .NewInt (9200000 ),
6970 Ethash : new (EthashConfig ),
7071 }
7172
@@ -104,6 +105,7 @@ var (
104105 ConstantinopleBlock : big .NewInt (4230000 ),
105106 PetersburgBlock : big .NewInt (4939394 ),
106107 IstanbulBlock : big .NewInt (6485846 ),
108+ MuirGlacierBlock : big .NewInt (7117117 ),
107109 Ethash : new (EthashConfig ),
108110 }
109111
@@ -213,16 +215,16 @@ var (
213215 //
214216 // This configuration is intentionally not using keyed fields to force anyone
215217 // adding flags to the config to also have to set these fields.
216- AllEthashProtocolChanges = & ChainConfig {big .NewInt (1337 ), big .NewInt (0 ), nil , false , big .NewInt (0 ), common.Hash {}, big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), nil , new (EthashConfig ), nil }
218+ AllEthashProtocolChanges = & ChainConfig {big .NewInt (1337 ), big .NewInt (0 ), nil , false , big .NewInt (0 ), common.Hash {}, big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), nil , nil , new (EthashConfig ), nil }
217219
218220 // AllCliqueProtocolChanges contains every protocol change (EIPs) introduced
219221 // and accepted by the Ethereum core developers into the Clique consensus.
220222 //
221223 // This configuration is intentionally not using keyed fields to force anyone
222224 // adding flags to the config to also have to set these fields.
223- AllCliqueProtocolChanges = & ChainConfig {big .NewInt (1337 ), big .NewInt (0 ), nil , false , big .NewInt (0 ), common.Hash {}, big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), nil , nil , & CliqueConfig {Period : 0 , Epoch : 30000 }}
225+ AllCliqueProtocolChanges = & ChainConfig {big .NewInt (1337 ), big .NewInt (0 ), nil , false , big .NewInt (0 ), common.Hash {}, big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), nil , nil , nil , & CliqueConfig {Period : 0 , Epoch : 30000 }}
224226
225- TestChainConfig = & ChainConfig {big .NewInt (1 ), big .NewInt (0 ), nil , false , big .NewInt (0 ), common.Hash {}, big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), nil , new (EthashConfig ), nil }
227+ TestChainConfig = & ChainConfig {big .NewInt (1 ), big .NewInt (0 ), nil , false , big .NewInt (0 ), common.Hash {}, big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), nil , nil , new (EthashConfig ), nil }
226228 TestRules = TestChainConfig .Rules (new (big.Int ))
227229)
228230
@@ -292,6 +294,7 @@ type ChainConfig struct {
292294 ConstantinopleBlock * big.Int `json:"constantinopleBlock,omitempty"` // Constantinople switch block (nil = no fork, 0 = already activated)
293295 PetersburgBlock * big.Int `json:"petersburgBlock,omitempty"` // Petersburg switch block (nil = same as Constantinople)
294296 IstanbulBlock * big.Int `json:"istanbulBlock,omitempty"` // Istanbul switch block (nil = no fork, 0 = already on istanbul)
297+ MuirGlacierBlock * big.Int `json:"muirGlacierBlock,omitempty"` // Eip-2384 (bomb delay) switch block (nil = no fork, 0 = already activated)
295298 EWASMBlock * big.Int `json:"ewasmBlock,omitempty"` // EWASM switch block (nil = no fork, 0 = already activated)
296299
297300 // Various consensus engines
@@ -329,7 +332,7 @@ func (c *ChainConfig) String() string {
329332 default :
330333 engine = "unknown"
331334 }
332- return fmt .Sprintf ("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v Engine: %v}" ,
335+ return fmt .Sprintf ("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v, Muir Glacier: %v, Engine: %v}" ,
333336 c .ChainID ,
334337 c .HomesteadBlock ,
335338 c .DAOForkBlock ,
@@ -341,6 +344,7 @@ func (c *ChainConfig) String() string {
341344 c .ConstantinopleBlock ,
342345 c .PetersburgBlock ,
343346 c .IstanbulBlock ,
347+ c .MuirGlacierBlock ,
344348 engine ,
345349 )
346350}
@@ -380,6 +384,11 @@ func (c *ChainConfig) IsConstantinople(num *big.Int) bool {
380384 return isForked (c .ConstantinopleBlock , num )
381385}
382386
387+ // IsMuirGlacier returns whether num is either equal to the Muir Glacier (EIP-2384) fork block or greater.
388+ func (c * ChainConfig ) IsMuirGlacier (num * big.Int ) bool {
389+ return isForked (c .MuirGlacierBlock , num )
390+ }
391+
383392// IsPetersburg returns whether num is either
384393// - equal to or greater than the PetersburgBlock fork block,
385394// - OR is nil, and Constantinople is active
@@ -432,6 +441,7 @@ func (c *ChainConfig) CheckConfigForkOrder() error {
432441 {"constantinopleBlock" , c .ConstantinopleBlock },
433442 {"petersburgBlock" , c .PetersburgBlock },
434443 {"istanbulBlock" , c .IstanbulBlock },
444+ {"muirGlacierBlock" , c .MuirGlacierBlock },
435445 } {
436446 if lastFork .name != "" {
437447 // Next one must be higher number
@@ -485,6 +495,9 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, head *big.Int) *Confi
485495 if isForkIncompatible (c .IstanbulBlock , newcfg .IstanbulBlock , head ) {
486496 return newCompatError ("Istanbul fork block" , c .IstanbulBlock , newcfg .IstanbulBlock )
487497 }
498+ if isForkIncompatible (c .MuirGlacierBlock , newcfg .MuirGlacierBlock , head ) {
499+ return newCompatError ("Muir Glacier fork block" , c .MuirGlacierBlock , newcfg .MuirGlacierBlock )
500+ }
488501 if isForkIncompatible (c .EWASMBlock , newcfg .EWASMBlock , head ) {
489502 return newCompatError ("ewasm fork block" , c .EWASMBlock , newcfg .EWASMBlock )
490503 }
0 commit comments