NAVI Lending Protocol Upgrade Announcement (2025/11/10)
We are excited to announce that NAVI Lending will soon undergo a major upgrade! This update is designed to further enhance capital utilization, security, and flexibility, bringing a smoother and smarter DeFi experience to both ecosystem partners and end users.
Launch Schedule
Estimated Time:
PST: 2025/11/17 4:00 PM
EST: 2025/11/17 7:00 PM
SGT: 2025/11/18 08:00 AM
Package Id:
Waiting for deployment
Guideline Overview
NAVI Lending Core Smart Contract Upgrade
Our package_id will be updated due to a smart contract upgrade; the old package_id will be deprecated immediately.
Breaking Change: For SUI-asset operations: borrow, withdraw, flashloan, liquidation need a new interface immediately after the upgrade.
For Non-SUI-Asset operations, borrow, withdraw, flashloan, liquidation are still functional for 30 days grace period. After 30 days, the legacy interface will be deprecated.
No changes needed: deposit, repay, claim_reward operations work as before
No changes needed: getter&view functions work as before
Upgrade Overview
This NAVI upgrade covers two core areas:
Launch of the Fund Manager Module
Supplied SUI assets will be automatically staked via vSUI to increase protocol-wide yields.
Flexible Borrow Fee Structure
Allows assigning a special borrowing fee rate for users.
Partner Notice & Action Checklist
Interface/Compatibility Changes:
Package Id will be upgraded
Module names and paths remain unchanged.
Function call may introduce extra arguments—please review the updated API documents.
Interface migration requirements:
If you withdraw/borrow/liquidate/flashloan with a non-SUI assets (asset id != 0), you can still use the original interface. But it's highly recommended to use the new v2 interface. The legacy interface will be deprecated in the future.
If you withdraw/borrow/liquidate/flashloan with SUI asset (asset id = 0), you need to use the new v2 interface.
If you deposit/repay/claim_reward, you don't need to change the interface
Migration Tips:
Update your packageId in your dependencies. Detailed guides for different user types:
For Smart Contract Builders:
You will need to update the NAVI lending_core package_id in your Move.toml.
If you use GitHub/MVR as a dependency, we will update the link after the upgrade.
Use the new interfaces in your smart contract.
For Frontend/Backend Builders:
Use the new package id in your move call.
Use the new interfaces in your move call.
If you use the MVR as a reference, we will update the link after the upgrade.
Pause any automated scripts before the maintenance; resume after verifying all integration points with the new contracts.
【For Developers】Major User-facing Interface Changes
Below are all key user entry-points for fund operations. Partners are strongly encouraged to migrate to these new interfaces for the best compatibility and feature support:
Firstly, please import the SuiSystemState to your module:
use sui_system::sui_system::{SuiSystemState};1. entry_withdraw (incentive_v3 module)
Old (Legacy):
public entry fun entry_withdraw<CoinType>(
clock: &Clock,
oracle: &PriceOracle,
storage: &mut Storage,
pool: &mut Pool<CoinType>,
asset: u8,
amount: u64,
incentive_v2: &mut IncentiveV2,
incentive_v3: &mut Incentive,
ctx: &mut TxContext
)New:
public entry fun entry_withdraw_v2<CoinType>(
clock: &Clock,
oracle: &PriceOracle,
storage: &mut Storage,
pool: &mut Pool<CoinType>,
asset: u8,
amount: u64,
incentive_v2: &mut IncentiveV2,
incentive_v3: &mut Incentive,
system_state: &mut SuiSystemState,
ctx: &mut TxContext
)Key change:
Added system_state as a required on-chain argument.
2. entry_borrow (incentive_v3 module)
Old (Legacy):
public entry fun entry_borrow<CoinType>(
clock: &Clock,
oracle: &PriceOracle,
storage: &mut Storage,
pool: &mut Pool<CoinType>,
asset: u8,
amount: u64,
incentive_v2: &mut IncentiveV2,
incentive_v3: &mut Incentive,
ctx: &mut TxContext
)New:
public entry fun entry_borrow_v2<CoinType>(
clock: &Clock,
oracle: &PriceOracle,
storage: &mut Storage,
pool: &mut Pool<CoinType>,
asset: u8,
amount: u64,
incentive_v2: &mut IncentiveV2,
incentive_v3: &mut Incentive,
system_state: &mut SuiSystemState,
ctx: &mut TxContext
)Key change:
Added system_state as a required on-chain argument.
3. entry_liquidation (incentive_v3 module)
Old (Legacy):
public entry fun entry_liquidation<DebtCoinType, CollateralCoinType>(
clock: &Clock,
oracle: &PriceOracle,
storage: &mut Storage,
debt_asset: u8,
debt_pool: &mut Pool<DebtCoinType>,
debt_coin: Coin<DebtCoinType>,
collateral_asset: u8,
collateral_pool: &mut Pool<CollateralCoinType>,
liquidate_user: address,
liquidate_amount: u64,
incentive_v2: &mut IncentiveV2,
incentive_v3: &mut Incentive,
ctx: &mut TxContext
)New:
public entry fun entry_liquidation_v2<DebtCoinType, CollateralCoinType>(
clock: &Clock,
oracle: &PriceOracle,
storage: &mut Storage,
debt_asset: u8,
debt_pool: &mut Pool<DebtCoinType>,
debt_coin: Coin<DebtCoinType>,
collateral_asset: u8,
collateral_pool: &mut Pool<CollateralCoinType>,
liquidate_user: address,
liquidate_amount: u64,
incentive_v2: &mut IncentiveV2,
incentive_v3: &mut Incentive,
system_state: &mut SuiSystemState,
ctx: &mut TxContext
)Key change:
Added system_state as a required on-chain argument.
4. withdraw_with_account_cap (incentive_v3 module)
Old (Legacy):
public(friend) fun withdraw_with_account_cap<CoinType>(
clock: &Clock,
oracle: &PriceOracle,
storage: &mut Storage,
pool: &mut Pool<CoinType>,
asset: u8,
amount: u64,
account_cap: &AccountCap
): Balance<CoinType>New:
public(friend) fun withdraw_with_account_cap_v2<CoinType>(
clock: &Clock,
oracle: &PriceOracle,
storage: &mut Storage,
pool: &mut Pool<CoinType>,
asset: u8,
amount: u64,
account_cap: &AccountCap,
system_state: &mut SuiSystemState,
ctx: &mut TxContext
): Balance<CoinType>Key change:
v2 adds both system_state and ctx arguments.
5. withdraw (incentive_v3 module)
Old (Legacy):
public fun withdraw<CoinType>(
clock: &Clock,
oracle: &PriceOracle,
storage: &mut Storage,
pool: &mut Pool<CoinType>,
asset: u8,
amount: u64,
incentive_v2: &mut IncentiveV2,
incentive_v3: &mut Incentive,
ctx: &mut TxContext
): Balance<CoinType>New:
public fun withdraw_v2<CoinType>(
clock: &Clock,
oracle: &PriceOracle,
storage: &mut Storage,
pool: &mut Pool<CoinType>,
asset: u8,
amount: u64,
incentive_v2: &mut IncentiveV2,
incentive_v3: &mut Incentive,
system_state: &mut SuiSystemState,
ctx: &mut TxContext
): Balance<CoinType>Key change:
v2 adds system_state argument for advanced on-chain support.
6. borrow (incentive_v3 module)
Old (Legacy):
public fun borrow<CoinType>(
clock: &Clock,
oracle: &PriceOracle,
storage: &mut Storage,
pool: &mut Pool<CoinType>,
asset: u8,
amount: u64,
incentive_v2: &mut IncentiveV2,
incentive_v3: &mut Incentive,
ctx: &mut TxContext
): Balance<CoinType>New:
public fun borrow_v2<CoinType>(
clock: &Clock,
oracle: &PriceOracle,
storage: &mut Storage,
pool: &mut Pool<CoinType>,
asset: u8,
amount: u64,
incentive_v2: &mut IncentiveV2,
incentive_v3: &mut Incentive,
system_state: &mut SuiSystemState,
ctx: &mut TxContext
): Balance<CoinType>Key change:
v2 adds system_state as a required on-chain argument.
7. borrow_with_account_cap (incentive_v3 module)
Old (Legacy):
public fun borrow_with_account_cap<CoinType>(
clock: &Clock,
oracle: &PriceOracle,
storage: &mut Storage,
pool: &mut Pool<CoinType>,
asset: u8,
amount: u64,
incentive_v2: &mut IncentiveV2,
incentive_v3: &mut Incentive,
account_cap: &AccountCap
): Balance<CoinType>New:
public fun borrow_with_account_cap_v2<CoinType>(
clock: &Clock,
oracle: &PriceOracle,
storage: &mut Storage,
pool: &mut Pool<CoinType>,
asset: u8,
amount: u64,
incentive_v2: &mut IncentiveV2,
incentive_v3: &mut Incentive,
account_cap: &AccountCap,
system_state: &mut SuiSystemState,
ctx: &mut TxContext
): Balance<CoinType>Key change:
v2 adds both system_state and ctx arguments.
8. liquidation (incentive_v3 module)
Old (Legacy):
public fun liquidation<DebtCoinType, CollateralCoinType>(
clock: &Clock,
oracle: &PriceOracle,
storage: &mut Storage,
debt_asset: u8,
debt_pool: &mut Pool<DebtCoinType>,
debt_balance: Balance<DebtCoinType>,
collateral_asset: u8,
collateral_pool: &mut Pool<CollateralCoinType>,
liquidate_user: address,
incentive_v2: &mut IncentiveV2,
incentive_v3: &mut Incentive,
ctx: &mut TxContext
): (Balance<CollateralCoinType>, Balance<DebtCoinType>)New:
public fun liquidation_v2<DebtCoinType, CollateralCoinType>(
clock: &Clock,
oracle: &PriceOracle,
storage: &mut Storage,
debt_asset: u8,
debt_pool: &mut Pool<DebtCoinType>,
debt_balance: Balance<DebtCoinType>,
collateral_asset: u8,
collateral_pool: &mut Pool<CollateralCoinType>,
liquidate_user: address,
incentive_v2: &mut IncentiveV2,
incentive_v3: &mut Incentive,
system_state: &mut SuiSystemState,
ctx: &mut TxContext
): (Balance<CollateralCoinType>, Balance<DebtCoinType>)Key change:
v2 adds system_state as a required on-chain argument.
9. flash_loan_with_ctx (lending module)
Old (Legacy):
public fun flash_loan_with_ctx<CoinType>(
config: &FlashLoanConfig,
pool: &mut Pool<CoinType>,
amount: u64,
ctx: &mut TxContext
): (Balance<CoinType>, FlashLoanReceipt<CoinType>)New:
public fun flash_loan_with_ctx_v2<CoinType>(
config: &FlashLoanConfig,
pool: &mut Pool<CoinType>,
amount: u64,
system_state: &mut SuiSystemState,
ctx: &mut TxContext
): (Balance<CoinType>, FlashLoanReceipt<CoinType>)Key change:
v2 adds system_state as a required on-chain argument.
10. flash_loan_with_account_cap (lending module)
Old (Legacy):
public fun flash_loan_with_account_cap<CoinType>(
config: &FlashLoanConfig,
pool: &mut Pool<CoinType>,
amount: u64,
account_cap: &AccountCap
): (Balance<CoinType>, FlashLoanReceipt<CoinType>)New:
public fun flash_loan_with_account_cap_v2<CoinType>(
config: &FlashLoanConfig,
pool: &mut Pool<CoinType>,
amount: u64,
account_cap: &AccountCap,
system_state: &mut SuiSystemState,
ctx: &mut TxContext
): (Balance<CoinType>, FlashLoanReceipt<CoinType>)Key change:
v2 adds both system_state and ctx arguments.
Interface Upgrade Summary
All major fund operation APIs (withdraw, borrow, liquidation, flash loan) now have corresponding *_v2 entry points.
The updated function signatures feature a more complete argument list; all partner integrations should migrate to the new interfaces.
Legacy versions WILL NOT support new reward, liquidation, flexible fee, or protected mode features.
FAQ
Q1: Is this an upgrade or a brand-new package? A: This is an upgrade to the existing major package. Most module/method addresses will remain—watch for update notices.
Q2: Will borrow/liquidation interfaces remain usable? A: The legacy methods will still work for non-SUI asset operations, but migration to the new entry points is strongly recommended to enjoy all new features and maximum flexibility.
Q3: How will the staking yield be used? A: The staking yield generated from the fund manager module will be used to incentivize users in the future.
Q4: Is the upgrade audited? A: Yes. The upgrade is fully audited by OtterSec and Movebit.
——NAVI Protocol Team
Last updated