Skip to content

Commit 7200ed1

Browse files
authored
fiox overflow when computing priority boost (#2587)
1 parent e02cbd3 commit 7200ed1

2 files changed

Lines changed: 39 additions & 2 deletions

File tree

bin/runtime-common/src/priority_calculator.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ where
3838
PriorityBoostPerMessage: Get<TransactionPriority>,
3939
{
4040
// we don't want any boost for transaction with single message => minus one
41-
PriorityBoostPerMessage::get().saturating_mul(messages - 1)
41+
PriorityBoostPerMessage::get().saturating_mul(messages.saturating_sub(1))
4242
}
4343

4444
#[cfg(not(feature = "integrity-test"))]

bin/runtime-common/src/refund_relayer_extension.rs

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -837,7 +837,10 @@ mod tests {
837837
},
838838
mock::*,
839839
};
840-
use bp_messages::{InboundLaneData, MessageNonce, OutboundLaneData, UnrewardedRelayersState};
840+
use bp_messages::{
841+
DeliveredMessages, InboundLaneData, MessageNonce, OutboundLaneData, UnrewardedRelayer,
842+
UnrewardedRelayersState,
843+
};
841844
use bp_parachains::{BestParaHeadHash, ParaInfo};
842845
use bp_polkadot_core::parachains::{ParaHeadsProof, ParaId};
843846
use bp_runtime::HeaderId;
@@ -2186,4 +2189,38 @@ mod tests {
21862189
);
21872190
});
21882191
}
2192+
2193+
#[test]
2194+
fn does_not_panic_on_boosting_priority_of_empty_message_delivery_transaction() {
2195+
run_test(|| {
2196+
let best_delivered_message = MaxUnconfirmedMessagesAtInboundLane::get();
2197+
initialize_environment(100, 100, best_delivered_message);
2198+
2199+
// register relayer so it gets priority boost
2200+
BridgeRelayers::register(RuntimeOrigin::signed(relayer_account_at_this_chain()), 1000)
2201+
.unwrap();
2202+
2203+
// allow empty message delivery transactions
2204+
let lane_id = TestLaneId::get();
2205+
let in_lane_data = InboundLaneData {
2206+
last_confirmed_nonce: 0,
2207+
relayers: vec![UnrewardedRelayer {
2208+
relayer: relayer_account_at_bridged_chain(),
2209+
messages: DeliveredMessages { begin: 1, end: best_delivered_message },
2210+
}]
2211+
.into(),
2212+
};
2213+
pallet_bridge_messages::InboundLanes::<TestRuntime>::insert(lane_id, in_lane_data);
2214+
2215+
// now check that the priority of empty tx is the same as priority of 1-message tx
2216+
let priority_of_zero_messages_delivery =
2217+
run_validate(message_delivery_call(best_delivered_message)).unwrap().priority;
2218+
let priority_of_one_messages_delivery =
2219+
run_validate(message_delivery_call(best_delivered_message + 1))
2220+
.unwrap()
2221+
.priority;
2222+
2223+
assert_eq!(priority_of_zero_messages_delivery, priority_of_one_messages_delivery);
2224+
});
2225+
}
21892226
}

0 commit comments

Comments
 (0)