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 78d681de72e..432637788dd 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 @@ -15,21 +15,16 @@ package org.hyperledger.besu.consensus.merge; import org.hyperledger.besu.config.GenesisConfigOptions; -import org.hyperledger.besu.datatypes.Wei; import org.hyperledger.besu.ethereum.core.PrivacyParameters; -import org.hyperledger.besu.ethereum.mainnet.BlockHeaderValidator; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolScheduleBuilder; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpecAdapters; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpecBuilder; import org.hyperledger.besu.ethereum.mainnet.TimestampSchedule; import org.hyperledger.besu.ethereum.mainnet.TimestampScheduleBuilder; -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 { @@ -48,11 +43,7 @@ public static ProtocolSchedule create( return new ProtocolScheduleBuilder( config, DEFAULT_CHAIN_ID, - ProtocolSpecAdapters.create( - 0, - (specBuilder) -> - MergeProtocolSchedule.applyMergeSpecificModifications( - specBuilder, config.getChainId())), + ProtocolSpecAdapters.create(0, MergeProtocolSchedule::applyMergeSpecificModifications), privacyParameters, isRevertReasonEnabled, config.isQuorum(), @@ -69,9 +60,7 @@ public static TimestampSchedule createTimestamp( DEFAULT_CHAIN_ID, ProtocolSpecAdapters.create( config.getShanghaiTime().orElse(0), - (specBuilder) -> - MergeProtocolSchedule.applyMergeSpecificModifications( - specBuilder, config.getChainId())), + MergeProtocolSchedule::applyMergeSpecificModifications), privacyParameters, isRevertReasonEnabled, config.isQuorum(), @@ -80,21 +69,8 @@ public static TimestampSchedule createTimestamp( } private static ProtocolSpecBuilder applyMergeSpecificModifications( - 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) - .difficultyCalculator((a, b, c) -> BigInteger.ZERO) - .skipZeroBlockRewards(true); - } + final ProtocolSpecBuilder specBuilder) { - private static BlockHeaderValidator.Builder getBlockHeaderValidator(final FeeMarket feeMarket) { - return MergeValidationRulesetFactory.mergeBlockHeaderValidator(feeMarket); + return specBuilder.blockProcessorBuilder(MergeBlockProcessor::new); } } diff --git a/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/MergeValidationRulesetFactory.java b/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/MergeValidationRulesetFactory.java deleted file mode 100644 index b39b1491191..00000000000 --- a/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/MergeValidationRulesetFactory.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright Hyperledger Besu Contributors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on - * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the - * specific language governing permissions and limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - */ -package org.hyperledger.besu.consensus.merge; - -import static org.hyperledger.besu.ethereum.mainnet.MainnetBlockHeaderValidator.MIN_GAS_LIMIT; -import static org.hyperledger.besu.ethereum.mainnet.MainnetBlockHeaderValidator.TIMESTAMP_TOLERANCE_S; - -import org.hyperledger.besu.consensus.merge.headervalidationrules.ConstantOmmersHashRule; -import org.hyperledger.besu.consensus.merge.headervalidationrules.IncrementalTimestampRule; -import org.hyperledger.besu.consensus.merge.headervalidationrules.NoDifficultyRule; -import org.hyperledger.besu.consensus.merge.headervalidationrules.NoNonceRule; -import org.hyperledger.besu.ethereum.core.BlockHeader; -import org.hyperledger.besu.ethereum.mainnet.BlockHeaderValidator; -import org.hyperledger.besu.ethereum.mainnet.EpochCalculator; -import org.hyperledger.besu.ethereum.mainnet.MainnetBlockHeaderValidator; -import org.hyperledger.besu.ethereum.mainnet.PoWHasher; -import org.hyperledger.besu.ethereum.mainnet.feemarket.BaseFeeMarket; -import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket; -import org.hyperledger.besu.ethereum.mainnet.headervalidationrules.AncestryValidationRule; -import org.hyperledger.besu.ethereum.mainnet.headervalidationrules.BaseFeeMarketBlockHeaderGasPriceValidationRule; -import org.hyperledger.besu.ethereum.mainnet.headervalidationrules.ExtraDataMaxLengthValidationRule; -import org.hyperledger.besu.ethereum.mainnet.headervalidationrules.GasLimitRangeAndDeltaValidationRule; -import org.hyperledger.besu.ethereum.mainnet.headervalidationrules.GasUsageValidationRule; -import org.hyperledger.besu.ethereum.mainnet.headervalidationrules.TimestampBoundedByFutureParameter; - -import java.util.Optional; - -public class MergeValidationRulesetFactory { - - private static final EpochCalculator preMergeCalculator = - new EpochCalculator.DefaultEpochCalculator(); - - /** - * Creates a set of rules which when executed will determine if a given block header is valid with - * respect to its parent (or chain). - * - *

Specifically the set of rules provided by this function are to be used for a Mainnet Merge - * chain. - * - * @param feeMarket the applicable {@link FeeMarket} - * @return the header validator. - */ - public static BlockHeaderValidator.Builder mergeBlockHeaderValidator(final FeeMarket feeMarket) { - - if (!feeMarket.implementsBaseFee()) { - return MainnetBlockHeaderValidator.createPgaBlockHeaderValidator( - preMergeCalculator, PoWHasher.ETHASH_LIGHT); - } else { - var baseFeeMarket = (BaseFeeMarket) feeMarket; - - return new BlockHeaderValidator.Builder() - .addRule(new AncestryValidationRule()) - .addRule(new GasUsageValidationRule()) - .addRule( - new GasLimitRangeAndDeltaValidationRule( - MIN_GAS_LIMIT, Long.MAX_VALUE, Optional.of(baseFeeMarket))) - .addRule(new TimestampBoundedByFutureParameter(TIMESTAMP_TOLERANCE_S)) - .addRule(new ExtraDataMaxLengthValidationRule(BlockHeader.MAX_EXTRA_DATA_BYTES)) - .addRule((new BaseFeeMarketBlockHeaderGasPriceValidationRule(baseFeeMarket))) - .addRule(new ConstantOmmersHashRule()) - .addRule(new NoNonceRule()) - .addRule(new NoDifficultyRule()) - .addRule(new IncrementalTimestampRule()); - } - } -} diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetDifficultyCalculators.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetDifficultyCalculators.java index e482cb1cd24..2eb7400f40c 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetDifficultyCalculators.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetDifficultyCalculators.java @@ -99,8 +99,7 @@ private MainnetDifficultyCalculators() {} calculateThawedDifficulty(time, parent, GRAY_GLACIER_FAKE_BLOCK_OFFSET); // Proof-of-Stake difficulty must not be altered - static final DifficultyCalculator PROOF_OF_STAKE_DIFFICULTY = - (time, parent, protocolContext) -> parent.getDifficulty().getAsBigInteger(); + static final DifficultyCalculator PROOF_OF_STAKE_DIFFICULTY = (time, parent, protocolContext) -> BigInteger.ZERO; private static BigInteger calculateThawedDifficulty( final long time, final BlockHeader parent, final long fakeBlockOffset) { diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecs.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecs.java index 4c9a8f70b64..cf9fd61d6f8 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecs.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecs.java @@ -14,6 +14,8 @@ */ package org.hyperledger.besu.ethereum.mainnet; +import static org.hyperledger.besu.ethereum.mainnet.MainnetDifficultyCalculators.PROOF_OF_STAKE_DIFFICULTY; + import org.hyperledger.besu.config.GenesisConfigOptions; import org.hyperledger.besu.config.PowAlgorithm; import org.hyperledger.besu.datatypes.Address; @@ -634,9 +636,10 @@ static ProtocolSpecBuilder parisDefinition( .evmBuilder( (gasCalculator, jdCacheConfig) -> MainnetEVMs.paris(gasCalculator, chainId.orElse(BigInteger.ZERO), evmConfiguration)) - .difficultyCalculator(MainnetDifficultyCalculators.PROOF_OF_STAKE_DIFFICULTY) + .difficultyCalculator(PROOF_OF_STAKE_DIFFICULTY) .blockHeaderValidatorBuilder(MainnetBlockHeaderValidator::mergeBlockHeaderValidator) .blockReward(Wei.ZERO) + .skipZeroBlockRewards(true) .name("ParisFork"); }