diff --git a/contracts/red-bank/src/error.rs b/contracts/red-bank/src/error.rs index a65dd259..91d79390 100644 --- a/contracts/red-bank/src/error.rs +++ b/contracts/red-bank/src/error.rs @@ -81,6 +81,9 @@ pub enum ContractError { #[error("Amount to repay is greater than total debt")] CannotRepayMoreThanDebt {}, + #[error("User cannot issue liquidation of own account")] + CannotLiquidateSelf {}, + #[error("User has a positive uncollateralized loan limit and thus cannot be liquidated")] CannotLiquidateWhenPositiveUncollateralizedLoanLimit {}, diff --git a/contracts/red-bank/src/execute.rs b/contracts/red-bank/src/execute.rs index 89e0d7bc..f3f0919b 100644 --- a/contracts/red-bank/src/execute.rs +++ b/contracts/red-bank/src/execute.rs @@ -709,6 +709,12 @@ pub fn liquidate( let recipient = User(&recipient_addr); // 1. Validate liquidation + + // User cannot liquidate themselves + if info.sender == user_addr { + return Err(ContractError::CannotLiquidateSelf {}); + } + // If user (contract) has a positive uncollateralized limit then the user // cannot be liquidated if !user.uncollateralized_loan_limit(deps.storage, &debt_denom)?.is_zero() { diff --git a/contracts/red-bank/tests/test_liquidate.rs b/contracts/red-bank/tests/test_liquidate.rs index 74748845..489e06cd 100644 --- a/contracts/red-bank/tests/test_liquidate.rs +++ b/contracts/red-bank/tests/test_liquidate.rs @@ -309,6 +309,24 @@ fn liquidate_if_no_coins_sent() { assert_eq!(error_res, PaymentError::NoFunds {}.into()); } +#[test] +fn cannot_self_liquidate() { + let TestSuite { + mut deps, + .. + } = setup_test(); + + let env = mock_env(MockEnvParams::default()); + let info = mock_info("liquidator", &[coin(100, "somecoin1")]); + let msg = ExecuteMsg::Liquidate { + user: "liquidator".to_string(), + collateral_denom: "collateral".to_string(), + recipient: None, + }; + let error_res = execute(deps.as_mut(), env, info, msg).unwrap_err(); + assert_eq!(error_res, ContractError::CannotLiquidateSelf {}); +} + #[test] fn liquidate_if_many_coins_sent() { let TestSuite { diff --git a/schemas/mars-params/mars-params.json b/schemas/mars-params/mars-params.json index 7c87e05d..4ca016c8 100644 --- a/schemas/mars-params/mars-params.json +++ b/schemas/mars-params/mars-params.json @@ -1,6 +1,6 @@ { "contract_name": "mars-params", - "contract_version": "1.0.7", + "contract_version": "1.1.0", "idl_version": "1.0.0", "instantiate": { "$schema": "http://json-schema.org/draft-07/schema#",