20
20
21
21
use crate :: * ;
22
22
23
- use bp_relayers:: RewardsAccountOwner ;
24
- use frame_benchmarking:: { benchmarks_instance_pallet, whitelisted_caller} ;
23
+ use frame_benchmarking:: {
24
+ benchmarks_instance_pallet, whitelisted_caller, BenchmarkError , BenchmarkResult ,
25
+ } ;
26
+ use frame_support:: { assert_ok, weights:: Weight } ;
25
27
use frame_system:: RawOrigin ;
26
28
use sp_runtime:: traits:: One ;
27
29
@@ -33,35 +35,70 @@ pub struct Pallet<T: Config<I>, I: 'static = ()>(crate::Pallet<T, I>);
33
35
34
36
/// Trait that must be implemented by runtime.
35
37
pub trait Config < I : ' static = ( ) > : crate :: Config < I > {
36
- /// Lane id to use in benchmarks.
37
- fn bench_lane_id ( ) -> Self :: LaneId {
38
- Self :: LaneId :: default ( )
39
- }
38
+ /// `T::Reward` to use in benchmarks.
39
+ fn bench_reward ( ) -> Self :: Reward ;
40
40
/// Prepare environment for paying given reward for serving given lane.
41
41
fn prepare_rewards_account (
42
- account_params : RewardsAccountParams < Self :: LaneId > ,
43
- reward : Self :: Reward ,
44
- ) ;
42
+ reward_kind : Self :: Reward ,
43
+ reward : Self :: RewardBalance ,
44
+ ) -> Option < BeneficiaryOf < Self , I > > ;
45
45
/// Give enough balance to given account.
46
- fn deposit_account ( account : Self :: AccountId , balance : Self :: Reward ) ;
46
+ fn deposit_account ( account : Self :: AccountId , balance : Self :: Balance ) ;
47
+ }
48
+
49
+ fn assert_last_event < T : Config < I > , I : ' static > (
50
+ generic_event : <T as pallet:: Config < I > >:: RuntimeEvent ,
51
+ ) {
52
+ frame_system:: Pallet :: < T > :: assert_last_event ( generic_event. into ( ) ) ;
47
53
}
48
54
49
55
benchmarks_instance_pallet ! {
56
+ where_clause { where
57
+ BeneficiaryOf <T , I >: From <<T as frame_system:: Config >:: AccountId >,
58
+ }
59
+
50
60
// Benchmark `claim_rewards` call.
51
61
claim_rewards {
52
- let lane = T :: bench_lane_id( ) ;
53
- let account_params =
54
- RewardsAccountParams :: new( lane, * b"test" , RewardsAccountOwner :: ThisChain ) ;
62
+ let reward_kind = T :: bench_reward( ) ;
55
63
let relayer: T :: AccountId = whitelisted_caller( ) ;
56
- let reward = T :: Reward :: from( REWARD_AMOUNT ) ;
64
+ let reward_balance = T :: RewardBalance :: from( REWARD_AMOUNT ) ;
57
65
58
- T :: prepare_rewards_account( account_params , reward ) ;
59
- RelayerRewards :: <T , I >:: insert( & relayer, account_params , reward ) ;
60
- } : _( RawOrigin :: Signed ( relayer) , account_params )
66
+ let _ = T :: prepare_rewards_account( reward_kind , reward_balance ) ;
67
+ RelayerRewards :: <T , I >:: insert( & relayer, reward_kind , reward_balance ) ;
68
+ } : _( RawOrigin :: Signed ( relayer. clone ( ) ) , reward_kind )
61
69
verify {
62
70
// we can't check anything here, because `PaymentProcedure` is responsible for
63
71
// payment logic, so we assume that if call has succeeded, the procedure has
64
72
// also completed successfully
73
+ assert_last_event:: <T , I >( Event :: RewardPaid {
74
+ relayer: relayer. clone( ) ,
75
+ reward_kind,
76
+ reward_balance,
77
+ beneficiary: relayer. into( ) ,
78
+ } . into( ) ) ;
79
+ }
80
+
81
+ // Benchmark `claim_rewards_to` call.
82
+ claim_rewards_to {
83
+ let reward_kind = T :: bench_reward( ) ;
84
+ let relayer: T :: AccountId = whitelisted_caller( ) ;
85
+ let reward_balance = T :: RewardBalance :: from( REWARD_AMOUNT ) ;
86
+
87
+ let Some ( alternative_beneficiary) = T :: prepare_rewards_account( reward_kind, reward_balance) else {
88
+ return Err ( BenchmarkError :: Override ( BenchmarkResult :: from_weight( Weight :: MAX ) ) ) ;
89
+ } ;
90
+ RelayerRewards :: <T , I >:: insert( & relayer, reward_kind, reward_balance) ;
91
+ } : _( RawOrigin :: Signed ( relayer. clone( ) ) , reward_kind, alternative_beneficiary. clone( ) )
92
+ verify {
93
+ // we can't check anything here, because `PaymentProcedure` is responsible for
94
+ // payment logic, so we assume that if call has succeeded, the procedure has
95
+ // also completed successfully
96
+ assert_last_event:: <T , I >( Event :: RewardPaid {
97
+ relayer,
98
+ reward_kind,
99
+ reward_balance,
100
+ beneficiary: alternative_beneficiary,
101
+ } . into( ) ) ;
65
102
}
66
103
67
104
// Benchmark `register` call.
@@ -95,7 +132,7 @@ benchmarks_instance_pallet! {
95
132
}
96
133
97
134
// Benchmark `slash_and_deregister` method of the pallet. We are adding this weight to
98
- // the weight of message delivery call if `RefundBridgedParachainMessages ` signed extension
135
+ // the weight of message delivery call if `BridgeRelayersTransactionExtension ` signed extension
99
136
// is deployed at runtime level.
100
137
slash_and_deregister {
101
138
// prepare and register relayer account
@@ -105,32 +142,30 @@ benchmarks_instance_pallet! {
105
142
. saturating_add( One :: one( ) )
106
143
. saturating_add( One :: one( ) ) ;
107
144
T :: deposit_account( relayer. clone( ) , crate :: Pallet :: <T , I >:: required_stake( ) ) ;
108
- crate :: Pallet :: <T , I >:: register( RawOrigin :: Signed ( relayer. clone( ) ) . into( ) , valid_till) . unwrap ( ) ;
145
+ assert_ok! ( crate :: Pallet :: <T , I >:: register( RawOrigin :: Signed ( relayer. clone( ) ) . into( ) , valid_till) ) ;
109
146
110
147
// create slash destination account
111
- let lane = T :: bench_lane_id( ) ;
112
- let slash_destination = RewardsAccountParams :: new( lane, * b"test" , RewardsAccountOwner :: ThisChain ) ;
113
- T :: prepare_rewards_account( slash_destination, Zero :: zero( ) ) ;
148
+ let slash_destination: T :: AccountId = whitelisted_caller( ) ;
149
+ T :: deposit_account( slash_destination. clone( ) , Zero :: zero( ) ) ;
114
150
} : {
115
- crate :: Pallet :: <T , I >:: slash_and_deregister( & relayer, slash_destination . into ( ) )
151
+ crate :: Pallet :: <T , I >:: slash_and_deregister( & relayer, bp_relayers :: ExplicitOrAccountParams :: Explicit :: <_ , ( ) > ( slash_destination ) )
116
152
}
117
153
verify {
118
154
assert!( !crate :: Pallet :: <T , I >:: is_registration_active( & relayer) ) ;
119
155
}
120
156
121
157
// Benchmark `register_relayer_reward` method of the pallet. We are adding this weight to
122
- // the weight of message delivery call if `RefundBridgedParachainMessages ` signed extension
158
+ // the weight of message delivery call if `BridgeRelayersTransactionExtension ` signed extension
123
159
// is deployed at runtime level.
124
160
register_relayer_reward {
125
- let lane = T :: bench_lane_id ( ) ;
161
+ let reward_kind = T :: bench_reward ( ) ;
126
162
let relayer: T :: AccountId = whitelisted_caller( ) ;
127
- let account_params =
128
- RewardsAccountParams :: new( lane, * b"test" , RewardsAccountOwner :: ThisChain ) ;
163
+
129
164
} : {
130
- crate :: Pallet :: <T , I >:: register_relayer_reward( account_params , & relayer, One :: one( ) ) ;
165
+ crate :: Pallet :: <T , I >:: register_relayer_reward( reward_kind , & relayer, One :: one( ) ) ;
131
166
}
132
167
verify {
133
- assert_eq!( RelayerRewards :: <T , I >:: get( relayer, & account_params ) , Some ( One :: one( ) ) ) ;
168
+ assert_eq!( RelayerRewards :: <T , I >:: get( relayer, & reward_kind ) , Some ( One :: one( ) ) ) ;
134
169
}
135
170
136
171
impl_benchmark_test_suite!( Pallet , crate :: mock:: new_test_ext( ) , crate :: mock:: TestRuntime )
0 commit comments