@@ -144,10 +144,12 @@ mod tests {
144144 } ,
145145 } ;
146146 use alloy:: {
147- primitives:: { Bytes , FixedBytes , U256 , Uint , address} ,
147+ primitives:: { FixedBytes , U256 , Uint , address, keccak256 } ,
148148 rpc:: types:: { BlockNumberOrTag , FilterBlockOption , FilterSet } ,
149+ signers:: { SignerSync , local:: PrivateKeySigner } ,
150+ sol_types:: SolValue ,
149151 } ;
150- use std:: collections:: HashSet ;
152+ use std:: { collections:: HashSet , str :: FromStr } ;
151153
152154 fn create_session_logs_filter (
153155 session_key_validator_address : Address ,
@@ -270,11 +272,12 @@ mod tests {
270272
271273 // Create first session (will remain active)
272274 let session_spec_1 = {
273- let signer_address =
274- address ! ( "0xa0Ee7A142d267C1f36714E4a8F75612F20a79720" ) ;
275+ let signer_key =
276+ PrivateKeySigner :: from_str ( & signer_private_key) . unwrap ( ) ;
277+ let signer_address = signer_key. address ( ) ;
275278 let expires_at = Uint :: from ( 2088558400u64 ) ;
276279 let target = address ! ( "0xa0Ee7A142d267C1f36714E4a8F75612F20a79720" ) ;
277- SessionSpec {
280+ let spec = SessionSpec {
278281 signer : signer_address,
279282 expires_at,
280283 call_policies : vec ! [ ] ,
@@ -292,31 +295,39 @@ mod tests {
292295 period: Uint :: from( 0 ) ,
293296 } ,
294297 } ] ,
295- }
296- } ;
298+ } ;
297299
298- create_session ( CreateSessionParams {
299- account_address,
300- spec : session_spec_1. clone ( ) ,
301- entry_point_address,
302- session_key_validator : session_key_module,
303- paymaster : None ,
304- bundler_client : bundler_client. clone ( ) ,
305- provider : provider. clone ( ) ,
306- signer : signer. clone ( ) ,
307- proof : Bytes :: default ( ) ,
308- } )
309- . await ?;
300+ let session_hash = hash_session ( spec. clone ( ) ) ;
301+ let hash_to_sign =
302+ keccak256 ( ( session_hash, account_address) . abi_encode ( ) ) ;
303+ let signature = signer_key. sign_hash_sync ( & hash_to_sign) . unwrap ( ) ;
304+ let proof = signature. as_bytes ( ) ;
305+
306+ create_session ( CreateSessionParams {
307+ account_address,
308+ spec : spec. clone ( ) ,
309+ entry_point_address,
310+ session_key_validator : session_key_module,
311+ paymaster : None ,
312+ bundler_client : bundler_client. clone ( ) ,
313+ provider : provider. clone ( ) ,
314+ signer : signer. clone ( ) ,
315+ proof : proof. into ( ) ,
316+ } )
317+ . await ?;
318+
319+ spec
320+ } ;
310321
311322 println ! ( "Session 1 created" ) ;
312323
313324 // Create second session (will be revoked)
314325 let session_spec_2 = {
315- let signer_address =
316- address ! ( "0xb0Ee7A142d267C1f36714E4a8F75612F20a79721" ) ;
326+ let signer_key = PrivateKeySigner :: random ( ) ;
327+ let signer_address = signer_key . address ( ) ;
317328 let expires_at = Uint :: from ( 2088558400u64 ) ;
318329 let target = address ! ( "0xb0Ee7A142d267C1f36714E4a8F75612F20a79721" ) ;
319- SessionSpec {
330+ let spec = SessionSpec {
320331 signer : signer_address,
321332 expires_at,
322333 call_policies : vec ! [ ] ,
@@ -334,31 +345,39 @@ mod tests {
334345 period: Uint :: from( 0 ) ,
335346 } ,
336347 } ] ,
337- }
338- } ;
348+ } ;
339349
340- create_session ( CreateSessionParams {
341- account_address,
342- spec : session_spec_2. clone ( ) ,
343- entry_point_address,
344- session_key_validator : session_key_module,
345- paymaster : None ,
346- bundler_client : bundler_client. clone ( ) ,
347- provider : provider. clone ( ) ,
348- signer : signer. clone ( ) ,
349- proof : Bytes :: default ( ) ,
350- } )
351- . await ?;
350+ let session_hash = hash_session ( spec. clone ( ) ) ;
351+ let hash_to_sign =
352+ keccak256 ( ( session_hash, account_address) . abi_encode ( ) ) ;
353+ let signature = signer_key. sign_hash_sync ( & hash_to_sign) . unwrap ( ) ;
354+ let proof = signature. as_bytes ( ) ;
355+
356+ create_session ( CreateSessionParams {
357+ account_address,
358+ spec : spec. clone ( ) ,
359+ entry_point_address,
360+ session_key_validator : session_key_module,
361+ paymaster : None ,
362+ bundler_client : bundler_client. clone ( ) ,
363+ provider : provider. clone ( ) ,
364+ signer : signer. clone ( ) ,
365+ proof : proof. into ( ) ,
366+ } )
367+ . await ?;
368+
369+ spec
370+ } ;
352371
353372 println ! ( "Session 2 created" ) ;
354373
355374 // Create third session (will remain active)
356375 let session_spec_3 = {
357- let signer_address =
358- address ! ( "0xc0Ee7A142d267C1f36714E4a8F75612F20a79722" ) ;
376+ let signer_key = PrivateKeySigner :: random ( ) ;
377+ let signer_address = signer_key . address ( ) ;
359378 let expires_at = Uint :: from ( 2088558400u64 ) ;
360379 let target = address ! ( "0xc0Ee7A142d267C1f36714E4a8F75612F20a79722" ) ;
361- SessionSpec {
380+ let spec = SessionSpec {
362381 signer : signer_address,
363382 expires_at,
364383 call_policies : vec ! [ ] ,
@@ -376,21 +395,29 @@ mod tests {
376395 period: Uint :: from( 0 ) ,
377396 } ,
378397 } ] ,
379- }
380- } ;
398+ } ;
381399
382- create_session ( CreateSessionParams {
383- account_address,
384- spec : session_spec_3. clone ( ) ,
385- entry_point_address,
386- session_key_validator : session_key_module,
387- paymaster : None ,
388- bundler_client : bundler_client. clone ( ) ,
389- provider : provider. clone ( ) ,
390- signer : signer. clone ( ) ,
391- proof : Bytes :: default ( ) ,
392- } )
393- . await ?;
400+ let session_hash = hash_session ( spec. clone ( ) ) ;
401+ let hash_to_sign =
402+ keccak256 ( ( session_hash, account_address) . abi_encode ( ) ) ;
403+ let signature = signer_key. sign_hash_sync ( & hash_to_sign) . unwrap ( ) ;
404+ let proof = signature. as_bytes ( ) ;
405+
406+ create_session ( CreateSessionParams {
407+ account_address,
408+ spec : spec. clone ( ) ,
409+ entry_point_address,
410+ session_key_validator : session_key_module,
411+ paymaster : None ,
412+ bundler_client : bundler_client. clone ( ) ,
413+ provider : provider. clone ( ) ,
414+ signer : signer. clone ( ) ,
415+ proof : proof. into ( ) ,
416+ } )
417+ . await ?;
418+
419+ spec
420+ } ;
394421
395422 println ! ( "Session 3 created" ) ;
396423
0 commit comments