From 582ec4f363d7981234b72c33cca45b1a8293bdb8 Mon Sep 17 00:00:00 2001 From: piobab Date: Fri, 25 Aug 2023 12:37:09 +0200 Subject: [PATCH 1/3] Validate slopes for ir model. --- contracts/red-bank/tests/tests/test_admin.rs | 33 +++++++++++++++++-- .../types/src/red_bank/interest_rate_model.rs | 9 +++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/contracts/red-bank/tests/tests/test_admin.rs b/contracts/red-bank/tests/tests/test_admin.rs index 2fb396789..37033cedb 100644 --- a/contracts/red-bank/tests/tests/test_admin.rs +++ b/contracts/red-bank/tests/tests/test_admin.rs @@ -137,7 +137,7 @@ fn init_asset() { optimal_utilization_rate: Decimal::one(), base: Decimal::percent(5), slope_1: Decimal::zero(), - slope_2: Decimal::zero(), + slope_2: Decimal::one(), }; let params = InitOrUpdateAssetParams { @@ -269,6 +269,33 @@ fn init_asset() { ); } + // init asset where slope_1 >= slope_2 + { + let invalid_asset_params = InitOrUpdateAssetParams { + interest_rate_model: Some(InterestRateModel { + slope_1: Decimal::percent(10), + slope_2: Decimal::percent(10), + ..ir_model + }), + ..params + }; + let msg = ExecuteMsg::InitAsset { + denom: "someasset".to_string(), + params: invalid_asset_params, + }; + let info = mock_info("owner", &[]); + let error_res = execute(deps.as_mut(), env.clone(), info, msg).unwrap_err(); + assert_eq!( + error_res, + ValidationError::InvalidParam { + param_name: "slope_1".to_string(), + invalid_value: "0.1".to_string(), + predicate: "< 0.1".to_string() + } + .into() + ); + } + // owner is authorized { let msg = ExecuteMsg::InitAsset { @@ -322,7 +349,7 @@ fn update_asset() { optimal_utilization_rate: Decimal::one(), base: Decimal::percent(5), slope_1: Decimal::zero(), - slope_2: Decimal::zero(), + slope_2: Decimal::one(), }; let params = InitOrUpdateAssetParams { @@ -459,7 +486,7 @@ fn update_asset_with_new_interest_rate_model_params() { optimal_utilization_rate: Decimal::one(), base: Decimal::percent(5), slope_1: Decimal::zero(), - slope_2: Decimal::zero(), + slope_2: Decimal::one(), }; let params = InitOrUpdateAssetParams { diff --git a/packages/types/src/red_bank/interest_rate_model.rs b/packages/types/src/red_bank/interest_rate_model.rs index d94e1c7e2..35a71c388 100644 --- a/packages/types/src/red_bank/interest_rate_model.rs +++ b/packages/types/src/red_bank/interest_rate_model.rs @@ -20,6 +20,15 @@ pub struct InterestRateModel { impl InterestRateModel { pub fn validate(&self) -> Result<(), ValidationError> { decimal_param_le_one(self.optimal_utilization_rate, "optimal_utilization_rate")?; + + if self.slope_1 >= self.slope_2 { + return Err(ValidationError::InvalidParam { + param_name: "slope_1".to_string(), + invalid_value: self.slope_1.to_string(), + predicate: format!("< {}", self.slope_2), + }); + } + Ok(()) } From 0ade3519bdbc39d7b009a2b0ff1969229e2b3b8d Mon Sep 17 00:00:00 2001 From: piobab Date: Fri, 25 Aug 2023 12:38:05 +0200 Subject: [PATCH 2/3] Update doc in ir model to be consistent with impl. --- packages/types/src/red_bank/interest_rate_model.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/types/src/red_bank/interest_rate_model.rs b/packages/types/src/red_bank/interest_rate_model.rs index 35a71c388..26f844eaa 100644 --- a/packages/types/src/red_bank/interest_rate_model.rs +++ b/packages/types/src/red_bank/interest_rate_model.rs @@ -11,9 +11,9 @@ pub struct InterestRateModel { pub optimal_utilization_rate: Decimal, /// Base rate pub base: Decimal, - /// Slope parameter for interest rate model function when utilization_rate < optimal_utilization_rate + /// Slope parameter for interest rate model function when utilization_rate <= optimal_utilization_rate pub slope_1: Decimal, - /// Slope parameter for interest rate model function when utilization_rate >= optimal_utilization_rate + /// Slope parameter for interest rate model function when utilization_rate > optimal_utilization_rate pub slope_2: Decimal, } From cfa1c149995c52ac0fbd860d370e0a7d0c4343ac Mon Sep 17 00:00:00 2001 From: piobab Date: Fri, 25 Aug 2023 21:41:41 +0200 Subject: [PATCH 3/3] Update schema. --- schemas/mars-red-bank/mars-red-bank.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/schemas/mars-red-bank/mars-red-bank.json b/schemas/mars-red-bank/mars-red-bank.json index 5f8b24d6c..569158af9 100644 --- a/schemas/mars-red-bank/mars-red-bank.json +++ b/schemas/mars-red-bank/mars-red-bank.json @@ -454,7 +454,7 @@ ] }, "slope_1": { - "description": "Slope parameter for interest rate model function when utilization_rate < optimal_utilization_rate", + "description": "Slope parameter for interest rate model function when utilization_rate <= optimal_utilization_rate", "allOf": [ { "$ref": "#/definitions/Decimal" @@ -462,7 +462,7 @@ ] }, "slope_2": { - "description": "Slope parameter for interest rate model function when utilization_rate >= optimal_utilization_rate", + "description": "Slope parameter for interest rate model function when utilization_rate > optimal_utilization_rate", "allOf": [ { "$ref": "#/definitions/Decimal" @@ -1146,7 +1146,7 @@ ] }, "slope_1": { - "description": "Slope parameter for interest rate model function when utilization_rate < optimal_utilization_rate", + "description": "Slope parameter for interest rate model function when utilization_rate <= optimal_utilization_rate", "allOf": [ { "$ref": "#/definitions/Decimal" @@ -1154,7 +1154,7 @@ ] }, "slope_2": { - "description": "Slope parameter for interest rate model function when utilization_rate >= optimal_utilization_rate", + "description": "Slope parameter for interest rate model function when utilization_rate > optimal_utilization_rate", "allOf": [ { "$ref": "#/definitions/Decimal" @@ -1208,7 +1208,7 @@ ] }, "slope_1": { - "description": "Slope parameter for interest rate model function when utilization_rate < optimal_utilization_rate", + "description": "Slope parameter for interest rate model function when utilization_rate <= optimal_utilization_rate", "allOf": [ { "$ref": "#/definitions/Decimal" @@ -1216,7 +1216,7 @@ ] }, "slope_2": { - "description": "Slope parameter for interest rate model function when utilization_rate >= optimal_utilization_rate", + "description": "Slope parameter for interest rate model function when utilization_rate > optimal_utilization_rate", "allOf": [ { "$ref": "#/definitions/Decimal"