Skip to content

Key Concepts

Rates

Fixed Rate

The per-second interest rate a borrower locks in for the duration of their position. Stored as fixedRatePerSec in 1e18 precision. This rate is set by the backer's order and determines how much fixed interest accrues on the notional over time.

Cap Rate

The maximum fixed rate allowed in a pool (capRatePerSec). Serves two purposes: it caps the variable rate exposure for backers (any actual interest above the cap rate is ignored in spread calculations), and it determines the reserve requirement for each series.

Tick Size

The minimum rate increment for a pool (tickSizePerSec). All fixed rates within a pool must be exact multiples of the tick size. This controls the granularity of available series, for example, a tick size equivalent to 0.25% APY means rates can only be set at 0.25%, 0.50%, 0.75%, etc.

Variable Rate

The actual interest rate accruing on the borrower's position in the underlying lending protocol. Not stored on-chain but derived during rebalance as the change in debt between settlements.

Spread

The difference between the capped actual interest and the fixed interest for a given settlement period: cappedActual - fixedInterest. A positive spread means the variable rate exceeded the fixed rate (backer pays borrower). A negative spread means the fixed rate exceeded the variable rate (borrower pays backer).

Structure

Pool

The top-level container that defines the trading parameters for a specific lending market. A pool is uniquely identified by a hash of its parameters: loan token, yield token, adapter, market ID, cap rate, min rate, tick size, bond window, expiry, and min notional. All positions within a pool share the same tenor and cap rate.

Series

A rate tier within a pool. Each series has a unique fixedRatePerSec and a derived reservePerFRT (equal to capRatePerSec - fixedRatePerSec). Series are created on demand when an order is filled at a new rate. Each series has its own reserve balance, FRT supply, and VRT supply.

Notional

The principal amount of the borrower's underlying debt that is covered by the fixed rate agreement. Derived on-chain as frtBalance / timeRemaining. As FRT decays over time, the notional remains stable (the FRT amount at mint is principal * timeRemaining).

Tenor / Expiry

The pool-wide expiration timestamp (expiry). All positions in a pool share the same expiry. The tenor is the total duration from pool creation (or position open) to expiry. After expiry, no new positions can be opened and all FRT has fully decayed.

Tokens

FRT (Fixed Rate Token)

An ERC-6909 token minted to the borrower's PositionManager when a position opens. The initial amount is principal * timeRemaining. FRT decays linearly with each rebalance, representing the borrower's diminishing future interest obligation. FRT balance divided by time remaining recovers the notional. FRT can be traded on the secondary market via FRTSellOrder.

VRT (Variable Rate Token)

An ERC-6909 token minted to the backer when a position opens. Represents the backer's proportional claim on a series reserve pool. Backers redeem VRT for their share of the series reserve via redeemVRT. The redemption value fluctuates based on accumulated spreads, meaning VRT can be worth more or less than the original deposit.

Yield Token

An optional ERC-4626 vault token configured on a pool (yieldToken). When set, all pool deposits (backer reserves and borrower bonds) are automatically deposited into the yield vault to earn additional yield while held. Backers can also deposit yield token shares directly instead of the underlying loan token.

Participants

Borrower

A user with an existing variable-rate lending position who wants to lock in a fixed rate. The borrower operates through a PositionManager contract that holds their protocol position via delegatecall. The borrower posts a bond, pays fixed interest, and receives the spread when variable rates exceed the fixed rate.

Backer

A user who provides rate stability by taking the other side of a fixed rate agreement. The backer deposits reserve funds into the series pool and receives VRT. If the variable rate stays below the fixed rate, the backer profits from the accumulated spread. If the variable rate exceeds the fixed rate, the backer's reserve is drawn down.

Keeper

Any third party that calls rebalance() or liquidatePosition() to maintain protocol health. Keepers are incentivized by liquidation fees that escalate the longer a position goes unsettled past the bond window threshold.

Mechanics

Bond

A deposit posted by the borrower when opening a position. Sized to cover fixed interest over the bond window plus a 10% buffer: interest(principal, fixedRatePerSec, bondWindow) * 1.1. The bond ensures the borrower has skin in the game for timely settlement. It is returned in full at expiry, minus any exit fee for early closure or keeper fee for liquidation.

