class TransactionPoolImpl implements TransactionPool {

    @Override
    public PendingState getPendingState() {
        removeObsoleteTransactions(this.getCurrentBestBlockNumber(), this.outdatedThreshold, this.outdatedTimeout);
        return new PendingState(
            repository,
            new TransactionSet(pendingTransactions),
            (repository, tx) ->
                new TransactionExecutor(
                    tx,
                    0,
                    bestBlock.getCoinbase(),
                    repository,
                    blockStore,
                    receiptStore,
                    programInvokeFactory,
                    createFakePendingBlock(bestBlock),
                    new EthereumListenerAdapter(),
                    0,
                    config.getVmConfig(),
                    config.getBlockchainConfig(),
                    config.playVM(),
                    config.isRemascEnabled(),
                    config.vmTrace(),
                    new PrecompiledContracts(config),
                    config.databaseDir(),
                    config.vmTraceDir(),
                    config.vmTraceCompressed()
                )
        );
    }

    public  TransactionPoolImpl(BlockStore blockStore,
                               ReceiptStore receiptStore,
                               EthereumListener listener,
                               ProgramInvokeFactory programInvokeFactory,
                               Repository repository,
                               UscSystemProperties config);
    public  TransactionPoolImpl(UscSystemProperties config,
                               Repository repository,
                               BlockStore blockStore,
                               ReceiptStore receiptStore,
                               ProgramInvokeFactory programInvokeFactory,
                               EthereumListener listener,
                               int outdatedThreshold,
                               int outdatedTimeout);

}