@@ -62,6 +62,7 @@ pub enum LoanError {
6262 InvalidExtension = 25 ,
6363 InsufficientCollateral = 26 ,
6464 LoanNotLiquidatable = 27 ,
65+ RepaymentBelowMinimum = 28 ,
6566}
6667
6768#[ contracttype]
@@ -515,6 +516,10 @@ impl LoanManager {
515516 . checked_add ( delta)
516517 . expect ( "total outstanding overflow" ) ;
517518
519+ // This can only become negative if the contract state is inconsistent:
520+ // repayment logic only ever subtracts the exact principal amount of a
521+ // fully repaid loan, and the corresponding loan-approval bookkeeping
522+ // prevents a second subtraction from the same outstanding balance.
518523 if updated < 0 {
519524 panic ! ( "total outstanding underflow" ) ;
520525 }
@@ -1270,7 +1275,7 @@ impl LoanManager {
12701275 let is_rounding_dust_forgiveness = total_debt <= min_repayment_amount;
12711276
12721277 if amount < total_debt && amount < min_repayment_amount && !is_rounding_dust_forgiveness {
1273- panic ! ( "repayment amount below minimum" ) ;
1278+ return Err ( LoanError :: RepaymentBelowMinimum ) ;
12741279 }
12751280
12761281 let token: Address = env
@@ -2057,16 +2062,16 @@ impl LoanManager {
20572062 Self :: max_loan_amount ( & env)
20582063 }
20592064
2060- pub fn set_min_repayment_amount ( env : Env , amount : i128 ) {
2065+ pub fn set_min_repayment_amount ( env : Env , amount : i128 ) -> Result < ( ) , LoanError > {
20612066 if amount < 0 {
2062- panic ! ( "min repayment amount cannot be negative" ) ;
2067+ return Err ( LoanError :: InvalidAmount ) ;
20632068 }
20642069
20652070 let admin: Address = env
20662071 . storage ( )
20672072 . instance ( )
20682073 . get ( & DataKey :: Admin )
2069- . expect ( "not initialized" ) ;
2074+ . ok_or ( LoanError :: NotInitialized ) ? ;
20702075 admin. require_auth ( ) ;
20712076
20722077 let old_amount = Self :: min_repayment_amount ( & env) ;
@@ -2075,6 +2080,8 @@ impl LoanManager {
20752080 . set ( & DataKey :: MinRepaymentAmount , & amount) ;
20762081 Self :: bump_instance_ttl ( & env) ;
20772082 events:: min_repayment_updated ( & env, admin, old_amount, amount) ;
2083+
2084+ Ok ( ( ) )
20782085 }
20792086
20802087 pub fn get_min_repayment_amount ( env : Env ) -> i128 {
0 commit comments