@@ -81,6 +81,10 @@ pub struct MessageDeliveryProofParams<ThisChainAccountId> {
81
81
82
82
/// Trait that must be implemented by runtime.
83
83
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
+ }
84
88
/// Get maximal size of the message payload.
85
89
fn maximal_message_size ( ) -> u32 ;
86
90
/// Return id of relayer account at the bridged chain.
@@ -121,7 +125,7 @@ benchmarks_instance! {
121
125
// (estimated using `send_half_maximal_message_worst_case` and `send_maximal_message_worst_case`) is
122
126
// added.
123
127
send_minimal_message_worst_case {
124
- let lane_id = bench_lane_id( ) ;
128
+ let lane_id = T :: bench_lane_id( ) ;
125
129
let sender = account( "sender" , 0 , SEED ) ;
126
130
T :: endow_account( & sender) ;
127
131
@@ -138,7 +142,7 @@ benchmarks_instance! {
138
142
} : send_message( RawOrigin :: Signed ( sender) , lane_id, payload, fee)
139
143
verify {
140
144
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( ) ) ,
142
146
T :: MaxMessagesToPruneAtOnce :: get( ) + 1 ,
143
147
) ;
144
148
}
@@ -152,7 +156,7 @@ benchmarks_instance! {
152
156
// With single KB of message size, the weight of the call is increased (roughly) by
153
157
// `(send_16_kb_message_worst_case - send_1_kb_message_worst_case) / 15`.
154
158
send_1_kb_message_worst_case {
155
- let lane_id = bench_lane_id( ) ;
159
+ let lane_id = T :: bench_lane_id( ) ;
156
160
let sender = account( "sender" , 0 , SEED ) ;
157
161
T :: endow_account( & sender) ;
158
162
@@ -175,7 +179,7 @@ benchmarks_instance! {
175
179
} : send_message( RawOrigin :: Signed ( sender) , lane_id, payload, fee)
176
180
verify {
177
181
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( ) ) ,
179
183
T :: MaxMessagesToPruneAtOnce :: get( ) + 1 ,
180
184
) ;
181
185
}
@@ -189,7 +193,7 @@ benchmarks_instance! {
189
193
// With single KB of message size, the weight of the call is increased (roughly) by
190
194
// `(send_16_kb_message_worst_case - send_1_kb_message_worst_case) / 15`.
191
195
send_16_kb_message_worst_case {
192
- let lane_id = bench_lane_id( ) ;
196
+ let lane_id = T :: bench_lane_id( ) ;
193
197
let sender = account( "sender" , 0 , SEED ) ;
194
198
T :: endow_account( & sender) ;
195
199
@@ -212,11 +216,28 @@ benchmarks_instance! {
212
216
} : send_message( RawOrigin :: Signed ( sender) , lane_id, payload, fee)
213
217
verify {
214
218
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( ) ) ,
216
220
T :: MaxMessagesToPruneAtOnce :: get( ) + 1 ,
217
221
) ;
218
222
}
219
223
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
+
220
241
// Benchmark `receive_messages_proof` extrinsic with single minimal-weight message and following conditions:
221
242
// * proof does not include outbound lane state proof;
222
243
// * inbound lane already has state, so it needs to be read and decoded;
@@ -232,15 +253,15 @@ benchmarks_instance! {
232
253
receive_messages:: <T , I >( 20 ) ;
233
254
234
255
let ( proof, dispatch_weight) = T :: prepare_message_proof( MessageProofParams {
235
- lane: bench_lane_id( ) ,
256
+ lane: T :: bench_lane_id( ) ,
236
257
message_nonces: 21 ..=21 ,
237
258
outbound_lane_data: None ,
238
259
size: ProofSize :: Minimal ( EXPECTED_DEFAULT_MESSAGE_LENGTH ) ,
239
260
} ) ;
240
261
} : receive_messages_proof( RawOrigin :: Signed ( relayer_id_on_target) , relayer_id_on_source, proof, 1 , dispatch_weight)
241
262
verify {
242
263
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( ) ) ,
244
265
21 ,
245
266
) ;
246
267
}
@@ -263,15 +284,15 @@ benchmarks_instance! {
263
284
receive_messages:: <T , I >( 20 ) ;
264
285
265
286
let ( proof, dispatch_weight) = T :: prepare_message_proof( MessageProofParams {
266
- lane: bench_lane_id( ) ,
287
+ lane: T :: bench_lane_id( ) ,
267
288
message_nonces: 21 ..=22 ,
268
289
outbound_lane_data: None ,
269
290
size: ProofSize :: Minimal ( EXPECTED_DEFAULT_MESSAGE_LENGTH ) ,
270
291
} ) ;
271
292
} : receive_messages_proof( RawOrigin :: Signed ( relayer_id_on_target) , relayer_id_on_source, proof, 2 , dispatch_weight)
272
293
verify {
273
294
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( ) ) ,
275
296
22 ,
276
297
) ;
277
298
}
@@ -294,7 +315,7 @@ benchmarks_instance! {
294
315
receive_messages:: <T , I >( 20 ) ;
295
316
296
317
let ( proof, dispatch_weight) = T :: prepare_message_proof( MessageProofParams {
297
- lane: bench_lane_id( ) ,
318
+ lane: T :: bench_lane_id( ) ,
298
319
message_nonces: 21 ..=21 ,
299
320
outbound_lane_data: Some ( OutboundLaneData {
300
321
oldest_unpruned_nonce: 21 ,
@@ -306,11 +327,11 @@ benchmarks_instance! {
306
327
} : receive_messages_proof( RawOrigin :: Signed ( relayer_id_on_target) , relayer_id_on_source, proof, 1 , dispatch_weight)
307
328
verify {
308
329
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( ) ) ,
310
331
21 ,
311
332
) ;
312
333
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( ) ) ,
314
335
20 ,
315
336
) ;
316
337
}
@@ -332,15 +353,15 @@ benchmarks_instance! {
332
353
receive_messages:: <T , I >( 20 ) ;
333
354
334
355
let ( proof, dispatch_weight) = T :: prepare_message_proof( MessageProofParams {
335
- lane: bench_lane_id( ) ,
356
+ lane: T :: bench_lane_id( ) ,
336
357
message_nonces: 21 ..=21 ,
337
358
outbound_lane_data: None ,
338
359
size: ProofSize :: HasExtraNodes ( 1024 ) ,
339
360
} ) ;
340
361
} : receive_messages_proof( RawOrigin :: Signed ( relayer_id_on_target) , relayer_id_on_source, proof, 1 , dispatch_weight)
341
362
verify {
342
363
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( ) ) ,
344
365
21 ,
345
366
) ;
346
367
}
@@ -364,15 +385,15 @@ benchmarks_instance! {
364
385
receive_messages:: <T , I >( 20 ) ;
365
386
366
387
let ( proof, dispatch_weight) = T :: prepare_message_proof( MessageProofParams {
367
- lane: bench_lane_id( ) ,
388
+ lane: T :: bench_lane_id( ) ,
368
389
message_nonces: 21 ..=21 ,
369
390
outbound_lane_data: None ,
370
391
size: ProofSize :: HasExtraNodes ( 16 * 1024 ) ,
371
392
} ) ;
372
393
} : receive_messages_proof( RawOrigin :: Signed ( relayer_id_on_target) , relayer_id_on_source, proof, 1 , dispatch_weight)
373
394
verify {
374
395
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( ) ) ,
376
397
21 ,
377
398
) ;
378
399
}
@@ -397,7 +418,7 @@ benchmarks_instance! {
397
418
total_messages: 1 ,
398
419
} ;
399
420
let proof = T :: prepare_message_delivery_proof( MessageDeliveryProofParams {
400
- lane: bench_lane_id( ) ,
421
+ lane: T :: bench_lane_id( ) ,
401
422
inbound_lane_data: InboundLaneData {
402
423
relayers: vec![ ( 1 , 1 , relayer_id. clone( ) ) ] . into_iter( ) . collect( ) ,
403
424
last_confirmed_nonce: 0 ,
@@ -435,7 +456,7 @@ benchmarks_instance! {
435
456
total_messages: 2 ,
436
457
} ;
437
458
let proof = T :: prepare_message_delivery_proof( MessageDeliveryProofParams {
438
- lane: bench_lane_id( ) ,
459
+ lane: T :: bench_lane_id( ) ,
439
460
inbound_lane_data: InboundLaneData {
440
461
relayers: vec![ ( 1 , 2 , relayer_id. clone( ) ) ] . into_iter( ) . collect( ) ,
441
462
last_confirmed_nonce: 0 ,
@@ -472,7 +493,7 @@ benchmarks_instance! {
472
493
total_messages: 2 ,
473
494
} ;
474
495
let proof = T :: prepare_message_delivery_proof( MessageDeliveryProofParams {
475
- lane: bench_lane_id( ) ,
496
+ lane: T :: bench_lane_id( ) ,
476
497
inbound_lane_data: InboundLaneData {
477
498
relayers: vec![
478
499
( 1 , 1 , relayer1_id. clone( ) ) ,
@@ -502,7 +523,7 @@ benchmarks_instance! {
502
523
send_messages_of_various_lengths {
503
524
let i in 0 ..T :: maximal_message_size( ) . try_into( ) . unwrap_or_default( ) ;
504
525
505
- let lane_id = bench_lane_id( ) ;
526
+ let lane_id = T :: bench_lane_id( ) ;
506
527
let sender = account( "sender" , 0 , SEED ) ;
507
528
T :: endow_account( & sender) ;
508
529
@@ -519,7 +540,7 @@ benchmarks_instance! {
519
540
} : send_message( RawOrigin :: Signed ( sender) , lane_id, payload, fee)
520
541
verify {
521
542
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( ) ) ,
523
544
T :: MaxMessagesToPruneAtOnce :: get( ) + 1 ,
524
545
) ;
525
546
}
@@ -544,7 +565,7 @@ benchmarks_instance! {
544
565
receive_messages:: <T , I >( 20 ) ;
545
566
546
567
let ( proof, dispatch_weight) = T :: prepare_message_proof( MessageProofParams {
547
- lane: bench_lane_id( ) ,
568
+ lane: T :: bench_lane_id( ) ,
548
569
message_nonces: 21 ..=( 20 + i as MessageNonce ) ,
549
570
outbound_lane_data: None ,
550
571
size: ProofSize :: Minimal ( EXPECTED_DEFAULT_MESSAGE_LENGTH ) ,
@@ -558,7 +579,7 @@ benchmarks_instance! {
558
579
)
559
580
verify {
560
581
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( ) ) ,
562
583
20 + i as MessageNonce ,
563
584
) ;
564
585
}
@@ -581,7 +602,7 @@ benchmarks_instance! {
581
602
receive_messages:: <T , I >( 20 ) ;
582
603
583
604
let ( proof, dispatch_weight) = T :: prepare_message_proof( MessageProofParams {
584
- lane: bench_lane_id( ) ,
605
+ lane: T :: bench_lane_id( ) ,
585
606
message_nonces: 21 ..=21 ,
586
607
outbound_lane_data: None ,
587
608
size: ProofSize :: HasExtraNodes ( i as _) ,
@@ -595,7 +616,7 @@ benchmarks_instance! {
595
616
)
596
617
verify {
597
618
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( ) ) ,
599
620
21 ,
600
621
) ;
601
622
}
@@ -618,7 +639,7 @@ benchmarks_instance! {
618
639
receive_messages:: <T , I >( 20 ) ;
619
640
620
641
let ( proof, dispatch_weight) = T :: prepare_message_proof( MessageProofParams {
621
- lane: bench_lane_id( ) ,
642
+ lane: T :: bench_lane_id( ) ,
622
643
message_nonces: 21 ..=21 ,
623
644
outbound_lane_data: None ,
624
645
size: ProofSize :: HasLargeLeaf ( i as _) ,
@@ -632,7 +653,7 @@ benchmarks_instance! {
632
653
)
633
654
verify {
634
655
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( ) ) ,
636
657
21 ,
637
658
) ;
638
659
}
@@ -657,7 +678,7 @@ benchmarks_instance! {
657
678
receive_messages:: <T , I >( 20 ) ;
658
679
659
680
let ( proof, dispatch_weight) = T :: prepare_message_proof( MessageProofParams {
660
- lane: bench_lane_id( ) ,
681
+ lane: T :: bench_lane_id( ) ,
661
682
message_nonces: 21 ..=20 + i as MessageNonce ,
662
683
outbound_lane_data: Some ( OutboundLaneData {
663
684
oldest_unpruned_nonce: 21 ,
@@ -675,11 +696,11 @@ benchmarks_instance! {
675
696
)
676
697
verify {
677
698
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( ) ) ,
679
700
20 + i as MessageNonce ,
680
701
) ;
681
702
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( ) ) ,
683
704
20 ,
684
705
) ;
685
706
}
@@ -708,7 +729,7 @@ benchmarks_instance! {
708
729
total_messages: i as MessageNonce ,
709
730
} ;
710
731
let proof = T :: prepare_message_delivery_proof( MessageDeliveryProofParams {
711
- lane: bench_lane_id( ) ,
732
+ lane: T :: bench_lane_id( ) ,
712
733
inbound_lane_data: InboundLaneData {
713
734
relayers: vec![ ( 1 , i as MessageNonce , relayer_id. clone( ) ) ] . into_iter( ) . collect( ) ,
714
735
last_confirmed_nonce: 0 ,
@@ -750,7 +771,7 @@ benchmarks_instance! {
750
771
total_messages: i as MessageNonce ,
751
772
} ;
752
773
let proof = T :: prepare_message_delivery_proof( MessageDeliveryProofParams {
753
- lane: bench_lane_id( ) ,
774
+ lane: T :: bench_lane_id( ) ,
754
775
inbound_lane_data: InboundLaneData {
755
776
relayers: relayers
756
777
. keys( )
@@ -769,25 +790,29 @@ benchmarks_instance! {
769
790
}
770
791
}
771
792
772
- fn bench_lane_id ( ) -> LaneId {
773
- * b"test"
774
- }
775
-
776
793
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 ( ) ) ;
778
795
outbound_lane. send_message ( MessageData {
779
796
payload : vec ! [ ] ,
780
797
fee : MESSAGE_FEE . into ( ) ,
781
798
} ) ;
782
799
}
783
800
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
+
784
809
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 ( ) ) ;
786
811
assert ! ( outbound_lane. confirm_delivery( nonce) . is_some( ) ) ;
787
812
}
788
813
789
814
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 ( ) ) ;
791
816
inbound_lane_storage. set_data ( InboundLaneData {
792
817
relayers : vec ! [ ( 1 , nonce, T :: bridged_relayer_id( ) ) ] . into_iter ( ) . collect ( ) ,
793
818
last_confirmed_nonce : 0 ,
0 commit comments