use std::cmp::Reverse;
use brk_types::{AddrBytes, AddrMempoolStats, Timestamp, Transaction, TxidPrefix};
use crate::Mempool;
impl Mempool {
pub fn addr_state_hash(&self, addr: &AddrBytes) -> Option<u64> {
self.read().addrs.stats_hash(addr)
}
pub fn addr_stats(&self, addr: &AddrBytes) -> Option<AddrMempoolStats> {
self.read().addrs.get(addr).map(|e| e.stats.clone())
}
#[must_use]
pub fn addr_txs(&self, addr: &AddrBytes, limit: usize) -> Vec<Transaction> {
let state = self.read();
let Some(entry) = state.addrs.get(addr) else {
return vec![];
};
let mut ordered: Vec<(Timestamp, &Transaction)> = entry
.txids
.iter()
.filter_map(|txid| {
let record = state.txs.record_by_prefix(&TxidPrefix::from(txid))?;
Some((record.entry.first_seen, &record.tx))
})
.collect();
ordered.sort_unstable_by_key(|b| Reverse(b.0));
ordered
.into_iter()
.take(limit)
.map(|(_, tx)| tx.clone())
.collect()
}
}