public async Task <IActionResult> PostTest(MethodRunRequest req)
        {
            try
            {
                var args = req.Args.Select(i => i.ToString()).ToList();
                Console.Write($"{req.Method} -> ");
                foreach (var s in args)
                {
                    Console.Write($"{s} ");
                }
                Console.WriteLine("");

                _gas = new GasInfo {
                    GasPrice = 10
                };
                for (var i = 0; i < args.Count; i++)
                {
                    if (!args[i].Contains("gas") && !args[i].Contains("fee"))
                    {
                        continue;
                    }
                    _gas = JsonConvert.DeserializeObject <GasInfo>(args[i]);
                    args.RemoveAt(i);
                    i--;
                }

                LeaseInfo leaseInfo;
                switch (req.Method.ToLower())
                {
                case "create":
                    if ((req.Args[0] as dynamic).ValueKind == JsonValueKind.Number)
                    {
                        return(StatusCode(400, "Key must be a string"));
                    }
                    if ((req.Args[1] as dynamic).ValueKind == JsonValueKind.Number)
                    {
                        return(StatusCode(400, "Value must be a string"));
                    }
                    leaseInfo = args.Count == 3
                            ? JsonConvert.DeserializeObject <LeaseInfo>(args[^ 1] !)
        public async Task <IActionResult> PostTest(MethodRunRequest req)
        {
            try
            {
                switch (req.Method)
                {
                case "create":
                    await _bz.Create(req.Args[0], req.Args[1], new LeaseInfo(int.Parse(req.Args[2])), _gas);

                    break;

                case "txRead":
                    Console.WriteLine(await _bz.TxRead(req.Args[0], _gas));
                    break;

                case "update":
                    await _bz.Update(req.Args[0], req.Args[1], new LeaseInfo(int.Parse(req.Args[2])), _gas);

                    break;

                case "delete":
                    await _bz.Delete(req.Args[0], _gas);

                    break;

                case "txHas":
                    Console.WriteLine(await _bz.TxHas(req.Args[0], _gas));
                    break;

                case "txKeys":
                    foreach (var key in await _bz.TxKeys(_gas))
                    {
                        Console.WriteLine(key);
                    }
                    break;

                case "read":
                    Console.WriteLine(await _bz.Read(req.Args[0], req.Args.Length > 2));
                    break;

                case "has":
                    Console.WriteLine(await _bz.HasKey(req.Args[0]));
                    break;

                case "keys":
                    foreach (var key in await _bz.Keys())
                    {
                        Console.WriteLine(key);
                    }
                    break;

                case "rename":
                    await _bz.Rename(req.Args[0], req.Args[1], _gas);

                    break;

                case "count":
                    Console.WriteLine(await _bz.Count());
                    break;

                case "txCount":
                    Console.WriteLine(await _bz.TxCount(_gas));
                    break;

                case "deleteAll":
                    await _bz.DeleteAll(_gas);

                    break;

                case "keyValues":
                    foreach (var(key, value) in await _bz.GetKeyValues())
                    {
                        Console.WriteLine($"{key}: {value}");
                    }
                    break;

                case "txKeyValues":
                    foreach (var(key, value) in await _bz.TxGetKeyValues(_gas))
                    {
                        Console.WriteLine($"{key}: {value}");
                    }
                    break;

                case "multiUpdate":
                    var data = new Dictionary <string, string>();
                    for (var i = 1; i < req.Args.Length; i += 2)
                    {
                        data.Add(req.Args[i], req.Args[i + 1]);
                    }
                    await _bz.UpdateMany(data, _gas);

                    break;

                case "getLease":
                    Console.WriteLine(await _bz.GetLease(req.Args[0]));
                    break;

                case "txGetLease":
                    Console.WriteLine(await _bz.TxGetLease(req.Args[0], _gas));
                    break;

                case "renewLease":
                    await _bz.Renew(req.Args[0], new LeaseInfo(int.Parse(req.Args[1])), _gas);

                    break;

                case "renewLeaseAll":
                    await _bz.RenewAll(new LeaseInfo(int.Parse(req.Args[0])), _gas);

                    break;

                case "getNShortestLease":
                    foreach (var(key, value) in await _bz.GetNShortestLease(int.Parse(req.Args[0])))
                    {
                        Console.WriteLine($"{key} - {value}");
                    }
                    break;

                case "txGetNShortestLease":
                    foreach (var(key, value) in await _bz.TxGetNShortestLease(int.Parse(req.Args[0]), _gas))
                    {
                        Console.WriteLine($"{key} - {value}");
                    }
                    break;

                case "account":
                    var res = _bz.GetAccount().Result;
                    Console.WriteLine($"{res.Address} - {res.Coins[0].Amount} {res.Coins[0].Denom}");
                    break;

                case "version":
                    Console.WriteLine(_bz.GetVersion().Result);
                    break;

                default:
                    return(StatusCode(400));
                }
            }
            catch (Exception exception)
            {
                return(StatusCode(400, exception.Message));
            }

            return(Ok("result"));
        }