Skip to content

Commit 93d4d36

Browse files
authored
Increase message fee call (paritytech#718)
* fn increase_message_fee() * benchmarks + weights * - extra lines * split error
1 parent 94f2a60 commit 93d4d36

File tree

3 files changed

+231
-87
lines changed

3 files changed

+231
-87
lines changed

bridges/modules/message-lane/src/benchmarking.rs

Lines changed: 65 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@ pub struct MessageDeliveryProofParams<ThisChainAccountId> {
8181

8282
/// Trait that must be implemented by runtime.
8383
pub trait Config<I: Instance>: crate::Config<I> {
84+
/// Lane id to use in benchmarks.
85+
fn bench_lane_id() -> LaneId {
86+
Default::default()
87+
}
8488
/// Get maximal size of the message payload.
8589
fn maximal_message_size() -> u32;
8690
/// Return id of relayer account at the bridged chain.
@@ -121,7 +125,7 @@ benchmarks_instance! {
121125
// (estimated using `send_half_maximal_message_worst_case` and `send_maximal_message_worst_case`) is
122126
// added.
123127
send_minimal_message_worst_case {
124-
let lane_id = bench_lane_id();
128+
let lane_id = T::bench_lane_id();
125129
let sender = account("sender", 0, SEED);
126130
T::endow_account(&sender);
127131

@@ -138,7 +142,7 @@ benchmarks_instance! {
138142
}: send_message(RawOrigin::Signed(sender), lane_id, payload, fee)
139143
verify {
140144
assert_eq!(
141-
crate::Module::<T, I>::outbound_latest_generated_nonce(bench_lane_id()),
145+
crate::Module::<T, I>::outbound_latest_generated_nonce(T::bench_lane_id()),
142146
T::MaxMessagesToPruneAtOnce::get() + 1,
143147
);
144148
}
@@ -152,7 +156,7 @@ benchmarks_instance! {
152156
// With single KB of message size, the weight of the call is increased (roughly) by
153157
// `(send_16_kb_message_worst_case - send_1_kb_message_worst_case) / 15`.
154158
send_1_kb_message_worst_case {
155-
let lane_id = bench_lane_id();
159+
let lane_id = T::bench_lane_id();
156160
let sender = account("sender", 0, SEED);
157161
T::endow_account(&sender);
158162

@@ -175,7 +179,7 @@ benchmarks_instance! {
175179
}: send_message(RawOrigin::Signed(sender), lane_id, payload, fee)
176180
verify {
177181
assert_eq!(
178-
crate::Module::<T, I>::outbound_latest_generated_nonce(bench_lane_id()),
182+
crate::Module::<T, I>::outbound_latest_generated_nonce(T::bench_lane_id()),
179183
T::MaxMessagesToPruneAtOnce::get() + 1,
180184
);
181185
}
@@ -189,7 +193,7 @@ benchmarks_instance! {
189193
// With single KB of message size, the weight of the call is increased (roughly) by
190194
// `(send_16_kb_message_worst_case - send_1_kb_message_worst_case) / 15`.
191195
send_16_kb_message_worst_case {
192-
let lane_id = bench_lane_id();
196+
let lane_id = T::bench_lane_id();
193197
let sender = account("sender", 0, SEED);
194198
T::endow_account(&sender);
195199

@@ -212,11 +216,28 @@ benchmarks_instance! {
212216
}: send_message(RawOrigin::Signed(sender), lane_id, payload, fee)
213217
verify {
214218
assert_eq!(
215-
crate::Module::<T, I>::outbound_latest_generated_nonce(bench_lane_id()),
219+
crate::Module::<T, I>::outbound_latest_generated_nonce(T::bench_lane_id()),
216220
T::MaxMessagesToPruneAtOnce::get() + 1,
217221
);
218222
}
219223

224+
// Benchmark `increase_message_fee` with following conditions:
225+
// * message has maximal message;
226+
// * submitter account is killed because its balance is less than ED after payment.
227+
increase_message_fee {
228+
let sender = account("sender", 42, SEED);
229+
T::endow_account(&sender);
230+
231+
let additional_fee = T::account_balance(&sender);
232+
let lane_id = T::bench_lane_id();
233+
let nonce = 1;
234+
235+
send_regular_message_with_payload::<T, I>(vec![42u8; T::maximal_message_size() as _]);
236+
}: increase_message_fee(RawOrigin::Signed(sender.clone()), lane_id, nonce, additional_fee)
237+
verify {
238+
assert_eq!(T::account_balance(&sender), 0.into());
239+
}
240+
220241
// Benchmark `receive_messages_proof` extrinsic with single minimal-weight message and following conditions:
221242
// * proof does not include outbound lane state proof;
222243
// * inbound lane already has state, so it needs to be read and decoded;
@@ -232,15 +253,15 @@ benchmarks_instance! {
232253
receive_messages::<T, I>(20);
233254

234255
let (proof, dispatch_weight) = T::prepare_message_proof(MessageProofParams {
235-
lane: bench_lane_id(),
256+
lane: T::bench_lane_id(),
236257
message_nonces: 21..=21,
237258
outbound_lane_data: None,
238259
size: ProofSize::Minimal(EXPECTED_DEFAULT_MESSAGE_LENGTH),
239260
});
240261
}: receive_messages_proof(RawOrigin::Signed(relayer_id_on_target), relayer_id_on_source, proof, 1, dispatch_weight)
241262
verify {
242263
assert_eq!(
243-
crate::Module::<T, I>::inbound_latest_received_nonce(bench_lane_id()),
264+
crate::Module::<T, I>::inbound_latest_received_nonce(T::bench_lane_id()),
244265
21,
245266
);
246267
}
@@ -263,15 +284,15 @@ benchmarks_instance! {
263284
receive_messages::<T, I>(20);
264285

265286
let (proof, dispatch_weight) = T::prepare_message_proof(MessageProofParams {
266-
lane: bench_lane_id(),
287+
lane: T::bench_lane_id(),
267288
message_nonces: 21..=22,
268289
outbound_lane_data: None,
269290
size: ProofSize::Minimal(EXPECTED_DEFAULT_MESSAGE_LENGTH),
270291
});
271292
}: receive_messages_proof(RawOrigin::Signed(relayer_id_on_target), relayer_id_on_source, proof, 2, dispatch_weight)
272293
verify {
273294
assert_eq!(
274-
crate::Module::<T, I>::inbound_latest_received_nonce(bench_lane_id()),
295+
crate::Module::<T, I>::inbound_latest_received_nonce(T::bench_lane_id()),
275296
22,
276297
);
277298
}
@@ -294,7 +315,7 @@ benchmarks_instance! {
294315
receive_messages::<T, I>(20);
295316

296317
let (proof, dispatch_weight) = T::prepare_message_proof(MessageProofParams {
297-
lane: bench_lane_id(),
318+
lane: T::bench_lane_id(),
298319
message_nonces: 21..=21,
299320
outbound_lane_data: Some(OutboundLaneData {
300321
oldest_unpruned_nonce: 21,
@@ -306,11 +327,11 @@ benchmarks_instance! {
306327
}: receive_messages_proof(RawOrigin::Signed(relayer_id_on_target), relayer_id_on_source, proof, 1, dispatch_weight)
307328
verify {
308329
assert_eq!(
309-
crate::Module::<T, I>::inbound_latest_received_nonce(bench_lane_id()),
330+
crate::Module::<T, I>::inbound_latest_received_nonce(T::bench_lane_id()),
310331
21,
311332
);
312333
assert_eq!(
313-
crate::Module::<T, I>::inbound_latest_confirmed_nonce(bench_lane_id()),
334+
crate::Module::<T, I>::inbound_latest_confirmed_nonce(T::bench_lane_id()),
314335
20,
315336
);
316337
}
@@ -332,15 +353,15 @@ benchmarks_instance! {
332353
receive_messages::<T, I>(20);
333354

334355
let (proof, dispatch_weight) = T::prepare_message_proof(MessageProofParams {
335-
lane: bench_lane_id(),
356+
lane: T::bench_lane_id(),
336357
message_nonces: 21..=21,
337358
outbound_lane_data: None,
338359
size: ProofSize::HasExtraNodes(1024),
339360
});
340361
}: receive_messages_proof(RawOrigin::Signed(relayer_id_on_target), relayer_id_on_source, proof, 1, dispatch_weight)
341362
verify {
342363
assert_eq!(
343-
crate::Module::<T, I>::inbound_latest_received_nonce(bench_lane_id()),
364+
crate::Module::<T, I>::inbound_latest_received_nonce(T::bench_lane_id()),
344365
21,
345366
);
346367
}
@@ -364,15 +385,15 @@ benchmarks_instance! {
364385
receive_messages::<T, I>(20);
365386

366387
let (proof, dispatch_weight) = T::prepare_message_proof(MessageProofParams {
367-
lane: bench_lane_id(),
388+
lane: T::bench_lane_id(),
368389
message_nonces: 21..=21,
369390
outbound_lane_data: None,
370391
size: ProofSize::HasExtraNodes(16 * 1024),
371392
});
372393
}: receive_messages_proof(RawOrigin::Signed(relayer_id_on_target), relayer_id_on_source, proof, 1, dispatch_weight)
373394
verify {
374395
assert_eq!(
375-
crate::Module::<T, I>::inbound_latest_received_nonce(bench_lane_id()),
396+
crate::Module::<T, I>::inbound_latest_received_nonce(T::bench_lane_id()),
376397
21,
377398
);
378399
}
@@ -397,7 +418,7 @@ benchmarks_instance! {
397418
total_messages: 1,
398419
};
399420
let proof = T::prepare_message_delivery_proof(MessageDeliveryProofParams {
400-
lane: bench_lane_id(),
421+
lane: T::bench_lane_id(),
401422
inbound_lane_data: InboundLaneData {
402423
relayers: vec![(1, 1, relayer_id.clone())].into_iter().collect(),
403424
last_confirmed_nonce: 0,
@@ -435,7 +456,7 @@ benchmarks_instance! {
435456
total_messages: 2,
436457
};
437458
let proof = T::prepare_message_delivery_proof(MessageDeliveryProofParams {
438-
lane: bench_lane_id(),
459+
lane: T::bench_lane_id(),
439460
inbound_lane_data: InboundLaneData {
440461
relayers: vec![(1, 2, relayer_id.clone())].into_iter().collect(),
441462
last_confirmed_nonce: 0,
@@ -472,7 +493,7 @@ benchmarks_instance! {
472493
total_messages: 2,
473494
};
474495
let proof = T::prepare_message_delivery_proof(MessageDeliveryProofParams {
475-
lane: bench_lane_id(),
496+
lane: T::bench_lane_id(),
476497
inbound_lane_data: InboundLaneData {
477498
relayers: vec![
478499
(1, 1, relayer1_id.clone()),
@@ -502,7 +523,7 @@ benchmarks_instance! {
502523
send_messages_of_various_lengths {
503524
let i in 0..T::maximal_message_size().try_into().unwrap_or_default();
504525

505-
let lane_id = bench_lane_id();
526+
let lane_id = T::bench_lane_id();
506527
let sender = account("sender", 0, SEED);
507528
T::endow_account(&sender);
508529

@@ -519,7 +540,7 @@ benchmarks_instance! {
519540
}: send_message(RawOrigin::Signed(sender), lane_id, payload, fee)
520541
verify {
521542
assert_eq!(
522-
crate::Module::<T, I>::outbound_latest_generated_nonce(bench_lane_id()),
543+
crate::Module::<T, I>::outbound_latest_generated_nonce(T::bench_lane_id()),
523544
T::MaxMessagesToPruneAtOnce::get() + 1,
524545
);
525546
}
@@ -544,7 +565,7 @@ benchmarks_instance! {
544565
receive_messages::<T, I>(20);
545566

546567
let (proof, dispatch_weight) = T::prepare_message_proof(MessageProofParams {
547-
lane: bench_lane_id(),
568+
lane: T::bench_lane_id(),
548569
message_nonces: 21..=(20 + i as MessageNonce),
549570
outbound_lane_data: None,
550571
size: ProofSize::Minimal(EXPECTED_DEFAULT_MESSAGE_LENGTH),
@@ -558,7 +579,7 @@ benchmarks_instance! {
558579
)
559580
verify {
560581
assert_eq!(
561-
crate::Module::<T, I>::inbound_latest_received_nonce(bench_lane_id()),
582+
crate::Module::<T, I>::inbound_latest_received_nonce(T::bench_lane_id()),
562583
20 + i as MessageNonce,
563584
);
564585
}
@@ -581,7 +602,7 @@ benchmarks_instance! {
581602
receive_messages::<T, I>(20);
582603

583604
let (proof, dispatch_weight) = T::prepare_message_proof(MessageProofParams {
584-
lane: bench_lane_id(),
605+
lane: T::bench_lane_id(),
585606
message_nonces: 21..=21,
586607
outbound_lane_data: None,
587608
size: ProofSize::HasExtraNodes(i as _),
@@ -595,7 +616,7 @@ benchmarks_instance! {
595616
)
596617
verify {
597618
assert_eq!(
598-
crate::Module::<T, I>::inbound_latest_received_nonce(bench_lane_id()),
619+
crate::Module::<T, I>::inbound_latest_received_nonce(T::bench_lane_id()),
599620
21,
600621
);
601622
}
@@ -618,7 +639,7 @@ benchmarks_instance! {
618639
receive_messages::<T, I>(20);
619640

620641
let (proof, dispatch_weight) = T::prepare_message_proof(MessageProofParams {
621-
lane: bench_lane_id(),
642+
lane: T::bench_lane_id(),
622643
message_nonces: 21..=21,
623644
outbound_lane_data: None,
624645
size: ProofSize::HasLargeLeaf(i as _),
@@ -632,7 +653,7 @@ benchmarks_instance! {
632653
)
633654
verify {
634655
assert_eq!(
635-
crate::Module::<T, I>::inbound_latest_received_nonce(bench_lane_id()),
656+
crate::Module::<T, I>::inbound_latest_received_nonce(T::bench_lane_id()),
636657
21,
637658
);
638659
}
@@ -657,7 +678,7 @@ benchmarks_instance! {
657678
receive_messages::<T, I>(20);
658679

659680
let (proof, dispatch_weight) = T::prepare_message_proof(MessageProofParams {
660-
lane: bench_lane_id(),
681+
lane: T::bench_lane_id(),
661682
message_nonces: 21..=20 + i as MessageNonce,
662683
outbound_lane_data: Some(OutboundLaneData {
663684
oldest_unpruned_nonce: 21,
@@ -675,11 +696,11 @@ benchmarks_instance! {
675696
)
676697
verify {
677698
assert_eq!(
678-
crate::Module::<T, I>::inbound_latest_received_nonce(bench_lane_id()),
699+
crate::Module::<T, I>::inbound_latest_received_nonce(T::bench_lane_id()),
679700
20 + i as MessageNonce,
680701
);
681702
assert_eq!(
682-
crate::Module::<T, I>::inbound_latest_confirmed_nonce(bench_lane_id()),
703+
crate::Module::<T, I>::inbound_latest_confirmed_nonce(T::bench_lane_id()),
683704
20,
684705
);
685706
}
@@ -708,7 +729,7 @@ benchmarks_instance! {
708729
total_messages: i as MessageNonce,
709730
};
710731
let proof = T::prepare_message_delivery_proof(MessageDeliveryProofParams {
711-
lane: bench_lane_id(),
732+
lane: T::bench_lane_id(),
712733
inbound_lane_data: InboundLaneData {
713734
relayers: vec![(1, i as MessageNonce, relayer_id.clone())].into_iter().collect(),
714735
last_confirmed_nonce: 0,
@@ -750,7 +771,7 @@ benchmarks_instance! {
750771
total_messages: i as MessageNonce,
751772
};
752773
let proof = T::prepare_message_delivery_proof(MessageDeliveryProofParams {
753-
lane: bench_lane_id(),
774+
lane: T::bench_lane_id(),
754775
inbound_lane_data: InboundLaneData {
755776
relayers: relayers
756777
.keys()
@@ -769,25 +790,29 @@ benchmarks_instance! {
769790
}
770791
}
771792

772-
fn bench_lane_id() -> LaneId {
773-
*b"test"
774-
}
775-
776793
fn send_regular_message<T: Config<I>, I: Instance>() {
777-
let mut outbound_lane = outbound_lane::<T, I>(bench_lane_id());
794+
let mut outbound_lane = outbound_lane::<T, I>(T::bench_lane_id());
778795
outbound_lane.send_message(MessageData {
779796
payload: vec![],
780797
fee: MESSAGE_FEE.into(),
781798
});
782799
}
783800

801+
fn send_regular_message_with_payload<T: Config<I>, I: Instance>(payload: Vec<u8>) {
802+
let mut outbound_lane = outbound_lane::<T, I>(T::bench_lane_id());
803+
outbound_lane.send_message(MessageData {
804+
payload,
805+
fee: MESSAGE_FEE.into(),
806+
});
807+
}
808+
784809
fn confirm_message_delivery<T: Config<I>, I: Instance>(nonce: MessageNonce) {
785-
let mut outbound_lane = outbound_lane::<T, I>(bench_lane_id());
810+
let mut outbound_lane = outbound_lane::<T, I>(T::bench_lane_id());
786811
assert!(outbound_lane.confirm_delivery(nonce).is_some());
787812
}
788813

789814
fn receive_messages<T: Config<I>, I: Instance>(nonce: MessageNonce) {
790-
let mut inbound_lane_storage = inbound_lane_storage::<T, I>(bench_lane_id());
815+
let mut inbound_lane_storage = inbound_lane_storage::<T, I>(T::bench_lane_id());
791816
inbound_lane_storage.set_data(InboundLaneData {
792817
relayers: vec![(1, nonce, T::bridged_relayer_id())].into_iter().collect(),
793818
last_confirmed_nonce: 0,

0 commit comments

Comments
 (0)