/// <summary>
        /// Get all gladiator ids owned by an address, not currently supported
        /// </summary>
        private static BigInteger[] TokensOfOwner(byte[] owner)
        {
            BigInteger tokenCount = NepOperations.BalanceOf(owner);

            BigInteger[] result = new BigInteger[(int)tokenCount];

            if (tokenCount == 0)
            {
                return(result);
            }
            else
            {
                // We count on the fact that all NFTInfo have IDs starting at 1 and increasing
                // sequentially up to the totalCat count.
                for (BigInteger idx = 1; idx < tokenCount + 1; idx += 1)
                {
                    var tokenId = DataAccess.GetOwnersTokenIdByIndexAsBytes(owner, idx);
                    result[(int)idx - 1] = tokenId.AsBigInteger();
                }

                return(result);
            }
        }
        /// <summary>
        /// Attepts to handle the current operation
        /// </summary>
        public static OperationResult HandleNepOperation(string operation, params object[] args)
        {
            var result = new OperationResult {
                IsComplete = true
            };

            if (operation == "version")
            {
                result.Value = NepOperations.Version();
            }
            else if (operation == "name")
            {
                result.Value = NepOperations.Name();
            }
            else if (operation == "symbol")
            {
                result.Value = NepOperations.Symbol();
            }
            else if (operation == "totalSupply")
            {
                result.Value = NepOperations.TotalSupply();
            }
            else if (operation == "decimals")
            {
                result.Value = 0;
            }
            else if (operation == "ownerOf")
            {
                BigInteger tokenId = (BigInteger)args[0];

                result.Value = NepOperations.OwnerOf(tokenId);
            }
            else if (operation == "tokenURI")
            {
                BigInteger tokenId = (BigInteger)args[0];

                result.Value = NepOperations.TokenURI(tokenId);
            }
            else if (operation == "balanceOf")
            {
                if (args.Length != 1)
                {
                    result.Value = 0;
                    return(result);
                }

                byte[] account = (byte[])args[0];

                result.Value = NepOperations.BalanceOf(account);
            }
            else if (operation == "tokensOfOwner")
            {
                byte[] owner = (byte[])args[0];

                result.Value = NepOperations.TokensOfOwner(owner);
            }

            else if (operation == "transfer")
            {
                if (args.Length != 3)
                {
                    result.Value = false;
                    return(result);
                }

                byte[]     from    = (byte[])args[0];
                byte[]     to      = (byte[])args[1];
                BigInteger tokenId = (BigInteger)args[2];

                if (!Runtime.CheckWitness(from))
                {
                    result.Value = false;
                    return(result);
                }

                var callingScript = ExecutionEngine.CallingScriptHash;
                if (ExecutionEngine.EntryScriptHash.AsBigInteger() != callingScript.AsBigInteger())
                {
                    result.Value = false;
                    return(result);
                }

                result.Value = NepOperations.Transfer(from, to, tokenId);
            }
            else
            {
                result.IsComplete = false;
            }

            return(result);
        }