Skip to main content
XOXNO uses a hub & spoke model on one central pool: the pool holds protocol liquidity and accounting; spokes apply isolated risk to user accounts.
These docs describe protocol behavior. They are not financial, legal, or investment advice. Using smart contracts involves risk of loss. Listed assets, risk parameters, oracles, and upgrades are subject to on-chain admin configuration and may change.
Users interact only with the controller. The pool is owner-gated (controller only). Do not call pool mutators from an integration.

Liquidity hub and pool

The central pool is the liquidity source. Markets are rows in that pool, keyed by HubAssetKey { hub_id, asset } — not separate pool contracts per token.
  • Centralizes cash, indexes, scaled supply, and scaled debt
  • Isolates markets by hub + asset (same token on two hubs = two markets)
  • Enforces the rate curve and the utilization ceiling per market
Supply and borrow caps are not set here. They live on the spoke listing, so two spokes can cap the same market differently.

Hub assets

A hub asset is a SAC / SEP-41 token listed under a hub_id. It is the shared liquidity spokes borrow from and supply to.

Spokes

Spokes are risk modules. Each lending account binds to one spoke at creation, and that binding never changes. The spoke sets per-asset LTV, liquidation settings, supply and borrow caps, and the three halt flags (paused, frozen, no_seize).
  • Local risk and halt controls
  • Independent per-spoke liquidation curve
  • Add or configure spokes without splitting the pool

Markets (reserves)

A market is how a hub asset is supplied and borrowed under a spoke. Pool parameters (rate curve, caps, flash-loan flags) live on HubAssetKey. Spoke asset rows decide whether that listing is collateral, borrowable, and under which LTV.

Interest rates

Borrow and supply rates follow a utilization curve on each hub asset. Utilization is borrowed liquidity over total liquidity. Rates use RAY units per millisecond; balances are scaled shares that grow with indexes. Displayed rates are variable and not a forecast of future returns.

User positions

A position is what one account has supplied and borrowed on its spoke.
  • Supply — deposit into the pool through the controller; may accrue supply interest; can back borrowing when the spoke allows collateral
  • Borrow — draw from the pool against eligible collateral; debt accrues until repaid
  • Health factor — liquidation-threshold-weighted collateral divided by total debt, in WAD. Below 1 WAD the account is liquidatable. A debt-free account reports i128::MAX

Liquidations

When health factor drops below 1 WAD, liquidators repay debt and seize collateral under the spoke’s liquidation curve (target health factor and variable bonus). Dust and bad-debt paths are protocol-defined; see Liquidations.
  1. Liquidity model — hub, spokes, markets
  2. Getting started — first supply/borrow in the app
  3. Soroban quickstart — controller calls for integrators