public async Task GetRawAbi()
        {
            var result = await DefaultApi.GetRawAbi(new GetRawAbiRequest()
            {
                account_name = "eosio.token"
            });

            var abiSerializer = new AbiSerializationProvider(DefaultApi);
            var abiObject     = abiSerializer.DeserializePackedAbi(result.abi);
        }
Example #2
0
        public List <TokenAccountModel> GetTokenAccounts(string code, decimal symbolCode)
        {
            var tempList = new List <TokenAccountTempModel>();

            var list = DbSet.Where(m => m.Table == "accounts" && m.Code == code && m.PrimaryKey == symbolCode)
                       .GroupBy(m => m.Scope)
                       .Select(m => new
            {
                AccountName = m.Key,
                Data        = m.OrderByDescending(c => c.BlockNum).First()
            })
                       .Where(p => p.Data.Present)
                       .ToList();

            if (!list.Any())
            {
                return(new List <TokenAccountModel>());
            }

            var codes    = list.Select(m => m.Data.Code).Distinct().ToList();
            var accounts = DbContext.GetDbSet <Account>()
                           .Where(m => codes.Contains(m.Name))
                           .ToList();

            var abiSerializationProvider = new AbiSerializationProvider();

            list.ForEach(item =>
            {
                var account = accounts
                              .Where(m => m.Name == item.Data.Code && m.BlockNum <= item.Data.BlockNum)
                              .OrderByDescending(m => m.BlockNum)
                              .First();
                var abi      = abiSerializationProvider.DeserializePackedAbi(account.Abi);
                var abiTable = abi.tables.First(t => t.name == item.Data.Table);

                var data = abiSerializationProvider.DeserializeStructData(abiTable.type, item.Data.Value, abi);
                tempList.Add(new TokenAccountTempModel
                {
                    AccountName = item.AccountName,
                    Data        = data
                });
            });

            return(tempList.Select(m => new TokenAccountModel
            {
                Balance = m.Balance,
                AccountName = m.AccountName
            })
                   .Where(m => m.Balance > 0)
                   .OrderByDescending(m => m.Balance)
                   .ToList());
        }
Example #3
0
        private PagedResults <TransferRecordModel> GetTransferRecord(IQueryable <ActionTrace> queryable,
                                                                     TransferQueryParams queryParams, PagedResults <TransferRecordModel> result)
        {
            var list = queryable
                       .GroupJoin(_dbContext.GetDbSet <BlockInfo>(), m => m.BlockNum, b => b.BlockNum,
                                  (m, b) => new { ActionTrace = m, BlockInfo = b })
                       .SelectMany(combination => combination.BlockInfo.DefaultIfEmpty(), (m, b) =>
                                   new TransferRecordModel
            {
                ActData       = m.ActionTrace.ActData,
                BlockNum      = m.ActionTrace.BlockNum,
                Status        = m.ActionTrace.transaction_status.ToString(),
                BlockTime     = b.Timestamp,
                ActName       = m.ActionTrace.ActName,
                ActionAccount = m.ActionTrace.ActAccount,
                TransactionId = m.ActionTrace.TransactionId
            })
                       .ToList();

            var actAccounts = list.Select(m => m.ActionAccount).Distinct().ToList();
            var accounts    = _dbContext.GetDbSet <Account>()
                              .Where(p => actAccounts.Contains(p.Name))
                              .ToList();

            var abiSerializationProvider = new AbiSerializationProvider();

            list.ForEach(item =>
            {
                var account = accounts.Where(m => m.Name == item.ActionAccount && m.BlockNum <= item.BlockNum)
                              .OrderByDescending(m => m.BlockNum)
                              .FirstOrDefault();
                var abi       = abiSerializationProvider.DeserializePackedAbi(account.Abi);
                var action    = abi.actions.First(t => t.name == item.ActName);
                var data      = abiSerializationProvider.DeserializeStructData(action.type, item.ActData, abi);
                item.TempData = data;
            });

            if (string.IsNullOrWhiteSpace(queryParams.TokenSymbol))
            {
                result.Data = list;
            }
            else
            {
                list = list.Where(m => m.Symbol == queryParams.TokenSymbol).ToList();
                result.PagerInfo.TotalRowCount = list.Count;
                result.Data = list.Skip((queryParams.PageIndex - 1) * queryParams.PageSize).Take(queryParams.PageSize).ToList();
            }

            return(result);
        }
