Skip to content

Concepts

This glossary defines key terms used throughout the Alula documentation. Each term links to the relevant page for deeper coverage.

ObligationKey

An ObligationKey combines a user's address with an optional 32-byte seed to identify a specific obligation (position) in a market. The seed distinguishes obligation types: None creates a standard obligation that can both supply and borrow; Some(earn_seed) creates an earn-only obligation restricted to deposits (no borrowing); Some(pair_seed) creates a pair obligation for composed strategies. All user-facing functions accept an ObligationKey, not a plain address.

jToken

A supply share token representing a user's deposit in a pool. When you deposit assets, you receive jTokens proportional to your share of the pool's total supply. jTokens automatically accrue interest — their exchange rate against the underlying token grows over time as borrower interest accrues. Deposited assets represented by jTokens are also counted as collateral for borrowing purposes.

dToken

A debt share token representing a user's borrow from a pool. When you borrow assets, the protocol mints dTokens proportional to your share of the pool's total debt. As interest accrues, each dToken represents an increasing amount of underlying debt.

Health Factor (HF)

The ratio of total collateral value to total borrowed value for an obligation: HF = Vc / Vb. A health factor above 1 means the obligation is solvent. This is a simple unweighted ratio — liquidation eligibility is determined by the Liquidation Health Factor (LHF). See Health Factor for the full formula.

Liquidation Health Factor (LHF)

A weighted version of the health factor that accounts for each asset's close LTV and liability factor: LHF = (Σ Vc_i × cLTV_i) / (Σ Vb_j × LF_j). When LHF drops below 1, the obligation becomes eligible for liquidation. See Health Factor for details.

Open LTV

The maximum loan-to-value ratio allowed when initiating or increasing a borrow. Configured per pool as open_ltv_bps (e.g., 7000 = 70%). All new borrows and withdrawals are capped so that the obligation's effective LTV does not exceed the open LTV of the relevant pool. See Configurable Parameters.

Close LTV

The LTV threshold at which an obligation becomes eligible for liquidation. Configured per pool as close_ltv_bps (e.g., 8000 = 80%). Because close LTV is always ≥ open LTV, normal user actions cannot directly create a liquidatable position — liquidation eligibility arises from price movements or accrued interest. See Health Factor.

Liability Factor

A risk weight (between 1× and 2×) applied to the value of borrowed assets when computing health and borrowing capacity. Configured per pool as liability_factor_bps (10,000 = 1×, 20,000 = 2×). A higher liability factor means the debt counts as "riskier," reducing borrowing capacity and making the position easier to liquidate.

Utilization

The fraction of a pool's total supply that is currently borrowed: U = total_borrowed / total_supply. Higher utilization means less available liquidity, triggers higher borrow rates via the interest rate curve, and may activate withdrawal throttles.

Borrowing Capacity

The remaining USD value an obligation can borrow without violating risk limits. Calculated as: BC = (Σ max(Vc_i − Vmin, 0) × oLTV_i) − (Σ Vb_j × LF_j). All borrows and collateral withdrawals are capped so capacity remains ≥ 0. See Health Factor.

Time-lock

The queue → wait → apply pattern used for all governance changes in Alula. Pool config updates use queue_in_pool_setapply_pool_set; market config updates use queue_in_market_updateapply_market_update. The wait duration (update_in_queue_period) is set at market construction and cannot be changed, giving users advance notice of any parameter changes.

Pool Status

A 4-bit bitfield on each pool that independently controls which operations are allowed: deposit (bit 0), borrow (bit 1), add collateral (bit 2), and flash loan (bit 3). The market admin can toggle individual bits via update_pool_status without affecting other pools or the market-wide status.

Market Status

One of 7 operational states for the entire market: Active (0), BorrowFrozen (1), BorrowFrozenByAdmin (2), DepositFrozen (3), DepositFrozenByAdmin (4), Frozen (5), FrozenByAdmin (6). The *ByAdmin variants are hard locks that only the market admin can set or clear — the Insurance Fund cannot override them.

Take Rate

The percentage of borrower interest diverted as protocol revenue before it reaches lenders. Configured per pool as take_rate_bps. The accrued take rate accumulates in the market contract and is distributed to configured beneficiaries when distribute_pool_fees is called. Supply APY is always shown net of the take rate.

Insurance Fund

A per-market safety buffer contract that absorbs residual losses after liquidations. Funded primarily by the take rate and configured portions of operation fees. Covers bad debt via a two-phase flow: issue_cover_bad_debtclaim_cover_bad_debt_results. Can also freeze the market in emergencies via fund_update_market_status. See Insurance Fund.

Flash Loan

An uncollateralized loan that must be repaid (with a fee) within the same transaction. Used for arbitrage, liquidations, collateral swaps, or building leveraged positions. See User Operations — Flash Loans.

Batch Operations

The submit_requests_batch function lets users compose up to 10 operation types (Deposit, Borrow, Withdraw, Repay, AddCollateral, RemoveCollateral, FlashBorrow, SwapExactTokens, SwapForExactTokens, Liquidate) in a single atomic transaction. This enables advanced strategies like leveraged positions (flash borrow → swap → deposit → borrow) without intermediate approvals.

Reactive Interest Rate Modifier

A dynamic multiplier on each pool's borrow rate that adjusts toward a target utilization. When utilization exceeds the target, the modifier increases (raising rates to discourage borrowing); when utilization is below the target, it decreases (lowering rates to attract borrowers). Bounded between 0.1× and 10×. See Interest Rates.