Skip to content

Commit

Permalink
Uniform the way fee market is used in ProtocolSpecBuilder (hyperledge…
Browse files Browse the repository at this point in the history
…r#5746)

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>
Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>
Signed-off-by: garyschulte <garyschulte@gmail.com>
  • Loading branch information
2 people authored and garyschulte committed Aug 28, 2023
1 parent 4e1a83c commit 4571d56
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 63 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import org.hyperledger.besu.datatypes.Wei;
import org.hyperledger.besu.ethereum.core.TransactionReceipt;
import org.hyperledger.besu.ethereum.core.feemarket.CoinbaseFeePriceCalculator;
import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket;
import org.hyperledger.besu.ethereum.processing.TransactionProcessingResult;
import org.hyperledger.besu.evm.MainnetEVMs;
import org.hyperledger.besu.evm.contractvalidation.MaxCodeSizeRule;
Expand Down Expand Up @@ -74,8 +73,8 @@ public static ProtocolSpecBuilder tangerineWhistleDefinition(
contractSizeLimit, configStackSizeLimit, evmConfiguration)
.isReplayProtectionSupported(true)
.gasCalculator(TangerineWhistleGasCalculator::new)
.transactionValidatorBuilder(
(gasCalculator, gasLimitCalculator) ->
.transactionValidatorFactoryBuilder(
(gasCalculator, gasLimitCalculator, feeMarket) ->
new TransactionValidatorFactory(gasCalculator, gasLimitCalculator, true, chainId))
.name("ClassicTangerineWhistle");
}
Expand Down Expand Up @@ -128,8 +127,8 @@ public static ProtocolSpecBuilder defuseDifficultyBombDefinition(
return gothamDefinition(
chainId, contractSizeLimit, configStackSizeLimit, ecip1017EraRounds, evmConfiguration)
.difficultyCalculator(ClassicDifficultyCalculators.DIFFICULTY_BOMB_REMOVED)
.transactionValidatorBuilder(
(gasCalculator, gasLimitCalculator) ->
.transactionValidatorFactoryBuilder(
(gasCalculator, gasLimitCalculator, feeMarket) ->
new TransactionValidatorFactory(gasCalculator, gasLimitCalculator, true, chainId))
.name("DefuseDifficultyBomb");
}
Expand Down Expand Up @@ -171,18 +170,19 @@ public static ProtocolSpecBuilder atlantisDefinition(
1))
.transactionProcessorBuilder(
(gasCalculator,
transactionValidator,
feeMarket,
transactionValidatorFactory,
contractCreationProcessor,
messageCallProcessor) ->
new MainnetTransactionProcessor(
gasCalculator,
transactionValidator,
transactionValidatorFactory,
contractCreationProcessor,
messageCallProcessor,
true,
false,
stackSizeLimit,
FeeMarket.legacy(),
feeMarket,
CoinbaseFeePriceCalculator.frontier()))
.name("Atlantis");
}
Expand Down Expand Up @@ -291,8 +291,8 @@ public static ProtocolSpecBuilder magnetoDefinition(
ecip1017EraRounds,
evmConfiguration)
.gasCalculator(BerlinGasCalculator::new)
.transactionValidatorBuilder(
(gasCalculator, gasLimitCalculator) ->
.transactionValidatorFactoryBuilder(
(gasCalculator, gasLimitCalculator, feeMarket) ->
new TransactionValidatorFactory(
gasCalculator,
gasLimitCalculator,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import org.hyperledger.besu.datatypes.TransactionType;
import org.hyperledger.besu.datatypes.Wei;
import org.hyperledger.besu.ethereum.BlockProcessingResult;
import org.hyperledger.besu.ethereum.GasLimitCalculator;
import org.hyperledger.besu.ethereum.MainnetBlockValidator;
import org.hyperledger.besu.ethereum.chain.Blockchain;
import org.hyperledger.besu.ethereum.core.BlockHeader;
Expand Down Expand Up @@ -110,7 +109,7 @@ public static ProtocolSpecBuilder frontierDefinition(
final int stackSizeLimit = configStackSizeLimit.orElse(MessageFrame.DEFAULT_MAX_STACK_SIZE);
return new ProtocolSpecBuilder()
.gasCalculator(FrontierGasCalculator::new)
.gasLimitCalculator(new FrontierTargetingGasLimitCalculator())
.gasLimitCalculatorBuilder(feeMarket -> new FrontierTargetingGasLimitCalculator())
.evmBuilder(MainnetEVMs::frontier)
.precompileContractRegistryBuilder(MainnetPrecompiledContractRegistries::frontier)
.messageCallProcessorBuilder(MessageCallProcessor::new)
Expand All @@ -122,12 +121,13 @@ public static ProtocolSpecBuilder frontierDefinition(
false,
Collections.singletonList(MaxCodeSizeRule.of(contractSizeLimit)),
0))
.transactionValidatorBuilder(
(gasCalculator, gasLimitCalculator) ->
.transactionValidatorFactoryBuilder(
(gasCalculator, gasLimitCalculator, feeMarket) ->
new TransactionValidatorFactory(
gasCalculator, gasLimitCalculator, false, Optional.empty()))
.transactionProcessorBuilder(
(gasCalculator,
feeMarket,
transactionValidatorFactory,
contractCreationProcessor,
messageCallProcessor) ->
Expand Down Expand Up @@ -197,8 +197,8 @@ public static ProtocolSpecBuilder homesteadDefinition(
true,
Collections.singletonList(MaxCodeSizeRule.of(contractSizeLimit)),
0))
.transactionValidatorBuilder(
(gasCalculator, gasLimitCalculator) ->
.transactionValidatorFactoryBuilder(
(gasCalculator, gasLimitCalculator, feeMarket) ->
new TransactionValidatorFactory(
gasCalculator, gasLimitCalculator, true, Optional.empty()))
.difficultyCalculator(MainnetDifficultyCalculators.HOMESTEAD)
Expand Down Expand Up @@ -275,11 +275,12 @@ public static ProtocolSpecBuilder spuriousDragonDefinition(
Collections.singletonList(MaxCodeSizeRule.of(contractSizeLimit)),
1,
SPURIOUS_DRAGON_FORCE_DELETE_WHEN_EMPTY_ADDRESSES))
.transactionValidatorBuilder(
(gasCalculator, gasLimitCalculator) ->
.transactionValidatorFactoryBuilder(
(gasCalculator, gasLimitCalculator, feeMarket) ->
new TransactionValidatorFactory(gasCalculator, gasLimitCalculator, true, chainId))
.transactionProcessorBuilder(
(gasCalculator,
feeMarket,
transactionValidator,
contractCreationProcessor,
messageCallProcessor) ->
Expand All @@ -291,7 +292,7 @@ public static ProtocolSpecBuilder spuriousDragonDefinition(
true,
false,
stackSizeLimit,
FeeMarket.legacy(),
feeMarket,
CoinbaseFeePriceCalculator.frontier()))
.name("SpuriousDragon");
}
Expand All @@ -316,12 +317,12 @@ public static ProtocolSpecBuilder byzantiumDefinition(
.blockReward(BYZANTIUM_BLOCK_REWARD)
.privateTransactionValidatorBuilder(() -> new PrivateTransactionValidator(chainId))
.privateTransactionProcessorBuilder(
(transactionValidator,
(transactionValidatorFactory,
contractCreationProcessor,
messageCallProcessor,
privateTransactionValidator) ->
new PrivateTransactionProcessor(
transactionValidator,
transactionValidatorFactory,
contractCreationProcessor,
messageCallProcessor,
false,
Expand Down Expand Up @@ -410,8 +411,8 @@ static ProtocolSpecBuilder berlinDefinition(
return muirGlacierDefinition(
chainId, contractSizeLimit, configStackSizeLimit, enableRevertReason, evmConfiguration)
.gasCalculator(BerlinGasCalculator::new)
.transactionValidatorBuilder(
(gasCalculator, gasLimitCalculator) ->
.transactionValidatorFactoryBuilder(
(gasCalculator, gasLimitCalculator, feeMarket) ->
new TransactionValidatorFactory(
gasCalculator,
gasLimitCalculator,
Expand Down Expand Up @@ -447,15 +448,18 @@ static ProtocolSpecBuilder londonDefinition(
configStackSizeLimit,
enableRevertReason,
evmConfiguration)
.feeMarket(londonFeeMarket)
.gasCalculator(LondonGasCalculator::new)
.gasLimitCalculator(
new LondonTargetingGasLimitCalculator(londonForkBlockNumber, londonFeeMarket))
.transactionValidatorBuilder(
(gasCalculator, gasLimitCalculator) ->
.gasLimitCalculatorBuilder(
feeMarket ->
new LondonTargetingGasLimitCalculator(
londonForkBlockNumber, (BaseFeeMarket) feeMarket))
.transactionValidatorFactoryBuilder(
(gasCalculator, gasLimitCalculator, feeMarket) ->
new TransactionValidatorFactory(
gasCalculator,
gasLimitCalculator,
londonFeeMarket,
feeMarket,
true,
chainId,
Set.of(
Expand All @@ -465,18 +469,19 @@ static ProtocolSpecBuilder londonDefinition(
Integer.MAX_VALUE))
.transactionProcessorBuilder(
(gasCalculator,
transactionValidator,
feeMarket,
transactionValidatorFactory,
contractCreationProcessor,
messageCallProcessor) ->
new MainnetTransactionProcessor(
gasCalculator,
transactionValidator,
transactionValidatorFactory,
contractCreationProcessor,
messageCallProcessor,
true,
false,
stackSizeLimit,
londonFeeMarket,
feeMarket,
CoinbaseFeePriceCalculator.eip1559()))
.contractCreationProcessorBuilder(
(gasCalculator, evm) ->
Expand All @@ -491,13 +496,14 @@ static ProtocolSpecBuilder londonDefinition(
(gasCalculator, jdCacheConfig) ->
MainnetEVMs.london(
gasCalculator, chainId.orElse(BigInteger.ZERO), evmConfiguration))
.feeMarket(londonFeeMarket)
.difficultyCalculator(MainnetDifficultyCalculators.LONDON)
.blockHeaderValidatorBuilder(
feeMarket -> MainnetBlockHeaderValidator.createBaseFeeMarketValidator(londonFeeMarket))
feeMarket ->
MainnetBlockHeaderValidator.createBaseFeeMarketValidator((BaseFeeMarket) feeMarket))
.ommerHeaderValidatorBuilder(
feeMarket ->
MainnetBlockHeaderValidator.createBaseFeeMarketOmmerValidator(londonFeeMarket))
MainnetBlockHeaderValidator.createBaseFeeMarketOmmerValidator(
(BaseFeeMarket) feeMarket))
.blockBodyValidatorBuilder(BaseFeeBlockBodyValidator::new)
.name("London");
}
Expand Down Expand Up @@ -574,11 +580,6 @@ static ProtocolSpecBuilder shanghaiDefinition(

// extra variables need to support flipping the warm coinbase flag.
final int stackSizeLimit = configStackSizeLimit.orElse(MessageFrame.DEFAULT_MAX_STACK_SIZE);
final long londonForkBlockNumber = genesisConfigOptions.getLondonBlockNumber().orElse(0L);
final BaseFeeMarket londonFeeMarket =
genesisConfigOptions.isZeroBaseFee()
? FeeMarket.zeroBaseFee(londonForkBlockNumber)
: FeeMarket.london(londonForkBlockNumber, genesisConfigOptions.getBaseFeePerGas());

return parisDefinition(
chainId,
Expand All @@ -597,26 +598,27 @@ static ProtocolSpecBuilder shanghaiDefinition(
// we need to flip the Warm Coinbase flag for EIP-3651 warm coinbase
.transactionProcessorBuilder(
(gasCalculator,
transactionValidator,
feeMarket,
transactionValidatorFactory,
contractCreationProcessor,
messageCallProcessor) ->
new MainnetTransactionProcessor(
gasCalculator,
transactionValidator,
transactionValidatorFactory,
contractCreationProcessor,
messageCallProcessor,
true,
true,
stackSizeLimit,
londonFeeMarket,
feeMarket,
CoinbaseFeePriceCalculator.eip1559()))
// Contract creation rules for EIP-3860 Limit and meter intitcode
.transactionValidatorBuilder(
(gasCalculator, gasLimitCalculator) ->
.transactionValidatorFactoryBuilder(
(gasCalculator, gasLimitCalculator, feeMarket) ->
new TransactionValidatorFactory(
gasCalculator,
gasLimitCalculator,
londonFeeMarket,
feeMarket,
true,
chainId,
Set.of(
Expand Down Expand Up @@ -646,9 +648,6 @@ static ProtocolSpecBuilder cancunDefinition(
? FeeMarket.zeroBaseFee(londonForkBlockNumber)
: FeeMarket.cancun(londonForkBlockNumber, genesisConfigOptions.getBaseFeePerGas());

final GasLimitCalculator cancunGasLimitCalculator =
new CancunTargetingGasLimitCalculator(londonForkBlockNumber, cancunFeeMarket);

return shanghaiDefinition(
chainId,
configContractSizeLimit,
Expand All @@ -660,7 +659,10 @@ static ProtocolSpecBuilder cancunDefinition(
// gas calculator for EIP-4844 data gas
.gasCalculator(CancunGasCalculator::new)
// gas limit with EIP-4844 max data gas per block
.gasLimitCalculator(cancunGasLimitCalculator)
.gasLimitCalculatorBuilder(
feeMarket ->
new CancunTargetingGasLimitCalculator(
londonForkBlockNumber, (BaseFeeMarket) feeMarket))
// EVM changes to support EOF EIPs (3670, 4200, 4750, 5450)
.evmBuilder(
(gasCalculator, jdCacheConfig) ->
Expand All @@ -680,6 +682,7 @@ static ProtocolSpecBuilder cancunDefinition(
// use Cancun fee market
.transactionProcessorBuilder(
(gasCalculator,
feeMarket,
transactionValidator,
contractCreationProcessor,
messageCallProcessor) ->
Expand All @@ -691,15 +694,15 @@ static ProtocolSpecBuilder cancunDefinition(
true,
true,
stackSizeLimit,
cancunFeeMarket,
feeMarket,
CoinbaseFeePriceCalculator.eip1559()))
// change to check for max data gas per block for EIP-4844
.transactionValidatorBuilder(
(gasCalculator, gasLimitCalculator) ->
.transactionValidatorFactoryBuilder(
(gasCalculator, gasLimitCalculator, feeMarket) ->
new TransactionValidatorFactory(
gasCalculator,
gasLimitCalculator,
cancunFeeMarket,
feeMarket,
true,
chainId,
Set.of(
Expand Down
Loading

0 comments on commit 4571d56

Please sign in to comment.