{"slug":"oracle-deviation","title":"Chainlink vs Pyth vs Binance vs Coinbase, live oracle deviation","subtitle":"Maximum pairwise price disagreement in basis points across Chainlink, Pyth, Binance and Coinbase, polled every 30 seconds on 10 USD pairs.","category":"Trading","metric":"Max cross-oracle deviation","unit":"bps","status":"live","higherIsBetter":false,"value":15.0313,"leader":{"name":"ADA/USD","slug":"ada-usd","value":15.0313},"rankings":[{"name":"ADA/USD","slug":"ada-usd","ms":{"p50":15.0313,"p90":21.0748,"p99":28.1492,"mean":16.227},"successRate":99.9421,"sampleSize":3},{"name":"BNB/USD","slug":"bnb-usd","ms":{"p50":15.1074,"p90":17.8435,"p99":20.8836,"mean":15.1587},"successRate":99.9566,"sampleSize":4},{"name":"POL/USD","slug":"matic-usd","ms":{"p50":15.2873,"p90":25.7947,"p99":37.9058,"mean":16.8288},"successRate":99.9566,"sampleSize":4},{"name":"XRP/USD","slug":"xrp-usd","ms":{"p50":15.4574,"p90":17.7429,"p99":22.9921,"mean":15.7032},"successRate":99.9421,"sampleSize":3},{"name":"SOL/USD","slug":"sol-usd","ms":{"p50":15.7866,"p90":18.9328,"p99":25.6043,"mean":16.0501},"successRate":99.9566,"sampleSize":4},{"name":"DOGE/USD","slug":"doge-usd","ms":{"p50":16.0299,"p90":18.9317,"p99":23.2365,"mean":16.1199},"successRate":99.9421,"sampleSize":3},{"name":"ETH/USD","slug":"eth-usd","ms":{"p50":16.049,"p90":18.4321,"p99":23.3267,"mean":16.2896},"successRate":99.9566,"sampleSize":4},{"name":"BTC/USD","slug":"btc-usd","ms":{"p50":16.3024,"p90":18.1753,"p99":21.5301,"mean":16.5192},"successRate":99.9566,"sampleSize":4},{"name":"LINK/USD","slug":"link-usd","ms":{"p50":16.3506,"p90":19.0047,"p99":24.2577,"mean":16.3975},"successRate":99.9566,"sampleSize":4},{"name":"AVAX/USD","slug":"avax-usd","ms":{"p50":16.403,"p90":25.0081,"p99":31.2286,"mean":17.7168},"successRate":99.9566,"sampleSize":4}],"sparkline":[18.5686,17.644,17.6981,14.2045,19.3711,14.1343,18.0708,21.1045,13.9276,20.8841,20.9278,20.9132,20.9278,20.9132,17.1637,17.402,20.8117,13.947,13.9762,10.377,17.5855,17.1012,21.4669,16.2849,21.5131,7.12504,15.0932,14.0746,14.0449,16.9533,14.1143,10.8836,18.0414,13.986,14.0746,27.8552,20.6968,13.624,10.1193,20.4848,13.7552,13.8313,13.8217,15.9173,13.8408,20.8261,20.8261,20.8117,27.8552,13.8889,20.8551,21.0011,20.8986,6.91324,14.0056,17.5118,21.0305,20.7828,13.7836,13.8026,20.6968,13.8217,20.3874,6.79579,13.4953,6.73174,23.5962,16.9909,6.74082,20.2634,16.2423,14.648,20.4429],"sampleSize":37,"asOf":"2026-06-26T18:55:21.002Z","headline":"ADA/USD leads max cross-oracle deviation at 0.15% (24h avg) on Chainlink vs Pyth vs Binance vs Coinbase, live oracle deviation.","quote":"ADA/USD leads max cross-oracle deviation at 0.15% (24h avg) on Chainlink vs Pyth vs Binance vs Coinbase, live oracle deviation. Source: OpenChainBench (https://openchainbench.com/benchmarks/oracle-deviation).","cite":{"plain":"OpenChainBench. \"Chainlink vs Pyth vs Binance vs Coinbase, live oracle deviation\". Retrieved 2026-06-26. https://openchainbench.com/benchmarks/oracle-deviation","bibtex":"@misc{ocb_oracle_deviation,\n  author = {OpenChainBench},\n  title  = {Chainlink vs Pyth vs Binance vs Coinbase, live oracle deviation},\n  year   = {2026},\n  url    = {https://openchainbench.com/benchmarks/oracle-deviation},\n  note   = {Retrieved 2026-06-26}\n}","apa":"OpenChainBench. (2026). Chainlink vs Pyth vs Binance vs Coinbase, live oracle deviation. Retrieved June 26, 2026, from https://openchainbench.com/benchmarks/oracle-deviation"},"pageUrl":"https://openchainbench.com/benchmarks/oracle-deviation","ogImage":"https://openchainbench.com/api/og/oracle-deviation","source":"https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/oracle-deviation","methodology":["Sources. Chainlink AggregatorV3 via `eth_call(latestRoundData())` on Ethereum mainnet (no API key, public RPC with fallback), Pyth Network via Hermes REST `/api/latest_price_feeds` batch endpoint (no key), Binance REST `/api/v3/ticker/price` on USDT-quoted symbols (treated as ≈ USD), Coinbase REST `/products/<P>/ticker` on USD-quoted products. All four are free, no-auth, public endpoints.","Pairs (10). BTC, ETH, SOL, BNB, AVAX, LINK and POL are tracked on all 4 sources. XRP, ADA, DOGE are tracked on 3 sources (Pyth + Binance + Coinbase) because the Chainlink mainnet AggregatorV3 contracts for these USD feeds are deprecated and no longer updated by node operators, the provider tag flags it.","Cadence. 30 second polling interval per (source, pair). 4 sources × 10 pairs × 2/minute = 80 requests/minute total, comfortably under every free-tier ceiling (Binance 1200/min, Coinbase 10/s public, Pyth ~30/s soft, public RPC courteous). HTTP timeout is 8 s per request to match the gas-estimation harness.","Deviation formula. For every unordered pair of sources `(a, b)` that both have a fresh sample for the same pair: `deviation_pct = |price_a - price_b| / ((price_a + price_b) / 2) * 100`. With 4 sources we compute 6 pairwise deviations per asset; with 3 sources we compute 3. Per-pair headline is the max across all source-pairs (`ocb_oracle_max_deviation_pct`).","Stale-price guard. A source's sample is considered stale and excluded from the deviation calculation if its last successful update is older than `2 * pollInterval` (60 s). Prevents a dead Coinbase ticker from registering as a 0% deviation against itself by leaving the price gauge fossilized.","Chainlink round age. The on-chain `updatedAt` timestamp from `latestRoundData()` is published separately as `ocb_oracle_last_round_age_seconds{source=\"chainlink\", pair}`. Chainlink updates only on deviation (typically 0.25-0.5% for blue chips) or heartbeat (~1 h), so a 30-minute age on a quiet ETH minute is normal; a 2-hour age on SOL during a volatile minute is the actual signal.","USDT ≈ USD assumption. Binance only quotes USDT pairs (BTCUSDT, etc.). We treat USDT as ≈ USD ± 10 bps drift, which is acceptable for a bench whose alert floor is ≥ 10 bps. A real USDT depeg would surface as Binance drifting from the other three sources for *every* pair simultaneously, exactly what we want this bench to flag, not hide.","MATIC → POL migration. Polygon migrated MATIC → POL 1:1 on Sep 4 2024. The Chainlink mainnet feed contract is still named MATIC/USD but on-chain `description()` confirms it tracks the POL token; Pyth renamed the feed to POL/USD; Coinbase delisted MATIC-USD and only lists POL-USD; Binance kept MATICUSDT as a frozen historical pair AND lists POLUSDT. We point Binance at POLUSDT so all four sources track the same underlying asset. Bench label is kept as `pair=\"MATIC/USD\"` for query continuity.","Time-aligned deviation (canonical headline). For every source pair we anchor on the more recent SourceTS (Chainlink's on-chain `updatedAt`, fetch time for continuous sources) and look up the older source's price in a 30-minute rolling history at that moment. Published as `ocb_oracle_deviation_at_oracle_ts_pct`, feeding `ocb_oracle_max_deviation_pct`. Removes Chainlink heartbeat-lag inflating deviation; alignment misses count as `ocb_oracle_alignment_miss_total`.","Excluded by design. Redstone (push-pull, no continuous gauge to scrape without integration contract), Uniswap V3 TWAP (per-pool integration + derivation of same CEX prints), DIA (smaller footprint than the four kept), and aggregator-of-aggregators (CoinGecko, CMC, DefiLlama), re-aggregating already-aggregated data adds latency and hides per-source disagreement."],"license":"CC-BY-4.0"}