Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
build/
.DS_Store
354 changes: 268 additions & 86 deletions lending_core/Move.lock

Large diffs are not rendered by default.

15 changes: 8 additions & 7 deletions lending_core/Move.toml
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
[package]
name = "lending_core"
version = "0.0.1"
published-at = "0x81c408448d0d57b3e371ea94de1d40bf852784d3e225de1e74acab3e8395c18f"

[dependencies.Sui]
[dependencies.sui_system]
git = "https://github.com/MystenLabs/sui.git"
subdir = "crates/sui-framework/packages/sui-framework"
subdir = "crates/sui-framework/packages/sui-system"
rev = "mainnet"
override = true

[dependencies.liquid_staking]
git = "https://github.com/naviprotocol/navi-smart-contracts.git"
subdir = "volo_liquid_staking"
rev = "main"

[dependencies.math]
local = "../math"
Expand All @@ -16,7 +21,3 @@ local = "../oracle"

[dependencies.utils]
local = "../utils"

[addresses]
sui = "0x2"
lending_core = "0xd899cf7d2b5db716bd2cf55599fb0d5ee38a3061e7b6bb6eebf73fa5bc4c81ca"
9 changes: 9 additions & 0 deletions lending_core/Published.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Generated by Move
# This file contains metadata about published versions of this package in different environments
# This file SHOULD be committed to source control

[published.mainnet]
chain-id = "35834a8a"
published-at = "0x512f28261c1a293f49416d8885b8d5d32bde6dd68a99a0be36fe42b248e6833a"
original-id = "0xd899cf7d2b5db716bd2cf55599fb0d5ee38a3061e7b6bb6eebf73fa5bc4c81ca"
version = 26
27 changes: 25 additions & 2 deletions lending_core/sources/account.move
Original file line number Diff line number Diff line change
@@ -1,11 +1,34 @@
module lending_core::account {

use sui::object::{UID};
use std::ascii::{String};

#[allow(unused_field)]
struct AccountCap has key, store {
id: UID,
owner: address
}

// Display Field For Account Cap
struct AccountField has store {
account_name: String,
account_description: String,
last_update_time: String,
market_balance: String,
}

// ==== dynamic field keys ====
struct AccountFieldKey has copy, drop, store {}

native public fun account_owner(cap: &AccountCap): address;
}

native public fun set_account_name(cap: &mut AccountCap, name: String);

native public fun set_account_description(cap: &mut AccountCap, description: String);

native public fun set_last_update_time(cap: &mut AccountCap, last_update_time: String);

native public fun set_market_balance(cap: &mut AccountCap, balance: String);

native public fun get_account_info(cap: &AccountCap): (String, String, String, String);

}
22 changes: 18 additions & 4 deletions lending_core/sources/calculator.move
Original file line number Diff line number Diff line change
@@ -1,19 +1,33 @@
module lending_core::calculator {

use sui::clock::{Clock};
use oracle::oracle::{PriceOracle};
use lending_core::storage::{Storage};
use oracle::oracle::{Self, PriceOracle};
use lending_core::storage::{Self, Storage};

native public fun caculate_utilization(storage: &mut Storage, asset: u8): u256;

native public fun calculate_borrow_rate(storage: &mut Storage, asset: u8): u256;

native public fun calculate_supply_rate(storage: &mut Storage, asset: u8, borrow_rate: u256): u256;


/**
* Title: Calculating compound interest
* Input(current_timestamp): 1685029315718
* Input(last_update_timestamp): 1685029255718
* Input(rate): 6.3 * 1e27
*/
native public fun calculate_compounded_interest(timestamp_difference: u256, rate: u256): u256;

/**
* Title: Calculating liner interest
* Input(current_timestamp): 1685029315718
* Input(last_update_timestamp): 1685029255718
* Input(rate): 6.3 * 1e27
*/
native public fun calculate_linear_interest(timestamp_difference: u256, rate: u256): u256;

native public fun calculate_value(clock: &Clock, oracle: &PriceOracle, amount: u256, oracle_id: u8): u256;

native public fun calculate_amount(clock: &Clock, oracle: &PriceOracle, value: u256, oracle_id: u8): u256;

}
18 changes: 16 additions & 2 deletions lending_core/sources/constants.move
Original file line number Diff line number Diff line change
@@ -1,10 +1,24 @@
module lending_core::constants {

public fun seconds_per_year(): u256 {60 * 60 * 24 * 365}

// incentive v2 & v3
public fun option_type_supply(): u8 {1}

public fun option_type_withdraw(): u8 {2}

public fun option_type_borrow(): u8 {3}

public fun option_type_repay(): u8 {4}

// storage
public fun max_number_of_reserves(): u8 {255}
public fun version(): u64 {6}

// version
public fun version(): u64 {16}

public fun FlashLoanMultiple(): u64 {10000}
}

