From ee4f962dc80470555db98bdbc9f5edec80bccab6 Mon Sep 17 00:00:00 2001 From: 0xxgen1 <0xxgen@solend.fi> Date: Tue, 23 Jul 2024 10:03:55 +0100 Subject: [PATCH 01/14] expose test-only setup fn --- contracts/sources/lending_market.move | 31 ++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/contracts/sources/lending_market.move b/contracts/sources/lending_market.move index 6d555c4..77c5984 100644 --- a/contracts/sources/lending_market.move +++ b/contracts/sources/lending_market.move @@ -1124,7 +1124,36 @@ module suilend::lending_market { } #[test_only] - fun setup(reserve_args: Bag, scenario: &mut Scenario): State { + public fun new_args(initial_deposit: u64): ReserveArgs { + use suilend::reserve_config::{Self}; + + ReserveArgs { + config: reserve_config::default_reserve_config(), + initial_deposit, + } + } + + #[test_only] + public fun destruct_state(state: State): ( + Clock, + LendingMarketOwnerCap, + LendingMarket, + PriceState, + Bag + ) { + let State { + clock, + owner_cap, + lending_market, + prices, + type_to_index, + } = state; + + (clock, owner_cap, lending_market, prices, type_to_index) + } + + #[test_only] + public fun setup(reserve_args: Bag, scenario: &mut Scenario): State { use suilend::test_usdc::{TEST_USDC}; use suilend::test_sui::{TEST_SUI}; use suilend::reserve_config::{Self}; From fcdeb89787d98343a1316e209b1b9fcb11db9354 Mon Sep 17 00:00:00 2001 From: 0xxgen1 <0xxgen@solend.fi> Date: Mon, 29 Jul 2024 18:08:49 +0100 Subject: [PATCH 02/14] expose view function `reserves` --- contracts/sources/lending_market.move | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/contracts/sources/lending_market.move b/contracts/sources/lending_market.move index 77c5984..c7916a6 100644 --- a/contracts/sources/lending_market.move +++ b/contracts/sources/lending_market.move @@ -661,6 +661,11 @@ module suilend::lending_market { // === Public-View Functions === + + public fun reserves

(lending_market: &LendingMarket

): &vector> { + &lending_market.reserves + } + fun max_borrow_amount

