What is the difference between push and pull oracles?
A push oracle's operator keeps sending prices to the chain, at set times or after big moves.1,2 A pull oracle keeps signed prices off-chain, and the user brings one on-chain in the transaction that uses it.1,2
Push: the oracle sends updates
In a push oracle, the oracle operator, or another privileged party, keeps pushing price updates to each blockchain.1 Chainlink's documentation says push-based oracles update at set intervals, or when prices move past a threshold.2 That is how the feeds in lesson 2 work.3
Pyth, another oracle network, says the operator must pay a transaction fee for every update.1 Pyth argues that this makes push oracles costly to grow to more feeds, more chains or faster updates.1
Pull: the user brings the price
In Pyth's pull design, prices are signed off-chain, so anyone can check they are genuine.1 When a price is needed, the user sends one transaction that both updates the price and uses it.1 Pyth's documentation says the signed price is checked on-chain when it arrives.4 The cost of that update falls on the user who needs the price, not the oracle.1
The same providers offer both models. Chainlink has a pull design called Data Streams: you fetch a report and check it on-chain whenever you need it.2 And Pyth pushes updates for some feeds on some networks, at a set heartbeat or after a set percentage move.5
Side by side
| Push | Pull | |
|---|---|---|
| Who brings the price on-chain | The oracle operator, on a schedule or after big moves1,2 | The user, inside the transaction that needs it1 |
| Who pays for each update | The operator1 | The user who needs the price1 |
| Main thing to watch | The price can be old when markets are calm6 | Users can choose which recent price to bring7 |
The catch with pull
Pyth's documentation warns that pull updates let users choose which price to use in a transaction.7 The choice is limited: prices must move forward in time and can't be too old.7 But a user can still pick any update that fits those rules.7
Pyth's advice is a staleness check: refuse any price that is not recent enough.7 Its tools include one by default, which you can set to suit your app.7
Pyth also says no on-chain oracle can be as fast as an off-chain source, such as an exchange.7 So apps should assume attackers see price changes a little before the app does.7
The catch with push
A push feed only changes when a trigger fires. Between updates, the on-chain price stands still.3 Pyth notes that its own push feeds can be delayed by things like chain halts.5 And it says lower thresholds mean fresher prices, but more transactions and higher gas costs.5
Which fits when
Chainlink says some apps only need on-chain data at fixed intervals, which suits push.2 Others need more frequent updates and lower delays, which pull is designed for.2
Every update carries a time. Subtract it from the current time to get the price's age. If the age is more than the limit your app sets, refuse the price. For example, with a 60-second limit, a price stamped 12:00:00 can be used at 12:00:45 but not at 12:01:30.
- Pull, Don't Push: A New Price Oracle Architecture. Pyth Network blog, 13 December 2022.
- What is Chainlink Data Streams?. Chainlink documentation, page read 22 October 2026.
- Decentralized Data Model. Chainlink documentation, page read 22 October 2026.
- Use Prices on Blockchain. Pyth Network documentation, page read 22 October 2026.
- Sponsored Feeds. Pyth Network documentation, page read 22 October 2026.
- What are Chainlink Data Feeds?. Chainlink documentation, page read 22 October 2026.
- Best Practices. Pyth Network documentation, page read 22 October 2026.
General education built from the publicly available sources listed above. Not financial, legal, tax or investment advice. Naming a company, project or regulator is not an endorsement either way. Last checked 2026-10-22. Terms and disclaimer.