public async Task <VerifyNFTTicketDtoResponse> GetVerifyNFTTicket(string utxo, string signature, string mintingAddress, string eventId)
        {
            try
            {
                signature = signature.Replace('-', '/');
                signature = signature.Replace('_', '+');
                var resp = await NFTTicketVerifier.LoadNFTTicketToVerify(new OwnershipVerificationCodeDto()
                {
                    TxId      = utxo,
                    Signature = signature + "="
                },
                                                                         eventId, new List <string>() { mintingAddress });

                //if (!MainDataContext.UsedAddressesWithTickets.TryGetValue(resp.Item2.OwnerAddress, out var add))
                //    MainDataContext.UsedAddressesWithTickets.TryAdd(resp.Item2.OwnerAddress, resp.Item2.TxId);

                var response = new VerifyNFTTicketDtoResponse();
                response.IsMintedByAllowedAddress = resp.IsMintedByAllowedAddress;
                response.IsSignatureValid         = resp.IsSignatureValid;
                response.IsUsedOnSameAddress      = resp.IsUsedOnSameAddress;
                response.TxId        = resp.TxId;
                response.MintAddress = resp.MintAddress;

                response.Name                = resp.NFT.Name;
                response.Description         = resp.NFT.Description;
                response.AuthorLink          = resp.NFT.AuthorLink;
                response.EventDate           = resp.NFT.EventDate;
                response.EventId             = resp.NFT.EventId;
                response.Location            = resp.NFT.Location;
                response.LocationCoordinates = resp.NFT.LocationCoordinates;
                response.MintAuthorAddress   = resp.NFT.MintAuthorAddress;
                response.MusicInLink         = resp.NFT.MusicInLink;
                response.OwnerAddress        = resp.OwnerAddress;
                response.Seat                = resp.NFT.Seat;
                response.TicketClass         = resp.NFT.TicketClass;
                response.Used                = resp.NFT.Used;
                response.VideoLink           = resp.NFT.VideoLink;
                return(response);
            }
            catch (Exception ex)
            {
                throw new HttpResponseException((HttpStatusCode)501, $"Cannot Verify NFT Ticket {utxo}!" + ex.Message);
            }
        }
        public async Task <VerifyNFTTicketDtoResponse> VerifyNFTTicket([FromBody] VerifyNFTTicketRequestDto data)
        {
            try
            {
                var resp = await NFTTicketVerifier.LoadNFTTicketToVerify(new VEDriversLite.NFT.OwnershipVerificationCodeDto()
                {
                    TxId      = data.utxo,
                    Signature = data.signature
                },
                                                                         data.eventId, data.allowedMintingAddresses);

                //if (!MainDataContext.UsedAddressesWithTickets.TryGetValue(resp.Item2.OwnerAddress, out var add))
                //    MainDataContext.UsedAddressesWithTickets.TryAdd(resp.Item2.OwnerAddress, resp.Item2.TxId);

                var response = new VerifyNFTTicketDtoResponse();
                response.IsMintedByAllowedAddress = resp.IsMintedByAllowedAddress;
                response.IsSignatureValid         = resp.IsSignatureValid;
                response.IsUsedOnSameAddress      = resp.IsUsedOnSameAddress;
                response.TxId        = resp.TxId;
                response.MintAddress = resp.MintAddress;

                response.Name                = resp.NFT.Name;
                response.Description         = resp.NFT.Description;
                response.AuthorLink          = resp.NFT.AuthorLink;
                response.EventDate           = resp.NFT.EventDate;
                response.EventId             = resp.NFT.EventId;
                response.Location            = resp.NFT.Location;
                response.LocationCoordinates = resp.NFT.LocationCoordinates;
                response.MintAuthorAddress   = resp.NFT.MintAuthorAddress;
                response.MusicInLink         = resp.NFT.MusicInLink;
                response.OwnerAddress        = resp.OwnerAddress;
                response.Seat                = resp.NFT.Seat;
                response.TicketClass         = resp.NFT.TicketClass;
                response.Used                = resp.NFT.Used;
                response.VideoLink           = resp.NFT.VideoLink;
                return(response);
            }
            catch (Exception ex)
            {
                throw new HttpResponseException((HttpStatusCode)501, $"Cannot Verify NFT Ticket {data.utxo}!" + ex.Message);
            }
        }