( rate_limiter: RateLimiter, obligation: &Obligation

, From 62f8acc8da051445d19d3b4d131683f5fbb3c961 Mon Sep 17 00:00:00 2001 From: 0xxgen1 <0xxgen@solend.fi> Date: Thu, 8 Aug 2024 11:59:48 +0100 Subject: [PATCH 03/14] expose reserve_array_index function --- contracts/sources/lending_market.move | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/sources/lending_market.move b/contracts/sources/lending_market.move index c7916a6..0026bd6 100644 --- a/contracts/sources/lending_market.move +++ b/contracts/sources/lending_market.move @@ -746,7 +746,7 @@ module suilend::lending_market { } // slow function. use sparingly. - fun reserve_array_index(lending_market: &LendingMarket

): u64 { + public fun reserve_array_index(lending_market: &LendingMarket

): u64 { let i = 0; while (i < vector::length(&lending_market.reserves)) { let reserve = vector::borrow(&lending_market.reserves, i); From f53d865928496aad45f6e75ba827bedda6cd870a Mon Sep 17 00:00:00 2001 From: 0xxgen1 <0xxgen@solend.fi> Date: Wed, 21 Aug 2024 22:45:39 +0100 Subject: [PATCH 04/14] expose reserve view function --- contracts/sources/lending_market.move | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/sources/lending_market.move b/contracts/sources/lending_market.move index 0026bd6..9e1e159 100644 --- a/contracts/sources/lending_market.move +++ b/contracts/sources/lending_market.move @@ -760,7 +760,7 @@ module suilend::lending_market { i } - fun reserve(lending_market: &LendingMarket

): &Reserve

{ + public fun reserve(lending_market: &LendingMarket

): &Reserve

{ let i = reserve_array_index(lending_market); vector::borrow(&lending_market.reserves, i) } From cd5d2532df12844870b57e31a488eb156f0be8ca Mon Sep 17 00:00:00 2001 From: 0xxgen1 <0xxgen@solend.fi> Date: Wed, 21 Aug 2024 22:57:56 +0100 Subject: [PATCH 05/14] accept reserve config in new_args test function --- contracts/sources/lending_market.move | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/contracts/sources/lending_market.move b/contracts/sources/lending_market.move index 9e1e159..955e327 100644 --- a/contracts/sources/lending_market.move +++ b/contracts/sources/lending_market.move @@ -1129,11 +1129,9 @@ module suilend::lending_market { } #[test_only] - public fun new_args(initial_deposit: u64): ReserveArgs { - use suilend::reserve_config::{Self}; - + public fun new_args(initial_deposit: u64, config: ReserveConfig): ReserveArgs { ReserveArgs { - config: reserve_config::default_reserve_config(), + config, initial_deposit, } } From d8df3032271e4a6a786284a4ad5a73e7c6cafc9d Mon Sep 17 00:00:00 2001 From: 0xxgen1 <0xxgen@solend.fi> Date: Fri, 23 Aug 2024 12:40:39 +0100 Subject: [PATCH 06/14] test function: burn_ctokens_for_testing --- contracts/sources/reserve.move | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/contracts/sources/reserve.move b/contracts/sources/reserve.move index 2e11bb2..26898f0 100644 --- a/contracts/sources/reserve.move +++ b/contracts/sources/reserve.move @@ -802,6 +802,21 @@ module suilend::reserve { price_identifier::from_byte_vec(v) } + #[test_only] + public fun burn_ctokens_for_testing( + reserve: &mut Reserve

, + ctokens: Balance> + ) { + reserve.ctoken_supply = reserve.ctoken_supply - balance::value(&ctokens); + + let balances: &mut Balances = dynamic_field::borrow_mut( + &mut reserve.id, + BalanceKey {} + ); + + balance::decrease_supply(&mut balances.ctoken_supply, ctokens); + } + #[test] fun test_accessors() { use suilend::test_usdc::{TEST_USDC}; From 0207bb098aaee417ab280df9c8b8ab39157c6ff4 Mon Sep 17 00:00:00 2001 From: 0xxgen1 <0xxgen@solend.fi> Date: Fri, 23 Aug 2024 12:48:20 +0100 Subject: [PATCH 07/14] reserves_mut_for_testing --- contracts/sources/lending_market.move | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/contracts/sources/lending_market.move b/contracts/sources/lending_market.move index 955e327..945c6fb 100644 --- a/contracts/sources/lending_market.move +++ b/contracts/sources/lending_market.move @@ -1038,6 +1038,11 @@ module suilend::lending_market { object::delete(id); } + #[test_only] + public fun reserves_mut_for_testing

(lending_market: &mut LendingMarket

): &mut vector> { + &mut lending_market.reserves + } + #[test_only] use sui::test_scenario::{Self, Scenario}; From dbc8798b460b2853e62c0afe3d0d7024b5e3a9be Mon Sep 17 00:00:00 2001 From: 0xxgen1 <0xxgen@solend.fi> Date: Tue, 17 Dec 2024 23:36:10 +0000 Subject: [PATCH 08/14] move dir --- contracts/{ => suilend}/Move.beta.toml | 0 contracts/{ => suilend}/Move.lock | 0 contracts/{ => suilend}/Move.mainnet.toml | 0 contracts/{ => suilend}/Move.toml | 0 contracts/{ => suilend}/sources/cell.move | 0 contracts/{ => suilend}/sources/decimal.move | 0 contracts/{ => suilend}/sources/lending_market.move | 0 contracts/{ => suilend}/sources/lending_market_registry.move | 0 contracts/{ => suilend}/sources/liquidity_mining.move | 0 contracts/{ => suilend}/sources/obligation.move | 0 contracts/{ => suilend}/sources/oracles.move | 0 contracts/{ => suilend}/sources/rate_limiter.move | 0 contracts/{ => suilend}/sources/reserve.move | 0 contracts/{ => suilend}/sources/reserve_config.move | 0 contracts/{ => suilend}/sources/suilend.code-workspace | 0 contracts/{ => suilend}/sources/suilend.move | 0 contracts/{ => suilend}/tests/mock_pyth.move | 0 contracts/{ => suilend}/tests/test_coins.move | 0 18 files changed, 0 insertions(+), 0 deletions(-) rename contracts/{ => suilend}/Move.beta.toml (100%) rename contracts/{ => suilend}/Move.lock (100%) rename contracts/{ => suilend}/Move.mainnet.toml (100%) rename contracts/{ => suilend}/Move.toml (100%) rename contracts/{ => suilend}/sources/cell.move (100%) rename contracts/{ => suilend}/sources/decimal.move (100%) rename contracts/{ => suilend}/sources/lending_market.move (100%) rename contracts/{ => suilend}/sources/lending_market_registry.move (100%) rename contracts/{ => suilend}/sources/liquidity_mining.move (100%) rename contracts/{ => suilend}/sources/obligation.move (100%) rename contracts/{ => suilend}/sources/oracles.move (100%) rename contracts/{ => suilend}/sources/rate_limiter.move (100%) rename contracts/{ => suilend}/sources/reserve.move (100%) rename contracts/{ => suilend}/sources/reserve_config.move (100%) rename contracts/{ => suilend}/sources/suilend.code-workspace (100%) rename contracts/{ => suilend}/sources/suilend.move (100%) rename contracts/{ => suilend}/tests/mock_pyth.move (100%) rename contracts/{ => suilend}/tests/test_coins.move (100%) 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 100% rename from contracts/sources/lending_market.move rename to contracts/suilend/sources/lending_market.move 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 100% rename from contracts/sources/obligation.move rename to contracts/suilend/sources/obligation.move 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 From a4adc012c50da6a314bc7b81a5dc27716e1981d6 Mon Sep 17 00:00:00 2001 From: 0xxgen1 <0xxgen@solend.fi> Date: Tue, 17 Dec 2024 23:45:00 +0000 Subject: [PATCH 09/14] expose compound_interest --- contracts/suilend/sources/lending_market.move | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/contracts/suilend/sources/lending_market.move b/contracts/suilend/sources/lending_market.move index dac6230..7001f4c 100644 --- a/contracts/suilend/sources/lending_market.move +++ b/contracts/suilend/sources/lending_market.move @@ -364,6 +364,18 @@ module suilend::lending_market { fulfill_liquidity_request(lending_market, reserve_array_index, liquidity_request, ctx) } + // Compount interest for reserve of type T + public fun compound_interest( + lending_market: &mut LendingMarket

, + reserve_array_index: u64, + clock: &Clock, + ) { + let reserve = vector::borrow_mut(&mut lending_market.reserves, reserve_array_index); + assert!(reserve::coin_type(reserve) == type_name::get(), EWrongType); + + reserve.compound_interest(clock); + } + /// Borrow tokens of type T. A fee is charged. public fun borrow_request( lending_market: &mut LendingMarket

, From 68e74c6687a1e0b86120c438d1a357378dbc2656 Mon Sep 17 00:00:00 2001 From: 0xxgen1 <0xxgen@solend.fi> Date: Wed, 18 Dec 2024 16:14:26 +0000 Subject: [PATCH 10/14] reexpose setup function --- contracts/suilend/tests/lending_market_tests.move | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/suilend/tests/lending_market_tests.move b/contracts/suilend/tests/lending_market_tests.move index 872f19f..10c3cb0 100644 --- a/contracts/suilend/tests/lending_market_tests.move +++ b/contracts/suilend/tests/lending_market_tests.move @@ -115,7 +115,7 @@ module suilend::lending_market_tests { } #[test_only] - fun setup(mut reserve_args: Bag, scenario: &mut Scenario): State { + public fun setup(mut reserve_args: Bag, scenario: &mut Scenario): State { use suilend::test_usdc::{TEST_USDC}; use suilend::test_sui::{TEST_SUI}; use suilend::reserve_config::{Self}; From b49c26643b9a844212e804ce4d62e7d1ce93f40c Mon Sep 17 00:00:00 2001 From: 0xxgen1 <0xxgen@solend.fi> Date: Wed, 18 Dec 2024 16:18:37 +0000 Subject: [PATCH 11/14] destruct state test fun --- .../suilend/tests/lending_market_tests.move | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/contracts/suilend/tests/lending_market_tests.move b/contracts/suilend/tests/lending_market_tests.move index 10c3cb0..d1ca1ea 100644 --- a/contracts/suilend/tests/lending_market_tests.move +++ b/contracts/suilend/tests/lending_market_tests.move @@ -266,6 +266,25 @@ module suilend::lending_market_tests { } } + #[test_only] + public fun destruct_state(state: State): ( + Clock, + LendingMarketOwnerCap, + LendingMarket, + PriceState, + Bag + ) { + let State { + clock, + owner_cap, + lending_market, + prices, + type_to_index, + } = state; + + (clock, owner_cap, lending_market, prices, type_to_index) + } + #[test] public fun test_deposit() { From 797d5f055b5d85df53390f330134632f2784d65f Mon Sep 17 00:00:00 2001 From: 0xxgen1 <0xxgen@solend.fi> Date: Wed, 18 Dec 2024 16:26:10 +0000 Subject: [PATCH 12/14] new_args test function --- contracts/suilend/tests/lending_market_tests.move | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/contracts/suilend/tests/lending_market_tests.move b/contracts/suilend/tests/lending_market_tests.move index d1ca1ea..f6e4aa5 100644 --- a/contracts/suilend/tests/lending_market_tests.move +++ b/contracts/suilend/tests/lending_market_tests.move @@ -266,6 +266,14 @@ module suilend::lending_market_tests { } } + #[test_only] + public fun new_args(initial_deposit: u64, config: ReserveConfig): ReserveArgs { + ReserveArgs { + config, + initial_deposit, + } + } + #[test_only] public fun destruct_state(state: State): ( Clock, From 7e816e1eccb75a1ce1081d5d2f819053972b236b Mon Sep 17 00:00:00 2001 From: 0xxgen1 <0xxgen@solend.fi> Date: Thu, 19 Dec 2024 12:31:42 +0000 Subject: [PATCH 13/14] reserve.interest_last_update_timestamp_s() view function --- contracts/suilend/sources/reserve.move | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/contracts/suilend/sources/reserve.move b/contracts/suilend/sources/reserve.move index 5739f23..b0b90ce 100644 --- a/contracts/suilend/sources/reserve.move +++ b/contracts/suilend/sources/reserve.move @@ -909,6 +909,12 @@ module suilend::reserve { reserve.price_identifier = price_identifier; } + // === View Functions === + + public fun interest_last_update_timestamp_s

(reserve: &Reserve

): u64 { + reserve.interest_last_update_timestamp_s + } + // === Private Functions === fun log_reserve_data

(reserve: &Reserve

){ let available_amount_decimal = decimal::from(reserve.available_amount); From 2559b71aac9b6bfbe35990099806e32f3b03d32d Mon Sep 17 00:00:00 2001 From: 0xxgen1 <0xxgen@solend.fi> Date: Thu, 23 Jan 2025 21:59:24 +0000 Subject: [PATCH 14/14] Review items --- contracts/suilend/sources/lending_market.move | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/contracts/suilend/sources/lending_market.move b/contracts/suilend/sources/lending_market.move index b30f70f..36720a5 100644 --- a/contracts/suilend/sources/lending_market.move +++ b/contracts/suilend/sources/lending_market.move @@ -382,14 +382,14 @@ module suilend::lending_market { fulfill_liquidity_request(lending_market, reserve_array_index, liquidity_request, ctx) } - // Compount interest for reserve of type T - public fun compound_interest( + // Compound interest for reserve of type T + public fun compound_interest

( lending_market: &mut LendingMarket

, reserve_array_index: u64, clock: &Clock, ) { + 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); reserve.compound_interest(clock); } @@ -753,7 +753,7 @@ module suilend::lending_market { ); } } - + /* Staker operations */ public fun init_staker( lending_market: &mut LendingMarket

,