Bond Window

The maximum allowed time between rebalances. Calculated as 10% of the time-to-expiry at position open, clamped between 1 day minimum and 2 weeks maximum. If 90% of the bond window elapses without a rebalance, the position becomes liquidatable.

Reserve

The backer's deposit into a series pool. Sized to cover the worst-case scenario where the variable rate equals the cap rate for the remaining tenor. Calculated using a Taylor series expansion: principal * reservePerFRT * duration (with second and third order terms). The reserve is the pool from which the backer pays the spread when variable rates exceed the fixed rate.

Leverage

A backer's reserve only needs to cover the gap between the cap rate and the fixed rate over the remaining tenor. This means a small amount of capital backs a much larger notional. The formula is notional = capital / ((capRate - fixedRate) * tenor). For example, $1 backing a position at 8% fixed with a 10% cap and 1 month tenor covers $1 / ((10% - 8%) * 1/12) = $600 in notional. As the remaining duration shrinks, the same capital backs even more notional since the worst-case exposure decreases.

Rebalance

The settlement process that reconciles the difference between fixed and variable interest since the last settlement. Computes the spread, transfers funds between the borrower and the series reserve, burns decayed FRT, and updates the last-settle timestamp. Can be called by anyone.

Settlement

Synonym for rebalance. The applySettlement function on the factory receives the computed spread from the PositionManager and updates the series reserve balance accordingly.

Liquidation

The process of closing a position that has not been rebalanced within the allowed bond window. Any keeper can trigger liquidation after 90% of the bond window has elapsed. The bond is distributed: fixed interest owed goes to backers, a keeper fee goes to the liquidator, and any remainder is returned to the borrower. A PositionManager also self-liquidates if the underlying lending position becomes unhealthy.

Orderbook

Backer Order

A signed off-chain message from a backer specifying: pool, fixed rate, principal range (min/max), whether partial fills are allowed, and an expiry timestamp. Verified on-chain via EIP-712 signature. Can be filled by a borrower or relayer by submitting it to the OrderBook contract.

Borrower Order

A co-signature from the borrower authorizing a specific fill against a backer order. Required when a relayer (not the borrower themselves) submits the fill transaction. References the backer order hash, the borrower's PositionManager, and the fill principal.

RFQ / Auction

A request-for-quote flow where the borrower solicits competitive quotes from backers. Backers respond with signed AuctionQuote messages that include an rfqId (linking the quote to the request), a quoteExpiry (short-lived to prevent stale fills), and a positionExpiry. The borrower selects and submits the best quote on-chain.

Partial Fill

When a backer order has allowPartialFill set to true, multiple borrowers can fill portions of the order up to maxPrincipal. The OrderBook tracks cumulative filled amounts per order hash. The backer's nonce is consumed only when the order is fully filled.

FRT Trade

A secondary market transaction where a borrower sells their FRT to another borrower's PositionManager. Both parties sign an FRTSellOrder specifying the FRT amount, payment token, and price. The OrderBook transfers FRT and proportional bond between PositionManagers. A trade fee (configurable in basis points) is collected.

Infrastructure

Adapter

A smart contract that implements IProtocolAdapter to interface with a specific lending protocol (Morpho, Aave, Silo, etc.). Adapters standardize operations like supplyCollateral, withdrawCollateral, borrow, repay, getCurrentDebt, and getHealthFactor. Called via delegatecall from PositionManagers so the PM holds the protocol position directly.

Position Manager

A minimal proxy (ERC-1167 clone) contract created per borrower per pool. Holds the borrower's debt position on the underlying protocol via delegatecall to the adapter. Manages rebalance, settlement, and interaction with the pool. The borrower can call forward() to interact with external contracts through the PM.

Factory

The InterestSwapFactory contract that manages pool creation, series creation, position opening/closing, settlement accounting, bond escrow, VRT redemption, and liquidation. Holds all pool funds (or yield vault shares). The central hub that coordinates between PositionManagers, the OrderBook, and the token contract.

Speculative Adapter

A special adapter (FakeAdapter) used for positions where the borrower does not have an actual lending position. Enables speculative trading on interest rates without requiring an underlying protocol position.

Interest Exchange Protocol