1
1
// This file is part of Substrate.
2
-
2
+ //
3
3
// Copyright (C) Parity Technologies (UK) Ltd.
4
4
// SPDX-License-Identifier: Apache-2.0
5
-
5
+ //
6
6
// Licensed under the Apache License, Version 2.0 (the "License");
7
7
// you may not use this file except in compliance with the License.
8
8
// You may obtain a copy of the License at
9
9
//
10
- // http://www.apache.org/licenses/LICENSE-2.0
10
+ // http://www.apache.org/licenses/LICENSE-2.0/
11
11
//
12
12
// Unless required by applicable law or agreed to in writing, software
13
13
// distributed under the License is distributed on an "AS IS" BASIS,
@@ -24,17 +24,23 @@ use crate::Pallet as Proxy;
24
24
use alloc:: { boxed:: Box , vec} ;
25
25
use frame_benchmarking:: v1:: { account, benchmarks, whitelisted_caller} ;
26
26
use frame_system:: { pallet_prelude:: BlockNumberFor , RawOrigin } ;
27
- use sp_runtime:: traits:: Bounded ;
27
+ use sp_runtime:: traits:: { Bounded , CheckedDiv } ;
28
28
29
29
const SEED : u32 = 0 ;
30
30
31
31
fn assert_last_event < T : Config > ( generic_event : <T as Config >:: RuntimeEvent ) {
32
32
frame_system:: Pallet :: < T > :: assert_last_event ( generic_event. into ( ) ) ;
33
33
}
34
34
35
+ fn half_max_balance < T : Config > ( ) -> BalanceOf < T > {
36
+ BalanceOf :: < T > :: max_value ( )
37
+ . checked_div ( & BalanceOf :: < T > :: from ( 2_u32 ) )
38
+ . unwrap_or_else ( BalanceOf :: < T > :: max_value)
39
+ }
40
+
35
41
fn add_proxies < T : Config > ( n : u32 , maybe_who : Option < T :: AccountId > ) -> Result < ( ) , & ' static str > {
36
42
let caller = maybe_who. unwrap_or_else ( whitelisted_caller) ;
37
- T :: Currency :: make_free_balance_be ( & caller, BalanceOf :: < T > :: max_value ( ) / 2u32 . into ( ) ) ;
43
+ T :: Currency :: make_free_balance_be ( & caller, half_max_balance :: < T > ( ) ) ;
38
44
for i in 0 ..n {
39
45
let real = T :: Lookup :: unlookup ( account ( "target" , i, SEED ) ) ;
40
46
@@ -55,12 +61,12 @@ fn add_announcements<T: Config>(
55
61
) -> Result < ( ) , & ' static str > {
56
62
let caller = maybe_who. unwrap_or_else ( || account ( "caller" , 0 , SEED ) ) ;
57
63
let caller_lookup = T :: Lookup :: unlookup ( caller. clone ( ) ) ;
58
- T :: Currency :: make_free_balance_be ( & caller, BalanceOf :: < T > :: max_value ( ) / 2u32 . into ( ) ) ;
64
+ T :: Currency :: make_free_balance_be ( & caller, half_max_balance :: < T > ( ) ) ;
59
65
let real = if let Some ( real) = maybe_real {
60
66
real
61
67
} else {
62
68
let real = account ( "real" , 0 , SEED ) ;
63
- T :: Currency :: make_free_balance_be ( & real, BalanceOf :: < T > :: max_value ( ) / 2u32 . into ( ) ) ;
69
+ T :: Currency :: make_free_balance_be ( & real, half_max_balance :: < T > ( ) ) ;
64
70
Proxy :: < T > :: add_proxy (
65
71
RawOrigin :: Signed ( real. clone ( ) ) . into ( ) ,
66
72
caller_lookup,
@@ -82,11 +88,9 @@ fn add_announcements<T: Config>(
82
88
83
89
benchmarks ! {
84
90
proxy {
85
- let p in 1 .. ( T :: MaxProxies :: get( ) - 1 ) => add_proxies:: <T >( p, None ) ?;
86
- // In this case the caller is the "target" proxy
87
- let caller: T :: AccountId = account( "target" , p - 1 , SEED ) ;
88
- T :: Currency :: make_free_balance_be( & caller, BalanceOf :: <T >:: max_value( ) / 2u32 . into( ) ) ;
89
- // ... and "real" is the traditional caller. This is not a typo.
91
+ let p in 1 .. ( T :: MaxProxies :: get( ) . saturating_sub( 1 ) ) => add_proxies:: <T >( p, None ) ?;
92
+ let caller: T :: AccountId = account( "target" , p. saturating_sub( 1 ) , SEED ) ;
93
+ T :: Currency :: make_free_balance_be( & caller, half_max_balance:: <T >( ) ) ;
90
94
let real: T :: AccountId = whitelisted_caller( ) ;
91
95
let real_lookup = T :: Lookup :: unlookup( real) ;
92
96
let call: <T as Config >:: RuntimeCall = frame_system:: Call :: <T >:: remark { remark: vec![ ] } . into( ) ;
@@ -96,14 +100,12 @@ benchmarks! {
96
100
}
97
101
98
102
proxy_announced {
99
- let a in 0 .. T :: MaxPending :: get( ) - 1 ;
100
- let p in 1 .. ( T :: MaxProxies :: get( ) - 1 ) => add_proxies:: <T >( p, None ) ?;
101
- // In this case the caller is the "target" proxy
103
+ let a in 0 .. T :: MaxPending :: get( ) . saturating_sub( 1 ) ;
104
+ let p in 1 .. ( T :: MaxProxies :: get( ) . saturating_sub( 1 ) ) => add_proxies:: <T >( p, None ) ?;
102
105
let caller: T :: AccountId = account( "pure" , 0 , SEED ) ;
103
- let delegate: T :: AccountId = account( "target" , p - 1 , SEED ) ;
106
+ let delegate: T :: AccountId = account( "target" , p. saturating_sub ( 1 ) , SEED ) ;
104
107
let delegate_lookup = T :: Lookup :: unlookup( delegate. clone( ) ) ;
105
- T :: Currency :: make_free_balance_be( & delegate, BalanceOf :: <T >:: max_value( ) / 2u32 . into( ) ) ;
106
- // ... and "real" is the traditional caller. This is not a typo.
108
+ T :: Currency :: make_free_balance_be( & delegate, half_max_balance:: <T >( ) ) ;
107
109
let real: T :: AccountId = whitelisted_caller( ) ;
108
110
let real_lookup = T :: Lookup :: unlookup( real) ;
109
111
let call: <T as Config >:: RuntimeCall = frame_system:: Call :: <T >:: remark { remark: vec![ ] } . into( ) ;
@@ -119,12 +121,10 @@ benchmarks! {
119
121
}
120
122
121
123
remove_announcement {
122
- let a in 0 .. T :: MaxPending :: get( ) - 1 ;
123
- let p in 1 .. ( T :: MaxProxies :: get( ) - 1 ) => add_proxies:: <T >( p, None ) ?;
124
- // In this case the caller is the "target" proxy
125
- let caller: T :: AccountId = account( "target" , p - 1 , SEED ) ;
126
- T :: Currency :: make_free_balance_be( & caller, BalanceOf :: <T >:: max_value( ) / 2u32 . into( ) ) ;
127
- // ... and "real" is the traditional caller. This is not a typo.
124
+ let a in 0 .. T :: MaxPending :: get( ) . saturating_sub( 1 ) ;
125
+ let p in 1 .. ( T :: MaxProxies :: get( ) . saturating_sub( 1 ) ) => add_proxies:: <T >( p, None ) ?;
126
+ let caller: T :: AccountId = account( "target" , p. saturating_sub( 1 ) , SEED ) ;
127
+ T :: Currency :: make_free_balance_be( & caller, half_max_balance:: <T >( ) ) ;
128
128
let real: T :: AccountId = whitelisted_caller( ) ;
129
129
let real_lookup = T :: Lookup :: unlookup( real) ;
130
130
let call: <T as Config >:: RuntimeCall = frame_system:: Call :: <T >:: remark { remark: vec![ ] } . into( ) ;
@@ -141,13 +141,11 @@ benchmarks! {
141
141
}
142
142
143
143
reject_announcement {
144
- let a in 0 .. T :: MaxPending :: get( ) - 1 ;
145
- let p in 1 .. ( T :: MaxProxies :: get( ) - 1 ) => add_proxies:: <T >( p, None ) ?;
146
- // In this case the caller is the "target" proxy
147
- let caller: T :: AccountId = account( "target" , p - 1 , SEED ) ;
144
+ let a in 0 .. T :: MaxPending :: get( ) . saturating_sub( 1 ) ;
145
+ let p in 1 .. ( T :: MaxProxies :: get( ) . saturating_sub( 1 ) ) => add_proxies:: <T >( p, None ) ?;
146
+ let caller: T :: AccountId = account( "target" , p. saturating_sub( 1 ) , SEED ) ;
148
147
let caller_lookup = T :: Lookup :: unlookup( caller. clone( ) ) ;
149
- T :: Currency :: make_free_balance_be( & caller, BalanceOf :: <T >:: max_value( ) / 2u32 . into( ) ) ;
150
- // ... and "real" is the traditional caller. This is not a typo.
148
+ T :: Currency :: make_free_balance_be( & caller, half_max_balance:: <T >( ) ) ;
151
149
let real: T :: AccountId = whitelisted_caller( ) ;
152
150
let real_lookup = T :: Lookup :: unlookup( real. clone( ) ) ;
153
151
let call: <T as Config >:: RuntimeCall = frame_system:: Call :: <T >:: remark { remark: vec![ ] } . into( ) ;
@@ -164,12 +162,10 @@ benchmarks! {
164
162
}
165
163
166
164
announce {
167
- let a in 0 .. T :: MaxPending :: get( ) - 1 ;
168
- let p in 1 .. ( T :: MaxProxies :: get( ) - 1 ) => add_proxies:: <T >( p, None ) ?;
169
- // In this case the caller is the "target" proxy
170
- let caller: T :: AccountId = account( "target" , p - 1 , SEED ) ;
171
- T :: Currency :: make_free_balance_be( & caller, BalanceOf :: <T >:: max_value( ) / 2u32 . into( ) ) ;
172
- // ... and "real" is the traditional caller. This is not a typo.
165
+ let a in 0 .. T :: MaxPending :: get( ) . saturating_sub( 1 ) ;
166
+ let p in 1 .. ( T :: MaxProxies :: get( ) . saturating_sub( 1 ) ) => add_proxies:: <T >( p, None ) ?;
167
+ let caller: T :: AccountId = account( "target" , p. saturating_sub( 1 ) , SEED ) ;
168
+ T :: Currency :: make_free_balance_be( & caller, half_max_balance:: <T >( ) ) ;
173
169
let real: T :: AccountId = whitelisted_caller( ) ;
174
170
let real_lookup = T :: Lookup :: unlookup( real. clone( ) ) ;
175
171
add_announcements:: <T >( a, Some ( caller. clone( ) ) , None ) ?;
@@ -181,7 +177,7 @@ benchmarks! {
181
177
}
182
178
183
179
add_proxy {
184
- let p in 1 .. ( T :: MaxProxies :: get( ) - 1 ) => add_proxies:: <T >( p, None ) ?;
180
+ let p in 1 .. ( T :: MaxProxies :: get( ) . saturating_sub ( 1 ) ) => add_proxies:: <T >( p, None ) ?;
185
181
let caller: T :: AccountId = whitelisted_caller( ) ;
186
182
let real = T :: Lookup :: unlookup( account( "target" , T :: MaxProxies :: get( ) , SEED ) ) ;
187
183
} : _(
@@ -192,11 +188,11 @@ benchmarks! {
192
188
)
193
189
verify {
194
190
let ( proxies, _) = Proxies :: <T >:: get( caller) ;
195
- assert_eq!( proxies. len( ) as u32 , p + 1 ) ;
191
+ assert_eq!( proxies. len( ) as u32 , p. saturating_add ( 1 ) ) ;
196
192
}
197
193
198
194
remove_proxy {
199
- let p in 1 .. ( T :: MaxProxies :: get( ) - 1 ) => add_proxies:: <T >( p, None ) ?;
195
+ let p in 1 .. ( T :: MaxProxies :: get( ) . saturating_sub ( 1 ) ) => add_proxies:: <T >( p, None ) ?;
200
196
let caller: T :: AccountId = whitelisted_caller( ) ;
201
197
let delegate = T :: Lookup :: unlookup( account( "target" , 0 , SEED ) ) ;
202
198
} : _(
@@ -207,11 +203,11 @@ benchmarks! {
207
203
)
208
204
verify {
209
205
let ( proxies, _) = Proxies :: <T >:: get( caller) ;
210
- assert_eq!( proxies. len( ) as u32 , p - 1 ) ;
206
+ assert_eq!( proxies. len( ) as u32 , p. saturating_sub ( 1 ) ) ;
211
207
}
212
208
213
209
remove_proxies {
214
- let p in 1 .. ( T :: MaxProxies :: get( ) - 1 ) => add_proxies:: <T >( p, None ) ?;
210
+ let p in 1 .. ( T :: MaxProxies :: get( ) . saturating_sub ( 1 ) ) => add_proxies:: <T >( p, None ) ?;
215
211
let caller: T :: AccountId = whitelisted_caller( ) ;
216
212
} : _( RawOrigin :: Signed ( caller. clone( ) ) )
217
213
verify {
@@ -220,7 +216,7 @@ benchmarks! {
220
216
}
221
217
222
218
create_pure {
223
- let p in 1 .. ( T :: MaxProxies :: get( ) - 1 ) => add_proxies:: <T >( p, None ) ?;
219
+ let p in 1 .. ( T :: MaxProxies :: get( ) . saturating_sub ( 1 ) ) => add_proxies:: <T >( p, None ) ?;
224
220
let caller: T :: AccountId = whitelisted_caller( ) ;
225
221
} : _(
226
222
RawOrigin :: Signed ( caller. clone( ) ) ,
@@ -239,7 +235,7 @@ benchmarks! {
239
235
}
240
236
241
237
kill_pure {
242
- let p in 0 .. ( T :: MaxProxies :: get( ) - 2 ) ;
238
+ let p in 0 .. ( T :: MaxProxies :: get( ) . saturating_sub ( 2 ) ) ;
243
239
244
240
let caller: T :: AccountId = whitelisted_caller( ) ;
245
241
let caller_lookup = T :: Lookup :: unlookup( caller. clone( ) ) ;
0 commit comments