Sign In Request Access
Back to Research

Oracle Latency and Why Your Mark Price Is Never Quite Real-Time

Technical diagram showing oracle price feed latency between index price and mark price

The price your protocol uses to calculate your liquidation threshold is not the price on your exchange screen. It is the mark price — a derived value, computed from one or more oracle feeds, updated at intervals that are measured in seconds or minutes rather than milliseconds. In stable market conditions, this distinction rarely matters. In a fast-moving market, the gap between oracle-derived mark price and actual trading price can be wide enough to trigger liquidations that a real-time price feed would not have, or to delay them past the point of orderly execution.

Understanding oracle latency is infrastructure knowledge, not trading theory. If you know the update cadence of the oracle your protocol relies on, you can reason about your liquidation risk during volatile windows more accurately than if you are watching the last-traded price and assuming the protocol sees what you see.

Where Oracle Latency Comes From

On-chain perpetual protocols cannot read CEX price feeds directly. The EVM (or the equivalent execution environment on other chains) cannot make external API calls. Prices from Coinbase, Binance, or any centralized venue must be written to the blockchain — either via a push model, where the oracle network writes updates on a schedule, or a pull model, where the protocol requests the latest attested price from the oracle at transaction time.

Push-based oracles (the historical Chainlink model for price feeds) maintain a heartbeat: they publish a price update on-chain on a time schedule (typically every 20-60 minutes for the standard heartbeat) or when the price moves by more than a threshold deviation (often ±0.5% for liquid pairs). Between updates, the on-chain price is static. If the market moves 2% in a 30-minute window but stays within the deviation threshold, the oracle price on-chain has not updated. The protocol's mark price calculation is working from a stale input.

Pull-based oracles (Pyth's model, and Chainlink's more recent Low Latency architecture) work differently. The oracle publishes signed price attestations continuously off-chain at high frequency — Pyth's Solana-native feed updates sub-second, and the EVM-compatible version via price service is updated on the order of 400ms intervals. The on-chain price is only updated when a transaction includes a valid recent attestation — meaning the "freshness" of the price depends on whether the protocol or the liquidator is submitting price updates as part of their transaction flow.

The practical difference: in a pull model, a sophisticated liquidation bot that bundles a fresh price attestation with a liquidation transaction sees accurate current prices. A trader monitoring their position on a UI that refreshes from cached on-chain state may see a different, older price. The asymmetry in price access is not accidental — it is a consequence of the architecture.

How Latency Affects Funding Rate Snapshots

The premium index used to compute the funding rate is a function of the gap between mark price and index price. If the oracle has not updated recently, the mark price is stale — and the premium index calculation is therefore also stale.

Consider the mechanics: in a 30-minute window where the asset moves 3% downward in a fast sell-off, a push oracle with a 0.5% deviation threshold will update once (the first 0.5% move), then again at the next 0.5% step, each update requiring a new block to confirm. On a congested network, confirmation time can run 15-30 seconds per update, meaning the oracle price may lag actual market price by 1-2% for several minutes during a sustained move. During those minutes, the on-chain premium index is computed from a mark price that does not reflect actual market conditions. If a funding rate settlement happens to fall within that window, the settled rate is effectively incorrect — it reflects a fictional relationship between mark and index that no longer exists.

The magnitude of this error scales with the intensity of the move and the oracle update frequency. In quiet markets with small hourly moves, a 20-60 second oracle lag introduces immaterial error. In a market moving 5-10% in a single hour, that same lag can cause the premium index — and therefore the funding rate snapshot — to diverge from reality by a basis point or more. At scale, for a protocol with hundreds of millions in open interest, that divergence produces funding settlements that are systematically wrong in one direction.

Chainlink vs. Pyth: What the Difference Actually Means for Traders

Dimension Chainlink (standard push feed) Pyth (pull model, EVM)
Update trigger Time heartbeat + deviation threshold On-demand pull (per transaction)
Worst-case staleness Up to the full heartbeat window Only as stale as the latest off-chain publish (typically <1s)
Network congestion effect Update transactions can queue; confirmation delayed Attestation is attached to user/liquidation tx; less queue dependency
Cost model Oracle network pays update gas (spread via fees) Update gas included in liquidation/position tx
Liquidation timing risk Stale price during fast moves can delay or advance liquidation trigger Liquidator controls price freshness; can trigger at accurate current price

We are not saying one model is superior for all use cases — pull oracles create their own complexities around price freshness guarantees and rely on an active liquidation ecosystem to keep prices current. What matters to a trader is knowing which model their protocol uses and understanding the staleness profile that results.

The Mark Price–Index Price Gap During Volatility

In normal conditions, mark price and index price are within a few basis points of each other. During sharp moves, the gap widens — sometimes dramatically. The premium index can reach levels that, in isolation, suggest extreme long or short crowding, when in fact the distortion is partially an artifact of oracle lag.

If the mark price (from on-chain oracle) is lagging a falling index price by 1.5% during a 10-minute sell-off, the premium index will temporarily show mark > index — a falsely positive reading suggesting the perpetual is trading at a premium to spot. Funding will accrue to the short side during this window, even though the actual market is selling hard. These distortions tend to self-correct as the oracle catches up, but the transient funding transfers are real and settled.

In our mark price panel, we track the oracle lag directly — showing both the on-chain mark price and the aggregated index price with a latency timestamp on the oracle source. During periods where the gap exceeds a threshold we consider meaningful (typically beyond a few basis points for liquid pairs), the panel flags the divergence. That flag is not an alarm — it is context. It tells you that the liquidation price your UI is showing is based on a mark price that may be stale, and that the next oracle update could move your effective margin ratio materially.

What to Do With This Information

The operational implication is straightforward: during high-volatility windows, give your liquidation threshold more room than the UI suggests you need. If your position is showing a 3% buffer above liquidation price based on current mark price, and you know the oracle has not updated in 45 seconds during a 2% intraday move, the true buffer may be closer to 1%. That is the difference between a comfortable position and one that is about to be liquidated without the price appearing to have moved against you on your screen.

The second implication: monitor funding rate readings with caution during the 5-10 minutes around major news events or sharp moves. Funding rate readings during oracle-lag windows are partially artificial. Decisions about adding or closing positions based on an extreme funding reading during that window should account for the possibility that the reading will normalize as the oracle catches up. A funding rate that looks deeply negative during a fast cascade may revert to neutral within one oracle cycle — it was measuring the gap between a stale oracle and the real market, not genuine short crowding.

Oracle infrastructure is the plumbing that everything else runs on top of. The cleaner your understanding of the plumbing, the better your read on every other data point that depends on it.

Continue Reading

More from Aark Research

View All Articles