-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Force tx replacement price bump to zero when zero base fee market is configured #6079
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 5 commits
a12ad97
c7ca182
09e46dc
8b73053
4acffd7
caf560e
ca3c337
c481949
4404e8d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -54,12 +54,12 @@ | |
| import org.hyperledger.besu.cli.error.BesuExecutionExceptionHandler; | ||
| import org.hyperledger.besu.cli.error.BesuParameterExceptionHandler; | ||
| import org.hyperledger.besu.cli.options.MiningOptions; | ||
| import org.hyperledger.besu.cli.options.TransactionPoolOptions; | ||
| import org.hyperledger.besu.cli.options.stable.DataStorageOptions; | ||
| import org.hyperledger.besu.cli.options.stable.EthstatsOptions; | ||
| import org.hyperledger.besu.cli.options.stable.LoggingLevelOption; | ||
| import org.hyperledger.besu.cli.options.stable.NodePrivateKeyFileOption; | ||
| import org.hyperledger.besu.cli.options.stable.P2PTLSConfigOptions; | ||
| import org.hyperledger.besu.cli.options.stable.TransactionPoolOptions; | ||
| import org.hyperledger.besu.cli.options.unstable.ChainPruningOptions; | ||
| import org.hyperledger.besu.cli.options.unstable.DnsOptions; | ||
| import org.hyperledger.besu.cli.options.unstable.EthProtocolOptions; | ||
|
|
@@ -283,9 +283,6 @@ public class BesuCommand implements DefaultCommandValues, Runnable { | |
| final SynchronizerOptions unstableSynchronizerOptions = SynchronizerOptions.create(); | ||
| final EthProtocolOptions unstableEthProtocolOptions = EthProtocolOptions.create(); | ||
| final MetricsCLIOptions unstableMetricsCLIOptions = MetricsCLIOptions.create(); | ||
| final org.hyperledger.besu.cli.options.unstable.TransactionPoolOptions | ||
| unstableTransactionPoolOptions = | ||
| org.hyperledger.besu.cli.options.unstable.TransactionPoolOptions.create(); | ||
| private final DnsOptions unstableDnsOptions = DnsOptions.create(); | ||
| private final NatOptions unstableNatOptions = NatOptions.create(); | ||
| private final NativeLibraryOptions unstableNativeLibraryOptions = NativeLibraryOptions.create(); | ||
|
|
@@ -303,8 +300,7 @@ public class BesuCommand implements DefaultCommandValues, Runnable { | |
| private final LoggingLevelOption loggingLevelOption = LoggingLevelOption.create(); | ||
|
|
||
| @CommandLine.ArgGroup(validate = false, heading = "@|bold Tx Pool Common Options|@%n") | ||
| final org.hyperledger.besu.cli.options.stable.TransactionPoolOptions | ||
| stableTransactionPoolOptions = TransactionPoolOptions.create(); | ||
| final TransactionPoolOptions transactionPoolOptions = TransactionPoolOptions.create(); | ||
|
|
||
| @CommandLine.ArgGroup(validate = false, heading = "@|bold Block Builder Options|@%n") | ||
| final MiningOptions miningOptions = MiningOptions.create(); | ||
|
|
@@ -1525,7 +1521,6 @@ private void handleUnstableOptions() { | |
| .put("NAT Configuration", unstableNatOptions) | ||
| .put("Privacy Plugin Configuration", unstablePrivacyPluginOptions) | ||
| .put("Synchronizer", unstableSynchronizerOptions) | ||
| .put("TransactionPool", unstableTransactionPoolOptions) | ||
| .put("Native Library", unstableNativeLibraryOptions) | ||
| .put("EVM Options", unstableEvmOptions) | ||
| .put("IPC Options", unstableIpcOptions) | ||
|
|
@@ -1794,7 +1789,7 @@ private void validateOptions() { | |
| } | ||
|
|
||
| private void validateTransactionPoolOptions() { | ||
| stableTransactionPoolOptions.validate(commandLine); | ||
| transactionPoolOptions.validate(commandLine, getActualGenesisConfigOptions()); | ||
| } | ||
|
|
||
| private void validateRequiredOptions() { | ||
|
|
@@ -2811,12 +2806,17 @@ private SynchronizerConfiguration buildSyncConfig() { | |
| } | ||
|
|
||
| private TransactionPoolConfiguration buildTransactionPoolConfiguration() { | ||
| final var stableTxPoolOption = stableTransactionPoolOptions.toDomainObject(); | ||
| return ImmutableTransactionPoolConfiguration.builder() | ||
| .from(stableTxPoolOption) | ||
| .unstable(unstableTransactionPoolOptions.toDomainObject()) | ||
| .saveFile((dataPath.resolve(stableTxPoolOption.getSaveFile().getPath()).toFile())) | ||
| .build(); | ||
| final var txPoolConf = transactionPoolOptions.toDomainObject(); | ||
| final var txPoolConfBuilder = | ||
| ImmutableTransactionPoolConfiguration.builder() | ||
| .from(txPoolConf) | ||
| .saveFile((dataPath.resolve(txPoolConf.getSaveFile().getPath()).toFile())); | ||
|
|
||
| if (getActualGenesisConfigOptions().isZeroBaseFee()) { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Does this mean that you need to be on the
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I thought about that, but setting So what if we introduce a specific option, that acts like a profile, that state clearly that we want a gas free network, for example what do you think of this approach?
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. In principle I agree @fab-10. However, I do have a couple of concerns about introducing it under this PR:
So I agree that
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ok I see your point about And let's continue the discussion about a |
||
| txPoolConfBuilder.priceBump(Percentage.ZERO); | ||
| } | ||
|
|
||
| return txPoolConfBuilder.build(); | ||
| } | ||
|
|
||
| private MiningParameters getMiningParameters() { | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -12,18 +12,19 @@ | |
| * | ||
| * SPDX-License-Identifier: Apache-2.0 | ||
| */ | ||
| package org.hyperledger.besu.cli.options.stable; | ||
| package org.hyperledger.besu.cli.options; | ||
|
|
||
| import static org.hyperledger.besu.cli.DefaultCommandValues.MANDATORY_DOUBLE_FORMAT_HELP; | ||
| import static org.hyperledger.besu.cli.DefaultCommandValues.MANDATORY_INTEGER_FORMAT_HELP; | ||
| import static org.hyperledger.besu.cli.DefaultCommandValues.MANDATORY_LONG_FORMAT_HELP; | ||
| import static org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration.Implementation.LAYERED; | ||
| import static org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration.Implementation.LEGACY; | ||
|
|
||
| import org.hyperledger.besu.cli.converter.DurationMillisConverter; | ||
| import org.hyperledger.besu.cli.converter.FractionConverter; | ||
| import org.hyperledger.besu.cli.converter.PercentageConverter; | ||
| import org.hyperledger.besu.cli.options.CLIOptions; | ||
| import org.hyperledger.besu.cli.util.CommandLineUtils; | ||
| import org.hyperledger.besu.config.GenesisConfigOptions; | ||
| import org.hyperledger.besu.datatypes.Address; | ||
| import org.hyperledger.besu.datatypes.Wei; | ||
| import org.hyperledger.besu.ethereum.eth.transactions.ImmutableTransactionPoolConfiguration; | ||
|
|
@@ -32,6 +33,7 @@ | |
| import org.hyperledger.besu.util.number.Percentage; | ||
|
|
||
| import java.io.File; | ||
| import java.time.Duration; | ||
| import java.util.List; | ||
| import java.util.Set; | ||
|
|
||
|
|
@@ -195,6 +197,39 @@ static class Legacy { | |
| Integer txPoolMaxSize = TransactionPoolConfiguration.DEFAULT_MAX_PENDING_TRANSACTIONS; | ||
| } | ||
|
|
||
| @CommandLine.ArgGroup(validate = false) | ||
| private final TransactionPoolOptions.Unstable unstableOptions = | ||
| new TransactionPoolOptions.Unstable(); | ||
|
|
||
| static class Unstable { | ||
| private static final String TX_MESSAGE_KEEP_ALIVE_SEC_FLAG = | ||
| "--Xincoming-tx-messages-keep-alive-seconds"; | ||
|
|
||
| private static final String ETH65_TX_ANNOUNCED_BUFFERING_PERIOD_FLAG = | ||
| "--Xeth65-tx-announced-buffering-period-milliseconds"; | ||
|
Comment on lines
+205
to
+209
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Again this seems to be unrelated to this PR?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I put this here since, I am in the process of refactoring how we manage the option, and so when I took some, I also take the opportunity to iterate on it, in this case it was the merging of (un)stable options in a single place. |
||
|
|
||
| @CommandLine.Option( | ||
| names = {TX_MESSAGE_KEEP_ALIVE_SEC_FLAG}, | ||
| paramLabel = "<INTEGER>", | ||
| hidden = true, | ||
| description = | ||
| "Keep alive of incoming transaction messages in seconds (default: ${DEFAULT-VALUE})", | ||
| arity = "1") | ||
| private Integer txMessageKeepAliveSeconds = | ||
| TransactionPoolConfiguration.Unstable.DEFAULT_TX_MSG_KEEP_ALIVE; | ||
|
|
||
| @CommandLine.Option( | ||
| names = {ETH65_TX_ANNOUNCED_BUFFERING_PERIOD_FLAG}, | ||
| paramLabel = "<LONG>", | ||
| converter = DurationMillisConverter.class, | ||
| hidden = true, | ||
| description = | ||
| "The period for which the announced transactions remain in the buffer before being requested from the peers in milliseconds (default: ${DEFAULT-VALUE})", | ||
| arity = "1") | ||
| private Duration eth65TrxAnnouncedBufferingPeriod = | ||
| TransactionPoolConfiguration.Unstable.ETH65_TRX_ANNOUNCED_BUFFERING_PERIOD; | ||
| } | ||
|
|
||
| private TransactionPoolOptions() {} | ||
|
|
||
| /** | ||
|
|
@@ -230,6 +265,10 @@ public static TransactionPoolOptions fromConfig(final TransactionPoolConfigurati | |
| config.getTxPoolLimitByAccountPercentage(); | ||
| options.legacyOptions.txPoolMaxSize = config.getTxPoolMaxSize(); | ||
| options.legacyOptions.pendingTxRetentionPeriod = config.getPendingTxRetentionPeriod(); | ||
| options.unstableOptions.txMessageKeepAliveSeconds = | ||
| config.getUnstable().getTxMessageKeepAliveSeconds(); | ||
| options.unstableOptions.eth65TrxAnnouncedBufferingPeriod = | ||
| config.getUnstable().getEth65TrxAnnouncedBufferingPeriod(); | ||
|
|
||
| return options; | ||
| } | ||
|
|
@@ -239,8 +278,10 @@ public static TransactionPoolOptions fromConfig(final TransactionPoolConfigurati | |
| * options are valid for the selected implementation. | ||
| * | ||
| * @param commandLine the full commandLine to check all the options specified by the user | ||
| * @param genesisConfigOptions the genesis config options | ||
| */ | ||
| public void validate(final CommandLine commandLine) { | ||
| public void validate( | ||
| final CommandLine commandLine, final GenesisConfigOptions genesisConfigOptions) { | ||
| CommandLineUtils.failIfOptionDoesntMeetRequirement( | ||
| commandLine, | ||
| "Could not use legacy transaction pool options with layered implementation", | ||
|
|
@@ -252,6 +293,12 @@ public void validate(final CommandLine commandLine) { | |
| "Could not use layered transaction pool options with legacy implementation", | ||
| !txPoolImplementation.equals(LEGACY), | ||
| CommandLineUtils.getCLIOptionNames(Layered.class)); | ||
|
|
||
| CommandLineUtils.failIfOptionDoesntMeetRequirement( | ||
| commandLine, | ||
| "Price bump option is not compatible with zero base fee market", | ||
| !genesisConfigOptions.isZeroBaseFee(), | ||
| List.of(TX_POOL_PRICE_BUMP)); | ||
| } | ||
|
|
||
| @Override | ||
|
|
@@ -271,6 +318,11 @@ public TransactionPoolConfiguration toDomainObject() { | |
| .txPoolLimitByAccountPercentage(legacyOptions.txPoolLimitByAccountPercentage) | ||
| .txPoolMaxSize(legacyOptions.txPoolMaxSize) | ||
| .pendingTxRetentionPeriod(legacyOptions.pendingTxRetentionPeriod) | ||
| .unstable( | ||
| ImmutableTransactionPoolConfiguration.Unstable.builder() | ||
| .txMessageKeepAliveSeconds(unstableOptions.txMessageKeepAliveSeconds) | ||
| .eth65TrxAnnouncedBufferingPeriod(unstableOptions.eth65TrxAnnouncedBufferingPeriod) | ||
| .build()) | ||
| .build(); | ||
| } | ||
|
|
||
|
|
||
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this from another PR? It doesn't seem related to the price-bump behaviour.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
removed, this is not related to this PR