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