Пример #1
0
        public TxPool(ITxStorage txStorage,
                      ITimestamp timestamp,
                      IEthereumEcdsa ecdsa,
                      ISpecProvider specProvider,
                      ITxPoolConfig txPoolConfig,
                      ILogManager logManager)
        {
            int removePendingTransactionInterval = txPoolConfig.RemovePendingTransactionInterval;

            _peerNotificationThreshold = txPoolConfig.PeerNotificationThreshold;
            _logger       = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            _txStorage    = txStorage ?? throw new ArgumentNullException(nameof(txStorage));
            _timestamp    = timestamp ?? throw new ArgumentNullException(nameof(timestamp));
            _ecdsa        = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa));
            _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider));

            _pendingTxThresholdValidator = new PendingTxThresholdValidator(txPoolConfig);
            if (removePendingTransactionInterval <= 0)
            {
                return;
            }

            var timer = new Timer(removePendingTransactionInterval * 1000);

            timer.Elapsed += OnTimerElapsed;
            timer.Start();
            _ownTimer           = new Timer(500);
            _ownTimer.Elapsed  += OwnTimerOnElapsed;
            _ownTimer.AutoReset = false;
            _ownTimer.Start();
        }
Пример #2
0
 protected virtual TxPool.TxPool CreateTxPool(ITxStorage txStorage) =>
 new TxPool.TxPool(
     txStorage,
     EthereumEcdsa,
     new ChainHeadInfoProvider(new FixedBlockChainHeadSpecProvider(SpecProvider), BlockTree, State),
     new TxPoolConfig(),
     new TxValidator(SpecProvider.ChainId),
     LogManager,
     TransactionComparerProvider.GetDefaultComparer());
Пример #3
0
        private Transactions AddTransactions(ITxStorage storage)
        {
            _txPool = CreatePool(storage);

            var pendingTransactions   = AddTransactionsToPool();
            var persistedTransactions = GetTransactionsFromStorage(storage, pendingTransactions);

            return(new Transactions(pendingTransactions, persistedTransactions));
        }
Пример #4
0
 protected virtual TxPool.TxPool CreateTxPool(ITxStorage txStorage) =>
 new TxPool.TxPool(
     txStorage,
     EthereumEcdsa,
     new FixedBlockChainHeadSpecProvider(SpecProvider),
     new TxPoolConfig(),
     State,
     new TxValidator(SpecProvider.ChainId),
     LimboLogs.Instance);
Пример #5
0
 public void Setup()
 {
     _logManager          = LimboLogs.Instance;
     _specProvider        = RopstenSpecProvider.Instance;
     _ethereumEcdsa       = new EthereumEcdsa(_specProvider.ChainId, _logManager);
     _noTxStorage         = NullTxStorage.Instance;
     _inMemoryTxStorage   = new InMemoryTxStorage();
     _persistentTxStorage = new PersistentTxStorage(new MemDb());
     _stateProvider       = new StateProvider(new StateDb(), new MemDb(), _logManager);
 }
Пример #6
0
 public void Setup()
 {
     _genesisBlock        = Build.A.Block.WithNumber(0).TestObject;
     _remoteBlockTree     = Build.A.BlockTree(_genesisBlock).OfChainLength(0).TestObject;
     _logManager          = LimboLogs.Instance;
     _specProvider        = RopstenSpecProvider.Instance;
     _ethereumEcdsa       = new EthereumEcdsa(_specProvider, _logManager);
     _noTxStorage         = NullTxStorage.Instance;
     _inMemoryTxStorage   = new InMemoryTxStorage();
     _persistentTxStorage = new PersistentTxStorage(new MemDb(), _specProvider);
 }
Пример #7
0
 public ReorgTxPool(
     ITxStorage txStorage,
     IEthereumEcdsa ecdsa,
     IChainHeadInfoProvider chainHeadInfoProvider,
     ITxPoolConfig txPoolConfig,
     ITxValidator validator,
     ILogManager?logManager,
     IComparer <Transaction> comparer)
     : base(txStorage, ecdsa, chainHeadInfoProvider, txPoolConfig, validator, logManager, comparer)
 {
 }
Пример #8
0
 public void Setup()
 {
     _logManager          = LimboLogs.Instance;
     _specProvider        = RopstenSpecProvider.Instance;
     _ethereumEcdsa       = new EthereumEcdsa(_specProvider.ChainId, _logManager);
     _noTxStorage         = NullTxStorage.Instance;
     _inMemoryTxStorage   = new InMemoryTxStorage();
     _persistentTxStorage = new PersistentTxStorage(new MemDb());
     _stateProvider       = new StateProvider(new TrieStore(new MemDb(), _logManager), new MemDb(), _logManager);
     _blockFinder         = Substitute.For <IBlockFinder>();
     _blockFinder.FindBestSuggestedHeader().Returns(Build.A.BlockHeader.WithNumber(10000000).TestObject);
 }
