diff --git a/contracts/Move.beta.toml b/contracts/suilend/Move.beta.toml similarity index 100% rename from contracts/Move.beta.toml rename to contracts/suilend/Move.beta.toml diff --git a/contracts/Move.lock b/contracts/suilend/Move.lock similarity index 100% rename from contracts/Move.lock rename to contracts/suilend/Move.lock diff --git a/contracts/Move.mainnet.toml b/contracts/suilend/Move.mainnet.toml similarity index 100% rename from contracts/Move.mainnet.toml rename to contracts/suilend/Move.mainnet.toml diff --git a/contracts/Move.toml b/contracts/suilend/Move.toml similarity index 100% rename from contracts/Move.toml rename to contracts/suilend/Move.toml diff --git a/contracts/sources/cell.move b/contracts/suilend/sources/cell.move similarity index 100% rename from contracts/sources/cell.move rename to contracts/suilend/sources/cell.move diff --git a/contracts/sources/decimal.move b/contracts/suilend/sources/decimal.move similarity index 100% rename from contracts/sources/decimal.move rename to contracts/suilend/sources/decimal.move diff --git a/contracts/sources/lending_market.move b/contracts/suilend/sources/lending_market.move similarity index 99% rename from contracts/sources/lending_market.move rename to contracts/suilend/sources/lending_market.move index d90f4a8..20a3cc2 100644 --- a/contracts/sources/lending_market.move +++ b/contracts/suilend/sources/lending_market.move @@ -841,20 +841,24 @@ module suilend::lending_market { reserve::update_reserve_config
(reserve, config); } - public fun set_emode_for_pair
( + public fun set_emode_for_pair
( _: &LendingMarketOwnerCap
, lending_market: &mut LendingMarket
,
- reserve_array_index: u64,
- pair_reserve_array_index: u64,
+ deposit_reserve_array_index: u64,
+ borrow_reserve_array_index: u64,
open_ltv_pct: u8,
close_ltv_pct: u8,
) {
assert!(lending_market.version == CURRENT_VERSION, EIncorrectVersion);
- let reserve = vector::borrow_mut(&mut lending_market.reserves, reserve_array_index);
- assert!(reserve::coin_type(reserve) == type_name::get (reserve, pair_reserve_array_index, open_ltv_pct, close_ltv_pct);
+ reserve::set_emode_for_pair (deposit_reserve, borrow_reserve_array_index, open_ltv_pct, close_ltv_pct);
}
public fun add_pool_reward (
diff --git a/contracts/sources/lending_market_registry.move b/contracts/suilend/sources/lending_market_registry.move
similarity index 100%
rename from contracts/sources/lending_market_registry.move
rename to contracts/suilend/sources/lending_market_registry.move
diff --git a/contracts/sources/liquidity_mining.move b/contracts/suilend/sources/liquidity_mining.move
similarity index 100%
rename from contracts/sources/liquidity_mining.move
rename to contracts/suilend/sources/liquidity_mining.move
diff --git a/contracts/sources/obligation.move b/contracts/suilend/sources/obligation.move
similarity index 99%
rename from contracts/sources/obligation.move
rename to contracts/suilend/sources/obligation.move
index f87aa28..03d64cf 100644
--- a/contracts/sources/obligation.move
+++ b/contracts/suilend/sources/obligation.move
@@ -45,6 +45,8 @@ module suilend::obligation {
const ECannotDepositAndBorrowSameAsset: u64 = 8;
const EEModeNotValidWithCrossMargin: u64 = 9;
const ENoEmodeConfigForGivenDepositReserve : u64 = 10;
+ const EEModeObligatoinMustOnlyHaveOneDeposit : u64 = 11;
+ const EEModeObligatoinMustOnlyHaveOneBorrow : u64 = 12;
const EInvalidEModeDeposit: u64 = 13;
const EInvalidEModeBorrow: u64 = 14;
@@ -381,7 +383,7 @@ module suilend::obligation {
);
if (is_emode) {
- assert!(vector::length(&obligation.deposits) == 1, EIsolatedAssetViolation);
+ assert!(vector::length(&obligation.deposits) == 1, EEModeObligatoinMustOnlyHaveOneDeposit);
let target_reserve_index = emode_deposit_reserve_array_index(obligation);
let deposit = vector::borrow(&obligation.deposits, deposit_index);
assert!(deposit.reserve_array_index == target_reserve_index, EInvalidEModeDeposit);
@@ -444,38 +446,17 @@ module suilend::obligation {
assert!(is_healthy(obligation), EObligationIsNotHealthy);
- if (isolated(config(borrow_reserve)) || obligation.borrowing_isolated_asset || is_emode) {
+ if (isolated(config(borrow_reserve)) || obligation.borrowing_isolated_asset) {
assert!(vector::length(&obligation.borrows) == 1, EIsolatedAssetViolation);
};
if (is_emode) {
+ assert!(vector::length(&obligation.borrows) == 1, EEModeObligatoinMustOnlyHaveOneBorrow);
let target_reserve_index = emode_borrow_reserve_array_index(obligation);
let borrow = vector::borrow(&obligation.borrows, borrow_index);
assert!(borrow.reserve_array_index == target_reserve_index, EInvalidEModeBorrow);
- let emode_deposit_reserve_array_index = emode_deposit_reserve_array_index(obligation);
-
- let deposit_reserve = vector::borrow(reserves, emode_deposit_reserve_array_index);
-
- let (open_ltv, close_ltv) = get_ltvs(
- obligation,
- deposit_reserve,
- is_emode,
- );
-
- let deposit_index = option::destroy_some(get_single_deposit_array_reserve_if_any(obligation));
-
- let deposit = vector::borrow_mut(&mut obligation.deposits, deposit_index);
- let deposit_value = reserve::ctoken_market_value(deposit_reserve, deposit.deposited_ctoken_amount);
-
- obligation.allowed_borrow_value_usd = mul(
- reserve::ctoken_market_value_lower_bound(deposit_reserve, deposit.deposited_ctoken_amount),
- open_ltv,
- );
- obligation.unhealthy_borrow_value_usd = mul(
- deposit_value,
- close_ltv,
- );
+ refresh(obligation, reserves, clock);
};
log_obligation_data(obligation);
@@ -3357,7 +3338,7 @@ module suilend::obligation {
}
#[test]
- #[expected_failure(abort_code = EIsolatedAssetViolation)]
+ #[expected_failure(abort_code = EEModeObligatoinMustOnlyHaveOneBorrow)]
public fun test_emode_multiple_borrows_fail() {
use sui::test_scenario::{Self};
@@ -3412,7 +3393,7 @@ module suilend::obligation {
}
#[test]
- #[expected_failure(abort_code = EIsolatedAssetViolation)]
+ #[expected_failure(abort_code = EEModeObligatoinMustOnlyHaveOneDeposit)]
public fun test_emode_multiple_deposits_fail() {
use sui::test_scenario::{Self};
diff --git a/contracts/sources/oracles.move b/contracts/suilend/sources/oracles.move
similarity index 100%
rename from contracts/sources/oracles.move
rename to contracts/suilend/sources/oracles.move
diff --git a/contracts/sources/rate_limiter.move b/contracts/suilend/sources/rate_limiter.move
similarity index 100%
rename from contracts/sources/rate_limiter.move
rename to contracts/suilend/sources/rate_limiter.move
diff --git a/contracts/sources/reserve.move b/contracts/suilend/sources/reserve.move
similarity index 100%
rename from contracts/sources/reserve.move
rename to contracts/suilend/sources/reserve.move
diff --git a/contracts/sources/reserve_config.move b/contracts/suilend/sources/reserve_config.move
similarity index 100%
rename from contracts/sources/reserve_config.move
rename to contracts/suilend/sources/reserve_config.move
diff --git a/contracts/sources/suilend.code-workspace b/contracts/suilend/sources/suilend.code-workspace
similarity index 100%
rename from contracts/sources/suilend.code-workspace
rename to contracts/suilend/sources/suilend.code-workspace
diff --git a/contracts/sources/suilend.move b/contracts/suilend/sources/suilend.move
similarity index 100%
rename from contracts/sources/suilend.move
rename to contracts/suilend/sources/suilend.move
diff --git a/contracts/tests/mock_pyth.move b/contracts/suilend/tests/mock_pyth.move
similarity index 100%
rename from contracts/tests/mock_pyth.move
rename to contracts/suilend/tests/mock_pyth.move
diff --git a/contracts/tests/test_coins.move b/contracts/suilend/tests/test_coins.move
similarity index 100%
rename from contracts/tests/test_coins.move
rename to contracts/suilend/tests/test_coins.move