{"slug":"gas-estimation","title":"Most accurate gas oracle, live gap vs realized priority fee","subtitle":"Absolute gap in gwei between each oracle's predicted priority-fee tier and the realized percentile in the next mined block, measured per chain. Ranked on the p99 gap, the worst 1% of blocks, because that is where gas spikes hurt integrations.","category":"RPCs","metric":"Gap vs realized (gwei)","unit":"gwei","status":"live","higherIsBetter":false,"filters":null,"value":0.010251,"leader":{"name":"Owlracle","slug":"owlracle","value":0.010251},"rankings":[{"name":"Owlracle","slug":"owlracle","ms":{"p50":0.010251,"p90":0.00108622,"p99":0.000012,"mean":0.00485204},"successRate":99.6528,"sampleSize":5761},{"name":"MetaMask","slug":"metamask","ms":{"p50":0.0126844,"p90":0.00110088,"p99":0,"mean":0.456269},"successRate":99.9861,"sampleSize":28801},{"name":"PublicNode","slug":"publicnode-feehistory","ms":{"p50":0.0150299,"p90":0.00110122,"p99":0,"mean":0.0102977},"successRate":99.51729999999999,"sampleSize":28801},{"name":"Etherscan","slug":"etherscan","ms":{"p50":0.0179881,"p90":0.0011,"p99":0,"mean":0.019246},"successRate":99.6064,"sampleSize":17280}],"sparkline":[4.97089,3.07843,0.28601,14.0753,12.9448,0.413591,0.601565,5.97005,0.196672,19.5376,14.6033,0.186115,25.2712,17.5666,0.922223,13.8384,17.7123,12.7728,17.5107,2.42881,17.3645,6.6572,13.4893,25.7747,0.178965,5.94619,9.33005,8.40651,6.81614,2.26447,4.6663,11.2744,17.3308,0.794313,0.352797,5.48956,11.0256,13.2277,14.3213,10.363,5.52543,0.425292,12.3021,0.0790703,6.41411,5.45869,5.38199,4.32941,11.367,5.6827,2.26898,9.06778,5.72237,3.50971,18.9321,8.29209,11.616,6.36461,3.34269,6.44205,0.670965,12.5136,1.45422,21.3072,3.70603,3.94529,10.9069,9.44572,2.12419,1.42482,10.5065,0.875636,1.26595],"sampleSize":80643,"asOf":"2026-08-01T15:18:10.152Z","headline":"Owlracle leads gap vs realized (gwei) at 0.010 gwei (p50, 24h) on Most accurate gas oracle, live gap vs realized priority fee.","quote":"Owlracle leads gap vs realized (gwei) at 0.010 gwei (p50, 24h) on Most accurate gas oracle, live gap vs realized priority fee. Source: OpenChainBench (https://openchainbench.com/benchmarks/gas-estimation).","cite":{"plain":"OpenChainBench. \"Most accurate gas oracle, live gap vs realized priority fee\". Retrieved 2026-08-01. https://openchainbench.com/benchmarks/gas-estimation","bibtex":"@misc{ocb_gas_estimation,\n  author = {OpenChainBench},\n  title  = {Most accurate gas oracle, live gap vs realized priority fee},\n  year   = {2026},\n  url    = {https://openchainbench.com/benchmarks/gas-estimation},\n  note   = {Retrieved 2026-08-01}\n}","apa":"OpenChainBench. (2026). Most accurate gas oracle, live gap vs realized priority fee. Retrieved August 1, 2026, from https://openchainbench.com/benchmarks/gas-estimation","ris":"TY  - GEN\r\nAU  - OpenChainBench\r\nTI  - Most accurate gas oracle, live gap vs realized priority fee\r\nPY  - 2026\r\nUR  - https://openchainbench.com/benchmarks/gas-estimation\r\nY2  - 2026-08-01\r\nER  - \r\n"},"pageUrl":"https://openchainbench.com/benchmarks/gas-estimation","ogImage":"https://openchainbench.com/api/og/gas-estimation","source":"https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/gas-estimation","methodology":["Chains: Ethereum (chainid=1), Polygon PoS (chainid=137), Arbitrum One (chainid=42161). Ethereum and Polygon are EIP-1559 with dynamic base fee. Arbitrum is included as an L2 reference where priority fee converges to ~0 (centralised sequencer, no MEV auction); the bench shows this empirically. Actually-meaningful L2 cost is L1 data fee, planned for a separate bench. BNB Chain excluded (not EIP-1559). Avalanche C-Chain also collapses to ~0 priority.","Oracles per chain. Ethereum + Polygon: PublicNode feeHistory, Owlracle, Etherscan v2 (free tier), MetaMask. Avalanche: same set minus Etherscan (free plan restricted for chainid 43114).","Per-oracle endpoints. PublicNode `eth_feeHistory` on each chain's RPC; Owlracle `/v4/{eth|poly|avax}/gas` (slug per chain); Etherscan v2 `?chainid=<N>&module=gastracker&action=gasoracle`; MetaMask `gas.api.cx.metamask.io/networks/<N>/suggestedGasFees` (public no-key, EIP-1559 low/medium/high mapped to p25/p50/p90).","Cadences. PublicNode feeHistory and MetaMask every 12s per chain; Owlracle every 60s per chain (free quota ceiling); Etherscan every 15s per chain with a global rate-gate enforcing ≥6s between any two Etherscan requests across chains (no-key limit is 1 req/5s per IP, shared).","Tier normalization. Each oracle's named tiers (fast / standard / slow / safe / propose) are mapped onto a unified p25 / p50 / p75 / p90 / p99 scheme. The leaderboard ranks the p50 tier (the standard speed wallets use by default).","Realized priority fee. For each pending block, the harness pulls the full block via `eth_getBlockByNumber(.., true)` on the chain's primary RPC and computes p25/p50/p75/p90/p99 directly from the actual effective `maxPriorityFeePerGas` values across every included transaction. Every tier is a real percentile of the mined block, none are interpolated. Empty or low-tx blocks (`gas_realized_tx_count` near zero) are surfaced separately because the realized percentile is noisy when tx count is low.","Realized-side independence check. Each chain configures a second RPC on a different upstream (dRPC / native chain RPC) as `GAS_REALIZED_RPC_VERIFY_<CHAIN>`; on each block the harness cross-checks baseFee and increments `gas_realized_quorum_disagreement_total{chain, kind}` on mismatch. Primary is still trusted; the counter makes visible whether our ground truth is actually independent across upstreams.","Realized base fee. Recorded for completeness as `gas_realized_base_gwei{chain}` and per-oracle baseFee error as `gas_error_base_gwei{oracle, chain}`. Not the ranking signal since every EIP-1559 oracle inherits this from `eth_feeHistory` and converges.","Pending buffer. Per (oracle, chain) in-memory map of predictions waiting on a realized block. TTL is ~25 blocks (~5 minutes on Ethereum, ~50 seconds on Polygon due to faster blocks). Beyond that, predictions are dropped as no-longer-informative. Buffer growth surfaces via `gas_pending_buffer_size{oracle, chain}`.","Polling result classification. `ok`, `http_err`, `parse_err`, `throttled` (HTTP 429 or oracle-specific quota message), `timeout`. Counter `gas_oracle_call_total{oracle, result, chain}` powers the reliability column.","Ranking metric. The table ranks on the p99 of the absolute gap over 24h, not the p50. At current fee levels the typical-minute gaps are fractions of a micro-gwei apart across oracles (ranking noise); the p99 captures behaviour during the volatile minutes where a wrong prediction either overpays or misses the block. The typical p50 and p90 gaps stay visible as secondary columns.","Prediction age disclosure. `gas_prediction_age_seconds{oracle, chain}` records the wall-clock time between an oracle's poll returning and the realized block being graded. This surfaces the free-tier cadence asymmetry (Owlracle at 60s vs PublicNode at 12s vs Etherscan at 15s) so readers can see how much of an oracle's error is stale-sample rather than model quality; it is not part of the ranking, only a diagnostic column.","Over/under split. In parallel with the absolute-error histogram, the harness emits `gas_error_priority_over_gwei_histogram` (predicted > realized, cost = overpay) and `gas_error_priority_under_gwei_histogram` (predicted < realized, cost = transaction stuck). Same buckets. The two branches lets the leaderboard decompose asymmetric behaviour: inclusion-confidence oracles skew fat on the over side by design, percentile trackers skew fat on the under side during spikes.","Lag=2 secondary grade. `gas_error_priority_lag2_gwei_histogram` grades each prediction against the block 2 slots after its target, not the very-next block. Removes the latency-race bias where whoever scraped the mempool 100ms before us wins by construction; closer to the wallet UX (sign, broadcast, propagate) than block+1. Same buckets as the primary histogram so a leaderboard column can plot the two side by side.","Asymmetric Pinball Loss (APL). `gas_error_priority_apl_gwei_histogram` emits a proper scoring rule (Koenker & Bassett 1978): per sample `(1-τ)·over_gap` if the oracle over-predicted, else `τ·under_gap`, with τ=0.9. Encodes wallet UX asymmetry: under-prediction (tx stuck) is 9× more costly than over-prediction (small overpay). Same buckets as the abs error histogram. Rank-stable at n=few-hundred samples where p99 of abs error is still dominated by 2-3 tail blocks.","Covered rate. Share of time (24h) each oracle's posted p50-tier prediction was at or above the realized p50 priority fee, recorded as `ocb:gas_p50_covered:pct_24h` via a recording rule. Same-instant gauge comparison (current prediction vs latest realized block), a proxy pending a harness-side matched counter. High = errs on the side of inclusion; low = under-bids vs the block's realized median.","Excluded by design. (a) BNB Chain (not EIP-1559). (b) L2 OP Stack chains (Optimism, Base, Arbitrum), priority fee ≈ 0 there because sequencer is centralised, the relevant cost is L1 data fee which is a different metric and belongs in a separate bench. (c) Rough median oracles that publish only a single number (no tier breakdown). (d) Solana, different fee model entirely (lamports per CU, MEV via Jito), separate bench needed."],"license":"CC-BY-4.0"}