Skip to content

Commit 92627cf

Browse files
committed
feat: event emitter will now emit new_txid in-case a tx replaces another
1 parent 40059a5 commit 92627cf

File tree

3 files changed

+27
-15
lines changed

3 files changed

+27
-15
lines changed

stackslib/src/chainstate/stacks/miner.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1406,8 +1406,8 @@ impl<'a> StacksMicroblockBuilder<'a> {
14061406
self.runtime.num_mined = num_txs;
14071407

14081408
mem_pool.drop_txs(&invalidated_txs)?;
1409-
event_dispatcher.mempool_txs_dropped(invalidated_txs, MemPoolDropReason::TOO_EXPENSIVE);
1410-
event_dispatcher.mempool_txs_dropped(to_drop_and_blacklist, MemPoolDropReason::PROBLEMATIC);
1409+
event_dispatcher.mempool_txs_dropped(invalidated_txs, None, MemPoolDropReason::TOO_EXPENSIVE);
1410+
event_dispatcher.mempool_txs_dropped(to_drop_and_blacklist, None, MemPoolDropReason::PROBLEMATIC);
14111411

14121412
if blocked {
14131413
debug!(
@@ -2505,8 +2505,8 @@ impl StacksBlockBuilder {
25052505
mempool.drop_txs(&invalidated_txs)?;
25062506

25072507
if let Some(observer) = event_observer {
2508-
observer.mempool_txs_dropped(invalidated_txs, MemPoolDropReason::TOO_EXPENSIVE);
2509-
observer.mempool_txs_dropped(to_drop_and_blacklist, MemPoolDropReason::PROBLEMATIC);
2508+
observer.mempool_txs_dropped(invalidated_txs, None, MemPoolDropReason::TOO_EXPENSIVE);
2509+
observer.mempool_txs_dropped(to_drop_and_blacklist, None, MemPoolDropReason::PROBLEMATIC);
25102510
}
25112511

25122512
if let Err(e) = result {

stackslib/src/core/mempool.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ pub trait ProposalCallbackReceiver: Send {
390390

391391
pub trait MemPoolEventDispatcher {
392392
fn get_proposal_callback_receiver(&self) -> Option<Box<dyn ProposalCallbackReceiver>>;
393-
fn mempool_txs_dropped(&self, txids: Vec<Txid>, reason: MemPoolDropReason);
393+
fn mempool_txs_dropped(&self, txids: Vec<Txid>, new_txid: Option<Txid>, reason: MemPoolDropReason);
394394
fn mined_block_event(
395395
&self,
396396
target_burn_height: u64,
@@ -2222,7 +2222,7 @@ impl MemPoolDB {
22222222

22232223
// broadcast drop event if a tx is being replaced
22242224
if let (Some(prior_tx), Some(event_observer)) = (prior_tx, event_observer) {
2225-
event_observer.mempool_txs_dropped(vec![prior_tx.txid], replace_reason);
2225+
event_observer.mempool_txs_dropped(vec![prior_tx.txid], Some(txid), replace_reason);
22262226
};
22272227

22282228
Ok(())
@@ -2290,7 +2290,7 @@ impl MemPoolDB {
22902290
if let Some(event_observer) = event_observer {
22912291
let sql = "SELECT txid FROM mempool WHERE height < ?1";
22922292
let txids = query_rows(tx, sql, args)?;
2293-
event_observer.mempool_txs_dropped(txids, MemPoolDropReason::STALE_COLLECT);
2293+
event_observer.mempool_txs_dropped(txids, None, MemPoolDropReason::STALE_COLLECT);
22942294
}
22952295

22962296
let sql = "DELETE FROM mempool WHERE height < ?1";

testnet/stacks-node/src/event_dispatcher.rs

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -941,9 +941,9 @@ impl ProposalCallbackReceiver for ProposalCallbackHandler {
941941
}
942942

943943
impl MemPoolEventDispatcher for EventDispatcher {
944-
fn mempool_txs_dropped(&self, txids: Vec<Txid>, reason: MemPoolDropReason) {
944+
fn mempool_txs_dropped(&self, txids: Vec<Txid>, new_txid: Option<Txid>, reason: MemPoolDropReason) {
945945
if !txids.is_empty() {
946-
self.process_dropped_mempool_txs(txids, reason)
946+
self.process_dropped_mempool_txs(txids, new_txid, reason)
947947
}
948948
}
949949

@@ -1554,7 +1554,7 @@ impl EventDispatcher {
15541554
}
15551555
}
15561556

1557-
pub fn process_dropped_mempool_txs(&self, txs: Vec<Txid>, reason: MemPoolDropReason) {
1557+
pub fn process_dropped_mempool_txs(&self, txs: Vec<Txid>, new_txid: Option<Txid>, reason: MemPoolDropReason) {
15581558
// lazily assemble payload only if we have observers
15591559
let interested_observers = self.filter_observers(&self.mempool_observers_lookup, true);
15601560

@@ -1566,11 +1566,23 @@ impl EventDispatcher {
15661566
.into_iter()
15671567
.map(|tx| serde_json::Value::String(format!("0x{}", &tx)))
15681568
.collect();
1569-
1570-
let payload = json!({
1571-
"dropped_txids": serde_json::Value::Array(dropped_txids),
1572-
"reason": reason.to_string(),
1573-
});
1569+
1570+
let payload = match new_txid{
1571+
Some(id) => {
1572+
json!({
1573+
"dropped_txids": serde_json::Value::Array(dropped_txids),
1574+
"reason": reason.to_string(),
1575+
"new_txid": format!("0x{}", &id),
1576+
})
1577+
},
1578+
None => {
1579+
json!({
1580+
"dropped_txids": serde_json::Value::Array(dropped_txids),
1581+
"reason": reason.to_string(),
1582+
"new_txid": null,
1583+
})
1584+
}
1585+
};
15741586

15751587
for observer in interested_observers.iter() {
15761588
observer.send_dropped_mempool_txs(&payload);

0 commit comments

Comments
 (0)