Fixing local transactions prioritization
This commit is contained in:
parent
d0b2df07db
commit
edd43cd5c3
@ -172,6 +172,12 @@ impl Ord for TransactionOrder {
|
|||||||
return self.nonce_height.cmp(&b.nonce_height);
|
return self.nonce_height.cmp(&b.nonce_height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Local transactions should always have priority
|
||||||
|
// NOTE nonce has to be checked first, cause otherwise the order might be wrong.
|
||||||
|
if self.origin != b.origin {
|
||||||
|
return self.origin.cmp(&b.origin);
|
||||||
|
}
|
||||||
|
|
||||||
// Then compare gas_prices
|
// Then compare gas_prices
|
||||||
let a_gas = self.gas_price;
|
let a_gas = self.gas_price;
|
||||||
let b_gas = b.gas_price;
|
let b_gas = b.gas_price;
|
||||||
@ -1082,7 +1088,28 @@ mod test {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn should_not_prioritize_local_transactions() {
|
fn should_prioritize_local_transactions_within_same_nonce_height() {
|
||||||
|
// given
|
||||||
|
let mut txq = TransactionQueue::new();
|
||||||
|
let tx = new_tx();
|
||||||
|
// the second one has same nonce but higher `gas_price`
|
||||||
|
let (_, tx2) = new_similar_txs();
|
||||||
|
|
||||||
|
// when
|
||||||
|
// first insert the one with higher gas price
|
||||||
|
txq.add(tx2.clone(), &default_nonce, TransactionOrigin::External).unwrap();
|
||||||
|
// then the one with lower gas price, but local
|
||||||
|
txq.add(tx.clone(), &default_nonce, TransactionOrigin::Local).unwrap();
|
||||||
|
|
||||||
|
// then
|
||||||
|
let top = txq.top_transactions();
|
||||||
|
assert_eq!(top[0], tx); // local should be first
|
||||||
|
assert_eq!(top[1], tx2);
|
||||||
|
assert_eq!(top.len(), 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn should_not_prioritize_local_transactions_with_different_nonce_height() {
|
||||||
// given
|
// given
|
||||||
let mut txq = TransactionQueue::new();
|
let mut txq = TransactionQueue::new();
|
||||||
let (tx, tx2) = new_txs(U256::from(1));
|
let (tx, tx2) = new_txs(U256::from(1));
|
||||||
|
Loading…
Reference in New Issue
Block a user