Skip to content

Commit 489c06c

Browse files
committed
chain(test): updated test scenario for txs with same last_seen
The tx conflict `Scenario` test for unconfirmed txs with the same last_seen has been amended for its corresponding conflict resolution bug fix.
1 parent 2921e82 commit 489c06c

File tree

2 files changed

+18
-20
lines changed

2 files changed

+18
-20
lines changed

crates/chain/src/tx_graph.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -789,22 +789,22 @@ impl<A: Anchor> TxGraph<A> {
789789
if conflicting_tx.last_seen_unconfirmed > tx_last_seen {
790790
return Ok(None);
791791
}
792-
}
793-
if conflicting_tx.last_seen_unconfirmed == *last_seen {
794-
// Check if conflicting tx has higher absolute fee and fee rate
795-
if let (Ok(fee), Ok(conflicting_fee)) =
796-
(self.calculate_fee(tx), self.calculate_fee(&conflicting_tx))
797-
{
798-
let fee_rate = fee as f32 / tx.weight().to_vbytes_ceil() as f32;
799-
let conflicting_fee_rate =
800-
conflicting_fee as f32 / conflicting_tx.weight().to_vbytes_ceil() as f32;
801-
if conflicting_fee > fee && conflicting_fee_rate > fee_rate {
792+
if conflicting_tx.last_seen_unconfirmed == *last_seen {
793+
// Check if conflicting tx has higher absolute fee and fee rate
794+
if let (Ok(fee), Ok(conflicting_fee)) =
795+
(self.calculate_fee(tx), self.calculate_fee(&conflicting_tx))
796+
{
797+
let fee_rate = fee as f32 / tx.weight().to_vbytes_ceil() as f32;
798+
let conflicting_fee_rate = conflicting_fee as f32
799+
/ conflicting_tx.weight().to_vbytes_ceil() as f32;
800+
if conflicting_fee > fee && conflicting_fee_rate > fee_rate {
801+
return Ok(None);
802+
}
803+
} else if conflicting_tx.txid() > tx.txid() {
804+
// If fee rates cannot be distinguished, then conflicting tx has priority if
805+
// txid of conflicting tx > txid of original tx
802806
return Ok(None);
803807
}
804-
} else if conflicting_tx.txid() > tx.txid() {
805-
// If fee rates cannot be distinguished, then conflicting tx has priority if
806-
// txid of conflicting tx > txid of original tx
807-
return Ok(None);
808808
}
809809
}
810810
}

crates/chain/tests/test_tx_graph_conflicts.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,12 @@ fn test_tx_conflict_handling() {
7070
..Default::default()
7171
},
7272
],
73-
// correct output if filtered by fee rate: tx1, tx_conflict_1
74-
exp_chain_txs: HashSet::from(["tx1", "tx_conflict_1", "tx_conflict_2"]),
75-
exp_chain_txouts: HashSet::from([("tx1", 0), ("tx_conflict_1", 0), ("tx_conflict_2", 0)]),
76-
// correct output if filtered by fee rate: tx_conflict_1
77-
exp_unspents: HashSet::from([("tx_conflict_1", 0), ("tx_conflict_2", 0)]),
73+
exp_chain_txs: HashSet::from(["tx1", "tx_conflict_1"]),
74+
exp_chain_txouts: HashSet::from([("tx1", 0), ("tx_conflict_1", 0)]),
75+
exp_unspents: HashSet::from([("tx_conflict_1", 0)]),
7876
exp_balance: Balance {
7977
immature: 0,
80-
trusted_pending: 50000, // correct output if filtered by fee rate: 20000
78+
trusted_pending: 20000,
8179
untrusted_pending: 0,
8280
confirmed: 0,
8381
},

0 commit comments

Comments
 (0)