@@ -82,7 +82,7 @@ impl CalloraVault {
8282 ) -> VaultMeta {
8383 owner. require_auth ( ) ;
8484 let inst = env. storage ( ) . instance ( ) ;
85- if inst. has ( & StorageKey :: Meta ) {
85+ if inst. has ( & StorageKey :: MetaKey ) {
8686 panic ! ( "vault already initialized" ) ;
8787 }
8888 assert ! (
@@ -122,7 +122,7 @@ impl CalloraVault {
122122 authorized_caller,
123123 min_deposit : min_d,
124124 } ;
125- inst. set ( & StorageKey :: Meta , & meta) ;
125+ inst. set ( & StorageKey :: MetaKey , & meta) ;
126126 inst. set ( & StorageKey :: UsdcToken , & usdc_token) ;
127127 inst. set ( & StorageKey :: Admin , & owner) ;
128128 if let Some ( p) = revenue_pool {
@@ -231,7 +231,7 @@ impl CalloraVault {
231231
232232 pub fn set_allowed_depositor ( env : Env , caller : Address , depositor : Option < Address > ) {
233233 caller. require_auth ( ) ;
234- Self :: require_owner ( env. clone ( ) , caller) ;
234+ Self :: require_owner ( env. clone ( ) , caller. clone ( ) ) ;
235235
236236 match depositor {
237237 Some ( d) => {
@@ -285,10 +285,14 @@ impl CalloraVault {
285285 pub fn set_authorized_caller ( env : Env , caller : Option < Address > ) {
286286 let mut meta = Self :: get_meta ( env. clone ( ) ) ;
287287 meta. owner . require_auth ( ) ;
288- meta. authorized_caller = Some ( caller. clone ( ) ) ;
289- env. storage ( ) . instance ( ) . set ( & StorageKey :: Meta , & meta) ;
288+ let old_authorized_caller = meta. authorized_caller . clone ( ) ;
289+ meta. authorized_caller = caller. clone ( ) ;
290+ env. storage ( ) . instance ( ) . set ( & StorageKey :: MetaKey , & meta) ;
290291 env. events ( ) . publish (
291- ( Symbol :: new ( & env, "set_authorized_caller" ) , meta. owner . clone ( ) ) ,
292+ (
293+ Symbol :: new ( & env, "set_authorized_caller" ) ,
294+ meta. owner . clone ( ) ,
295+ ) ,
292296 ( old_authorized_caller, caller) ,
293297 ) ;
294298 }
@@ -374,7 +378,7 @@ impl CalloraVault {
374378 caller. require_auth ( ) ;
375379 assert ! ( amount > 0 , "amount must be positive" ) ;
376380 assert ! (
377- Self :: is_authorized_depositor( env. clone( ) , depositor . clone( ) ) ,
381+ Self :: is_authorized_depositor( env. clone( ) , caller . clone( ) ) ,
378382 "unauthorized: only owner or allowed depositor can deposit"
379383 ) ;
380384 let meta = Self :: get_meta ( env. clone ( ) ) ;
@@ -390,15 +394,17 @@ impl CalloraVault {
390394 . get ( & StorageKey :: UsdcToken )
391395 . expect ( "vault not initialized" ) ;
392396 let usdc = token:: Client :: new ( & env, & usdc_addr) ;
393- usdc. transfer ( & depositor , & env. current_contract_address ( ) , & amount) ;
397+ usdc. transfer ( & caller , & env. current_contract_address ( ) , & amount) ;
394398 let mut meta = Self :: get_meta ( env. clone ( ) ) ;
395399 meta. balance = meta
396400 . balance
397401 . checked_add ( amount)
398402 . unwrap_or_else ( || panic ! ( "balance overflow" ) ) ;
399403 env. storage ( ) . instance ( ) . set ( & StorageKey :: MetaKey , & meta) ;
400- env. events ( )
401- . publish ( ( Symbol :: new ( & env, "deposit" ) , ) , ( amount, meta. balance ) ) ;
404+ env. events ( ) . publish (
405+ ( Symbol :: new ( & env, "deposit" ) , caller) ,
406+ ( amount, meta. balance ) ,
407+ ) ;
402408 meta. balance
403409 }
404410
@@ -423,21 +429,18 @@ impl CalloraVault {
423429 Self :: require_not_paused ( env. clone ( ) ) ;
424430 caller. require_auth ( ) ;
425431 assert ! ( amount > 0 , "amount must be positive" ) ;
426- let max_d: i128 = env
427- . storage ( )
428- . instance ( )
429- . get ( & StorageKey :: MaxDeduct )
430- . unwrap_or ( DEFAULT_MAX_DEDUCT ) ;
432+ Self :: require_authorized_deduct_caller ( env. clone ( ) , & caller) ;
433+ let max_d = Self :: get_max_deduct ( env. clone ( ) ) ;
431434 assert ! ( amount <= max_d, "deduct amount exceeds max_deduct" ) ;
432435 let meta = Self :: get_meta ( env. clone ( ) ) ;
433436 assert ! ( meta. balance >= amount, "insufficient balance" ) ;
434- Self :: require_authorized_deduct_caller ( env . clone ( ) , & caller ) ;
437+ let settlement = Self :: require_settlement ( & env ) ;
435438 let mut meta = Self :: get_meta ( env. clone ( ) ) ;
436439 meta. balance = meta
437440 . balance
438441 . checked_sub ( amount)
439442 . unwrap_or_else ( || panic ! ( "balance underflow" ) ) ;
440- env. storage ( ) . instance ( ) . set ( & StorageKey :: Meta , & meta) ;
443+ env. storage ( ) . instance ( ) . set ( & StorageKey :: MetaKey , & meta) ;
441444 let ut: Address = env
442445 . storage ( )
443446 . instance ( )
@@ -463,17 +466,12 @@ impl CalloraVault {
463466 pub fn batch_deduct ( env : Env , caller : Address , items : Vec < DeductItem > ) -> i128 {
464467 Self :: require_not_paused ( env. clone ( ) ) ;
465468 caller. require_auth ( ) ;
466- Self :: require_not_paused ( env. clone ( ) ) ;
469+ Self :: require_authorized_deduct_caller ( env. clone ( ) , & caller ) ;
467470 let n = items. len ( ) ;
468471 assert ! ( n > 0 , "batch_deduct requires at least one item" ) ;
469472 assert ! ( n <= MAX_BATCH_SIZE , "batch too large" ) ;
470- let max_d: i128 = env
471- . storage ( )
472- . instance ( )
473- . get ( & StorageKey :: MaxDeduct )
474- . unwrap_or ( DEFAULT_MAX_DEDUCT ) ;
473+ let max_d = Self :: get_max_deduct ( env. clone ( ) ) ;
475474 let mut meta = Self :: get_meta ( env. clone ( ) ) ;
476- Self :: require_authorized_deduct_caller ( env. clone ( ) , & caller) ;
477475 let mut running = meta. balance ;
478476 let mut total: i128 = 0 ;
479477 for item in items. iter ( ) {
@@ -487,6 +485,7 @@ impl CalloraVault {
487485 . checked_add ( item. amount )
488486 . unwrap_or_else ( || panic ! ( "total overflow" ) ) ;
489487 }
488+ let settlement = Self :: require_settlement ( & env) ;
490489
491490 meta. balance = running;
492491
@@ -498,7 +497,14 @@ impl CalloraVault {
498497 Self :: transfer_funds ( & env, & ut, & settlement, total) ;
499498
500499 meta. balance = running;
501- env. storage ( ) . instance ( ) . set ( & StorageKey :: Meta , & meta) ;
500+ env. storage ( ) . instance ( ) . set ( & StorageKey :: MetaKey , & meta) ;
501+ for item in items. iter ( ) {
502+ let rid = item. request_id . unwrap_or ( Symbol :: new ( & env, "" ) ) ;
503+ env. events ( ) . publish (
504+ ( Symbol :: new ( & env, "deduct" ) , caller. clone ( ) , rid) ,
505+ ( item. amount , meta. balance ) ,
506+ ) ;
507+ }
502508 meta. balance
503509 }
504510
@@ -536,7 +542,7 @@ impl CalloraVault {
536542 let mut meta = Self :: get_meta ( env. clone ( ) ) ;
537543 let old = meta. owner . clone ( ) ;
538544 meta. owner = pending;
539- env. storage ( ) . instance ( ) . set ( & StorageKey :: Meta , & meta) ;
545+ env. storage ( ) . instance ( ) . set ( & StorageKey :: MetaKey , & meta) ;
540546 env. storage ( ) . instance ( ) . remove ( & StorageKey :: PendingOwner ) ;
541547 env. events ( ) . publish (
542548 ( Symbol :: new ( & env, "ownership_accepted" ) , old, meta. owner ) ,
@@ -560,13 +566,10 @@ impl CalloraVault {
560566 . balance
561567 . checked_sub ( amount)
562568 . unwrap_or_else ( || panic ! ( "balance underflow" ) ) ;
563- env. storage ( ) . instance ( ) . set ( & StorageKey :: Meta , & meta) ;
569+ env. storage ( ) . instance ( ) . set ( & StorageKey :: MetaKey , & meta) ;
564570 env. events ( ) . publish (
565571 ( Symbol :: new ( & env, "withdraw" ) , meta. owner . clone ( ) ) ,
566- WithdrawEventData {
567- amount,
568- new_balance : meta. balance ,
569- } ,
572+ ( amount, meta. balance ) ,
570573 ) ;
571574 meta. balance
572575 }
@@ -587,13 +590,10 @@ impl CalloraVault {
587590 . balance
588591 . checked_sub ( amount)
589592 . unwrap_or_else ( || panic ! ( "balance underflow" ) ) ;
590- env. storage ( ) . instance ( ) . set ( & StorageKey :: Meta , & meta) ;
593+ env. storage ( ) . instance ( ) . set ( & StorageKey :: MetaKey , & meta) ;
591594 env. events ( ) . publish (
592595 ( Symbol :: new ( & env, "withdraw_to" ) , meta. owner . clone ( ) , to) ,
593- WithdrawEventData {
594- amount,
595- new_balance : meta. balance ,
596- } ,
596+ ( amount, meta. balance ) ,
597597 ) ;
598598 meta. balance
599599 }
@@ -774,13 +774,6 @@ impl CalloraVault {
774774 . unwrap_or_else ( || panic ! ( "settlement address not set" ) )
775775 }
776776
777- fn get_max_deduct ( env : Env ) -> i128 {
778- env. storage ( )
779- . instance ( )
780- . get ( & StorageKey :: MaxDeduct )
781- . unwrap_or ( DEFAULT_MAX_DEDUCT )
782- }
783-
784777 fn require_not_paused ( env : Env ) {
785778 assert ! ( !Self :: is_paused( env) , "vault is paused" ) ;
786779 }
@@ -797,6 +790,22 @@ impl CalloraVault {
797790 "unauthorized: caller is not admin or owner"
798791 ) ;
799792 }
793+
794+ pub fn add_address ( env : Env , caller : Address , depositor : Address ) {
795+ Self :: set_allowed_depositor ( env. clone ( ) , caller. clone ( ) , Some ( depositor. clone ( ) ) ) ;
796+ env. events ( )
797+ . publish ( ( Symbol :: new ( & env, "allowlist_add" ) , caller, depositor) , ( ) ) ;
798+ }
799+
800+ pub fn get_allowlist ( env : Env ) -> Vec < Address > {
801+ Self :: get_allowed_depositors ( env)
802+ }
803+
804+ pub fn clear_all ( env : Env , caller : Address ) {
805+ Self :: clear_allowed_depositors ( env. clone ( ) , caller. clone ( ) ) ;
806+ env. events ( )
807+ . publish ( ( Symbol :: new ( & env, "allowlist_clear" ) , caller) , ( ) ) ;
808+ }
800809}
801810
802811#[ cfg( test) ]
0 commit comments