public Amount CalculateSpendableBalance(Account account, int minConf)
{
var balance = LookupAccountProperties(account).ZeroConfSpendableBalance;
if (minConf == 0)
{
return balance;
}
var unminedTxs = RecentTransactions.UnminedTransactions;
foreach (var output in unminedTxs.SelectMany(kvp => OutputsToAccount(kvp.Value.Outputs, account)))
{
balance -= output.Amount;
}
if (minConf == 1)
{
return balance;
}
var confHeight = BlockChain.ConfirmationHeight(ChainTip.Height, minConf);
foreach (var block in RecentTransactions.MinedTransactions.ReverseList().TakeWhile(b => b.Height >= confHeight))
{
var unconfirmedTxs = block.Transactions;
foreach (var output in unconfirmedTxs.SelectMany(tx => OutputsToAccount(tx.Outputs, account)))
{
balance -= output.Amount;
}
}
return balance;
}