chain(fix): conflict resolution 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.
This commit is contained in:
parent
2f2f138595
commit
afbf83c8b0
@ -789,6 +789,12 @@ impl<A: Anchor> TxGraph<A> {
|
|||||||
if conflicting_tx.last_seen_unconfirmed > tx_last_seen {
|
if conflicting_tx.last_seen_unconfirmed > tx_last_seen {
|
||||||
return Ok(None);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,10 +50,10 @@ fn test_tx_conflict_handling() {
|
|||||||
tx_templates: &[
|
tx_templates: &[
|
||||||
TxTemplate {
|
TxTemplate {
|
||||||
tx_name: "tx1",
|
tx_name: "tx1",
|
||||||
inputs: &[TxInTemplate::Bogus],
|
|
||||||
outputs: &[TxOutTemplate::new(40000, Some(0))],
|
outputs: &[TxOutTemplate::new(40000, Some(0))],
|
||||||
anchors: &[block_id!(1, "B")],
|
anchors: &[block_id!(1, "B")],
|
||||||
last_seen: None,
|
last_seen: None,
|
||||||
|
..Default::default()
|
||||||
},
|
},
|
||||||
TxTemplate {
|
TxTemplate {
|
||||||
tx_name: "tx_conflict_1",
|
tx_name: "tx_conflict_1",
|
||||||
@ -70,14 +70,12 @@ fn test_tx_conflict_handling() {
|
|||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
// correct output if filtered by fee rate: tx1, tx_conflict_1
|
exp_chain_txs: HashSet::from(["tx1", "tx_conflict_2"]),
|
||||||
exp_chain_txs: HashSet::from(["tx1", "tx_conflict_1", "tx_conflict_2"]),
|
exp_chain_txouts: HashSet::from([("tx1", 0), ("tx_conflict_2", 0)]),
|
||||||
exp_chain_txouts: HashSet::from([("tx1", 0), ("tx_conflict_1", 0), ("tx_conflict_2", 0)]),
|
exp_unspents: HashSet::from([("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_balance: Balance {
|
exp_balance: Balance {
|
||||||
immature: 0,
|
immature: 0,
|
||||||
trusted_pending: 50000, // correct output if filtered by fee rate: 20000
|
trusted_pending: 30000,
|
||||||
untrusted_pending: 0,
|
untrusted_pending: 0,
|
||||||
confirmed: 0,
|
confirmed: 0,
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user