diff --git a/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/MergeProtocolSchedule.java b/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/MergeProtocolSchedule.java index 56218baf70b..01133d841db 100644 --- a/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/MergeProtocolSchedule.java +++ b/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/MergeProtocolSchedule.java @@ -23,9 +23,11 @@ import org.hyperledger.besu.ethereum.mainnet.ProtocolSpecAdapters; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpecBuilder; import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket; +import org.hyperledger.besu.evm.MainnetEVMs; import org.hyperledger.besu.evm.internal.EvmConfiguration; import java.math.BigInteger; +import java.util.Optional; public class MergeProtocolSchedule { @@ -44,7 +46,11 @@ public static ProtocolSchedule create( return new ProtocolScheduleBuilder( config, DEFAULT_CHAIN_ID, - ProtocolSpecAdapters.create(0, MergeProtocolSchedule::applyMergeSpecificModifications), + ProtocolSpecAdapters.create( + 0, + (specBuilder) -> + MergeProtocolSchedule.applyMergeSpecificModifications( + specBuilder, config.getChainId())), privacyParameters, isRevertReasonEnabled, config.isQuorum(), @@ -53,9 +59,13 @@ public static ProtocolSchedule create( } private static ProtocolSpecBuilder applyMergeSpecificModifications( - final ProtocolSpecBuilder specBuilder) { + final ProtocolSpecBuilder specBuilder, final Optional chainId) { return specBuilder + .evmBuilder( + (gasCalculator, jdCacheConfig) -> + MainnetEVMs.paris( + gasCalculator, chainId.orElse(BigInteger.ZERO), EvmConfiguration.DEFAULT)) .blockProcessorBuilder(MergeBlockProcessor::new) .blockHeaderValidatorBuilder(MergeProtocolSchedule::getBlockHeaderValidator) .blockReward(Wei.ZERO) diff --git a/consensus/merge/src/test/java/org/hyperledger/besu/consensus/merge/MergeProtocolScheduleTest.java b/consensus/merge/src/test/java/org/hyperledger/besu/consensus/merge/MergeProtocolScheduleTest.java index b5c1a8b04a6..0779b4b93ff 100644 --- a/consensus/merge/src/test/java/org/hyperledger/besu/consensus/merge/MergeProtocolScheduleTest.java +++ b/consensus/merge/src/test/java/org/hyperledger/besu/consensus/merge/MergeProtocolScheduleTest.java @@ -18,10 +18,14 @@ import org.hyperledger.besu.config.GenesisConfigFile; import org.hyperledger.besu.config.GenesisConfigOptions; +import org.hyperledger.besu.datatypes.Hash; import org.hyperledger.besu.datatypes.Wei; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec; +import org.hyperledger.besu.evm.Code; +import org.hyperledger.besu.evm.operation.PrevRanDaoOperation; +import org.apache.tuweni.bytes.Bytes; import org.junit.Test; public class MergeProtocolScheduleTest { @@ -55,5 +59,9 @@ public void parametersAlignWithMainnetWithAdjustments() { assertThat(london.getName()).isEqualTo("Frontier"); assertThat(london.getBlockReward()).isEqualTo(Wei.ZERO); assertThat(london.isSkipZeroBlockRewards()).isEqualTo(true); + + Bytes diffOp = Bytes.fromHexString("0x44"); + var op = london.getEvm().operationAtOffset(Code.createLegacyCode(diffOp, Hash.hash(diffOp)), 0); + assertThat(op).isInstanceOf(PrevRanDaoOperation.class); } } diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/AbstractBlockProcessor.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/AbstractBlockProcessor.java index f4b02fcee59..8ed852e5428 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/AbstractBlockProcessor.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/AbstractBlockProcessor.java @@ -199,7 +199,12 @@ public AbstractBlockProcessor.Result processBlock( return AbstractBlockProcessor.Result.failed(); } - worldState.persist(blockHeader); + try { + worldState.persist(blockHeader); + } catch (Exception e) { + LOG.error("failed persisting block", e); + return AbstractBlockProcessor.Result.failed(); + } return AbstractBlockProcessor.Result.successful(receipts); }