Lending / Yield·EVM
Notional
Fixed-rate, fixed-term lending and borrowing protocol. Notional V3 adds a prime variable-rate money market on top of fixed-rate fCash markets, plus leveraged vaults that combine the two.
- 01fixed-rate borrowing
- 02fixed-rate lending (fCash)
- 03leveraged yield vaults
- 04predictable DeFi cash flows
- 05stablecoin term loans
- pnpm add viem
- git clone https://github.com/notional-finance/contracts-v3
| Variable | Scope | Description |
|---|---|---|
| NEXT_PUBLIC_NOTIONAL_PROXY | Client | NotionalProxy router address (e.g. Ethereum mainnet: 0x6e7058c91F85E0F6db4fc9da2CA41241f5e4263f). |
Integrate Notional V3. The single entry point is the `NotionalProxy` router (a Diamond/Beacon over many action contracts). Lend or borrow at fixed rates by submitting `BatchAction[]` via `batchBalanceAndTradeAction(account, actions)` where each action carries `BalanceActionWithTrades { actionType, currencyId, depositActionAmount, withdrawAmountInternalPrecision, withdrawEntireCashBalance, redeemToUnderlying, trades[] }`. Trade types include `Lend`, `Borrow`, `AddLiquidity`, `RemoveLiquidity`, `PurchaseNTokenResidual`. For variable-rate prime cash, use `depositUnderlyingToken(account, currencyId, amount)` and `withdraw(currencyId, amountInternal, redeemToUnderlying)`. fCash positions are tokenized as ERC-1155 with a maturity timestamp; nTokens are ERC-20 LP shares earning fees + NOTE rewards. Read state with `getAccount`, `getfCashLendFromDeposit`, `getfCashBorrowFromPrincipal`, and `getActiveMarkets(currencyId)`.
- ⚑Fixed-rate positions are tied to a `maturity` timestamp — at expiry, fCash auto-settles into prime cash at the on-chain settlement rate; users MUST roll or withdraw or yield drops to the variable rate.
- ⚑Trading near maturity is dangerous — implied rates become extremely sensitive to tiny notional moves; UIs should warn when `block.timestamp` is within ~7 days of `maturity`.
- ⚑All amounts at the contract layer are in 8-decimal `INTERNAL_TOKEN_PRECISION`, not the underlying token's decimals — use `convertToInternal` / `convertToExternal` helpers or you will deposit/withdraw the wrong amount by 10^x.
- ⚑Liquidations cascade across fCash + prime cash collateral — a borrower can be partially liquidated in one currency to restore another's collateral ratio; account health is computed in ETH terms via the rate oracle.
- ⚑Leveraged vaults are isolated: each vault has its own collateral, debt currency, and exit conditions. A vault deprecation / shutdown forces all users out at the snapshot price.
- ⚑nToken redemptions can be illiquid — if a market lacks fCash liquidity, `nTokenRedeem` may be partial and leave residual fCash you have to claim separately.
- ⚑NOTE incentives accrue per-block per-currency; you must call `nTokenClaimIncentives()` to materialize them — they are not auto-compounded into nToken value.