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 fa974114cd1..4d261e6b521 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 @@ -647,6 +647,9 @@ static ProtocolSpecBuilder shanghaiDefinition( final boolean quorumCompatibilityMode, final EvmConfiguration evmConfiguration) { + final int stackSizeLimit = configStackSizeLimit.orElse(MessageFrame.DEFAULT_MAX_STACK_SIZE); + final BaseFeeMarket baseFeeMarket = getBaseFeeMarket(genesisConfigOptions); + return parisDefinition( chainId, configContractSizeLimit, @@ -655,11 +658,36 @@ static ProtocolSpecBuilder shanghaiDefinition( genesisConfigOptions, quorumCompatibilityMode, evmConfiguration) + .transactionProcessorBuilder( + (gasCalculator, + transactionValidator, + contractCreationProcessor, + messageCallProcessor) -> + new MainnetTransactionProcessor( + gasCalculator, + transactionValidator, + contractCreationProcessor, + messageCallProcessor, + true, + true, + stackSizeLimit, + baseFeeMarket, + CoinbaseFeePriceCalculator.eip1559())) .withdrawalsProcessorBuilder(WithdrawalsProcessor.AllowedWithdrawalsProcessor::new) .withdrawalsValidatorBuilder(WithdrawalsValidator.AllowedWithdrawals::new) .name("Shanghai"); } + private static BaseFeeMarket getBaseFeeMarket(final GenesisConfigOptions genesisConfigOptions) { + // TODO SLD bug here? need to default to a later fork e.g. if london isn't specified but + // grayGlacier is. + final long londonForkBlockNumber = + genesisConfigOptions.getLondonBlockNumber().orElse(Long.MAX_VALUE); + return genesisConfigOptions.isZeroBaseFee() + ? FeeMarket.zeroBaseFee(londonForkBlockNumber) + : FeeMarket.london(londonForkBlockNumber, genesisConfigOptions.getBaseFeePerGas()); + } + static ProtocolSpecBuilder cancunDefinition( final Optional chainId, final OptionalInt configContractSizeLimit,