Ejemplo n.º 1
0
        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());
        }