Пример #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();
        }