public ActionResult <RuntimeCallResponse> Get()
        {
            //?&filter[latestRuntime]=true&filter[module_id]=system&page[size]=100
            var uriParams = UriParse.PolkadotParseUri(Request.QueryString.Value);

            var moduleId = UriParse.TryGetValue(uriParams, "filter", "module_id");

            var calls = _sch.DatabaseSchema.TableList
                        .Where(t => t.ModuleName.Equals(moduleId, StringComparison.InvariantCultureIgnoreCase));

            var result = RuntimeCallResponse.Default();
            var lst    = new List <RuntimeCall>();

            foreach (var call in calls)
            {
                // Detect if call method is callable
                if (call.MethodName != null && call.MethodName.Length > 0 && Char.IsUpper(call.MethodName[0]))
                {
                    continue;
                }

                var rc = new RuntimeCall
                {
                    Type       = "runtimecall",
                    Id         = $"1045-{call.ModuleName}-{call.MethodName}",
                    Attributes = new RuntimeCall.CallAttribute
                    {
                        SpecVersion = "1045",
                        CallId      = call.MethodName,
                        ModuleId    = call.ModuleName,
                        Name        = call.MethodName
                    }
                };
                lst.Add(rc);
            }

            result.Data = lst;

            return(result);
        }
Exemplo n.º 2
0
        public ActionResult <ExtrinsicBase> Get(string id)
        {
            var targetTables = _metadataSchema.DatabaseSchema.TableList.Where(i => i.Title.Contains("Call")).ToArray();

            if (!string.IsNullOrWhiteSpace(id))
            {
                string addId = "";
                Dictionary <TableSchema, IEnumerable <string> > data2;

                if (id.Length > 30)
                {
                    var ids = id.Split('-');
                    if (ids.Count() > 1)
                    {
                        id    = ids.ElementAt(0);
                        addId = ids.ElementAt(1);
                    }

                    data2 = _dataAdapter.GetBlockByHash(targetTables, id, addId);
                    if (data2.Count == 0)
                    {
                        data2 = _dataAdapter.GetTransactionByHash(targetTables, id, addId);
                    }
                }
                else
                {
                    var ids = id.Split('-');

                    if (ids.Count() > 1)
                    {
                        id    = ids.ElementAt(0);
                        addId = ids.ElementAt(1);
                    }

                    var tables =

                        data2 = _dataAdapter.GetBlockByNumber(targetTables, id);
                }

                var resultData = ResponseWrapper.Transaction(data2, addId);

                if (resultData == null)
                {
                    return(NotFound());
                }

                var result2 = DTO.ExtrinsicResponseSingle.Default();
                result2.Data = resultData;

                return(result2);
            }

            var result    = DTO.ExtrinsicResponse.Default();
            var uriParams = UriParse.PolkadotParseUri(Request.QueryString.Value);

            var tf = new TransactionFilter
            {
                Module      = UriParse.TryGetValue(uriParams, "filter", "module_id"),
                Method      = UriParse.TryGetValue(uriParams, "filter", "call_id"),
                AddressFrom = UriParse.TryGetValue(uriParams, "filter", "address_from"),
                AddressTo   = UriParse.TryGetValue(uriParams, "filter", "address_to")
            };

            var limit = Convert.ToInt32(UriParse.TryGetValue(uriParams, "page", "size"));
            var pnum  = Convert.ToInt32(UriParse.TryGetValue(uriParams, "page", "number"));
            var data  = _dataAdapter.GetFilteredTransactionList(tf, 0, 0);
            var list  = ResponseWrapper.TransactionList(data);

            if (pnum > 1)
            {
                list = list.Skip((pnum - 1) * limit);
            }

            result.Data = list.Take(limit);

            return(result);
        }