diff --git a/Cargo.lock b/Cargo.lock index c19e362fd..f04970daa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1823,7 +1823,7 @@ checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -2798,9 +2798,9 @@ dependencies = [ [[package]] name = "serde_qs" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2316d01592c3382277c5062105510e35e0a6bfb2851e30028485f7af8cf1240" +checksum = "67d525c8ff68aa99e5818302259bdd02d86d0303710616f39c0f44846ff6d332" dependencies = [ "axum", "itoa", @@ -3702,9 +3702,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" [[package]] name = "wio" diff --git a/crates/brk_query/src/impl/addr.rs b/crates/brk_query/src/impl/addr.rs index b1958ca57..08c7e1b67 100644 --- a/crates/brk_query/src/impl/addr.rs +++ b/crates/brk_query/src/impl/addr.rs @@ -208,7 +208,7 @@ impl Query { pub fn addr_mempool_hash(&self, addr: &Addr) -> Option { let mempool = self.mempool()?; let bytes = AddrBytes::from_str(addr).ok()?; - Some(mempool.addr_state_hash(&bytes)) + mempool.addr_state_hash(&bytes) } pub fn addr_mempool_txs(&self, addr: &Addr, limit: usize) -> Result> { diff --git a/crates/brk_query/src/impl/mempool.rs b/crates/brk_query/src/impl/mempool.rs index 2dca0ac55..df1740680 100644 --- a/crates/brk_query/src/impl/mempool.rs +++ b/crates/brk_query/src/impl/mempool.rs @@ -1,6 +1,6 @@ use crate::Query; use brk_error::{Error, Result}; -use brk_mempool::{Mempool, PrevoutResolver, RbfForTx, RbfNode}; +use brk_mempool::{Mempool, RbfForTx, RbfNode}; use brk_types::{ BlockTemplate, BlockTemplateDiff, CheckedSub, FeeRate, MempoolBlock, MempoolInfo, MempoolRecentTx, NextBlockHash, OutputType, RbfResponse, RbfTx, RecommendedFees, @@ -32,8 +32,12 @@ impl Query { Ok(mempool.block_stats().iter().map(MempoolBlock::from).collect()) } - /// Indexer-backed resolver for confirmed-parent prevouts. - pub fn indexer_prevout_resolver(&self) -> PrevoutResolver { + /// Indexer-backed resolver for confirmed-parent prevouts. Boxed so + /// the caller (typically [`Mempool::start_with`]) can stash one + /// resolver behind a stable type for the lifetime of the loop. + pub fn indexer_prevout_resolver( + &self, + ) -> Box FxHashMap<(Txid, Vout), TxOut> + Send + Sync> { let indexer = self.0.indexer; Box::new(move |holes: &[(Txid, Vout)]| { diff --git a/crates/brk_types/src/tx.rs b/crates/brk_types/src/tx.rs index 67938d0ba..5cf5edc43 100644 --- a/crates/brk_types/src/tx.rs +++ b/crates/brk_types/src/tx.rs @@ -98,6 +98,14 @@ impl Transaction { FeeRate::from((self.fee, self.vsize())) } + /// Recompute `total_sigop_cost` from current inputs/outputs and + /// write it back into the field. Cheaper than rebuilding the + /// transaction when prevouts arrive; the only mutator paired with + /// [`Self::total_sigop_cost`]. + pub fn refresh_sigops(&mut self) { + self.total_sigop_cost = self.total_sigop_cost(); + } + /// Total sigop cost (BIP-141 weight units). /// /// Mirrors `bitcoin::Transaction::total_sigop_cost`, but reads