Skip to content

Commit d9a3345

Browse files
authored
weights v1.5: iteration 2 (#1613)
1 parent 90bb407 commit d9a3345

File tree

15 files changed

+81
-70
lines changed

15 files changed

+81
-70
lines changed

bin/runtime-common/src/messages.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ pub mod source {
407407
let delivery_transaction = BridgedChain::<B>::estimate_delivery_transaction(
408408
&payload.encode(),
409409
true,
410-
Weight::from_ref_time(0),
410+
Weight::zero(),
411411
);
412412
let delivery_transaction_fee = BridgedChain::<B>::transaction_payment(delivery_transaction);
413413

@@ -733,7 +733,7 @@ pub mod target {
733733
payload.weight = Some(weight);
734734
weight
735735
},
736-
_ => Weight::from_ref_time(0),
736+
_ => Weight::zero(),
737737
}
738738
}
739739

@@ -762,17 +762,22 @@ pub mod target {
762762
location,
763763
xcm,
764764
hash,
765-
weight_limit.unwrap_or(Weight::from_ref_time(0)).ref_time(),
765+
weight_limit.unwrap_or_else(Weight::zero).ref_time(),
766766
weight_credit.ref_time(),
767767
);
768768
Ok(xcm_outcome)
769769
};
770770

771771
let xcm_outcome = do_dispatch();
772-
log::trace!(target: "runtime::bridge-dispatch", "Incoming message {:?} dispatched with result: {:?}", message_id, xcm_outcome);
772+
log::trace!(
773+
target: "runtime::bridge-dispatch",
774+
"Incoming message {:?} dispatched with result: {:?}",
775+
message_id,
776+
xcm_outcome,
777+
);
773778
MessageDispatchResult {
774779
dispatch_result: true,
775-
unspent_weight: Weight::from_ref_time(0),
780+
unspent_weight: Weight::zero(),
776781
dispatch_fee_paid_during_dispatch: false,
777782
}
778783
}

bin/runtime-common/src/messages_api.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ where
3939
nonce,
4040
// dispatch message weight is always zero at the source chain, since we're paying for
4141
// dispatch at the target chain
42-
dispatch_weight: frame_support::weights::Weight::from_ref_time(0),
42+
dispatch_weight: frame_support::weights::Weight::zero(),
4343
size: message_data.payload.len() as _,
4444
delivery_and_dispatch_fee: message_data.fee,
4545
// we're delivering XCM messages here, so fee is always paid at the target chain

bin/runtime-common/src/messages_benchmarking.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ where
9494
nonces_start: *params.message_nonces.start(),
9595
nonces_end: *params.message_nonces.end(),
9696
},
97-
Weight::from_ref_time(0),
97+
Weight::zero(),
9898
)
9999
}
100100