Пример #9
0
 public ReorgTxPool(
     ITxStorage txStorage,
     IEthereumEcdsa ecdsa,
     IChainHeadSpecProvider specProvider,
     ITxPoolConfig txPoolConfig,
     IReadOnlyStateProvider stateProvider,
     ITxValidator validator,
     ILogManager?logManager,
     IComparer <Transaction>?comparer = null)
     : base(txStorage, ecdsa, specProvider, txPoolConfig, stateProvider, validator, logManager, comparer)
 {
 }
Пример #10
0
        private TxPool.TxPool CreatePool(ITxStorage txStorage, ITxPoolConfig config = null, ISpecProvider specProvider = null)
        {
            specProvider ??= RopstenSpecProvider.Instance;
            ITransactionComparerProvider transactionComparerProvider =
                new TransactionComparerProvider(specProvider, _blockTree);

            return(new TxPool.TxPool(txStorage, _ethereumEcdsa, new ChainHeadInfoProvider(specProvider, _blockFinder, _stateProvider),
                                     config ?? new TxPoolConfig()
            {
                GasLimit = _txGasLimit
            },
                                     new TxValidator(_specProvider.ChainId), _logManager, transactionComparerProvider.GetDefaultComparer()));
        }
Пример #11
0
        private Transactions AddAndFilterTransactions(ITxStorage storage, params ITxFilter[] filters)
        {
            _txPool = CreatePool(storage);
            foreach (var filter in filters ?? Enumerable.Empty <ITxFilter>())
            {
                _txPool.AddFilter(filter);
            }

            var pendingTransactions  = AddTransactionsToPool();
            var filteredTransactions = GetTransactionsFromStorage(storage, pendingTransactions);

            return(new Transactions(pendingTransactions, filteredTransactions));
        }
Пример #12
0
 public FilteredTxPool(
     ITxStorage txStorage,
     IEthereumEcdsa ecdsa,
     ISpecProvider specProvider,
     ITxPoolConfig txPoolConfig,
     IReadOnlyStateProvider stateProvider,
     ILogManager logManager,
     IComparer <Transaction> comparer = null,
     ITxPoolFilter txPoolFilter       = null)
     : base(txStorage, ecdsa, specProvider, txPoolConfig, stateProvider, logManager, comparer)
 {
     _txPoolFilter = txPoolFilter;
 }
Пример #13
0
 public FilteredTxPool(
     ITxStorage txStorage,
     IEthereumEcdsa ecdsa,
     IChainHeadInfoProvider chainHeadInfoProvider,
     ITxPoolConfig txPoolConfig,
     ITxValidator txValidator,
     ILogManager logManager,
     IComparer <Transaction> comparer,
     ITxPoolFilter txPoolFilter = null)
     : base(txStorage, ecdsa, chainHeadInfoProvider, txPoolConfig, txValidator, logManager, comparer)
 {
     _txPoolFilter = txPoolFilter;
 }
Пример #14
0
 private TxPool.TxPool CreatePool(ITxStorage txStorage, ITxPoolConfig config = null)
 => new TxPool.TxPool(txStorage, _ethereumEcdsa, new ChainHeadSpecProvider(_specProvider, _blockFinder),
                      config ?? new TxPoolConfig()
 {
     GasLimit = _txGasLimit
 }, _stateProvider, new TxValidator(_specProvider.ChainId), _logManager);
Пример #15
0
 private static IEnumerable <Transaction> GetTransactionsFromStorage(ITxStorage storage,
                                                                     IEnumerable <Transaction> transactions)
 => transactions.Select(t => storage.Get(t.Hash)).Where(t => !(t is null)).ToArray();
Пример #16
0
 private TxPool CreatePool(ITxStorage txStorage)
 => new TxPool(txStorage, new PendingTxThresholdValidator(),
               new Timestamp(), _ethereumEcdsa, _specProvider, _logManager);
Пример #17
0
 private TxPool.TxPool CreatePool(ITxStorage txStorage)
 => new TxPool.TxPool(txStorage,
                      Timestamper.Default, _ethereumEcdsa, _specProvider, new TxPoolConfig(), _stateProvider, _logManager);
Пример #18
0
 private TxPool.TxPool CreatePool(ITxStorage txStorage)
 => new TxPool.TxPool(txStorage, _ethereumEcdsa, new ChainHeadSpecProvider(_specProvider, _blockFinder),
                      new TxPoolConfig(), _stateProvider, new TxValidator(_specProvider.ChainId), _logManager);