use std::collections::HashMap;
use bitcoin::{Amount, FeeRate, Weight};
use ark::{vtxo::Full, Vtxo};
use crate::exit::models::{ExitTx, ExitTxStatus};
pub(crate) fn count_broadcast(status: &[ExitTx]) -> usize {
status.iter().filter(|s| match s.status {
ExitTxStatus::BroadcastWithCpfp { .. } => true,
ExitTxStatus::Confirmed { .. } => true,
_ => false,
}).count()
}
pub(crate) fn count_confirmed(status: &[ExitTx]) -> usize {
status.iter().filter(|s| match s.status {
ExitTxStatus::Confirmed { .. } => true,
_ => false,
}).count()
}
pub(crate) fn estimate_exit_cost<'a, I>(vtxos: I, fee_rate: FeeRate) -> Amount
where
I: IntoIterator<Item = &'a Vtxo<Full>>
{
let mut all_txs = HashMap::with_capacity(10);
for vtxo in vtxos {
for tx in vtxo.transactions() {
all_txs.insert(tx.tx.compute_txid(), tx.tx);
}
}
let total_weight = all_txs.values().map(|t| t.weight()).sum::<Weight>();
fee_rate * total_weight * 2
}