> For the complete documentation index, see [llms.txt](https://docs.metric.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.metric.xyz/how-pools-work/oracles.md).

# Oracles

Metric provides **shared oracle infrastructure** on each chain for Chainlink, Pyth and gas optimized propAMM updates.

Pool curators can reuse it instead of deploying and maintaining their own oracle systems.

All of them share an interface for **price, spreads and timestamp**. A [Price Provider](/how-pools-work/price-providers.md) reads these to build its bid and ask.

## Chainlink and Pyth: a commodity for every Metric pool

Metric integrates **Chainlink Ultra** and **Pyth Pro** through shared contracts. Each verified feed exists once per chain, and one update serves every Metric pool that uses it.

Anyone can submit a newer signed update. The contract checks the **Chainlink or Pyth** signature, so whoever relays the update can't change the price. A pool priced from one of these feeds trusts Chainlink or Pyth, not the relayer.

Only Metric pools and approved integrators can read these feeds.

<figure><img src="https://2762670563-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyvQVWzbfEJJ8Aelwvxmj%2Fuploads%2F5xo92jwf6xrDJZ9HgVMs%2Fmetric_shared_feed_many_pools.png?alt=media&#x26;token=b1688da9-f5ef-4b01-b02e-b59919641e23" alt=""><figcaption></figcaption></figure>

## Multiplier Oracle: tokenized stocks

A tokenized stock doesn't always track one share. Its issuer keeps a **multiplier**: the number of shares one token redeems for. It moves on corporate actions: a reinvested dividend nudges it up, and an N:1 split multiplies it by N. Pyth and Chainlink price the share, not the token, so a pool reading them directly drifts with every dividend and is off by a factor of N after every split.

The **Multiplier Oracle** prices these tokens as the **Pyth share price × the issuer's multiplier**. It reads the multiplier from the token through an adapter for each token standard:

| Chain           | Tokenized stock                  | Adapter                     |
| --------------- | -------------------------------- | --------------------------- |
| Base            | B20 Asset                        | `B20AssetParams`            |
| Robinhood Chain | Robinhood Stock Token (ERC-8056) | `RobinhoodStockTokenParams` |

Each Multiplier Oracle feed binds one Pyth equity feed to one token and one adapter, and the binding can't change once created. A feed stalls while the issuer's pause flag is set, for example around a split, and resumes by itself when the flag clears. While it is stalled, pools halt swaps; withdrawals stay open.

Anyone can create a feed. The contract only checks that the adapter is approved, so a feed can be bound to the wrong token or the wrong Pyth feed. Metric checks every binding when it classifies a pool; see [Pool tiers](/use-metric/provide-and-manage-liquidity/pool-tiers.md).

## Compressed Oracle: built for propAMMs

Market makers publish their own prices through a **shared Compressed Oracle contract**.

The Compressed Oracle is gas-optimized: up to **four feed values** fit in one 32-byte storage word, at about 8,000 gas per feed.

Multiple feeds can be batched in one transaction. Packed data and fewer storage writes reduce the gas cost of frequent updates.

A feed is controlled by its creator or an updater they authorize. Its price depends on that publisher, not on any other independent/verifiable sources.

## Freshness and access

Each Price Provider has a staleness limit, capped at creation at up to 7 days. Some providers let the curator change it later, but never past that cap. Until the limit is reached, the pool keeps trading on the latest stored update. Once the update is older than the limit, or the feed reports itself stalled, the provider halts and the swap reverts. It never trades on a price older than the limit.

Providers also halt when a feed reports too much price uncertainty, when the price leaves the feed's configured minimum and maximum, or when the computed bid/ask range collapses.

Anyone can read compressed feeds, onchain or offchain. Chainlink and Pyth feeds can be read onchain only by a registered pool during a swap, and by approved integrators. Offchain reads work for everyone, so wallets, explorers and the Metric API can always show the price. **Permissionless updates do not mean unrestricted reads.**

[Contact us](/start-here/contact-us.md) for shared oracle access if you believe you can contribute to the ecosystem.

External oracles remain optional for custom pricing strategies. Available oracle sources vary by chain; see [Deployments](/reference/supported-chains-and-deployments.md).

[Anchored pricing](/how-pools-work/anchored-pricing.md) · [Operate a pool](/run-a-pool/price-updates-and-monitoring.md)
