public static EventLogQueueMessage ToQueueMessage(this DecodedEvent decodedEvent)
        {
            var msg = new EventLogQueueMessage
            {
                Key             = decodedEvent.Key,
                Event           = decodedEvent.DecodedEventDto,
                State           = decodedEvent.State,
                Transaction     = decodedEvent.Transaction,
                Log             = decodedEvent.Log,
                ParameterValues = decodedEvent.Event.Select(p => new EventParameterValue {
                    Order   = p.Parameter.Order,
                    AbiType = p.Parameter.ABIType.Name,
                    Name    = p.Parameter.Name,
                    Value   = p.Result,
                    Indexed = p.Parameter.Indexed
                }).ToList()
            };

            return(msg);
        }
        public static TEventDto GetDecodedEventDto <TEventDto>(this EventLogQueueMessage msg) where TEventDto : class, new()
        {
            if (msg.Event == null)
            {
                return(null);
            }
            if (msg.Event is TEventDto dto)
            {
                return(dto);
            }
            if (msg.Event is JObject jObject)
            {
                return(jObject.ToObject <TEventDto>());
            }
            if (msg.Log != null)
            {
                return(msg.Log.DecodeEvent <TEventDto>()?.Event);
            }

            return(null);
        }