@@ -59,6 +59,9 @@ benchmarks! {
5959 let call_hash = call. using_encoded( blake2_256) ;
6060 let multi_account_id = Multisig :: <T >:: multi_account_id( & signatories, 1 ) ;
6161 let caller = signatories. pop( ) . ok_or( "signatories should have len 2 or more" ) ?;
62+ // Whitelist caller account from further DB operations.
63+ let caller_key = frame_system:: Account :: <T >:: hashed_key_for( & caller) ;
64+ frame_benchmarking:: benchmarking:: add_to_whitelist( caller_key. into( ) ) ;
6265 } : _( RawOrigin :: Signed ( caller. clone( ) ) , signatories, Box :: new( call) )
6366 verify {
6467 // If the benchmark resolves, then the call was dispatched successfully.
@@ -73,9 +76,13 @@ benchmarks! {
7376 let call_hash = blake2_256( & call) ;
7477 let multi_account_id = Multisig :: <T >:: multi_account_id( & signatories, s. try_into( ) . unwrap( ) ) ;
7578 let caller = signatories. pop( ) . ok_or( "signatories should have len 2 or more" ) ?;
79+ // Whitelist caller account from further DB operations.
80+ let caller_key = frame_system:: Account :: <T >:: hashed_key_for( & caller) ;
81+ frame_benchmarking:: benchmarking:: add_to_whitelist( caller_key. into( ) ) ;
7682 } : as_multi( RawOrigin :: Signed ( caller) , s as u16 , signatories, None , call, false , 0 )
7783 verify {
7884 assert!( Multisigs :: <T >:: contains_key( multi_account_id, call_hash) ) ;
85+ assert!( !Calls :: <T >:: contains_key( call_hash) ) ;
7986 }
8087
8188 as_multi_create_store {
@@ -88,6 +95,9 @@ benchmarks! {
8895 let multi_account_id = Multisig :: <T >:: multi_account_id( & signatories, s. try_into( ) . unwrap( ) ) ;
8996 let caller = signatories. pop( ) . ok_or( "signatories should have len 2 or more" ) ?;
9097 T :: Currency :: make_free_balance_be( & caller, BalanceOf :: <T >:: max_value( ) ) ;
98+ // Whitelist caller account from further DB operations.
99+ let caller_key = frame_system:: Account :: <T >:: hashed_key_for( & caller) ;
100+ frame_benchmarking:: benchmarking:: add_to_whitelist( caller_key. into( ) ) ;
91101 } : as_multi( RawOrigin :: Signed ( caller) , s as u16 , signatories, None , call, true , 0 )
92102 verify {
93103 assert!( Multisigs :: <T >:: contains_key( multi_account_id, call_hash) ) ;
@@ -108,13 +118,43 @@ benchmarks! {
108118 let timepoint = Multisig :: <T >:: timepoint( ) ;
109119 // Create the multi, storing for worst case
110120 Multisig :: <T >:: as_multi( RawOrigin :: Signed ( caller) . into( ) , s as u16 , signatories, None , call. clone( ) , true , 0 ) ?;
121+ assert!( Calls :: <T >:: contains_key( call_hash) ) ;
111122 let caller2 = signatories2. remove( 0 ) ;
123+ // Whitelist caller account from further DB operations.
124+ let caller_key = frame_system:: Account :: <T >:: hashed_key_for( & caller2) ;
125+ frame_benchmarking:: benchmarking:: add_to_whitelist( caller_key. into( ) ) ;
112126 } : as_multi( RawOrigin :: Signed ( caller2) , s as u16 , signatories2, Some ( timepoint) , call, false , 0 )
113127 verify {
114128 let multisig = Multisigs :: <T >:: get( multi_account_id, call_hash) . ok_or( "multisig not created" ) ?;
115129 assert_eq!( multisig. approvals. len( ) , 2 ) ;
116130 }
117131
132+ as_multi_approve_store {
133+ // Signatories, need at least 3 people (so we don't complete the multisig)
134+ let s in 3 .. T :: MaxSignatories :: get( ) as u32 ;
135+ // Transaction Length
136+ let z in 0 .. 10_000 ;
137+ let ( mut signatories, call) = setup_multi:: <T >( s, z) ?;
138+ let call_hash = blake2_256( & call) ;
139+ let multi_account_id = Multisig :: <T >:: multi_account_id( & signatories, s. try_into( ) . unwrap( ) ) ;
140+ let mut signatories2 = signatories. clone( ) ;
141+ let caller = signatories. pop( ) . ok_or( "signatories should have len 2 or more" ) ?;
142+ // before the call, get the timepoint
143+ let timepoint = Multisig :: <T >:: timepoint( ) ;
144+ // Create the multi, not storing
145+ Multisig :: <T >:: as_multi( RawOrigin :: Signed ( caller) . into( ) , s as u16 , signatories, None , call. clone( ) , false , 0 ) ?;
146+ assert!( !Calls :: <T >:: contains_key( call_hash) ) ;
147+ let caller2 = signatories2. remove( 0 ) ;
148+ // Whitelist caller account from further DB operations.
149+ let caller_key = frame_system:: Account :: <T >:: hashed_key_for( & caller2) ;
150+ frame_benchmarking:: benchmarking:: add_to_whitelist( caller_key. into( ) ) ;
151+ } : as_multi( RawOrigin :: Signed ( caller2) , s as u16 , signatories2, Some ( timepoint) , call, true , 0 )
152+ verify {
153+ let multisig = Multisigs :: <T >:: get( multi_account_id, call_hash) . ok_or( "multisig not created" ) ?;
154+ assert_eq!( multisig. approvals. len( ) , 2 ) ;
155+ assert!( Calls :: <T >:: contains_key( call_hash) ) ;
156+ }
157+
118158 as_multi_complete {
119159 // Signatories, need at least 2 people
120160 let s in 2 .. T :: MaxSignatories :: get( ) as u32 ;
@@ -138,6 +178,9 @@ benchmarks! {
138178 }
139179 let caller2 = signatories2. remove( 0 ) ;
140180 assert!( Multisigs :: <T >:: contains_key( & multi_account_id, call_hash) ) ;
181+ // Whitelist caller account from further DB operations.
182+ let caller_key = frame_system:: Account :: <T >:: hashed_key_for( & caller2) ;
183+ frame_benchmarking:: benchmarking:: add_to_whitelist( caller_key. into( ) ) ;
141184 } : as_multi( RawOrigin :: Signed ( caller2) , s as u16 , signatories2, Some ( timepoint) , call, false , Weight :: max_value( ) )
142185 verify {
143186 assert!( !Multisigs :: <T >:: contains_key( & multi_account_id, call_hash) ) ;
@@ -146,12 +189,15 @@ benchmarks! {
146189 approve_as_multi_create {
147190 // Signatories, need at least 2 people
148191 let s in 2 .. T :: MaxSignatories :: get( ) as u32 ;
149- // Transaction Length
150- let z in 0 .. 10_000 ;
192+ // Transaction Length, not a component
193+ let z = 10_000 ;
151194 let ( mut signatories, call) = setup_multi:: <T >( s, z) ?;
152195 let multi_account_id = Multisig :: <T >:: multi_account_id( & signatories, s. try_into( ) . unwrap( ) ) ;
153196 let caller = signatories. pop( ) . ok_or( "signatories should have len 2 or more" ) ?;
154197 let call_hash = blake2_256( & call) ;
198+ // Whitelist caller account from further DB operations.
199+ let caller_key = frame_system:: Account :: <T >:: hashed_key_for( & caller) ;
200+ frame_benchmarking:: benchmarking:: add_to_whitelist( caller_key. into( ) ) ;
155201 // Create the multi
156202 } : approve_as_multi( RawOrigin :: Signed ( caller) , s as u16 , signatories, None , call_hash, 0 )
157203 verify {
@@ -161,8 +207,8 @@ benchmarks! {
161207 approve_as_multi_approve {
162208 // Signatories, need at least 2 people
163209 let s in 2 .. T :: MaxSignatories :: get( ) as u32 ;
164- // Transaction Length
165- let z in 0 .. 10_000 ;
210+ // Transaction Length, not a component
211+ let z = 10_000 ;
166212 let ( mut signatories, call) = setup_multi:: <T >( s, z) ?;
167213 let mut signatories2 = signatories. clone( ) ;
168214 let multi_account_id = Multisig :: <T >:: multi_account_id( & signatories, s. try_into( ) . unwrap( ) ) ;
@@ -181,6 +227,9 @@ benchmarks! {
181227 0
182228 ) ?;
183229 let caller2 = signatories2. remove( 0 ) ;
230+ // Whitelist caller account from further DB operations.
231+ let caller_key = frame_system:: Account :: <T >:: hashed_key_for( & caller2) ;
232+ frame_benchmarking:: benchmarking:: add_to_whitelist( caller_key. into( ) ) ;
184233 } : approve_as_multi( RawOrigin :: Signed ( caller2) , s as u16 , signatories2, Some ( timepoint) , call_hash, 0 )
185234 verify {
186235 let multisig = Multisigs :: <T >:: get( multi_account_id, call_hash) . ok_or( "multisig not created" ) ?;
@@ -190,8 +239,8 @@ benchmarks! {
190239 approve_as_multi_complete {
191240 // Signatories, need at least 2 people
192241 let s in 2 .. T :: MaxSignatories :: get( ) as u32 ;
193- // Transaction Length
194- let z in 0 .. 10_000 ;
242+ // Transaction Length, not a component
243+ let z = 10_000 ;
195244 let ( mut signatories, call) = setup_multi:: <T >( s, z) ?;
196245 let multi_account_id = Multisig :: <T >:: multi_account_id( & signatories, s. try_into( ) . unwrap( ) ) ;
197246 let mut signatories2 = signatories. clone( ) ;
@@ -211,6 +260,9 @@ benchmarks! {
211260 }
212261 let caller2 = signatories2. remove( 0 ) ;
213262 assert!( Multisigs :: <T >:: contains_key( & multi_account_id, call_hash) ) ;
263+ // Whitelist caller account from further DB operations.
264+ let caller_key = frame_system:: Account :: <T >:: hashed_key_for( & caller2) ;
265+ frame_benchmarking:: benchmarking:: add_to_whitelist( caller_key. into( ) ) ;
214266 } : approve_as_multi(
215267 RawOrigin :: Signed ( caller2) ,
216268 s as u16 ,
@@ -226,8 +278,8 @@ benchmarks! {
226278 cancel_as_multi {
227279 // Signatories, need at least 2 people
228280 let s in 2 .. T :: MaxSignatories :: get( ) as u32 ;
229- // Transaction Length
230- let z in 0 .. 10_000 ;
281+ // Transaction Length, not a component
282+ let z = 10_000 ;
231283 let ( mut signatories, call) = setup_multi:: <T >( s, z) ?;
232284 let multi_account_id = Multisig :: <T >:: multi_account_id( & signatories, s. try_into( ) . unwrap( ) ) ;
233285 let caller = signatories. pop( ) . ok_or( "signatories should have len 2 or more" ) ?;
@@ -237,30 +289,13 @@ benchmarks! {
237289 let o = RawOrigin :: Signed ( caller. clone( ) ) . into( ) ;
238290 Multisig :: <T >:: as_multi( o, s as u16 , signatories. clone( ) , None , call. clone( ) , true , 0 ) ?;
239291 assert!( Multisigs :: <T >:: contains_key( & multi_account_id, call_hash) ) ;
292+ assert!( Calls :: <T >:: contains_key( call_hash) ) ;
293+ // Whitelist caller account from further DB operations.
294+ let caller_key = frame_system:: Account :: <T >:: hashed_key_for( & caller) ;
295+ frame_benchmarking:: benchmarking:: add_to_whitelist( caller_key. into( ) ) ;
240296 } : _( RawOrigin :: Signed ( caller) , s as u16 , signatories, timepoint, call_hash)
241297 verify {
242298 assert!( !Multisigs :: <T >:: contains_key( multi_account_id, call_hash) ) ;
243- }
244-
245- cancel_as_multi_store {
246- // Signatories, need at least 2 people
247- let s in 2 .. T :: MaxSignatories :: get( ) as u32 ;
248- // Transaction Length
249- let z in 0 .. 10_000 ;
250- let ( mut signatories, call) = setup_multi:: <T >( s, z) ?;
251- let multi_account_id = Multisig :: <T >:: multi_account_id( & signatories, s. try_into( ) . unwrap( ) ) ;
252- let caller = signatories. pop( ) . ok_or( "signatories should have len 2 or more" ) ?;
253- T :: Currency :: make_free_balance_be( & caller, BalanceOf :: <T >:: max_value( ) ) ;
254- let call_hash = blake2_256( & call) ;
255- let timepoint = Multisig :: <T >:: timepoint( ) ;
256- // Create the multi
257- let o = RawOrigin :: Signed ( caller. clone( ) ) . into( ) ;
258- Multisig :: <T >:: as_multi( o, s as u16 , signatories. clone( ) , None , call. clone( ) , true , 0 ) ?;
259- assert!( Multisigs :: <T >:: contains_key( & multi_account_id, call_hash) ) ;
260- assert!( Calls :: <T >:: contains_key( call_hash) ) ;
261- } : cancel_as_multi( RawOrigin :: Signed ( caller) , s as u16 , signatories, timepoint, call_hash)
262- verify {
263- assert!( !Multisigs :: <T >:: contains_key( & multi_account_id, call_hash) ) ;
264299 assert!( !Calls :: <T >:: contains_key( call_hash) ) ;
265300 }
266301}
@@ -278,12 +313,12 @@ mod tests {
278313 assert_ok ! ( test_benchmark_as_multi_create:: <Test >( ) ) ;
279314 assert_ok ! ( test_benchmark_as_multi_create_store:: <Test >( ) ) ;
280315 assert_ok ! ( test_benchmark_as_multi_approve:: <Test >( ) ) ;
316+ assert_ok ! ( test_benchmark_as_multi_approve_store:: <Test >( ) ) ;
281317 assert_ok ! ( test_benchmark_as_multi_complete:: <Test >( ) ) ;
282318 assert_ok ! ( test_benchmark_approve_as_multi_create:: <Test >( ) ) ;
283319 assert_ok ! ( test_benchmark_approve_as_multi_approve:: <Test >( ) ) ;
284320 assert_ok ! ( test_benchmark_approve_as_multi_complete:: <Test >( ) ) ;
285321 assert_ok ! ( test_benchmark_cancel_as_multi:: <Test >( ) ) ;
286- assert_ok ! ( test_benchmark_cancel_as_multi_store:: <Test >( ) ) ;
287322 } ) ;
288323 }
289324}
0 commit comments