/// <inheritdoc />
        public override async Task <bool> OnExecute()
        {
            if (!config.SyncMemoryPool)
            {
                Abort = true;
                return(true);
            }

            if (Runner.GlobalState.Blocked)
            {
                return(false);
            }

            if (Runner.GlobalState.ChainTipHeight == 0 ||
                Runner.GlobalState.StoreTip == null ||
                Runner.GlobalState.IndexModeCompleted == false ||
                Runner.GlobalState.IbdMode())
            {
                // Don't sync mempool until api is at tip
                return(false);
            }

            if (initialized == false)
            {
                initialized = true;

                // read build mempool memory view
                syncOperations.InitializeMmpool();
            }

            watch.Restart();

            SyncPoolTransactions pool = syncOperations.FindPoolTransactions(syncConnection);

            if (!pool.Transactions.Any())
            {
                return(false);
            }

            SyncBlockTransactionsOperation poolTrx = syncOperations.SyncPool(syncConnection, pool);

            storageOperations.InsertMempoolTransactions(poolTrx);

            watch.Stop();

            log.LogInformation($"Mempool - New Transactions = {pool.Transactions.Count}, Seconds = {watch.Elapsed.TotalSeconds}");

            return(await Task.FromResult(false));
        }
Esempio n. 2
0
        /// <inheritdoc />
        public override async Task <bool> OnExecute()
        {
            if (!config.SyncMemoryPool)
            {
                Abort = true;
                return(true);
            }

            SyncingBlocks syncingBlocks = Runner.SyncingBlocks;

            if (syncingBlocks.Blocked)
            {
                return(false);
            }

            if (syncingBlocks.LastBlock == null || syncingBlocks.LastBlock.Height + 10 < syncingBlocks.LastClientBlockIndex)
            {
                // Don't sync mempool until api is at tip
                return(false);
            }

            if (Runner.Get <BlockSyncer>().Queue.Count() >= config.MaxItemsInQueue)
            {
                return(false);
            }

            watch.Restart();

            SyncPoolTransactions pool = syncOperations.FindPoolTransactions(syncConnection, syncingBlocks);

            if (!pool.Transactions.Any())
            {
                return(false);
            }

            watch.Stop();

            log.LogDebug($"Seconds = {watch.Elapsed.TotalSeconds} - New Transactions = {pool.Transactions.Count}/{syncingBlocks.CurrentPoolSyncing.Count()}");

            Runner.Get <BlockSyncer>().Enqueue(new SyncBlockOperation {
                PoolTransactions = pool
            });

            return(await Task.FromResult(false));
        }
 public SyncBlockTransactionsOperation SyncPool(SyncConnection connection, SyncPoolTransactions poolTransactions)
 {
     return(this.SyncPoolInternal(connection, poolTransactions));
 }
        private SyncBlockTransactionsOperation SyncPoolInternal(SyncConnection connection, SyncPoolTransactions poolTransactions)
        {
            var stoper = Stopwatch.Start();

            var client = CryptoClientFactory.Create(connection.ServerDomain, connection.RpcAccessPort, connection.User, connection.Password, connection.Secure);

            var returnBlock = this.SyncBlockTransactions(client, connection, poolTransactions.Transactions, false);

            stoper.Stop();

            this.tracer.DetailedTrace("SyncPool", string.Format("Seconds = {0} - Transactions = {1}", stoper.Elapsed.TotalSeconds, returnBlock.Transactions.Count()));

            return(returnBlock);
        }
Esempio n. 5
0
        private SyncBlockTransactionsOperation SyncPoolInternal(SyncConnection connection, SyncPoolTransactions poolTransactions)
        {
            IBlockchainClient client = clientFactory.Create(connection);

            SyncBlockTransactionsOperation returnBlock = SyncBlockTransactions(client, connection, poolTransactions.Transactions, false);

            return(returnBlock);
        }
        private SyncBlockTransactionsOperation SyncPoolInternal(SyncConnection connection, SyncPoolTransactions poolTransactions)
        {
            watch.Restart();

            BitcoinClient client = CryptoClientFactory.Create(connection.ServerDomain, connection.RpcAccessPort, connection.User, connection.Password, connection.Secure);

            SyncBlockTransactionsOperation returnBlock = SyncBlockTransactions(client, connection, poolTransactions.Transactions, false);

            watch.Stop();

            int    transactionCount = returnBlock.Transactions.Count();
            double totalSeconds     = watch.Elapsed.TotalSeconds;

            log.LogDebug($"SyncPool: Seconds = {watch.Elapsed.TotalSeconds} - Transactions = {transactionCount}");

            return(returnBlock);
        }
Esempio n. 7
0
        private SyncBlockTransactionsOperation SyncPoolInternal(SyncConnection connection, SyncPoolTransactions poolTransactions)
        {
            var watch = Stopwatch.Start();

            var client = CryptoClientFactory.Create(connection.ServerDomain, connection.RpcAccessPort, connection.User, connection.Password, connection.Secure);

            var returnBlock = this.SyncBlockTransactions(client, connection, poolTransactions.Transactions, false);

            watch.Stop();

            var transactionCount = returnBlock.Transactions.Count();
            var totalSeconds     = watch.Elapsed.TotalSeconds;

            this.log.LogDebug($"SyncPool: Seconds = {watch.Elapsed.TotalSeconds} - Transactions = {transactionCount}");

            return(returnBlock);
        }