private async Task ProcessBroadcastInProgress(Guid operationId) { try { var broadcast = await _broadcastRepository.GetAsync(operationId); if (broadcast == null) { throw new BusinessException($"Broadcast for observed operation not found. operationId={operationId})"); } var tx = await _horizonService.GetTransactionDetails(broadcast.Hash); if (tx == null) { // transaction still in progress return; } var paymentOp = _horizonService.GetFirstPaymentFromTransaction(tx); broadcast.State = TxBroadcastState.Completed; broadcast.Amount = paymentOp.Amount.InnerValue; broadcast.Fee = tx.FeePaid; broadcast.CreatedAt = tx.CreatedAt; broadcast.Ledger = tx.Ledger; await _broadcastRepository.MergeAsync(broadcast); await _observationRepository.DeleteIfExistAsync(operationId.ToString()); } catch (Exception ex) { var broadcast = new TxBroadcast { State = TxBroadcastState.Failed, Error = ex.Message, ErrorCode = TxExecutionError.Unknown }; await _broadcastRepository.MergeAsync(broadcast); await _observationRepository.DeleteIfExistAsync(operationId.ToString()); await _log.WriteErrorAsync(nameof(TransactionService), nameof(ProcessBroadcastInProgress), $"Failed to process in progress broadcast. operationId={operationId})", ex); } }