//! CPFP queries shared by live mempool and confirmed transactions. mod confirmed; use brk_error::{Error, Result}; use brk_types::{FeeRate, Txid, TxidPrefix}; use vecdb::ReadableVec; use crate::Query; impl Query { /// Returns live mempool information when available, otherwise /// reconstructs the confirmed same-block cluster from indexed data. pub fn cpfp(&self, txid: &Txid) -> Result { let prefix = TxidPrefix::from(txid); if let Some(info) = self.mempool().and_then(|m| m.cpfp_info(&prefix)) { return Ok(info); } self.confirmed_cpfp(txid) } /// Effective SFL chunk rate for live, confirmed, or replaced transactions. pub fn effective_fee_rate(&self, txid: &Txid) -> Result { let prefix = TxidPrefix::from(txid); if let Some(mempool) = self.mempool() && let Some(rate) = mempool.live_effective_fee_rate(&prefix) { return Ok(rate); } if let Ok(index) = self.resolve_tx_index(txid) && let Some(rate) = self .computer() .transactions .fees .effective_fee_rate .tx_index .collect_one(index) { return Ok(rate); } if let Some(mempool) = self.mempool() && let Some(rate) = mempool.graveyard_fee_rate(txid) { return Ok(rate); } Err(Error::UnknownTxid) } }