Skip to content

Commit 069ef5e

Browse files
authored
chore: rename mcr->mcr_liquidation,mcr_initial->mcr_maintenance (#196)
1 parent 7f15dab commit 069ef5e

File tree

10 files changed

+75
-71
lines changed

10 files changed

+75
-71
lines changed

common/src/borrow.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -314,16 +314,16 @@ impl<M: Deref<Target = Market>> BorrowPositionRef<M> {
314314
.is_liquidation()
315315
}
316316

317-
pub fn satisfies_minimum_initial_collateral_ratio(&self, price_pair: &PricePair) -> bool {
317+
pub fn satisfies_mcr_maintenance(&self, price_pair: &PricePair) -> bool {
318318
self.market
319319
.configuration
320-
.satisfies_minimum_initial_collateral_ratio(&self.position, price_pair)
320+
.satisfies_mcr_maintenance(&self.position, price_pair)
321321
}
322322

323-
pub fn satisfies_minimum_collateral_ratio(&self, price_pair: &PricePair) -> bool {
323+
pub fn satisfies_mcr_liquidation(&self, price_pair: &PricePair) -> bool {
324324
self.market
325325
.configuration
326-
.satisfies_minimum_collateral_ratio(&self.position, price_pair)
326+
.satisfies_mcr_liquidation(&self.position, price_pair)
327327
}
328328

329329
pub fn minimum_acceptable_liquidation_amount(

common/src/market/configuration.rs

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ pub struct MarketConfiguration {
110110
pub borrow_asset: FungibleAsset<BorrowAsset>,
111111
pub collateral_asset: FungibleAsset<CollateralAsset>,
112112
pub price_oracle_configuration: PriceOracleConfiguration,
113-
pub borrow_mcr_initial: Decimal,
114-
pub borrow_mcr: Decimal,
113+
pub borrow_mcr_maintenance: Decimal,
114+
pub borrow_mcr_liquidation: Decimal,
115115
/// How much of the deposited principal may be lent out (up to 100%)?
116116
/// This is a matter of protection for supply providers.
117117
/// Set to 99% for starters.
@@ -192,12 +192,14 @@ impl MarketConfiguration {
192192
return Err(error::must_not_equal("borrow_asset", "collateral_asset"));
193193
}
194194

195-
if self.borrow_mcr_initial < 1u32 || self.borrow_mcr_initial < self.borrow_mcr {
196-
return Err(error::out_of_bounds("borrow_mcr_initial"));
195+
if self.borrow_mcr_maintenance < 1u32
196+
|| self.borrow_mcr_maintenance < self.borrow_mcr_liquidation
197+
{
198+
return Err(error::out_of_bounds("borrow_mcr_maintenance"));
197199
}
198200

199-
if self.borrow_mcr < 1u32 {
200-
return Err(error::out_of_bounds("borrow_mcr"));
201+
if self.borrow_mcr_liquidation < 1u32 {
202+
return Err(error::out_of_bounds("borrow_mcr_liquidation"));
201203
}
202204

203205
if self.borrow_asset_maximum_usage_ratio.is_zero()
@@ -227,7 +229,7 @@ impl MarketConfiguration {
227229
price_pair: &PricePair,
228230
block_timestamp_ms: u64,
229231
) -> BorrowStatus {
230-
if !self.satisfies_minimum_collateral_ratio(borrow_position, price_pair) {
232+
if !self.satisfies_mcr_liquidation(borrow_position, price_pair) {
231233
return BorrowStatus::Liquidation(LiquidationReason::Undercollateralization);
232234
}
233235

@@ -252,24 +254,28 @@ impl MarketConfiguration {
252254
.is_none_or(|duration_ms| duration_ms <= maximum_duration_ms)
253255
}
254256

255-
pub fn satisfies_minimum_initial_collateral_ratio(
257+
pub fn satisfies_mcr_maintenance(
256258
&self,
257259
borrow_position: &BorrowPosition,
258260
oracle_price_proof: &PricePair,
259261
) -> bool {
260262
satisfies_minimum_collateral_ratio(
261-
self.borrow_mcr_initial,
263+
self.borrow_mcr_maintenance,
262264
borrow_position,
263265
oracle_price_proof,
264266
)
265267
}
266268

267-
pub fn satisfies_minimum_collateral_ratio(
269+
pub fn satisfies_mcr_liquidation(
268270
&self,
269271
borrow_position: &BorrowPosition,
270272
oracle_price_proof: &PricePair,
271273
) -> bool {
272-
satisfies_minimum_collateral_ratio(self.borrow_mcr, borrow_position, oracle_price_proof)
274+
satisfies_minimum_collateral_ratio(
275+
self.borrow_mcr_liquidation,
276+
borrow_position,
277+
oracle_price_proof,
278+
)
273279
}
274280

275281
pub fn minimum_acceptable_liquidation_amount(

contract/lst-oracle/tests/lst_oracle.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,8 @@ async fn lst_oracle() {
100100
lst_market,
101101
[&supply_user, &borrow_user],
102102
|configuration| {
103-
configuration.borrow_mcr = dec!("2");
104-
configuration.borrow_mcr_initial = dec!("2");
103+
configuration.borrow_mcr_liquidation = dec!("2");
104+
configuration.borrow_mcr_maintenance = dec!("2");
105105

106106
configuration.borrow_origination_fee = Fee::zero();
107107
configuration.borrow_interest_rate_strategy = InterestRateStrategy::zero();

contract/market/src/impl_helper.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,8 @@ impl Contract {
194194
borrow_position.record_borrow_asset_in_flight_start(proof, amount, fees);
195195

196196
require!(
197-
borrow_position.satisfies_minimum_initial_collateral_ratio(&price_pair),
198-
"New position must exceed initial minimum collateral ratio",
197+
borrow_position.satisfies_mcr_maintenance(&price_pair),
198+
"Borrow position must satisfy maintenance minimum collateral ratio after borrow.",
199199
);
200200

201201
require!(
@@ -445,13 +445,13 @@ impl Contract {
445445
borrow_position.record_collateral_asset_withdrawal(proof, amount);
446446

447447
require!(
448-
borrow_position.satisfies_minimum_collateral_ratio(&price_pair),
449-
"Borrow position must satisfy MCR after collateral withdrawal.",
448+
borrow_position.satisfies_mcr_liquidation(&price_pair),
449+
"Borrow position must satisfy liquidation minimum collateral ratio after collateral withdrawal.",
450450
);
451451

452452
require!(
453-
borrow_position.satisfies_minimum_initial_collateral_ratio(&price_pair),
454-
"Borrow position must satisfy initial MCR after collateral withdrawal.",
453+
borrow_position.satisfies_mcr_maintenance(&price_pair),
454+
"Borrow position must satisfy maintenance minimum collateral ratio after collateral withdrawal.",
455455
);
456456

457457
drop(borrow_position);

contract/market/tests/configuration_validation.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,32 +24,32 @@ async fn borrow_interest_rate_strategy_exceed_apy_limit() {
2424
}
2525

2626
#[tokio::test]
27-
#[should_panic = "Smart contract panicked: Invalid configuration field `borrow_mcr_initial`: out of bounds"]
28-
async fn borrow_mcr_initial_less_than_1() {
27+
#[should_panic = "Smart contract panicked: Invalid configuration field `borrow_mcr_maintenance`: out of bounds"]
28+
async fn borrow_mcr_maintenance_less_than_1() {
2929
let worker = near_workspaces::sandbox().await.unwrap();
3030
setup_everything(&worker, |c| {
31-
c.borrow_mcr_initial = dec!(".99");
31+
c.borrow_mcr_maintenance = dec!(".99");
3232
})
3333
.await;
3434
}
3535

3636
#[tokio::test]
37-
#[should_panic = "Smart contract panicked: Invalid configuration field `borrow_mcr_initial`: out of bounds"]
38-
async fn borrow_mcr_initial_less_than_borrow_mcr() {
37+
#[should_panic = "Smart contract panicked: Invalid configuration field `borrow_mcr_maintenance`: out of bounds"]
38+
async fn borrow_mcr_maintenance_less_than_borrow_mcr_liquidation() {
3939
let worker = near_workspaces::sandbox().await.unwrap();
4040
setup_everything(&worker, |c| {
41-
c.borrow_mcr_initial = dec!("1.2");
42-
c.borrow_mcr = dec!("1.200000001");
41+
c.borrow_mcr_maintenance = dec!("1.2");
42+
c.borrow_mcr_liquidation = dec!("1.200000001");
4343
})
4444
.await;
4545
}
4646

4747
#[tokio::test]
48-
#[should_panic = "Smart contract panicked: Invalid configuration field `borrow_mcr`: out of bounds"]
49-
async fn borrow_mcr_less_than_1() {
48+
#[should_panic = "Smart contract panicked: Invalid configuration field `borrow_mcr_liquidation`: out of bounds"]
49+
async fn borrow_mcr_liquidation_less_than_1() {
5050
let worker = near_workspaces::sandbox().await.unwrap();
5151
setup_everything(&worker, |c| {
52-
c.borrow_mcr = dec!(".99");
52+
c.borrow_mcr_liquidation = dec!(".99");
5353
})
5454
.await;
5555
}

contract/market/tests/happy_path.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ async fn test_happy(#[case] borrow_mt: bool, #[case] collateral_mt: bool) {
7070
);
7171
}
7272

73-
assert!(configuration.borrow_mcr.near_equal(dec!("1.2")));
73+
assert!(configuration.borrow_mcr_liquidation.near_equal(dec!("1.2")));
7474

7575
let bounds = c.storage_balance_bounds().await;
7676

contract/market/tests/liquidation.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ async fn successful_liquidation_good_debt_under_mcr(
7272
accounts(borrow_user, supply_user, liquidator_user)
7373
config(|c| {
7474
c.borrow_origination_fee = Fee::zero();
75-
c.borrow_mcr = Decimal::from(mcr) / 100u32;
76-
c.borrow_mcr_initial = Decimal::from(mcr) / 100u32;
75+
c.borrow_mcr_liquidation = Decimal::from(mcr) / 100u32;
76+
c.borrow_mcr_maintenance = Decimal::from(mcr) / 100u32;
7777
})
7878
);
7979

@@ -152,8 +152,8 @@ async fn successful_liquidation_with_spread(
152152
extract(c)
153153
accounts(borrow_user, supply_user, liquidator_user)
154154
config(|c| {
155-
c.borrow_mcr = mcr;
156-
c.borrow_mcr_initial = mcr;
155+
c.borrow_mcr_liquidation = mcr;
156+
c.borrow_mcr_maintenance = mcr;
157157
c.liquidation_maximum_spread = liquidation_maximum_spread;
158158
})
159159
);
@@ -320,8 +320,8 @@ async fn successful_liquidation_only_from_interest() {
320320
extract(c)
321321
accounts(borrow_user, supply_user, liquidator_user)
322322
config(|c| {
323-
c.borrow_mcr = dec!("2");
324-
c.borrow_mcr_initial = dec!("2");
323+
c.borrow_mcr_liquidation = dec!("2");
324+
c.borrow_mcr_maintenance = dec!("2");
325325
c.borrow_origination_fee = Fee::zero();
326326
c.borrow_interest_rate_strategy =
327327
InterestRateStrategy::linear(dec!("1000"), dec!("1000")).unwrap();
@@ -385,8 +385,8 @@ async fn extreme_prices(
385385
extract(c)
386386
accounts(borrow_user, supply_user, liquidator_user)
387387
config(|c| {
388-
c.borrow_mcr = dec!("2");
389-
c.borrow_mcr_initial = dec!("2");
388+
c.borrow_mcr_liquidation = dec!("2");
389+
c.borrow_mcr_maintenance = dec!("2");
390390
c.borrow_origination_fee = Fee::zero();
391391
c.borrow_interest_rate_strategy =
392392
InterestRateStrategy::linear(Decimal::ZERO, Decimal::ZERO).unwrap();

contract/market/tests/minimum_initial_collateral_ratio.rs renamed to contract/market/tests/mcr_maintenance.rs

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,24 @@ use test_utils::*;
99
#[case(dec!("1"), dec!("2"))]
1010
#[case(dec!("1"), dec!("5"))]
1111
#[tokio::test]
12-
async fn success_above_minimum_initial_collateral_ratio(
13-
#[case] minimum: Decimal,
14-
#[case] initial: Decimal,
15-
) {
12+
async fn success_above_mcr_maintenance(#[case] liquidation: Decimal, #[case] maintenance: Decimal) {
1613
setup_test!(
1714
extract(c)
1815
accounts(borrow_user, supply_user)
1916
config(|c| {
2017
c.borrow_origination_fee = Fee::zero();
21-
c.borrow_mcr = minimum;
22-
c.borrow_mcr_initial = initial;
18+
c.borrow_mcr_liquidation = liquidation;
19+
c.borrow_mcr_maintenance = maintenance;
2320
})
2421
);
2522

2623
tokio::join!(
2724
c.supply_and_harvest_until_activation(&supply_user, 10_000),
2825
c.collateralize(
2926
&borrow_user,
30-
(1000u32 * initial + Decimal::ONE).to_u128_ceil().unwrap(),
27+
(1000u32 * maintenance + Decimal::ONE)
28+
.to_u128_ceil()
29+
.unwrap(),
3130
),
3231
);
3332

@@ -54,26 +53,23 @@ async fn success_above_minimum_initial_collateral_ratio(
5453
#[case(dec!("1"), dec!("2"))]
5554
#[case(dec!("1"), dec!("5"))]
5655
#[tokio::test]
57-
#[should_panic = "Smart contract panicked: New position must exceed initial minimum collateral ratio"]
58-
async fn fail_below_minimum_initial_collateral_ratio(
59-
#[case] minimum: Decimal,
60-
#[case] initial: Decimal,
61-
) {
56+
#[should_panic = "Smart contract panicked: Borrow position must satisfy maintenance minimum collateral ratio"]
57+
async fn fail_below_mcr_maintenance(#[case] liquidation: Decimal, #[case] maintenance: Decimal) {
6258
setup_test!(
6359
extract(c)
6460
accounts(borrow_user, supply_user)
6561
config(|c| {
6662
c.borrow_origination_fee = Fee::zero();
67-
c.borrow_mcr = minimum;
68-
c.borrow_mcr_initial = initial;
63+
c.borrow_mcr_liquidation = liquidation;
64+
c.borrow_mcr_maintenance = maintenance;
6965
})
7066
);
7167

7268
tokio::join!(
7369
c.supply_and_harvest_until_activation(&supply_user, 10_000),
7470
c.collateralize(
7571
&borrow_user,
76-
(1000u32 * initial).to_u128_floor().unwrap() - 1,
72+
(1000u32 * maintenance).to_u128_floor().unwrap() - 1,
7773
),
7874
);
7975

@@ -86,25 +82,27 @@ async fn fail_below_minimum_initial_collateral_ratio(
8682
#[case(dec!("1.5"), dec!("2"))]
8783
#[case(dec!("1.5"), dec!("5"))]
8884
#[tokio::test]
89-
async fn not_in_liquidation_if_below_minimum_initial_collateral_ratio(
90-
#[case] minimum: Decimal,
91-
#[case] initial: Decimal,
85+
async fn not_in_liquidation_if_below_mcr_maintenance(
86+
#[case] liquidation: Decimal,
87+
#[case] maintenance: Decimal,
9288
) {
9389
setup_test!(
9490
extract(c)
9591
accounts(borrow_user, supply_user)
9692
config(|c| {
9793
c.borrow_origination_fee = Fee::zero();
98-
c.borrow_mcr = minimum;
99-
c.borrow_mcr_initial = initial;
94+
c.borrow_mcr_liquidation = liquidation;
95+
c.borrow_mcr_maintenance = maintenance;
10096
})
10197
);
10298

10399
tokio::join!(
104100
c.supply_and_harvest_until_activation(&supply_user, 10_000),
105101
c.collateralize(
106102
&borrow_user,
107-
(1000u32 * initial + Decimal::ONE).to_u128_ceil().unwrap(),
103+
(1000u32 * maintenance + Decimal::ONE)
104+
.to_u128_ceil()
105+
.unwrap(),
108106
),
109107
);
110108

@@ -121,15 +119,15 @@ async fn not_in_liquidation_if_below_minimum_initial_collateral_ratio(
121119
}
122120

123121
#[tokio::test]
124-
#[should_panic = "Smart contract panicked: Borrow position must satisfy initial MCR after collateral withdrawal."]
125-
async fn withdraw_collateral_below_initial_mcr() {
122+
#[should_panic = "Smart contract panicked: Borrow position must satisfy maintenance minimum collateral ratio after collateral withdrawal."]
123+
async fn withdraw_collateral_below_mcr_maintenance() {
126124
setup_test!(
127125
extract(c)
128126
accounts(borrow_user, supply_user)
129127
config(|c| {
130128
c.borrow_origination_fee = Fee::zero();
131-
c.borrow_mcr = dec!("1.2");
132-
c.borrow_mcr_initial = dec!("1.5");
129+
c.borrow_mcr_liquidation = dec!("1.2");
130+
c.borrow_mcr_maintenance = dec!("1.5");
133131
})
134132
);
135133

test-utils/examples/generate_testnet_configuration.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ pub fn main() {
3636
collateral_asset_decimals: 24,
3737
price_maximum_age_s: 60,
3838
},
39-
borrow_mcr_initial: Decimal::from_str("1.25").unwrap(),
40-
borrow_mcr: Decimal::from_str("1.2").unwrap(),
39+
borrow_mcr_maintenance: Decimal::from_str("1.25").unwrap(),
40+
borrow_mcr_liquidation: Decimal::from_str("1.2").unwrap(),
4141
borrow_asset_maximum_usage_ratio: Decimal::from_str("0.99").unwrap(),
4242
borrow_origination_fee: Fee::zero(),
4343
borrow_interest_rate_strategy: InterestRateStrategy::piecewise(

test-utils/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,8 @@ pub fn market_configuration(
116116
borrow_asset_decimals: 24,
117117
price_maximum_age_s: 60,
118118
},
119-
borrow_mcr_initial: Decimal::from_str("1.25").unwrap(),
120-
borrow_mcr: Decimal::from_str("1.2").unwrap(),
119+
borrow_mcr_maintenance: Decimal::from_str("1.25").unwrap(),
120+
borrow_mcr_liquidation: Decimal::from_str("1.2").unwrap(),
121121
borrow_asset_maximum_usage_ratio: Decimal::from_str("0.99").unwrap(),
122122
borrow_origination_fee: Fee::Proportional(Decimal::from_str("0.1").unwrap()),
123123
borrow_interest_rate_strategy: InterestRateStrategy::piecewise(

0 commit comments

Comments
 (0)