forked from cerc-io/plugeth
params: allow setting Petersburg block before chain head (#21473)
* Allow setting PetersburgBlock before chainhead if it is at the same block as ConstantinopleBlock * Add a negative test
This commit is contained in:
parent
cf2a77af28
commit
8696dd39cb
@ -528,8 +528,12 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, head *big.Int) *Confi
|
|||||||
return newCompatError("Constantinople fork block", c.ConstantinopleBlock, newcfg.ConstantinopleBlock)
|
return newCompatError("Constantinople fork block", c.ConstantinopleBlock, newcfg.ConstantinopleBlock)
|
||||||
}
|
}
|
||||||
if isForkIncompatible(c.PetersburgBlock, newcfg.PetersburgBlock, head) {
|
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)
|
return newCompatError("Petersburg fork block", c.PetersburgBlock, newcfg.PetersburgBlock)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if isForkIncompatible(c.IstanbulBlock, newcfg.IstanbulBlock, head) {
|
if isForkIncompatible(c.IstanbulBlock, newcfg.IstanbulBlock, head) {
|
||||||
return newCompatError("Istanbul fork block", c.IstanbulBlock, newcfg.IstanbulBlock)
|
return newCompatError("Istanbul fork block", c.IstanbulBlock, newcfg.IstanbulBlock)
|
||||||
}
|
}
|
||||||
|
@ -70,6 +70,23 @@ func TestCheckCompatible(t *testing.T) {
|
|||||||
RewindTo: 9,
|
RewindTo: 9,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
stored: &ChainConfig{ConstantinopleBlock: big.NewInt(30)},
|
||||||
|
new: &ChainConfig{ConstantinopleBlock: big.NewInt(30), PetersburgBlock: big.NewInt(30)},
|
||||||
|
head: 40,
|
||||||
|
wantErr: nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
stored: &ChainConfig{ConstantinopleBlock: big.NewInt(30)},
|
||||||
|
new: &ChainConfig{ConstantinopleBlock: big.NewInt(30), PetersburgBlock: big.NewInt(31)},
|
||||||
|
head: 40,
|
||||||
|
wantErr: &ConfigCompatError{
|
||||||
|
What: "Petersburg fork block",
|
||||||
|
StoredConfig: nil,
|
||||||
|
NewConfig: big.NewInt(31),
|
||||||
|
RewindTo: 30,
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
|
Loading…
Reference in New Issue
Block a user