@@ -117,11 +117,13 @@ type Consortium struct {
117
117
118
118
getSCValidators func () ([]common.Address , error ) // Get the list of validator from contract
119
119
getFenixValidators func () ([]common.Address , error ) // Get the validator list from Ronin Validator contract of Fenix hardfork
120
+
121
+ skipCheckpointHeaderCheck bool
120
122
}
121
123
122
124
// New creates a Consortium proof-of-authority consensus engine with the initial
123
125
// signers set to the ones provided by the user.
124
- func New (chainConfig * params.ChainConfig , db ethdb.Database , ethAPI * ethapi.PublicBlockChainAPI ) * Consortium {
126
+ func New (chainConfig * params.ChainConfig , db ethdb.Database , ethAPI * ethapi.PublicBlockChainAPI , skipCheckpointHeaderCheck bool ) * Consortium {
125
127
// Set any missing consensus parameters to their defaults
126
128
consortiumConfig := * chainConfig .Consortium
127
129
if consortiumConfig .Epoch == 0 {
@@ -132,14 +134,15 @@ func New(chainConfig *params.ChainConfig, db ethdb.Database, ethAPI *ethapi.Publ
132
134
signatures , _ := lru .NewARC (inmemorySignatures )
133
135
134
136
consortium := Consortium {
135
- chainConfig : chainConfig ,
136
- config : & consortiumConfig ,
137
- db : db ,
138
- recents : recents ,
139
- signatures : signatures ,
140
- ethAPI : ethAPI ,
141
- proposals : make (map [common.Address ]bool ),
142
- signer : types .NewEIP155Signer (chainConfig .ChainID ),
137
+ chainConfig : chainConfig ,
138
+ config : & consortiumConfig ,
139
+ db : db ,
140
+ recents : recents ,
141
+ signatures : signatures ,
142
+ ethAPI : ethAPI ,
143
+ proposals : make (map [common.Address ]bool ),
144
+ signer : types .NewEIP155Signer (chainConfig .ChainID ),
145
+ skipCheckpointHeaderCheck : skipCheckpointHeaderCheck ,
143
146
}
144
147
145
148
err := consortium .initContract (common.Address {}, nil )
@@ -277,17 +280,19 @@ func (c *Consortium) verifyCascadingFields(chain consensus.ChainHeaderReader, he
277
280
return c .verifySeal (chain , header , parents )
278
281
}
279
282
280
- signers , err := c .getValidatorsFromContract (chain , number - 1 )
281
- if err != nil {
282
- return err
283
- }
283
+ if ! c .skipCheckpointHeaderCheck {
284
+ signers , err := c .getValidatorsFromContract (chain , number - 1 )
285
+ if err != nil {
286
+ return err
287
+ }
284
288
285
- extraSuffix := len (header .Extra ) - consortiumCommon .ExtraSeal
286
- checkpointHeaders := consortiumCommon .ExtractAddressFromBytes (header .Extra [extraVanity :extraSuffix ])
287
- validSigners := consortiumCommon .CompareSignersLists (checkpointHeaders , signers )
288
- if ! validSigners {
289
- log .Error ("signers lists are different in checkpoint header and snapshot" , "number" , number , "signersHeader" , checkpointHeaders , "signers" , signers )
290
- return consortiumCommon .ErrInvalidCheckpointSigners
289
+ extraSuffix := len (header .Extra ) - consortiumCommon .ExtraSeal
290
+ checkpointHeaders := consortiumCommon .ExtractAddressFromBytes (header .Extra [extraVanity :extraSuffix ])
291
+ validSigners := consortiumCommon .CompareSignersLists (checkpointHeaders , signers )
292
+ if ! validSigners {
293
+ log .Error ("signers lists are different in checkpoint header and snapshot" , "number" , number , "signersHeader" , checkpointHeaders , "signers" , signers )
294
+ return consortiumCommon .ErrInvalidCheckpointSigners
295
+ }
291
296
}
292
297
293
298
// All basic checks passed, verify the seal and return
0 commit comments