Exemplo n.º 1
0
        private void TryPublishEvent(BlockHeader blockHeader, TxReceipt[] receipts, string eventName)
        {
            BlockHeader fromBlock = _blockTree.FindHeader(_filter.FromBlock);
            BlockHeader toBlock   = _blockTree.FindHeader(_filter.ToBlock, true);

            bool isAfterFromBlock = blockHeader.Number >= fromBlock?.Number;
            bool isBeforeToBlock  = blockHeader.Number <= toBlock?.Number;

            if (isAfterFromBlock && isBeforeToBlock)
            {
                var filterLogs = GetFilterLogs(blockHeader, receipts);

                foreach (var filterLog in filterLogs)
                {
                    JsonRpcResult result = CreateSubscriptionMessage(filterLog);
                    JsonRpcDuplexClient.SendJsonRpcResult(result);
                    if (_logger.IsTrace)
                    {
                        _logger.Trace($"Logs subscription {Id} printed new log.");
                    }
                }
            }
            else
            {
                if (_logger.IsTrace)
                {
                    _logger.Trace($"Logs subscription {Id}: {eventName} event happens, but there are no logs matching filter.");
                }
            }
        }
        private void OnConditionsChange(object?sender, BlockEventArgs e)
        {
            Task.Run(() =>
            {
                bool isSyncing = CheckSyncing();

                if (isSyncing == IsSyncing)
                {
                    if (_logger.IsTrace)
                    {
                        _logger.Trace($"Syncing subscription {Id} didn't changed syncing status: {IsSyncing}");
                    }
                    return;
                }

                if (_logger.IsTrace)
                {
                    _logger.Trace($"Syncing subscription {Id} changed syncing status from {IsSyncing} to {isSyncing}");
                }

                IsSyncing = isSyncing;
                JsonRpcResult result;

                if (isSyncing == false)
                {
                    result = CreateSubscriptionMessage(isSyncing);
                }
                else
                {
                    result = CreateSubscriptionMessage(new SyncingResult
                    {
                        IsSyncing     = isSyncing,
                        CurrentBlock  = _blockTree.Head.Number,
                        HighestBlock  = BestSuggestedNumber,
                        StartingBlock = 0L
                    });
                }


                JsonRpcDuplexClient.SendJsonRpcResult(result);
                _logger.Trace($"Syncing subscription {Id} printed SyncingResult object.");
            }).ContinueWith(
                t =>
                t.Exception?.Handle(ex =>
            {
                if (_logger.IsDebug)
                {
                    _logger.Debug($"Syncing subscription {Id}: Failed Task.Run.");
                }
                return(true);
            })
                , TaskContinuationOptions.OnlyOnFaulted
                );
        }
 private void OnNewReceived(object?sender, UserOperationEventArgs e)
 {
     ScheduleAction(() =>
     {
         JsonRpcResult result = CreateSubscriptionMessage(new { UserOperation = new UserOperationRpc(e.UserOperation), EntryPoint = e.EntryPoint });
         JsonRpcDuplexClient.SendJsonRpcResult(result);
         if (_logger.IsTrace)
         {
             _logger.Trace($"newReceivedUserOperations subscription {Id} printed hash of newReceivedUserOperations.");
         }
     });
 }
 private void OnNewPending(object?sender, TxEventArgs e)
 {
     ScheduleAction(() =>
     {
         JsonRpcResult result = CreateSubscriptionMessage(_includeTransactions ? new TransactionForRpc(e.Transaction) : e.Transaction.Hash);
         JsonRpcDuplexClient.SendJsonRpcResult(result);
         if (_logger.IsTrace)
         {
             _logger.Trace($"NewPendingTransactions subscription {Id} printed hash of NewPendingTransaction.");
         }
     });
 }
 private void OnEvicted(object?sender, TxEventArgs e)
 {
     ScheduleAction(() =>
     {
         JsonRpcResult result = CreateSubscriptionMessage(e.Transaction.Hash);
         JsonRpcDuplexClient.SendJsonRpcResult(result);
         if (_logger.IsTrace)
         {
             _logger.Trace($"DroppedPendingTransactions subscription {Id} printed hash of DroppedPendingTransaction.");
         }
     });
 }
Exemplo n.º 6
0
        private void OnBlockAddedToMain(object?sender, BlockReplacementEventArgs e)
        {
            ScheduleAction(() =>
            {
                JsonRpcResult result = CreateSubscriptionMessage(new BlockForRpc(e.Block, _includeTransactions, _specProvider));

                JsonRpcDuplexClient.SendJsonRpcResult(result);
                if (_logger.IsTrace)
                {
                    _logger.Trace($"NewHeads subscription {Id} printed new block");
                }
            });
        }
