> For the complete documentation index, see [llms.txt](https://naviprotocol.gitbook.io/navi-protocol-developer-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://naviprotocol.gitbook.io/navi-protocol-developer-docs/smart-contract-overview/release-history/navi-lending-protocol-upgrade-announcement-2025-11-17.md).

# NAVI Lending Protocol Upgrade Announcement (2025/11/17)

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:**

  ```typescript
  0xee0041239b89564ce870a7dec5ddc5d114367ab94a1137e90aa0633cb76518e0
  ```

***

#### **Guideline Overview**

**NAVI Lending Core Smart Contract Upgrade**

1. Our package\_id will be updated due to a smart contract upgrade; the old package\_id will be deprecated immediately.
2. <mark style="color:red;">Breaking Change</mark>: For **SUI-asset** operations: **borrow, withdraw, flashloan, liquidation** need a **new interface** immediately after the upgrade.
3. 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.
4. No changes needed: **deposit, repay, claim\_reward** operations work as before
5. No changes needed: **getter\&view** functions work as before

#### **Upgrade Overview**

This NAVI upgrade covers two core areas:

1. **Launch of the Fund Manager Module**
   * Supplied SUI assets will be automatically staked via vSUI to increase protocol-wide yields.
2. **Flexible Borrow Fee Structure**
   * Allows assigning a special borrowing fee rate for users.

***

#### **Partner Notice & Action Checklist**

* **Interface/Compatibility Changes:**
  1. **Package Id will be upgraded**
  2. **Module** names and paths remain unchanged.
  3. **Function** **call** may introduce **extra arguments**—please review the updated API documents.
  4. 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:**
  1. 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.
  2. 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:

<mark style="color:red;">Firstly, please import the</mark> <mark style="color:red;"></mark><mark style="color:red;">**SuiSystemState**</mark> <mark style="color:red;"></mark><mark style="color:red;">to your module:</mark>

```move
use sui_system::sui_system::{SuiSystemState};
```

**1. entry\_withdraw (incentive\_v3 module)**

**Old (Legacy):**

```move
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:**

<pre class="language-move"><code class="lang-move">public entry fun entry_withdraw_v2&#x3C;CoinType>(
    clock: &#x26;Clock,
    oracle: &#x26;PriceOracle,
    storage: &#x26;mut Storage,
    pool: &#x26;mut Pool&#x3C;CoinType>,
    asset: u8,
    amount: u64,
    incentive_v2: &#x26;mut IncentiveV2,
    incentive_v3: &#x26;mut Incentive,
<strong>    system_state: &#x26;mut SuiSystemState,
</strong>    ctx: &#x26;mut TxContext
)
</code></pre>

**Key change:**

* Added system\_state as a required on-chain argument.

***

**2. entry\_borrow (incentive\_v3 module)**

**Old (Legacy):**

```move
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:**

<pre class="language-move"><code class="lang-move">public entry fun entry_borrow_v2&#x3C;CoinType>(
    clock: &#x26;Clock,
    oracle: &#x26;PriceOracle,
    storage: &#x26;mut Storage,
    pool: &#x26;mut Pool&#x3C;CoinType>,
    asset: u8,
    amount: u64,
    incentive_v2: &#x26;mut IncentiveV2,
    incentive_v3: &#x26;mut Incentive,
<strong>    system_state: &#x26;mut SuiSystemState,
</strong>    ctx: &#x26;mut TxContext
)
</code></pre>

**Key change:**

* Added system\_state as a required on-chain argument.

***

**3. entry\_liquidation (incentive\_v3 module)**

**Old (Legacy):**

```move
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:**

<pre class="language-move"><code class="lang-move">public entry fun entry_liquidation_v2&#x3C;DebtCoinType, CollateralCoinType>(
    clock: &#x26;Clock,
    oracle: &#x26;PriceOracle,
    storage: &#x26;mut Storage,
    debt_asset: u8,
    debt_pool: &#x26;mut Pool&#x3C;DebtCoinType>,
    debt_coin: Coin&#x3C;DebtCoinType>,
    collateral_asset: u8,
    collateral_pool: &#x26;mut Pool&#x3C;CollateralCoinType>,
    liquidate_user: address,
    liquidate_amount: u64,
    incentive_v2: &#x26;mut IncentiveV2,
    incentive_v3: &#x26;mut Incentive,
<strong>    system_state: &#x26;mut SuiSystemState,
</strong>    ctx: &#x26;mut TxContext
)
</code></pre>

**Key change:**

* Added system\_state as a required on-chain argument.

***

**4. withdraw\_with\_account\_cap (incentive\_v3 module)**

**Old (Legacy):**

```move
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:**

<pre class="language-move"><code class="lang-move">public(friend) fun withdraw_with_account_cap_v2&#x3C;CoinType>(
    clock: &#x26;Clock,
    oracle: &#x26;PriceOracle,
    storage: &#x26;mut Storage,
    pool: &#x26;mut Pool&#x3C;CoinType>,
    asset: u8,
    amount: u64,
    account_cap: &#x26;AccountCap,
<strong>    system_state: &#x26;mut SuiSystemState,
</strong><strong>    ctx: &#x26;mut TxContext
</strong>): Balance&#x3C;CoinType>
</code></pre>

**Key change:**

* v2 adds both system\_state and ctx arguments.

***

**5. withdraw (incentive\_v3 module)**

**Old (Legacy):**

