core: assign default difficulty to zero for chain without ethash

I hit this case while trying something with the simulated backend. The EVM only enables
instruction set forks after the merge when 'Random' is set. In the simulated backend, the
random value will be set via the engine API for all blocks after genesis. But for the
genesis block itself, the random value will not be assigned in the vm.BlockContext because
the genesis has a non-zero difficulty. For my case, this meant that estimateGas did not
work for the first transaction sent on the simulated chain, since the contract contained a
PUSH0 instruction.

This could also be fixed by explicitly configuring a zero difficulty in the simulated
backend. However, I think that zero difficulty is a better default these days.
pull/31067/head
Felix Lange 1 week ago
parent 4af9af419d
commit e65c08f569
  1. 8
      core/genesis.go

@ -459,8 +459,12 @@ func (g *Genesis) toBlockWithRoot(root common.Hash) *types.Block {
if g.GasLimit == 0 {
head.GasLimit = params.GenesisGasLimit
}
if g.Difficulty == nil && g.Mixhash == (common.Hash{}) {
head.Difficulty = params.GenesisDifficulty
if g.Difficulty == nil {
if g.Config != nil && g.Config.Ethash == nil {
head.Difficulty = big.NewInt(0)
} else if g.Mixhash == (common.Hash{}) {
head.Difficulty = params.GenesisDifficulty
}
}
if g.Config != nil && g.Config.IsLondon(common.Big0) {
if g.BaseFee != nil {

Loading…
Cancel
Save