66
66
ConstantinopleBlock : big .NewInt (7280000 ),
67
67
PetersburgBlock : big .NewInt (7280000 ),
68
68
IstanbulBlock : big .NewInt (9069000 ),
69
+ MuirGlacierBlock : big .NewInt (9200000 ),
69
70
Ethash : new (EthashConfig ),
70
71
}
71
72
@@ -104,6 +105,7 @@ var (
104
105
ConstantinopleBlock : big .NewInt (4230000 ),
105
106
PetersburgBlock : big .NewInt (4939394 ),
106
107
IstanbulBlock : big .NewInt (6485846 ),
108
+ MuirGlacierBlock : big .NewInt (7117117 ),
107
109
Ethash : new (EthashConfig ),
108
110
}
109
111
@@ -213,16 +215,16 @@ var (
213
215
//
214
216
// This configuration is intentionally not using keyed fields to force anyone
215
217
// 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 }
217
219
218
220
// AllCliqueProtocolChanges contains every protocol change (EIPs) introduced
219
221
// and accepted by the Ethereum core developers into the Clique consensus.
220
222
//
221
223
// This configuration is intentionally not using keyed fields to force anyone
222
224
// 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 }}
224
226
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 }
226
228
TestRules = TestChainConfig .Rules (new (big.Int ))
227
229
)
228
230
@@ -292,6 +294,7 @@ type ChainConfig struct {
292
294
ConstantinopleBlock * big.Int `json:"constantinopleBlock,omitempty"` // Constantinople switch block (nil = no fork, 0 = already activated)
293
295
PetersburgBlock * big.Int `json:"petersburgBlock,omitempty"` // Petersburg switch block (nil = same as Constantinople)
294
296
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)
295
298
EWASMBlock * big.Int `json:"ewasmBlock,omitempty"` // EWASM switch block (nil = no fork, 0 = already activated)
296
299
297
300
// Various consensus engines
@@ -329,7 +332,7 @@ func (c *ChainConfig) String() string {
329
332
default :
330
333
engine = "unknown"
331
334
}
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}" ,
333
336
c .ChainID ,
334
337
c .HomesteadBlock ,
335
338
c .DAOForkBlock ,
@@ -341,6 +344,7 @@ func (c *ChainConfig) String() string {
341
344
c .ConstantinopleBlock ,
342
345
c .PetersburgBlock ,
343
346
c .IstanbulBlock ,
347
+ c .MuirGlacierBlock ,
344
348
engine ,
345
349
)
346
350
}
@@ -380,6 +384,11 @@ func (c *ChainConfig) IsConstantinople(num *big.Int) bool {
380
384
return isForked (c .ConstantinopleBlock , num )
381
385
}
382
386
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
+
383
392
// IsPetersburg returns whether num is either
384
393
// - equal to or greater than the PetersburgBlock fork block,
385
394
// - OR is nil, and Constantinople is active
@@ -432,6 +441,7 @@ func (c *ChainConfig) CheckConfigForkOrder() error {
432
441
{"constantinopleBlock" , c .ConstantinopleBlock },
433
442
{"petersburgBlock" , c .PetersburgBlock },
434
443
{"istanbulBlock" , c .IstanbulBlock },
444
+ {"muirGlacierBlock" , c .MuirGlacierBlock },
435
445
} {
436
446
if lastFork .name != "" {
437
447
// Next one must be higher number
@@ -485,6 +495,9 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, head *big.Int) *Confi
485
495
if isForkIncompatible (c .IstanbulBlock , newcfg .IstanbulBlock , head ) {
486
496
return newCompatError ("Istanbul fork block" , c .IstanbulBlock , newcfg .IstanbulBlock )
487
497
}
498
+ if isForkIncompatible (c .MuirGlacierBlock , newcfg .MuirGlacierBlock , head ) {
499
+ return newCompatError ("Muir Glacier fork block" , c .MuirGlacierBlock , newcfg .MuirGlacierBlock )
500
+ }
488
501
if isForkIncompatible (c .EWASMBlock , newcfg .EWASMBlock , head ) {
489
502
return newCompatError ("ewasm fork block" , c .EWASMBlock , newcfg .EWASMBlock )
490
503
}
0 commit comments