diff --git a/app/src/main/java/org/hyperledger/besu/RunnerBuilder.java b/app/src/main/java/org/hyperledger/besu/RunnerBuilder.java index c47782a96c2..df6444b8bb5 100644 --- a/app/src/main/java/org/hyperledger/besu/RunnerBuilder.java +++ b/app/src/main/java/org/hyperledger/besu/RunnerBuilder.java @@ -70,6 +70,7 @@ import org.hyperledger.besu.ethereum.eth.manager.EthPeers; import org.hyperledger.besu.ethereum.eth.manager.EthScheduler; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.p2p.config.DiscoveryConfiguration; import org.hyperledger.besu.ethereum.p2p.config.NetworkingConfiguration; @@ -170,6 +171,7 @@ public class RunnerBuilder { private WebSocketConfiguration webSocketConfiguration; private InProcessRpcConfiguration inProcessRpcConfiguration; private ApiConfiguration apiConfiguration; + private BalConfiguration balConfiguration = BalConfiguration.DEFAULT; private Path dataDir; private Optional pidPath = Optional.empty(); private MetricsConfiguration metricsConfiguration; @@ -393,6 +395,17 @@ public RunnerBuilder apiConfiguration(final ApiConfiguration apiConfiguration) { return this; } + /** + * Sets the block access list configuration. + * + * @param balConfiguration the BAL configuration + * @return the runner builder + */ + public RunnerBuilder balConfiguration(final BalConfiguration balConfiguration) { + this.balConfiguration = balConfiguration; + return this; + } + /** * Add Permissioning configuration. * @@ -1260,6 +1273,7 @@ private Map jsonRpcMethods( besuController.getProtocolManager().ethContext().getEthPeers(), consensusEngineServer, apiConfiguration, + balConfiguration, enodeDnsConfiguration, transactionSimulator, ethScheduler); diff --git a/app/src/main/java/org/hyperledger/besu/cli/BesuCommand.java b/app/src/main/java/org/hyperledger/besu/cli/BesuCommand.java index 903e26c9602..2c9c596de2d 100644 --- a/app/src/main/java/org/hyperledger/besu/cli/BesuCommand.java +++ b/app/src/main/java/org/hyperledger/besu/cli/BesuCommand.java @@ -42,6 +42,7 @@ import org.hyperledger.besu.cli.error.BesuExecutionExceptionHandler; import org.hyperledger.besu.cli.error.BesuParameterExceptionHandler; import org.hyperledger.besu.cli.options.ApiConfigurationOptions; +import org.hyperledger.besu.cli.options.BalConfigurationOptions; import org.hyperledger.besu.cli.options.ChainPruningOptions; import org.hyperledger.besu.cli.options.DebugTracerOptions; import org.hyperledger.besu.cli.options.DnsOptions; @@ -122,6 +123,7 @@ import org.hyperledger.besu.ethereum.eth.sync.SynchronizerConfiguration; import org.hyperledger.besu.ethereum.eth.transactions.ImmutableTransactionPoolConfiguration; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.p2p.config.DiscoveryConfiguration; import org.hyperledger.besu.ethereum.p2p.discovery.P2PDiscoveryConfiguration; import org.hyperledger.besu.ethereum.p2p.peers.EnodeDnsConfiguration; @@ -601,6 +603,9 @@ void setUserName(final String userName) { @CommandLine.ArgGroup(validate = false, heading = "@|bold API Configuration Options|@%n") ApiConfigurationOptions apiConfigurationOptions = new ApiConfigurationOptions(); + @CommandLine.ArgGroup(validate = false, heading = "@|bold Block Access List Options|@%n") + BalConfigurationOptions balConfigurationOptions = new BalConfigurationOptions(); + @CommandLine.Option( names = {"--static-nodes-file"}, paramLabel = MANDATORY_FILE_FORMAT_HELP, @@ -1241,6 +1246,7 @@ private Runner buildRunner() { jsonRpcIpcConfiguration, inProcessRpcConfiguration, apiConfigurationSupplier.get(), + balConfigurationOptions.toDomainObject(), metricsConfiguration, permissioningConfiguration, staticNodes, @@ -1811,6 +1817,9 @@ public BesuControllerBuilder setupControllerBuilder() { .withMiningParameters(miningParametersSupplier.get()) .withJsonRpcHttpOptions(jsonRpcHttpOptions); final KeyValueStorageProvider storageProvider = keyValueStorageProvider(keyValueStorageName); + final ApiConfiguration apiConfiguration = apiConfigurationSupplier.get(); + final BalConfiguration balConfiguration = balConfigurationOptions.toDomainObject(); + BesuControllerBuilder besuControllerBuilder = controllerBuilder .fromEthNetworkConfig(updateNetworkConfig(network), getDefaultSyncModeIfNotSet()) @@ -1839,7 +1848,8 @@ public BesuControllerBuilder setupControllerBuilder() { .cacheLastBlockHeaders(numberOfBlockHeadersToCache) .isCacheLastBlockHeadersPreloadEnabled(isCacheLastBlockHeadersPreloadEnabled) .genesisStateHashCacheEnabled(genesisStateHashCacheEnabled) - .apiConfiguration(apiConfigurationSupplier.get()) + .apiConfiguration(apiConfiguration) + .balConfiguration(balConfiguration) .besuComponent(besuComponent); if (DataStorageFormat.BONSAI.equals(getDataStorageConfiguration().getDataStorageFormat())) { final PathBasedExtraStorageConfiguration subStorageConfiguration = @@ -1847,8 +1857,6 @@ public BesuControllerBuilder setupControllerBuilder() { besuControllerBuilder.isParallelTxProcessingEnabled( subStorageConfiguration.getParallelTxProcessingEnabled()); } - besuControllerBuilder.isBlockAccessListEnabled( - apiConfigurationOptions.apiConfiguration().isBlockAccessListEnabled()); return besuControllerBuilder; } @@ -2112,6 +2120,7 @@ private Runner synchronize( final JsonRpcIpcConfiguration jsonRpcIpcConfiguration, final InProcessRpcConfiguration inProcessRpcConfiguration, final ApiConfiguration apiConfiguration, + final BalConfiguration balConfiguration, final MetricsConfiguration metricsConfiguration, final Optional permissioningConfiguration, final Collection staticNodes, @@ -2140,6 +2149,7 @@ private Runner synchronize( .jsonRpcIpcConfiguration(jsonRpcIpcConfiguration) .inProcessRpcConfiguration(inProcessRpcConfiguration) .apiConfiguration(apiConfiguration) + .balConfiguration(balConfiguration) .pidPath(pidPath) .dataDir(dataDir()) .bannedNodeIds(p2PDiscoveryConfig.bannedNodeIds()) @@ -2587,6 +2597,9 @@ private Boolean getDefaultVersionCompatibilityProtectionIfNotSet() { private String generateConfigurationOverview() { final ConfigurationOverviewBuilder builder = new ConfigurationOverviewBuilder(logger); + final BalConfiguration balConfiguration = balConfigurationOptions.toDomainObject(); + builder.setBalConfiguration(balConfiguration); + if (environment != null) { builder.setEnvironment(environment); } diff --git a/app/src/main/java/org/hyperledger/besu/cli/ConfigurationOverviewBuilder.java b/app/src/main/java/org/hyperledger/besu/cli/ConfigurationOverviewBuilder.java index d9cb5a18a19..1cba69ca788 100644 --- a/app/src/main/java/org/hyperledger/besu/cli/ConfigurationOverviewBuilder.java +++ b/app/src/main/java/org/hyperledger/besu/cli/ConfigurationOverviewBuilder.java @@ -15,6 +15,7 @@ package org.hyperledger.besu.cli; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.evm.internal.EvmConfiguration; import org.hyperledger.besu.plugin.services.storage.rocksdb.configuration.RocksDBCLIOptions; import org.hyperledger.besu.services.BesuPluginContextImpl; @@ -23,6 +24,7 @@ import org.hyperledger.besu.util.platform.PlatformDetector; import java.math.BigInteger; +import java.time.Duration; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -69,6 +71,10 @@ public class ConfigurationOverviewBuilder { private boolean isParallelTxProcessingEnabled = false; private RocksDBCLIOptions.BlobDBSettings blobDBSettings; private Long targetGasLimit; + private boolean isBalOptimizationEnabled = true; + private boolean isBalLenientOnMismatch = false; + private boolean isBalApiEnabled = false; + private Duration balStateRootTimeout = Duration.ofSeconds(1); /** * Create a new ConfigurationOverviewBuilder. @@ -381,6 +387,20 @@ public ConfigurationOverviewBuilder setTargetGasLimit(final Long targetGasLimit) return this; } + /** + * Sets the BAL configuration. + * + * @param balConfiguration the BAL configuration + * @return the builder + */ + public ConfigurationOverviewBuilder setBalConfiguration(final BalConfiguration balConfiguration) { + this.isBalOptimizationEnabled = balConfiguration.isBalOptimisationEnabled(); + this.isBalLenientOnMismatch = balConfiguration.isBalLenientOnMismatch(); + this.isBalApiEnabled = balConfiguration.isBalApiEnabled(); + this.balStateRootTimeout = balConfiguration.getBalStateRootTimeout(); + return this; + } + /** * Build configuration overview. * @@ -453,6 +473,11 @@ public String build() { lines.add("Parallel transaction processing disabled"); } + lines.add("BAL optimizations " + (isBalOptimizationEnabled ? "enabled" : "disabled")); + lines.add("BAL mismatch leniency " + (isBalLenientOnMismatch ? "enabled" : "disabled")); + lines.add("BAL API " + (isBalApiEnabled ? "enabled" : "disabled")); + lines.add("BAL state root timeout: " + balStateRootTimeout.toMillis() + " ms"); + if (isLimitTrieLogsEnabled) { final StringBuilder trieLogPruningString = new StringBuilder(); trieLogPruningString diff --git a/app/src/main/java/org/hyperledger/besu/cli/options/ApiConfigurationOptions.java b/app/src/main/java/org/hyperledger/besu/cli/options/ApiConfigurationOptions.java index 05ad064b024..c0733dec4a8 100644 --- a/app/src/main/java/org/hyperledger/besu/cli/options/ApiConfigurationOptions.java +++ b/app/src/main/java/org/hyperledger/besu/cli/options/ApiConfigurationOptions.java @@ -60,13 +60,6 @@ public ApiConfigurationOptions() {} "Set to enable gas price and minimum priority fee limit in eth_getGasPrice and eth_feeHistory (default: ${DEFAULT-VALUE})") private final Boolean apiGasAndPriorityFeeLimitingEnabled = false; - @CommandLine.Option( - names = {"--Xapi-block-access-list-enabled"}, - hidden = true, - description = - "Set to enable eth_getBlockAccessListByNumber method and Block Access Lists in simulation results") - private final Boolean apiBlockAccessListEnabled = false; - @CommandLine.Option( names = {"--api-gas-and-priority-fee-lower-bound-coefficient"}, hidden = true, @@ -144,8 +137,7 @@ public ApiConfiguration apiConfiguration() { .maxLogsRange(rpcMaxLogsRange) .gasCap(rpcGasCap) .isGasAndPriorityFeeLimitingEnabled(apiGasAndPriorityFeeLimitingEnabled) - .maxTraceFilterRange(maxTraceFilterRange) - .isBlockAccessListEnabled(apiBlockAccessListEnabled); + .maxTraceFilterRange(maxTraceFilterRange); if (apiGasAndPriorityFeeLimitingEnabled) { builder .lowerBoundGasAndPriorityFeeCoefficient(apiGasAndPriorityFeeLowerBoundCoefficient) diff --git a/app/src/main/java/org/hyperledger/besu/cli/options/BalConfigurationOptions.java b/app/src/main/java/org/hyperledger/besu/cli/options/BalConfigurationOptions.java new file mode 100644 index 00000000000..22b94c8347e --- /dev/null +++ b/app/src/main/java/org/hyperledger/besu/cli/options/BalConfigurationOptions.java @@ -0,0 +1,69 @@ +/* + * Copyright contributors to Hyperledger Besu. + * + * 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.cli.options; + +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; +import org.hyperledger.besu.ethereum.mainnet.ImmutableBalConfiguration; + +import java.time.Duration; + +import picocli.CommandLine; + +/** Command-line options for configuring Block Access List behaviour. */ +public class BalConfigurationOptions { + /** Default constructor. */ + public BalConfigurationOptions() {} + + @CommandLine.Option( + names = {"--Xbal-optimization-enabled"}, + hidden = true, + description = "Allows disabling BAL-based optimizations.") + boolean balOptimizationEnabled = true; + + @CommandLine.Option( + names = {"--Xbal-lenient-on-mismatch"}, + hidden = true, + description = + "Log an error instead of throwing when the BAL-computed state root does not match the synchronously computed root.") + boolean balLenientOnMismatch = true; + + @CommandLine.Option( + names = {"--Xbal-api-enabled"}, + hidden = true, + description = + "Set to enable eth_getBlockAccessListByNumber method and Block Access Lists in simulation results") + private final Boolean balApiEnabled = false; + + @CommandLine.Option( + names = {"--Xbal-state-root-timeout"}, + hidden = true, + paramLabel = "", + description = "Timeout in milliseconds when waiting for the BAL-computed state root.") + private long balStateRootTimeoutMs = Duration.ofSeconds(1).toMillis(); + + /** + * Builds the immutable {@link BalConfiguration} corresponding to the parsed CLI options. + * + * @return an immutable BAL configuration reflecting the current option values + */ + public BalConfiguration toDomainObject() { + return ImmutableBalConfiguration.builder() + .isBalApiEnabled(balApiEnabled) + .isBalOptimisationEnabled(balOptimizationEnabled) + .isBalLenientOnMismatch(balLenientOnMismatch) + .balStateRootTimeout(Duration.ofMillis(balStateRootTimeoutMs)) + .build(); + } +} diff --git a/app/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java b/app/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java index 21d70c50959..60dd81e9a07 100644 --- a/app/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java +++ b/app/src/main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java @@ -78,6 +78,7 @@ import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolFactory; import org.hyperledger.besu.ethereum.forkid.ForkIdManager; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec; import org.hyperledger.besu.ethereum.p2p.config.NetworkingConfiguration; @@ -214,8 +215,8 @@ public abstract class BesuControllerBuilder implements MiningParameterOverrides /** whether parallel transaction processing is enabled or not */ protected boolean isParallelTxProcessingEnabled; - /** whether block access list functionality was enabled via CLI feature flag */ - protected boolean isBlockAccessListEnabled; + /** Configuration flags related to block access lists. */ + protected BalConfiguration balConfiguration = BalConfiguration.DEFAULT; /** The API configuration */ protected ApiConfiguration apiConfiguration; @@ -566,15 +567,13 @@ public BesuControllerBuilder isParallelTxProcessingEnabled( } /** - * Sets whether functionality related to testing block-level access list implementation should be - * enabled. This includes caching of block-level access lists produced during block processing and - * enabling an RPC endpoint serving those cached BALs. + * Sets configuration for functionality related to block-level access lists. * - * @param isBlockAccessListEnabled true to enable block-level access list testing functionality + * @param balConfiguration configuration related to block access lists * @return the besu controller */ - public BesuControllerBuilder isBlockAccessListEnabled(final boolean isBlockAccessListEnabled) { - this.isBlockAccessListEnabled = isBlockAccessListEnabled; + public BesuControllerBuilder balConfiguration(final BalConfiguration balConfiguration) { + this.balConfiguration = balConfiguration; return this; } diff --git a/app/src/main/java/org/hyperledger/besu/controller/CliqueBesuControllerBuilder.java b/app/src/main/java/org/hyperledger/besu/controller/CliqueBesuControllerBuilder.java index 9cb5403d51d..7ccad83b2ba 100644 --- a/app/src/main/java/org/hyperledger/besu/controller/CliqueBesuControllerBuilder.java +++ b/app/src/main/java/org/hyperledger/besu/controller/CliqueBesuControllerBuilder.java @@ -136,7 +136,7 @@ protected ProtocolSchedule createProtocolSchedule() { miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } diff --git a/app/src/main/java/org/hyperledger/besu/controller/ConsensusScheduleBesuControllerBuilder.java b/app/src/main/java/org/hyperledger/besu/controller/ConsensusScheduleBesuControllerBuilder.java index 19f20734aa6..9041b666c8e 100644 --- a/app/src/main/java/org/hyperledger/besu/controller/ConsensusScheduleBesuControllerBuilder.java +++ b/app/src/main/java/org/hyperledger/besu/controller/ConsensusScheduleBesuControllerBuilder.java @@ -46,6 +46,7 @@ import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration; import org.hyperledger.besu.ethereum.forkid.ForkIdManager; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.p2p.config.SubProtocolConfiguration; import org.hyperledger.besu.ethereum.storage.StorageProvider; @@ -379,11 +380,9 @@ public BesuControllerBuilder isParallelTxProcessingEnabled( } @Override - public BesuControllerBuilder isBlockAccessListEnabled(final boolean isBlockAccessListEnabled) { - besuControllerBuilderSchedule - .values() - .forEach(b -> b.isBlockAccessListEnabled(isBlockAccessListEnabled)); - return super.isBlockAccessListEnabled(isBlockAccessListEnabled); + public BesuControllerBuilder balConfiguration(final BalConfiguration balConfiguration) { + besuControllerBuilderSchedule.values().forEach(b -> b.balConfiguration(balConfiguration)); + return super.balConfiguration(balConfiguration); } @Override diff --git a/app/src/main/java/org/hyperledger/besu/controller/IbftBesuControllerBuilder.java b/app/src/main/java/org/hyperledger/besu/controller/IbftBesuControllerBuilder.java index 01749e9dcaa..05d976e25f8 100644 --- a/app/src/main/java/org/hyperledger/besu/controller/IbftBesuControllerBuilder.java +++ b/app/src/main/java/org/hyperledger/besu/controller/IbftBesuControllerBuilder.java @@ -306,7 +306,7 @@ protected ProtocolSchedule createProtocolSchedule() { miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } diff --git a/app/src/main/java/org/hyperledger/besu/controller/MainnetBesuControllerBuilder.java b/app/src/main/java/org/hyperledger/besu/controller/MainnetBesuControllerBuilder.java index 2e26ade287f..26174aec285 100644 --- a/app/src/main/java/org/hyperledger/besu/controller/MainnetBesuControllerBuilder.java +++ b/app/src/main/java/org/hyperledger/besu/controller/MainnetBesuControllerBuilder.java @@ -101,7 +101,7 @@ protected ProtocolSchedule createProtocolSchedule() { super.miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } diff --git a/app/src/main/java/org/hyperledger/besu/controller/MergeBesuControllerBuilder.java b/app/src/main/java/org/hyperledger/besu/controller/MergeBesuControllerBuilder.java index 89fb3a63293..cb06e8ac379 100644 --- a/app/src/main/java/org/hyperledger/besu/controller/MergeBesuControllerBuilder.java +++ b/app/src/main/java/org/hyperledger/besu/controller/MergeBesuControllerBuilder.java @@ -181,7 +181,7 @@ protected ProtocolSchedule createProtocolSchedule() { miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem, evmConfiguration); } diff --git a/app/src/main/java/org/hyperledger/besu/controller/QbftBesuControllerBuilder.java b/app/src/main/java/org/hyperledger/besu/controller/QbftBesuControllerBuilder.java index 711dda78c76..f32b25e3d92 100644 --- a/app/src/main/java/org/hyperledger/besu/controller/QbftBesuControllerBuilder.java +++ b/app/src/main/java/org/hyperledger/besu/controller/QbftBesuControllerBuilder.java @@ -368,7 +368,7 @@ protected ProtocolSchedule createProtocolSchedule() { miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } diff --git a/app/src/main/java/org/hyperledger/besu/controller/TransitionBesuControllerBuilder.java b/app/src/main/java/org/hyperledger/besu/controller/TransitionBesuControllerBuilder.java index 8f7713b9752..3702bcd621e 100644 --- a/app/src/main/java/org/hyperledger/besu/controller/TransitionBesuControllerBuilder.java +++ b/app/src/main/java/org/hyperledger/besu/controller/TransitionBesuControllerBuilder.java @@ -47,6 +47,7 @@ import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration; import org.hyperledger.besu.ethereum.forkid.ForkIdManager; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.storage.StorageProvider; import org.hyperledger.besu.ethereum.worldstate.DataStorageConfiguration; @@ -386,9 +387,9 @@ public BesuControllerBuilder isParallelTxProcessingEnabled( } @Override - public BesuControllerBuilder isBlockAccessListEnabled(final boolean isBlockAccessListEnabled) { - super.isBlockAccessListEnabled(isBlockAccessListEnabled); - return propagateConfig(z -> z.isBlockAccessListEnabled(isBlockAccessListEnabled)); + public BesuControllerBuilder balConfiguration(final BalConfiguration balConfiguration) { + super.balConfiguration(balConfiguration); + return propagateConfig(z -> z.balConfiguration(balConfiguration)); } @Override diff --git a/app/src/test/java/org/hyperledger/besu/ForkIdsNetworkConfigTest.java b/app/src/test/java/org/hyperledger/besu/ForkIdsNetworkConfigTest.java index 873a468fb2b..a83027b4dcf 100644 --- a/app/src/test/java/org/hyperledger/besu/ForkIdsNetworkConfigTest.java +++ b/app/src/test/java/org/hyperledger/besu/ForkIdsNetworkConfigTest.java @@ -34,6 +34,7 @@ import org.hyperledger.besu.ethereum.core.MiningConfiguration; import org.hyperledger.besu.ethereum.forkid.ForkId; import org.hyperledger.besu.ethereum.forkid.ForkIdManager; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.DefaultProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; import org.hyperledger.besu.ethereum.trie.pathbased.bonsai.cache.CodeCache; @@ -199,7 +200,7 @@ private static MilestoneStreamingTransitionProtocolSchedule createSchedule( MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem())); MilestoneStreamingProtocolSchedule postMergeProtocolSchedule = new MilestoneStreamingProtocolSchedule( @@ -210,7 +211,7 @@ private static MilestoneStreamingTransitionProtocolSchedule createSchedule( MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem(), EvmConfiguration.DEFAULT)); final MilestoneStreamingTransitionProtocolSchedule schedule = diff --git a/app/src/test/java/org/hyperledger/besu/cli/CommandTestAbstract.java b/app/src/test/java/org/hyperledger/besu/cli/CommandTestAbstract.java index ad84eb577cb..26c9e4a4e40 100644 --- a/app/src/test/java/org/hyperledger/besu/cli/CommandTestAbstract.java +++ b/app/src/test/java/org/hyperledger/besu/cli/CommandTestAbstract.java @@ -310,6 +310,7 @@ public void initMocks() throws Exception { when(mockControllerBuilder.maxRemotelyInitiatedPeers(anyInt())) .thenReturn(mockControllerBuilder); when(mockControllerBuilder.besuComponent(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.balConfiguration(any())).thenReturn(mockControllerBuilder); when(mockControllerBuilder.cacheLastBlocks(any())).thenReturn(mockControllerBuilder); when(mockControllerBuilder.cacheLastBlockHeaders(any())).thenReturn(mockControllerBuilder); when(mockControllerBuilder.isCacheLastBlockHeadersPreloadEnabled(any())) @@ -358,6 +359,7 @@ public void initMocks() throws Exception { when(mockRunnerBuilder.permissioningService(any())).thenReturn(mockRunnerBuilder); when(mockRunnerBuilder.transactionValidatorService(any())).thenReturn(mockRunnerBuilder); when(mockRunnerBuilder.metricsConfiguration(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.balConfiguration(any())).thenReturn(mockRunnerBuilder); when(mockRunnerBuilder.staticNodes(any())).thenReturn(mockRunnerBuilder); when(mockRunnerBuilder.identityString(any())).thenReturn(mockRunnerBuilder); when(mockRunnerBuilder.besuPluginContext(any())).thenReturn(mockRunnerBuilder); diff --git a/app/src/test/java/org/hyperledger/besu/cli/ConfigurationOverviewBuilderTest.java b/app/src/test/java/org/hyperledger/besu/cli/ConfigurationOverviewBuilderTest.java index 81d9257e123..152f8343d63 100644 --- a/app/src/test/java/org/hyperledger/besu/cli/ConfigurationOverviewBuilderTest.java +++ b/app/src/test/java/org/hyperledger/besu/cli/ConfigurationOverviewBuilderTest.java @@ -21,9 +21,11 @@ import static org.mockito.Mockito.mock; import org.hyperledger.besu.cli.config.InternalProfileName; +import org.hyperledger.besu.ethereum.mainnet.ImmutableBalConfiguration; import org.hyperledger.besu.evm.internal.EvmConfiguration; import java.math.BigInteger; +import java.time.Duration; import java.util.ArrayList; import java.util.Collection; @@ -278,4 +280,21 @@ void setTargetGasLimitLowerThanMillion() { assertThat(targetGasLimitSelected) .contains(String.format("%s: %s", "Target Gas Limit", targetGasLimitValue)); } + + @Test + void setBalConfiguration() { + builder.setBalConfiguration( + ImmutableBalConfiguration.builder() + .isBalOptimisationEnabled(false) + .isBalLenientOnMismatch(true) + .isBalApiEnabled(true) + .balStateRootTimeout(Duration.ofMillis(2500)) + .build()); + + final String configuration = builder.build(); + assertThat(configuration).contains("BAL optimizations disabled"); + assertThat(configuration).contains("BAL mismatch leniency enabled"); + assertThat(configuration).contains("BAL API enabled"); + assertThat(configuration).contains("BAL state root timeout: 2500 ms"); + } } diff --git a/app/src/test/java/org/hyperledger/besu/cli/options/ApiConfigurationOptionsTest.java b/app/src/test/java/org/hyperledger/besu/cli/options/ApiConfigurationOptionsTest.java index 6a6837f6eb8..0233eebd699 100644 --- a/app/src/test/java/org/hyperledger/besu/cli/options/ApiConfigurationOptionsTest.java +++ b/app/src/test/java/org/hyperledger/besu/cli/options/ApiConfigurationOptionsTest.java @@ -196,18 +196,4 @@ public void estimateGasToleranceRatioOptionMustBeUsed() { assertThat(commandOutput.toString(UTF_8)).isEmpty(); assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); } - - @Test - public void blockAccessListEnabledOptionMustBeUsed() { - parseCommand("--Xapi-block-access-list-enabled"); - - verify(mockRunnerBuilder).apiConfiguration(apiConfigurationCaptor.capture()); - verify(mockRunnerBuilder).build(); - - assertThat(apiConfigurationCaptor.getValue()) - .isEqualTo(ImmutableApiConfiguration.builder().isBlockAccessListEnabled(true).build()); - - assertThat(commandOutput.toString(UTF_8)).isEmpty(); - assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); - } } diff --git a/consensus/clique/src/main/java/org/hyperledger/besu/consensus/clique/CliqueProtocolSchedule.java b/consensus/clique/src/main/java/org/hyperledger/besu/consensus/clique/CliqueProtocolSchedule.java index ab83001776f..758455d1acc 100644 --- a/consensus/clique/src/main/java/org/hyperledger/besu/consensus/clique/CliqueProtocolSchedule.java +++ b/consensus/clique/src/main/java/org/hyperledger/besu/consensus/clique/CliqueProtocolSchedule.java @@ -25,6 +25,7 @@ import org.hyperledger.besu.ethereum.chain.BadBlockManager; import org.hyperledger.besu.ethereum.core.MiningConfiguration; import org.hyperledger.besu.ethereum.core.Util; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.BlockHeaderValidator; import org.hyperledger.besu.ethereum.mainnet.MainnetBlockBodyValidator; import org.hyperledger.besu.ethereum.mainnet.MainnetBlockImporter; @@ -62,8 +63,7 @@ public class CliqueProtocolSchedule { * @param miningConfiguration the mining configuration * @param badBlockManager the cache to use to keep invalid blocks * @param isParallelTxProcessingEnabled indicates whether parallel transaction is enabled - * @param isBlockAccessListEnabled indicates whether block-level access list functionality is - * enabled + * @param balConfiguration configuration related to block-level access lists * @param metricsSystem A metricSystem instance to be able to expose metrics in the underlying * calls * @return the protocol schedule @@ -77,7 +77,7 @@ public static ProtocolSchedule create( final MiningConfiguration miningConfiguration, final BadBlockManager badBlockManager, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { final CliqueConfigOptions cliqueConfig = config.getCliqueConfigOptions(); @@ -115,7 +115,7 @@ public static ProtocolSchedule create( miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .createProtocolSchedule(); } diff --git a/consensus/clique/src/test/java/org/hyperledger/besu/consensus/clique/CliqueProtocolScheduleTest.java b/consensus/clique/src/test/java/org/hyperledger/besu/consensus/clique/CliqueProtocolScheduleTest.java index 3ed4c67287d..52724ffcee7 100644 --- a/consensus/clique/src/test/java/org/hyperledger/besu/consensus/clique/CliqueProtocolScheduleTest.java +++ b/consensus/clique/src/test/java/org/hyperledger/besu/consensus/clique/CliqueProtocolScheduleTest.java @@ -34,6 +34,7 @@ import org.hyperledger.besu.ethereum.core.BlockHeader; import org.hyperledger.besu.ethereum.core.BlockHeaderTestFixture; import org.hyperledger.besu.ethereum.core.MiningConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.HeaderValidationMode; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec; @@ -72,7 +73,7 @@ public void protocolSpecsAreCreatedAtBlockDefinedInJson() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); final ProtocolSpec homesteadSpec = protocolSchedule.getByBlockHeader(blockHeader(1)); @@ -99,7 +100,7 @@ public void parametersAlignWithMainnetWithAdjustments() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()) .getByBlockHeader(blockHeader(0)); @@ -126,7 +127,7 @@ public void zeroEpochLengthThrowsException() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem())) .isInstanceOf(IllegalArgumentException.class) .hasMessage("Epoch length in config must be greater than zero"); @@ -149,7 +150,7 @@ public void negativeEpochLengthThrowsException() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem())) .isInstanceOf(IllegalArgumentException.class) .hasMessage("Epoch length in config must be greater than zero"); @@ -176,7 +177,7 @@ public void shouldValidateBaseFeeMarketTransition() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); BlockHeader emptyFrontierParent = diff --git a/consensus/clique/src/test/java/org/hyperledger/besu/consensus/clique/blockcreation/CliqueBlockCreatorTest.java b/consensus/clique/src/test/java/org/hyperledger/besu/consensus/clique/blockcreation/CliqueBlockCreatorTest.java index a78814b5df0..e9f0884b82f 100644 --- a/consensus/clique/src/test/java/org/hyperledger/besu/consensus/clique/blockcreation/CliqueBlockCreatorTest.java +++ b/consensus/clique/src/test/java/org/hyperledger/besu/consensus/clique/blockcreation/CliqueBlockCreatorTest.java @@ -62,6 +62,7 @@ import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolMetrics; import org.hyperledger.besu.ethereum.eth.transactions.sorter.GasPricePendingTransactionsSorter; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.trie.pathbased.bonsai.cache.CodeCache; import org.hyperledger.besu.ethereum.worldstate.WorldStateArchive; @@ -118,7 +119,7 @@ void setup() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); final CliqueContext cliqueContext = new CliqueContext(validatorProvider, null, blockInterface); diff --git a/consensus/clique/src/test/java/org/hyperledger/besu/consensus/clique/blockcreation/CliqueMinerExecutorTest.java b/consensus/clique/src/test/java/org/hyperledger/besu/consensus/clique/blockcreation/CliqueMinerExecutorTest.java index 79ced7db58d..953421b3653 100644 --- a/consensus/clique/src/test/java/org/hyperledger/besu/consensus/clique/blockcreation/CliqueMinerExecutorTest.java +++ b/consensus/clique/src/test/java/org/hyperledger/besu/consensus/clique/blockcreation/CliqueMinerExecutorTest.java @@ -56,6 +56,7 @@ import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolMetrics; import org.hyperledger.besu.ethereum.eth.transactions.sorter.GasPricePendingTransactionsSorter; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.evm.internal.EvmConfiguration; import org.hyperledger.besu.metrics.noop.NoOpMetricsSystem; @@ -125,7 +126,7 @@ public void setup() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); cliqueEthContext = mock(EthContext.class, RETURNS_DEEP_STUBS); blockHeaderBuilder = new BlockHeaderTestFixture(); diff --git a/consensus/common/src/main/java/org/hyperledger/besu/consensus/common/bft/BaseBftProtocolScheduleBuilder.java b/consensus/common/src/main/java/org/hyperledger/besu/consensus/common/bft/BaseBftProtocolScheduleBuilder.java index ec10fdec51e..c0a407a29c0 100644 --- a/consensus/common/src/main/java/org/hyperledger/besu/consensus/common/bft/BaseBftProtocolScheduleBuilder.java +++ b/consensus/common/src/main/java/org/hyperledger/besu/consensus/common/bft/BaseBftProtocolScheduleBuilder.java @@ -21,6 +21,7 @@ import org.hyperledger.besu.ethereum.MainnetBlockValidatorBuilder; import org.hyperledger.besu.ethereum.chain.BadBlockManager; import org.hyperledger.besu.ethereum.core.MiningConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.BlockHeaderValidator; import org.hyperledger.besu.ethereum.mainnet.DefaultProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.MainnetBlockBodyValidator; @@ -59,7 +60,7 @@ protected BaseBftProtocolScheduleBuilder() {} * @param miningConfiguration the mining parameters * @param badBlockManager the cache to use to keep invalid blocks * @param isParallelTxProcessingEnabled indicates whether parallel transaction is enabled. - * @param isBlockAccessListEnabled indicates whether block access list functionality is enabled. + * @param balConfiguration configuration related to block access lists. * @param metricsSystem metricsSystem A metricSystem instance to be able to expose metrics in the * underlying calls * @return the protocol schedule @@ -73,7 +74,7 @@ public BftProtocolSchedule createProtocolSchedule( final MiningConfiguration miningConfiguration, final BadBlockManager badBlockManager, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { final Map> specMap = new HashMap<>(); @@ -97,7 +98,7 @@ public BftProtocolSchedule createProtocolSchedule( miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .createProtocolSchedule(); return new BftProtocolSchedule((DefaultProtocolSchedule) protocolSchedule); diff --git a/consensus/common/src/test/java/org/hyperledger/besu/consensus/common/CombinedProtocolScheduleFactoryTest.java b/consensus/common/src/test/java/org/hyperledger/besu/consensus/common/CombinedProtocolScheduleFactoryTest.java index 11cf66cd069..7ae64f6d89b 100644 --- a/consensus/common/src/test/java/org/hyperledger/besu/consensus/common/CombinedProtocolScheduleFactoryTest.java +++ b/consensus/common/src/test/java/org/hyperledger/besu/consensus/common/CombinedProtocolScheduleFactoryTest.java @@ -29,6 +29,7 @@ import org.hyperledger.besu.ethereum.chain.BadBlockManager; import org.hyperledger.besu.ethereum.core.MilestoneStreamingProtocolSchedule; import org.hyperledger.besu.ethereum.core.MiningConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.DefaultProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolScheduleBuilder; @@ -186,7 +187,7 @@ private BftProtocolSchedule createProtocolSchedule( MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); return new BftProtocolSchedule( diff --git a/consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/BaseBftProtocolScheduleBuilderTest.java b/consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/BaseBftProtocolScheduleBuilderTest.java index 32ecc22ac3b..e35f19c4100 100644 --- a/consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/BaseBftProtocolScheduleBuilderTest.java +++ b/consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/BaseBftProtocolScheduleBuilderTest.java @@ -32,6 +32,7 @@ import org.hyperledger.besu.ethereum.core.BlockHeaderTestFixture; import org.hyperledger.besu.ethereum.core.MilestoneStreamingProtocolSchedule; import org.hyperledger.besu.ethereum.core.MiningConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.BlockHeaderValidator; import org.hyperledger.besu.ethereum.mainnet.DefaultProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; @@ -246,7 +247,7 @@ protected BlockHeaderValidator.Builder createBlockHeaderRuleset( MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); } diff --git a/consensus/ibft/src/integration-test/java/org/hyperledger/besu/consensus/ibft/support/TestContextBuilder.java b/consensus/ibft/src/integration-test/java/org/hyperledger/besu/consensus/ibft/support/TestContextBuilder.java index 99e0e9a6ee6..d751839e07b 100644 --- a/consensus/ibft/src/integration-test/java/org/hyperledger/besu/consensus/ibft/support/TestContextBuilder.java +++ b/consensus/ibft/src/integration-test/java/org/hyperledger/besu/consensus/ibft/support/TestContextBuilder.java @@ -93,6 +93,7 @@ import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolMetrics; import org.hyperledger.besu.ethereum.eth.transactions.sorter.GasPricePendingTransactionsSorter; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.p2p.rlpx.wire.Message; import org.hyperledger.besu.ethereum.worldstate.WorldStateArchive; import org.hyperledger.besu.evm.internal.EvmConfiguration; @@ -340,7 +341,7 @@ private static ControllerAndState createControllerAndFinalState( MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); ///////////////////////////////////////////////////////////////////////////////////// diff --git a/consensus/ibft/src/main/java/org/hyperledger/besu/consensus/ibft/IbftProtocolScheduleBuilder.java b/consensus/ibft/src/main/java/org/hyperledger/besu/consensus/ibft/IbftProtocolScheduleBuilder.java index 09b01c40f7d..29c39ac6c75 100644 --- a/consensus/ibft/src/main/java/org/hyperledger/besu/consensus/ibft/IbftProtocolScheduleBuilder.java +++ b/consensus/ibft/src/main/java/org/hyperledger/besu/consensus/ibft/IbftProtocolScheduleBuilder.java @@ -22,6 +22,7 @@ import org.hyperledger.besu.consensus.common.bft.BftProtocolSchedule; import org.hyperledger.besu.ethereum.chain.BadBlockManager; import org.hyperledger.besu.ethereum.core.MiningConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.BlockHeaderValidator; import org.hyperledger.besu.ethereum.mainnet.feemarket.BaseFeeMarket; import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket; @@ -47,8 +48,7 @@ protected IbftProtocolScheduleBuilder() {} * @param miningConfiguration the mining parameters * @param badBlockManager the cache to use to keep invalid blocks * @param isParallelTxProcessingEnabled indicates whether parallel transaction is enabled - * @param isBlockAccessListEnabled indicates whether block-level access list functionality is - * enabled + * @param balConfiguration configuration related to block-level access lists * @param metricsSystem A metricSystem instance to be able to expose metrics in the underlying * calls * @return the protocol schedule @@ -62,7 +62,7 @@ public static BftProtocolSchedule create( final MiningConfiguration miningConfiguration, final BadBlockManager badBlockManager, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return new IbftProtocolScheduleBuilder() .createProtocolSchedule( @@ -74,7 +74,7 @@ public static BftProtocolSchedule create( miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -88,8 +88,7 @@ public static BftProtocolSchedule create( * @param miningConfiguration the mining parameters * @param badBlockManager the cache to use to keep invalid blocks * @param isParallelTxProcessingEnabled indicates whether parallel transaction is enabled. - * @param isBlockAccessListEnabled indicates whether block-level access list functionality is - * enabled + * @param balConfiguration configuration related to block-level access lists * @param metricsSystem A metricSystem instance to be able to expose metrics in the underlying * calls * @return the protocol schedule @@ -102,7 +101,7 @@ public static BftProtocolSchedule create( final MiningConfiguration miningConfiguration, final BadBlockManager badBlockManager, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return create( config, @@ -113,7 +112,7 @@ public static BftProtocolSchedule create( miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } diff --git a/consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/IbftProtocolScheduleTest.java b/consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/IbftProtocolScheduleTest.java index 62df71fd902..63b90c55ab8 100644 --- a/consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/IbftProtocolScheduleTest.java +++ b/consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/IbftProtocolScheduleTest.java @@ -42,6 +42,7 @@ import org.hyperledger.besu.ethereum.core.MiningConfiguration; import org.hyperledger.besu.ethereum.core.Util; import org.hyperledger.besu.ethereum.core.components.EthereumCoreComponent; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.HeaderValidationMode; import org.hyperledger.besu.evm.internal.EvmConfiguration; import org.hyperledger.besu.metrics.noop.NoOpMetricsSystem; @@ -128,7 +129,7 @@ private BftProtocolSchedule createProtocolSchedule( MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); } diff --git a/consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/blockcreation/BftBlockCreatorTest.java b/consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/blockcreation/BftBlockCreatorTest.java index b1d1382c3ab..7e905fade82 100644 --- a/consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/blockcreation/BftBlockCreatorTest.java +++ b/consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/blockcreation/BftBlockCreatorTest.java @@ -53,6 +53,7 @@ import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolMetrics; import org.hyperledger.besu.ethereum.eth.transactions.sorter.GasPricePendingTransactionsSorter; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.BlockHeaderValidator; import org.hyperledger.besu.ethereum.mainnet.HeaderValidationMode; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; @@ -122,7 +123,7 @@ public BlockHeaderValidator.Builder createBlockHeaderRuleset( MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); final ProtocolContext protContext = new ProtocolContext.Builder() diff --git a/consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/statemachine/IbftBlockHeightManagerTest.java b/consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/statemachine/IbftBlockHeightManagerTest.java index 283fece79e1..d3c5a380404 100644 --- a/consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/statemachine/IbftBlockHeightManagerTest.java +++ b/consensus/ibft/src/test/java/org/hyperledger/besu/consensus/ibft/statemachine/IbftBlockHeightManagerTest.java @@ -72,6 +72,7 @@ import org.hyperledger.besu.ethereum.core.BlockHeaderTestFixture; import org.hyperledger.besu.ethereum.core.MiningConfiguration; import org.hyperledger.besu.ethereum.core.Util; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.DefaultProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolScheduleBuilder; @@ -188,7 +189,7 @@ public void setup() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); ProtocolSchedule protocolSchedule = diff --git a/consensus/ibftlegacy/src/main/java/org/hyperledger/besu/consensus/ibftlegacy/IbftProtocolSchedule.java b/consensus/ibftlegacy/src/main/java/org/hyperledger/besu/consensus/ibftlegacy/IbftProtocolSchedule.java index 8424a6de956..ca0e9ea2f1a 100644 --- a/consensus/ibftlegacy/src/main/java/org/hyperledger/besu/consensus/ibftlegacy/IbftProtocolSchedule.java +++ b/consensus/ibftlegacy/src/main/java/org/hyperledger/besu/consensus/ibftlegacy/IbftProtocolSchedule.java @@ -22,6 +22,7 @@ import org.hyperledger.besu.datatypes.Wei; import org.hyperledger.besu.ethereum.MainnetBlockValidatorBuilder; import org.hyperledger.besu.ethereum.chain.BadBlockManager; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetBlockBodyValidator; import org.hyperledger.besu.ethereum.mainnet.MainnetBlockImporter; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; @@ -67,7 +68,7 @@ public static ProtocolSchedule create( null, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, null) .createProtocolSchedule(); } 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 b68de73c0ef..c92e605ca1d 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 @@ -21,6 +21,7 @@ import org.hyperledger.besu.ethereum.GasLimitCalculator; import org.hyperledger.besu.ethereum.chain.BadBlockManager; import org.hyperledger.besu.ethereum.core.MiningConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.BlockHeaderValidator; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolScheduleBuilder; @@ -64,7 +65,7 @@ public static ProtocolSchedule create( final MiningConfiguration miningConfiguration, final BadBlockManager badBlockManager, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem, final EvmConfiguration evmConfiguration) { @@ -86,7 +87,7 @@ public static ProtocolSchedule create( miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .createProtocolSchedule(); } 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 8bb571f8161..5739dfa9836 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 @@ -26,6 +26,7 @@ import org.hyperledger.besu.ethereum.core.BlockHeader; import org.hyperledger.besu.ethereum.core.BlockHeaderTestFixture; import org.hyperledger.besu.ethereum.core.MiningConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetBlockProcessor; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec; @@ -58,7 +59,7 @@ public void protocolSpecsAreCreatedAtBlockDefinedInJson() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem(), EvmConfiguration.DEFAULT); @@ -81,7 +82,7 @@ public void mergeSpecificModificationsAreUnappliedForShanghai() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem(), EvmConfiguration.DEFAULT); @@ -124,7 +125,7 @@ public void mergeSpecificModificationsAreUnappliedForCancun_whenShanghaiNotConfi MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem(), EvmConfiguration.DEFAULT); @@ -159,7 +160,7 @@ public void mergeSpecificModificationsAreUnappliedForAllMainnetForksAfterParis() MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem(), EvmConfiguration.DEFAULT); @@ -195,7 +196,7 @@ public void parametersAlignWithMainnetWithAdjustments() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem(), EvmConfiguration.DEFAULT) .getByBlockHeader(blockHeader(0)); diff --git a/consensus/merge/src/test/java/org/hyperledger/besu/consensus/merge/blockcreation/MergeGenesisConfigHelper.java b/consensus/merge/src/test/java/org/hyperledger/besu/consensus/merge/blockcreation/MergeGenesisConfigHelper.java index 8bba66f6749..4662a3a8c88 100644 --- a/consensus/merge/src/test/java/org/hyperledger/besu/consensus/merge/blockcreation/MergeGenesisConfigHelper.java +++ b/consensus/merge/src/test/java/org/hyperledger/besu/consensus/merge/blockcreation/MergeGenesisConfigHelper.java @@ -20,6 +20,7 @@ import org.hyperledger.besu.datatypes.Address; import org.hyperledger.besu.ethereum.chain.BadBlockManager; import org.hyperledger.besu.ethereum.core.MiningConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.evm.internal.EvmConfiguration; import org.hyperledger.besu.metrics.noop.NoOpMetricsSystem; @@ -60,7 +61,7 @@ default ProtocolSchedule getMergeProtocolSchedule() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem(), EvmConfiguration.DEFAULT); } diff --git a/consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/support/TestContextBuilder.java b/consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/support/TestContextBuilder.java index 5355b73f469..1a96c492dd7 100644 --- a/consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/support/TestContextBuilder.java +++ b/consensus/qbft-core/src/integration-test/java/org/hyperledger/besu/consensus/qbft/core/support/TestContextBuilder.java @@ -119,6 +119,7 @@ import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolMetrics; import org.hyperledger.besu.ethereum.eth.transactions.sorter.GasPricePendingTransactionsSorter; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.transaction.TransactionSimulator; import org.hyperledger.besu.ethereum.trie.forest.ForestWorldStateArchive; import org.hyperledger.besu.ethereum.trie.pathbased.bonsai.cache.CodeCache; @@ -472,7 +473,7 @@ private static ControllerAndState createControllerAndFinalState( MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); final BftValidatorOverrides validatorOverrides = convertBftForks(qbftForks); diff --git a/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/QbftProtocolScheduleBuilder.java b/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/QbftProtocolScheduleBuilder.java index 8735866e415..e3b6605c40b 100644 --- a/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/QbftProtocolScheduleBuilder.java +++ b/consensus/qbft/src/main/java/org/hyperledger/besu/consensus/qbft/QbftProtocolScheduleBuilder.java @@ -25,6 +25,7 @@ import org.hyperledger.besu.consensus.common.bft.BftProtocolSchedule; import org.hyperledger.besu.ethereum.chain.BadBlockManager; import org.hyperledger.besu.ethereum.core.MiningConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.BlockHeaderValidator; import org.hyperledger.besu.ethereum.mainnet.feemarket.BaseFeeMarket; import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket; @@ -50,8 +51,7 @@ public class QbftProtocolScheduleBuilder extends BaseBftProtocolScheduleBuilder * @param miningConfiguration The mining parameters * @param badBlockManager the cache to use to keep invalid blocks * @param isParallelTxProcessingEnabled indicates whether parallel transaction is enabled. - * @param isBlockAccessListEnabled indicates whether block-level access list functionality is - * enabled + * @param balConfiguration configuration related to block-level access lists * @param metricsSystem A metricSystem instance to be able to expose metrics in the underlying * calls * @return the protocol schedule @@ -65,7 +65,7 @@ public static BftProtocolSchedule create( final MiningConfiguration miningConfiguration, final BadBlockManager badBlockManager, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return new QbftProtocolScheduleBuilder() .createProtocolSchedule( @@ -77,7 +77,7 @@ public static BftProtocolSchedule create( miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -91,8 +91,7 @@ public static BftProtocolSchedule create( * @param miningConfiguration The mining parameters * @param badBlockManager the cache to use to keep invalid blocks * @param isParallelTxProcessingEnabled indicates whether parallel transaction is enabled. - * @param isBlockAccessListEnabled indicates whether block-level access list functionality is - * enabled + * @param balConfiguration configuration related to block-level access lists * @param metricsSystem A metricSystem instance to be able to expose metrics in the underlying * calls * @return the protocol schedule @@ -105,7 +104,7 @@ public static BftProtocolSchedule create( final MiningConfiguration miningConfiguration, final BadBlockManager badBlockManager, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return create( config, @@ -116,7 +115,7 @@ public static BftProtocolSchedule create( miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } diff --git a/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/QbftProtocolScheduleTest.java b/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/QbftProtocolScheduleTest.java index 6763097599a..e5d31312252 100644 --- a/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/QbftProtocolScheduleTest.java +++ b/consensus/qbft/src/test/java/org/hyperledger/besu/consensus/qbft/QbftProtocolScheduleTest.java @@ -38,6 +38,7 @@ import org.hyperledger.besu.ethereum.core.MilestoneStreamingProtocolSchedule; import org.hyperledger.besu.ethereum.core.MiningConfiguration; import org.hyperledger.besu.ethereum.core.Util; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.HeaderValidationMode; import org.hyperledger.besu.evm.internal.EvmConfiguration; import org.hyperledger.besu.metrics.noop.NoOpMetricsSystem; @@ -139,7 +140,7 @@ private BftProtocolSchedule createProtocolSchedule( MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); } diff --git a/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/BlockchainImporter.java b/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/BlockchainImporter.java index e50ea69625c..e178d2d20d5 100644 --- a/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/BlockchainImporter.java +++ b/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/BlockchainImporter.java @@ -20,6 +20,7 @@ import org.hyperledger.besu.ethereum.core.Block; import org.hyperledger.besu.ethereum.core.BlockHeaderFunctions; import org.hyperledger.besu.ethereum.core.MiningConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ScheduleBasedBlockHeaderFunctions; @@ -50,7 +51,7 @@ public BlockchainImporter(final URL blocksUrl, final String genesisJson) throws MiningConfiguration.newDefault(), new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); final BlockHeaderFunctions blockHeaderFunctions = ScheduleBasedBlockHeaderFunctions.create(protocolSchedule); diff --git a/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcTestMethodsFactory.java b/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcTestMethodsFactory.java index a000525fdf4..b34b57b5d80 100644 --- a/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcTestMethodsFactory.java +++ b/ethereum/api/src/integration-test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcTestMethodsFactory.java @@ -37,6 +37,7 @@ import org.hyperledger.besu.ethereum.core.Synchronizer; import org.hyperledger.besu.ethereum.eth.manager.EthPeers; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.HeaderValidationMode; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec; @@ -228,6 +229,7 @@ public Map methods() { ethPeers, Vertx.vertx(new VertxOptions().setWorkerPoolSize(1)), ImmutableApiConfiguration.builder().build(), + BalConfiguration.DEFAULT, Optional.empty(), transactionSimulator, new DeterministicEthScheduler()); diff --git a/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/ApiConfiguration.java b/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/ApiConfiguration.java index ab47e8b1f9b..651f5a3e5fe 100644 --- a/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/ApiConfiguration.java +++ b/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/ApiConfiguration.java @@ -157,14 +157,4 @@ public Long getUpperBoundGasAndPriorityFeeCoefficient() { public Long getMaxTraceFilterRange() { return 1000L; } - - /** - * Returns whether Block Access List RPC methods are enabled. Default value is false. - * - * @return true if BAL RPC is enabled, false otherwise - */ - @Value.Default - public boolean isBlockAccessListEnabled() { - return false; - } } diff --git a/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/EthJsonRpcMethods.java b/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/EthJsonRpcMethods.java index 21afab5c979..ff36fd21679 100644 --- a/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/EthJsonRpcMethods.java +++ b/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/EthJsonRpcMethods.java @@ -71,6 +71,7 @@ import org.hyperledger.besu.ethereum.core.MiningConfiguration; import org.hyperledger.besu.ethereum.core.Synchronizer; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.p2p.rlpx.wire.Capability; import org.hyperledger.besu.ethereum.transaction.TransactionSimulator; @@ -93,6 +94,7 @@ public class EthJsonRpcMethods extends ApiGroupJsonRpcMethods { private final Set supportedCapabilities; private final ApiConfiguration apiConfiguration; + private final BalConfiguration balConfiguration; private final GenesisConfigOptions genesisConfigOptions; private final TransactionSimulator transactionSimulator; private final MetricsSystem metricsSystem; @@ -107,6 +109,7 @@ public EthJsonRpcMethods( final MiningConfiguration miningConfiguration, final Set supportedCapabilities, final ApiConfiguration apiConfiguration, + final BalConfiguration balConfiguration, final GenesisConfigOptions genesisConfigOptions, final TransactionSimulator transactionSimulator, final MetricsSystem metricsSystem) { @@ -119,6 +122,7 @@ public EthJsonRpcMethods( this.miningConfiguration = miningConfiguration; this.supportedCapabilities = supportedCapabilities; this.apiConfiguration = apiConfiguration; + this.balConfiguration = balConfiguration; this.genesisConfigOptions = genesisConfigOptions; this.transactionSimulator = transactionSimulator; this.metricsSystem = metricsSystem; @@ -184,7 +188,7 @@ protected Map create() { transactionSimulator, miningConfiguration, apiConfiguration)); - if (apiConfiguration.isBlockAccessListEnabled()) { + if (balConfiguration.isBalApiEnabled()) { final EthGetBlockAccessListByNumber method = new EthGetBlockAccessListByNumber(blockchainQueries); map.put(method.getName(), method); diff --git a/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/JsonRpcMethodsFactory.java b/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/JsonRpcMethodsFactory.java index 274e7e123e9..404d3646780 100644 --- a/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/JsonRpcMethodsFactory.java +++ b/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/JsonRpcMethodsFactory.java @@ -30,6 +30,7 @@ import org.hyperledger.besu.ethereum.eth.manager.EthPeers; import org.hyperledger.besu.ethereum.eth.manager.EthScheduler; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.p2p.network.P2PNetwork; import org.hyperledger.besu.ethereum.p2p.peers.EnodeDnsConfiguration; @@ -85,6 +86,7 @@ public Map methods( final EthPeers ethPeers, final Vertx consensusEngineServer, final ApiConfiguration apiConfiguration, + final BalConfiguration balConfiguration, final Optional enodeDnsConfiguration, final TransactionSimulator transactionSimulator, final EthScheduler ethScheduler) { @@ -135,6 +137,7 @@ public Map methods( miningConfiguration, supportedCapabilities, apiConfiguration, + balConfiguration, genesisConfigOptions, transactionSimulator, metricsSystem), diff --git a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/AbstractJsonRpcHttpServiceTest.java b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/AbstractJsonRpcHttpServiceTest.java index cd5ddadd9f3..86671e6f05b 100644 --- a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/AbstractJsonRpcHttpServiceTest.java +++ b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/AbstractJsonRpcHttpServiceTest.java @@ -44,6 +44,7 @@ import org.hyperledger.besu.ethereum.eth.manager.EthPeers; import org.hyperledger.besu.ethereum.eth.manager.EthScheduler; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ValidationResult; import org.hyperledger.besu.ethereum.p2p.network.P2PNetwork; import org.hyperledger.besu.ethereum.p2p.rlpx.wire.Capability; @@ -216,6 +217,7 @@ protected Map getRpcMethods( mock(EthPeers.class), syncVertx, ImmutableApiConfiguration.builder().build(), + BalConfiguration.DEFAULT, Optional.empty(), transactionSimulator, new EthScheduler(1, 1, 1, new NoOpMetricsSystem())); diff --git a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceHostAllowlistTest.java b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceHostAllowlistTest.java index ec8a2e47183..cd8594ba355 100644 --- a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceHostAllowlistTest.java +++ b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceHostAllowlistTest.java @@ -39,6 +39,7 @@ import org.hyperledger.besu.ethereum.eth.EthProtocol; import org.hyperledger.besu.ethereum.eth.manager.EthPeers; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; import org.hyperledger.besu.ethereum.p2p.network.P2PNetwork; import org.hyperledger.besu.ethereum.p2p.rlpx.wire.Capability; @@ -127,7 +128,7 @@ public void initServerAndClient() throws Exception { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()), mock(ProtocolContext.class), mock(FilterManager.class), @@ -149,6 +150,7 @@ public void initServerAndClient() throws Exception { mock(EthPeers.class), vertx, mock(ApiConfiguration.class), + BalConfiguration.DEFAULT, Optional.empty(), mock(TransactionSimulator.class), new DeterministicEthScheduler()); diff --git a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceLoginTest.java b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceLoginTest.java index 55175b49db4..44312279d4e 100644 --- a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceLoginTest.java +++ b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceLoginTest.java @@ -46,6 +46,7 @@ import org.hyperledger.besu.ethereum.eth.EthProtocol; import org.hyperledger.besu.ethereum.eth.manager.EthPeers; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; import org.hyperledger.besu.ethereum.p2p.network.P2PNetwork; import org.hyperledger.besu.ethereum.p2p.rlpx.wire.Capability; @@ -158,7 +159,7 @@ public static void initServerAndClient() throws Exception { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()), mock(ProtocolContext.class), mock(FilterManager.class), @@ -180,6 +181,7 @@ public static void initServerAndClient() throws Exception { mock(EthPeers.class), vertx, mock(ApiConfiguration.class), + BalConfiguration.DEFAULT, Optional.empty(), mock(TransactionSimulator.class), new DeterministicEthScheduler()); diff --git a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceRpcApisTest.java b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceRpcApisTest.java index 7d9adfcf765..188799156cf 100644 --- a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceRpcApisTest.java +++ b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceRpcApisTest.java @@ -44,6 +44,7 @@ import org.hyperledger.besu.ethereum.eth.EthProtocol; import org.hyperledger.besu.ethereum.eth.manager.EthPeers; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.p2p.config.DiscoveryConfiguration; import org.hyperledger.besu.ethereum.p2p.config.NetworkingConfiguration; import org.hyperledger.besu.ethereum.p2p.config.RlpxConfiguration; @@ -237,6 +238,7 @@ private JsonRpcHttpService createJsonRpcHttpServiceWithRpcApis(final JsonRpcConf mock(EthPeers.class), vertx, mock(ApiConfiguration.class), + BalConfiguration.DEFAULT, Optional.empty(), mock(TransactionSimulator.class), new DeterministicEthScheduler()); @@ -350,6 +352,7 @@ private JsonRpcHttpService createJsonRpcHttpService( mock(EthPeers.class), vertx, mock(ApiConfiguration.class), + BalConfiguration.DEFAULT, Optional.empty(), mock(TransactionSimulator.class), new DeterministicEthScheduler()); diff --git a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceTestBase.java b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceTestBase.java index 905bfadcfa5..a19609a8f6c 100644 --- a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceTestBase.java +++ b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceTestBase.java @@ -38,6 +38,7 @@ import org.hyperledger.besu.ethereum.eth.EthProtocol; import org.hyperledger.besu.ethereum.eth.manager.EthPeers; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; import org.hyperledger.besu.ethereum.p2p.network.P2PNetwork; import org.hyperledger.besu.ethereum.p2p.rlpx.wire.Capability; @@ -133,7 +134,7 @@ public static void initServerAndClient() throws Exception { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()), mock(ProtocolContext.class), mock(FilterManager.class), @@ -155,6 +156,7 @@ public static void initServerAndClient() throws Exception { ethPeersMock, vertx, mock(ApiConfiguration.class), + BalConfiguration.DEFAULT, Optional.empty(), mock(TransactionSimulator.class), new DeterministicEthScheduler()); diff --git a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceTlsClientAuthTest.java b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceTlsClientAuthTest.java index ee859144e92..3da5eaabdf1 100644 --- a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceTlsClientAuthTest.java +++ b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceTlsClientAuthTest.java @@ -46,6 +46,7 @@ import org.hyperledger.besu.ethereum.eth.EthProtocol; import org.hyperledger.besu.ethereum.eth.manager.EthPeers; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; import org.hyperledger.besu.ethereum.p2p.network.P2PNetwork; import org.hyperledger.besu.ethereum.p2p.rlpx.wire.Capability; @@ -143,7 +144,7 @@ public void initServer() throws Exception { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()), mock(ProtocolContext.class), mock(FilterManager.class), @@ -165,6 +166,7 @@ public void initServer() throws Exception { mock(EthPeers.class), vertx, mock(ApiConfiguration.class), + BalConfiguration.DEFAULT, Optional.empty(), mock(TransactionSimulator.class), new DeterministicEthScheduler()); diff --git a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceTlsMisconfigurationTest.java b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceTlsMisconfigurationTest.java index f1ef3761066..bfc3759bcf3 100644 --- a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceTlsMisconfigurationTest.java +++ b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceTlsMisconfigurationTest.java @@ -45,6 +45,7 @@ import org.hyperledger.besu.ethereum.eth.EthProtocol; import org.hyperledger.besu.ethereum.eth.manager.EthPeers; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; import org.hyperledger.besu.ethereum.p2p.network.P2PNetwork; import org.hyperledger.besu.ethereum.p2p.rlpx.wire.Capability; @@ -127,7 +128,7 @@ public void beforeEach() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()), mock(ProtocolContext.class), mock(FilterManager.class), @@ -149,6 +150,7 @@ public void beforeEach() { mock(EthPeers.class), vertx, mock(ApiConfiguration.class), + BalConfiguration.DEFAULT, Optional.empty(), mock(TransactionSimulator.class), new DeterministicEthScheduler()); diff --git a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceTlsTest.java b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceTlsTest.java index 0ce53d2dc3c..81899caa91a 100644 --- a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceTlsTest.java +++ b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/JsonRpcHttpServiceTlsTest.java @@ -45,6 +45,7 @@ import org.hyperledger.besu.ethereum.eth.EthProtocol; import org.hyperledger.besu.ethereum.eth.manager.EthPeers; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; import org.hyperledger.besu.ethereum.p2p.network.P2PNetwork; import org.hyperledger.besu.ethereum.p2p.rlpx.wire.Capability; @@ -130,7 +131,7 @@ public void initServer() throws Exception { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()), mock(ProtocolContext.class), mock(FilterManager.class), @@ -152,6 +153,7 @@ public void initServer() throws Exception { mock(EthPeers.class), vertx, mock(ApiConfiguration.class), + BalConfiguration.DEFAULT, Optional.empty(), mock(TransactionSimulator.class), new DeterministicEthScheduler()); diff --git a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/DebugTraceBlockTest.java b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/DebugTraceBlockTest.java index 506b85ffda3..c3d25b2f2f7 100644 --- a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/DebugTraceBlockTest.java +++ b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/DebugTraceBlockTest.java @@ -37,6 +37,7 @@ import org.hyperledger.besu.ethereum.core.BlockDataGenerator; import org.hyperledger.besu.ethereum.core.ExecutionContextTestFixture; import org.hyperledger.besu.ethereum.core.MiningConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetBlockHeaderFunctions; import org.hyperledger.besu.ethereum.mainnet.ProtocolScheduleBuilder; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpecAdapters; @@ -103,7 +104,7 @@ public void setUp() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()) .createProtocolSchedule()) .build(); diff --git a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthSimulateV1TrielogTest.java b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthSimulateV1TrielogTest.java index 3824f6e050f..ddda0cc705e 100644 --- a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthSimulateV1TrielogTest.java +++ b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthSimulateV1TrielogTest.java @@ -34,6 +34,7 @@ import org.hyperledger.besu.ethereum.chain.GenesisState; import org.hyperledger.besu.ethereum.chain.MutableBlockchain; import org.hyperledger.besu.ethereum.core.MiningConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.transaction.CallParameter; @@ -61,7 +62,7 @@ public class EthSimulateV1TrielogTest { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); protected final GenesisState genesisState = diff --git a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/JsonRpcMethodsFactoryTest.java b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/JsonRpcMethodsFactoryTest.java index f777978e465..75d21569991 100644 --- a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/JsonRpcMethodsFactoryTest.java +++ b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/methods/JsonRpcMethodsFactoryTest.java @@ -39,6 +39,7 @@ import org.hyperledger.besu.ethereum.core.Synchronizer; import org.hyperledger.besu.ethereum.eth.manager.EthPeers; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.p2p.network.P2PNetwork; @@ -105,7 +106,7 @@ public void setup() { MiningConfiguration.newDefault(), new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); when(mergeCoordinator.isCompatibleWithEngineApi()).thenReturn(true); @@ -145,6 +146,7 @@ public void shouldActivateEngineApisIfMilestonesAreAllZero() { mock(EthPeers.class), vertx, mock(ApiConfiguration.class), + BalConfiguration.DEFAULT, Optional.empty(), mock(TransactionSimulator.class), new DeterministicEthScheduler()); diff --git a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/websocket/WebSocketServiceLoginTest.java b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/websocket/WebSocketServiceLoginTest.java index 202e7daf704..3695fab8022 100644 --- a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/websocket/WebSocketServiceLoginTest.java +++ b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/websocket/WebSocketServiceLoginTest.java @@ -54,6 +54,7 @@ import org.hyperledger.besu.ethereum.eth.manager.EthPeers; import org.hyperledger.besu.ethereum.eth.manager.EthScheduler; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; import org.hyperledger.besu.ethereum.p2p.network.P2PNetwork; import org.hyperledger.besu.ethereum.p2p.rlpx.wire.Capability; @@ -194,7 +195,7 @@ public void before() throws URISyntaxException { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()), mock(ProtocolContext.class), mock(FilterManager.class), @@ -216,6 +217,7 @@ public void before() throws URISyntaxException { mock(EthPeers.class), vertx, mock(ApiConfiguration.class), + BalConfiguration.DEFAULT, Optional.empty(), mock(TransactionSimulator.class), new DeterministicEthScheduler())); diff --git a/ethereum/blockcreation/src/test/java/org/hyperledger/besu/ethereum/blockcreation/AbstractBlockCreatorTest.java b/ethereum/blockcreation/src/test/java/org/hyperledger/besu/ethereum/blockcreation/AbstractBlockCreatorTest.java index beafd029679..1e2d458c6d4 100644 --- a/ethereum/blockcreation/src/test/java/org/hyperledger/besu/ethereum/blockcreation/AbstractBlockCreatorTest.java +++ b/ethereum/blockcreation/src/test/java/org/hyperledger/besu/ethereum/blockcreation/AbstractBlockCreatorTest.java @@ -67,6 +67,7 @@ import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter; import org.hyperledger.besu.ethereum.eth.transactions.sorter.GasPricePendingTransactionsSorter; import org.hyperledger.besu.ethereum.mainnet.BodyValidation; +import org.hyperledger.besu.ethereum.mainnet.ImmutableBalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolScheduleBuilder; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpecAdapters; @@ -424,7 +425,7 @@ private CreateOn createBlockCreator(final ProtocolSpecAdapters protocolSpecAdapt MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - true, + ImmutableBalConfiguration.builder().isBalApiEnabled(true).build(), new NoOpMetricsSystem()) .createProtocolSchedule()) .dataStorageFormat(DataStorageFormat.BONSAI) diff --git a/ethereum/blockcreation/src/test/java/org/hyperledger/besu/ethereum/blockcreation/AbstractBlockTransactionSelectorTest.java b/ethereum/blockcreation/src/test/java/org/hyperledger/besu/ethereum/blockcreation/AbstractBlockTransactionSelectorTest.java index c434876c41b..d12b807bb06 100644 --- a/ethereum/blockcreation/src/test/java/org/hyperledger/besu/ethereum/blockcreation/AbstractBlockTransactionSelectorTest.java +++ b/ethereum/blockcreation/src/test/java/org/hyperledger/besu/ethereum/blockcreation/AbstractBlockTransactionSelectorTest.java @@ -70,6 +70,7 @@ import org.hyperledger.besu.ethereum.eth.manager.EthContext; import org.hyperledger.besu.ethereum.eth.manager.EthScheduler; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetBlockHeaderFunctions; import org.hyperledger.besu.ethereum.mainnet.MainnetTransactionProcessor; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; @@ -234,7 +235,7 @@ public void emptyPendingTransactionsResultsInEmptyVettingResult() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); final MainnetTransactionProcessor mainnetTransactionProcessor = protocolSchedule.getByBlockHeader(blockHeader(0)).getTransactionProcessor(); diff --git a/ethereum/blockcreation/src/test/java/org/hyperledger/besu/ethereum/blockcreation/LegacyFeeMarketBlockTransactionSelectorTest.java b/ethereum/blockcreation/src/test/java/org/hyperledger/besu/ethereum/blockcreation/LegacyFeeMarketBlockTransactionSelectorTest.java index 9b7cff6108c..5804de313e7 100644 --- a/ethereum/blockcreation/src/test/java/org/hyperledger/besu/ethereum/blockcreation/LegacyFeeMarketBlockTransactionSelectorTest.java +++ b/ethereum/blockcreation/src/test/java/org/hyperledger/besu/ethereum/blockcreation/LegacyFeeMarketBlockTransactionSelectorTest.java @@ -32,6 +32,7 @@ import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolMetrics; import org.hyperledger.besu.ethereum.eth.transactions.sorter.GasPricePendingTransactionsSorter; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolScheduleBuilder; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpecAdapters; @@ -66,7 +67,7 @@ protected ProtocolSchedule createProtocolSchedule() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()) .createProtocolSchedule(); } diff --git a/ethereum/blockcreation/src/test/java/org/hyperledger/besu/ethereum/blockcreation/LondonFeeMarketBlockTransactionSelectorTest.java b/ethereum/blockcreation/src/test/java/org/hyperledger/besu/ethereum/blockcreation/LondonFeeMarketBlockTransactionSelectorTest.java index 1dcbf71298d..9e8c0402bee 100644 --- a/ethereum/blockcreation/src/test/java/org/hyperledger/besu/ethereum/blockcreation/LondonFeeMarketBlockTransactionSelectorTest.java +++ b/ethereum/blockcreation/src/test/java/org/hyperledger/besu/ethereum/blockcreation/LondonFeeMarketBlockTransactionSelectorTest.java @@ -40,6 +40,7 @@ import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolMetrics; import org.hyperledger.besu.ethereum.eth.transactions.sorter.BaseFeePendingTransactionsSorter; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolScheduleBuilder; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpecAdapters; @@ -76,7 +77,7 @@ protected ProtocolSchedule createProtocolSchedule() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()) .createProtocolSchedule(); } diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/components/ProtocolScheduleModule.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/components/ProtocolScheduleModule.java index f3053536ef2..0b92a4cf5f6 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/components/ProtocolScheduleModule.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/components/ProtocolScheduleModule.java @@ -17,6 +17,7 @@ import org.hyperledger.besu.config.GenesisConfigOptions; import org.hyperledger.besu.ethereum.chain.BadBlockManager; import org.hyperledger.besu.ethereum.core.MiningConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.DefaultProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolScheduleBuilder; @@ -47,7 +48,7 @@ public ProtocolScheduleModule() {} * @param evmConfiguration the EVM configuration * @param badBlockManager the bad block manager * @param isParallelTxProcessingEnabled whether parallel tx processing is enabled - * @param isBlockAccessListEnabled whether block level access lists are enabled + * @param balConfiguration configuration for block-level access lists * @param metricsSystem the metrics system * @param miningConfiguration the mining parameters * @return the protocol schedule builder @@ -61,7 +62,7 @@ public ProtocolScheduleBuilder provideProtocolScheduleBuilder( final EvmConfiguration evmConfiguration, final BadBlockManager badBlockManager, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem, final MiningConfiguration miningConfiguration) { @@ -75,7 +76,7 @@ public ProtocolScheduleBuilder provideProtocolScheduleBuilder( miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); return builder; diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/components/ProtocolSpecModule.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/components/ProtocolSpecModule.java index 23cf26dd0bc..0ec9c596eab 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/components/ProtocolSpecModule.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/components/ProtocolSpecModule.java @@ -15,6 +15,7 @@ package org.hyperledger.besu.ethereum.components; import org.hyperledger.besu.config.GenesisConfigOptions; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSpecs; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpecBuilder; import org.hyperledger.besu.evm.internal.EvmConfiguration; @@ -39,7 +40,7 @@ public ProtocolSpecModule() {} * @param evmConfiguration the EVM configuration * @param isParallelTxEnabled whether parallel tx processing is enabled * @param metricsSystem the metrics system - * @param isBlockAccessListEnabled whether block-level access lists are enabled + * @param balConfiguration configuration for block-level access lists * @return the protocol spec for the frontier network fork */ @Provides @@ -48,13 +49,13 @@ public ProtocolSpecBuilder frontierProtocolSpec( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return MainnetProtocolSpecs.frontierDefinition( genesisConfigOptions, evmConfiguration, isParallelTxEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } } diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/difficulty/fixed/FixedDifficultyProtocolSchedule.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/difficulty/fixed/FixedDifficultyProtocolSchedule.java index d4a4b2f6a33..f68cb1b413d 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/difficulty/fixed/FixedDifficultyProtocolSchedule.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/difficulty/fixed/FixedDifficultyProtocolSchedule.java @@ -17,6 +17,7 @@ import org.hyperledger.besu.config.GenesisConfigOptions; import org.hyperledger.besu.ethereum.chain.BadBlockManager; import org.hyperledger.besu.ethereum.core.MiningConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolScheduleBuilder; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpecAdapters; @@ -38,7 +39,7 @@ public static ProtocolSchedule create( final MiningConfiguration miningConfiguration, final BadBlockManager badBlockManager, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return new ProtocolScheduleBuilder( config, @@ -52,7 +53,7 @@ public static ProtocolSchedule create( miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .createProtocolSchedule(); } @@ -63,7 +64,7 @@ public static ProtocolSchedule create( final MiningConfiguration miningConfiguration, final BadBlockManager badBlockManager, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return create( config, @@ -72,7 +73,7 @@ public static ProtocolSchedule create( miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } } diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/BalConfiguration.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/BalConfiguration.java new file mode 100644 index 00000000000..f312eadb3c0 --- /dev/null +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/BalConfiguration.java @@ -0,0 +1,53 @@ +/* + * Copyright contributors to Hyperledger Besu. + * + * 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.ethereum.mainnet; + +import java.time.Duration; + +import org.immutables.value.Value; + +/** Configuration options for Block Access List (BAL) processing. */ +@Value.Immutable +public interface BalConfiguration { + + BalConfiguration DEFAULT = ImmutableBalConfiguration.builder().build(); + + /** Returns whether block access list support is enabled. */ + @Value.Default + default boolean isBalApiEnabled() { + return false; + } + + /** Returns whether BAL-based optimisations should be disabled entirely. */ + @Value.Default + default boolean isBalOptimisationEnabled() { + return true; + } + + /** + * Returns whether mismatches between BAL and synchronously computed state roots should only log + * an error instead of throwing an exception. + */ + @Value.Default + default boolean isBalLenientOnMismatch() { + return true; + } + + /** Returns the timeout to use when waiting for the BAL-computed state root. */ + @Value.Default + default Duration getBalStateRootTimeout() { + return Duration.ofSeconds(1); + } +} diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/ClassicProtocolSpecs.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/ClassicProtocolSpecs.java index 60d9d9f37e1..66b4b944b1a 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/ClassicProtocolSpecs.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/ClassicProtocolSpecs.java @@ -67,13 +67,13 @@ public static ProtocolSpecBuilder classicRecoveryInitDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return MainnetProtocolSpecs.homesteadDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .blockHeaderValidatorBuilder( (feeMarket, gasCalculator, gasLimitCalculator) -> @@ -86,13 +86,13 @@ public static ProtocolSpecBuilder tangerineWhistleDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return MainnetProtocolSpecs.homesteadDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .isReplayProtectionSupported(true) .gasCalculator(TangerineWhistleGasCalculator::new) @@ -108,14 +108,14 @@ public static ProtocolSpecBuilder dieHardDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return tangerineWhistleDefinition( chainId, genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .gasCalculator(DieHardGasCalculator::new) .difficultyCalculator(ClassicDifficultyCalculators.DIFFICULTY_BOMB_PAUSED) @@ -127,14 +127,14 @@ public static ProtocolSpecBuilder gothamDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return dieHardDefinition( chainId, genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .blockReward(MAX_BLOCK_REWARD) .difficultyCalculator(ClassicDifficultyCalculators.DIFFICULTY_BOMB_DELAYED) @@ -161,14 +161,14 @@ public static ProtocolSpecBuilder defuseDifficultyBombDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return gothamDefinition( chainId, genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .difficultyCalculator(ClassicDifficultyCalculators.DIFFICULTY_BOMB_REMOVED) .transactionValidatorFactoryBuilder( @@ -184,14 +184,14 @@ public static ProtocolSpecBuilder atlantisDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return gothamDefinition( chainId, genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .evmBuilder(MainnetEVMs::byzantium) .evmConfiguration(evmConfiguration) @@ -232,7 +232,7 @@ public static ProtocolSpecBuilder aghartaDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return atlantisDefinition( chainId, @@ -240,7 +240,7 @@ public static ProtocolSpecBuilder aghartaDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .evmBuilder(MainnetEVMs::constantinople) .gasCalculator(PetersburgGasCalculator::new) @@ -255,7 +255,7 @@ public static ProtocolSpecBuilder phoenixDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return aghartaDefinition( chainId, @@ -263,7 +263,7 @@ public static ProtocolSpecBuilder phoenixDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .gasCalculator(IstanbulGasCalculator::new) .evmBuilder( @@ -280,7 +280,7 @@ public static ProtocolSpecBuilder thanosDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return phoenixDefinition( chainId, @@ -288,7 +288,7 @@ public static ProtocolSpecBuilder thanosDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .blockHeaderValidatorBuilder( (feeMarket, gasCalculator, gasLimitCalculator) -> @@ -307,7 +307,7 @@ public static ProtocolSpecBuilder magnetoDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return thanosDefinition( chainId, @@ -315,7 +315,7 @@ public static ProtocolSpecBuilder magnetoDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .gasCalculator(BerlinGasCalculator::new) .transactionValidatorFactoryBuilder( @@ -337,7 +337,7 @@ public static ProtocolSpecBuilder mystiqueDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return magnetoDefinition( chainId, @@ -345,7 +345,7 @@ public static ProtocolSpecBuilder mystiqueDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .gasCalculator(LondonGasCalculator::new) .contractCreationProcessorBuilder( @@ -361,7 +361,7 @@ public static ProtocolSpecBuilder spiralDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return mystiqueDefinition( chainId, @@ -369,7 +369,7 @@ public static ProtocolSpecBuilder spiralDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) // EIP-3860 .gasCalculator(ShanghaiGasCalculator::new) diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSchedule.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSchedule.java index 9a1ac097bef..7049a344f03 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSchedule.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSchedule.java @@ -41,7 +41,7 @@ public class MainnetProtocolSchedule { * @param miningConfiguration the mining parameters * @param badBlockManager the cache to use to keep invalid blocks * @param isParallelTxProcessingEnabled indicates whether parallel transaction is enabled - * @param isBlockAccessListEnabled indicates whether block access list functionality is enabled + * @param balConfiguration configuration related to block access lists * @param metricsSystem A metricSystem instance to expose metrics in the underlying calls * @return A configured mainnet protocol schedule */ @@ -52,7 +52,7 @@ public static ProtocolSchedule fromConfig( final MiningConfiguration miningConfiguration, final BadBlockManager badBlockManager, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { if (FixedDifficultyCalculators.isFixedDifficultyInConfig(config)) { return FixedDifficultyProtocolSchedule.create( @@ -62,7 +62,7 @@ public static ProtocolSchedule fromConfig( miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } return new ProtocolScheduleBuilder( @@ -74,7 +74,7 @@ public static ProtocolSchedule fromConfig( miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .createProtocolSchedule(); } @@ -98,7 +98,7 @@ public static ProtocolSchedule fromConfig( final MiningConfiguration miningConfiguration, final BadBlockManager badBlockManager, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return fromConfig( config, @@ -107,7 +107,7 @@ public static ProtocolSchedule fromConfig( miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -128,7 +128,7 @@ public static ProtocolSchedule fromConfig( final MiningConfiguration miningConfiguration, final BadBlockManager badBlockManager, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return fromConfig( config, @@ -137,7 +137,7 @@ public static ProtocolSchedule fromConfig( miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -156,7 +156,7 @@ public static ProtocolSchedule fromConfig( final MiningConfiguration miningConfiguration, final BadBlockManager badBlockManager, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return fromConfig( config, @@ -165,7 +165,7 @@ public static ProtocolSchedule fromConfig( miningConfiguration, badBlockManager, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } } diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecFactory.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecFactory.java index 4b8372fa910..a6e8b45f346 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecFactory.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecFactory.java @@ -30,7 +30,7 @@ public class MainnetProtocolSpecFactory { private final EvmConfiguration evmConfiguration; private final MiningConfiguration miningConfiguration; private final boolean isParallelTxProcessingEnabled; - private final boolean isBlockAccessListEnabled; + private final BalConfiguration balConfiguration; private final MetricsSystem metricsSystem; public MainnetProtocolSpecFactory( @@ -40,7 +40,7 @@ public MainnetProtocolSpecFactory( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { this.chainId = chainId; this.isRevertReasonEnabled = isRevertReasonEnabled; @@ -48,7 +48,7 @@ public MainnetProtocolSpecFactory( this.evmConfiguration = evmConfiguration; this.miningConfiguration = miningConfiguration; this.isParallelTxProcessingEnabled = isParallelTxProcessingEnabled; - this.isBlockAccessListEnabled = isBlockAccessListEnabled; + this.balConfiguration = balConfiguration; this.metricsSystem = metricsSystem; } @@ -57,7 +57,7 @@ public ProtocolSpecBuilder frontierDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -66,7 +66,7 @@ public ProtocolSpecBuilder homesteadDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -75,7 +75,7 @@ public ProtocolSpecBuilder daoRecoveryInitDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -84,7 +84,7 @@ public ProtocolSpecBuilder daoRecoveryTransitionDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -93,7 +93,7 @@ public ProtocolSpecBuilder tangerineWhistleDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -103,7 +103,7 @@ public ProtocolSpecBuilder spuriousDragonDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -114,7 +114,7 @@ public ProtocolSpecBuilder byzantiumDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -125,7 +125,7 @@ public ProtocolSpecBuilder constantinopleDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -136,7 +136,7 @@ public ProtocolSpecBuilder petersburgDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -147,7 +147,7 @@ public ProtocolSpecBuilder istanbulDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -158,7 +158,7 @@ public ProtocolSpecBuilder muirGlacierDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -169,7 +169,7 @@ public ProtocolSpecBuilder berlinDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -181,7 +181,7 @@ public ProtocolSpecBuilder londonDefinition() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -193,7 +193,7 @@ public ProtocolSpecBuilder arrowGlacierDefinition() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -205,7 +205,7 @@ public ProtocolSpecBuilder grayGlacierDefinition() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -217,7 +217,7 @@ public ProtocolSpecBuilder parisDefinition() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -229,7 +229,7 @@ public ProtocolSpecBuilder shanghaiDefinition() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -241,7 +241,7 @@ public ProtocolSpecBuilder cancunDefinition() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -253,7 +253,7 @@ public ProtocolSpecBuilder cancunEOFDefinition() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -265,7 +265,7 @@ public ProtocolSpecBuilder pragueDefinition() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -277,7 +277,7 @@ public ProtocolSpecBuilder osakaDefinition() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -289,7 +289,7 @@ public ProtocolSpecBuilder bpo1Definition() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -301,7 +301,7 @@ public ProtocolSpecBuilder bpo2Definition() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -313,7 +313,7 @@ public ProtocolSpecBuilder bpo3Definition() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -325,7 +325,7 @@ public ProtocolSpecBuilder bpo4Definition() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -337,7 +337,7 @@ public ProtocolSpecBuilder bpo5Definition() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -349,7 +349,7 @@ public ProtocolSpecBuilder amsterdamDefinition() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -371,7 +371,7 @@ public ProtocolSpecBuilder futureEipsDefinition() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -392,7 +392,7 @@ public ProtocolSpecBuilder experimentalEipsDefinition() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -405,7 +405,7 @@ public ProtocolSpecBuilder dieHardDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -415,7 +415,7 @@ public ProtocolSpecBuilder gothamDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -425,7 +425,7 @@ public ProtocolSpecBuilder defuseDifficultyBombDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -436,7 +436,7 @@ public ProtocolSpecBuilder atlantisDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -447,7 +447,7 @@ public ProtocolSpecBuilder aghartaDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -458,7 +458,7 @@ public ProtocolSpecBuilder phoenixDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -469,7 +469,7 @@ public ProtocolSpecBuilder thanosDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -480,7 +480,7 @@ public ProtocolSpecBuilder magnetoDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -491,7 +491,7 @@ public ProtocolSpecBuilder mystiqueDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } @@ -502,7 +502,7 @@ public ProtocolSpecBuilder spiralDefinition() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); } } 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 733a8e38c13..5dc2509fdfe 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 @@ -150,7 +150,6 @@ public abstract class MainnetProtocolSpecs { private static final Logger LOG = LoggerFactory.getLogger(MainnetProtocolSpecs.class); private static final int POW_SLOT_TIME_ESTIMATION = 13; - private static final Duration BAL_ROOT_TIMEOUT = Duration.ofSeconds(1); private MainnetProtocolSpecs() {} @@ -158,7 +157,7 @@ public static ProtocolSpecBuilder frontierDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return new ProtocolSpecBuilder() .gasCalculator(FrontierGasCalculator::new) @@ -202,7 +201,7 @@ public static ProtocolSpecBuilder frontierDefinition( .transactionReceiptFactory(new FrontierTransactionReceiptFactory()) .blockReward(FRONTIER_BLOCK_REWARD) .skipZeroBlockRewards(false) - .isBlockAccessListEnabled(isBlockAccessListEnabled) + .isBlockAccessListEnabled(balConfiguration.isBalApiEnabled()) .blockProcessorBuilder( isParallelTxProcessingEnabled ? new MainnetParallelBlockProcessor.ParallelBlockProcessorBuilder(metricsSystem) @@ -249,13 +248,13 @@ public static ProtocolSpecBuilder homesteadDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return frontierDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .gasCalculator(HomesteadGasCalculator::new) .evmBuilder(MainnetEVMs::homestead) @@ -275,13 +274,13 @@ public static ProtocolSpecBuilder daoRecoveryInitDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return homesteadDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .blockHeaderValidatorBuilder( (feeMarket, gasCalculator, gasLimitCalculator) -> @@ -317,13 +316,13 @@ public static ProtocolSpecBuilder daoRecoveryTransitionDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return daoRecoveryInitDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .blockProcessorBuilder( isParallelTxProcessingEnabled @@ -336,13 +335,13 @@ public static ProtocolSpecBuilder tangerineWhistleDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return homesteadDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .gasCalculator(TangerineWhistleGasCalculator::new) .hardforkId(TANGERINE_WHISTLE); @@ -353,13 +352,13 @@ public static ProtocolSpecBuilder spuriousDragonDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return tangerineWhistleDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .isReplayProtectionSupported(true) .gasCalculator(SpuriousDragonGasCalculator::new) @@ -408,14 +407,14 @@ public static ProtocolSpecBuilder byzantiumDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return spuriousDragonDefinition( chainId, genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .gasCalculator(ByzantiumGasCalculator::new) .evmBuilder(MainnetEVMs::byzantium) @@ -432,7 +431,7 @@ public static ProtocolSpecBuilder constantinopleDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return byzantiumDefinition( chainId, @@ -440,7 +439,7 @@ public static ProtocolSpecBuilder constantinopleDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .difficultyCalculator(MainnetDifficultyCalculators.CONSTANTINOPLE) .gasCalculator(ConstantinopleGasCalculator::new) @@ -455,7 +454,7 @@ public static ProtocolSpecBuilder petersburgDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return constantinopleDefinition( chainId, @@ -463,7 +462,7 @@ public static ProtocolSpecBuilder petersburgDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .gasCalculator(PetersburgGasCalculator::new) .hardforkId(PETERSBURG); @@ -475,7 +474,7 @@ public static ProtocolSpecBuilder istanbulDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return petersburgDefinition( chainId, @@ -483,7 +482,7 @@ public static ProtocolSpecBuilder istanbulDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .gasCalculator(IstanbulGasCalculator::new) .evmBuilder( @@ -508,7 +507,7 @@ static ProtocolSpecBuilder muirGlacierDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return istanbulDefinition( chainId, @@ -516,7 +515,7 @@ static ProtocolSpecBuilder muirGlacierDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .difficultyCalculator(MainnetDifficultyCalculators.MUIR_GLACIER) .hardforkId(MUIR_GLACIER); @@ -528,7 +527,7 @@ static ProtocolSpecBuilder berlinDefinition( final GenesisConfigOptions genesisConfigOptions, final EvmConfiguration evmConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return muirGlacierDefinition( chainId, @@ -536,7 +535,7 @@ static ProtocolSpecBuilder berlinDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .gasCalculator(BerlinGasCalculator::new) .transactionValidatorFactoryBuilder( @@ -558,7 +557,7 @@ static ProtocolSpecBuilder londonDefinition( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { final long londonForkBlockNumber = genesisConfigOptions.getLondonBlockNumber().orElse(Long.MAX_VALUE); @@ -568,7 +567,7 @@ static ProtocolSpecBuilder londonDefinition( genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .feeMarketBuilder( createFeeMarket( @@ -646,7 +645,7 @@ static ProtocolSpecBuilder arrowGlacierDefinition( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return londonDefinition( chainId, @@ -655,7 +654,7 @@ static ProtocolSpecBuilder arrowGlacierDefinition( evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .difficultyCalculator(MainnetDifficultyCalculators.ARROW_GLACIER) .hardforkId(ARROW_GLACIER); @@ -668,7 +667,7 @@ static ProtocolSpecBuilder grayGlacierDefinition( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return arrowGlacierDefinition( chainId, @@ -677,7 +676,7 @@ static ProtocolSpecBuilder grayGlacierDefinition( evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .difficultyCalculator(MainnetDifficultyCalculators.GRAY_GLACIER) .hardforkId(GRAY_GLACIER); @@ -690,7 +689,7 @@ static ProtocolSpecBuilder parisDefinition( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return grayGlacierDefinition( @@ -700,7 +699,7 @@ static ProtocolSpecBuilder parisDefinition( evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .evmBuilder( (gasCalculator, jdCacheConfig) -> @@ -721,7 +720,7 @@ static ProtocolSpecBuilder shanghaiDefinition( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return parisDefinition( chainId, @@ -730,7 +729,7 @@ static ProtocolSpecBuilder shanghaiDefinition( evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) // gas calculator has new code to support EIP-3860 limit and meter initcode .gasCalculator(ShanghaiGasCalculator::new) @@ -784,7 +783,7 @@ static ProtocolSpecBuilder cancunDefinition( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { final long londonForkBlockNumber = genesisConfigOptions.getLondonBlockNumber().orElse(0L); @@ -795,7 +794,7 @@ static ProtocolSpecBuilder cancunDefinition( evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .feeMarketBuilder( createFeeMarket( @@ -877,7 +876,7 @@ static ProtocolSpecBuilder cancunEOFDefinition( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { ProtocolSpecBuilder protocolSpecBuilder = @@ -888,7 +887,7 @@ static ProtocolSpecBuilder cancunEOFDefinition( evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); return addEOF(chainId, evmConfiguration, protocolSpecBuilder).hardforkId(CANCUN_EOF); } @@ -900,7 +899,7 @@ static ProtocolSpecBuilder pragueDefinition( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { ProtocolSpecBuilder pragueSpecBuilder = cancunDefinition( @@ -910,7 +909,7 @@ static ProtocolSpecBuilder pragueDefinition( evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .blobSchedule( genesisConfigOptions @@ -993,7 +992,7 @@ static ProtocolSpecBuilder osakaDefinition( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { final long londonForkBlockNumber = genesisConfigOptions.getLondonBlockNumber().orElse(0L); @@ -1004,7 +1003,7 @@ static ProtocolSpecBuilder osakaDefinition( evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .gasCalculator(OsakaGasCalculator::new) // tx gas limit cap EIP-7825 @@ -1048,7 +1047,7 @@ static ProtocolSpecBuilder bpo1Definition( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { ProtocolSpecBuilder builder = osakaDefinition( @@ -1058,7 +1057,7 @@ static ProtocolSpecBuilder bpo1Definition( evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); return applyBlobSchedule(builder, genesisConfigOptions, BlobScheduleOptions::getBpo1, BPO1); } @@ -1070,7 +1069,7 @@ static ProtocolSpecBuilder bpo2Definition( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { ProtocolSpecBuilder builder = bpo1Definition( @@ -1080,7 +1079,7 @@ static ProtocolSpecBuilder bpo2Definition( evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); return applyBlobSchedule(builder, genesisConfigOptions, BlobScheduleOptions::getBpo2, BPO2); } @@ -1092,7 +1091,7 @@ static ProtocolSpecBuilder bpo3Definition( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { ProtocolSpecBuilder builder = bpo2Definition( @@ -1102,7 +1101,7 @@ static ProtocolSpecBuilder bpo3Definition( evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); return applyBlobSchedule(builder, genesisConfigOptions, BlobScheduleOptions::getBpo3, BPO3); } @@ -1114,7 +1113,7 @@ static ProtocolSpecBuilder bpo4Definition( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { ProtocolSpecBuilder builder = bpo3Definition( @@ -1124,7 +1123,7 @@ static ProtocolSpecBuilder bpo4Definition( evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); return applyBlobSchedule(builder, genesisConfigOptions, BlobScheduleOptions::getBpo4, BPO4); } @@ -1136,7 +1135,7 @@ static ProtocolSpecBuilder bpo5Definition( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { ProtocolSpecBuilder builder = bpo4Definition( @@ -1146,7 +1145,7 @@ static ProtocolSpecBuilder bpo5Definition( evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); return applyBlobSchedule(builder, genesisConfigOptions, BlobScheduleOptions::getBpo5, BPO5); } @@ -1158,7 +1157,7 @@ static ProtocolSpecBuilder amsterdamDefinition( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return bpo5Definition( chainId, @@ -1167,10 +1166,11 @@ static ProtocolSpecBuilder amsterdamDefinition( evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) - .blockAccessListFactory(new BlockAccessListFactory(isBlockAccessListEnabled, true)) - .stateRootCommitterFactory(new StateRootCommitterFactoryBal(false, BAL_ROOT_TIMEOUT)) + .blockAccessListFactory( + new BlockAccessListFactory(balConfiguration.isBalApiEnabled(), true)) + .stateRootCommitterFactory(new StateRootCommitterFactoryBal(balConfiguration)) .hardforkId(AMSTERDAM); } @@ -1216,7 +1216,7 @@ static ProtocolSpecBuilder futureEipsDefinition( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { ProtocolSpecBuilder protocolSpecBuilder = amsterdamDefinition( @@ -1226,7 +1226,7 @@ static ProtocolSpecBuilder futureEipsDefinition( evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .precompileContractRegistryBuilder(MainnetPrecompiledContractRegistries::futureEips) .hardforkId(FUTURE_EIPS); @@ -1241,7 +1241,7 @@ static ProtocolSpecBuilder experimentalEipsDefinition( final EvmConfiguration evmConfiguration, final MiningConfiguration miningConfiguration, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { return futureEipsDefinition( @@ -1251,7 +1251,7 @@ static ProtocolSpecBuilder experimentalEipsDefinition( evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .evmBuilder( (gasCalculator, jdCacheConfig) -> diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/ProtocolScheduleBuilder.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/ProtocolScheduleBuilder.java index 7d8aa56fda3..35025e00a8f 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/ProtocolScheduleBuilder.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/ProtocolScheduleBuilder.java @@ -49,7 +49,7 @@ public class ProtocolScheduleBuilder { private final EvmConfiguration evmConfiguration; private final BadBlockManager badBlockManager; private final boolean isParallelTxProcessingEnabled; - private final boolean isBlockAccessListEnabled; + private final BalConfiguration balConfiguration; private final MetricsSystem metricsSystem; private final MiningConfiguration miningConfiguration; @@ -62,7 +62,7 @@ public ProtocolScheduleBuilder( final MiningConfiguration miningConfiguration, final BadBlockManager badBlockManager, final boolean isParallelTxProcessingEnabled, - final boolean isBlockAccessListEnabled, + final BalConfiguration balConfiguration, final MetricsSystem metricsSystem) { this.config = config; this.protocolSpecAdapters = protocolSpecAdapters; @@ -71,7 +71,7 @@ public ProtocolScheduleBuilder( this.defaultChainId = defaultChainId; this.badBlockManager = badBlockManager; this.isParallelTxProcessingEnabled = isParallelTxProcessingEnabled; - this.isBlockAccessListEnabled = isBlockAccessListEnabled; + this.balConfiguration = balConfiguration; this.metricsSystem = metricsSystem; this.miningConfiguration = miningConfiguration; } @@ -94,7 +94,7 @@ public void initSchedule(final ProtocolSchedule protocolSchedule) { config.getContractSizeLimit(), OptionalInt.empty(), config.getEvmStackSize()), miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem); final List mileStones = createMilestones(specFactory); @@ -186,7 +186,7 @@ public void initSchedule(final ProtocolSchedule protocolSchedule) { config, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem), Function.identity()); protocolSchedule.putBlockNumberMilestone( diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/staterootcommitter/StateRootCommitterFactoryBal.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/staterootcommitter/StateRootCommitterFactoryBal.java index 5565375551c..20b060e626d 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/staterootcommitter/StateRootCommitterFactoryBal.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/staterootcommitter/StateRootCommitterFactoryBal.java @@ -17,22 +17,20 @@ import org.hyperledger.besu.datatypes.Hash; import org.hyperledger.besu.ethereum.ProtocolContext; import org.hyperledger.besu.ethereum.core.BlockHeader; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.block.access.list.BlockAccessList; import org.hyperledger.besu.ethereum.trie.forest.ForestWorldStateArchive; import org.hyperledger.besu.ethereum.trie.pathbased.bonsai.worldview.BlockAccessListStateRootHashCalculator; -import java.time.Duration; import java.util.Optional; import java.util.concurrent.CompletableFuture; public final class StateRootCommitterFactoryBal implements StateRootCommitterFactory { - private final boolean trustBalRoot; - private final Duration balRootTimeout; + private final BalConfiguration balConfiguration; - public StateRootCommitterFactoryBal(final boolean trustBalRoot, final Duration balRootTimeout) { - this.trustBalRoot = trustBalRoot; - this.balRootTimeout = balRootTimeout; + public StateRootCommitterFactoryBal(final BalConfiguration balConfiguration) { + this.balConfiguration = balConfiguration; } @Override @@ -40,6 +38,10 @@ public StateRootCommitter forBlock( final ProtocolContext protocolContext, final BlockHeader blockHeader, final Optional maybeBal) { + if (!balConfiguration.isBalOptimisationEnabled()) { + return new StateRootCommitterImplSync(); + } + if (maybeBal.isEmpty()) { throw new IllegalStateException( "No BAL present in the block, falling back to synchronous state root computation"); @@ -53,6 +55,6 @@ public StateRootCommitter forBlock( final CompletableFuture balRootFuture = BlockAccessListStateRootHashCalculator.computeStateRootFromBlockAccessListAsync( protocolContext, blockHeader, maybeBal.get()); - return new StateRootCommitterImplBal(balRootFuture, trustBalRoot, balRootTimeout); + return new StateRootCommitterImplBal(balRootFuture, balConfiguration); } } diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/staterootcommitter/StateRootCommitterImplBal.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/staterootcommitter/StateRootCommitterImplBal.java index 8fcbba23fc5..333ed52aa30 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/staterootcommitter/StateRootCommitterImplBal.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/staterootcommitter/StateRootCommitterImplBal.java @@ -17,28 +17,31 @@ import org.hyperledger.besu.datatypes.Hash; import org.hyperledger.besu.ethereum.core.BlockHeader; import org.hyperledger.besu.ethereum.core.MutableWorldState; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.trie.pathbased.common.worldview.WorldStateConfig; import org.hyperledger.besu.ethereum.worldstate.WorldStateKeyValueStorage; import java.time.Duration; +import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + final class StateRootCommitterImplBal implements StateRootCommitter { + private static final Logger LOG = LoggerFactory.getLogger(StateRootCommitterImplBal.class); + private final CompletableFuture balRootFuture; - private final boolean trustBalRoot; - private final Duration balRootTimeout; + private final BalConfiguration balConfiguration; private final StateRootCommitterImplSync computeAndCommitRoot = new StateRootCommitterImplSync(); StateRootCommitterImplBal( - final CompletableFuture balRootFuture, - final boolean trustBalRoot, - final Duration balRootTimeout) { + final CompletableFuture balRootFuture, final BalConfiguration balConfiguration) { this.balRootFuture = balRootFuture; - this.trustBalRoot = trustBalRoot; - this.balRootTimeout = balRootTimeout; + this.balConfiguration = balConfiguration; } @Override @@ -47,22 +50,34 @@ public Hash computeRootAndCommit( final WorldStateKeyValueStorage.Updater stateUpdater, final BlockHeader blockHeader, final WorldStateConfig cfg) { - - final Hash balRoot = waitForBalRoot(); - - if (trustBalRoot) { - return balRoot; - } - final Hash computed = computeAndCommitRoot.computeRootAndCommit(worldState, stateUpdater, blockHeader, cfg); - if (!computed.equals(balRoot)) { - throw new IllegalStateException( - String.format("BAL root mismatch: computed %s vs BAL %s", computed, balRoot)); - } + final Duration balRootTimeout = balConfiguration.getBalStateRootTimeout(); + + if (balConfiguration.isBalLenientOnMismatch()) { + final Optional maybeBalRoot = waitForBalRootLenient(balRootTimeout); + if (maybeBalRoot.isEmpty()) { + LOG.warn( + "BAL root unavailable (lenient mode); proceeding with computed state root {}", + computed); + return computed; + } - return computed; + final Hash balRoot = maybeBalRoot.get(); + if (!computed.equals(balRoot)) { + LOG.error("BAL root mismatch: computed {} vs BAL {}", computed, balRoot); + } + return computed; + } else { + final Hash balRoot = waitForBalRootStrict(balRootTimeout); + if (!computed.equals(balRoot)) { + final String msg = + String.format("BAL root mismatch: computed %s vs BAL %s", computed, balRoot); + throw new IllegalStateException(msg); + } + return computed; + } } @Override @@ -70,12 +85,9 @@ public void cancel() { balRootFuture.cancel(true); } - private Hash waitForBalRoot() { + private Hash waitForBalRootStrict(final Duration balRootTimeout) { try { - if (balRootTimeout.isNegative()) { - return balRootFuture.join(); - } - return balRootFuture.get(balRootTimeout.toNanos(), TimeUnit.NANOSECONDS); + return getWithConfiguredTimeout(balRootTimeout); } catch (final TimeoutException e) { balRootFuture.cancel(true); throw new IllegalStateException( @@ -87,4 +99,30 @@ private Hash waitForBalRoot() { throw new IllegalStateException("Interrupted while waiting for BAL state root", e); } } + + private Optional waitForBalRootLenient(final Duration balRootTimeout) { + try { + return Optional.of(getWithConfiguredTimeout(balRootTimeout)); + } catch (final TimeoutException e) { + balRootFuture.cancel(true); + LOG.warn( + "Timed out waiting {} for BAL state root (lenient mode); proceeding.", balRootTimeout); + return Optional.empty(); + } catch (final ExecutionException e) { + LOG.warn("Failed to compute BAL state root (lenient mode); proceeding.", e.getCause()); + return Optional.empty(); + } catch (final InterruptedException e) { + Thread.currentThread().interrupt(); + LOG.warn("Interrupted while waiting for BAL state root (lenient mode); proceeding."); + return Optional.empty(); + } + } + + private Hash getWithConfiguredTimeout(final Duration balRootTimeout) + throws InterruptedException, ExecutionException, TimeoutException { + if (balRootTimeout.isNegative()) { + return balRootFuture.join(); + } + return balRootFuture.get(balRootTimeout.toNanos(), TimeUnit.NANOSECONDS); + } } diff --git a/ethereum/core/src/test-support/java/org/hyperledger/besu/ethereum/core/BlockchainSetupUtil.java b/ethereum/core/src/test-support/java/org/hyperledger/besu/ethereum/core/BlockchainSetupUtil.java index d5b3bcd85fc..55ef2fd23ad 100644 --- a/ethereum/core/src/test-support/java/org/hyperledger/besu/ethereum/core/BlockchainSetupUtil.java +++ b/ethereum/core/src/test-support/java/org/hyperledger/besu/ethereum/core/BlockchainSetupUtil.java @@ -28,6 +28,7 @@ import org.hyperledger.besu.ethereum.chain.MutableBlockchain; import org.hyperledger.besu.ethereum.eth.manager.EthScheduler; import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.BlockImportResult; import org.hyperledger.besu.ethereum.mainnet.HeaderValidationMode; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; @@ -170,7 +171,7 @@ private static ProtocolSchedule mainnetProtocolScheduleProvider( MiningConfiguration.newDefault(), new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); } diff --git a/ethereum/core/src/test-support/java/org/hyperledger/besu/ethereum/core/ExecutionContextTestFixture.java b/ethereum/core/src/test-support/java/org/hyperledger/besu/ethereum/core/ExecutionContextTestFixture.java index 1dd0d2416e9..b7d1fe7f7d3 100644 --- a/ethereum/core/src/test-support/java/org/hyperledger/besu/ethereum/core/ExecutionContextTestFixture.java +++ b/ethereum/core/src/test-support/java/org/hyperledger/besu/ethereum/core/ExecutionContextTestFixture.java @@ -23,6 +23,7 @@ import org.hyperledger.besu.ethereum.chain.DefaultBlockchain; import org.hyperledger.besu.ethereum.chain.GenesisState; import org.hyperledger.besu.ethereum.chain.MutableBlockchain; +import org.hyperledger.besu.ethereum.mainnet.ImmutableBalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetBlockHeaderFunctions; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolScheduleBuilder; @@ -165,7 +166,7 @@ public ExecutionContextTestFixture build() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - true, + ImmutableBalConfiguration.builder().isBalApiEnabled(true).build(), new NoOpMetricsSystem()) .createProtocolSchedule(); } diff --git a/ethereum/core/src/test-support/java/org/hyperledger/besu/ethereum/core/ProtocolScheduleFixture.java b/ethereum/core/src/test-support/java/org/hyperledger/besu/ethereum/core/ProtocolScheduleFixture.java index 19342a15cb2..6828f3ceb74 100644 --- a/ethereum/core/src/test-support/java/org/hyperledger/besu/ethereum/core/ProtocolScheduleFixture.java +++ b/ethereum/core/src/test-support/java/org/hyperledger/besu/ethereum/core/ProtocolScheduleFixture.java @@ -20,6 +20,7 @@ import org.hyperledger.besu.config.GenesisConfigOptions; import org.hyperledger.besu.config.JsonGenesisConfigOptions; import org.hyperledger.besu.ethereum.chain.BadBlockManager; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.metrics.noop.NoOpMetricsSystem; @@ -42,7 +43,7 @@ public class ProtocolScheduleFixture { MiningConfiguration.newDefault(), new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); // A pointer to a specific network. Used widely in tests. diff --git a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/difficulty/fixed/FixedProtocolScheduleTest.java b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/difficulty/fixed/FixedProtocolScheduleTest.java index c2e5d8eea9f..67316e41099 100644 --- a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/difficulty/fixed/FixedProtocolScheduleTest.java +++ b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/difficulty/fixed/FixedProtocolScheduleTest.java @@ -21,6 +21,7 @@ import org.hyperledger.besu.ethereum.core.BlockHeader; import org.hyperledger.besu.ethereum.core.BlockHeaderTestFixture; import org.hyperledger.besu.ethereum.core.MiningConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.evm.internal.EvmConfiguration; import org.hyperledger.besu.metrics.noop.NoOpMetricsSystem; @@ -39,7 +40,7 @@ public void reportedDifficultyForAllBlocksIsAFixedValue() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); final BlockHeaderTestFixture headerBuilder = new BlockHeaderTestFixture(); diff --git a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/DefaultProtocolScheduleTest.java b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/DefaultProtocolScheduleTest.java index f3f6e45ddfc..58da6d1d4b9 100644 --- a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/DefaultProtocolScheduleTest.java +++ b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/DefaultProtocolScheduleTest.java @@ -70,7 +70,7 @@ public void setup() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); } diff --git a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolScheduleTest.java b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolScheduleTest.java index c4a7f6c889f..fd47df78121 100644 --- a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolScheduleTest.java +++ b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolScheduleTest.java @@ -93,7 +93,7 @@ public void shouldOnlyUseFrontierWhenEmptyJsonConfigIsUsed() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); Assertions.assertThat(sched.getByBlockHeader(blockHeader(1L)).getHardforkId()) .isEqualTo(FRONTIER); @@ -112,7 +112,7 @@ public void createFromConfigWithSettings() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); Assertions.assertThat(sched.getByBlockHeader(blockHeader(1)).getHardforkId()) .isEqualTo(FRONTIER); @@ -151,7 +151,7 @@ public void outOfOrderConstantinoplesFail() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem())); } diff --git a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecsTest.java b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecsTest.java index ff86bf68b4c..e3892488233 100644 --- a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecsTest.java +++ b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecsTest.java @@ -64,7 +64,7 @@ public class MainnetProtocolSpecsTest { private final Optional chainId = Optional.of(BigInteger.ONE); private final boolean enableRevertReason = false; private final boolean isParallelTxProcessingEnabled = false; - private final boolean isBlockAccessListEnabled = false; + private final BalConfiguration balConfiguration = BalConfiguration.DEFAULT; private final long londonForkBlockNumber = 0L; @BeforeEach @@ -98,7 +98,7 @@ public void pragueDefinitionShouldThrowExceptionWhenAllContractAddressesAreMissi evmConfiguration, MiningConfiguration.newDefault(), isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem)) .withMessageContaining("Withdrawal Request Contract Address not found"); } @@ -122,7 +122,7 @@ public void pragueDefinitionShouldThrowExceptionWhenWithdrawalRequestContractAdd evmConfiguration, MiningConfiguration.newDefault(), isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem)) .withMessageContaining("Withdrawal Request Contract Address not found"); } @@ -147,7 +147,7 @@ public void pragueDefinitionShouldThrowExceptionWhenDepositContractAddressIsMiss evmConfiguration, MiningConfiguration.newDefault(), isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem)) .withMessageContaining("Deposit Contract Address not found"); } @@ -173,7 +173,7 @@ public void pragueDefinitionShouldThrowExceptionWhenDepositContractAddressIsMiss evmConfiguration, MiningConfiguration.newDefault(), isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem)) .withMessageContaining("Consolidation Request Contract Address not found"); } @@ -194,7 +194,7 @@ public void genesisCliqueBlockPeriodIsReturnedAsSlotTime() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .badBlocksManager(badBlockManager) .build(protocolSchedule); @@ -215,7 +215,7 @@ public void genesisQbftBlockPeriodIsReturnedAsSlotTime() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .badBlocksManager(badBlockManager) .build(protocolSchedule); @@ -236,7 +236,7 @@ public void genesisIbft2BlockPeriodIsReturnedAsSlotTime() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .badBlocksManager(badBlockManager) .build(protocolSchedule); @@ -251,7 +251,7 @@ public void defaultToPowEstimatedSlotTimePrePos() { genesisConfigOptions, evmConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .badBlocksManager(badBlockManager) .build(protocolSchedule); @@ -270,7 +270,7 @@ public void posSlotTimeIsReturnedFromParisOnward() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .badBlocksManager(badBlockManager) .build(protocolSchedule); @@ -293,7 +293,7 @@ public void changeDefaultPosSlotTimeByConfiguration() { evmConfiguration, miningConfiguration, isParallelTxProcessingEnabled, - isBlockAccessListEnabled, + balConfiguration, metricsSystem) .badBlocksManager(badBlockManager) .build(protocolSchedule); diff --git a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/ProtocolScheduleBuilderTest.java b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/ProtocolScheduleBuilderTest.java index dc8aef6ef83..1748d9cbda0 100644 --- a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/ProtocolScheduleBuilderTest.java +++ b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/ProtocolScheduleBuilderTest.java @@ -82,7 +82,7 @@ public void setup() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); } @@ -362,7 +362,7 @@ private MilestoneStreamingProtocolSchedule createScheduleModifiedAt(final int bl MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); return new MilestoneStreamingProtocolSchedule( diff --git a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/trie/pathbased/bonsai/AbstractIsolationTests.java b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/trie/pathbased/bonsai/AbstractIsolationTests.java index 3b4c02c1abf..21d30c68003 100644 --- a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/trie/pathbased/bonsai/AbstractIsolationTests.java +++ b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/trie/pathbased/bonsai/AbstractIsolationTests.java @@ -62,6 +62,7 @@ import org.hyperledger.besu.ethereum.eth.transactions.layered.GasPricePrioritizedTransactions; import org.hyperledger.besu.ethereum.eth.transactions.layered.LayeredPendingTransactions; import org.hyperledger.besu.ethereum.eth.transactions.layered.SenderBalanceChecker; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.storage.StorageProvider; @@ -110,7 +111,7 @@ public abstract class AbstractIsolationTests { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); protected final GenesisState genesisState = GenesisState.fromConfig( diff --git a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/messages/BlockBodiesMessageTest.java b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/messages/BlockBodiesMessageTest.java index cbebe2d1f1f..82f0d669f05 100644 --- a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/messages/BlockBodiesMessageTest.java +++ b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/messages/BlockBodiesMessageTest.java @@ -30,6 +30,7 @@ import org.hyperledger.besu.ethereum.core.Transaction; import org.hyperledger.besu.ethereum.core.Withdrawal; import org.hyperledger.besu.ethereum.difficulty.fixed.FixedDifficultyProtocolSchedule; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetBlockHeaderFunctions; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ScheduleBasedBlockHeaderFunctions; @@ -71,7 +72,7 @@ public void setup() { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); } diff --git a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/messages/BlockHeadersMessageTest.java b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/messages/BlockHeadersMessageTest.java index f4f28df4e9b..35544992c19 100644 --- a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/messages/BlockHeadersMessageTest.java +++ b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/messages/BlockHeadersMessageTest.java @@ -19,6 +19,7 @@ import org.hyperledger.besu.ethereum.core.BlockHeader; import org.hyperledger.besu.ethereum.core.MiningConfiguration; import org.hyperledger.besu.ethereum.difficulty.fixed.FixedDifficultyProtocolSchedule; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetBlockHeaderFunctions; import org.hyperledger.besu.ethereum.p2p.rlpx.wire.MessageData; import org.hyperledger.besu.ethereum.p2p.rlpx.wire.RawMessage; @@ -71,7 +72,7 @@ public void blockHeadersRoundTrip() throws IOException { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem())); for (int i = 0; i < 50; ++i) { diff --git a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/ChainHeadTrackerTest.java b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/ChainHeadTrackerTest.java index 16d682c42af..2de3ce0c7d0 100644 --- a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/ChainHeadTrackerTest.java +++ b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/ChainHeadTrackerTest.java @@ -33,6 +33,7 @@ import org.hyperledger.besu.ethereum.eth.manager.peertask.PeerTaskExecutor; import org.hyperledger.besu.ethereum.eth.manager.peertask.task.GetHeadersFromPeerTask; import org.hyperledger.besu.ethereum.eth.manager.peertask.task.GetHeadersFromPeerTaskExecutorAnswer; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.evm.internal.EvmConfiguration; import org.hyperledger.besu.metrics.noop.NoOpMetricsSystem; @@ -69,7 +70,7 @@ public class ChainHeadTrackerTest { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); static class ChainHeadTrackerTestArguments implements ArgumentsProvider { diff --git a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/BackwardSyncContextTest.java b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/BackwardSyncContextTest.java index 5268109714b..e2d1bf8d4a4 100644 --- a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/BackwardSyncContextTest.java +++ b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/BackwardSyncContextTest.java @@ -51,6 +51,7 @@ import org.hyperledger.besu.ethereum.eth.manager.peertask.task.GetHeadersFromPeerTaskExecutorAnswer; import org.hyperledger.besu.ethereum.eth.sync.SynchronizerConfiguration; import org.hyperledger.besu.ethereum.eth.sync.state.SyncState; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetBlockHeaderFunctions; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; @@ -106,7 +107,7 @@ public class BackwardSyncContextTest { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); @Spy diff --git a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/BackwardSyncStepTest.java b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/BackwardSyncStepTest.java index a92936a4d4a..2d1f7966de5 100644 --- a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/BackwardSyncStepTest.java +++ b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/BackwardSyncStepTest.java @@ -44,6 +44,7 @@ import org.hyperledger.besu.ethereum.eth.manager.peertask.task.GetHeadersFromPeerTask; import org.hyperledger.besu.ethereum.eth.manager.peertask.task.GetHeadersFromPeerTaskExecutorAnswer; import org.hyperledger.besu.ethereum.eth.sync.SynchronizerConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetBlockHeaderFunctions; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; @@ -86,7 +87,7 @@ public class BackwardSyncStepTest { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); private final DeterministicEthScheduler ethScheduler = new DeterministicEthScheduler(); diff --git a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/ForwardSyncStepTest.java b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/ForwardSyncStepTest.java index 326f1179007..75f91ab52cb 100644 --- a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/ForwardSyncStepTest.java +++ b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/ForwardSyncStepTest.java @@ -41,6 +41,7 @@ import org.hyperledger.besu.ethereum.eth.manager.peertask.task.GetBodiesFromPeerTask; import org.hyperledger.besu.ethereum.eth.sync.SyncMode; import org.hyperledger.besu.ethereum.eth.sync.SynchronizerConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetBlockHeaderFunctions; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; @@ -89,7 +90,7 @@ public class ForwardSyncStepTest { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); private MutableBlockchain localBlockchain; GenericKeyValueStorageFacade headersStorage; diff --git a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/AbstractTransactionPoolTestBase.java b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/AbstractTransactionPoolTestBase.java index 685c45f56f7..3e76bf6a32e 100644 --- a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/AbstractTransactionPoolTestBase.java +++ b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/AbstractTransactionPoolTestBase.java @@ -60,6 +60,7 @@ import org.hyperledger.besu.ethereum.eth.transactions.layered.LayeredTransactionPoolBaseFeeTest; import org.hyperledger.besu.ethereum.eth.transactions.layered.SenderBalanceChecker; import org.hyperledger.besu.ethereum.eth.transactions.sorter.LegacyTransactionPoolBaseFeeTest; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetBlockHeaderFunctions; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolScheduleBuilder; @@ -186,7 +187,7 @@ protected static ExecutionContextTestFixture createExecutionContextTestFixtureBa MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()) .createProtocolSchedule(); final ExecutionContextTestFixture executionContextTestFixture = diff --git a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/TestNode.java b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/TestNode.java index 9899ee08b24..dd21676eacd 100644 --- a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/TestNode.java +++ b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/TestNode.java @@ -51,6 +51,7 @@ import org.hyperledger.besu.ethereum.eth.sync.SynchronizerConfiguration; import org.hyperledger.besu.ethereum.eth.sync.state.SyncState; import org.hyperledger.besu.ethereum.forkid.ForkIdManager; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ScheduleBasedBlockHeaderFunctions; import org.hyperledger.besu.ethereum.p2p.config.DiscoveryConfiguration; @@ -128,7 +129,7 @@ public TestNode( MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); final GenesisState genesisState = diff --git a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPoolFactoryTest.java b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPoolFactoryTest.java index 47ecee2efd2..20aeb06eb1d 100644 --- a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPoolFactoryTest.java +++ b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/transactions/TransactionPoolFactoryTest.java @@ -51,6 +51,7 @@ import org.hyperledger.besu.ethereum.eth.transactions.sorter.BaseFeePendingTransactionsSorter; import org.hyperledger.besu.ethereum.eth.transactions.sorter.GasPricePendingTransactionsSorter; import org.hyperledger.besu.ethereum.forkid.ForkIdManager; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolScheduleBuilder; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec; @@ -379,7 +380,7 @@ private void setupScheduleWith(final StubGenesisConfigOptions config) { MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()) .createProtocolSchedule(); diff --git a/ethereum/evmtool/src/main/java/org/hyperledger/besu/evmtool/MainnetGenesisFileModule.java b/ethereum/evmtool/src/main/java/org/hyperledger/besu/evmtool/MainnetGenesisFileModule.java index 762eeb8a3c7..1b504307cfa 100644 --- a/ethereum/evmtool/src/main/java/org/hyperledger/besu/evmtool/MainnetGenesisFileModule.java +++ b/ethereum/evmtool/src/main/java/org/hyperledger/besu/evmtool/MainnetGenesisFileModule.java @@ -21,6 +21,7 @@ import org.hyperledger.besu.ethereum.chain.BadBlockManager; import org.hyperledger.besu.ethereum.core.BlockHeaderFunctions; import org.hyperledger.besu.ethereum.core.MiningConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.MainnetBlockHeaderFunctions; import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; @@ -83,7 +84,7 @@ ProtocolSchedule provideProtocolSchedule( MiningConfiguration.newDefault(), new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()); } @@ -217,7 +218,7 @@ private static Supplier createSchedule(final GenesisConfigOpti MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()) .createProtocolSchedule(); } diff --git a/ethereum/referencetests/src/main/java/org/hyperledger/besu/ethereum/referencetests/ReferenceTestProtocolSchedules.java b/ethereum/referencetests/src/main/java/org/hyperledger/besu/ethereum/referencetests/ReferenceTestProtocolSchedules.java index 894f2be91c9..89332934b52 100644 --- a/ethereum/referencetests/src/main/java/org/hyperledger/besu/ethereum/referencetests/ReferenceTestProtocolSchedules.java +++ b/ethereum/referencetests/src/main/java/org/hyperledger/besu/ethereum/referencetests/ReferenceTestProtocolSchedules.java @@ -21,6 +21,7 @@ import org.hyperledger.besu.ethereum.core.BlockHeader; import org.hyperledger.besu.ethereum.core.BlockHeaderTestFixture; import org.hyperledger.besu.ethereum.core.MiningConfiguration; +import org.hyperledger.besu.ethereum.mainnet.BalConfiguration; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; import org.hyperledger.besu.ethereum.mainnet.ProtocolScheduleBuilder; import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec; @@ -216,7 +217,7 @@ private static ProtocolSchedule createSchedule( MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, - false, + BalConfiguration.DEFAULT, new NoOpMetricsSystem()) .createProtocolSchedule(); } diff --git a/ethereum/referencetests/src/reference-test/java/org/hyperledger/besu/ethereum/mainnet/DifficultyCalculatorTests.java b/ethereum/referencetests/src/reference-test/java/org/hyperledger/besu/ethereum/mainnet/DifficultyCalculatorTests.java index 9eed6337585..bfe740decde 100644 --- a/ethereum/referencetests/src/reference-test/java/org/hyperledger/besu/ethereum/mainnet/DifficultyCalculatorTests.java +++ b/ethereum/referencetests/src/reference-test/java/org/hyperledger/besu/ethereum/mainnet/DifficultyCalculatorTests.java @@ -63,64 +63,64 @@ public static Stream getTestParametersForConfig() throws IOException MainnetProtocolSchedule.fromConfig( GenesisConfig.mainnet() .withOverrides(postMergeOverrides).getConfigOptions(), - EvmConfiguration.DEFAULT, MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, false, new NoOpMetricsSystem())), + EvmConfiguration.DEFAULT, MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, BalConfiguration.DEFAULT, new NoOpMetricsSystem())), Arguments.of( "/DifficultyTests/dfGrayGlacier/difficultyGrayGlacierForkBlock.json", MainnetProtocolSchedule.fromConfig( - new StubGenesisConfigOptions().grayGlacierBlock(15050000), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, false, new NoOpMetricsSystem()) + new StubGenesisConfigOptions().grayGlacierBlock(15050000), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, BalConfiguration.DEFAULT, new NoOpMetricsSystem()) ), Arguments.of( "/DifficultyTests/dfGrayGlacier/difficultyGrayGlacierTimeDiff1.json", MainnetProtocolSchedule.fromConfig( - new StubGenesisConfigOptions().grayGlacierBlock(15050000), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, false, new NoOpMetricsSystem()) + new StubGenesisConfigOptions().grayGlacierBlock(15050000), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, BalConfiguration.DEFAULT, new NoOpMetricsSystem()) ), Arguments.of( "/DifficultyTests/dfGrayGlacier/difficultyGrayGlacierTimeDiff2.json", MainnetProtocolSchedule.fromConfig( - new StubGenesisConfigOptions().grayGlacierBlock(15050000), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, false, new NoOpMetricsSystem()) + new StubGenesisConfigOptions().grayGlacierBlock(15050000), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, BalConfiguration.DEFAULT, new NoOpMetricsSystem()) ), Arguments.of( "/DifficultyTests/dfArrowGlacier/difficultyArrowGlacierForkBlock.json", MainnetProtocolSchedule.fromConfig( - new StubGenesisConfigOptions().arrowGlacierBlock(13773000), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, false, new NoOpMetricsSystem()) + new StubGenesisConfigOptions().arrowGlacierBlock(13773000), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, BalConfiguration.DEFAULT, new NoOpMetricsSystem()) ), Arguments.of( "/DifficultyTests/dfArrowGlacier/difficultyArrowGlacierTimeDiff1.json", MainnetProtocolSchedule.fromConfig( - new StubGenesisConfigOptions().arrowGlacierBlock(13773000), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, false, new NoOpMetricsSystem()) + new StubGenesisConfigOptions().arrowGlacierBlock(13773000), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, BalConfiguration.DEFAULT, new NoOpMetricsSystem()) ), Arguments.of( "/DifficultyTests/dfArrowGlacier/difficultyArrowGlacierTimeDiff2.json", MainnetProtocolSchedule.fromConfig( - new StubGenesisConfigOptions().arrowGlacierBlock(13773000), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, false, new NoOpMetricsSystem()) + new StubGenesisConfigOptions().arrowGlacierBlock(13773000), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, BalConfiguration.DEFAULT, new NoOpMetricsSystem()) ), Arguments.of( "/DifficultyTests/dfByzantium/difficultyByzantium.json", - MainnetProtocolSchedule.fromConfig(new StubGenesisConfigOptions().byzantiumBlock(0), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, false, new NoOpMetricsSystem()) + MainnetProtocolSchedule.fromConfig(new StubGenesisConfigOptions().byzantiumBlock(0), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, BalConfiguration.DEFAULT, new NoOpMetricsSystem()) ), Arguments.of( "/DifficultyTests/dfConstantinople/difficultyConstantinople.json", - MainnetProtocolSchedule.fromConfig(new StubGenesisConfigOptions().constantinopleBlock(0), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, false, new NoOpMetricsSystem()) + MainnetProtocolSchedule.fromConfig(new StubGenesisConfigOptions().constantinopleBlock(0), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, BalConfiguration.DEFAULT, new NoOpMetricsSystem()) ), Arguments.of( "/DifficultyTests/dfEIP2384/difficultyEIP2384.json", - MainnetProtocolSchedule.fromConfig(new StubGenesisConfigOptions().muirGlacierBlock(0), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, false, new NoOpMetricsSystem()) + MainnetProtocolSchedule.fromConfig(new StubGenesisConfigOptions().muirGlacierBlock(0), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, BalConfiguration.DEFAULT, new NoOpMetricsSystem()) ), Arguments.of( "/DifficultyTests/dfEIP2384/difficultyEIP2384_random.json", - MainnetProtocolSchedule.fromConfig(new StubGenesisConfigOptions().muirGlacierBlock(0), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, false, new NoOpMetricsSystem()) + MainnetProtocolSchedule.fromConfig(new StubGenesisConfigOptions().muirGlacierBlock(0), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, BalConfiguration.DEFAULT, new NoOpMetricsSystem()) ), Arguments.of( "/DifficultyTests/dfEIP2384/difficultyEIP2384_random_to20M.json", - MainnetProtocolSchedule.fromConfig(new StubGenesisConfigOptions().muirGlacierBlock(0), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, false, new NoOpMetricsSystem()) + MainnetProtocolSchedule.fromConfig(new StubGenesisConfigOptions().muirGlacierBlock(0), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, BalConfiguration.DEFAULT, new NoOpMetricsSystem()) ), Arguments.of( "/DifficultyTests/dfFrontier/difficultyFrontier.json", - MainnetProtocolSchedule.fromConfig(new StubGenesisConfigOptions(), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, false, new NoOpMetricsSystem()) + MainnetProtocolSchedule.fromConfig(new StubGenesisConfigOptions(), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, BalConfiguration.DEFAULT, new NoOpMetricsSystem()) ), Arguments.of( "/DifficultyTests/dfHomestead/difficultyHomestead.json", - MainnetProtocolSchedule.fromConfig(new StubGenesisConfigOptions().homesteadBlock(0), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, false, new NoOpMetricsSystem()) + MainnetProtocolSchedule.fromConfig(new StubGenesisConfigOptions().homesteadBlock(0), MiningConfiguration.MINING_DISABLED, new BadBlockManager(), false, BalConfiguration.DEFAULT, new NoOpMetricsSystem()) )); }