Skip to content

Commit

Permalink
chain(test): updated test scenario for txs with same last_seen
Browse files Browse the repository at this point in the history
The tx conflict `Scenario` test for unconfirmed txs with the same
last_seen has been amended for its corresponding conflict
resolution bug fix.
  • Loading branch information
LagginTimes committed Oct 12, 2023
1 parent 2921e82 commit 489c06c
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 20 deletions.
28 changes: 14 additions & 14 deletions crates/chain/src/tx_graph.rs
Original file line number Diff line number Diff line change
Expand Up @@ -789,22 +789,22 @@ impl<A: Anchor> TxGraph<A> {
if conflicting_tx.last_seen_unconfirmed > tx_last_seen {
return Ok(None);
}
}
if conflicting_tx.last_seen_unconfirmed == *last_seen {
// Check if conflicting tx has higher absolute fee and fee rate
if let (Ok(fee), Ok(conflicting_fee)) =
(self.calculate_fee(tx), self.calculate_fee(&conflicting_tx))
{
let fee_rate = fee as f32 / tx.weight().to_vbytes_ceil() as f32;
let conflicting_fee_rate =
conflicting_fee as f32 / conflicting_tx.weight().to_vbytes_ceil() as f32;
if conflicting_fee > fee && conflicting_fee_rate > fee_rate {
if conflicting_tx.last_seen_unconfirmed == *last_seen {
// Check if conflicting tx has higher absolute fee and fee rate
if let (Ok(fee), Ok(conflicting_fee)) =
(self.calculate_fee(tx), self.calculate_fee(&conflicting_tx))
{
let fee_rate = fee as f32 / tx.weight().to_vbytes_ceil() as f32;
let conflicting_fee_rate = conflicting_fee as f32
/ conflicting_tx.weight().to_vbytes_ceil() as f32;
if conflicting_fee > fee && conflicting_fee_rate > fee_rate {
return Ok(None);
}
} else if conflicting_tx.txid() > tx.txid() {
// If fee rates cannot be distinguished, then conflicting tx has priority if
// txid of conflicting tx > txid of original tx
return Ok(None);
}
} else if conflicting_tx.txid() > tx.txid() {
// If fee rates cannot be distinguished, then conflicting tx has priority if
// txid of conflicting tx > txid of original tx
return Ok(None);
}
}
}
Expand Down
10 changes: 4 additions & 6 deletions crates/chain/tests/test_tx_graph_conflicts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
},
Expand Down

0 comments on commit 489c06c

Please sign in to comment.