Example #4
0
        public List <TokenOfAccountModel> GetTokensOfAccount(string accountName)
        {
            var result = new List <TokenOfAccountModel>();

            var list = DbSet.Where(m => m.Table == "accounts" && m.Scope == accountName)
                       .GroupBy(m => new { m.Code, m.PrimaryKey })
                       .Select(m => new
            {
                Data = m.OrderByDescending(c => c.BlockNum).First()
            })
                       .Where(p => p.Data.Present)
                       .ToList();

            if (!list.Any())
            {
                return(result);
            }

            var codes    = list.Select(m => m.Data.Code).Distinct().ToList();
            var accounts = DbContext.GetDbSet <Account>()
                           .Where(m => codes.Contains(m.Name))
                           .ToList();

            var abiSerializationProvider = new AbiSerializationProvider();

            list.ForEach(item =>
            {
                var account = accounts
                              .Where(m => m.Name == item.Data.Code && m.BlockNum <= item.Data.BlockNum)
                              .OrderByDescending(m => m.BlockNum)
                              .First();
                var abi      = abiSerializationProvider.DeserializePackedAbi(account.Abi);
                var abiTable = abi.tables.First(t => t.name == item.Data.Table);

                var data  = abiSerializationProvider.DeserializeStructData(abiTable.type, item.Data.Value, abi);
                var model = new TokenOfAccountModel
                {
                    Contract = item.Data.Code,
                    Data     = data
                };
                if (!ConfigDataKey.FilterTokenSymbol.Contains(model.Symbol))
                {
                    result.Add(model);
                }
            });

            return(result);
        }
Example #5
0
        public List <TransactionOfAccountModel> ListOfAccount(string accountName, int page)
        {
            var pageSize = 10;
            var list     = DbContext.GetDbSet <ActionTrace>()
                           .Where(m => m.Receiver == accountName)
                           .OrderByDescending(m => m.BlockNum)
                           .ThenBy(m => m.TransactionId)
                           .ThenBy(m => m.ActionOrdinal)
                           .Skip((page - 1) * pageSize)
                           .Take(pageSize)
                           .GroupJoin(DbContext.GetDbSet <BlockInfo>(), m => m.BlockNum, b => b.BlockNum,
                                      (m, b) => new { ActionTrace = m, BlockInfo = b })
                           .SelectMany(combination => combination.BlockInfo.DefaultIfEmpty(), (m, b) =>
                                       new TransactionOfAccountModel
            {
                BlockNum      = m.ActionTrace.BlockNum,
                TransactionId = m.ActionTrace.TransactionId,
                Timestamp     = b.Timestamp,
                Type          = m.ActionTrace.ActName,
                ActAccount    = m.ActionTrace.ActAccount,
                ActName       = m.ActionTrace.ActName,
                TempData      = m.ActionTrace.ActData,
            })
                           .ToList();

            var actAccounts = list.Select(m => m.ActAccount).Distinct().ToList();
            var accounts    = DbContext.GetDbSet <Account>()
                              .Where(p => actAccounts.Contains(p.Name))
                              .ToList();

            var abiSerializationProvider = new AbiSerializationProvider();

            list.ForEach(item =>
            {
                var account = accounts.Where(m => m.Name == item.ActAccount && m.BlockNum <= item.BlockNum)
                              .OrderByDescending(m => m.BlockNum)
                              .FirstOrDefault();
                var abi      = abiSerializationProvider.DeserializePackedAbi(account.Abi);
                var action   = abi.actions.First(t => t.name == item.ActName);
                var data     = abiSerializationProvider.DeserializeStructData(action.type, item.TempData, abi);
                item.ActData = data;
            });

            return(list);
        }
