@@ -77,6 +77,7 @@ impl EscrowContract {
7777 if env. storage ( ) . instance ( ) . has ( & DataKey :: Admin ) {
7878 return Err ( EscrowError :: AlreadyInitialized ) ;
7979 }
80+ admin. require_auth ( ) ;
8081 env. storage ( ) . instance ( ) . set ( & DataKey :: Admin , & admin) ;
8182 env. storage ( )
8283 . instance ( )
@@ -99,7 +100,7 @@ impl EscrowContract {
99100 shipment_id : u64 ,
100101 amount : i128 ,
101102 ) -> Result < ( ) , EscrowError > {
102- shipper. require_auth ( ) ;
103+ shipper. require_auth_for_args ( & [ & carrier , & shipment_id , & amount ] ) ;
103104
104105 if amount <= 0 {
105106 return Err ( EscrowError :: InvalidAmount ) ;
@@ -235,7 +236,7 @@ impl EscrowContract {
235236 /// Raise a dispute for the escrow (mirrors the shipment dispute).
236237 /// Either party can call this; admin then resolves via release or refund.
237238 pub fn raise_dispute ( env : Env , caller : Address , shipment_id : u64 ) -> Result < ( ) , EscrowError > {
238- caller. require_auth ( ) ;
239+ caller. require_auth_for_args ( & [ & shipment_id ] ) ;
239240
240241 let mut record = Self :: load ( & env, shipment_id) ?;
241242
@@ -427,6 +428,70 @@ mod tests {
427428 client. fund_escrow ( shipper, carrier, & SHIPMENT_ID , & AMOUNT ) ;
428429 }
429430
431+ #[ test]
432+ fn test_initialize_requires_auth ( ) {
433+ let env = Env :: default ( ) ;
434+ let admin = Address :: generate ( & env) ;
435+ let contract_id = env. register ( EscrowContract { } , ( ) ) ;
436+ let client = EscrowContractClient :: new ( & env, & contract_id) ;
437+
438+ let result = client. try_initialize ( & admin, & Address :: generate ( & env) ) ;
439+ assert ! ( result. is_err( ) ) ;
440+ }
441+
442+ #[ test]
443+ fn test_fund_escrow_requires_auth ( ) {
444+ let env = Env :: default ( ) ;
445+ let shipper = Address :: generate ( & env) ;
446+ let carrier = Address :: generate ( & env) ;
447+ let contract_id = env. register ( EscrowContract { } , ( ) ) ;
448+ let client = EscrowContractClient :: new ( & env, & contract_id) ;
449+
450+ let result = client. try_fund_escrow ( & shipper, & carrier, & SHIPMENT_ID , & AMOUNT ) ;
451+ assert ! ( result. is_err( ) ) ;
452+ }
453+
454+ #[ test]
455+ fn test_release_payment_requires_auth ( ) {
456+ let env = Env :: default ( ) ;
457+ let contract_id = env. register ( EscrowContract { } , ( ) ) ;
458+ let client = EscrowContractClient :: new ( & env, & contract_id) ;
459+
460+ let result = client. try_release_payment ( & SHIPMENT_ID ) ;
461+ assert ! ( result. is_err( ) ) ;
462+ }
463+
464+ #[ test]
465+ fn test_refund_payment_requires_auth ( ) {
466+ let env = Env :: default ( ) ;
467+ let contract_id = env. register ( EscrowContract { } , ( ) ) ;
468+ let client = EscrowContractClient :: new ( & env, & contract_id) ;
469+
470+ let result = client. try_refund_payment ( & SHIPMENT_ID ) ;
471+ assert ! ( result. is_err( ) ) ;
472+ }
473+
474+ #[ test]
475+ fn test_raise_dispute_requires_auth ( ) {
476+ let env = Env :: default ( ) ;
477+ let caller = Address :: generate ( & env) ;
478+ let contract_id = env. register ( EscrowContract { } , ( ) ) ;
479+ let client = EscrowContractClient :: new ( & env, & contract_id) ;
480+
481+ let result = client. try_raise_dispute ( & caller, & SHIPMENT_ID ) ;
482+ assert ! ( result. is_err( ) ) ;
483+ }
484+
485+ #[ test]
486+ fn test_resolve_dispute_requires_auth ( ) {
487+ let env = Env :: default ( ) ;
488+ let contract_id = env. register ( EscrowContract { } , ( ) ) ;
489+ let client = EscrowContractClient :: new ( & env, & contract_id) ;
490+
491+ let result = client. try_resolve_dispute ( & SHIPMENT_ID , & true ) ;
492+ assert ! ( result. is_err( ) ) ;
493+ }
494+
430495 #[ test]
431496 fn test_fund_and_release ( ) {
432497 let ( env, _admin, shipper, carrier, token_addr, client) = setup ( AMOUNT ) ;
0 commit comments