Exemplo n.º 7
0
        private void OnReceiptsInserted(object?sender, ReceiptsEventArgs e)
        {
            Task.Run(() =>
            {
                BlockHeader fromBlock = _blockFinder.FindHeader(_filter.FromBlock);
                BlockHeader toBlock   = _blockFinder.FindHeader(_filter.ToBlock, true);

                bool isAfterFromBlock = e.BlockHeader.Number >= fromBlock.Number;
                bool isBeforeToBlock  = e.BlockHeader.Number <= toBlock.Number || _filter.ToBlock.Equals(BlockParameter.Latest) || _filter.ToBlock.Equals(BlockParameter.Pending);

                if (isAfterFromBlock && isBeforeToBlock)
                {
                    var filterLogs = GetFilterLogs(e);

                    foreach (var filterLog in filterLogs)
                    {
                        JsonRpcResult result = CreateSubscriptionMessage(filterLog);
                        JsonRpcDuplexClient.SendJsonRpcResult(result);
                        if (_logger.IsTrace)
                        {
                            _logger.Trace($"Logs subscription {Id} printed new log.");
                        }
                    }
                }
                else
                {
                    if (_logger.IsTrace)
                    {
                        _logger.Trace($"Logs subscription {Id}: OnReceiptsInserted event happens, but there are no logs matching filter.");
                    }
                }
            }).ContinueWith(
                t =>
                t.Exception?.Handle(ex =>
            {
                if (_logger.IsDebug)
                {
                    _logger.Debug($"Logs subscription {Id}: Failed Task.Run after ReceiptsInserted event.");
                }
                return(true);
            })
                , TaskContinuationOptions.OnlyOnFaulted
                );
        }
Exemplo n.º 8
0
 private void OnNewPending(object?sender, UserOperationEventArgs e)
 {
     ScheduleAction(() =>
     {
         JsonRpcResult result;
         if (_includeUserOperations)
         {
             result = CreateSubscriptionMessage(new { UserOperation = new UserOperationRpc(e.UserOperation), EntryPoint = e.EntryPoint });
         }
         else
         {
             result = CreateSubscriptionMessage(new { UserOperation = e.UserOperation.RequestId, EntryPoint = e.EntryPoint });
         }
         JsonRpcDuplexClient.SendJsonRpcResult(result);
         if (_logger.IsTrace)
         {
             _logger.Trace($"newPendingUserOperations subscription {Id} printed hash of newPendingUserOperations.");
         }
     });
 }
        private void OnConditionsChange(object?sender, BlockEventArgs e)
        {
            ScheduleAction(() =>
            {
                SyncingResult syncingResult = _ethSyncingInfo.GetFullInfo();
                bool isSyncing = syncingResult.IsSyncing;

                if (isSyncing == _lastIsSyncing)
                {
                    if (_logger.IsTrace)
                    {
                        _logger.Trace($"Syncing subscription {Id} didn't changed syncing status: {_lastIsSyncing}");
                    }
                    return;
                }

                if (_logger.IsTrace)
                {
                    _logger.Trace($"Syncing subscription {Id} changed syncing status from {_lastIsSyncing} to {isSyncing}");
                }

                _lastIsSyncing = isSyncing;
                JsonRpcResult result;

                if (isSyncing == false)
                {
                    result = CreateSubscriptionMessage(isSyncing);
                }
                else
                {
                    result = CreateSubscriptionMessage(syncingResult);
                }


                JsonRpcDuplexClient.SendJsonRpcResult(result);
                _logger.Trace($"Syncing subscription {Id} printed SyncingResult object.");
            });
        }
 private void OnNewPending(object?sender, TxEventArgs e)
 {
     Task.Run(() =>
     {
         JsonRpcResult result = CreateSubscriptionMessage(e.Transaction.Hash);
         JsonRpcDuplexClient.SendJsonRpcResult(result);
         if (_logger.IsTrace)
         {
             _logger.Trace($"NewPendingTransactions subscription {Id} printed hash of NewPendingTransaction.");
         }
     }).ContinueWith(
         t =>
         t.Exception?.Handle(ex =>
     {
         if (_logger.IsDebug)
         {
             _logger.Debug($"NewPendingTransactions subscription {Id}: Failed Task.Run after NewPending event.");
         }
         return(true);
     })
         , TaskContinuationOptions.OnlyOnFaulted
         );
 }
Exemplo n.º 11
0
        private void OnNewHeadBlock(object?sender, BlockEventArgs e)
        {
            Task.Run(() =>
            {
                JsonRpcResult result = CreateSubscriptionMessage(new BlockForRpc(e.Block, false));

                JsonRpcDuplexClient.SendJsonRpcResult(result);
                if (_logger.IsTrace)
                {
                    _logger.Trace($"NewHeads subscription {Id} printed NewHeadBlock");
                }
            }).ContinueWith(
                t =>
                t.Exception?.Handle(ex =>
            {
                if (_logger.IsDebug)
                {
                    _logger.Debug($"NewHeads subscription {Id}: Failed Task.Run after NewHeadBlock event.");
                }
                return(true);
            })
                , TaskContinuationOptions.OnlyOnFaulted
                );
        }