> For the complete documentation index, see [llms.txt](https://docs.radiant.capital/radiant/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.radiant.capital/radiant/protocol-sunset/technical-reference.md).

# Technical Reference

### Radiant V2 User Sunset Reference

This document captures what a user or stakeholder needs to know going forward.

#### 1. What stops, what stays

**What stops**

* Lending pool — `borrow` parameter is set to 1, which effectively disables it operationally.
* RDNT no longer flows into the `ChefIncentivesController`. With nothing to distribute, `claim()` and `claimAll()` continue to function but return zero. No on-chain transaction is required to disable emissions — the absence of RDNT in CIC is sufficient. `stopEmissionsFor` and similar levers are not needed.

**What stays operational**

* Lending pool — `deposit`, `withdraw`, `repay`, and liquidations all function normally.
* Reserve factor accrual — protocol fees continue accruing to reserves and are forwarded to MFD via `MiddleFeeDistribution` on user interactions.
* `RadiantOFT` cross-chain transfers — bridging continues.
* `MultiFeeDistribution` — reward streams already in the contract continue draining over `rewardsDuration`. Existing vesting positions continue to vest over `vestDuration`. Existing dLP locks continue to release on schedule.
* `Compounder`, `BountyManager`, `EligibilityDataProvider` — remain callable. Without new RDNT emissions, relock bounties yield nothing and eligibility gating becomes a no-op for reward purposes.
* `Leverager`, `LockZap`, `StargateBorrow` — remain callable.
* Oracles — Chainlink adapters continue to read live feeds. `AaveOracle.setAssetSources` is an owner-gated lever if a feed is ever delisted.

**Tail liabilities (drain naturally)**

* RDNT already deposited into MFD's reward stream — drains over `rewardsDuration`.
* Outstanding vesting RDNT per locker — drains over `vestDuration`.
* Bounty contract balances — remain claimable while `BountyManager` is active.

Quantities are dynamic; query on-chain when needed.

#### 2. User exits

* **Lending pool** — `LendingPool.withdraw(asset, amount, to)`, or redeem aTokens.
* **MFD locks** — `withdrawExpiredLocksFor(user)` releases any locks past their unlock date with no penalty. `exit(claimRewards)` claims everything immediately, applying the early-exit penalty burn on locks not yet expired.
* **MFD vesting** — vested RDNT becomes claimable through MFD as `vestDuration` elapses per position.
* **dLP** — exit the underlying LP directly via Balancer (mainnet / arbitrum), Uniswap (bsc), or Velodrome / UniV3 (base).
* **RDNT cross-chain** — `RadiantOFT.sendFrom(...)` continues to move RDNT between deployed chains.

#### 3. Instructions for exiting positions via contracts

> Your Funds Remain Safe

Radiant's smart contracts continue to operate on-chain even if the Radiant website is unavailable.

Your deposits, collateral, rewards, and borrowing positions remain under your control and can always be managed directly through the blockchain.

If the Radiant app is offline, you can get an overview of your assets via debank.com.

This guide explains how to access and close your positions using trusted block explorers such as Etherscan, Arbiscan, BscScan, and BaseScan.

> Important: You do not need coding experience to complete these actions.

***

**Before you begin**

You will need:

✅ The **wallet** that owns the position

✅ A small amount of **gas tokens** (ETH or BNB)

✅ The **address of the token** you will be transacting (they are different for each blockchain)

✅ The appropriate Radiant <mark style="color:blue;">contract</mark> (or use links provided)

**Official contract addresses**

For reference, all verified Radiant contract addresses are maintained here, under the [CONTRACTS & SECURITY](https://docs.radiant.capital/radiant/contracts-and-security/arbitrum-contracts) section. However, <mark style="color:blue;">contract links</mark> are provided in the ▶️ how-to sections for your convenience.

> Caution: Always verify an address on the explorer's Read Contract tab (e.g. owner(), name()) before signing any transaction.

Based on your **position type**, **follow** these ▶️ how-to sections below.

<details>

<summary>▶️ <strong>Core markets</strong></summary>

**✅ Repaying loans and withdrawing deposits**

1. <mark style="color:blue;">**Open**</mark> the <mark style="color:blue;">LendingPool</mark> contract on [Ethereum](https://etherscan.io/address/0xA950974f64aA33f27F6C5e017eEE93BF7588ED07#writeProxyContract), [Arbitrum](https://arbiscan.io/address/0xE23B4AE3624fB6f7cDEF29bC8EAD912f1Ede6886#writeProxyContract), [BNB Chain](https://bscscan.com/address/0xCcf31D54C3A94f67b8cEFF8DD771DE5846dA032c#writeProxyContract), or [Base](https://basescan.org/address/0x30798cFe2CCa822321ceed7e6085e633aAbC492F#writeProxyContract).  *<mark style="color:$info;">Note:  If you open the block explorer and enter the contract address yourself, you’ll also need to select “Contract” and “Write as Proxy” (or “Write Contract” in some cases).</mark>*
2. <mark style="color:blue;">**Connect**</mark> **Wallet**
3. Expand the <mark style="color:blue;">**repay**</mark> function and enter required info&#x20;

* asset:  <mark style="color:blue;">Token address</mark> you’re repaying
* amount: Use the appropriate number of decimals (examples below)
* 1 USDC (6) = 1000000
* 1 ETH (18) = 1000000000000000000
* For the **entire/max balance**, enter this as the amount, verbatim: <mark style="color:blue;">115792089237316195423570985008687907853269984665640564039457584007913129639935</mark>
* rateMode: <mark style="color:blue;">2</mark>
* onBehalfOf:  Your <mark style="color:blue;">wallet address</mark>

4. Expand the **withdraw** function and enter <mark style="color:blue;">asset</mark>, <mark style="color:blue;">amount</mark>, your <mark style="color:blue;">wallet address</mark> to <mark style="color:blue;">**return**</mark> your collateral/deposit back to your wallet.

**✅ Withdrawing unlocked dLP (no penalty)**

1. **Open the MultiFeeDistribution contract on** [**Ethereum**](https://etherscan.io/address/0x28E395a54a64284DBA39652921Cd99924f4e3797#writeProxyContract)**,** [**Arbitrum**](https://arbiscan.io/address/0x76ba3eC5f5adBf1C58c91e86502232317EeA72dE#writeProxyContract)**,** [**BNB Chain**](https://bscscan.com/address/0x4FD9F7C5ca0829A656561486baDA018505dfcB5E#writeProxyContract)**, or** [**Base**](https://basescan.org/address/0xD87F8a52a91680c993ece968B281bf92505A3741#writeProxyContract)**.**
2. **Connect Wallet.**
3. **Expand the withdrawExpiredLocksForWithOptions function and enter your wallet address (ignore the other options).**

**✅ Withdraw RDNT**

**RDNT rewards** vest over 90 days inside the <mark style="color:blue;">MultiFeeDistribution</mark> contract on [Ethereum](https://etherscan.io/address/0x28E395a54a64284DBA39652921Cd99924f4e3797#writeProxyContract), [Arbitrum](https://arbiscan.io/address/0x76ba3eC5f5adBf1C58c91e86502232317EeA72dE#writeProxyContract), [BNB Chain](https://bscscan.com/address/0x4FD9F7C5ca0829A656561486baDA018505dfcB5E#writeProxyContract), or [Base](https://basescan.org/address/0xD87F8a52a91680c993ece968B281bf92505A3741#writeProxyContract). Select from 3 scenarios:

* **No penalty**:  Enter amount<mark style="color:$primary;">\*</mark> in the **withdraw** function for vested RDNT. You can <mark style="color:$primary;">check</mark> the <mark style="color:$primary;">eligible amount\*</mark> by <mark style="color:$primary;">querying</mark> against your <mark style="color:$primary;">wallet address</mark> in the  **withdrawableBalance** function on the contract’s **Read as Proxy** tab (ensure wallet is connected).&#x20;
* **Exiting** each position **early** (50 % penalty): In the **individualEarlyExit** function, fill out <mark style="color:blue;">claimRewards</mark> (set to <mark style="color:blue;">**True**</mark> to also pull **platform revenue/rewards**) and <mark style="color:blue;">unlockTime</mark><mark style="color:$primary;">\*</mark>. You can <mark style="color:$primary;">check</mark> each position’s <mark style="color:$primary;">unlockTime\*</mark> from the **earnedBalances** function on the contract’s **Read as Proxy** tab (ensure wallet is connected).&#x20;
* **Exit everything** (50 % penalty on un-vested): Enter <mark style="color:blue;">**true**</mark> for <mark style="color:blue;">claimRewards</mark> in the exit function to claim all dLP locking rewards and RDNT (100% for fully vested; 50% for unvested)

**✅ Claiming dLP locking rewards/platform revenue**

1. <mark style="color:blue;">**Open**</mark> the <mark style="color:blue;">MultiFeeDistribution</mark> contract on [Ethereum](https://etherscan.io/address/0x28E395a54a64284DBA39652921Cd99924f4e3797#writeProxyContract), [Arbitrum](https://arbiscan.io/address/0x76ba3eC5f5adBf1C58c91e86502232317EeA72dE#writeProxyContract), [BNB Chain](https://bscscan.com/address/0x4FD9F7C5ca0829A656561486baDA018505dfcB5E#writeProxyContract), or [Base](https://basescan.org/address/0xD87F8a52a91680c993ece968B281bf92505A3741#writeProxyContract).&#x20;
2. <mark style="color:blue;">**Connect**</mark>**&#x20;Wallet**
3. Expand the **getAllRewards** function and select **Write**

</details>

<details>

<summary>▶️ <strong>RIZ v1 (isolated AAVE-style pools)</strong></summary>

**Every RIZ v1 market** has its **own** <mark style="color:blue;">RizLendingPool</mark> contract. The interface is identical to Core Markets - the only thing that changes is the pool address.

**✅** Repaying loans and withdrawing deposits

1. <mark style="color:blue;">**Open**</mark> the appropriate  <mark style="color:blue;">RizLendingPool</mark> contract from the **table below**.  *<mark style="color:$info;">Note:  If you open the block explorer and enter the contract address yourself, you’ll also need to select “Contract” and “Write as Proxy” (or “Write Contract” in some cases)</mark>*.

<table data-header-hidden><thead><tr><th width="169.9090576171875" align="center"></th><th width="143.09088134765625" align="center"></th><th width="123" align="center"></th><th width="189.83642578125" align="center"></th></tr></thead><tbody><tr><td align="center">arbiscan.io</td><td align="center">bscscan.com</td><td align="center">etherscan.io</td><td align="center">basescan.io</td></tr><tr><td align="center"><a href="https://arbiscan.io/address/0x32F9460386A842E43E3e09fA92Bb77412Aabf42B#writeProxyContract">ZRO/USDC</a></td><td align="center"><a href="https://bscscan.com/address/0x8E4660b30d09C94Ea77795727c55d69799a9Abd1#writeProxyContract">CAKE/USDT</a></td><td align="center"><br></td><td align="center"><a href="https://basescan.org/address/0x260000459E0D1C46ADE027e552ADc911E0742b50#writeProxyContract">AERO/USDC</a></td></tr><tr><td align="center"><a href="https://arbiscan.io/address/0x0C19836CcD6eAcb9E21693e1f27bde10218b6701#writeProxyContract">RDNT/USDC</a></td><td align="center"><a href="https://bscscan.com/address/0xc4a09Dd3DcC7D95e0bD525eff7f2968514dE23b2#writeProxyContract">slisBNB/WBNB</a></td><td align="center"><br></td><td align="center"><a href="https://basescan.org/address/0x17042A220b138b203f67fDF62fA7aDD8cB16ccAa#writeProxyContract">ZRO/USDC</a></td></tr><tr><td align="center"><a href="https://arbiscan.io/address/0xf3007F6d241EbF00140b94D92849B5ACf0D36133#writeProxyContract">rsETH/WETH</a></td><td align="center"><del><mark style="color:$info;">FLOKI/USDT</mark></del></td><td align="center"><br></td><td align="center"><a href="https://basescan.org/address/0xD111c7DA1eBDf4D2fF2d234A61a806b03187CEC9#writeProxyContract">MAVIA/USDC</a></td></tr><tr><td align="center"><a href="https://arbiscan.io/address/0x3fEc9583827431F622A4b188b6c57CfFE8655b8e#writeProxyContract">ezETH/WETH</a></td><td align="center"><br></td><td align="center"><br></td><td align="center"><a href="https://basescan.org/address/0x520411c27a950B731e0D4D5350E0CAEa51b1426F#writeProxyContract">wSuperOETH/WETH</a></td></tr><tr><td align="center"><a href="https://arbiscan.io/address/0x6EF47f768aeAe173712Fe6a662666B1DBB08c66F#writeProxyContract">PT-wstETH/WETH</a></td><td align="center"><br></td><td align="center"><br></td><td align="center"><del><mark style="color:$info;">BRETT/USDC</mark></del></td></tr><tr><td align="center"><a href="https://arbiscan.io/address/0x6B712099ab3Eb192F11E4964b35De8BAA7b15299#writeProxyContract">GMX/USDC</a></td><td align="center"><br></td><td align="center"><br></td><td align="center"><br></td></tr><tr><td align="center"><a href="https://arbiscan.io/address/0x6B392CeBb1C7f0D93D8CF99a25A21C118b347a16#writeProxyContract">gmARB/USDC</a></td><td align="center"><br></td><td align="center"><br></td><td align="center"><br></td></tr><tr><td align="center"><del><mark style="color:$info;">USDC/USDY</mark></del></td><td align="center"><br></td><td align="center"><br></td><td align="center"><br></td></tr></tbody></table>

2. <mark style="color:blue;">**Connect**</mark>**&#x20;Wallet**
3. Expand the **repay** function and enter required info&#x20;

* asset:  Token address you’re repaying
* amount: Use the appropriate number of decimals (examples below)
  * 1 USDC (6) = <mark style="color:blue;">1000000</mark>
  * 1 ETH (18) = <mark style="color:blue;">1000000000000000000</mark>
  * For the entire/max balance, enter this as the amount, verbatim: <mark style="color:blue;">115792089237316195423570985008687907853269984665640564039457584007913129639935</mark>
* rateMode: <mark style="color:blue;">2</mark>
* onBehalfOf:  Your <mark style="color:blue;">wallet address</mark><br>

4. Expand the **withdraw** function and enter <mark style="color:blue;">asset</mark>, <mark style="color:blue;">amount</mark>, your <mark style="color:blue;">wallet address</mark> to <mark style="color:blue;">**return**</mark> your collateral/deposit back to your wallet.

</details>

<details>

<summary>▶️ <strong>RIZ v2 (single Mmlti-market contract, Morpho-style)</strong></summary>

**RIZ v2** uses **one** <mark style="color:blue;">RadiantLendingMarket</mark> contract **per chain**. Every **market** lives inside it, **identified** by a **MarketParams tuple**.

**✅ Repaying loans and withdrawing deposits**

1. <mark style="color:blue;">**Open**</mark> the <mark style="color:blue;">RadiantLendingMarket</mark> contract on [Ethereum](https://etherscan.io/address/0x6365632c91e53B7f96F53722aba1e17Aadf973aA#events), [Arbitrum](https://arbiscan.io/address/0x41e5585496c6e43d9fD548B5F88fC2d90D67aE38#events), [BNB Chain](https://bscscan.com/address/0xcdc0E0A3685311a46FFb67f85Cd1ee717e8E645d#events), or [Base](https://basescan.org/address/0x5D64926bEF21BD772e7d6F89AED16d8c1A93dD66#events).  *<mark style="color:$info;">Note: These contract links will take you to the Event tab, where you can go to</mark> <mark style="color:$info;"></mark><mark style="color:$info;">**step 3**</mark> <mark style="color:$info;"></mark><mark style="color:$info;">below to read your position.</mark>*
2. <mark style="color:blue;">**Connect**</mark> your **wallet**
3. <mark style="color:blue;">**Read**</mark> your **position**

You need three (3) numbers (supplyShares, borrowShares, collateral) before you can exit cleanly.

* [ ] <mark style="color:blue;">**Find**</mark> your <mark style="color:blue;">market's ID</mark> - easiest via the explorer's **Events** tab on <mark style="color:blue;">RadiantLendingMarket</mark>: <mark style="color:blue;">**filter**</mark> for a <mark style="color:blue;">Supply</mark>, <mark style="color:blue;">Borrow</mark>, or <mark style="color:blue;">SupplyCollateral</mark> event from your **wallet**; the **first indexed topic** is the <mark style="color:blue;">position ID</mark>.
* [ ] Switch from **Event** tab to **Contract** tab, then select **Read Contract** and&#x20;
  * [ ] <mark style="color:blue;">**expand**</mark> the **position** row to enter your position: <mark style="color:blue;">position ID</mark> & <mark style="color:blue;">wallet address</mark>
  * [ ] <mark style="color:blue;">**Select**</mark>**&#x20;Query** and note all <mark style="color:blue;">three (3) returned values</mark>.<br>

4. <mark style="color:blue;">**Switch**</mark> back to **Write Contract** tab.
   1. <mark style="color:blue;">**repay**</mark>: <mark style="color:blue;">marketParams</mark> = <mark style="color:blue;">tuple</mark>&#x20;
      1. **assets** = <mark style="color:blue;">0</mark>
      2. **shares** = your <mark style="color:blue;">borrowShares</mark>
      3. **onBehalf** = your <mark style="color:blue;">wallet address</mark>
      4. **data** = <mark style="color:blue;">0x</mark>. (Using **shares** clears your debt to the last wei; using **assets** leaves dust.)
   2. **withdrawCollateral**: <mark style="color:blue;">marketParams</mark> = <mark style="color:blue;">tuple</mark>
      1. assets = <mark style="color:blue;">your collateral</mark>
      2. onBehalf = your <mark style="color:blue;">wallet address</mark>
      3. receiver = your <mark style="color:blue;">wallet address</mark>
   3. If you also lent into the market, **withdraw**: <mark style="color:blue;">marketParams</mark> = <mark style="color:blue;">tuple</mark>
      1. &#x20;**assets** = <mark style="color:blue;">0</mark>
      2. **shares** = your <mark style="color:blue;">supplyShares</mark>
      3. **onBehalf** = your <mark style="color:blue;">wallet address</mark>
      4. **receiver** = your <mark style="color:blue;">wallet address</mark>. (Reverts with INSUFFICIENT\_LIQUIDITY if the market is fully utilized - wait for borrowers to repay or withdraw a smaller amount.)

</details>

<details>

<summary><strong>Need help?</strong></summary>

* **Reverts** on **repay**? Check (a) the asset is the correct underlying, (b) you used 2 for rateMode (V2 Core / RIZ v1), (c) you approved enough of the underlying token first.
* **RIZ v2** **reverts** with **MARKET\_NOT\_CREATED**? A single typo in the MarketParams tuple changes the id and points to a non-existent market - verify all six fields.
* **RIZ v1 / V2 vault redeem reverts**? Vault may be in emergency shutdown - call emergencyWithdraw instead.

Every action above is permissionless and yours to execute. The Radiant smart contracts are immutable infrastructure - even with the front-end down, your funds are always recoverable directly on-chain.

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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://docs.radiant.capital/radiant/protocol-sunset/technical-reference.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.
