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."); } }); }
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"); } }); }
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 ); }
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 ); }
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 ); }