Overview
Price adapters give Multiliquid a consistent USD price for assets with different pricing sources. Every adapter implements the same read-only interface and returns an 18-decimal WAD value, allowingMultiliquidSwap to use one pricing engine for
every supported route.
RWA valuation
Registered RWA adapters provide the prices used to quote and execute swaps.
Stablecoin guardrails
Optional stablecoin adapters validate configured USD values against live
oracle prices.
Interface and units
All price adapters implementIPriceAdapter:
MultiliquidSwap rejects a zero price. Individual adapters may also validate
source-specific conditions such as oracle freshness, completed rounds, and
positive values.
How pricing is used
For RWA routes,MultiliquidSwap reads the adapter registered for each RWA ID.
For stablecoins, the protocol uses an administrator-configured USD value and can
optionally compare it with a registered price adapter before accepting that value.
Adapter catalog
Direct NAV adapters
ULTRAAdapter
ULTRAAdapter reads lastSetMintExchangeRate() and
BPS_DENOMINATOR() from the ULTRA manager, then normalizes the result to
18 decimals:
USTBAdapter
USTBAdapter reads the latest answer from a Chainlink-compatible feed and
multiplies the 6-decimal answer by 1e12. It rejects a zero feed address and
non-positive answers.
FalconXUSDCPriceAdapter
FalconXUSDCPriceAdapter reads priceAA() from the Pareto credit vault for
AA_FalconXUSDC. Because the vault reports the price in the 6-decimal USDC
underlying unit, the adapter multiplies it by 1e12. It rejects a zero vault
address and a zero price.
General oracle adapters
ChainlinkPriceAdapter
ChainlinkPriceAdapter supports feeds with up to 18 decimals and calculates its
WAD multiplier from the feed’s decimals() value at deployment.
Each price read validates:
- The answer is positive.
- The update belongs to a completed round.
- The update timestamp is present and is not in the future.
- The update is no older than
MAX_AGE.
OPERATOR_ROLE can update MAX_AGE to a nonzero value with
setMaxAge(). The adapter emits MaxAgeUpdated whenever the threshold changes.
ChroniclePriceAdapter
ChroniclePriceAdapter reads tryReadWithAge() from a Chronicle oracle.
Chronicle prices are already WAD-denominated, so the adapter returns the value
without decimal scaling.
Each price read requires a valid, nonzero value with a timestamp that is not in
the future or older than MAX_AGE. Addresses with OPERATOR_ROLE can update the
nonzero freshness threshold with setMaxAge().
Fixed and managed adapters
DollarPeggedAdapter
DollarPeggedAdapter always returns 1e18, representing exactly $1.00. It has
no external dependencies or mutable state and is suitable for assets whose
protocol price is fixed at one dollar.
ThirdPartySetterPriceAdapter
ThirdPartySetterPriceAdapter stores a WAD-denominated price published by an
authorized account:
DEFAULT_ADMIN_ROLEmanages price setters.PRICE_SETTER_ROLEauthorizes calls tosetPrice().getPrice()returns the current value and reverts while that value is zero.PriceUpdatedrecords the new price and the account that submitted it.
Stablecoin price guardrails
A stablecoin registration includes an administrator-configured USD value. An optional price adapter and deviation threshold can add an oracle guardrail to that value. When a guardrail is enabled,MultiliquidSwap compares the configured value with
the adapter’s live WAD price. The configured value is accepted only when its
absolute deviation from the oracle price is within the stablecoin’s configured
threshold.
IPriceAdapter interface supports both
Chainlink and Chronicle guardrails.
Production asset assignments
See Deployments for the corresponding production addresses.
Integration considerations
- Treat every adapter price as an 18-decimal USD WAD, independent of the token’s own decimals.
- Use
quoteSwap()to obtain the exact token and fee amounts produced by the protocol’s registered adapters. - Monitor adapter-specific update events and source freshness where the adapter has mutable pricing or freshness parameters.
- A successful price read validates pricing data; token inventory, custody balances, allowances, and recipient eligibility are enforced during settlement.
Next: V1 to V2 Changes
Review the integration-facing changes introduced by the current protocol
architecture.