```move
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:**

<pre class="language-move"><code class="lang-move">public fun withdraw_v2&#x3C;CoinType>(
    clock: &#x26;Clock,
    oracle: &#x26;PriceOracle,
    storage: &#x26;mut Storage,
    pool: &#x26;mut Pool&#x3C;CoinType>,
    asset: u8,
    amount: u64,
    incentive_v2: &#x26;mut IncentiveV2,
    incentive_v3: &#x26;mut Incentive,
<strong>    system_state: &#x26;mut SuiSystemState,
</strong>    ctx: &#x26;mut TxContext
): Balance&#x3C;CoinType>
</code></pre>

**Key change:**

* v2 adds system\_state argument for advanced on-chain support.

***

**6. borrow (incentive\_v3 module)**

**Old (Legacy):**

```move
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:**

<pre class="language-move"><code class="lang-move">public fun borrow_v2&#x3C;CoinType>(
    clock: &#x26;Clock,
    oracle: &#x26;PriceOracle,
    storage: &#x26;mut Storage,
    pool: &#x26;mut Pool&#x3C;CoinType>,
    asset: u8,
    amount: u64,
    incentive_v2: &#x26;mut IncentiveV2,
    incentive_v3: &#x26;mut Incentive,
<strong>    system_state: &#x26;mut SuiSystemState,
</strong>    ctx: &#x26;mut TxContext
): Balance&#x3C;CoinType>
</code></pre>

**Key change:**

* v2 adds system\_state as a required on-chain argument.

***

**7. borrow\_with\_account\_cap (incentive\_v3 module)**

**Old (Legacy):**

```move
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:**

<pre class="language-move"><code class="lang-move">public fun borrow_with_account_cap_v2&#x3C;CoinType>(
    clock: &#x26;Clock,
    oracle: &#x26;PriceOracle,
    storage: &#x26;mut Storage,
    pool: &#x26;mut Pool&#x3C;CoinType>,
    asset: u8,
    amount: u64,
    incentive_v2: &#x26;mut IncentiveV2,
    incentive_v3: &#x26;mut Incentive,
    account_cap: &#x26;AccountCap,
<strong>    system_state: &#x26;mut SuiSystemState,
</strong><strong>    ctx: &#x26;mut TxContext
</strong>): Balance&#x3C;CoinType>
</code></pre>

**Key change:**

* v2 adds both system\_state and ctx arguments.

***

**8. liquidation (incentive\_v3 module)**

**Old (Legacy):**

```move
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:**

<pre class="language-move"><code class="lang-move">public fun liquidation_v2&#x3C;DebtCoinType, CollateralCoinType>(
    clock: &#x26;Clock,
    oracle: &#x26;PriceOracle,
    storage: &#x26;mut Storage,
    debt_asset: u8,
    debt_pool: &#x26;mut Pool&#x3C;DebtCoinType>,
    debt_balance: Balance&#x3C;DebtCoinType>,
    collateral_asset: u8,
    collateral_pool: &#x26;mut Pool&#x3C;CollateralCoinType>,
    liquidate_user: address,
    incentive_v2: &#x26;mut IncentiveV2,
    incentive_v3: &#x26;mut Incentive,
<strong>    system_state: &#x26;mut SuiSystemState,
</strong>    ctx: &#x26;mut TxContext
): (Balance&#x3C;CollateralCoinType>, Balance&#x3C;DebtCoinType>)
</code></pre>

**Key change:**

* v2 adds system\_state as a required on-chain argument.

***

**9. flash\_loan\_with\_ctx (lending module)**

**Old (Legacy):**

```move
public fun flash_loan_with_ctx<CoinType>(
    config: &FlashLoanConfig,
    pool: &mut Pool<CoinType>,
    amount: u64,
    ctx: &mut TxContext
): (Balance<CoinType>, FlashLoanReceipt<CoinType>)
```

**New:**

<pre class="language-move"><code class="lang-move">public fun flash_loan_with_ctx_v2&#x3C;CoinType>(
    config: &#x26;FlashLoanConfig,
    pool: &#x26;mut Pool&#x3C;CoinType>,
    amount: u64,
<strong>    system_state: &#x26;mut SuiSystemState,
</strong>    ctx: &#x26;mut TxContext
): (Balance&#x3C;CoinType>, FlashLoanReceipt&#x3C;CoinType>)
</code></pre>

**Key change:**

* v2 adds system\_state as a required on-chain argument.

***

**10. flash\_loan\_with\_account\_cap (lending module)**

**Old (Legacy):**

```move
public fun flash_loan_with_account_cap<CoinType>(
    config: &FlashLoanConfig,
    pool: &mut Pool<CoinType>,
    amount: u64,
    account_cap: &AccountCap
): (Balance<CoinType>, FlashLoanReceipt<CoinType>)
```

**New:**

<pre class="language-move"><code class="lang-move">public fun flash_loan_with_account_cap_v2&#x3C;CoinType>(
    config: &#x26;FlashLoanConfig,
    pool: &#x26;mut Pool&#x3C;CoinType>,
    amount: u64,
    account_cap: &#x26;AccountCap,
<strong>    system_state: &#x26;mut SuiSystemState,
</strong><strong>    ctx: &#x26;mut TxContext
</strong>): (Balance&#x3C;CoinType>, FlashLoanReceipt&#x3C;CoinType>)
</code></pre>

**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 <mark style="color:red;">\*\_v2</mark> 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**