bin/runtime-common/src/messages_extension.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ mod tests {
125125
pallet_bridge_messages::Call::<Runtime, ()>::receive_messages_proof {
126126
relayer_id_at_bridged_chain: [0u8; 32].into(),
127127
messages_count: (nonces_end - nonces_start + 1) as u32,
128-
dispatch_weight: frame_support::weights::Weight::from_ref_time(0),
128+
dispatch_weight: frame_support::weights::Weight::zero(),
129129
proof: FromBridgedChainMessagesProof {
130130
bridged_header_hash: Default::default(),
131131
storage_proof: vec![],

modules/grandpa/src/lib.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,7 @@ pub mod pallet {
135135
fn on_initialize(_n: T::BlockNumber) -> frame_support::weights::Weight {
136136
<RequestCount<T, I>>::mutate(|count| *count = count.saturating_sub(1));
137137

138-
Weight::from_ref_time(0)
139-
.saturating_add(T::DbWeight::get().reads(1))
140-
.saturating_add(T::DbWeight::get().writes(1))
138+
T::DbWeight::get().reads_writes(1, 1)
141139
}
142140
}
143141

modules/messages/src/lib.rs

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -330,11 +330,8 @@ pub mod pallet {
330330
});
331331

332332
// compute actual dispatch weight that depends on the stored message size
333-
let actual_weight = sp_std::cmp::min_by(
334-
T::WeightInfo::maximal_increase_message_fee(),
335-
T::WeightInfo::increase_message_fee(message_size as _),
336-
|w1, w2| w1.ref_time().cmp(&w2.ref_time()),
337-
);
333+
let actual_weight = T::WeightInfo::maximal_increase_message_fee()
334+
.min(T::WeightInfo::increase_message_fee(message_size as _));
338335

339336
Ok(PostDispatchInfo { actual_weight: Some(actual_weight), pays_fee: Pays::Yes })
340337
}
@@ -416,7 +413,7 @@ pub mod pallet {
416413
// on this lane. We can't dispatch lane messages out-of-order, so if declared
417414
// weight is not enough, let's move to next lane
418415
let dispatch_weight = T::MessageDispatch::dispatch_weight(&mut message);
419-
if dispatch_weight.ref_time() > dispatch_weight_left.ref_time() {
416+
if dispatch_weight.any_gt(dispatch_weight_left) {
420417
log::trace!(
421418
target: LOG_TARGET,
422419
"Cannot dispatch any more messages on lane {:?}. Weight: declared={}, left={}",
@@ -454,10 +451,7 @@ pub mod pallet {
454451
ReceivalResult::TooManyUnconfirmedMessages => (dispatch_weight, true),
455452
};
456453

457-
let unspent_weight =
458-
sp_std::cmp::min_by(unspent_weight, dispatch_weight, |w1, w2| {
459-
w1.ref_time().cmp(&w2.ref_time())
460-
});
454+
let unspent_weight = unspent_weight.min(dispatch_weight);
461455
dispatch_weight_left -= dispatch_weight - unspent_weight;
462456
actual_weight = actual_weight.saturating_sub(unspent_weight).saturating_sub(
463457
// delivery call weight formula assumes that the fee is paid at
@@ -466,7 +460,7 @@ pub mod pallet {
466460
if refund_pay_dispatch_fee {
467461
T::WeightInfo::pay_inbound_dispatch_fee_overhead()
468462
} else {
469-
Weight::from_ref_time(0)
463+
Weight::zero()
470464
},
471465
);
472466
}
@@ -585,7 +579,7 @@ pub mod pallet {
585579
let actual_callback_weight =
586580
T::OnDeliveryConfirmed::on_messages_delivered(&lane_id, &confirmed_messages);
587581
match preliminary_callback_overhead.checked_sub(&actual_callback_weight) {
588-
Some(difference) if difference.ref_time() == 0 => (),
582+
Some(difference) if difference.is_zero() => (),
589583
Some(difference) => {
590584
log::trace!(
591585
target: LOG_TARGET,
@@ -880,7 +874,7 @@ fn send_message<T: Config<I>, I: 'static>(
880874
T::WeightInfo::single_message_callback_overhead(T::DbWeight::get());
881875
let actual_callback_weight = T::OnMessageAccepted::on_messages_accepted(&lane_id, &nonce);
882876
match single_message_callback_overhead.checked_sub(&actual_callback_weight) {
883-
Some(difference) if difference.ref_time() == 0 => (),
877+
Some(difference) if difference.is_zero() => (),
884878
Some(difference) => {
885879
log::trace!(
886880
target: LOG_TARGET,

modules/messages/src/weights_ext.rs

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -43,26 +43,26 @@ pub fn ensure_weights_are_correct<W: WeightInfoExt>(
4343
db_weight: RuntimeDbWeight,
4444
) {
4545
// verify `send_message` weight components
46-
assert_ne!(W::send_message_overhead(), Weight::from_ref_time(0));
47-
assert_ne!(W::send_message_size_overhead(0), Weight::from_ref_time(0));
46+
assert_ne!(W::send_message_overhead(), Weight::zero());
47+
assert_ne!(W::send_message_size_overhead(0), Weight::zero());
4848

4949
// verify `receive_messages_proof` weight components
50-
assert_ne!(W::receive_messages_proof_overhead(), Weight::from_ref_time(0));
51-
assert_ne!(W::receive_messages_proof_messages_overhead(1), Weight::from_ref_time(0));
52-
assert_ne!(W::receive_messages_proof_outbound_lane_state_overhead(), Weight::from_ref_time(0));
53-
assert_ne!(W::storage_proof_size_overhead(1), Weight::from_ref_time(0));
50+
assert_ne!(W::receive_messages_proof_overhead(), Weight::zero());
51+
assert_ne!(W::receive_messages_proof_messages_overhead(1), Weight::zero());
52+
assert_ne!(W::receive_messages_proof_outbound_lane_state_overhead(), Weight::zero());
53+
assert_ne!(W::storage_proof_size_overhead(1), Weight::zero());
5454

5555
// verify that the hardcoded value covers `receive_messages_proof` weight
5656
let actual_single_regular_message_delivery_tx_weight = W::receive_messages_proof_weight(
5757
&PreComputedSize(
5858
(EXPECTED_DEFAULT_MESSAGE_LENGTH + W::expected_extra_storage_proof_size()) as usize,
5959
),
6060
1,
61-
Weight::from_ref_time(0),
61+
Weight::zero(),
6262
);
6363
assert!(
64-
actual_single_regular_message_delivery_tx_weight.ref_time() <=
65-
expected_default_message_delivery_tx_weight.ref_time(),
64+
actual_single_regular_message_delivery_tx_weight
65+
.all_lte(expected_default_message_delivery_tx_weight),
6666
"Default message delivery transaction weight {} is larger than expected weight {}",
6767
actual_single_regular_message_delivery_tx_weight,
6868
expected_default_message_delivery_tx_weight,
@@ -71,16 +71,15 @@ pub fn ensure_weights_are_correct<W: WeightInfoExt>(
7171
// verify that hardcoded value covers additional byte length of `receive_messages_proof` weight
7272
let actual_additional_byte_delivery_weight = W::storage_proof_size_overhead(1);
7373
assert!(
74-
actual_additional_byte_delivery_weight.ref_time() <=
75-
expected_additional_byte_delivery_weight.ref_time(),
74+
actual_additional_byte_delivery_weight.all_lte(expected_additional_byte_delivery_weight),
7675
"Single additional byte delivery weight {} is larger than expected weight {}",
7776
actual_additional_byte_delivery_weight,
7877
expected_additional_byte_delivery_weight,
7978
);
8079

8180
// verify `receive_messages_delivery_proof` weight components
82-
assert_ne!(W::receive_messages_delivery_proof_overhead(), Weight::from_ref_time(0));
83-
assert_ne!(W::storage_proof_size_overhead(1), Weight::from_ref_time(0));
81+
assert_ne!(W::receive_messages_delivery_proof_overhead(), Weight::zero());
82+
assert_ne!(W::storage_proof_size_overhead(1), Weight::zero());
8483

8584
// `receive_messages_delivery_proof_messages_overhead` and
8685
// `receive_messages_delivery_proof_relayers_overhead` may return zero if rewards are not paid
@@ -97,8 +96,8 @@ pub fn ensure_weights_are_correct<W: WeightInfoExt>(
9796
db_weight,
9897
);
9998
assert!(
100-
actual_messages_delivery_confirmation_tx_weight.ref_time() <=
101-
expected_messages_delivery_confirmation_tx_weight.ref_time(),
99+
actual_messages_delivery_confirmation_tx_weight
100+
.all_lte(expected_messages_delivery_confirmation_tx_weight),
102101
"Messages delivery confirmation transaction weight {} is larger than expected weight {}",
103102
actual_messages_delivery_confirmation_tx_weight,
104103
expected_messages_delivery_confirmation_tx_weight,
@@ -107,7 +106,7 @@ pub fn ensure_weights_are_correct<W: WeightInfoExt>(
107106
// verify pay-dispatch-fee overhead for inbound messages
108107
let actual_pay_inbound_dispatch_fee_weight = W::pay_inbound_dispatch_fee_overhead();
109108
assert!(
110-
actual_pay_inbound_dispatch_fee_weight.ref_time() <= expected_pay_inbound_dispatch_fee_weight.ref_time(),
109+
actual_pay_inbound_dispatch_fee_weight.all_lte(expected_pay_inbound_dispatch_fee_weight),
111110
"Weight {} of pay-dispatch-fee overhead for inbound messages is larger than expected weight {}",
112111
actual_pay_inbound_dispatch_fee_weight,
113112
expected_pay_inbound_dispatch_fee_weight,
@@ -141,7 +140,7 @@ pub fn ensure_able_to_receive_message<W: WeightInfoExt>(
141140
max_incoming_message_dispatch_weight,
142141
);
143142
assert!(
144-
max_delivery_transaction_dispatch_weight.ref_time() <= max_extrinsic_weight.ref_time(),
143+
max_delivery_transaction_dispatch_weight.all_lte(max_extrinsic_weight),
145144
"Weight of maximal message delivery transaction + {} is larger than maximal possible transaction weight {}",
146145
max_delivery_transaction_dispatch_weight,
147146
max_extrinsic_weight,
@@ -180,7 +179,7 @@ pub fn ensure_able_to_receive_confirmation<W: WeightInfoExt>(
180179
db_weight,
181180
);
182181
assert!(
183-
max_confirmation_transaction_dispatch_weight.ref_time() <= max_extrinsic_weight.ref_time(),
182+
max_confirmation_transaction_dispatch_weight.all_lte(max_extrinsic_weight),
184183
"Weight of maximal confirmation transaction {} is larger than maximal possible transaction weight {}",
185184
max_confirmation_transaction_dispatch_weight,
186185
max_extrinsic_weight,
@@ -263,15 +262,14 @@ pub trait WeightInfoExt: WeightInfo {
263262

264263
// and cost of calling `OnDeliveryConfirmed::on_messages_delivered()` for every confirmed
265264
// message
266-
let callback_overhead = relayers_state
267-
.total_messages
268-
.saturating_mul(Self::single_message_callback_overhead(db_weight).ref_time());
265+
let callback_overhead = Self::single_message_callback_overhead(db_weight)
266+
.saturating_mul(relayers_state.total_messages);
269267

270268
transaction_overhead
271269
.saturating_add(messages_overhead)
272270
.saturating_add(relayers_overhead)
273271
.saturating_add(proof_size_overhead)
274-
.saturating_add(Weight::from_ref_time(callback_overhead))
272+
.saturating_add(callback_overhead)
275273
}
276274

277275
// Functions that are used by extrinsics weights formulas.

modules/parachains/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -748,7 +748,7 @@ mod tests {
748748
let db_weight = <TestRuntime as frame_system::Config>::DbWeight::get();
749749
WeightInfoOf::<TestRuntime, ()>::submit_parachain_heads_weight(db_weight, proof, 1)
750750
.saturating_sub(if prune_expected {
751-
Weight::from_ref_time(0)
751+
Weight::zero()
752752
} else {
753753
WeightInfoOf::<TestRuntime, ()>::parachain_head_pruning_weight(db_weight)
754754
})

primitives/messages/src/source_chain.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ impl<SenderOrigin, Balance, Payload> MessagesBridge<SenderOrigin, Balance, Paylo
195195
_message: Payload,
196196
_delivery_and_dispatch_fee: Balance,
197197
) -> Result<SendMessageArtifacts, Self::Error> {
198-
Ok(SendMessageArtifacts { nonce: 0, weight: Weight::from_ref_time(0) })
198+
Ok(SendMessageArtifacts { nonce: 0, weight: Weight::zero() })
199199
}
200200
}
201201

@@ -220,7 +220,7 @@ pub trait OnDeliveryConfirmed {
220220
#[impl_trait_for_tuples::impl_for_tuples(30)]
221221
impl OnDeliveryConfirmed for Tuple {
222222
fn on_messages_delivered(lane: &LaneId, messages: &DeliveredMessages) -> Weight {
223-
let mut total_weight = Weight::from_ref_time(0);
223+
let mut total_weight = Weight::zero();
224224
for_tuples!(
225225
#(
226226
total_weight = total_weight.saturating_add(Tuple::on_messages_delivered(lane, messages));
@@ -238,7 +238,7 @@ pub trait OnMessageAccepted {
238238

239239
impl OnMessageAccepted for () {
240240
fn on_messages_accepted(_lane: &LaneId, _message: &MessageNonce) -> Weight {
241-
Weight::from_ref_time(0)
241+
Weight::zero()
242242
}
243243
}
244244

primitives/messages/src/target_chain.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ impl<AccountId, Fee> MessageDispatch<AccountId, Fee> for ForbidInboundMessages {
167167
) -> MessageDispatchResult {
168168
MessageDispatchResult {
169169
dispatch_result: false,
170-
unspent_weight: Weight::from_ref_time(0),
170+
unspent_weight: Weight::zero(),
171171
dispatch_fee_paid_during_dispatch: false,
172172
}
173173
}

primitives/runtime/src/lib.rs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020

2121
use codec::{Decode, Encode, FullCodec, MaxEncodedLen};
2222
use frame_support::{
23-
log, pallet_prelude::DispatchResult, PalletError, RuntimeDebug, StorageHasher, StorageValue,
23+
log, pallet_prelude::DispatchResult, weights::Weight, PalletError, RuntimeDebug, StorageHasher,
24+
StorageValue,
2425
};
2526
use frame_system::RawOrigin;
2627
use scale_info::TypeInfo;
@@ -456,6 +457,24 @@ pub trait FilterCall<Call> {
456457
fn validate(call: &Call) -> TransactionValidity;
457458
}
458459

460+
/// All extra operations with weights that we need in bridges.
461+
pub trait WeightExtraOps {
462+
/// Checked division of individual components of two weights.
463+
///
464+
/// Divides components and returns minimal division result. Returns `None` if one
465+
/// of `other` weight components is zero.
466+
fn min_components_checked_div(&self, other: Weight) -> Option<u64>;
467+
}
468+
469+
impl WeightExtraOps for Weight {
470+
fn min_components_checked_div(&self, other: Weight) -> Option<u64> {
471+
Some(sp_std::cmp::min(
472+
self.ref_time().checked_div(other.ref_time())?,
473+
self.proof_size().checked_div(other.proof_size())?,
474+
))
475+
}
476+
}
477+
459478
#[cfg(test)]
460479
mod tests {
461480
use super::*;

relays/lib-substrate-relay/src/messages_lane.rs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ use crate::{
2727

2828
use async_std::sync::Arc;
2929
use bp_messages::{LaneId, MessageNonce};
30-
use bp_runtime::{AccountIdOf, Chain as _};
30+
use bp_runtime::{AccountIdOf, Chain as _, WeightExtraOps};
3131
use bridge_runtime_common::messages::{
3232
source::FromBridgedChainMessagesDeliveryProof, target::FromBridgedChainMessagesProof,
3333
};
@@ -462,15 +462,12 @@ pub fn select_delivery_transaction_limits<W: pallet_bridge_messages::WeightInfoE
462462
W::receive_messages_proof_outbound_lane_state_overhead();
463463
let delivery_tx_weight_rest = weight_for_delivery_tx - delivery_tx_base_weight;
464464

465-
let max_number_of_messages = if delivery_tx_weight_rest.ref_time() /
466-
W::receive_messages_proof_messages_overhead(1).ref_time() <
467-
max_unconfirmed_messages_at_inbound_lane
468-
{
469-
delivery_tx_weight_rest.ref_time() /
470-
W::receive_messages_proof_messages_overhead(1).ref_time()
471-
} else {
472-
max_unconfirmed_messages_at_inbound_lane
473-
};
465+
let max_number_of_messages = std::cmp::min(
466+
delivery_tx_weight_rest
467+
.min_components_checked_div(W::receive_messages_proof_messages_overhead(1))
468+
.unwrap_or(u64::MAX),
469+
max_unconfirmed_messages_at_inbound_lane,
470+
);
474471

475472
assert!(
476473
max_number_of_messages > 0,

relays/lib-substrate-relay/src/messages_source.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -653,7 +653,7 @@ mod tests {
653653
.into_iter()
654654
.map(|nonce| bp_messages::OutboundMessageDetails {
655655
nonce,
656-
dispatch_weight: Weight::from_ref_time(0),
656+
dispatch_weight: Weight::zero(),
657657
size: 0,
658658
delivery_and_dispatch_fee: 0,
659659
dispatch_fee_payment: DispatchFeePayment::AtSourceChain,
@@ -730,7 +730,7 @@ mod tests {
730730
for (idx, _) in payload_sizes.iter().enumerate() {
731731
out_msgs_details.push(OutboundMessageDetails::<BalanceOf<Rialto>> {
732732
nonce: idx as MessageNonce,
733-
dispatch_weight: Weight::from_ref_time(0),
733+
dispatch_weight: Weight::zero(),
734734
size: 0,
735735
delivery_and_dispatch_fee: 0,
736736
dispatch_fee_payment: DispatchFeePayment::AtTargetChain,

relays/messages/src/message_race_delivery.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ impl<P: MessageLane, Strategy: RelayStrategy, SC, TC> MessageDeliveryStrategy<P,
295295
.source_queue()
296296
.iter()
297297
.flat_map(|(_, range)| range.values().map(|details| details.dispatch_weight))
298-
.fold(Weight::from_ref_time(0), |total, weight| total.saturating_add(weight))
298+
.fold(Weight::zero(), |total, weight| total.saturating_add(weight))
299299
}
300300
}
301301

0 commit comments

Comments
 (0)