Oracles & pricing
Frozen Chainlink feeds, TWAP adapters for chain natives, and what happens when a price is unavailable.
The frozen line keeps zero oracles on-chain: mint and redeem are in-kind and never read a price. Agentic baskets can't avoid pricing — the policy checks are denominated in NAV — so the V2 layer adds oracles in the narrowest shape that works, and only on the rebalance path.
The registry: one feed per asset, frozen forever
Every asset an agent may buy must be listed in the on-chain
AssetRegistry with its price feed. Two properties carry the trust
model:
- The feed is frozen at registration. It can never be repointed — not by the curator, not by the protocol. A listing is therefore vetted once, for a live, correctly-shaped, fresh feed, before it is added.
- Delisting only blocks new buys. Baskets already holding a delisted asset keep pricing it, selling it, and redeeming it in-kind.
Stock Tokens use their Chainlink feeds (8 decimals, 24/5 with US market hours, 24h heartbeat). Chain-native tokens have no Chainlink feed, so the registry points at a TWAP adapter of the same interface shape.
TWAP adapters for chain natives
A chain native is priced by its own on-chain market through the
PoolTwapObserver and per-pool adapter feeds, which serve a
time-weighted average price over a one-hour window rather than the
spot tick. Manipulating a TWAP requires holding the pool at a false price
for the whole window against arbitrage, not flashing it for one block —
and the amounts an agent can trade are already bounded by the
turnover and slippage budgets, which caps what a
manipulated read could ever extract.
The observer is permissionlessly poked; the protocol runs a keeper that records observations around the clock so the windows stay covered.
When a price is unavailable
Two "no price" cases, both fail-safe:
- Uncovered window (a native's TWAP has too few observations): the feed
reports
updatedAt = 0. The agent simply waits; no trade happens on a made-up price. - Stale or dead feed (older than its heartbeat, or a shared quote feed down): the read reverts, so the rebalance reverts.
Either way the thing that freezes is the rebalance — never redemption or minting, which do not read prices at all. A market-hours gap on a stock feed simply means the agent trades when the market reopens.
Settlement venues
Trades route only through settlement contracts whitelisted in the
MakerRegistry (today: the PoolMaker, which settles against
Uniswap pools on-chain). Each leg is delta-checked: the exact amount out
must arrive, or the rebalance reverts. The protocol Safe can disable a
venue as a global brake; value can then no longer move at all, while
redemption stays untouched.
All layer addresses are on the addresses page.