Authority
Maintenance requires caller authorization, but no privileged controller role.
The caller can be a wallet or contract. Upgrades and other sensitive proposals
also require the governance owner to hold
PROPOSER.
Governance ABI lists the immediate
tightening calls and the operations that require a timelock.
Spokes
Spokes define account risk policy. An account binds permanently to one spoke. Spoke asset configuration includes:- Collateral eligibility and borrowing permission.
- Halt flags:
pausedblocks ordinary entry and exit,frozenblocks entry, andno_seizeblocks liquidation seizure. Seizure ignores the other two flags. - LTV, liquidation threshold, liquidation bonus, and liquidation fee.
- Supply and borrow caps in raw asset units. Zero permits no new exposure.
liquidation_target_hf_wad, hf_for_max_bonus_wad, and
liquidation_bonus_factor_bps — set with SetSpokeLiquidationCurve.
Governance uses owner-gated controller calls to add spokes (AddSpoke), mark
them deprecated (RemoveSpoke), and add, edit, or remove
SpokeAsset(spoke_id, HubAssetKey) rows. A listing with non-zero usage cannot be
removed (#309 SpokeAssetInUse).
Both EditAssetInSpoke and immediate set_spoke_asset_flags can keep or tighten
halt flags. To clear a flag, schedule RelaxSpokeAssetFlags. Read
get_spoke_asset_flags_epoch(spoke_id, hub_asset) and include that value as
expected_epoch. Proposal and execution check it. A later flag change makes the
proposal obsolete and raises #319 SpokeFlagsEpochMismatch.
See Risk parameters for risk bounds,
flag behavior, and position-refresh rules. Exact field names are in
Data types.
Pool market parameters
EachHubAssetKey { hub_id, asset } identifies a market on the shared pool.
MarketParamsRaw includes the interest-rate curve, reserve factor, flash-loan
settings, asset address, and decimals. Parameter updates accrue interest under
the stored parameters before applying the replacement model.
Validation checks:
- Rate slopes are monotonic.
- The maximum borrow rate stays within the contract’s safety bound.
- Utilization breakpoints are ordered.
- The reserve factor is below 100%.
Oracle configuration
Oracle config lives on the price aggregator, keyed byPriceKey::Token(address)
or PriceKey::Ref(symbol). All spokes share it; there is no per-spoke override.
An AssetOracle declares one or two price sources, the tolerance band between
them, an independence policy, staleness and decimal bounds, and a sanity band.
Both proposal and execution validation check the source configuration.
Non-LP configurations require at least one smoothed or fundamental leg
(#38 SpotOnlyNotProductionSafe). A sole Aquarius LP source uses separate
validation and skips the feed-smoothing and tolerance checks.
Adjusting only the sanity band or only the tolerance has dedicated calls
(set_sanity_band, set_tolerance). The immediate governance sanity-band path
requires the ORACLE role and may only tighten. Tolerance changes remain
timelocked.
See Oracles for provider, freshness, independence,
composition, and sanity-bound validation. A successful configuration update does
not prove that its providers return a usable price; verify a live quote.
Next
Deployment
Build, deploy, and bring-up sequence.
Security model
Trust boundaries, authorization, and upgrade model.