Example #6
0
        public TokenListModel ListToken()
        {
            var result = new TokenListModel();

            var list = GetAllTokenCodes();

            if (!list.Any())
            {
                return(result);
            }

            var codes    = list.Select(m => m.Code).Distinct().ToList();
            var accounts = DbContext.GetDbSet <Account>()
                           .Where(m => codes.Contains(m.Name))
                           .ToList();

            var abiSerializationProvider = new AbiSerializationProvider();

            list.ForEach(item =>
            {
                var account = accounts
                              .Where(m => m.Name == item.Code && m.BlockNum <= item.BlockNum)
                              .OrderByDescending(m => m.BlockNum)
                              .First();
                var abi      = abiSerializationProvider.DeserializePackedAbi(account.Abi);
                var abiTable = abi.tables.First(t => t.name == item.Table);

                var data  = abiSerializationProvider.DeserializeStructData(abiTable.type, item.Value, abi);
                var model = new TokenInfoModel
                {
                    Contract = item.Code,
                    Data     = data
                };
                if (!ConfigDataKey.FilterTokenSymbol.Contains(model.TokenName))
                {
                    result.Lists.Add(model);
                }
            });

            result.TotalTokenCount = result.Lists.Count;
            return(result);
        }
Example #7
0
        public TransactionDetailModel GetTransfer(string trxId)
        {
            var transfer = _dbContext.GetDbSet <ActionTrace>()
                           .Where(m => m.TransactionId == trxId.ToUpper() && m.ActionOrdinal == 1)
                           .GroupJoin(_dbContext.GetDbSet <BlockInfo>(), m => m.BlockNum, b => b.BlockNum,
                                      (m, b) => new { ActionTrace = m, BlockInfo = b })
                           .SelectMany(combination => combination.BlockInfo.DefaultIfEmpty(), (m, b) =>
                                       new TransactionDetailModel
            {
                TempData      = m.ActionTrace.ActData,
                BlockNum      = m.ActionTrace.BlockNum,
                Status        = m.ActionTrace.transaction_status.ToString(),
                BlockTime     = b.Timestamp,
                ActName       = m.ActionTrace.ActName,
                ActionAccount = m.ActionTrace.ActAccount,
                TransactionId = m.ActionTrace.TransactionId
            })
                           .FirstOrDefault();

            if (transfer == null)
            {
                return(transfer);
            }

            var accounts = _dbContext.GetDbSet <Account>()
                           .Where(p => p.Name == transfer.ActionAccount)
                           .ToList();

            var abiSerializationProvider = new AbiSerializationProvider();
            var account = accounts.Where(m => m.Name == transfer.ActionAccount && m.BlockNum <= transfer.BlockNum)
                          .OrderByDescending(m => m.BlockNum)
                          .FirstOrDefault();
            var abi    = abiSerializationProvider.DeserializePackedAbi(account.Abi);
            var action = abi.actions.First(t => t.name == transfer.ActName);
            var data   = abiSerializationProvider.DeserializeStructData(action.type, transfer.TempData, abi);

            transfer.ActData = data;

            return(transfer);
        }
Example #8
0
        public async Task GetRawAbi()
        {
            bool success = false;

            try
            {
                var result = await DefaultApi.GetRawAbi(new GetRawAbiRequest()
                {
                    AccountName = "eosio.token"
                });

                var abiSerializer = new AbiSerializationProvider(DefaultApi);
                var abiObject     = abiSerializer.DeserializePackedAbi(result.Abi);

                success = true;
            }
            catch (Exception ex)
            {
                Console.WriteLine(JsonConvert.SerializeObject(ex));
            }

            Assert.IsTrue(success);
        }
