Why
Two 2026 incidents look unrelated and are not. Polymarket settled its short-dated crypto contracts on a single price at a single moment, and researchers at Stanford and Singapore Management University documented 821 accounts taking $8.2M out of settlement windows they classified as likely manipulated — with 93% of the losses in those windows, market makers excluded, landing on retail. Balance Coin let its lending contract accept an oracle price without checking it against a plausible range and without any liquidation delay; an attacker wrote an abnormally low bitcoin price, instantly liquidated vaults that were never eligible, and took roughly $912,000, collapsing a $3.5M stablecoin by more than 99%.
Neither was a cryptographic failure and neither required a bug in the contract's arithmetic. Both read one price at one instant and treated it as truth. What makes this a card rather than two postmortems is that the fix is a parameter, not a principle: how long must an averaging window be, and how tight must a validation band be, before moving the input costs more than the payoff it unlocks?
And the other half of the card is why an entire oracle architecture exists to answer that question. The distinction between Chainlink Data Feeds and Data Streams is the boundary between push and pull. A push feed has oracle nodes continuously writing prices on-chain on deviation thresholds or heartbeat intervals; contracts read the latest on-chain state, the price is inherently stale between writes, and the oracle network bears the gas indefinitely. A pull feed keeps high-frequency data aggregated and cryptographically signed off-chain; when a caller settles, they pull the timestamped signed report and submit it with their transaction, and the contract verifies the signature on-chain and executes against that exact moment's price.
That is not a performance improvement, it is the answer to the incident above. Prediction markets resolve on closing price at 16:00:00 UTC or price at event occurrence. A push feed may simply not hold a value for that instant — no deviation triggered an update at that second. A pull feed can fetch a report signed at it. The fix Polymarket shipped is public and specific enough to test rather than invent: the single-price snapshot replaced by a TWAP — 30 seconds for five-minute markets, 60 seconds for 15-minute and four-hour markets — sourced from Data Streams, mirroring what Kalshi already does with regulated indexes and moving averages.
The limit is worth stating plainly, because it decides how much of the problem this solves. Data Streams is a price product. It does not resolve categorical outcomes — who won an election, whether a milestone was met — which remains the domain of decentralised consensus and CRE. Since a large share of event contracts are events rather than prices, this fills roughly half the column in the event-contract-plumbing table.
How it works
Push versus pull, and why the split exists
| Data Feeds (push) | Data Streams (pull) | |
|---|---|---|
| Where the price lives | Written on-chain by oracle nodes | Aggregated and signed off-chain |
| Update trigger | Deviation threshold (e.g. 0.5%) or heartbeat (e.g. hourly) | Continuous, sub-second |
| Staleness between updates | Inherent | None — the caller fetches the instant it needs |
| Who pays gas | The oracle network, indefinitely | The caller, only when a state transition needs it |
| Price at an arbitrary timestamp | May not exist | A report signed at that millisecond |
| Cost predictability | Unbounded, borne externally | Per resolution call — computable per market |
The three knobs, and the curve that decides them
| Knob | What it does | How to size it |
|---|---|---|
| Window length | Averages away a short push | Plot cost-to-manipulate against window length; the crossing point with the payoff is the design output — not the window itself |
| Band width | Refuses an implausible price outright | Cheaper than averaging and independent of it — Balance Coin's contribution |
| Delay | Interval in which a bad price could be noticed | Not latency overhead — it is the detection window |
The cost of moving a reference venue's mid by X for T seconds is a function of book depth; the payoff is the notional held into settlement. Those two curves crossing is the whole model.
The three concrete advantages of pull
- Gas on demand — the oracle does not burn gas writing prices nobody reads.
- Sub-second latency — delivery is not bounded by block time or heartbeat.
- Millisecond granularity — which is what deterministic settlement of a dated contract requires.
Where the oracle lands in the event-contract table
event-contract-plumbing sorts regulated-stack requirements into free, must-build and no-answer. Settlement and audit trail come free on-chain. "The value at a specific moment" does not — and that is precisely what event-contract settlement turns on. Where a regulated venue solves this with market-data vendor contracts and audit-trail obligations, an on-chain venue solves it by verifying a signed report. It also answers the cost-ceiling question: paying per call makes per-market economics computable, the exact property Chainlink Functions could not deliver and the reason it sunset.
The line to carry forward
Treat the interval between oracle finalisation and trading halt as an attack surface with its own atomicity requirement, not an implementation detail. If a position can still be opened after the price that will settle it is already determined, that window is the product — and it is the same reasoning arb-bots-are-the-peg applies to a no-trade band and priced-by-the-wrong-thing applies to an instrument settling against a mark nobody publishes continuously.