public fun percentage_benchmark(): u64 {10000}

}
15 changes: 9 additions & 6 deletions lending_core/sources/dynamic_calculator.move
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
module lending_core::dynamic_calculator {
use sui::clock::{Clock};

use sui::address;
use sui::clock::{Self, Clock};
use oracle::oracle::{PriceOracle};
use lending_core::pool::{ Pool};
use lending_core::storage::{Storage};
use lending_core::pool::{Self, Pool};
use lending_core::storage::{Self, Storage};

native public fun dynamic_health_factor<CoinType>(clock: &Clock, storage: &mut Storage, oracle: &PriceOracle, pool: &mut Pool<CoinType>, user: address, asset: u8, estimate_supply_value: u64, estimate_borrow_value: u64, is_increase: bool): u256;

Expand All @@ -24,9 +26,10 @@ module lending_core::dynamic_calculator {

native public fun dynamic_calculate_apy<CoinType>(clock: &Clock, storage: &mut Storage, pool: &mut Pool<CoinType>, asset: u8, estimate_supply_value: u64, estimate_borrow_value: u64, is_increase: bool): (u256, u256);

native public fun dynamic_calculate_borrow_rate( clock: &Clock, storage: &mut Storage, asset: u8, estimate_supply_value: u256, estimate_borrow_value: u256, is_increase: bool): u256;
native public fun dynamic_calculate_borrow_rate(clock: &Clock, storage: &mut Storage, asset: u8, estimate_supply_value: u256, estimate_borrow_value: u256, is_increase: bool): u256;

native public fun dynamic_calculate_supply_rate(clock: &Clock, storage: &mut Storage, asset: u8, borrow_rate: u256, estimate_supply_value: u256, estimate_borrow_value: u256, is_increase: bool): u256;

native public fun dynamic_caculate_utilization(clock: &Clock, storage: &mut Storage, asset: u8, estimate_supply_value: u256, estimate_borrow_value: u256, is_increase: bool): u256;
}

}
56 changes: 54 additions & 2 deletions lending_core/sources/error.move
Original file line number Diff line number Diff line change
@@ -1,25 +1,77 @@
module lending_core::error {

public fun incorrect_version(): u64 {1400}

public fun not_available_version(): u64 {1401}

public fun paused(): u64 {1500}

public fun not_owner(): u64 {1501}

public fun invalid_price(): u64 {1502}

public fun invalid_amount(): u64 {1503}

public fun invalid_pool(): u64 {1504}

public fun invalid_coin_type(): u64 {1505}

public fun insufficient_balance(): u64 {1506}

public fun invalid_value(): u64 {1507}

public fun invalid_function_call(): u64 {1508}

public fun user_is_unhealthy(): u64 {1600}

public fun user_have_no_collateral(): u64 {1601}

public fun user_have_no_loan(): u64 {1602}

public fun ltv_is_not_enough(): u64 {1603}

public fun exceeded_maximum_deposit_cap(): u64 {1604}

public fun exceeded_maximum_borrow_cap(): u64 {1605}

public fun user_is_healthy(): u64 {1606}

public fun not_liquidatable(): u64 {1607}

public fun no_more_reserves_allowed(): u64 {1700}

public fun duplicate_reserve(): u64 {1701}

public fun non_single_value(): u64 {1801}

public fun invalid_duration_time(): u64 {1802}

public fun required_parent_account_cap(): u64 {1900}

public fun reserve_not_found(): u64 {2000}

public fun duplicate_config(): u64 {2001}
public fun invalid_user(): u64 {2001}
}

public fun invalid_user(): u64 {2002}

public fun pool_not_found(): u64 {2100}

public fun price_feed_not_found(): u64 {2101}

public fun rule_not_found(): u64 {2102}

public fun invalid_funds(): u64 {2103}

public fun invalid_option(): u64 {2104}

public fun duplicate_emode(): u64 {3000}

public fun ineligible_for_emode(): u64 {3001}

public fun not_in_emode(): u64 {3002}

public fun emode_is_not_active(): u64 {3003}

public fun unmatched_market_id(): u64 {3100}

}
Loading