Skip to main content
A market is a HubAssetKey:
The controller uses that coordinate for user-facing market operations. The pool uses the same coordinate for Params(HubAssetKey) and State(HubAssetKey). There is one central pool contract. Listing an asset creates rows in that pool; it does not deploy a per-asset pool.

Activation model

There is no market-status enum. Whether a market is usable is the product of four independent conditions: Spokes decide whether an account can use a hub asset as collateral or as debt. Each listing also carries three independent halt flags: Prices always come from the price aggregator. Spokes do not override oracles.

Listing sequence

Listing is governance-controlled, each step a timelocked AdminOperation:
  1. Deploy the central pool once if it does not exist (DeployPool(hash)).
  2. Create the market on that pool (CreateLiquidityPool), which writes Params/State(HubAssetKey).
  3. Configure the asset’s oracle (ConfigureAssetOracle).
  4. Add or edit SpokeAsset(spoke_id, HubAssetKey) rows for each spoke that can use the asset (AddAssetToSpoke / EditAssetInSpoke).
deploy_pool(wasm_hash) is protocol-wide. It is not called per market, and there is no token-approval step.

Pool parameters

MarketParamsRaw lives in pool Params(HubAssetKey) storage.
There are no _ray or _bps suffixes on the wire, and no supply or borrow cap fields on the market. Caps are per-spoke, in SpokeAssetConfig.
Governance updates pool parameters through the timelock. The pool syncs accrued interest under the old parameters before applying new values.

Spoke parameters

SpokeAssetConfig lives in controller SpokeAsset(spoke_id, HubAssetKey) storage.

Configured values

Treat on-chain views as the source of truth. This page explains behaviour; it is not a live config dump. Read get_sync_data(hub_asset) from the pool for a market’s real parameters, and get_spoke_asset(spoke_id, hub_asset) from the controller for its risk listing. As a sense of scale, mainnet currently runs 30 markets across 3 hubs and 8 live spokes. Rate curves are not uniform: max_borrow_rate is 125% or 175% depending on the market, and the reserve factor ranges from 1,500 to 3,000 bps. See Live configuration and Risk parameters.

Next

Risk parameters

Units, ranges, and configured values for market and spoke risk parameters.

Accounts and risk

Account storage, spoke binding, health factor, and position limits.

Oracles

Reflector and RedStone sources, tolerance bands, and flow policies.

Controller ABI

Controller entrypoints for listing, configuration, and user flows.