mirror of
https://github.com/vacp2p/status-linea-besu.git
synced 2026-01-09 23:38:08 -05:00
Introduce transaction pool interface (#4939)
* Introduce transaction pool interface Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net> * Fix spotless Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net> * Apply suggestiong from code review Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net> * Update consensus/merge/src/test/java/org/hyperledger/besu/consensus/merge/blockcreation/MergeReorgTest.java Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com> * Update consensus/merge/src/test/java/org/hyperledger/besu/consensus/merge/blockcreation/MergeReorgTest.java Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com> Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net> Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com> Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>
This commit is contained in:
@@ -33,7 +33,7 @@ import org.hyperledger.besu.ethereum.core.BlockHeaderBuilder;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeaderFunctions;
|
||||
import org.hyperledger.besu.ethereum.core.SealableBlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.Util;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ScheduleBasedBlockHeaderFunctions;
|
||||
|
||||
@@ -49,7 +49,7 @@ public class CliqueBlockCreator extends AbstractBlockCreator {
|
||||
final Address coinbase,
|
||||
final Supplier<Optional<Long>> targetGasLimitSupplier,
|
||||
final ExtraDataCalculator extraDataCalculator,
|
||||
final AbstractPendingTransactionsSorter pendingTransactions,
|
||||
final PendingTransactions pendingTransactions,
|
||||
final ProtocolContext protocolContext,
|
||||
final ProtocolSchedule protocolSchedule,
|
||||
final NodeKey nodeKey,
|
||||
|
||||
@@ -28,7 +28,7 @@ import org.hyperledger.besu.ethereum.chain.PoWObserver;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.MiningParameters;
|
||||
import org.hyperledger.besu.ethereum.core.Util;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
import org.hyperledger.besu.util.Subscribers;
|
||||
|
||||
@@ -51,7 +51,7 @@ public class CliqueMinerExecutor extends AbstractMinerExecutor<CliqueBlockMiner>
|
||||
public CliqueMinerExecutor(
|
||||
final ProtocolContext protocolContext,
|
||||
final ProtocolSchedule protocolSchedule,
|
||||
final AbstractPendingTransactionsSorter pendingTransactions,
|
||||
final PendingTransactions pendingTransactions,
|
||||
final NodeKey nodeKey,
|
||||
final MiningParameters miningParams,
|
||||
final AbstractBlockScheduler blockScheduler,
|
||||
|
||||
@@ -26,7 +26,7 @@ import org.hyperledger.besu.ethereum.blockcreation.AbstractBlockCreator;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeaderBuilder;
|
||||
import org.hyperledger.besu.ethereum.core.SealableBlockHeader;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
|
||||
import java.util.Optional;
|
||||
@@ -43,7 +43,7 @@ public class BftBlockCreator extends AbstractBlockCreator {
|
||||
final Address localAddress,
|
||||
final Supplier<Optional<Long>> targetGasLimitSupplier,
|
||||
final ExtraDataCalculator extraDataCalculator,
|
||||
final AbstractPendingTransactionsSorter pendingTransactions,
|
||||
final PendingTransactions pendingTransactions,
|
||||
final ProtocolContext protocolContext,
|
||||
final ProtocolSchedule protocolSchedule,
|
||||
final Wei minTransactionGasPrice,
|
||||
|
||||
@@ -32,7 +32,7 @@ import org.hyperledger.besu.ethereum.ProtocolContext;
|
||||
import org.hyperledger.besu.ethereum.blockcreation.BlockCreator;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.MiningParameters;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.mainnet.AbstractGasLimitSpecification;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
|
||||
@@ -46,7 +46,7 @@ import org.apache.tuweni.bytes.Bytes;
|
||||
|
||||
public class BftBlockCreatorFactory<T extends BftConfigOptions> {
|
||||
protected final ForksSchedule<T> forksSchedule;
|
||||
private final AbstractPendingTransactionsSorter pendingTransactions;
|
||||
private final PendingTransactions pendingTransactions;
|
||||
protected final ProtocolContext protocolContext;
|
||||
protected final ProtocolSchedule protocolSchedule;
|
||||
protected final BftExtraDataCodec bftExtraDataCodec;
|
||||
@@ -58,7 +58,7 @@ public class BftBlockCreatorFactory<T extends BftConfigOptions> {
|
||||
private volatile Optional<AtomicLong> targetGasLimit;
|
||||
|
||||
public BftBlockCreatorFactory(
|
||||
final AbstractPendingTransactionsSorter pendingTransactions,
|
||||
final PendingTransactions pendingTransactions,
|
||||
final ProtocolContext protocolContext,
|
||||
final ProtocolSchedule protocolSchedule,
|
||||
final ForksSchedule<T> forksSchedule,
|
||||
|
||||
@@ -29,7 +29,7 @@ import org.hyperledger.besu.ethereum.core.BlockHeaderBuilder;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeaderFunctions;
|
||||
import org.hyperledger.besu.ethereum.core.SealableBlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.Util;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ScheduleBasedBlockHeaderFunctions;
|
||||
|
||||
@@ -49,7 +49,7 @@ public class IbftBlockCreator extends AbstractBlockCreator {
|
||||
final Address coinbase,
|
||||
final Supplier<Optional<Long>> targetGasLimitSupplier,
|
||||
final ExtraDataCalculator extraDataCalculator,
|
||||
final AbstractPendingTransactionsSorter pendingTransactions,
|
||||
final PendingTransactions pendingTransactions,
|
||||
final ProtocolContext protocolContext,
|
||||
final ProtocolSchedule protocolSchedule,
|
||||
final KeyPair nodeKeys,
|
||||
|
||||
@@ -24,7 +24,7 @@ import org.hyperledger.besu.ethereum.core.Difficulty;
|
||||
import org.hyperledger.besu.ethereum.core.SealableBlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.Transaction;
|
||||
import org.hyperledger.besu.ethereum.core.Withdrawal;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
|
||||
import java.util.Collections;
|
||||
@@ -40,7 +40,7 @@ public class MergeBlockCreator extends AbstractBlockCreator {
|
||||
final Address coinbase,
|
||||
final Supplier<Optional<Long>> targetGasLimitSupplier,
|
||||
final ExtraDataCalculator extraDataCalculator,
|
||||
final AbstractPendingTransactionsSorter pendingTransactions,
|
||||
final PendingTransactions pendingTransactions,
|
||||
final ProtocolContext protocolContext,
|
||||
final ProtocolSchedule protocolSchedule,
|
||||
final Wei minTransactionGasPrice,
|
||||
|
||||
@@ -38,7 +38,7 @@ import org.hyperledger.besu.ethereum.core.Transaction;
|
||||
import org.hyperledger.besu.ethereum.core.Withdrawal;
|
||||
import org.hyperledger.besu.ethereum.eth.sync.backwardsync.BackwardSyncContext;
|
||||
import org.hyperledger.besu.ethereum.eth.sync.backwardsync.BadChainListener;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.mainnet.AbstractGasLimitSpecification;
|
||||
import org.hyperledger.besu.ethereum.mainnet.HeaderValidationMode;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
@@ -87,7 +87,7 @@ public class MergeCoordinator implements MergeMiningCoordinator, BadChainListene
|
||||
final ProtocolContext protocolContext,
|
||||
final ProtocolSchedule protocolSchedule,
|
||||
final ProposalBuilderExecutor blockBuilderExecutor,
|
||||
final AbstractPendingTransactionsSorter pendingTransactions,
|
||||
final PendingTransactions pendingTransactions,
|
||||
final MiningParameters miningParams,
|
||||
final BackwardSyncContext backwardSyncContext) {
|
||||
this.protocolContext = protocolContext;
|
||||
|
||||
@@ -35,7 +35,7 @@ import org.hyperledger.besu.ethereum.core.BlockHeaderTestFixture;
|
||||
import org.hyperledger.besu.ethereum.core.Difficulty;
|
||||
import org.hyperledger.besu.ethereum.core.MiningParameters;
|
||||
import org.hyperledger.besu.ethereum.eth.sync.backwardsync.BackwardSyncContext;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.mainnet.BlockHeaderValidator;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
import org.hyperledger.besu.ethereum.mainnet.feemarket.BaseFeeMarket;
|
||||
@@ -56,7 +56,7 @@ import org.mockito.junit.MockitoJUnitRunner;
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class MergeReorgTest implements MergeGenesisConfigHelper {
|
||||
|
||||
@Mock AbstractPendingTransactionsSorter mockSorter;
|
||||
@Mock PendingTransactions mockPendingTransactions;
|
||||
|
||||
private MergeCoordinator coordinator;
|
||||
|
||||
@@ -88,7 +88,7 @@ public class MergeReorgTest implements MergeGenesisConfigHelper {
|
||||
protocolContext,
|
||||
mockProtocolSchedule,
|
||||
CompletableFuture::runAsync,
|
||||
mockSorter,
|
||||
mockPendingTransactions,
|
||||
new MiningParameters.Builder().coinbase(coinbase).build(),
|
||||
mock(BackwardSyncContext.class));
|
||||
mergeContext.setIsPostMerge(genesisState.getBlock().getHeader().getDifficulty());
|
||||
|
||||
@@ -26,7 +26,7 @@ import org.hyperledger.besu.ethereum.ProtocolContext;
|
||||
import org.hyperledger.besu.ethereum.blockcreation.BlockCreator;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.MiningParameters;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
|
||||
import java.util.Collections;
|
||||
@@ -37,7 +37,7 @@ import org.apache.tuweni.bytes.Bytes;
|
||||
/** Supports contract based voters and validators in extra data */
|
||||
public class QbftBlockCreatorFactory extends BftBlockCreatorFactory<QbftConfigOptions> {
|
||||
public QbftBlockCreatorFactory(
|
||||
final AbstractPendingTransactionsSorter pendingTransactions,
|
||||
final PendingTransactions pendingTransactions,
|
||||
final ProtocolContext protocolContext,
|
||||
final ProtocolSchedule protocolSchedule,
|
||||
final ForksSchedule<QbftConfigOptions> forksSchedule,
|
||||
|
||||
@@ -31,7 +31,7 @@ import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.ethereum.ProtocolContext;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.MiningParameters;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
|
||||
import java.util.Optional;
|
||||
@@ -59,7 +59,7 @@ public class QbftBlockCreatorFactoryTest {
|
||||
|
||||
qbftBlockCreatorFactory =
|
||||
new QbftBlockCreatorFactory(
|
||||
mock(AbstractPendingTransactionsSorter.class),
|
||||
mock(PendingTransactions.class),
|
||||
mock(ProtocolContext.class),
|
||||
mock(ProtocolSchedule.class),
|
||||
forksSchedule,
|
||||
|
||||
@@ -20,7 +20,7 @@ import org.hyperledger.besu.ethereum.api.graphql.GraphQLContextType;
|
||||
import org.hyperledger.besu.ethereum.api.query.BlockchainQueries;
|
||||
import org.hyperledger.besu.ethereum.api.query.TransactionWithMetadata;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransaction;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
import org.hyperledger.besu.ethereum.transaction.CallParameter;
|
||||
import org.hyperledger.besu.ethereum.transaction.TransactionSimulator;
|
||||
@@ -38,9 +38,9 @@ import org.apache.tuweni.units.bigints.UInt256;
|
||||
@SuppressWarnings("unused") // reflected by GraphQL
|
||||
public class PendingStateAdapter extends AdapterBase {
|
||||
|
||||
private final AbstractPendingTransactionsSorter pendingTransactions;
|
||||
private final PendingTransactions pendingTransactions;
|
||||
|
||||
public PendingStateAdapter(final AbstractPendingTransactionsSorter pendingTransactions) {
|
||||
public PendingStateAdapter(final PendingTransactions pendingTransactions) {
|
||||
this.pendingTransactions = pendingTransactions;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ package org.hyperledger.besu.ethereum.api.jsonrpc;
|
||||
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.ethereum.api.query.BlockchainQueries;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.util.NonceProvider;
|
||||
|
||||
import java.util.OptionalLong;
|
||||
@@ -24,11 +24,10 @@ import java.util.OptionalLong;
|
||||
public class LatestNonceProvider implements NonceProvider {
|
||||
|
||||
private final BlockchainQueries blockchainQueries;
|
||||
private final AbstractPendingTransactionsSorter pendingTransactions;
|
||||
private final PendingTransactions pendingTransactions;
|
||||
|
||||
public LatestNonceProvider(
|
||||
final BlockchainQueries blockchainQueries,
|
||||
final AbstractPendingTransactionsSorter pendingTransactions) {
|
||||
final BlockchainQueries blockchainQueries, final PendingTransactions pendingTransactions) {
|
||||
this.blockchainQueries = blockchainQueries;
|
||||
this.pendingTransactions = pendingTransactions;
|
||||
}
|
||||
|
||||
@@ -24,18 +24,17 @@ import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.JsonRpcSucces
|
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.results.TransactionCompleteResult;
|
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.results.TransactionPendingResult;
|
||||
import org.hyperledger.besu.ethereum.api.query.BlockchainQueries;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public class EthGetTransactionByHash implements JsonRpcMethod {
|
||||
|
||||
private final BlockchainQueries blockchain;
|
||||
private final AbstractPendingTransactionsSorter pendingTransactions;
|
||||
private final PendingTransactions pendingTransactions;
|
||||
|
||||
public EthGetTransactionByHash(
|
||||
final BlockchainQueries blockchain,
|
||||
final AbstractPendingTransactionsSorter pendingTransactions) {
|
||||
final BlockchainQueries blockchain, final PendingTransactions pendingTransactions) {
|
||||
this.blockchain = blockchain;
|
||||
this.pendingTransactions = pendingTransactions;
|
||||
}
|
||||
|
||||
@@ -21,24 +21,23 @@ import org.hyperledger.besu.ethereum.api.jsonrpc.internal.JsonRpcRequestContext;
|
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.parameters.BlockParameterOrBlockHash;
|
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.results.Quantity;
|
||||
import org.hyperledger.besu.ethereum.api.query.BlockchainQueries;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import com.google.common.base.Suppliers;
|
||||
|
||||
public class EthGetTransactionCount extends AbstractBlockParameterOrBlockHashMethod {
|
||||
private final Supplier<AbstractPendingTransactionsSorter> pendingTransactions;
|
||||
private final Supplier<PendingTransactions> pendingTransactions;
|
||||
|
||||
public EthGetTransactionCount(
|
||||
final BlockchainQueries blockchain,
|
||||
final AbstractPendingTransactionsSorter pendingTransactions) {
|
||||
final BlockchainQueries blockchain, final PendingTransactions pendingTransactions) {
|
||||
this(Suppliers.ofInstance(blockchain), Suppliers.ofInstance(pendingTransactions));
|
||||
}
|
||||
|
||||
public EthGetTransactionCount(
|
||||
final Supplier<BlockchainQueries> blockchain,
|
||||
final Supplier<AbstractPendingTransactionsSorter> pendingTransactions) {
|
||||
final Supplier<PendingTransactions> pendingTransactions) {
|
||||
super(blockchain);
|
||||
this.pendingTransactions = pendingTransactions;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ import org.hyperledger.besu.ethereum.api.jsonrpc.internal.results.TransactionPen
|
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.results.transaction.pool.PendingTransactionFilter;
|
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.results.transaction.pool.PendingTransactionFilter.Filter;
|
||||
import org.hyperledger.besu.ethereum.core.Transaction;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -34,10 +34,9 @@ public class TxPoolBesuPendingTransactions implements JsonRpcMethod {
|
||||
|
||||
final PendingTransactionFilter pendingTransactionFilter;
|
||||
|
||||
private final AbstractPendingTransactionsSorter pendingTransactions;
|
||||
private final PendingTransactions pendingTransactions;
|
||||
|
||||
public TxPoolBesuPendingTransactions(
|
||||
final AbstractPendingTransactionsSorter pendingTransactions) {
|
||||
public TxPoolBesuPendingTransactions(final PendingTransactions pendingTransactions) {
|
||||
this.pendingTransactions = pendingTransactions;
|
||||
this.pendingTransactionFilter = new PendingTransactionFilter();
|
||||
}
|
||||
|
||||
@@ -20,15 +20,15 @@ import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.JsonRpcRespon
|
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.JsonRpcSuccessResponse;
|
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.results.PendingTransactionsStatisticsResult;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransaction;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public class TxPoolBesuStatistics implements JsonRpcMethod {
|
||||
|
||||
private final AbstractPendingTransactionsSorter pendingTransactions;
|
||||
private final PendingTransactions pendingTransactions;
|
||||
|
||||
public TxPoolBesuStatistics(final AbstractPendingTransactionsSorter pendingTransactions) {
|
||||
public TxPoolBesuStatistics(final PendingTransactions pendingTransactions) {
|
||||
this.pendingTransactions = pendingTransactions;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,13 +19,13 @@ import org.hyperledger.besu.ethereum.api.jsonrpc.internal.JsonRpcRequestContext;
|
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.JsonRpcResponse;
|
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.JsonRpcSuccessResponse;
|
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.results.PendingTransactionsResult;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
|
||||
public class TxPoolBesuTransactions implements JsonRpcMethod {
|
||||
|
||||
private final AbstractPendingTransactionsSorter pendingTransactions;
|
||||
private final PendingTransactions pendingTransactions;
|
||||
|
||||
public TxPoolBesuTransactions(final AbstractPendingTransactionsSorter pendingTransactions) {
|
||||
public TxPoolBesuTransactions(final PendingTransactions pendingTransactions) {
|
||||
this.pendingTransactions = pendingTransactions;
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ import static org.mockito.Mockito.when;
|
||||
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.ethereum.api.query.BlockchainQueries;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.BaseFeePendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.GasPricePendingTransactionsSorter;
|
||||
|
||||
@@ -41,7 +41,7 @@ public class LatestNonceProviderTest {
|
||||
private final BlockchainQueries blockchainQueries = mock(BlockchainQueries.class);
|
||||
private LatestNonceProvider nonceProvider;
|
||||
|
||||
@Parameterized.Parameter public AbstractPendingTransactionsSorter pendingTransactions;
|
||||
@Parameterized.Parameter public PendingTransactions pendingTransactions;
|
||||
|
||||
@Parameterized.Parameters
|
||||
public static Collection<Object[]> data() {
|
||||
|
||||
@@ -27,7 +27,7 @@ import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.JsonRpcSucces
|
||||
import org.hyperledger.besu.ethereum.api.query.BlockchainQueries;
|
||||
import org.hyperledger.besu.ethereum.chain.Blockchain;
|
||||
import org.hyperledger.besu.ethereum.chain.ChainHead;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.BaseFeePendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.GasPricePendingTransactionsSorter;
|
||||
|
||||
@@ -57,8 +57,7 @@ class EthGetTransactionCountTest {
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("data")
|
||||
void shouldUsePendingTransactionsWhenToldTo(
|
||||
final AbstractPendingTransactionsSorter pendingTransactions) {
|
||||
void shouldUsePendingTransactionsWhenToldTo(final PendingTransactions pendingTransactions) {
|
||||
setup(pendingTransactions);
|
||||
|
||||
final Address address = Address.fromHexString(pendingTransactionString);
|
||||
@@ -75,7 +74,7 @@ class EthGetTransactionCountTest {
|
||||
@ParameterizedTest
|
||||
@MethodSource("data")
|
||||
void shouldUseLatestTransactionsWhenNoPendingTransactions(
|
||||
final AbstractPendingTransactionsSorter pendingTransactions) {
|
||||
final PendingTransactions pendingTransactions) {
|
||||
setup(pendingTransactions);
|
||||
|
||||
final Address address = Address.fromHexString(pendingTransactionString);
|
||||
@@ -91,8 +90,7 @@ class EthGetTransactionCountTest {
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("data")
|
||||
void shouldUseLatestWhenItIsBiggerThanPending(
|
||||
final AbstractPendingTransactionsSorter pendingTransactions) {
|
||||
void shouldUseLatestWhenItIsBiggerThanPending(final PendingTransactions pendingTransactions) {
|
||||
setup(pendingTransactions);
|
||||
|
||||
final Address address = Address.fromHexString(pendingTransactionString);
|
||||
@@ -109,8 +107,7 @@ class EthGetTransactionCountTest {
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("data")
|
||||
void shouldReturnPendingWithHighNonce(
|
||||
final AbstractPendingTransactionsSorter pendingTransactions) {
|
||||
void shouldReturnPendingWithHighNonce(final PendingTransactions pendingTransactions) {
|
||||
setup(pendingTransactions);
|
||||
|
||||
final Address address = Address.fromHexString(pendingTransactionString);
|
||||
@@ -127,8 +124,7 @@ class EthGetTransactionCountTest {
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("data")
|
||||
void shouldReturnLatestWithHighNonce(
|
||||
final AbstractPendingTransactionsSorter pendingTransactions) {
|
||||
void shouldReturnLatestWithHighNonce(final PendingTransactions pendingTransactions) {
|
||||
setup(pendingTransactions);
|
||||
|
||||
final Address address = Address.fromHexString(pendingTransactionString);
|
||||
@@ -143,7 +139,7 @@ class EthGetTransactionCountTest {
|
||||
assertThat(response.getResult()).isEqualTo("0xfffffffffffffffe");
|
||||
}
|
||||
|
||||
private void setup(final AbstractPendingTransactionsSorter pendingTransactions) {
|
||||
private void setup(final PendingTransactions pendingTransactions) {
|
||||
ethGetTransactionCount = new EthGetTransactionCount(blockchainQueries, pendingTransactions);
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ import org.hyperledger.besu.ethereum.core.ProcessableBlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.SealableBlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.Transaction;
|
||||
import org.hyperledger.besu.ethereum.core.Withdrawal;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.mainnet.AbstractBlockProcessor;
|
||||
import org.hyperledger.besu.ethereum.mainnet.BodyValidation;
|
||||
import org.hyperledger.besu.ethereum.mainnet.DifficultyCalculator;
|
||||
@@ -72,7 +72,7 @@ public abstract class AbstractBlockCreator implements AsyncBlockCreator {
|
||||
protected final Supplier<Optional<Long>> targetGasLimitSupplier;
|
||||
|
||||
private final ExtraDataCalculator extraDataCalculator;
|
||||
private final AbstractPendingTransactionsSorter pendingTransactions;
|
||||
private final PendingTransactions pendingTransactions;
|
||||
protected final ProtocolContext protocolContext;
|
||||
protected final ProtocolSchedule protocolSchedule;
|
||||
protected final BlockHeaderFunctions blockHeaderFunctions;
|
||||
@@ -88,7 +88,7 @@ public abstract class AbstractBlockCreator implements AsyncBlockCreator {
|
||||
final MiningBeneficiaryCalculator miningBeneficiaryCalculator,
|
||||
final Supplier<Optional<Long>> targetGasLimitSupplier,
|
||||
final ExtraDataCalculator extraDataCalculator,
|
||||
final AbstractPendingTransactionsSorter pendingTransactions,
|
||||
final PendingTransactions pendingTransactions,
|
||||
final ProtocolContext protocolContext,
|
||||
final ProtocolSchedule protocolSchedule,
|
||||
final Wei minTransactionGasPrice,
|
||||
|
||||
@@ -21,7 +21,7 @@ import org.hyperledger.besu.ethereum.chain.MinedBlockObserver;
|
||||
import org.hyperledger.besu.ethereum.chain.PoWObserver;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.MiningParameters;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.mainnet.AbstractGasLimitSpecification;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
import org.hyperledger.besu.util.Subscribers;
|
||||
@@ -45,7 +45,7 @@ public abstract class AbstractMinerExecutor<M extends BlockMiner<? extends Abstr
|
||||
private final ExecutorService executorService = Executors.newCachedThreadPool();
|
||||
protected final ProtocolContext protocolContext;
|
||||
protected final ProtocolSchedule protocolSchedule;
|
||||
protected final AbstractPendingTransactionsSorter pendingTransactions;
|
||||
protected final PendingTransactions pendingTransactions;
|
||||
protected final AbstractBlockScheduler blockScheduler;
|
||||
|
||||
protected volatile Bytes extraData;
|
||||
@@ -58,7 +58,7 @@ public abstract class AbstractMinerExecutor<M extends BlockMiner<? extends Abstr
|
||||
protected AbstractMinerExecutor(
|
||||
final ProtocolContext protocolContext,
|
||||
final ProtocolSchedule protocolSchedule,
|
||||
final AbstractPendingTransactionsSorter pendingTransactions,
|
||||
final PendingTransactions pendingTransactions,
|
||||
final MiningParameters miningParams,
|
||||
final AbstractBlockScheduler blockScheduler) {
|
||||
this.protocolContext = protocolContext;
|
||||
|
||||
@@ -23,8 +23,8 @@ import org.hyperledger.besu.ethereum.core.MutableWorldState;
|
||||
import org.hyperledger.besu.ethereum.core.ProcessableBlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.Transaction;
|
||||
import org.hyperledger.besu.ethereum.core.TransactionReceipt;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter.TransactionSelectionResult;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions.TransactionSelectionResult;
|
||||
import org.hyperledger.besu.ethereum.mainnet.AbstractBlockProcessor;
|
||||
import org.hyperledger.besu.ethereum.mainnet.MainnetTransactionProcessor;
|
||||
import org.hyperledger.besu.ethereum.mainnet.MainnetTransactionValidator;
|
||||
@@ -188,7 +188,7 @@ public class BlockTransactionSelector {
|
||||
private final ProcessableBlockHeader processableBlockHeader;
|
||||
private final Blockchain blockchain;
|
||||
private final MutableWorldState worldState;
|
||||
private final AbstractPendingTransactionsSorter pendingTransactions;
|
||||
private final PendingTransactions pendingTransactions;
|
||||
private final AbstractBlockProcessor.TransactionReceiptFactory transactionReceiptFactory;
|
||||
private final Address miningBeneficiary;
|
||||
private final FeeMarket feeMarket;
|
||||
@@ -200,7 +200,7 @@ public class BlockTransactionSelector {
|
||||
final MainnetTransactionProcessor transactionProcessor,
|
||||
final Blockchain blockchain,
|
||||
final MutableWorldState worldState,
|
||||
final AbstractPendingTransactionsSorter pendingTransactions,
|
||||
final PendingTransactions pendingTransactions,
|
||||
final ProcessableBlockHeader processableBlockHeader,
|
||||
final AbstractBlockProcessor.TransactionReceiptFactory transactionReceiptFactory,
|
||||
final Wei minTransactionGasPrice,
|
||||
|
||||
@@ -20,7 +20,7 @@ import org.hyperledger.besu.ethereum.ProtocolContext;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeaderBuilder;
|
||||
import org.hyperledger.besu.ethereum.core.SealableBlockHeader;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.mainnet.EthHash;
|
||||
import org.hyperledger.besu.ethereum.mainnet.PoWSolution;
|
||||
import org.hyperledger.besu.ethereum.mainnet.PoWSolver;
|
||||
@@ -43,7 +43,7 @@ public class PoWBlockCreator extends AbstractBlockCreator {
|
||||
final Address coinbase,
|
||||
final Supplier<Optional<Long>> targetGasLimitSupplier,
|
||||
final ExtraDataCalculator extraDataCalculator,
|
||||
final AbstractPendingTransactionsSorter pendingTransactions,
|
||||
final PendingTransactions pendingTransactions,
|
||||
final ProtocolContext protocolContext,
|
||||
final ProtocolSchedule protocolSchedule,
|
||||
final PoWSolver nonceSolver,
|
||||
|
||||
@@ -20,7 +20,7 @@ import org.hyperledger.besu.ethereum.chain.MinedBlockObserver;
|
||||
import org.hyperledger.besu.ethereum.chain.PoWObserver;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.MiningParameters;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.mainnet.EpochCalculator;
|
||||
import org.hyperledger.besu.ethereum.mainnet.PoWSolver;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
@@ -42,7 +42,7 @@ public class PoWMinerExecutor extends AbstractMinerExecutor<PoWBlockMiner> {
|
||||
public PoWMinerExecutor(
|
||||
final ProtocolContext protocolContext,
|
||||
final ProtocolSchedule protocolSchedule,
|
||||
final AbstractPendingTransactionsSorter pendingTransactions,
|
||||
final PendingTransactions pendingTransactions,
|
||||
final MiningParameters miningParams,
|
||||
final AbstractBlockScheduler blockScheduler,
|
||||
final EpochCalculator epochCalculator,
|
||||
|
||||
@@ -40,7 +40,7 @@ import org.hyperledger.besu.ethereum.core.TransactionReceipt;
|
||||
import org.hyperledger.besu.ethereum.core.TransactionTestFixture;
|
||||
import org.hyperledger.besu.ethereum.difficulty.fixed.FixedDifficultyProtocolSchedule;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.ImmutableTransactionPoolConfiguration;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.BaseFeePendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.mainnet.MainnetTransactionProcessor;
|
||||
import org.hyperledger.besu.ethereum.mainnet.MainnetTransactionValidator;
|
||||
@@ -81,7 +81,7 @@ public abstract class AbstractBlockTransactionSelectorTest {
|
||||
protected final MetricsSystem metricsSystem = new NoOpMetricsSystem();
|
||||
|
||||
protected final Blockchain blockchain = new ReferenceTestBlockchain();
|
||||
protected AbstractPendingTransactionsSorter pendingTransactions;
|
||||
protected PendingTransactions pendingTransactions;
|
||||
protected MutableWorldState worldState;
|
||||
@Mock protected MainnetTransactionProcessor transactionProcessor;
|
||||
@Mock protected MainnetTransactionValidator transactionValidator;
|
||||
@@ -89,12 +89,12 @@ public abstract class AbstractBlockTransactionSelectorTest {
|
||||
@Before
|
||||
public void setup() {
|
||||
worldState = InMemoryKeyValueStorageProvider.createInMemoryWorldState();
|
||||
pendingTransactions = createPendingTransactionsSorter();
|
||||
pendingTransactions = createPendingTransactions();
|
||||
when(transactionProcessor.getTransactionValidator()).thenReturn(transactionValidator);
|
||||
when(transactionValidator.getGoQuorumCompatibilityMode()).thenReturn(true);
|
||||
}
|
||||
|
||||
protected abstract AbstractPendingTransactionsSorter createPendingTransactionsSorter();
|
||||
protected abstract PendingTransactions createPendingTransactions();
|
||||
|
||||
private Boolean isCancelled() {
|
||||
return false;
|
||||
|
||||
@@ -19,7 +19,7 @@ import static org.mockito.Mockito.when;
|
||||
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.ImmutableTransactionPoolConfiguration;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.GasPricePendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket;
|
||||
import org.hyperledger.besu.testutil.TestClock;
|
||||
@@ -31,7 +31,7 @@ public class LegacyFeeMarketBlockTransactionSelectorTest
|
||||
extends AbstractBlockTransactionSelectorTest {
|
||||
|
||||
@Override
|
||||
protected AbstractPendingTransactionsSorter createPendingTransactionsSorter() {
|
||||
protected PendingTransactions createPendingTransactions() {
|
||||
|
||||
return new GasPricePendingTransactionsSorter(
|
||||
ImmutableTransactionPoolConfiguration.builder()
|
||||
|
||||
@@ -25,7 +25,7 @@ import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.ProcessableBlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.Transaction;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.ImmutableTransactionPoolConfiguration;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.BaseFeePendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket;
|
||||
import org.hyperledger.besu.plugin.data.TransactionType;
|
||||
@@ -42,7 +42,7 @@ public class LondonFeeMarketBlockTransactionSelectorTest
|
||||
extends AbstractBlockTransactionSelectorTest {
|
||||
|
||||
@Override
|
||||
protected AbstractPendingTransactionsSorter createPendingTransactionsSorter() {
|
||||
protected PendingTransactions createPendingTransactions() {
|
||||
return new BaseFeePendingTransactionsSorter(
|
||||
ImmutableTransactionPoolConfiguration.builder()
|
||||
.txPoolMaxSize(5)
|
||||
|
||||
@@ -39,7 +39,7 @@ import org.hyperledger.besu.ethereum.core.SealableBlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.Transaction;
|
||||
import org.hyperledger.besu.ethereum.core.TransactionTestFixture;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.ImmutableTransactionPoolConfiguration;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.GasPricePendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.mainnet.MainnetProtocolSchedule;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
@@ -84,7 +84,7 @@ public abstract class AbstractIsolationTests {
|
||||
protected final GenesisState genesisState =
|
||||
GenesisState.fromConfig(GenesisConfigFile.development(), protocolSchedule);
|
||||
protected final MutableBlockchain blockchain = createInMemoryBlockchain(genesisState.getBlock());
|
||||
protected final AbstractPendingTransactionsSorter sorter =
|
||||
protected final PendingTransactions sorter =
|
||||
new GasPricePendingTransactionsSorter(
|
||||
ImmutableTransactionPoolConfiguration.builder().txPoolMaxSize(100).build(),
|
||||
Clock.systemUTC(),
|
||||
@@ -173,7 +173,7 @@ public abstract class AbstractIsolationTests {
|
||||
final MiningBeneficiaryCalculator miningBeneficiaryCalculator,
|
||||
final Supplier<Optional<Long>> targetGasLimitSupplier,
|
||||
final ExtraDataCalculator extraDataCalculator,
|
||||
final AbstractPendingTransactionsSorter pendingTransactions,
|
||||
final PendingTransactions pendingTransactions,
|
||||
final ProtocolContext protocolContext,
|
||||
final ProtocolSchedule protocolSchedule,
|
||||
final Wei minTransactionGasPrice,
|
||||
@@ -196,7 +196,7 @@ public abstract class AbstractIsolationTests {
|
||||
final BlockHeader parentHeader,
|
||||
final ProtocolContext protocolContext,
|
||||
final ProtocolSchedule protocolSchedule,
|
||||
final AbstractPendingTransactionsSorter sorter) {
|
||||
final PendingTransactions sorter) {
|
||||
return new TestBlockCreator(
|
||||
Address.ZERO,
|
||||
__ -> Address.ZERO,
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
* Copyright Hyperledger Besu Contributors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
|
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations under the License.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.ethereum.eth.transactions;
|
||||
|
||||
import org.hyperledger.besu.datatypes.Address;
|
||||
import org.hyperledger.besu.datatypes.Hash;
|
||||
import org.hyperledger.besu.ethereum.core.Block;
|
||||
import org.hyperledger.besu.ethereum.core.Transaction;
|
||||
import org.hyperledger.besu.evm.account.Account;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.OptionalLong;
|
||||
import java.util.Set;
|
||||
|
||||
public interface PendingTransactions {
|
||||
|
||||
void reset();
|
||||
|
||||
void evictOldTransactions();
|
||||
|
||||
List<Transaction> getLocalTransactions();
|
||||
|
||||
TransactionAddedStatus addRemoteTransaction(
|
||||
final Transaction transaction, final Optional<Account> maybeSenderAccount);
|
||||
|
||||
TransactionAddedStatus addLocalTransaction(
|
||||
final Transaction transaction, final Optional<Account> maybeSenderAccount);
|
||||
|
||||
void removeTransaction(final Transaction transaction);
|
||||
|
||||
void transactionAddedToBlock(final Transaction transaction);
|
||||
|
||||
void selectTransactions(final TransactionSelector selector);
|
||||
|
||||
long maxSize();
|
||||
|
||||
int size();
|
||||
|
||||
boolean containsTransaction(final Hash transactionHash);
|
||||
|
||||
Optional<Transaction> getTransactionByHash(final Hash transactionHash);
|
||||
|
||||
Set<PendingTransaction> getPendingTransactions();
|
||||
|
||||
long subscribePendingTransactions(final PendingTransactionListener listener);
|
||||
|
||||
void unsubscribePendingTransactions(final long id);
|
||||
|
||||
long subscribeDroppedTransactions(final PendingTransactionDroppedListener listener);
|
||||
|
||||
void unsubscribeDroppedTransactions(final long id);
|
||||
|
||||
OptionalLong getNextNonceForSender(final Address sender);
|
||||
|
||||
void manageBlockAdded(final Block block);
|
||||
|
||||
String toTraceLog(final boolean withTransactionsBySender, final boolean withLowestInvalidNonce);
|
||||
|
||||
List<Transaction> signalInvalidAndGetDependentTransactions(final Transaction transaction);
|
||||
|
||||
boolean isLocalSender(final Address sender);
|
||||
|
||||
enum TransactionSelectionResult {
|
||||
DELETE_TRANSACTION_AND_CONTINUE,
|
||||
CONTINUE,
|
||||
COMPLETE_OPERATION
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
interface TransactionSelector {
|
||||
TransactionSelectionResult evaluateTransaction(final Transaction transaction);
|
||||
}
|
||||
}
|
||||
@@ -22,7 +22,6 @@ import org.hyperledger.besu.ethereum.eth.manager.EthContext;
|
||||
import org.hyperledger.besu.ethereum.eth.manager.EthPeer;
|
||||
import org.hyperledger.besu.ethereum.eth.messages.EthPV65;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool.TransactionBatchAddedListener;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@@ -35,7 +34,7 @@ import org.slf4j.LoggerFactory;
|
||||
public class TransactionBroadcaster implements TransactionBatchAddedListener {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(TransactionBroadcaster.class);
|
||||
|
||||
private final AbstractPendingTransactionsSorter pendingTransactions;
|
||||
private final PendingTransactions pendingTransactions;
|
||||
private final PeerTransactionTracker transactionTracker;
|
||||
private final TransactionsMessageSender transactionsMessageSender;
|
||||
private final NewPooledTransactionHashesMessageSender newPooledTransactionHashesMessageSender;
|
||||
@@ -44,7 +43,7 @@ public class TransactionBroadcaster implements TransactionBatchAddedListener {
|
||||
|
||||
public TransactionBroadcaster(
|
||||
final EthContext ethContext,
|
||||
final AbstractPendingTransactionsSorter pendingTransactions,
|
||||
final PendingTransactions pendingTransactions,
|
||||
final PeerTransactionTracker transactionTracker,
|
||||
final TransactionsMessageSender transactionsMessageSender,
|
||||
final NewPooledTransactionHashesMessageSender newPooledTransactionHashesMessageSender) {
|
||||
|
||||
@@ -34,7 +34,6 @@ import org.hyperledger.besu.ethereum.core.MiningParameters;
|
||||
import org.hyperledger.besu.ethereum.core.Transaction;
|
||||
import org.hyperledger.besu.ethereum.eth.manager.EthContext;
|
||||
import org.hyperledger.besu.ethereum.eth.manager.EthPeer;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.mainnet.MainnetTransactionValidator;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
import org.hyperledger.besu.ethereum.mainnet.TransactionValidationParams;
|
||||
@@ -73,7 +72,7 @@ public class TransactionPool implements BlockAddedObserver {
|
||||
|
||||
private static final String REMOTE = "remote";
|
||||
private static final String LOCAL = "local";
|
||||
private final AbstractPendingTransactionsSorter pendingTransactions;
|
||||
private final PendingTransactions pendingTransactions;
|
||||
private final ProtocolSchedule protocolSchedule;
|
||||
private final ProtocolContext protocolContext;
|
||||
private final TransactionBroadcaster transactionBroadcaster;
|
||||
@@ -83,7 +82,7 @@ public class TransactionPool implements BlockAddedObserver {
|
||||
private final AtomicBoolean isPoolEnabled = new AtomicBoolean(true);
|
||||
|
||||
public TransactionPool(
|
||||
final AbstractPendingTransactionsSorter pendingTransactions,
|
||||
final PendingTransactions pendingTransactions,
|
||||
final ProtocolSchedule protocolSchedule,
|
||||
final ProtocolContext protocolContext,
|
||||
final TransactionBroadcaster transactionBroadcaster,
|
||||
@@ -261,7 +260,7 @@ public class TransactionPool implements BlockAddedObserver {
|
||||
.getTransactionValidator();
|
||||
}
|
||||
|
||||
public AbstractPendingTransactionsSorter getPendingTransactions() {
|
||||
public PendingTransactions getPendingTransactions() {
|
||||
return pendingTransactions;
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@ import org.hyperledger.besu.ethereum.eth.manager.EthContext;
|
||||
import org.hyperledger.besu.ethereum.eth.messages.EthPV62;
|
||||
import org.hyperledger.besu.ethereum.eth.messages.EthPV65;
|
||||
import org.hyperledger.besu.ethereum.eth.sync.state.SyncState;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.BaseFeePendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.GasPricePendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
@@ -47,8 +46,8 @@ public class TransactionPoolFactory {
|
||||
final MiningParameters miningParameters,
|
||||
final TransactionPoolConfiguration transactionPoolConfiguration) {
|
||||
|
||||
final AbstractPendingTransactionsSorter pendingTransactions =
|
||||
createPendingTransactionsSorter(
|
||||
final PendingTransactions pendingTransactions =
|
||||
createPendingTransactions(
|
||||
protocolSchedule, protocolContext, clock, metricsSystem, transactionPoolConfiguration);
|
||||
|
||||
final PeerTransactionTracker transactionTracker = new PeerTransactionTracker();
|
||||
@@ -80,7 +79,7 @@ public class TransactionPoolFactory {
|
||||
final SyncState syncState,
|
||||
final MiningParameters miningParameters,
|
||||
final TransactionPoolConfiguration transactionPoolConfiguration,
|
||||
final AbstractPendingTransactionsSorter pendingTransactions,
|
||||
final PendingTransactions pendingTransactions,
|
||||
final PeerTransactionTracker transactionTracker,
|
||||
final TransactionsMessageSender transactionsMessageSender,
|
||||
final NewPooledTransactionHashesMessageSender newPooledTransactionHashesMessageSender) {
|
||||
@@ -172,7 +171,7 @@ public class TransactionPoolFactory {
|
||||
.subscribe(EthPV65.NEW_POOLED_TRANSACTION_HASHES, pooledTransactionsMessageHandler);
|
||||
}
|
||||
|
||||
private static AbstractPendingTransactionsSorter createPendingTransactionsSorter(
|
||||
private static PendingTransactions createPendingTransactions(
|
||||
final ProtocolSchedule protocolSchedule,
|
||||
final ProtocolContext protocolContext,
|
||||
final Clock clock,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright ConsenSys AG.
|
||||
* Copyright Hyperledger Besu Contributors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
@@ -30,6 +30,7 @@ import org.hyperledger.besu.ethereum.core.Transaction;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransaction;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactionDroppedListener;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactionListener;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.TransactionAddedStatus;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolReplacementHandler;
|
||||
@@ -68,7 +69,7 @@ import org.slf4j.LoggerFactory;
|
||||
*
|
||||
* <p>This class is safe for use across multiple threads.
|
||||
*/
|
||||
public abstract class AbstractPendingTransactionsSorter {
|
||||
public abstract class AbstractPendingTransactionsSorter implements PendingTransactions {
|
||||
private static final int DEFAULT_LOWEST_INVALID_KNOWN_NONCE_CACHE = 10_000;
|
||||
private static final Logger LOG =
|
||||
LoggerFactory.getLogger(AbstractPendingTransactionsSorter.class);
|
||||
@@ -134,12 +135,14 @@ public abstract class AbstractPendingTransactionsSorter {
|
||||
pendingTransactions::size);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
pendingTransactions.clear();
|
||||
transactionsBySender.clear();
|
||||
lowestInvalidKnownNonceCache.reset();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void evictOldTransactions() {
|
||||
final Instant removeTransactionsBefore =
|
||||
clock.instant().minus(poolConfig.getPendingTxRetentionPeriod(), ChronoUnit.HOURS);
|
||||
@@ -153,6 +156,7 @@ public abstract class AbstractPendingTransactionsSorter {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Transaction> getLocalTransactions() {
|
||||
return pendingTransactions.values().stream()
|
||||
.filter(PendingTransaction::isReceivedFromLocalSource)
|
||||
@@ -160,6 +164,7 @@ public abstract class AbstractPendingTransactionsSorter {
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public TransactionAddedStatus addRemoteTransaction(
|
||||
final Transaction transaction, final Optional<Account> maybeSenderAccount) {
|
||||
|
||||
@@ -182,6 +187,7 @@ public abstract class AbstractPendingTransactionsSorter {
|
||||
return transactionAddedStatus;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TransactionAddedStatus addLocalTransaction(
|
||||
final Transaction transaction, final Optional<Account> maybeSenderAccount) {
|
||||
final TransactionAddedStatus transactionAdded =
|
||||
@@ -194,11 +200,13 @@ public abstract class AbstractPendingTransactionsSorter {
|
||||
return transactionAdded;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeTransaction(final Transaction transaction) {
|
||||
removeTransaction(transaction, false);
|
||||
notifyTransactionDropped(transaction);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void transactionAddedToBlock(final Transaction transaction) {
|
||||
removeTransaction(transaction, true);
|
||||
lowestInvalidKnownNonceCache.registerValidTransaction(transaction);
|
||||
@@ -218,6 +226,7 @@ public abstract class AbstractPendingTransactionsSorter {
|
||||
// block could end up with transactions of the new type.
|
||||
// This seems like it would be very rare but worth it to document that we don't handle that case
|
||||
// right now.
|
||||
@Override
|
||||
public void selectTransactions(final TransactionSelector selector) {
|
||||
synchronized (lock) {
|
||||
final Set<Transaction> transactionsToRemove = new HashSet<>();
|
||||
@@ -328,43 +337,53 @@ public abstract class AbstractPendingTransactionsSorter {
|
||||
transactionDroppedListeners.forEach(listener -> listener.onTransactionDropped(transaction));
|
||||
}
|
||||
|
||||
@Override
|
||||
public long maxSize() {
|
||||
return poolConfig.getTxPoolMaxSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
return pendingTransactions.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsTransaction(final Hash transactionHash) {
|
||||
return pendingTransactions.containsKey(transactionHash);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<Transaction> getTransactionByHash(final Hash transactionHash) {
|
||||
return Optional.ofNullable(pendingTransactions.get(transactionHash))
|
||||
.map(PendingTransaction::getTransaction);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<PendingTransaction> getPendingTransactions() {
|
||||
return new HashSet<>(pendingTransactions.values());
|
||||
}
|
||||
|
||||
@Override
|
||||
public long subscribePendingTransactions(final PendingTransactionListener listener) {
|
||||
return pendingTransactionSubscribers.subscribe(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unsubscribePendingTransactions(final long id) {
|
||||
pendingTransactionSubscribers.unsubscribe(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long subscribeDroppedTransactions(final PendingTransactionDroppedListener listener) {
|
||||
return transactionDroppedListeners.subscribe(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unsubscribeDroppedTransactions(final long id) {
|
||||
transactionDroppedListeners.unsubscribe(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public OptionalLong getNextNonceForSender(final Address sender) {
|
||||
final PendingTransactionsForSender pendingTransactionsForSender =
|
||||
transactionsBySender.get(sender);
|
||||
@@ -373,6 +392,7 @@ public abstract class AbstractPendingTransactionsSorter {
|
||||
: pendingTransactionsForSender.maybeNextNonce();
|
||||
}
|
||||
|
||||
@Override
|
||||
public abstract void manageBlockAdded(final Block block);
|
||||
|
||||
private void removeTransaction(final Transaction transaction, final boolean addedToBlock) {
|
||||
@@ -444,6 +464,7 @@ public abstract class AbstractPendingTransactionsSorter {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toTraceLog(
|
||||
final boolean withTransactionsBySender, final boolean withLowestInvalidNonce) {
|
||||
synchronized (lock) {
|
||||
@@ -488,6 +509,7 @@ public abstract class AbstractPendingTransactionsSorter {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Transaction> signalInvalidAndGetDependentTransactions(final Transaction transaction) {
|
||||
final long invalidNonce = lowestInvalidKnownNonceCache.registerInvalidTransaction(transaction);
|
||||
|
||||
@@ -510,18 +532,8 @@ public abstract class AbstractPendingTransactionsSorter {
|
||||
return List.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLocalSender(final Address sender) {
|
||||
return localSenders.contains(sender);
|
||||
}
|
||||
|
||||
public enum TransactionSelectionResult {
|
||||
DELETE_TRANSACTION_AND_CONTINUE,
|
||||
CONTINUE,
|
||||
COMPLETE_OPERATION
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
public interface TransactionSelector {
|
||||
TransactionSelectionResult evaluateTransaction(final Transaction transaction);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,7 +59,6 @@ import org.hyperledger.besu.ethereum.eth.manager.EthProtocolManagerTestUtil;
|
||||
import org.hyperledger.besu.ethereum.eth.manager.EthScheduler;
|
||||
import org.hyperledger.besu.ethereum.eth.manager.RespondingEthPeer;
|
||||
import org.hyperledger.besu.ethereum.eth.messages.EthPV65;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.mainnet.MainnetTransactionValidator;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec;
|
||||
@@ -108,7 +107,7 @@ public abstract class AbstractTransactionPoolTest {
|
||||
protected MutableBlockchain blockchain;
|
||||
private TransactionBroadcaster transactionBroadcaster;
|
||||
|
||||
protected AbstractPendingTransactionsSorter transactions;
|
||||
protected PendingTransactions transactions;
|
||||
private final Transaction transaction1 = createTransaction(1);
|
||||
private final Transaction transaction2 = createTransaction(2);
|
||||
|
||||
@@ -122,7 +121,7 @@ public abstract class AbstractTransactionPoolTest {
|
||||
private PeerTransactionTracker peerTransactionTracker;
|
||||
private ArgumentCaptor<Runnable> syncTaskCapture;
|
||||
|
||||
protected abstract AbstractPendingTransactionsSorter createPendingTransactionsSorter();
|
||||
protected abstract PendingTransactions createPendingTransactionsSorter();
|
||||
|
||||
protected abstract ExecutionContextTestFixture createExecutionContextTestFixture();
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@ import org.hyperledger.besu.ethereum.eth.manager.EthPeer;
|
||||
import org.hyperledger.besu.ethereum.eth.manager.MockPeerConnection;
|
||||
import org.hyperledger.besu.ethereum.eth.messages.EthPV65;
|
||||
import org.hyperledger.besu.ethereum.eth.messages.NewPooledTransactionHashesMessage;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.BaseFeePendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.GasPricePendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.p2p.rlpx.wire.MessageData;
|
||||
@@ -63,7 +62,7 @@ public class NewPooledTransactionHashesMessageSenderTest {
|
||||
private final Transaction transaction2 = generator.transaction();
|
||||
private final Transaction transaction3 = generator.transaction();
|
||||
|
||||
@Parameterized.Parameter public AbstractPendingTransactionsSorter pendingTransactions;
|
||||
@Parameterized.Parameter public PendingTransactions pendingTransactions;
|
||||
|
||||
private PeerTransactionTracker transactionTracker;
|
||||
private NewPooledTransactionHashesMessageSender messageSender;
|
||||
|
||||
@@ -26,7 +26,7 @@ import org.hyperledger.besu.datatypes.Wei;
|
||||
import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.Transaction;
|
||||
import org.hyperledger.besu.ethereum.core.TransactionTestFixture;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter.TransactionSelectionResult;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions.TransactionSelectionResult;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.BaseFeePendingTransactionsSorter;
|
||||
import org.hyperledger.besu.metrics.StubMetricsSystem;
|
||||
import org.hyperledger.besu.plugin.data.TransactionType;
|
||||
|
||||
@@ -32,7 +32,6 @@ import org.hyperledger.besu.ethereum.eth.manager.EthPeer;
|
||||
import org.hyperledger.besu.ethereum.eth.manager.EthPeers;
|
||||
import org.hyperledger.besu.ethereum.eth.manager.EthScheduler;
|
||||
import org.hyperledger.besu.ethereum.eth.messages.EthPV65;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
@@ -56,7 +55,7 @@ public class TransactionBroadcasterTest {
|
||||
@Mock private EthContext ethContext;
|
||||
@Mock private EthPeers ethPeers;
|
||||
@Mock private EthScheduler ethScheduler;
|
||||
@Mock private AbstractPendingTransactionsSorter pendingTransactions;
|
||||
@Mock private PendingTransactions pendingTransactions;
|
||||
@Mock private PeerTransactionTracker transactionTracker;
|
||||
@Mock private TransactionsMessageSender transactionsMessageSender;
|
||||
@Mock private NewPooledTransactionHashesMessageSender newPooledTransactionHashesMessageSender;
|
||||
|
||||
@@ -32,7 +32,6 @@ import org.hyperledger.besu.ethereum.core.ExecutionContextTestFixture;
|
||||
import org.hyperledger.besu.ethereum.core.Transaction;
|
||||
import org.hyperledger.besu.ethereum.core.TransactionReceipt;
|
||||
import org.hyperledger.besu.ethereum.core.TransactionTestFixture;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.GasPricePendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ValidationResult;
|
||||
import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket;
|
||||
@@ -54,7 +53,7 @@ import org.mockito.junit.MockitoJUnitRunner;
|
||||
public class TransactionPoolLegacyTest extends AbstractTransactionPoolTest {
|
||||
|
||||
@Override
|
||||
protected AbstractPendingTransactionsSorter createPendingTransactionsSorter() {
|
||||
protected PendingTransactions createPendingTransactionsSorter() {
|
||||
|
||||
return new GasPricePendingTransactionsSorter(
|
||||
ImmutableTransactionPoolConfiguration.builder()
|
||||
|
||||
@@ -33,7 +33,6 @@ import org.hyperledger.besu.ethereum.core.PrivacyParameters;
|
||||
import org.hyperledger.besu.ethereum.core.Transaction;
|
||||
import org.hyperledger.besu.ethereum.core.TransactionReceipt;
|
||||
import org.hyperledger.besu.ethereum.core.TransactionTestFixture;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.BaseFeePendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.mainnet.MainnetBlockHeaderFunctions;
|
||||
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
|
||||
@@ -50,7 +49,6 @@ import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
public class TransactionPoolLondonTest extends AbstractTransactionPoolTest {
|
||||
@@ -58,7 +56,7 @@ public class TransactionPoolLondonTest extends AbstractTransactionPoolTest {
|
||||
private static final Wei BASE_FEE_FLOOR = Wei.of(7L);
|
||||
|
||||
@Override
|
||||
protected AbstractPendingTransactionsSorter createPendingTransactionsSorter() {
|
||||
protected PendingTransactions createPendingTransactionsSorter() {
|
||||
|
||||
return new BaseFeePendingTransactionsSorter(
|
||||
ImmutableTransactionPoolConfiguration.builder()
|
||||
@@ -269,13 +267,6 @@ public class TransactionPoolLondonTest extends AbstractTransactionPoolTest {
|
||||
return transactions.size();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Override
|
||||
@Ignore
|
||||
public void shouldRejectLocalTransactionIfFeeCapExceeded() {
|
||||
// ignore since this is going to fail until the branch with the fix is released
|
||||
}
|
||||
|
||||
private void whenBlockBaseFeeIs(final Wei baseFee) {
|
||||
final BlockHeader header =
|
||||
BlockHeaderBuilder.fromHeader(blockchain.getChainHeadHeader())
|
||||
|
||||
@@ -12,15 +12,15 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.ethereum.eth.transactions;
|
||||
package org.hyperledger.besu.ethereum.eth.transactions.sorter;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions.TransactionSelectionResult.COMPLETE_OPERATION;
|
||||
import static org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions.TransactionSelectionResult.CONTINUE;
|
||||
import static org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions.TransactionSelectionResult.DELETE_TRANSACTION_AND_CONTINUE;
|
||||
import static org.hyperledger.besu.ethereum.eth.transactions.TransactionAddedStatus.ADDED;
|
||||
import static org.hyperledger.besu.ethereum.eth.transactions.TransactionAddedStatus.ALREADY_KNOWN;
|
||||
import static org.hyperledger.besu.ethereum.eth.transactions.TransactionAddedStatus.REJECTED_UNDERPRICED_REPLACEMENT;
|
||||
import static org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter.TransactionSelectionResult.COMPLETE_OPERATION;
|
||||
import static org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter.TransactionSelectionResult.CONTINUE;
|
||||
import static org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter.TransactionSelectionResult.DELETE_TRANSACTION_AND_CONTINUE;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
@@ -37,7 +37,11 @@ import org.hyperledger.besu.ethereum.core.BlockHeader;
|
||||
import org.hyperledger.besu.ethereum.core.Transaction;
|
||||
import org.hyperledger.besu.ethereum.core.TransactionTestFixture;
|
||||
import org.hyperledger.besu.ethereum.core.Util;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.ImmutableTransactionPoolConfiguration;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactionDroppedListener;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactionListener;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration;
|
||||
import org.hyperledger.besu.evm.account.Account;
|
||||
import org.hyperledger.besu.metrics.StubMetricsSystem;
|
||||
import org.hyperledger.besu.testutil.TestClock;
|
||||
@@ -72,8 +76,8 @@ public abstract class AbstractPendingTransactionsTestBase {
|
||||
|
||||
protected final TestClock clock = new TestClock();
|
||||
protected final StubMetricsSystem metricsSystem = new StubMetricsSystem();
|
||||
protected AbstractPendingTransactionsSorter transactions =
|
||||
getSorter(
|
||||
protected PendingTransactions transactions =
|
||||
getPendingTransactions(
|
||||
ImmutableTransactionPoolConfiguration.builder()
|
||||
.txPoolMaxSize(MAX_TRANSACTIONS)
|
||||
.txPoolLimitByAccountPercentage(1.0f)
|
||||
@@ -84,8 +88,8 @@ public abstract class AbstractPendingTransactionsTestBase {
|
||||
.txPoolMaxSize(MAX_TRANSACTIONS)
|
||||
.txPoolLimitByAccountPercentage(LIMITED_TRANSACTIONS_BY_SENDER_PERCENTAGE)
|
||||
.build();
|
||||
protected AbstractPendingTransactionsSorter senderLimitedTransactions =
|
||||
getSorter(senderLimitedConfig, Optional.empty());
|
||||
protected PendingTransactions senderLimitedTransactions =
|
||||
getPendingTransactions(senderLimitedConfig, Optional.empty());
|
||||
|
||||
protected final Transaction transaction1 = createTransaction(2);
|
||||
protected final Transaction transaction2 = createTransaction(1);
|
||||
@@ -96,7 +100,7 @@ public abstract class AbstractPendingTransactionsTestBase {
|
||||
protected static final Address SENDER1 = Util.publicKeyToAddress(KEYS1.getPublicKey());
|
||||
protected static final Address SENDER2 = Util.publicKeyToAddress(KEYS2.getPublicKey());
|
||||
|
||||
abstract AbstractPendingTransactionsSorter getSorter(
|
||||
abstract PendingTransactions getPendingTransactions(
|
||||
final TransactionPoolConfiguration poolConfig, Optional<Clock> clock);
|
||||
|
||||
@Test
|
||||
@@ -611,8 +615,8 @@ public abstract class AbstractPendingTransactionsTestBase {
|
||||
@Test
|
||||
public void shouldEvictMultipleOldTransactions() {
|
||||
final int maxTransactionRetentionHours = 1;
|
||||
final AbstractPendingTransactionsSorter transactions =
|
||||
getSorter(
|
||||
final PendingTransactions transactions =
|
||||
getPendingTransactions(
|
||||
ImmutableTransactionPoolConfiguration.builder()
|
||||
.pendingTxRetentionPeriod(maxTransactionRetentionHours)
|
||||
.txPoolMaxSize(MAX_TRANSACTIONS)
|
||||
@@ -633,8 +637,8 @@ public abstract class AbstractPendingTransactionsTestBase {
|
||||
|
||||
@Test
|
||||
public void shouldEvictSingleOldTransaction() {
|
||||
final AbstractPendingTransactionsSorter evictSingleTransactions =
|
||||
getSorter(
|
||||
final PendingTransactions evictSingleTransactions =
|
||||
getPendingTransactions(
|
||||
ImmutableTransactionPoolConfiguration.builder()
|
||||
.pendingTxRetentionPeriod(1)
|
||||
.txPoolMaxSize(MAX_TRANSACTIONS)
|
||||
@@ -651,8 +655,8 @@ public abstract class AbstractPendingTransactionsTestBase {
|
||||
|
||||
@Test
|
||||
public void shouldEvictExclusivelyOldTransactions() {
|
||||
final AbstractPendingTransactionsSorter twoHourEvictionTransactionPool =
|
||||
getSorter(
|
||||
final PendingTransactions twoHourEvictionTransactionPool =
|
||||
getPendingTransactions(
|
||||
ImmutableTransactionPoolConfiguration.builder()
|
||||
.pendingTxRetentionPeriod(2)
|
||||
.txPoolMaxSize(MAX_TRANSACTIONS)
|
||||
@@ -762,8 +766,7 @@ public abstract class AbstractPendingTransactionsTestBase {
|
||||
addLocalTransactions(transactions, nonces);
|
||||
}
|
||||
|
||||
protected void addLocalTransactions(
|
||||
final AbstractPendingTransactionsSorter sorter, final long... nonces) {
|
||||
protected void addLocalTransactions(final PendingTransactions sorter, final long... nonces) {
|
||||
for (final long nonce : nonces) {
|
||||
final Account sender = mock(Account.class);
|
||||
when(sender.getNonce()).thenReturn(1L);
|
||||
@@ -12,13 +12,13 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.ethereum.eth.transactions;
|
||||
package org.hyperledger.besu.ethereum.eth.transactions.sorter;
|
||||
|
||||
import org.hyperledger.besu.datatypes.Wei;
|
||||
import org.hyperledger.besu.ethereum.core.Transaction;
|
||||
import org.hyperledger.besu.ethereum.core.TransactionTestFixture;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.BaseFeePendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration;
|
||||
import org.hyperledger.besu.plugin.data.TransactionType;
|
||||
import org.hyperledger.besu.testutil.TestClock;
|
||||
|
||||
@@ -30,7 +30,7 @@ import java.util.Random;
|
||||
public class BaseFeePendingTransactionsTest extends AbstractPendingTransactionsTestBase {
|
||||
|
||||
@Override
|
||||
AbstractPendingTransactionsSorter getSorter(
|
||||
PendingTransactions getPendingTransactions(
|
||||
final TransactionPoolConfiguration poolConfig, final Optional<Clock> clock) {
|
||||
return new BaseFeePendingTransactionsSorter(
|
||||
poolConfig,
|
||||
@@ -12,10 +12,10 @@
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
package org.hyperledger.besu.ethereum.eth.transactions;
|
||||
package org.hyperledger.besu.ethereum.eth.transactions.sorter;
|
||||
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.BaseFeePendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration;
|
||||
import org.hyperledger.besu.testutil.TestClock;
|
||||
|
||||
import java.time.Clock;
|
||||
@@ -25,7 +25,7 @@ import java.util.Optional;
|
||||
public class GasPricePendingTransactionsTest extends AbstractPendingTransactionsTestBase {
|
||||
|
||||
@Override
|
||||
AbstractPendingTransactionsSorter getSorter(
|
||||
PendingTransactions getPendingTransactions(
|
||||
final TransactionPoolConfiguration poolConfig, final Optional<Clock> clock) {
|
||||
return new BaseFeePendingTransactionsSorter(
|
||||
poolConfig,
|
||||
@@ -40,10 +40,10 @@ import org.hyperledger.besu.ethereum.eth.manager.EthPeers;
|
||||
import org.hyperledger.besu.ethereum.eth.manager.EthScheduler;
|
||||
import org.hyperledger.besu.ethereum.eth.sync.state.SyncState;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.ImmutableTransactionPoolConfiguration;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolFactory;
|
||||
import org.hyperledger.besu.ethereum.eth.transactions.sorter.AbstractPendingTransactionsSorter;
|
||||
import org.hyperledger.besu.ethereum.mainnet.EpochCalculator;
|
||||
import org.hyperledger.besu.ethereum.mainnet.HeaderValidationMode;
|
||||
import org.hyperledger.besu.ethereum.mainnet.MainnetBlockHeaderFunctions;
|
||||
@@ -280,7 +280,7 @@ public class RetestethContext {
|
||||
return transactionPool;
|
||||
}
|
||||
|
||||
AbstractPendingTransactionsSorter getPendingTransactions() {
|
||||
PendingTransactions getPendingTransactions() {
|
||||
return transactionPool.getPendingTransactions();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user