From a77b1380cefe7d5bf176fe3c5e4ce90cc0d6aff8 Mon Sep 17 00:00:00 2001 From: Flotapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Sun, 26 Jul 2026 16:41:46 +0200 Subject: [PATCH] data quality: reconcile provider lists + fix Mobula PM pill (#1509) * chain-kpis: register Sei + Mode + Ronin + Immutable zkEVM (DefiLlama slugs verified live) * data quality: reconcile provider lists + fix Mobula PM pill - rwa-yield-accuracy: drop BUIDL + BENJI (dormant, no Prom data) - token-quote-coverage: drop KyberSwap + ParaSwap (harness doesn't emit) - products/[slug]: remove Mobula + Codex from /prediction-markets pill - cross-chain-messaging-latency: strip 2 em-dashes (blocking validate) Data-quality audit found spec vs runtime drift on multiple benches: readers saw '5 providers' claims render as '2 providers'. Trim specs to actually-emitting providers so the leaderboard matches the promise. Mobula + Codex on the /prediction-markets pill was a routing bug (they're data APIs, not PM venues). Keep the pill for the 6 real PM venues (Polymarket, Kalshi, Limitless, Manifold, Myriad, Predexon). --- benchmarks/cross-chain-messaging-latency.yml | 6 ++-- benchmarks/rwa-yield-accuracy.yml | 30 +++---------------- benchmarks/token-quote-coverage.yml | 31 ++++---------------- harnesses/chain-kpis/cmd/script/registry.go | 18 ++++++++++++ src/app/products/[slug]/page.tsx | 9 ++++-- 5 files changed, 38 insertions(+), 56 deletions(-) diff --git a/benchmarks/cross-chain-messaging-latency.yml b/benchmarks/cross-chain-messaging-latency.yml index 1a87cb3e..32b14851 100644 --- a/benchmarks/cross-chain-messaging-latency.yml +++ b/benchmarks/cross-chain-messaging-latency.yml @@ -55,9 +55,11 @@ methodology: - "No canary transactions: every value on this page is a real user message. No wallet is funded, no gas is paid. Total observation cost is API polling." - "Circle CCTP not included: Circle's Iris API does not expose a list-recent endpoint, so passive polling is not feasible without maintaining nonce state via chain-scan on all ~10 CCTP source chains plus Solana. A CCTP bench is on the roadmap." +disclaimer: "These four protocols make different security tradeoffs that directly affect their delivery time. LayerZero and Hyperlane sign messages before source-chain finality, so they deliver in seconds. Chainlink CCIP and Axelar wait for source-chain finality before signing (12-20 min on Ethereum-source lanes). A lower p50 here does not mean a protocol is technically superior, it may mean it accepts more re-org risk. Use the per-corridor bench for each protocol to compare like-for-like lanes." + findings: - - "{{best_name}} currently leads end-to-end cross-chain delivery at {{best_p50}} (p50 aggregate across all corridors, 24h) across the four measured protocols." - - "Pre-finality signers (LayerZero, Hyperlane) deliver in the seconds-to-tens-of-seconds range. Chainlink CCIP and Axelar both add source-chain finality wait on Ethereum-source lanes (CCIP waits for Casper FFG epoch, Axelar waits for ~96 confirmations), so their aggregate p50 sits higher when Ethereum-source volume dominates their footprint. That is a security tradeoff visible directly in the data." + - "The numbers on this page reflect a security tradeoff, not just engineering speed. LayerZero and Hyperlane sign pre-finality and deliver in seconds. Chainlink CCIP and Axelar wait for source-chain finality (12-20 min on Ethereum-source lanes) before signing. A lower p50 here can mean faster delivery or less re-org protection, read both together." + - "{{best_name}} currently leads end-to-end cross-chain delivery at {{best_p50}} (p50 aggregate across all corridors, 24h). Pre-finality signers structurally dominate this aggregate on high-Ethereum-volume days." - "Per-corridor variance is large. The aggregate here is a headline; the individual bench for each protocol shows the per-source-chain breakdown that answers what you would feel in production." faq: diff --git a/benchmarks/rwa-yield-accuracy.yml b/benchmarks/rwa-yield-accuracy.yml index 5e94e365..dbabe887 100644 --- a/benchmarks/rwa-yield-accuracy.yml +++ b/benchmarks/rwa-yield-accuracy.yml @@ -83,32 +83,10 @@ prometheus: expected_freshness_seconds: 3600 providers: - - slug: buidl - name: BUIDL - tag: "BlackRock, Ethereum, monthly USDC dividend" - formula: "Sum of USDC Transfer events from the BUIDL treasury wallet to holders over 30d, divided by average BUIDL supply (share price fixed at 1 USD by design), annualized. Compared to BlackRock's stated APY." - queries: - p50: rwa_yield_deviation_bps_30d{token="buidl"} - p90: rwa_yield_deviation_bps_7d{token="buidl"} - p99: rwa_yield_deviation_bps_lifetime{token="buidl"} - mean: rwa_yield_delivered_bps_30d{token="buidl"} - success: rwa_yield_probe_ok{token="buidl"} - sample_size: rwa_yield_aum_usd{token="buidl"} - series: rwa_yield_delivered_bps_30d{token="buidl"} - - - slug: benji - name: BENJI - tag: "Franklin Templeton, Stellar + Ethereum, NAV appreciation" - formula: "NAV growth of the Franklin OnChain U.S. Government Money Fund share, NAV(t=now) vs NAV(t=30d ago), annualized. NAV published daily by Franklin, cross-checked against the on-chain price oracle. Compared to the stated 7-day SEC yield." - queries: - p50: rwa_yield_deviation_bps_30d{token="benji"} - p90: rwa_yield_deviation_bps_7d{token="benji"} - p99: rwa_yield_deviation_bps_lifetime{token="benji"} - mean: rwa_yield_delivered_bps_30d{token="benji"} - success: rwa_yield_probe_ok{token="benji"} - sample_size: rwa_yield_aum_usd{token="benji"} - series: rwa_yield_delivered_bps_30d{token="benji"} - + # BUIDL + BENJI dormant per the spec comment above (distributor mints + # conflate yield with new subscriptions on BUIDL, no on-chain NAV on + # BENJI). Removed from the public providers list until the harness + # can emit a defensible number; kept in methodology text as context. - slug: usdy name: USDY tag: "Ondo, Ethereum + Solana + Aptos + Sui, daily rebase" diff --git a/benchmarks/token-quote-coverage.yml b/benchmarks/token-quote-coverage.yml index cec78c69..33ec206a 100644 --- a/benchmarks/token-quote-coverage.yml +++ b/benchmarks/token-quote-coverage.yml @@ -165,32 +165,11 @@ providers: sample_size: sum(increase(token_quote_coverage_attempts_total{provider="jupiter"}[24h])) series: sum(rate(token_quote_coverage_success_total{provider="jupiter"}[1h])) / sum(rate(token_quote_coverage_attempts_total{provider="jupiter"}[1h])) * 100 - - slug: kyberswap - name: KyberSwap - tag: EVM multi-chain, Base + BNB + Robinhood - formula: "Rolling 24h ratio for provider=kyberswap. EVM launchpads only (Virtuals, Four.meme). Solana cells null." - queries: - p50: sum(increase(token_quote_coverage_success_total{provider="kyberswap"}[24h])) / sum(increase(token_quote_coverage_attempts_total{provider="kyberswap"}[24h])) * 100 - p90: sum(increase(token_quote_coverage_attempts_total{provider="kyberswap"}[24h])) - p99: sum(increase(token_quote_coverage_success_total{provider="kyberswap"}[24h])) / sum(increase(token_quote_coverage_attempts_total{provider="kyberswap"}[24h])) * 100 - mean: sum(increase(token_quote_coverage_success_total{provider="kyberswap"}[24h])) / sum(increase(token_quote_coverage_attempts_total{provider="kyberswap"}[24h])) * 100 - success: clamp_max(sum(increase(token_quote_coverage_success_total{provider="kyberswap"}[24h])) / sum(increase(token_quote_coverage_attempts_total{provider="kyberswap"}[24h])), 1) - sample_size: sum(increase(token_quote_coverage_attempts_total{provider="kyberswap"}[24h])) - series: sum(rate(token_quote_coverage_success_total{provider="kyberswap"}[1h])) / sum(rate(token_quote_coverage_attempts_total{provider="kyberswap"}[1h])) * 100 - - - slug: paraswap - name: ParaSwap - tag: EVM multi-chain, Base + BNB + Robinhood - formula: "Rolling 24h ratio for provider=paraswap. EVM launchpads only (Base, BNB, Robinhood). Solana cells null." - queries: - p50: sum(increase(token_quote_coverage_success_total{provider="paraswap"}[24h])) / sum(increase(token_quote_coverage_attempts_total{provider="paraswap"}[24h])) * 100 - p90: sum(increase(token_quote_coverage_attempts_total{provider="paraswap"}[24h])) - p99: sum(increase(token_quote_coverage_success_total{provider="paraswap"}[24h])) / sum(increase(token_quote_coverage_attempts_total{provider="paraswap"}[24h])) * 100 - mean: sum(increase(token_quote_coverage_success_total{provider="paraswap"}[24h])) / sum(increase(token_quote_coverage_attempts_total{provider="paraswap"}[24h])) * 100 - success: clamp_max(sum(increase(token_quote_coverage_success_total{provider="paraswap"}[24h])) / sum(increase(token_quote_coverage_attempts_total{provider="paraswap"}[24h])), 1) - sample_size: sum(increase(token_quote_coverage_attempts_total{provider="paraswap"}[24h])) - series: sum(rate(token_quote_coverage_success_total{provider="paraswap"}[1h])) / sum(rate(token_quote_coverage_attempts_total{provider="paraswap"}[1h])) * 100 - + # KyberSwap + ParaSwap declared in earlier revisions of this spec are + # currently not emitting on the harness (no token_quote_coverage_* + # metric with those provider labels in Prom). Removed from the public + # providers list until the harness ships probes for them, to avoid + # readers seeing a 5-provider claim that renders as 3. - slug: relay name: Relay tag: Multi-chain, Solana + Base + BNB + Robinhood, no key diff --git a/harnesses/chain-kpis/cmd/script/registry.go b/harnesses/chain-kpis/cmd/script/registry.go index d3a5ffa4..b2328b70 100644 --- a/harnesses/chain-kpis/cmd/script/registry.go +++ b/harnesses/chain-kpis/cmd/script/registry.go @@ -98,4 +98,22 @@ var Registry = []Chain{ // asset (Mobula symbol HYPE resolves to the correct market data, // ~$58 spot / ~$13.9B mcap verified live 2026-07-25). {Slug: "hyperliquid", DefiLlama: "Hyperliquid L1", Mobula: "HyperEVM", NativeSymbol: "HYPE"}, + // Sei EVM (chain 1329). Cosmos SDK L1 with parallel-execution EVM + // layer. DefiLlama tracks it as "Sei" (verified /v2/chains 2026-07-26). + // Mobula left empty until the free-tier blockchains endpoint is + // re-accessible with a key; the KPI page renders fine with just + // DefiLlama fees/TVL/stables. Native SEI serves as gas for both + // the Cosmos and EVM sides. + {Slug: "sei", DefiLlama: "Sei", Mobula: "", NativeSymbol: "SEI"}, + // Mode (chain 34443). OP Stack L2 in the Base ecosystem, DeFi + AI + // positioning. DefiLlama slug "Mode" verified. + {Slug: "mode", DefiLlama: "Mode", Mobula: "", NativeSymbol: "ETH"}, + // Ronin (chain 2020). Sky Mavis' EVM gaming L1, home of Axie / + // Pixels and a broader gaming stack. DefiLlama slug "Ronin" verified. + // RON native token. + {Slug: "ronin", DefiLlama: "Ronin", Mobula: "", NativeSymbol: "RON"}, + // Immutable zkEVM (chain 13371). Polygon CDK zkEVM L2 dedicated to + // Web3 gaming, operated by Immutable. DefiLlama slug "Immutable zkEVM" + // verified — the space is intentional and matches /v2/chains casing. + {Slug: "immutable", DefiLlama: "Immutable zkEVM", Mobula: "", NativeSymbol: "IMX"}, } diff --git a/src/app/products/[slug]/page.tsx b/src/app/products/[slug]/page.tsx index 9ba71f1f..73d9a7a0 100644 --- a/src/app/products/[slug]/page.tsx +++ b/src/app/products/[slug]/page.tsx @@ -568,14 +568,19 @@ export default async function ProviderPage({ jump from a venue/data provider product page to the PM coverage hub. Hard-coded slug list, same shape as the HL companion treatment elsewhere. */} + {/* Prediction-market venues only. Mobula + Codex were + previously in this list because they surface PM + pricing feeds inside their APIs, but their /products + pages read primarily as data-API profiles and the + "View on /prediction-markets" pill looked misleading + alongside their DEX / aggregator / RPC benches. + Removed 2026-07-26. */} {( p.slug === "polymarket" || p.slug === "kalshi" || p.slug === "limitless" || p.slug === "manifold" || p.slug === "myriad" || - p.slug === "mobula" || - p.slug === "codex" || p.slug === "predexon" ) && ( <>