public List <TransactionView> GetTransactions(int blockHeight = 0) { var transactionViews = new List <TransactionView>(); var walletAddresses = Addresses.Select(a => a.Key).ToArray(); using (BlockchainDbContext db = new BlockchainDbContext()) { var transactions = db.Transactions.Include(t => t.Inputs).Include(t => t.Outputs).Where(t => t.BlockHeight > blockHeight && (t.Inputs.Select(i => i.Key).Intersect(walletAddresses).Any() || t.Outputs.Select(i => i.Key).Intersect(walletAddresses).Any())).OrderByDescending(t => t.BlockHeight).ThenByDescending(t => t.Id).Take(10).ToList(); foreach (var transaction in transactions) { var isIncome = transaction.Inputs == null ? true : transaction.Inputs.Select(i => i.Key).All(o => !walletAddresses.Contains(o)); transactionViews.Add(new TransactionView() { Inputs = transaction.Inputs.Select(i => new IOView() { Key = i.Key, Amount = BalanceHelper.GetBalanceOfAddress(i.Key) }).ToArray(), Message = transaction.Data == null ? string.Empty : Encoding.Unicode.GetString(transaction.Data), BlockHeight = transaction.BlockHeight, Outputs = transaction.Outputs.Select(o => new IOView() { Key = o.Key, Amount = o.Amount }).ToArray(), Amount = transaction.Inputs == null || transaction.Inputs.Count == 0 ? transaction.Outputs.Select(o => o.Amount).Sum() : isIncome?transaction.Outputs.Select(o => o.Amount).Sum() : -transaction.Outputs.Where(o => !walletAddresses.Contains(o.Key)).Select(o => o.Amount).Sum(), IsIncome = isIncome }); } } return(transactionViews.OrderBy(t => t.BlockHeight).ToList()); }