diff --git a/crates/chain/src/tx_graph.rs b/crates/chain/src/tx_graph.rs index 1f7bcdb122..6fb1ee4fa7 100644 --- a/crates/chain/src/tx_graph.rs +++ b/crates/chain/src/tx_graph.rs @@ -789,6 +789,12 @@ impl TxGraph { if conflicting_tx.last_seen_unconfirmed > tx_last_seen { return Ok(None); } + if conflicting_tx.last_seen_unconfirmed == *last_seen + && conflicting_tx.txid() > tx.txid() + { + // Conflicting tx has priority if txid of conflicting tx > txid of original tx + return Ok(None); + } } } diff --git a/crates/chain/tests/test_tx_graph_conflicts.rs b/crates/chain/tests/test_tx_graph_conflicts.rs index 1794d8452f..9669b3aed2 100644 --- a/crates/chain/tests/test_tx_graph_conflicts.rs +++ b/crates/chain/tests/test_tx_graph_conflicts.rs @@ -70,14 +70,12 @@ fn test_tx_conflict_handling() { ..Default::default() }, ], - // correct output if filtered by fee rate: tx1, tx_conflict_1 - exp_chain_txs: HashSet::from(["tx1", "tx_conflict_1", "tx_conflict_2"]), - exp_chain_txouts: HashSet::from([("tx1", 0), ("tx_conflict_1", 0), ("tx_conflict_2", 0)]), - // correct output if filtered by fee rate: tx_conflict_1 - exp_unspents: HashSet::from([("tx_conflict_1", 0), ("tx_conflict_2", 0)]), + exp_chain_txs: HashSet::from(["tx1", "tx_conflict_1"]), + exp_chain_txouts: HashSet::from([("tx1", 0), ("tx_conflict_1", 0)]), + exp_unspents: HashSet::from([("tx_conflict_1", 0)]), exp_balance: Balance { immature: 0, - trusted_pending: 50000, // correct output if filtered by fee rate: 20000 + trusted_pending: 20000, untrusted_pending: 0, confirmed: 0, },