Example #9
0
        public List <TransactionModel> ListTransaction(string txId, string blockKey)
        {
            var result = new List <TransactionModel>();

            if (!string.IsNullOrWhiteSpace(txId) || !string.IsNullOrWhiteSpace(blockKey))
            {
                if (!string.IsNullOrWhiteSpace(txId))
                {
                    txId = txId.ToUpper();
                    var list = DbContext.GetDbSet <ActionTrace>()
                               .Where(m => m.TransactionId == txId)
                               .OrderBy(m => m.ActionOrdinal)
                               .GroupJoin(DbContext.GetDbSet <BlockInfo>(), m => m.BlockNum, b => b.BlockNum,
                                          (m, b) => new { ActionTrace = m, BlockInfo = b })
                               .SelectMany(combination => combination.BlockInfo.DefaultIfEmpty(), (m, b) =>
                                           new TransactionModel
                    {
                        BlockNum             = m.ActionTrace.BlockNum,
                        TransactionId        = m.ActionTrace.TransactionId,
                        ActionOrdinal        = m.ActionTrace.ActionOrdinal,
                        CreatorActionOrdinal = m.ActionTrace.CreatorActionOrdinal,
                        Timestamp            = b.Timestamp,
                        Type       = m.ActionTrace.ActName,
                        ActAccount = m.ActionTrace.ActAccount,
                        ActName    = m.ActionTrace.ActName,
                        TempData   = m.ActionTrace.ActData,
                    })
                               .ToList();

                    if (!list.Any())
                    {
                        return(result);
                    }

                    var actAccounts = list.Select(m => m.ActAccount).Distinct().ToList();
                    var accounts    = DbContext.GetDbSet <Account>()
                                      .Where(p => actAccounts.Contains(p.Name))
                                      .ToList();

                    var abiSerializationProvider = new AbiSerializationProvider();
                    list.ForEach(item =>
                    {
                        var account = accounts.Where(m =>
                                                     m.Name == item.ActAccount && m.BlockNum <= item.BlockNum)
                                      .OrderByDescending(m => m.BlockNum)
                                      .First();
                        var abi    = abiSerializationProvider.DeserializePackedAbi(account.Abi);
                        var action = abi.actions.First(t => t.name == item.ActName);
                        var data   = abiSerializationProvider.DeserializeStructData(action.type, item.TempData,
                                                                                    abi);
                        item.ActData = data;
                        if (result.All(m => m.GetHashCode() != item.GetHashCode()))
                        {
                            result.Add(item);
                        }
                    });
                }
                else
                {
                    BlockInfo blockInfo;
                    var       blcokDbSet = DbContext.GetDbSet <BlockInfo>();
                    if (blockKey.IsBlockNum())
                    {
                        blockInfo = blcokDbSet.SingleOrDefault(m => m.BlockNum == long.Parse(blockKey));
                    }
                    else
                    {
                        blockKey  = blockKey.ToUpper();
                        blockInfo = blcokDbSet.SingleOrDefault(m => m.BlockId == blockKey);
                    }

                    if (blockInfo == null)
                    {
                        return(result);
                    }

                    var list = DbContext.GetDbSet <ActionTrace>()
                               .Where(m => m.BlockNum == blockInfo.BlockNum && m.CreatorActionOrdinal == 0)
                               .ToList();

                    if (!list.Any())
                    {
                        return(result);
                    }

                    var actAccounts = list.Select(m => m.ActAccount).Distinct().ToList();
                    var accounts    = DbContext.GetDbSet <Account>()
                                      .Where(p => actAccounts.Contains(p.Name))
                                      .ToList();

                    var abiSerializationProvider = new AbiSerializationProvider();
                    list.ForEach(item =>
                    {
                        var account = accounts.Where(m =>
                                                     m.Name == item.ActAccount && m.BlockNum <= item.BlockNum)
                                      .OrderByDescending(m => m.BlockNum)
                                      .First();
                        var abi    = abiSerializationProvider.DeserializePackedAbi(account.Abi);
                        var action = abi.actions.First(t => t.name == item.ActName);
                        var data   = abiSerializationProvider.DeserializeStructData(action.type, item.ActData,
                                                                                    abi);
                        result.Add(new TransactionModel
                        {
                            BlockNum      = item.BlockNum,
                            TransactionId = item.TransactionId,
                            Timestamp     = blockInfo.Timestamp,
                            Type          = item.ActName,
                            ActAccount    = item.ActAccount,
                            ActName       = item.ActName,
                            ActData       = data,
                        });
                    });
                }
            }

            return(result);
        }
