Exemplo n.º 1
0
        public PagedResults <ContractInfoModel> Query(QueryContractParam param)
        {
            var sql     = $"select distinct(\"name\") \"name\" from chain.account where encode(abi, 'escape') != ''";
            var configs = DbContext.ExecuteSqlQuery <Account2>(sql)
                          .Select(a => new ContractConfig
            {
                Name = a.name
            }).ToList();

            var pagerInfo = new PagerInfo(param)
            {
                TotalRowCount = configs.Count
            };

            configs = configs.Skip((param.PageIndex - 1) * param.PageSize).Take(param.PageSize).ToList();

            var codes = configs.Select(m => m.Name).ToList();
            var now   = DateTime.UtcNow;
            var start = now.AddHours(-24);

            var blocks = DbContext.GetDbSet <BlockInfo>()
                         .Where(m => m.Timestamp >= start && m.Timestamp <= now)
                         .OrderBy(m => m.BlockNum)
                         .Select(m => m.BlockNum);

            var startBlock = blocks.FirstOrDefault();
            var endBlock   = blocks.LastOrDefault();

            var accountMetas = DbContext.GetDbSet <AccountMetadata>()
                               .Where(m => codes.Contains(m.Name))
                               .ToList();

            var sqlContractStatistical = $@"SELECT
	            act_account ""Name"",
                COUNT(act_account) ""TotalCallCount"",
                COUNT(DISTINCT(receiver)) ""TotalActiveAccountCount""
            FROM
                CHAIN.action_trace
            WHERE
                act_account IN({string.Join(',', codes.Select(m => $"'{m}'"))})
                AND block_num >= {startBlock} 
	            AND block_num <= {endBlock} 
            GROUP BY
                act_account";

            var list = DbContext.ExecuteSqlQuery <ContractStatisticalModel>(sqlContractStatistical);

            var pagedData = configs.Select(m =>
            {
                var temps = list.SingleOrDefault(t => t.Name == m.Name);
                return(new ContractInfoModel
                {
                    Name = m.Name,
                    TotalCallCount = temps?.TotalCallCount ?? 0,
                    TotalActiveAccountCount = temps?.TotalActiveAccountCount ?? 0,
                    OneTimeCheckState = EnumOneTimeCheckState.Pass,
                    CodeAuditStatus = EnumCodeAuditStatus.HasTheAudit,
                    LastUpdateTime = accountMetas.Where(a => a.Name == m.Name)
                                     .OrderByDescending(a => a.BlockNum)
                                     .First()
                                     .LastCodeUpdate
                });
            })
                            .ToList();

            return(new PagedResults <ContractInfoModel>
            {
                PagerInfo = pagerInfo,
                Data = pagedData
            });
        }
Exemplo n.º 2
0
        public async Task <ExcutedResult> Query(QueryContractParam param)
        {
            var pagedResults = await _contractServiceModel.Query(param);

            return(ExcutedResult.SuccessResult(pagedResults));
        }
Exemplo n.º 3
0
 public async Task <PagedResults <ContractInfoModel> > Query(QueryContractParam param)
 {
     return(_contractRepository.Query(param));
 }