Pull oracles (e.g., Chainlink's low-latency AnyAPI) excel at on-demand, high-frequency data because they only incur costs and blockchain load when a user transaction explicitly requests an update. This model is highly efficient for applications like perpetual DEXs (e.g., GMX) where price updates are triggered by user trades, avoiding constant gas expenditure. It allows for supporting thousands of data feeds without baseline network congestion.
Pull Oracles vs Push Oracles: Scale
Introduction: The Scalability Bottleneck in Oracle Design
Choosing between pull and push oracles fundamentally dictates your protocol's scalability profile and cost structure.
Push oracles (e.g., Chainlink Data Streams, Pyth Network) take a different approach by preemptively publishing data to a low-latency off-chain service or an L2 like Arbitrum. This results in sub-second finality for consumers like Hyperliquid, but requires continuous subsidization of update costs by the oracle provider. The trade-off is higher operational overhead for the oracle to maintain liveness, but near-instant data for dApps.
The key trade-off: If your priority is cost-efficiency for sporadic, user-initiated events and maximum data feed breadth, choose a pull model. If you prioritize ultra-low latency and deterministic data availability for high-frequency trading or gaming, a push oracle is superior. The decision hinges on whether your scalability bottleneck is gas cost or data freshness.
TL;DR: Key Differentiators at Scale
The core distinction between on-demand (Pull) and proactive (Push) oracles defines their scaling characteristics, cost models, and ideal applications.
Push Oracle Strength: Real-Time Guarantees
Proactive Data Delivery: Updates are pushed to the contract automatically upon price deviation (e.g., Chainlink's >1% heartbeat). This ensures sub-second finality for critical functions like liquidations on Aave or Compound, where latency directly impacts protocol solvency.
Push Oracle Weakness: Cost Inefficiency at Scale
Fixed Overhead Per Update: Every data push incurs gas costs, paid by the oracle service or passed to dApps. For low-value or infrequently accessed data (e.g., NFT floor prices for a small collection), this creates prohibitive operational costs and blockchain bloat. Scaling to 10,000+ feeds is economically challenging.
Pull Oracle Strength: Hyper-Efficient Scaling
On-Demand Cost Model: Data is fetched only when a user transaction requires it (e.g., Pyth's pull oracle). The user pays the gas. This allows the oracle to maintain 10,000+ price feeds (like Pyth's cross-chain program) with near-zero operational overhead, perfect for long-tail assets or perp markets.
Pull Oracle Weakness: User Experience Friction
Added Latency & Complexity: Users must include an oracle update in their transaction, adding ~200-500ms of latency and requiring them to manage relayers or witness data. This breaks composability for fast DeFi loops and is unsuitable for keeper-triggered functions like automatic liquidations.
Scalability Feature Comparison: Pull vs Push
Direct comparison of scalability metrics for on-demand (Pull) and continuous (Push) oracle models.
| Metric | Pull Oracle Model | Push Oracle Model |
|---|---|---|
On-Chain Gas Cost (per update) | $10-50+ | $0.10-$2 |
Latency (Data Request to On-Chain) | < 1 block | ~12 seconds to ~15 minutes |
Data Freshness Guarantee | On-demand | Pre-defined interval (e.g., every block) |
Infrastructure Cost for DApp | Paid per request | Subsidized by oracle/protocol |
Optimal for High-Frequency Data | ||
Network Overhead (Oracle Side) | Low | High |
Primary Scaling Constraint | User transaction gas | Oracle node bandwidth & stake |
Pull Oracle (On-Demand) Model: Pros and Cons for Scale
Evaluating the scalability of Pull (On-Demand) vs. Push (Streaming) oracle models based on gas efficiency, latency, and infrastructure overhead for protocols like DeFi lending, perps, and options.
Pull Model: Superior Cost Efficiency at Scale
Gas costs scale only with usage: Protocols like Uniswap v3 TWAP or Pyth's pull-update only pay for data when a user transaction requires it. This creates predictable, user-borne costs and eliminates baseline streaming fees. This matters for low-frequency applications (e.g., NFT floor price feeds, governance voting) where constant updates are wasteful.
Pull Model: Eliminates Redundant Data & Infrastructure
No wasted network calls or storage: The chain stores no data until explicitly requested, reducing state bloat. This is critical for multi-chain deployments (e.g., a dApp on 10+ L2s) where maintaining active push streams to each chain is prohibitively expensive. Tools like Chainlink Functions exemplify this serverless, compute-on-demand approach.
Push Model: Guaranteed Low Latency for High-Frequency Trades
Sub-second data freshness pre-committed on-chain: Oracles like Chainlink Data Streams or Pythnet push price updates in near real-time (<500ms). This matters for perpetual futures DEXs (e.g., Hyperliquid, Aevo) and money markets where stale data directly causes liquidations and arbitrage losses. The infrastructure cost is justified by the product requirement.
Push Model: Simpler, More Reliant Smart Contract Logic
Contracts read from a single, always-fresh source of truth: Developers don't need to implement complex pull mechanisms or worry about update triggers. This reduces contract complexity and audit surface. This matters for rapid prototyping and mainstream DeFi apps (e.g., Compound, Aave) where reliability and simplicity are paramount over marginal gas savings.
Push Oracle (Streaming) Model: Pros and Cons for Scale
A data-driven breakdown of how push (streaming) and pull (on-demand) oracle models perform under high-throughput conditions. Key metrics include latency, gas efficiency, and infrastructure overhead.
Push Model: Real-Time Responsiveness
Proactive Data Delivery: Updates are streamed to contracts automatically upon price deviation or time threshold (e.g., Chainlink Data Streams). This enables sub-second latency for critical actions like liquidations on Aave or perpetual funding rate updates on dYdX, where milliseconds matter.
Push Model: Predictable Gas Costs
Gas Burden on Provider: The oracle network (e.g., Pyth Network publishers) pays for on-chain updates, shielding dApp users from variable gas fees. This creates a stable cost structure for protocols like Synthetix Perps, which require continuous price feeds without passing volatility to traders.
Pull Model: On-Demand Efficiency
Gas-Only-When-Needed: Contracts fetch data via pull only at execution time (e.g., Uniswap v3's TWAP oracle). This eliminates wasteful updates for low-frequency applications like NFT floor price checks (Blur) or governance voting, optimizing for cost over speed.
Pull Model: Simpler Scaling
Decoupled Infrastructure: No need to maintain a live streaming pipeline for every data point. Scaling involves adding more RPC endpoints and indexers (like The Graph) rather than complex event-driven systems. Ideal for batch processing historical data or serving thousands of low-traffic DeFi pools.
Push Model: High Overhead at Scale
Consensus & Relay Costs: Maintaining continuous streams for 1000+ assets requires significant off-chain infrastructure (Chainlink nodes, Pyth validators) and constant on-chain write operations. This leads to high operational costs that scale linearly with data points, not usage.
Pull Model: Latency Bottlenecks
User-Facing Delays: The pull transaction must wait for oracle response, adding network RTT and on-chain confirmation time. This creates poor UX for high-frequency trading and can be exploited in arbitrage scenarios where stale data is a vulnerability.
Architectural Decision Guide: When to Use Which Model
Push Oracles for High-Frequency DeFi
Verdict: Essential for Core Infrastructure. Strengths: Push oracles (e.g., Chainlink Data Streams, Pyth Network) provide sub-second updates with low latency, critical for perpetual DEXs like dYdX and GMX, and money markets like Aave. They eliminate the latency and gas uncertainty of on-demand pulls, ensuring liquidations and price updates are executed at the precise moment needed. The continuous data push model is battle-tested for handling volatile market conditions.
Pull Oracles for High-Frequency DeFi
Verdict: Niche Use Only. Strengths: A pull oracle (e.g., a custom Chainlink AnyAPI or Tellor setup) can be cost-effective for updating non-critical parameters (e.g., protocol fee rates) on a slower cadence. However, for core price feeds, the inherent latency of the request-response cycle and the gas cost burden placed on the end-user transaction make it unsuitable for high-frequency trading, lending, or derivatives applications where milliseconds matter.
Final Verdict and Decision Framework
Choosing between pull and push oracles ultimately depends on your application's scale profile and tolerance for latency versus cost.
Pull (On-Demand) Oracles excel at cost efficiency for low-to-medium frequency data requests because they eliminate the need for continuous on-chain transactions. For example, a protocol like Chainlink with its checkUpkeep/performUpkeep model allows contracts to request data only when a specific condition is met, drastically reducing gas fees for applications like limit orders or insurance claims that don't require millisecond updates. This model shifts the gas cost burden to the user or a designated keeper network, making it highly scalable in terms of operational expense.
Push (Streaming) Oracles take a different approach by preemptively pushing data updates on-chain at regular intervals. This results in a fundamental trade-off: lower latency and guaranteed freshness for higher, fixed infrastructure costs. Protocols like Pyth Network and Chainlink Data Streams use this model to deliver sub-second price updates, which is critical for perpetual futures DEXs or high-frequency trading. However, the constant stream of on-chain transactions requires significant subsidization by the oracle provider or protocol treasury to be sustainable at scale.
The key trade-off is between cost structure and performance predictability. If your priority is minimizing operational costs for non-real-time applications (e.g., lending rates, weekly reward calculations) and you can tolerate a 1-2 block latency, choose a Pull Oracle. If you prioritize sub-second data freshness and consistent performance for high-value, real-time decisions (e.g., derivatives, leveraged trading), and have the budget to subsidize continuous updates, choose a Push Oracle. For maximum flexibility, consider hybrid models emerging in the space.
Get In Touch
today.
Our experts will offer a free quote and a 30min call to discuss your project.