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(), EWrongType); + let borrow_reserve = vector::borrow_mut(&mut lending_market.reserves, borrow_reserve_array_index); + assert!(reserve::coin_type(borrow_reserve) == type_name::get(), EWrongType); + + let deposit_reserve = vector::borrow_mut(&mut lending_market.reserves, deposit_reserve_array_index); + assert!(reserve::coin_type(deposit_reserve) == type_name::get(), EWrongType); + - reserve::set_emode_for_pair

(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