mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-04-24 06:39:58 -07:00
mempool: fix recommended fees
This commit is contained in:
@@ -34,6 +34,12 @@ impl EntryPool {
|
|||||||
idx
|
idx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get an entry by its txid prefix.
|
||||||
|
pub fn get(&self, prefix: &TxidPrefix) -> Option<&Entry> {
|
||||||
|
let idx = self.prefix_to_idx.get(prefix)?;
|
||||||
|
self.entries.get(idx.as_usize())?.as_ref()
|
||||||
|
}
|
||||||
|
|
||||||
/// Remove an entry by its txid prefix.
|
/// Remove an entry by its txid prefix.
|
||||||
pub fn remove(&mut self, prefix: &TxidPrefix) {
|
pub fn remove(&mut self, prefix: &TxidPrefix) {
|
||||||
if let Some(idx) = self.prefix_to_idx.remove(prefix) {
|
if let Some(idx) = self.prefix_to_idx.remove(prefix) {
|
||||||
|
|||||||
@@ -173,7 +173,9 @@ impl MempoolInner {
|
|||||||
let tx = tx_with_hex.tx();
|
let tx = tx_with_hex.tx();
|
||||||
let prefix = TxidPrefix::from(txid);
|
let prefix = TxidPrefix::from(txid);
|
||||||
|
|
||||||
info.remove(tx);
|
// Get fee from entries (before removing) - this is the authoritative fee from Bitcoin Core
|
||||||
|
let fee = entries.get(&prefix).map(|e| e.fee).unwrap_or_default();
|
||||||
|
info.remove(tx, fee);
|
||||||
addresses.remove_tx(tx, txid);
|
addresses.remove_tx(tx, txid);
|
||||||
entries.remove(&prefix);
|
entries.remove(&prefix);
|
||||||
},
|
},
|
||||||
@@ -188,7 +190,7 @@ impl MempoolInner {
|
|||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
info.add(tx);
|
info.add(tx, entry_info.fee);
|
||||||
addresses.add_tx(tx, txid);
|
addresses.add_tx(tx, txid);
|
||||||
entries.insert(prefix, Entry::from_info(entry_info));
|
entries.insert(prefix, Entry::from_info(entry_info));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,19 +15,25 @@ pub struct MempoolInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl MempoolInfo {
|
impl MempoolInfo {
|
||||||
/// Increment stats for a newly added transaction
|
/// Increment stats for a newly added transaction.
|
||||||
|
///
|
||||||
|
/// Fee must come from `MempoolEntryInfo` (Bitcoin Core) rather than `tx.fee`
|
||||||
|
/// because `tx.fee` may be 0 for chained mempool transactions where prevouts
|
||||||
|
/// cannot be looked up via `gettxout`.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn add(&mut self, tx: &Transaction) {
|
pub fn add(&mut self, tx: &Transaction, fee: Sats) {
|
||||||
self.count += 1;
|
self.count += 1;
|
||||||
self.vsize += tx.vsize();
|
self.vsize += tx.vsize();
|
||||||
self.total_fee += tx.fee;
|
self.total_fee += fee;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Decrement stats for a removed transaction
|
/// Decrement stats for a removed transaction.
|
||||||
|
///
|
||||||
|
/// Fee must match the fee used when the transaction was added.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn remove(&mut self, tx: &Transaction) {
|
pub fn remove(&mut self, tx: &Transaction, fee: Sats) {
|
||||||
self.count -= 1;
|
self.count -= 1;
|
||||||
self.vsize -= tx.vsize();
|
self.vsize -= tx.vsize();
|
||||||
self.total_fee -= tx.fee;
|
self.total_fee -= fee;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user