Example #10
0
        public TransactionRawDataModel GetRawData(string txId)
        {
            txId = txId?.ToUpper();
            var transaction = DbSet.Where(m => m.Id == txId).Select(m => new TransactionRawDataModel
            {
                Id                      = m.Id,
                BlockNum                = m.BlockNum,
                TransactionOrdinal      = m.TransactionOrdinal,
                FailedDtrxTrace         = m.FailedDtrxTrace,
                status                  = m.status.ToString(),
                CpuUsageUs              = m.CpuUsageUs,
                NetUsageWords           = m.NetUsageWords,
                Elapsed                 = m.Elapsed,
                NetUsage                = m.NetUsage,
                Scheduled               = m.Scheduled,
                AccountRamDeltaAccount  = m.AccountRamDeltaAccount,
                AccountRamDeltaDelta    = m.AccountRamDeltaDelta,
                AccountRamDeltaPresent  = m.AccountRamDeltaPresent,
                ErrorCode               = m.ErrorCode,
                PartialExpiration       = m.PartialExpiration,
                PartialPresent          = m.PartialPresent,
                PartialSignatures       = m.PartialSignatures,
                PartialDelaySec         = m.PartialDelaySec,
                PartialContextFreeData  = m.PartialContextFreeData,
                PartialRefBlockNum      = m.PartialRefBlockNum,
                PartialRefBlockPrefix   = m.PartialRefBlockPrefix,
                PartialMaxCpuUsageMs    = m.PartialMaxCpuUsageMs,
                PartialMaxNetUsageWords = m.PartialMaxNetUsageWords,
                Except                  = m.Except,
                Actions                 = DbContext.GetDbSet <ActionTrace>().Where(a => a.TransactionId == txId)
                                          .OrderBy(a => a.ActionOrdinal).Select(a => new ActionTraceRawModel
                {
                    BlockNum              = a.BlockNum,
                    TransactionId         = a.TransactionId,
                    TransactionStatus     = a.transaction_status.ToString(),
                    ActionOrdinal         = a.ActionOrdinal,
                    CreatorActionOrdinal  = a.CreatorActionOrdinal,
                    ReceiptPresent        = a.ReceiptPresent,
                    ReceiptReceiver       = a.ReceiptReceiver,
                    ReceiptActDigest      = a.ReceiptActDigest,
                    ReceiptGlobalSequence = a.ReceiptGlobalSequence,
                    ReceiptRecvSequence   = a.ReceiptRecvSequence,
                    ReceiptCodeSequence   = a.ReceiptCodeSequence,
                    ReceiptAbiSequence    = a.ReceiptAbiSequence,
                    Receiver              = a.Receiver,
                    ActAccount            = a.ActAccount,
                    ActName     = a.ActName,
                    ActData     = a.ActData,
                    ContextFree = a.ContextFree,
                    Elapsed     = a.Elapsed,
                    Console     = a.Console,
                    Except      = a.Except,
                    ErrorCode   = a.ErrorCode
                }).ToList()
            })
                              .SingleOrDefault();

            if (transaction != null)
            {
                var actAccounts = transaction.Actions.Select(m => m.ActAccount).Distinct().ToList();
                var accounts    = DbContext.GetDbSet <Account>()
                                  .Where(p => actAccounts.Contains(p.Name))
                                  .ToList();

                var abiSerializationProvider = new AbiSerializationProvider();

                transaction.Actions.ForEach(item =>
                {
                    var account = accounts.Where(m => m.Name == item.ActAccount && m.BlockNum <= item.BlockNum)
                                  .OrderByDescending(m => m.BlockNum)
                                  .First();
                    var abi          = abiSerializationProvider.DeserializePackedAbi(account.Abi);
                    var action       = abi.actions.First(t => t.name == item.ActName);
                    var data         = abiSerializationProvider.DeserializeStructData(action.type, item.ActData, abi);
                    item.ActTempData = data;
                });
            }

            return(transaction);
        }