@@ -194,9 +194,8 @@ var (
194
194
// TODO Caution !!! it should be very careful !!!
195
195
LubanBlock : nil ,
196
196
PlatoBlock : nil ,
197
-
198
- // TODO modify blockNumber to enable Berlin EIPs after the block.
199
- BerlinBlock : nil ,
197
+ // TODO modify blockNumber, this block should enable Berlin and London EIPs.
198
+ HertzBlock : nil ,
200
199
201
200
Parlia : & ParliaConfig {
202
201
Period : 3 ,
@@ -229,6 +228,7 @@ var (
229
228
// TODO Caution !!! it should be very careful !!!
230
229
LubanBlock : big .NewInt (29295050 ),
231
230
PlatoBlock : big .NewInt (29861024 ),
231
+ HertzBlock : big .NewInt (0 ),
232
232
233
233
Parlia : & ParliaConfig {
234
234
Period : 3 ,
@@ -260,6 +260,7 @@ var (
260
260
// TODO
261
261
LubanBlock : nil ,
262
262
PlatoBlock : nil ,
263
+ HertzBlock : nil ,
263
264
264
265
Parlia : & ParliaConfig {
265
266
Period : 3 ,
@@ -273,16 +274,16 @@ var (
273
274
// This configuration is intentionally not using keyed fields to force anyone
274
275
// adding flags to the config to also have to set these fields.
275
276
276
- 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 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), nil , nil , big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), new (EthashConfig ), nil , nil }
277
+ 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 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), nil , nil , big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big . NewInt ( 0 ), new (EthashConfig ), nil , nil }
277
278
278
279
// AllCliqueProtocolChanges contains every protocol change (EIPs) introduced
279
280
// and accepted by the Ethereum core developers into the Clique consensus.
280
281
//
281
282
// This configuration is intentionally not using keyed fields to force anyone
282
283
// adding flags to the config to also have to set these fields.
283
- 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 ), big .NewInt (0 ), big .NewInt (0 ), nil , nil , big .NewInt (0 ), nil , nil , nil , big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), nil , nil , nil , big .NewInt (0 ), big .NewInt (0 ), nil , & CliqueConfig {Period : 0 , Epoch : 30000 }, nil }
284
+ 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 ), big .NewInt (0 ), big .NewInt (0 ), nil , nil , big .NewInt (0 ), nil , nil , nil , big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), nil , nil , nil , big .NewInt (0 ), big .NewInt (0 ), big . NewInt ( 0 ), nil , & CliqueConfig {Period : 0 , Epoch : 30000 }, nil }
284
285
285
- 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 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), nil , nil , big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), nil , nil , big .NewInt (0 ), big .NewInt (0 ), new (EthashConfig ), nil , nil }
286
+ 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 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), nil , nil , big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), big .NewInt (0 ), nil , nil , big .NewInt (0 ), big .NewInt (0 ), big . NewInt ( 0 ), new (EthashConfig ), nil , nil }
286
287
TestRules = TestChainConfig .Rules (new (big.Int ), false )
287
288
)
288
289
@@ -381,6 +382,7 @@ type ChainConfig struct {
381
382
PlanckBlock * big.Int `json:"planckBlock,omitempty" toml:",omitempty"` // planckBlock switch block (nil = no fork, 0 = already activated)
382
383
LubanBlock * big.Int `json:"lubanBlock,omitempty" toml:",omitempty"` // lubanBlock switch block (nil = no fork, 0 = already activated)
383
384
PlatoBlock * big.Int `json:"platoBlock,omitempty" toml:",omitempty"` // platoBlock switch block (nil = no fork, 0 = already activated)
385
+ HertzBlock * big.Int `json:"hertzBlock,omitempty" toml:",omitempty"` // hertzBlock switch block (nil = no fork, 0 = already activated)
384
386
385
387
// Various consensus engines
386
388
Ethash * EthashConfig `json:"ethash,omitempty" toml:",omitempty"`
@@ -432,7 +434,7 @@ func (c *ChainConfig) String() string {
432
434
engine = "unknown"
433
435
}
434
436
435
- 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, Ramanujan: %v, Niels: %v, MirrorSync: %v, Bruno: %v, Berlin: %v, YOLO v3: %v, CatalystBlock: %v, London: %v, ArrowGlacier: %v, MergeFork:%v, Euler: %v, Gibbs: %v, Nano: %v, Moran: %v, Planck: %v,Luban: %v, Plato: %v, Engine: %v}" ,
437
+ 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, Ramanujan: %v, Niels: %v, MirrorSync: %v, Bruno: %v, Berlin: %v, YOLO v3: %v, CatalystBlock: %v, London: %v, ArrowGlacier: %v, MergeFork:%v, Euler: %v, Gibbs: %v, Nano: %v, Moran: %v, Planck: %v,Luban: %v, Plato: %v, Hertz: %v, Engine: %v}" ,
436
438
c .ChainID ,
437
439
c .HomesteadBlock ,
438
440
c .DAOForkBlock ,
@@ -462,6 +464,7 @@ func (c *ChainConfig) String() string {
462
464
c .PlanckBlock ,
463
465
c .LubanBlock ,
464
466
c .PlatoBlock ,
467
+ c .HertzBlock ,
465
468
engine ,
466
469
)
467
470
}
@@ -571,6 +574,16 @@ func (c *ChainConfig) IsOnPlato(num *big.Int) bool {
571
574
return configNumEqual (c .PlatoBlock , num )
572
575
}
573
576
577
+ // IsHertz returns whether num is either equal to the second fast finality fork block or greater.
578
+ func (c * ChainConfig ) IsHertz (num * big.Int ) bool {
579
+ return isForked (c .HertzBlock , num )
580
+ }
581
+
582
+ // IsOnHertz returns whether num is equal to the second fast finality fork block.
583
+ func (c * ChainConfig ) IsOnHertz (num * big.Int ) bool {
584
+ return configNumEqual (c .HertzBlock , num )
585
+ }
586
+
574
587
// IsMuirGlacier returns whether num is either equal to the Muir Glacier (EIP-2384) fork block or greater.
575
588
func (c * ChainConfig ) IsMuirGlacier (num * big.Int ) bool {
576
589
return isForked (c .MuirGlacierBlock , num )
@@ -590,6 +603,10 @@ func (c *ChainConfig) IsIstanbul(num *big.Int) bool {
590
603
591
604
// IsBerlin returns whether num is either equal to the Berlin fork block or greater.
592
605
func (c * ChainConfig ) IsBerlin (num * big.Int ) bool {
606
+ // Check if it is Hertz, which works on BSC
607
+ if c .IsHertz (num ) {
608
+ return true
609
+ }
593
610
return isForked (c .BerlinBlock , num )
594
611
}
595
612
@@ -679,6 +696,7 @@ func (c *ChainConfig) CheckConfigForkOrder() error {
679
696
{name : "gibbsBlock" , block : c .GibbsBlock },
680
697
{name : "lubanBlock" , block : c .LubanBlock },
681
698
{name : "platoBlock" , block : c .PlatoBlock },
699
+ {name : "hertzBlock" , block : c .HertzBlock },
682
700
} {
683
701
if lastFork .name != "" {
684
702
// Next one must be higher number
@@ -784,6 +802,9 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, head *big.Int) *Confi
784
802
if isForkIncompatible (c .PlatoBlock , newcfg .PlatoBlock , head ) {
785
803
return newCompatError ("plato fork block" , c .PlatoBlock , newcfg .PlatoBlock )
786
804
}
805
+ if isForkIncompatible (c .HertzBlock , newcfg .HertzBlock , head ) {
806
+ return newCompatError ("hartz fork block" , c .HertzBlock , newcfg .HertzBlock )
807
+ }
787
808
return nil
788
809
}
789
810
0 commit comments