11#![ cfg( test) ]
22
3- use ephemeral_account:: { AccountStatus , EphemeralAccountContract , EphemeralAccountContractClient } ;
3+ use ephemeral_account:: { EphemeralAccountContract , EphemeralAccountContractClient } ;
44use soroban_sdk:: { testutils:: Address as _, Address , BytesN , Env } ;
5- use sweep_controller:: Error ;
65use sweep_controller:: { SweepController , SweepControllerClient } ;
76
87/// Helper function to generate a valid Ed25519 keypair for testing
98/// In a real scenario, these would be generated by the off-chain system
10- fn generate_test_keypair ( ) -> ( BytesN < 32 > , BytesN < 64 > ) {
11- // For testing purposes, we use predefined test vectors
12- // Public key (32 bytes) - this is what gets stored in the contract
9+ fn generate_test_keypair ( env : & Env ) -> ( BytesN < 32 > , BytesN < 64 > ) {
1310 let public_key = BytesN :: from_array (
14- & Env :: default ( ) ,
11+ env ,
1512 & [
1613 0x30 , 0xd4 , 0x18 , 0x9f , 0x87 , 0x6e , 0xda , 0x97 , 0x42 , 0xa2 , 0x55 , 0x14 , 0x87 , 0x43 ,
1714 0xd9 , 0x24 , 0x9d , 0xf4 , 0x12 , 0x02 , 0x7b , 0x0d , 0xb5 , 0x47 , 0x69 , 0xe9 , 0x18 , 0xd3 ,
1815 0x6f , 0x25 , 0x9d , 0x3c ,
1916 ] ,
2017 ) ;
21-
22- // For testing, we'll generate test signatures using environment's crypto functions
23- let dummy_signature = BytesN :: from_array ( & Env :: default ( ) , & [ 0u8 ; 64 ] ) ;
24-
18+ let dummy_signature = BytesN :: from_array ( env, & [ 0u8 ; 64 ] ) ;
2519 ( public_key, dummy_signature)
2620}
2721
@@ -31,13 +25,14 @@ fn test_initialize_sweep_controller() {
3125 let env = Env :: default ( ) ;
3226 env. mock_all_auths ( ) ;
3327
34- let controller_id = env. register_contract ( None , SweepController ) ;
28+ let creator = Address :: generate ( & env) ;
29+ let controller_id = env. register ( SweepController , ( ) ) ;
3530 let controller_client = SweepControllerClient :: new ( & env, & controller_id) ;
3631
37- let ( authorized_signer, _) = generate_test_keypair ( ) ;
32+ let ( authorized_signer, _) = generate_test_keypair ( & env ) ;
3833
3934 // Initialize controller with authorized signer (flexible mode - no destination)
40- controller_client. initialize ( & authorized_signer, & None ) ;
35+ controller_client. initialize ( & creator , & authorized_signer, & None ) ;
4136}
4237
4338/// Test that re-initialization is prevented
@@ -46,17 +41,18 @@ fn test_initialize_prevents_double_init() {
4641 let env = Env :: default ( ) ;
4742 env. mock_all_auths ( ) ;
4843
49- let controller_id = env. register_contract ( None , SweepController ) ;
44+ let creator = Address :: generate ( & env) ;
45+ let controller_id = env. register ( SweepController , ( ) ) ;
5046 let controller_client = SweepControllerClient :: new ( & env, & controller_id) ;
5147
52- let ( authorized_signer, _) = generate_test_keypair ( ) ;
48+ let ( authorized_signer, _) = generate_test_keypair ( & env ) ;
5349
5450 // First initialization should succeed
55- controller_client. initialize ( & authorized_signer, & None ) ;
51+ controller_client. initialize ( & creator , & authorized_signer, & None ) ;
5652
5753 // Second initialization should fail
5854 let result = std:: panic:: catch_unwind ( std:: panic:: AssertUnwindSafe ( || {
59- controller_client. initialize ( & authorized_signer, & None ) ;
55+ controller_client. initialize ( & creator , & authorized_signer, & None ) ;
6056 } ) ) ;
6157 assert ! ( result. is_err( ) ) ;
6258}
@@ -67,15 +63,16 @@ fn test_execute_sweep_with_valid_signature() {
6763 let env = Env :: default ( ) ;
6864 env. mock_all_auths ( ) ;
6965
66+ let creator = Address :: generate ( & env) ;
7067 // Deploy and initialize controller
71- let controller_id = env. register_contract ( None , SweepController ) ;
68+ let controller_id = env. register ( SweepController , ( ) ) ;
7269 let controller_client = SweepControllerClient :: new ( & env, & controller_id) ;
7370
74- let ( authorized_signer, _) = generate_test_keypair ( ) ;
75- controller_client. initialize ( & authorized_signer, & None ) ;
71+ let ( authorized_signer, _) = generate_test_keypair ( & env ) ;
72+ controller_client. initialize ( & creator , & authorized_signer, & None ) ;
7673
7774 // Deploy ephemeral account
78- let ephemeral_id = env. register_contract ( None , EphemeralAccountContract ) ;
75+ let ephemeral_id = env. register ( EphemeralAccountContract , ( ) ) ;
7976 let ephemeral_client = EphemeralAccountContractClient :: new ( & env, & ephemeral_id) ;
8077
8178 // Setup
@@ -109,15 +106,16 @@ fn test_execute_sweep_with_valid_signature() {
109106fn test_execute_sweep_with_invalid_signature ( ) {
110107 let env = Env :: default ( ) ;
111108
109+ let creator = Address :: generate ( & env) ;
112110 // Deploy and initialize controller
113- let controller_id = env. register_contract ( None , SweepController ) ;
111+ let controller_id = env. register ( SweepController , ( ) ) ;
114112 let controller_client = SweepControllerClient :: new ( & env, & controller_id) ;
115113
116- let ( authorized_signer, _) = generate_test_keypair ( ) ;
117- controller_client. initialize ( & authorized_signer, & None ) ;
114+ let ( authorized_signer, _) = generate_test_keypair ( & env ) ;
115+ controller_client. initialize ( & creator , & authorized_signer, & None ) ;
118116
119117 // Deploy ephemeral account
120- let ephemeral_id = env. register_contract ( None , EphemeralAccountContract ) ;
118+ let ephemeral_id = env. register ( EphemeralAccountContract , ( ) ) ;
121119 let ephemeral_client = EphemeralAccountContractClient :: new ( & env, & ephemeral_id) ;
122120
123121 // Setup
@@ -155,10 +153,10 @@ fn test_sweep_without_payment() {
155153 let env = Env :: default ( ) ;
156154 env. mock_all_auths ( ) ;
157155
158- let ephemeral_id = env. register_contract ( None , EphemeralAccountContract ) ;
156+ let ephemeral_id = env. register ( EphemeralAccountContract , ( ) ) ;
159157 let ephemeral_client = EphemeralAccountContractClient :: new ( & env, & ephemeral_id) ;
160158
161- let controller_id = env. register_contract ( None , SweepController ) ;
159+ let controller_id = env. register ( SweepController , ( ) ) ;
162160 let controller_client = SweepControllerClient :: new ( & env, & controller_id) ;
163161
164162 let creator = Address :: generate ( & env) ;
@@ -180,12 +178,13 @@ fn test_nonce_increment_prevents_replay() {
180178 let env = Env :: default ( ) ;
181179 env. mock_all_auths ( ) ;
182180
181+ let creator = Address :: generate ( & env) ;
183182 // Deploy and initialize controller
184- let controller_id = env. register_contract ( None , SweepController ) ;
183+ let controller_id = env. register ( SweepController , ( ) ) ;
185184 let controller_client = SweepControllerClient :: new ( & env, & controller_id) ;
186185
187- let ( authorized_signer, _) = generate_test_keypair ( ) ;
188- controller_client. initialize ( & authorized_signer, & None ) ;
186+ let ( authorized_signer, _) = generate_test_keypair ( & env ) ;
187+ controller_client. initialize ( & creator , & authorized_signer, & None ) ;
189188
190189 // The nonce system is in place and will be incremented after each successful
191190 // authorization, making the same signature invalid for the next sweep operation
@@ -198,10 +197,10 @@ fn test_can_sweep() {
198197 let env = Env :: default ( ) ;
199198 env. mock_all_auths ( ) ;
200199
201- let ephemeral_id = env. register_contract ( None , EphemeralAccountContract ) ;
200+ let ephemeral_id = env. register ( EphemeralAccountContract , ( ) ) ;
202201 let ephemeral_client = EphemeralAccountContractClient :: new ( & env, & ephemeral_id) ;
203202
204- let controller_id = env. register_contract ( None , SweepController ) ;
203+ let controller_id = env. register ( SweepController , ( ) ) ;
205204 let controller_client = SweepControllerClient :: new ( & env, & controller_id) ;
206205
207206 let creator = Address :: generate ( & env) ;
@@ -231,12 +230,13 @@ fn test_wrong_signer_rejected() {
231230 let env = Env :: default ( ) ;
232231 env. mock_all_auths ( ) ;
233232
233+ let creator = Address :: generate ( & env) ;
234234 // Deploy and initialize controller with authorized signer
235- let controller_id = env. register_contract ( None , SweepController ) ;
235+ let controller_id = env. register ( SweepController , ( ) ) ;
236236 let controller_client = SweepControllerClient :: new ( & env, & controller_id) ;
237237
238- let ( authorized_signer, _) = generate_test_keypair ( ) ;
239- controller_client. initialize ( & authorized_signer, & None ) ;
238+ let ( authorized_signer, _) = generate_test_keypair ( & env ) ;
239+ controller_client. initialize ( & creator , & authorized_signer, & None ) ;
240240
241241 // Generate a different public key (wrong signer)
242242 let wrong_signer = BytesN :: from_array (
@@ -249,7 +249,7 @@ fn test_wrong_signer_rejected() {
249249 ) ;
250250
251251 // Deploy ephemeral account
252- let ephemeral_id = env. register_contract ( None , EphemeralAccountContract ) ;
252+ let ephemeral_id = env. register ( EphemeralAccountContract , ( ) ) ;
253253 let ephemeral_client = EphemeralAccountContractClient :: new ( & env, & ephemeral_id) ;
254254
255255 // Setup
@@ -280,11 +280,11 @@ fn test_unauthorized_signer_not_set() {
280280 env. mock_all_auths ( ) ;
281281
282282 // Deploy controller without initialization
283- let controller_id = env. register_contract ( None , SweepController ) ;
283+ let controller_id = env. register ( SweepController , ( ) ) ;
284284 let controller_client = SweepControllerClient :: new ( & env, & controller_id) ;
285285
286286 // Deploy ephemeral account
287- let ephemeral_id = env. register_contract ( None , EphemeralAccountContract ) ;
287+ let ephemeral_id = env. register ( EphemeralAccountContract , ( ) ) ;
288288 let ephemeral_client = EphemeralAccountContractClient :: new ( & env, & ephemeral_id) ;
289289
290290 // Setup
@@ -314,14 +314,15 @@ fn test_initialize_with_authorized_destination() {
314314 let env = Env :: default ( ) ;
315315 env. mock_all_auths ( ) ;
316316
317- let controller_id = env. register_contract ( None , SweepController ) ;
317+ let controller_id = env. register ( SweepController , ( ) ) ;
318318 let controller_client = SweepControllerClient :: new ( & env, & controller_id) ;
319319
320- let ( authorized_signer, _) = generate_test_keypair ( ) ;
320+ let creator = Address :: generate ( & env) ;
321+ let ( authorized_signer, _) = generate_test_keypair ( & env) ;
321322 let authorized_dest = Address :: generate ( & env) ;
322323
323324 // Initialize controller with authorized destination
324- controller_client. initialize ( & authorized_signer, & Some ( authorized_dest. clone ( ) ) ) ;
325+ controller_client. initialize ( & creator , & authorized_signer, & Some ( authorized_dest. clone ( ) ) ) ;
325326}
326327
327328/// Test initialization without authorized destination (flexible mode)
@@ -330,13 +331,14 @@ fn test_initialize_without_authorized_destination() {
330331 let env = Env :: default ( ) ;
331332 env. mock_all_auths ( ) ;
332333
333- let controller_id = env. register_contract ( None , SweepController ) ;
334+ let creator = Address :: generate ( & env) ;
335+ let controller_id = env. register ( SweepController , ( ) ) ;
334336 let controller_client = SweepControllerClient :: new ( & env, & controller_id) ;
335337
336- let ( authorized_signer, _) = generate_test_keypair ( ) ;
338+ let ( authorized_signer, _) = generate_test_keypair ( & env ) ;
337339
338340 // Initialize controller without authorized destination (flexible mode)
339- controller_client. initialize ( & authorized_signer, & None ) ;
341+ controller_client. initialize ( & creator , & authorized_signer, & None ) ;
340342}
341343
342344/// Test sweep to authorized destination (success)
@@ -346,15 +348,16 @@ fn test_sweep_to_authorized_destination() {
346348 env. mock_all_auths ( ) ;
347349
348350 // Deploy and initialize controller
349- let controller_id = env. register_contract ( None , SweepController ) ;
351+ let controller_id = env. register ( SweepController , ( ) ) ;
350352 let controller_client = SweepControllerClient :: new ( & env, & controller_id) ;
351353
352- let ( authorized_signer, _) = generate_test_keypair ( ) ;
354+ let creator = Address :: generate ( & env) ;
355+ let ( authorized_signer, _) = generate_test_keypair ( & env) ;
353356 let authorized_dest = Address :: generate ( & env) ;
354- controller_client. initialize ( & authorized_signer, & Some ( authorized_dest. clone ( ) ) ) ;
357+ controller_client. initialize ( & creator , & authorized_signer, & Some ( authorized_dest. clone ( ) ) ) ;
355358
356359 // Deploy ephemeral account
357- let ephemeral_id = env. register_contract ( None , EphemeralAccountContract ) ;
360+ let ephemeral_id = env. register ( EphemeralAccountContract , ( ) ) ;
358361 let ephemeral_client = EphemeralAccountContractClient :: new ( & env, & ephemeral_id) ;
359362
360363 // Setup
@@ -385,16 +388,17 @@ fn test_sweep_to_unauthorized_destination() {
385388 env. mock_all_auths ( ) ;
386389
387390 // Deploy and initialize controller
388- let controller_id = env. register_contract ( None , SweepController ) ;
391+ let controller_id = env. register ( SweepController , ( ) ) ;
389392 let controller_client = SweepControllerClient :: new ( & env, & controller_id) ;
390393
391- let ( authorized_signer, _) = generate_test_keypair ( ) ;
394+ let creator = Address :: generate ( & env) ;
395+ let ( authorized_signer, _) = generate_test_keypair ( & env) ;
392396 let authorized_dest = Address :: generate ( & env) ;
393397 let unauthorized_dest = Address :: generate ( & env) ;
394- controller_client. initialize ( & authorized_signer, & Some ( authorized_dest. clone ( ) ) ) ;
398+ controller_client. initialize ( & creator , & authorized_signer, & Some ( authorized_dest. clone ( ) ) ) ;
395399
396400 // Deploy ephemeral account
397- let ephemeral_id = env. register_contract ( None , EphemeralAccountContract ) ;
401+ let ephemeral_id = env. register ( EphemeralAccountContract , ( ) ) ;
398402 let ephemeral_client = EphemeralAccountContractClient :: new ( & env, & ephemeral_id) ;
399403
400404 // Setup
@@ -425,15 +429,16 @@ fn test_update_authorized_destination_by_creator() {
425429 let env = Env :: default ( ) ;
426430 env. mock_all_auths ( ) ;
427431
428- let controller_id = env. register_contract ( None , SweepController ) ;
432+ let controller_id = env. register ( SweepController , ( ) ) ;
429433 let controller_client = SweepControllerClient :: new ( & env, & controller_id) ;
430434
431- let ( authorized_signer, _) = generate_test_keypair ( ) ;
435+ let creator = Address :: generate ( & env) ;
436+ let ( authorized_signer, _) = generate_test_keypair ( & env) ;
432437 let initial_dest = Address :: generate ( & env) ;
433438 let new_dest = Address :: generate ( & env) ;
434439
435440 // Initialize with authorized destination
436- controller_client. initialize ( & authorized_signer, & Some ( initial_dest. clone ( ) ) ) ;
441+ controller_client. initialize ( & creator , & authorized_signer, & Some ( initial_dest. clone ( ) ) ) ;
437442
438443 // Update destination as creator (with mocked auth) - should succeed
439444 controller_client. update_authorized_destination ( & new_dest) ;
@@ -446,16 +451,17 @@ fn test_update_authorized_destination_by_non_creator() {
446451 let env = Env :: default ( ) ;
447452 // Don't mock auths - we want to test that non-creator fails
448453
449- let controller_id = env. register_contract ( None , SweepController ) ;
454+ let controller_id = env. register ( SweepController , ( ) ) ;
450455 let controller_client = SweepControllerClient :: new ( & env, & controller_id) ;
451456
452- let ( authorized_signer, _) = generate_test_keypair ( ) ;
457+ let creator = Address :: generate ( & env) ;
458+ let ( authorized_signer, _) = generate_test_keypair ( & env) ;
453459 let initial_dest = Address :: generate ( & env) ;
454460 let new_dest = Address :: generate ( & env) ;
455461
456462 // Initialize with authorized destination
457463 // The invoker of initialize becomes the creator
458- controller_client. initialize ( & authorized_signer, & Some ( initial_dest. clone ( ) ) ) ;
464+ controller_client. initialize ( & creator , & authorized_signer, & Some ( initial_dest. clone ( ) ) ) ;
459465
460466 // Try to update destination - should fail because current invoker != creator
461467 // (In tests, the invoker is typically the contract itself or test framework)
@@ -473,22 +479,23 @@ fn test_update_destination_before_sweep() {
473479 let env = Env :: default ( ) ;
474480 env. mock_all_auths ( ) ;
475481
476- let controller_id = env. register_contract ( None , SweepController ) ;
482+ let controller_id = env. register ( SweepController , ( ) ) ;
477483 let controller_client = SweepControllerClient :: new ( & env, & controller_id) ;
478484
479- let ( authorized_signer, _) = generate_test_keypair ( ) ;
485+ let creator = Address :: generate ( & env) ;
486+ let ( authorized_signer, _) = generate_test_keypair ( & env) ;
480487 let initial_dest = Address :: generate ( & env) ;
481488 let new_dest = Address :: generate ( & env) ;
482489
483490 // Initialize with authorized destination
484- controller_client. initialize ( & authorized_signer, & Some ( initial_dest. clone ( ) ) ) ;
491+ controller_client. initialize ( & creator , & authorized_signer, & Some ( initial_dest. clone ( ) ) ) ;
485492
486493 // Update destination before any sweep - should succeed
487494 controller_client. update_authorized_destination ( & new_dest) ;
488495
489496 // Verify the destination was updated by trying to sweep to new destination
490497 // (The actual sweep may fail due to signature, but destination validation should pass)
491- let ephemeral_id = env. register_contract ( None , EphemeralAccountContract ) ;
498+ let ephemeral_id = env. register ( EphemeralAccountContract , ( ) ) ;
492499 let ephemeral_client = EphemeralAccountContractClient :: new ( & env, & ephemeral_id) ;
493500
494501 let creator = Address :: generate ( & env) ;
0 commit comments