public TransactionViewModel(Wallet wallet, WalletTransaction transaction, BlockIdentity transactionLocation)
{
_transaction = transaction;
_location = transactionLocation;
var groupedOutputs = _transaction.NonChangeOutputs.Select(o =>
{
var destination = wallet.OutputDestination(o);
return new GroupedOutput(o.Amount, destination);
}).Aggregate(new List<GroupedOutput>(), (items, next) =>
{
var item = items.Find(a => a.Destination == next.Destination);
if (item == null)
items.Add(next);
else
item.Amount += next.Amount;
return items;
});
Depth = BlockChain.Depth(wallet.ChainTip.Height, transactionLocation);
Inputs = _transaction.Inputs.Select(input => new Input(-input.Amount, wallet.AccountName(input.PreviousAccount))).ToArray();
Outputs = _transaction.Outputs.Select(output => new Output(output.Amount, wallet.OutputDestination(output))).ToArray();
GroupedOutputs = groupedOutputs;
}