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); }
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()); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }