protected override async Task ProcessMessageAsync(UndecodedEvent message) { if (!message.OriginAddress.Equals(_contractAddress, StringComparison.OrdinalIgnoreCase)) { return; } try { var signature = message.Topics[0]; if (signature.Equals(_transferReceivedEventSignature, StringComparison.OrdinalIgnoreCase)) { var @event = _eventTopicDecoder.DecodeTopics <TransferReceivedEventDTO>( message.Topics.Select(o => (object)o).ToArray(), message.Data); await _purchaseService.ConfirmAsync(Guid.Parse(@event.TransferId)); _log.Info("Transfer receiver event handled.", context: $"transferId: {@event.TransferId}"); } else if (signature.Equals(_transferAcceptedEventSignature, StringComparison.OrdinalIgnoreCase)) { var @event = _eventTopicDecoder.DecodeTopics <TransferAcceptedEventDTO>( message.Topics.Select(o => (object)o).ToArray(), message.Data); await _operationsService.HandleSucceededTransferAsync(Guid.Parse(@event.TransferId)); } else if (signature.Equals(_transferRejectedEventSignature, StringComparison.OrdinalIgnoreCase)) { var @event = _eventTopicDecoder.DecodeTopics <TransferRejectedEventDTO>( message.Topics.Select(o => (object)o).ToArray(), message.Data); await _operationsService.HandleFailedTransferAsync(Guid.Parse(@event.TransferId)); } } catch (Exception exception) { _log.Error(exception, "An error occurred while processing undecoded event.", $"transactionHash: {message.TransactionHash}"); } }