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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://naviprotocol.gitbook.io/navi-protocol-developer-docs/smart-contract-overview/release-history/navi-lending-protocol-upgrade-announcement-2025-11-17.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
