From d14eed5497f80d9bff725f9d0cd439dd74a16d25 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier Date: Wed, 3 Jun 2026 11:33:44 +0200 Subject: [PATCH 1/3] sync(topN): lift Top-N to parent so chart and ledger share one value --- src/components/distribution-chart.tsx | 6 +++- src/components/donut-chart.tsx | 4 ++- src/components/ledger-table.tsx | 6 ++-- src/components/ranked-bar-chart.tsx | 4 ++- src/components/time-series-chart.tsx | 4 ++- src/hooks/use-top-n.ts | 45 +++++++++++++++------------ 6 files changed, 43 insertions(+), 26 deletions(-) diff --git a/src/components/distribution-chart.tsx b/src/components/distribution-chart.tsx index 77e85fb4..9092d744 100644 --- a/src/components/distribution-chart.tsx +++ b/src/components/distribution-chart.tsx @@ -50,6 +50,7 @@ export function DistributionChart({ excluded: controlledExcluded, onToggleExclude, onResetExcluded, + topNControl, headerActions, }: { benchmark: Benchmark; @@ -61,6 +62,7 @@ export function DistributionChart({ * on the same baseline as the chart title instead of floating in * the card corner or eating a footer row of its own. */ headerActions?: ReactNode; + topNControl?: { topN: number | null; setTopN: (n: number | null) => void }; }) { const { results, unit, higherIsBetter } = benchmark; const { excluded, toggle, reset } = useChartExclusion( @@ -68,6 +70,8 @@ export function DistributionChart({ onToggleExclude, onResetExcluded, ); + // topNControl is destructured from the function signature below — accept it via Props. + const colors = useMemo(() => buildProviderColors(results), [results]); @@ -84,7 +88,7 @@ export function DistributionChart({ ); // Top-N selector — shared shape with the other chart views so the // reader can focus on the top tail without losing the option to widen. - const { topN, setTopN, topNOptions } = useTopN(sortedAll.length); + const { topN, setTopN, topNOptions } = useTopN(sortedAll.length, { external: topNControl }); const sorted = useMemo( () => (topN == null ? sortedAll : sortedAll.slice(0, topN)), [sortedAll, topN], diff --git a/src/components/donut-chart.tsx b/src/components/donut-chart.tsx index 7487b042..fd1e0b75 100644 --- a/src/components/donut-chart.tsx +++ b/src/components/donut-chart.tsx @@ -38,12 +38,14 @@ export function DonutChart({ benchmark, excluded: controlledExcluded, onToggleExclude, + topNControl, headerActions, }: { benchmark: Benchmark; excluded?: Set; onToggleExclude?: (slug: string) => void; headerActions?: ReactNode; + topNControl?: { topN: number | null; setTopN: (n: number | null) => void }; }) { const { results } = benchmark; const { excluded, toggle } = useChartExclusion( @@ -58,7 +60,7 @@ export function DonutChart({ // Top-N selector — clip the cohort BEFORE applying exclusion so the // "top N" semantic matches what every other view shows. Sized off // the live provider count via the shared `useTopN` hook. - const { topN, setTopN, topNOptions } = useTopN(liveAll.length); + const { topN, setTopN, topNOptions } = useTopN(liveAll.length, { external: topNControl }); const liveClipped = useMemo( () => topN == null diff --git a/src/components/ledger-table.tsx b/src/components/ledger-table.tsx index f5350a8e..ae6b081f 100644 --- a/src/components/ledger-table.tsx +++ b/src/components/ledger-table.tsx @@ -20,6 +20,7 @@ type Props = { * providers in the same order. When null/undefined the ledger uses * the headline p50 metric. */ activePanel?: MetricPanel | null; + topN?: number | null; }; /** @@ -29,7 +30,7 @@ type Props = { * to recognition; sort order remains mechanical (ascending p50) and no * row is highlighted as the "winner". */ -export function LedgerTable({ benchmark, activePanel }: Props) { +export function LedgerTable({ benchmark, activePanel, topN }: Props) { const { results, extras } = benchmark; const unit = activePanel?.unit ?? benchmark.unit; const higherIsBetter = activePanel?.higherIsBetter ?? benchmark.higherIsBetter; @@ -66,7 +67,7 @@ export function LedgerTable({ benchmark, activePanel }: Props) { // The chart's panel tabs still surface those providers via // seriesByProvider when the reader switches metric, so coverage isn't // lost — only the noisy ledger rows are pruned. - const sorted = [...results] + const sortedAll = [...results] .filter((r) => { if (activePanel) { const v = activePanel.values[r.slug]; @@ -79,6 +80,7 @@ export function LedgerTable({ benchmark, activePanel }: Props) { const bv = pickValue(b); return higherIsBetter ? bv - av : av - bv; }); + const sorted = topN == null ? sortedAll : sortedAll.slice(0, topN); const colors = useMemo(() => buildProviderColors(results), [results]); const allSeries = Object.values(extras.series24h).flat(); diff --git a/src/components/ranked-bar-chart.tsx b/src/components/ranked-bar-chart.tsx index 544637e4..98dfee13 100644 --- a/src/components/ranked-bar-chart.tsx +++ b/src/components/ranked-bar-chart.tsx @@ -22,6 +22,7 @@ type Props = { /** Optional slot rendered in the chart's header row, right-aligned. * BenchmarkBody passes the here. */ headerActions?: import("react").ReactNode; + topNControl?: { topN: number | null; setTopN: (n: number | null) => void }; }; export function RankedBarChart({ @@ -29,6 +30,7 @@ export function RankedBarChart({ excluded: controlledExcluded, onToggleExclude, onResetExcluded, + topNControl, headerActions, }: Props) { const { excluded, toggle, reset } = useChartExclusion( @@ -75,7 +77,7 @@ export function RankedBarChart({ // the headline metric (`allRows`), via the shared `useTopN` hook so // every chart view (ranked bar, time series, distribution, donut) // agrees on the option set and the empty-toolbar rule. - const { topN, setTopN, topNOptions } = useTopN(allRows.length); + const { topN, setTopN, topNOptions } = useTopN(allRows.length, { external: topNControl }); const rows = useMemo(() => { if (topN == null) return allRows; return allRows.slice(0, topN); diff --git a/src/components/time-series-chart.tsx b/src/components/time-series-chart.tsx index 3ae652fc..0626a608 100644 --- a/src/components/time-series-chart.tsx +++ b/src/components/time-series-chart.tsx @@ -34,6 +34,7 @@ type Props = { seriesOverride?: Record; metricLabelOverride?: string; unitOverride?: Benchmark["unit"]; + topNControl?: { topN: number | null; setTopN: (n: number | null) => void }; }; type Range = "1h" | "6h" | "24h" | "7d" | "30d"; @@ -72,6 +73,7 @@ export function TimeSeriesChart({ metricLabelOverride, unitOverride, onResetExcluded, + topNControl, headerActions, }: Props) { const [range, setRange] = useState("24h"); @@ -157,7 +159,7 @@ export function TimeSeriesChart({ // Top-N selector — sized off the post-filter line count via the // shared `useTopN` hook so the option set agrees across every // chart view on the bench page. - const { topN, setTopN, topNOptions } = useTopN(allLines.length); + const { topN, setTopN, topNOptions } = useTopN(allLines.length, { external: topNControl }); const lines = useMemo(() => { if (topN == null) return allLines; return allLines.slice(0, topN); diff --git a/src/hooks/use-top-n.ts b/src/hooks/use-top-n.ts index 15072169..cb614545 100644 --- a/src/hooks/use-top-n.ts +++ b/src/hooks/use-top-n.ts @@ -4,39 +4,44 @@ import { useEffect, useMemo, useState } from "react"; /** * Shared Top-N selector state for chart views. Sized off the count - * of providers that actually have data on the active metric — passing - * the raw cohort makes the toolbar offer useless options (Top 10 when - * only 7 providers scored). The hook curates the option set so an N - * button only appears when at least N+1 providers exist, plus an - * "All" anchor whenever any filtering option is offered. + * of providers that actually have data on the active metric. * - * Returned `topN`: - * - `null` means "show every provider that has data" - * - `number` means "slice to the first N (already sorted upstream)" + * Two control modes: + * - Uncontrolled (default): the hook owns the value via useState. + * - Controlled via `options.external`: the parent owns the value so + * every chart view + the ledger can share one Top-N selection. * - * Returned `topNOptions` is the exact button list the chart should - * render, in order. Hide the toolbar entirely when the array is empty - * (cohort too sparse for filtering to matter). - * - * `useEffect` gracefully resets to "All" when the active selection - * disappears from the option set (reader swapped to a sparser panel). + * `options.disabled` short-circuits the option set (returns []) which + * hides the selector entirely. */ -export function useTopN(scoredCount: number): { +export function useTopN( + scoredCount: number, + options?: { + disabled?: boolean; + external?: { topN: number | null; setTopN: (n: number | null) => void }; + }, +): { topN: number | null; setTopN: (n: number | null) => void; topNOptions: (number | null)[]; } { + const disabled = options?.disabled === true; + const external = options?.external; const topNOptions = useMemo<(number | null)[]>(() => { + if (disabled) return []; const opts: (number | null)[] = []; for (const n of [5, 10, 20]) if (n < scoredCount) opts.push(n); if (opts.length > 0) opts.push(null); return opts; - }, [scoredCount]); + }, [scoredCount, disabled]); const initial = topNOptions[0] ?? null; - const [topN, setTopN] = useState(initial); + const [topNLocal, setTopNLocal] = useState(initial); + const topN = external ? external.topN : topNLocal; + const setTopN = external ? external.setTopN : setTopNLocal; useEffect(() => { - if (topN == null) return; - if (!topNOptions.includes(topN)) setTopN(null); - }, [topNOptions, topN]); + if (external) return; + if (topNLocal == null) return; + if (!topNOptions.includes(topNLocal)) setTopNLocal(null); + }, [topNOptions, topNLocal, external]); return { topN, setTopN, topNOptions }; } From a8c9dc50f972924e092062881834d4d394ba20e6 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier Date: Wed, 3 Jun 2026 13:03:39 +0200 Subject: [PATCH 2/3] docs(network-fees): drop the chain count from subtitle + seo description User reads cleaner without the number; the list of chains right after it already says which 20 are tracked. --- benchmarks/network-fees.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmarks/network-fees.yml b/benchmarks/network-fees.yml index 6a679cd3..c1de25c4 100644 --- a/benchmarks/network-fees.yml +++ b/benchmarks/network-fees.yml @@ -4,8 +4,8 @@ slug: network-fees number: "031" title: Current native transfer fee across L1 and L2 blockchains seo_title: "Cheapest blockchain transaction fee 2026: L1 and L2 USD live (Ethereum, Arbitrum, Optimism, Base, zkSync, Solana, BNB, Avalanche)" -seo_description: "Live USD cost of a native-token transfer across 20 L1 and L2 chains. L1: Ethereum, Solana, BNB, Avalanche, TRON, Cardano, SUI, TON, Stellar, Litecoin, Monero. L2: Arbitrum, Optimism, Base, zkSync, Linea, Scroll, Blast, Mantle, Taiko. Slow/standard/fast tiers refreshed every 30s." -subtitle: "Current USD cost of moving the chain's native asset across 20 L1 and L2 chains, refreshed every 30 seconds." +seo_description: "Live USD cost of a native-token transfer across L1 and L2 chains. L1: Ethereum, Solana, BNB, Avalanche, TRON, Cardano, SUI, TON, Stellar, Litecoin, Monero. L2: Arbitrum, Optimism, Base, zkSync, Linea, Scroll, Blast, Mantle, Taiko. Slow/standard/fast tiers refreshed every 30s." +subtitle: "Current USD cost of moving the chain's native asset across L1 and L2 chains, refreshed every 30 seconds." seo_intro: | This page shows the live USD cost of sending the native token on every major Layer-1 blockchain. We sample the chain-native fee market (eth_feeHistory for EVM chains, getRecentPrioritizationFees for Solana, koios protocol params for Cardano, fee_stats for Stellar, fee_estimate for Monero, mempool oracles for Litecoin, getChainParameters for TRON, sui_getReferenceGasPrice for SUI, hardcoded typical observed for TON), convert to the chain's smallest unit, then multiply by the native-token USD price pulled from Mobula every 30 seconds. The result is a head-to-head comparison of what it actually costs an end user to move one unit of value on each chain, rather than a gas-price comparison in gwei or lamports which is meaningless across protocols. From 976e4e0c14649a89de4030205a5ad7e08ea7eb69 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier Date: Wed, 3 Jun 2026 15:36:52 +0200 Subject: [PATCH 3/3] feat(hl-frontends): pivot headline to USD revenue, add 7d/30d ranges --- benchmarks/hyperliquid-frontends.yml | 710 +++++++++++++-------------- 1 file changed, 346 insertions(+), 364 deletions(-) diff --git a/benchmarks/hyperliquid-frontends.yml b/benchmarks/hyperliquid-frontends.yml index 9c7eb94d..2454ef8b 100644 --- a/benchmarks/hyperliquid-frontends.yml +++ b/benchmarks/hyperliquid-frontends.yml @@ -2,119 +2,91 @@ slug: hyperliquid-frontends number: "030" -title: Hyperliquid frontends user-cost benchmark -seo_title: "Hyperliquid frontends 2026: effective builder fee bps, $/user efficiency, fee discipline (Phantom, Axiom, OKX, GMGN, pvp.trade)" -seo_description: "Live benchmark of Hyperliquid frontends ranked by how much they extract from users, not by raw volume. Effective builder fee in bps (cap 100), D7 cohort retention per builder, and USD captured per active trader. Observational, on-chain attribution via builder code field, methodology public." -subtitle: How much each Hyperliquid frontend charges its users via the on-chain builder code. Effective fee in basis points (cap 100), summed over 24h. Lower = more aligned with traders. +title: Hyperliquid frontends builder revenue leaderboard +seo_title: "Hyperliquid frontends 2026: builder fee revenue USD live (Phantom Perps, MetaMask, Rabby, Insilico, Axiom, pvp.trade) over 24h, 7d, 30d" +seo_description: "Live USD revenue collected by every Hyperliquid frontend via the on chain builder code field. Phantom Perps, MetaMask, Rabby, Insilico, based.app, OneKey, Axiom, pvp.trade and 50 others ranked by 24h, 7d and 30d builder fees. Data source is a local hl node tailing the Hyperliquid mainnet fill stream." +subtitle: How much USD builder fee revenue each Hyperliquid frontend collected over the rolling 24h, 7 day and 30 day windows. Data from a local hl node tailing every fill on mainnet. category: Trading status: live -metric: Effective builder fee (24h, bps) -unit: bps -higher_is_better: false +metric: Builder fees collected (USD) +unit: usd +higher_is_better: true disclaimer: | - Volume share dashboards already exist (ASXN, Coinmarketman, Flowscan, Allium). OCB leads with user cost instead. Effective fee is a volume weighted `builder_fee / notional` over the rolling 24h, so fee free promo windows pull it down. Native HL UI orders carry no builder code and are excluded; the bench tracks third party frontends that opt into the builder field. Companion metrics surface slippage, freshness, taker share, asset concentration. Local hl-node source, sub minute freshness. + Ranking is by raw builder fee revenue in USD, not by value for users. Bigger number means more fees collected via the on chain builder code field. For the trader cost perspective, switch to the Effective fee bps companion tab. Native Hyperliquid UI orders carry no builder code and are excluded. Data from a local hl node tailing every fill on mainnet. + seo_intro: | - Every Hyperliquid order carries an optional on chain `builder` - field. Frontends like Phantom Perps, Axiom, MetaMask, pvp.trade, - Insilico, DefiApp, Dexari and Okto use this field to claim a - share of taker fees as their own rebate (capped at 100 basis - points on perps, 1000 on spot). The same field is the cleanest - user cost signal available. Dividing the total `builder_fee` - captured by the total notional routed gives the effective fee - each frontend charges its users on top of the base Hyperliquid - fee schedule. This benchmark publishes that ratio per builder - in sub minute freshness, reading the local hl-node fills stream - on the OCB infrastructure rather than the public daily CSV bucket. - The default chart shows the 24h volume weighted effective fee - in basis points. A tab switcher above the chart surfaces five - companion views computed from the same stream. Slippage proxy - is the per fill basis point gap between executed price and the - previous trade on the same asset, averaged over 24h, so a - frontend with a low fee but a wide routing path shows the real - user cost. Time since last fill is an outage detector, seconds - since the most recent attributed fill for that builder. Fills - per minute is the rolling activity rate. Taker share is the - fraction of fills that crossed the spread, separating aggressive - wallet style UIs from pro maker heavy terminals. Volume routed - is the headline number every other dashboard publishes, kept - here as a companion not the ranking driver. + This page answers one question. Which Hyperliquid frontend collected the most builder fee revenue in USD over the last 24 hours, 7 days and 30 days. Every Hyperliquid order can attach an optional on chain builder field. Frontends like Phantom Perps, MetaMask, Rabby, Insilico, based dot app, OneKey, Axiom and pvp dot trade write their wallet address into this field on every fill they route, then collect a share of the taker fee as their own rebate (capped at 100 basis points on perps, 1000 on spot). The bench ranks 60 frontends by the dollar amount each one collected through this mechanism, surfacing the real revenue scale of the Hyperliquid frontend ecosystem rather than a percentage ratio that hides the actual numbers. Data comes from a local hl node operated on OCB infrastructure tailing the Hyperliquid mainnet fill stream. A Go harness reads every block of attributed fills, aggregates per builder over rolling 24h, 7 day and 30 day windows in memory, and exposes Prometheus gauges that this page consumes. End to end staleness from fill landing on chain to page render is typically under one minute. Companion tabs surface volume routed, unique users, the trader perspective effective fee in basis points, and an outage detector. + abstract: | - We compute a family of quality metrics per Hyperliquid builder - code by tailing the fills stream of a local hl-node operated - on OCB infrastructure. The node writes every block of fills - to `node_fills_by_block/hourly/YYYYMMDD/HH`, one JSON object - per line, with the `builder` address and `builderFee` on every - attributed fill. A Go harness tails these files every 30 seconds, - maintains a rolling 24h window in memory, and exposes a stable - Prometheus surface that this page consumes. The headline metric - is effective fee in basis points, `sum(builder_fee_usd) / - sum(notional_usd) * 10000` over the rolling 24h, volume weighted - across every fill attributed to the builder address. Five - companion metrics share the same stream. Price deviation bps is - the per fill `|fill_px - last_seen_px_same_asset| / last_seen_px - * 10000` averaged over the window, a proxy for execution quality. - Time since last fill in seconds catches frontends whose routing - pipeline is down. Fills per minute is the rolling activity rate. - Taker share is `crossed_fills / total_fills`. Top three assets - by routed notional per builder reveals routing strategy and - surfaces HIP-3 perps. The harness keeps a curated `builders.json` - mapping of EVM addresses to frontend slugs, currently 60 entries - covering wallets, terminals, social trading apps, bots, and - HIP-3 perps deployers, seeded from the public DefiLlama - dimension adapter registry plus behavioral cross reference of - the top unidentified addresses. Builder addresses with valid - fills outside this registry route through the same `builder` - field but stay invisible to this leaderboard until added by a - public PR. The bench does not place trades, - does not touch private keys, and does not depend on any internal - Mobula service. + The bench ranks 60 Hyperliquid frontends by the USD value of builder + fees they collected over rolling 24 hour, 7 day and 30 day windows. + Source data is a local hl node operated on OCB infrastructure that + writes every block of fills to disk as one JSON line. A Go harness + tails these files, decodes each fill, and increments per builder + hourly buckets keyed by the UTC hour floor of the fill timestamp. + At publish time, the harness sums the recent 24, 168 and 720 hourly + buckets to compute the 24h, 7d and 30d revenue figures, exposes + them as Prometheus gauges (hl_frontend_fees_usd_24h_v2, _7d_v2, + _30d_v2), and this page reads the gauges every 30 seconds. The + registry of tracked builder addresses lives at + miniapps hyperliquid frontends local builders dot json in the + open mobula api repo, currently 60 entries seeded from DefiLlama + dimension adapters plus a behavioral cross reference pass on the + top unidentified addresses. New builders ship via public PR. The + bench does not place trades, does not touch private keys, and does + not depend on any internal Mobula service. + methodology: - - "Data source. A local hl-node operated on OCB infrastructure tails the Hyperliquid mainnet and writes every block of attributed fills to `node_fills_by_block/hourly/YYYYMMDD/HH`. Each line is one block, the `events` array carries one entry per fill, and every fill with a builder code includes the `builder` address plus `builderFee` in USDC. Sub minute freshness, no dependency on the public daily CSV bucket." - - "Cadence. The Go harness re reads the current and previous hourly files every 30 seconds, parses appended lines, and maintains a rolling 24h window in memory. Prometheus scrapes the metrics every 30 seconds via a Caddy reverse proxy with basic auth. End to end staleness from fill landing on chain to bench page render is typically under 60 seconds." - - "Effective fee calculation. For each builder over the rolling 24h window: `effective_fee_bps = sum(builder_fee_usd) / sum(notional_usd) * 10000`, where `notional_usd = px * sz` summed over every fill. Volume weighted, not flat averaged, so a builder routing one large trade at 1 bps and many tiny trades at 10 bps lands near the rate the biggest dollars actually paid." - - "USD per user efficiency. `fees_per_user_usd = sum(builder_fee_usd) / count(distinct user)` over the rolling 24h window. Surfaces predatory pricing more clearly than effective fee alone. A builder with 5 bps effective fee and $50 per user is extracting differently than one with the same 5 bps and $0.50 per user." - - "Price deviation, slippage proxy. For each new fill on asset A by builder B: `dev_bps = abs(fill_px - last_seen_px_on_A) / last_seen_px * 10000`, where `last_seen_px` is the most recent fill price on that asset across the whole cohort. Averaged per builder over the rolling 24h. Proxy for execution quality. A frontend that routes to less liquid venues or slower order paths shows higher deviation, a direct user cost on top of the fee column." - - "Outage detector. `last_fill_age_seconds = now - max(fill.time for fills in window)` per builder. During active hours the cohort baseline runs under one minute, so anything above a few minutes is a real anomaly. Catches frontends whose routing pipeline is down and frontends that quietly stopped operating but still have their builder code in circulation." - - "Taker share. Each fill has a boolean `crossed` field, true when the fill crossed the spread (taker), false when it rested in the book (maker). `taker_pct = crossed_fills / total_fills` per builder over the window. Separates aggressive instant execution UIs from pro maker heavy terminals." - - "Per asset top three. For each builder, the three assets with the highest notional volume in the rolling 24h. Cardinality bounded at the cohort size times 3 ranks (currently 60 builders × 3 = 180 series). The `asset` label rotates as concentration shifts. Reveals routing strategy and surfaces HIP-3 perps (xyz:, km:, cash: prefixes) that the older Hyperliquid frontends do not list." - - "Builder registry. `miniapps/hyperliquid-frontends-local/builders.json` is a hand curated `[{slug, name, address, valid_from, notes}]` array, currently 60 entries seeded from DefiLlama's open source dimension adapter registry plus a behavioral cross reference pass on the top unidentified addresses. Cohort spans wallets, pro terminals, social and PvP UIs, automated bots, signal apps, and HIP-3 deployers. New addresses ship via public PR." - - "Excluded by design. Native HL UI orders carry no builder code so they are not user attributable by this method. Roughly 95 percent of Hyperliquid fills land without a builder field. The 5 percent that do are the frontend ecosystem this bench measures." - - "Reproducibility. Harness source at `miniapps/hyperliquid-frontends-local/` in the mobula-api repo (Go). Anyone running their own hl-node can clone, point the `-data` flag at their `node_fills_by_block/hourly` root, run the binary against a Prometheus scraper, and reproduce these metrics. No private API keys, no internal Mobula service dependency." - - "Methodology versioning. Any change (registry additions, formula tweaks, exclusion thresholds, window sizes) ships as a public PR. Major changes run a parallel period publishing old and new metric series side by side under a `_v2` suffix until cutover." + - "Data source. A local hl node operated on OCB infrastructure tails the Hyperliquid mainnet and writes every block of attributed fills to node_fills_by_block hourly YYYYMMDD HH on local disk. Each line is one JSON block, the events array carries one entry per fill, and every fill that opted into the builder code attribution system includes the builder address plus builderFee in USDC." + - "Cadence. The Go harness re reads the current and previous hourly files every 30 seconds, parses appended lines, and updates per builder hourly buckets keyed by the UTC hour floor of the fill timestamp. Prometheus scrapes the metrics every 30 seconds via a Caddy reverse proxy with basic auth. End to end staleness from fill landing on chain to bench page render is typically under one minute." + - "Headline calculation. For each builder over the last 24 rolling hours, we sum the builderFee USD values of every attributed fill. The figure is the raw amount of USDC the frontend collected through the builder code field. The 7 day and 30 day figures sum the same field over the last 168 and 720 hourly buckets respectively, so the metric is consistent across the three ranges." + - "Window mechanics. The harness keeps a small in memory hourly bucket map per builder going back 30 days. Memory footprint is about 350 KB total for 60 builders. Older buckets are pruned on every publish. This is cheaper than keeping fill level granularity for 30 days and lets the bench expose the three ranges without expanding the live fill window." + - "Volume companion. hl_frontend_volume_usd_24h_v2, _7d_v2 and _30d_v2 are computed the same way on the px times sz product of every fill. They feed the Volume tabs." + - "Users 24h. Count of unique wallet addresses that placed at least one attributed fill on this builder in the last 24 hours. Computed on the fill level window, not the hourly buckets, because uniqueness requires the full set." + - "Effective fee bps companion. Volume weighted ratio computed as sum of builder fees divided by sum of notional, times ten thousand, over the rolling 24h window. Surfaces the trader perspective on cost. Volume share dashboards rank frontends by raw notional, this column ranks them by what a representative dollar of flow paid them." + - "Time since last fill. Seconds elapsed since this builder's most recent attributed fill. During active hours the cohort baseline runs under one minute, so anything above a few minutes is a real anomaly. Catches frontends whose routing pipeline is down and frontends that quietly stopped operating but still have their builder code in circulation." + - "Builder registry. miniapps hyperliquid frontends local builders dot json is a hand curated array of slug, name, address and notes for every tracked frontend, currently 60 entries. New addresses ship via public PR. Builder addresses outside the registry remain visible in the raw node stream but stay off the leaderboard until added." + - "Exclusions. Native Hyperliquid UI orders carry no builder code and are not user attributable by this method. Roughly 95 percent of Hyperliquid fills land without a builder field. The 5 percent that do are the frontend ecosystem this bench measures." + - "Reproducibility. Harness source at miniapps hyperliquid frontends local in the mobula api repo, written in Go. Anyone running their own hl node can clone, point the data flag at their node_fills_by_block hourly root, run the binary against a Prometheus scraper, and reproduce these metrics." + - "Failures. Any read error on the hourly files leaves the previous gauge values in place. Hourly bucket pruning is idempotent. Restarts replay the warmup window from disk before going live tail." + findings: - - "Effective fee spread is 10x across the cohort. Insilico and Axiom both clock 1.00 bps on the last 24h of attributed flow, the cheapest transparent flat in the set. MetaMask sits at 10.00 bps, the practical on-chain cap most frontends respect, making it the most extractive currently tracked. Phantom Perps lands at 5.22, in line with the wallet-integrated tier." - - "Fee alone is half the story. DefiApp executes tightest at 1.90 bps price deviation despite charging 5.02 bps in builder fee. Dexari deviates 25.83 bps, 13x the cohort median of about 3 bps, on top of its 8.91 bps fee. A user paying Dexari to route their flow is paying twice: once at the fee line, once at the fill price." - - "Volume and user-cost are uncorrelated. Phantom Perps routes 19.4M USD in 24h at 5.22 bps. Insilico routes 7.9M USD at 1.00 bps. MetaMask routes 5M USD at 10 bps. The leaderboard most HL dashboards publish (volume share) ranks Phantom first; the leaderboard users actually care about (what each routed dollar pays) ranks Insilico and Axiom on top." - - "Two outage signals are currently firing. Dexari's last attributed fill is 19 minutes stale against a cohort baseline under 1 minute. Okto has zero fills in 24h, fully inactive. The sub-minute hl-node freshness lets the bench distinguish 'no flow yet today' from 'frontend down', a gap the daily CSV pipeline could not close." - - "Taker share separates aggressive UIs from pro terminals. pvp.trade fills 100% taker, Phantom 99.4%, MetaMask 97.9%, all instant execution wallets that cross the spread by default. Insilico sits at 80.6%, the most maker heavy in the cohort, consistent with its workstation positioning where users place resting limit orders rather than market buying." - - "Asset concentration reveals routing strategy. Phantom is 51% BTC weighted (9.9M of 19.4M USD in 24h on BTC alone). DefiApp is the only frontend with HYPE as its #1 asset. Dexari and MetaMask both surface HIP-3 perps in their top three (xyz:TSLA, xyz:CL crude), a feature that does not exist on the older Hyperliquid frontends, useful for traders looking for stock perps exposure." + - "{{best_name}} leads the leaderboard at {{best_p50}} in builder fees collected over the last 24 hours." + - "Top 3 frontends typically capture the majority of attributed builder fee revenue on Hyperliquid mainnet on any given day." + - "{{name:phantom-perps}} sits at {{p50:phantom-perps}} on the 24h view, consistently among the largest revenue collectors thanks to consumer wallet integration." + - "{{name:metamask}} returns {{p50:metamask}} on the 24h view, sustained by a high effective fee bps on a wallet integrated user base." + - "{{name:insilico}} returns {{p50:insilico}} on the 24h view. Pro terminal frontends sit a tier below consumer wallets in raw revenue because their lower effective fee leaves more on the trader side." + - "USD figures move with both volume and effective fee. A frontend can climb the leaderboard by routing more notional or by widening its fee, the bench surfaces both via companion tabs." + - "The 7 day and 30 day ranges smooth out promo cycles and one off campaigns. Use those for ranking stability, the 24h view for current activity." + faq: - - q: "Why does OpenChainBench not show Hyperliquid volume share?" - a: "Volume share is already published cleanly by ASXN HyperScreener, Coinmarketman HyperTracker, Flowscan, Allium, and at least three Dune dashboards. Republishing it would add no value. The unmeasured part of the frontend question is user cost: how much does each frontend take per dollar routed, and how stable is that take rate. That's what this bench answers. Raw yesterday's UTC notional per builder is still exposed as a secondary metric for readers who want it; it just doesn't drive the headline ranking." - - q: "How is the effective fee actually computed?" - a: "A local hl-node operated on OCB infrastructure tails the Hyperliquid mainnet and writes every block of attributed fills to disk. A Go harness re reads the current hourly file every 30 seconds. For each builder in our registry, we sum `builderFee` (USD) and `px * sz` (notional USD) over every fill in the rolling 24h window, then compute `sum(builder_fee) / sum(notional) * 10000`. That's the volume weighted effective fee in basis points, what a representative dollar of flow paid that frontend. End to end staleness from fill landing on chain to bench page render is typically under 60 seconds." - - q: "What's the on-chain cap?" - a: "Hyperliquid caps builder fees at 100 basis points on perps and 1000 basis points on spot, configured via the `ApproveBuilderFee` action signed by each user's main wallet. The bench's headline is denominated in basis points so 100 = the on-chain cap and 0 = fully waived rebate. Most frontends sit well below the cap; the bench surfaces who sits where." + - q: "What does this benchmark measure?" + a: "The USD value of builder fees each Hyperliquid frontend collected over rolling 24 hour, 7 day and 30 day windows. A builder fee is the optional rebate the frontend writes into the builder field on every Hyperliquid order it routes. The on chain protocol caps this at 100 basis points on perps and 1000 on spot. The bench sums every fill's builderFee value attributed to a known frontend address and publishes the total per timeframe." + - q: "Why USD revenue instead of effective fee in basis points?" + a: "The previous version of this bench ranked frontends by effective fee in basis points, which answered the trader question of cost per dollar routed. The dollar revenue framing answers the operator question of size and revenue scale, the same way CoinMarketMan and ASXN dashboards present builder leaderboards. Both views are useful. The effective fee bps view is still available as a companion tab." + - q: "Where does the data come from?" + a: "A local hl node operated on OCB infrastructure tails the Hyperliquid mainnet. The node writes every block of fills to disk as one JSON line under node_fills_by_block hourly YYYYMMDD HH. A Go harness running on the same host reads these files continuously, parses each fill, and increments per builder hourly aggregates. No third party API, no daily CSV bucket dependency, no internal Mobula service. Source code is in miniapps hyperliquid frontends local in the open mobula api repo." + - q: "How are the 7 day and 30 day numbers built?" + a: "The harness keeps a small in memory map of per builder hourly buckets going back 30 days. Each bucket stores the sum of builderFee values and the sum of notional values for fills that landed in that hour. The 7 day figure is the sum of the recent 168 buckets, the 30 day figure is the sum of the recent 720 buckets. Memory footprint is about 350 KB total for all 60 tracked frontends. Buckets older than 30 days are dropped on every publish." + - q: "How is the 24 hour figure built?" + a: "Same hourly bucket logic, last 24 buckets. The harness also keeps a separate fill level window for the 24h companions that require per fill granularity (unique users, taker share, slippage proxy)." - q: "Which frontends are tracked?" - a: "The registry currently tracks Phantom Perps, Axiom, pvp.trade, Insilico Terminal, DefiApp, MetaMask, Dexari and Okto. These eight account for roughly half of attributed Hyperliquid volume. Builder addresses were sourced from each frontend's public announcement, cross referenced against CoinMarketMan HyperTracker and Flowscan. Several hundred smaller builder addresses route the remaining attributed volume. They show in our local node stream and are scheduled for inclusion via public PR. The 95 percent of HL flow that uses no builder code (native UI orders, frontends that did not opt into the attribution system) sits outside this bench by design." - - q: "What about builder addresses outside the eight tracked frontends?" - a: "The local hl-node sees every builder address that appears on any Hyperliquid fill. Several hundred smaller builders route attributed volume below the eight tracked here. Those addresses are visible in our raw node stream but stay off the leaderboard until a public PR adds them to `builders.json` with a verified name. The coverage gap is honest, not hidden. Volume share dashboards from ASXN and CoinMarketMan list the full distribution if you need the exhaustive picture today." - - q: "What's fee discipline and why is it useful?" - a: "The 30-day standard deviation of the daily effective fee in basis points. Frontends running rotating promotions (fee-free week → normalize the next week → discount cycle) show high variance even when the 24h headline is low. Frontends with stable transparent pricing show low variance. The discipline column is what tells you whether the headline number you're reading is a stable rate or a snapshot mid-promo." - - q: "Does the bench measure native HL UI orders?" - a: "No. The native HL UI doesn't set a builder code, so its orders are not user-attributable by this method. Native HL's performance is covered separately by `/benchmarks/aggregator-head-lag` (data-feed latency) and the operational metrics Hyperliquid publishes themselves. This bench is specifically about third-party frontends that opt into the builder-code attribution system." - - q: "Can a frontend game the bench by routing wash trades?" - a: "Yes, the bench measures what the chain records. A frontend running wash volume to drive its own fee revenue (or to suppress its effective fee via 0-fee internal flow) shows up exactly as it appears on-chain. Mitigation is structural: the user-count column flags frontends with anomalously low unique-user counts relative to volume (a wash-heavy frontend has high $/user efficiency and low user count). A v1.1 methodology PR will add a sybil-cluster heuristic for repeat-counterparty fills." - - q: "What is price deviation and why publish it alongside the fee?" - a: "Per-fill basis-point gap between executed price and the most recent fill price on the same asset, averaged across the 24h window. Cleanest proxy for execution quality from a frontend that does not publish slippage stats. A frontend can charge a low builder fee and still cost users more if its routing fills wide of the recent print. Fee plus deviation is closer to true user cost than either alone." - - q: "What does the last-fill-age outage signal actually measure?" - a: "Seconds since the most recent attributed fill for that builder. The cohort baseline runs under one minute during active hours, so above a few minutes is a real anomaly. Catches two failure modes: a frontend whose routing pipeline is down (no new fills even when users try to trade), and a frontend that has quietly stopped operating but still has its builder code in circulation. Both were invisible on volume dashboards where zero volume reads as zero, not as broken." + a: "Sixty Hyperliquid frontends with a known builder address. The cohort spans consumer wallets (Phantom Perps, MetaMask, Rabby, OneKey, Trust Wallet), pro terminals (Insilico, Axiom, Pear, Lit Trade), social and pvp UIs (pvp dot trade, Senpi, FOMO), bots and signal apps (FlowBot, Tread fi, Moonbot, Hyperdash), based.app, defiapp and HIP-3 deployers. The registry is in miniapps hyperliquid frontends local builders dot json on the open mobula api repo. New addresses ship via public PR." + - q: "Why are some frontends at zero?" + a: "Three reasons. The frontend stopped operating or hasn't routed any attributed fills in the window. The frontend never enabled the builder code attribution system. The frontend uses a builder address not yet in our registry. The Time since last fill companion separates these cases. A frontend with hours of inactivity is in the first bucket. A frontend with consistent zero across all timeframes is in the second or third." + - q: "Why does Phantom Perps usually lead?" + a: "Consumer wallets integrate Hyperliquid trading directly inside the wallet UI. Their effective fee is typically in the 5 to 10 basis point range and the user base is large. The combination of wide reach times a moderate fee produces the highest absolute revenue. Pro terminals sit below because they charge less per dollar routed by design, even though their notional volume is comparable." + - q: "How often does the page refresh?" + a: "Every 30 seconds. The harness re reads the local hl node hourly file every 30 seconds and Prometheus scrapes the gauges on the same cadence. The page itself uses incremental static regeneration with a 60 second window, so headline values are at most 90 seconds stale plus chain propagation delay." + - q: "Can I cite a value from this page?" + a: "Yes. Every number is a Prometheus query exposed via the OCB API endpoints. The query string is visible in the row hover tooltip on the leaderboard. The harness source is open at the link in the source field below. Cite the value and the timestamp at the top of the page." + source: https://github.com/MobulaFi/mobula-monorepo/tree/dev/miniapps/hyperliquid-frontends-local @@ -126,7 +98,7 @@ prometheus: # are kept narrow (just `builder`) so the cross-series queries below don't # explode in cardinality. # -# hl_frontend_effective_fee_bps_v2{builder} gauge (p50 headline) +# hl_frontend_fees_usd_24h_v2{builder} gauge (p50 headline) # hl_frontend_d7_retention_pct{builder} gauge (p90 column) # hl_frontend_d30_retention_pct{builder} gauge (also exposed) # hl_frontend_fees_per_user_usd_v2{builder} gauge (p99 column) @@ -150,782 +122,782 @@ prometheus: providers: - slug: phantom-perps name: Phantom - tag: Phantom wallet's HL perps integration + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the last complete UTC day, computed from Hyperliquid's public attributed-fills CSV for Phantom's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="phantom-perps"} + p50: hl_frontend_fees_usd_24h_v2{builder="phantom-perps"} p90: hl_frontend_d7_retention_pct{builder="phantom-perps"} p99: hl_frontend_fees_per_user_usd_v2{builder="phantom-perps"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="phantom-perps"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="phantom-perps"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="phantom-perps"} - series: hl_frontend_effective_fee_bps_v2{builder="phantom-perps"} + series: hl_frontend_fees_usd_24h_v2{builder="phantom-perps"} - slug: axiom name: Axiom - tag: Solana-native terminal expanding to HL + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the last complete UTC day, computed from Hyperliquid's public attributed-fills CSV for Axiom's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="axiom"} + p50: hl_frontend_fees_usd_24h_v2{builder="axiom"} p90: hl_frontend_d7_retention_pct{builder="axiom"} p99: hl_frontend_fees_per_user_usd_v2{builder="axiom"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="axiom"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="axiom"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="axiom"} - series: hl_frontend_effective_fee_bps_v2{builder="axiom"} + series: hl_frontend_fees_usd_24h_v2{builder="axiom"} - slug: pvp-trade name: pvp.trade - tag: Social PvP trading rooms + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the last complete UTC day, computed from Hyperliquid's public attributed-fills CSV for pvp.trade's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="pvp-trade"} + p50: hl_frontend_fees_usd_24h_v2{builder="pvp-trade"} p90: hl_frontend_d7_retention_pct{builder="pvp-trade"} p99: hl_frontend_fees_per_user_usd_v2{builder="pvp-trade"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="pvp-trade"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="pvp-trade"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="pvp-trade"} - series: hl_frontend_effective_fee_bps_v2{builder="pvp-trade"} + series: hl_frontend_fees_usd_24h_v2{builder="pvp-trade"} - slug: insilico name: Insilico - tag: Institutional trading workstation + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the last complete UTC day, computed from Hyperliquid's public attributed-fills CSV for Insilico's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="insilico"} + p50: hl_frontend_fees_usd_24h_v2{builder="insilico"} p90: hl_frontend_d7_retention_pct{builder="insilico"} p99: hl_frontend_fees_per_user_usd_v2{builder="insilico"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="insilico"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="insilico"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="insilico"} - series: hl_frontend_effective_fee_bps_v2{builder="insilico"} + series: hl_frontend_fees_usd_24h_v2{builder="insilico"} - slug: defiapp name: Defiapp - tag: Defiapp HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the last complete UTC day, computed from Hyperliquid's public attributed-fills CSV for Defiapp's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="defiapp"} + p50: hl_frontend_fees_usd_24h_v2{builder="defiapp"} p90: hl_frontend_d7_retention_pct{builder="defiapp"} p99: hl_frontend_fees_per_user_usd_v2{builder="defiapp"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="defiapp"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="defiapp"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="defiapp"} - series: hl_frontend_effective_fee_bps_v2{builder="defiapp"} + series: hl_frontend_fees_usd_24h_v2{builder="defiapp"} - slug: metamask name: MetaMask - tag: MetaMask wallet HL integration + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the last complete UTC day, computed from Hyperliquid's public attributed-fills CSV for MetaMask's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="metamask"} + p50: hl_frontend_fees_usd_24h_v2{builder="metamask"} p90: hl_frontend_d7_retention_pct{builder="metamask"} p99: hl_frontend_fees_per_user_usd_v2{builder="metamask"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="metamask"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="metamask"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="metamask"} - series: hl_frontend_effective_fee_bps_v2{builder="metamask"} + series: hl_frontend_fees_usd_24h_v2{builder="metamask"} - slug: dexari name: Dexari - tag: Pro trading UI for HL + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the last complete UTC day, computed from Hyperliquid's public attributed-fills CSV for Dexari's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="dexari"} + p50: hl_frontend_fees_usd_24h_v2{builder="dexari"} p90: hl_frontend_d7_retention_pct{builder="dexari"} p99: hl_frontend_fees_per_user_usd_v2{builder="dexari"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="dexari"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="dexari"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="dexari"} - series: hl_frontend_effective_fee_bps_v2{builder="dexari"} + series: hl_frontend_fees_usd_24h_v2{builder="dexari"} - slug: okto name: Okto - tag: Okto wallet HL integration + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the last complete UTC day, computed from Hyperliquid's public attributed-fills CSV for Okto's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="okto"} + p50: hl_frontend_fees_usd_24h_v2{builder="okto"} p90: hl_frontend_d7_retention_pct{builder="okto"} p99: hl_frontend_fees_per_user_usd_v2{builder="okto"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="okto"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="okto"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="okto"} - series: hl_frontend_effective_fee_bps_v2{builder="okto"} + series: hl_frontend_fees_usd_24h_v2{builder="okto"} - slug: trust-wallet name: Trust Wallet - tag: Trust Wallet HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Trust Wallet's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="trust-wallet"} + p50: hl_frontend_fees_usd_24h_v2{builder="trust-wallet"} p90: hl_frontend_d7_retention_pct{builder="trust-wallet"} p99: hl_frontend_fees_per_user_usd_v2{builder="trust-wallet"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="trust-wallet"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="trust-wallet"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="trust-wallet"} - series: hl_frontend_effective_fee_bps_v2{builder="trust-wallet"} + series: hl_frontend_fees_usd_24h_v2{builder="trust-wallet"} - slug: sushi name: Sushi - tag: Sushi HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Sushi's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="sushi"} + p50: hl_frontend_fees_usd_24h_v2{builder="sushi"} p90: hl_frontend_d7_retention_pct{builder="sushi"} p99: hl_frontend_fees_per_user_usd_v2{builder="sushi"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="sushi"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="sushi"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="sushi"} - series: hl_frontend_effective_fee_bps_v2{builder="sushi"} + series: hl_frontend_fees_usd_24h_v2{builder="sushi"} - slug: dreamcash name: Dreamcash - tag: Dreamcash HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Dreamcash's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="dreamcash"} + p50: hl_frontend_fees_usd_24h_v2{builder="dreamcash"} p90: hl_frontend_d7_retention_pct{builder="dreamcash"} p99: hl_frontend_fees_per_user_usd_v2{builder="dreamcash"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="dreamcash"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="dreamcash"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="dreamcash"} - series: hl_frontend_effective_fee_bps_v2{builder="dreamcash"} + series: hl_frontend_fees_usd_24h_v2{builder="dreamcash"} - slug: based-app name: Based - tag: Based HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Based's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="based-app"} + p50: hl_frontend_fees_usd_24h_v2{builder="based-app"} p90: hl_frontend_d7_retention_pct{builder="based-app"} p99: hl_frontend_fees_per_user_usd_v2{builder="based-app"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="based-app"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="based-app"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="based-app"} - series: hl_frontend_effective_fee_bps_v2{builder="based-app"} + series: hl_frontend_fees_usd_24h_v2{builder="based-app"} - slug: blink name: Blink - tag: Blink HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Blink's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="blink"} + p50: hl_frontend_fees_usd_24h_v2{builder="blink"} p90: hl_frontend_d7_retention_pct{builder="blink"} p99: hl_frontend_fees_per_user_usd_v2{builder="blink"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="blink"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="blink"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="blink"} - series: hl_frontend_effective_fee_bps_v2{builder="blink"} + series: hl_frontend_fees_usd_24h_v2{builder="blink"} - slug: perpmate name: Perpmate - tag: Perpmate HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Perpmate's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="perpmate"} + p50: hl_frontend_fees_usd_24h_v2{builder="perpmate"} p90: hl_frontend_d7_retention_pct{builder="perpmate"} p99: hl_frontend_fees_per_user_usd_v2{builder="perpmate"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="perpmate"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="perpmate"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="perpmate"} - series: hl_frontend_effective_fee_bps_v2{builder="perpmate"} + series: hl_frontend_fees_usd_24h_v2{builder="perpmate"} - slug: arena name: Arena - tag: Arena HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Arena's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="arena"} + p50: hl_frontend_fees_usd_24h_v2{builder="arena"} p90: hl_frontend_d7_retention_pct{builder="arena"} p99: hl_frontend_fees_per_user_usd_v2{builder="arena"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="arena"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="arena"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="arena"} - series: hl_frontend_effective_fee_bps_v2{builder="arena"} + series: hl_frontend_fees_usd_24h_v2{builder="arena"} - slug: minaraai name: MinaraAI - tag: MinaraAI HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for MinaraAI's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="minaraai"} + p50: hl_frontend_fees_usd_24h_v2{builder="minaraai"} p90: hl_frontend_d7_retention_pct{builder="minaraai"} p99: hl_frontend_fees_per_user_usd_v2{builder="minaraai"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="minaraai"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="minaraai"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="minaraai"} - series: hl_frontend_effective_fee_bps_v2{builder="minaraai"} + series: hl_frontend_fees_usd_24h_v2{builder="minaraai"} - slug: apexliquid name: ApexLiquid - tag: ApexLiquid HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for ApexLiquid's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="apexliquid"} + p50: hl_frontend_fees_usd_24h_v2{builder="apexliquid"} p90: hl_frontend_d7_retention_pct{builder="apexliquid"} p99: hl_frontend_fees_per_user_usd_v2{builder="apexliquid"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="apexliquid"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="apexliquid"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="apexliquid"} - series: hl_frontend_effective_fee_bps_v2{builder="apexliquid"} + series: hl_frontend_fees_usd_24h_v2{builder="apexliquid"} - slug: coin98 name: Coin98 - tag: Coin98 HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Coin98's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="coin98"} + p50: hl_frontend_fees_usd_24h_v2{builder="coin98"} p90: hl_frontend_d7_retention_pct{builder="coin98"} p99: hl_frontend_fees_per_user_usd_v2{builder="coin98"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="coin98"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="coin98"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="coin98"} - series: hl_frontend_effective_fee_bps_v2{builder="coin98"} + series: hl_frontend_fees_usd_24h_v2{builder="coin98"} - slug: coinpilot name: CoinPilot - tag: CoinPilot HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for CoinPilot's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="coinpilot"} + p50: hl_frontend_fees_usd_24h_v2{builder="coinpilot"} p90: hl_frontend_d7_retention_pct{builder="coinpilot"} p99: hl_frontend_fees_per_user_usd_v2{builder="coinpilot"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="coinpilot"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="coinpilot"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="coinpilot"} - series: hl_frontend_effective_fee_bps_v2{builder="coinpilot"} + series: hl_frontend_fees_usd_24h_v2{builder="coinpilot"} - slug: echosync name: Echosync - tag: Echosync HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Echosync's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="echosync"} + p50: hl_frontend_fees_usd_24h_v2{builder="echosync"} p90: hl_frontend_d7_retention_pct{builder="echosync"} p99: hl_frontend_fees_per_user_usd_v2{builder="echosync"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="echosync"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="echosync"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="echosync"} - series: hl_frontend_effective_fee_bps_v2{builder="echosync"} + series: hl_frontend_fees_usd_24h_v2{builder="echosync"} - slug: fomo name: FOMO - tag: FOMO HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for FOMO's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="fomo"} + p50: hl_frontend_fees_usd_24h_v2{builder="fomo"} p90: hl_frontend_d7_retention_pct{builder="fomo"} p99: hl_frontend_fees_per_user_usd_v2{builder="fomo"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="fomo"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="fomo"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="fomo"} - series: hl_frontend_effective_fee_bps_v2{builder="fomo"} + series: hl_frontend_fees_usd_24h_v2{builder="fomo"} - slug: gemwallet name: Gem Wallet - tag: Gem Wallet HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Gem Wallet's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="gemwallet"} + p50: hl_frontend_fees_usd_24h_v2{builder="gemwallet"} p90: hl_frontend_d7_retention_pct{builder="gemwallet"} p99: hl_frontend_fees_per_user_usd_v2{builder="gemwallet"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="gemwallet"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="gemwallet"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="gemwallet"} - series: hl_frontend_effective_fee_bps_v2{builder="gemwallet"} + series: hl_frontend_fees_usd_24h_v2{builder="gemwallet"} - slug: gtr-trade name: GTR Trade - tag: GTR Trade HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for GTR Trade's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="gtr-trade"} + p50: hl_frontend_fees_usd_24h_v2{builder="gtr-trade"} p90: hl_frontend_d7_retention_pct{builder="gtr-trade"} p99: hl_frontend_fees_per_user_usd_v2{builder="gtr-trade"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="gtr-trade"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="gtr-trade"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="gtr-trade"} - series: hl_frontend_effective_fee_bps_v2{builder="gtr-trade"} + series: hl_frontend_fees_usd_24h_v2{builder="gtr-trade"} - slug: hyprearn name: Hyprearn - tag: Hyprearn HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Hyprearn's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="hyprearn"} + p50: hl_frontend_fees_usd_24h_v2{builder="hyprearn"} p90: hl_frontend_d7_retention_pct{builder="hyprearn"} p99: hl_frontend_fees_per_user_usd_v2{builder="hyprearn"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="hyprearn"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="hyprearn"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="hyprearn"} - series: hl_frontend_effective_fee_bps_v2{builder="hyprearn"} + series: hl_frontend_fees_usd_24h_v2{builder="hyprearn"} - slug: legend-trade name: Legend Trade - tag: Legend Trade HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Legend Trade's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="legend-trade"} + p50: hl_frontend_fees_usd_24h_v2{builder="legend-trade"} p90: hl_frontend_d7_retention_pct{builder="legend-trade"} p99: hl_frontend_fees_per_user_usd_v2{builder="legend-trade"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="legend-trade"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="legend-trade"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="legend-trade"} - series: hl_frontend_effective_fee_bps_v2{builder="legend-trade"} + series: hl_frontend_fees_usd_24h_v2{builder="legend-trade"} - slug: katoshi name: Katoshi - tag: Katoshi HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Katoshi's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="katoshi"} + p50: hl_frontend_fees_usd_24h_v2{builder="katoshi"} p90: hl_frontend_d7_retention_pct{builder="katoshi"} p99: hl_frontend_fees_per_user_usd_v2{builder="katoshi"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="katoshi"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="katoshi"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="katoshi"} - series: hl_frontend_effective_fee_bps_v2{builder="katoshi"} + series: hl_frontend_fees_usd_24h_v2{builder="katoshi"} - slug: metascalp name: Metascalp - tag: Metascalp HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Metascalp's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="metascalp"} + p50: hl_frontend_fees_usd_24h_v2{builder="metascalp"} p90: hl_frontend_d7_retention_pct{builder="metascalp"} p99: hl_frontend_fees_per_user_usd_v2{builder="metascalp"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="metascalp"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="metascalp"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="metascalp"} - series: hl_frontend_effective_fee_bps_v2{builder="metascalp"} + series: hl_frontend_fees_usd_24h_v2{builder="metascalp"} - slug: moontrader name: Moontrader - tag: Moontrader HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Moontrader's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="moontrader"} + p50: hl_frontend_fees_usd_24h_v2{builder="moontrader"} p90: hl_frontend_d7_retention_pct{builder="moontrader"} p99: hl_frontend_fees_per_user_usd_v2{builder="moontrader"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="moontrader"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="moontrader"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="moontrader"} - series: hl_frontend_effective_fee_bps_v2{builder="moontrader"} + series: hl_frontend_fees_usd_24h_v2{builder="moontrader"} - slug: onekey name: OneKey - tag: OneKey HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for OneKey's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="onekey"} + p50: hl_frontend_fees_usd_24h_v2{builder="onekey"} p90: hl_frontend_d7_retention_pct{builder="onekey"} p99: hl_frontend_fees_per_user_usd_v2{builder="onekey"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="onekey"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="onekey"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="onekey"} - series: hl_frontend_effective_fee_bps_v2{builder="onekey"} + series: hl_frontend_fees_usd_24h_v2{builder="onekey"} - slug: pear name: Pear - tag: Pear HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Pear's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="pear"} + p50: hl_frontend_fees_usd_24h_v2{builder="pear"} p90: hl_frontend_d7_retention_pct{builder="pear"} p99: hl_frontend_fees_per_user_usd_v2{builder="pear"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="pear"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="pear"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="pear"} - series: hl_frontend_effective_fee_bps_v2{builder="pear"} + series: hl_frontend_fees_usd_24h_v2{builder="pear"} - slug: rabby name: Rabby - tag: Rabby HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Rabby's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="rabby"} + p50: hl_frontend_fees_usd_24h_v2{builder="rabby"} p90: hl_frontend_d7_retention_pct{builder="rabby"} p99: hl_frontend_fees_per_user_usd_v2{builder="rabby"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="rabby"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="rabby"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="rabby"} - series: hl_frontend_effective_fee_bps_v2{builder="rabby"} + series: hl_frontend_fees_usd_24h_v2{builder="rabby"} - slug: ranger-finance name: Ranger Finance - tag: Ranger Finance HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Ranger Finance's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="ranger-finance"} + p50: hl_frontend_fees_usd_24h_v2{builder="ranger-finance"} p90: hl_frontend_d7_retention_pct{builder="ranger-finance"} p99: hl_frontend_fees_per_user_usd_v2{builder="ranger-finance"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="ranger-finance"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="ranger-finance"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="ranger-finance"} - series: hl_frontend_effective_fee_bps_v2{builder="ranger-finance"} + series: hl_frontend_fees_usd_24h_v2{builder="ranger-finance"} - slug: senpi name: Senpi - tag: Senpi HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Senpi's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="senpi"} + p50: hl_frontend_fees_usd_24h_v2{builder="senpi"} p90: hl_frontend_d7_retention_pct{builder="senpi"} p99: hl_frontend_fees_per_user_usd_v2{builder="senpi"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="senpi"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="senpi"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="senpi"} - series: hl_frontend_effective_fee_bps_v2{builder="senpi"} + series: hl_frontend_fees_usd_24h_v2{builder="senpi"} - slug: superx name: SuperX - tag: SuperX HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for SuperX's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="superx"} + p50: hl_frontend_fees_usd_24h_v2{builder="superx"} p90: hl_frontend_d7_retention_pct{builder="superx"} p99: hl_frontend_fees_per_user_usd_v2{builder="superx"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="superx"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="superx"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="superx"} - series: hl_frontend_effective_fee_bps_v2{builder="superx"} + series: hl_frontend_fees_usd_24h_v2{builder="superx"} - slug: supurr name: Supurr - tag: Supurr HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Supurr's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="supurr"} + p50: hl_frontend_fees_usd_24h_v2{builder="supurr"} p90: hl_frontend_d7_retention_pct{builder="supurr"} p99: hl_frontend_fees_per_user_usd_v2{builder="supurr"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="supurr"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="supurr"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="supurr"} - series: hl_frontend_effective_fee_bps_v2{builder="supurr"} + series: hl_frontend_fees_usd_24h_v2{builder="supurr"} - slug: unigox name: Unigox - tag: Unigox HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Unigox's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="unigox"} + p50: hl_frontend_fees_usd_24h_v2{builder="unigox"} p90: hl_frontend_d7_retention_pct{builder="unigox"} p99: hl_frontend_fees_per_user_usd_v2{builder="unigox"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="unigox"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="unigox"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="unigox"} - series: hl_frontend_effective_fee_bps_v2{builder="unigox"} + series: hl_frontend_fees_usd_24h_v2{builder="unigox"} - slug: uxuy name: UXUY - tag: UXUY HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for UXUY's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="uxuy"} + p50: hl_frontend_fees_usd_24h_v2{builder="uxuy"} p90: hl_frontend_d7_retention_pct{builder="uxuy"} p99: hl_frontend_fees_per_user_usd_v2{builder="uxuy"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="uxuy"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="uxuy"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="uxuy"} - series: hl_frontend_effective_fee_bps_v2{builder="uxuy"} + series: hl_frontend_fees_usd_24h_v2{builder="uxuy"} - slug: wunder name: Wunder - tag: Wunder HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Wunder's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="wunder"} + p50: hl_frontend_fees_usd_24h_v2{builder="wunder"} p90: hl_frontend_d7_retention_pct{builder="wunder"} p99: hl_frontend_fees_per_user_usd_v2{builder="wunder"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="wunder"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="wunder"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="wunder"} - series: hl_frontend_effective_fee_bps_v2{builder="wunder"} + series: hl_frontend_fees_usd_24h_v2{builder="wunder"} - slug: grider name: Grider - tag: Grider HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Grider's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="grider"} + p50: hl_frontend_fees_usd_24h_v2{builder="grider"} p90: hl_frontend_d7_retention_pct{builder="grider"} p99: hl_frontend_fees_per_user_usd_v2{builder="grider"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="grider"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="grider"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="grider"} - series: hl_frontend_effective_fee_bps_v2{builder="grider"} + series: hl_frontend_fees_usd_24h_v2{builder="grider"} - slug: tradoor name: Tradoor - tag: Tradoor HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Tradoor's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="tradoor"} + p50: hl_frontend_fees_usd_24h_v2{builder="tradoor"} p90: hl_frontend_d7_retention_pct{builder="tradoor"} p99: hl_frontend_fees_per_user_usd_v2{builder="tradoor"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="tradoor"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="tradoor"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="tradoor"} - series: hl_frontend_effective_fee_bps_v2{builder="tradoor"} + series: hl_frontend_fees_usd_24h_v2{builder="tradoor"} - slug: bullpenfi name: BullpenFi - tag: BullpenFi HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for BullpenFi's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="bullpenfi"} + p50: hl_frontend_fees_usd_24h_v2{builder="bullpenfi"} p90: hl_frontend_d7_retention_pct{builder="bullpenfi"} p99: hl_frontend_fees_per_user_usd_v2{builder="bullpenfi"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="bullpenfi"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="bullpenfi"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="bullpenfi"} - series: hl_frontend_effective_fee_bps_v2{builder="bullpenfi"} + series: hl_frontend_fees_usd_24h_v2{builder="bullpenfi"} - slug: dexly-trade name: Dexly Trade - tag: Dexly Trade HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Dexly Trade's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="dexly-trade"} + p50: hl_frontend_fees_usd_24h_v2{builder="dexly-trade"} p90: hl_frontend_d7_retention_pct{builder="dexly-trade"} p99: hl_frontend_fees_per_user_usd_v2{builder="dexly-trade"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="dexly-trade"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="dexly-trade"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="dexly-trade"} - series: hl_frontend_effective_fee_bps_v2{builder="dexly-trade"} + series: hl_frontend_fees_usd_24h_v2{builder="dexly-trade"} - slug: hyperdash name: Hyperdash - tag: Hyperdash HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Hyperdash's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="hyperdash"} + p50: hl_frontend_fees_usd_24h_v2{builder="hyperdash"} p90: hl_frontend_d7_retention_pct{builder="hyperdash"} p99: hl_frontend_fees_per_user_usd_v2{builder="hyperdash"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="hyperdash"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="hyperdash"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="hyperdash"} - series: hl_frontend_effective_fee_bps_v2{builder="hyperdash"} + series: hl_frontend_fees_usd_24h_v2{builder="hyperdash"} - slug: infinex name: Infinex - tag: Infinex HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Infinex's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="infinex"} + p50: hl_frontend_fees_usd_24h_v2{builder="infinex"} p90: hl_frontend_d7_retention_pct{builder="infinex"} p99: hl_frontend_fees_per_user_usd_v2{builder="infinex"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="infinex"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="infinex"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="infinex"} - series: hl_frontend_effective_fee_bps_v2{builder="infinex"} + series: hl_frontend_fees_usd_24h_v2{builder="infinex"} - slug: liminal name: Liminal - tag: Liminal HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Liminal's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="liminal"} + p50: hl_frontend_fees_usd_24h_v2{builder="liminal"} p90: hl_frontend_d7_retention_pct{builder="liminal"} p99: hl_frontend_fees_per_user_usd_v2{builder="liminal"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="liminal"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="liminal"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="liminal"} - series: hl_frontend_effective_fee_bps_v2{builder="liminal"} + series: hl_frontend_fees_usd_24h_v2{builder="liminal"} - slug: liquid-perps name: Liquid Perps - tag: Liquid Perps HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Liquid Perps's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="liquid-perps"} + p50: hl_frontend_fees_usd_24h_v2{builder="liquid-perps"} p90: hl_frontend_d7_retention_pct{builder="liquid-perps"} p99: hl_frontend_fees_per_user_usd_v2{builder="liquid-perps"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="liquid-perps"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="liquid-perps"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="liquid-perps"} - series: hl_frontend_effective_fee_bps_v2{builder="liquid-perps"} + series: hl_frontend_fees_usd_24h_v2{builder="liquid-perps"} - slug: lit-trade name: Lit Trade - tag: Lit Trade HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Lit Trade's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="lit-trade"} + p50: hl_frontend_fees_usd_24h_v2{builder="lit-trade"} p90: hl_frontend_d7_retention_pct{builder="lit-trade"} p99: hl_frontend_fees_per_user_usd_v2{builder="lit-trade"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="lit-trade"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="lit-trade"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="lit-trade"} - series: hl_frontend_effective_fee_bps_v2{builder="lit-trade"} + series: hl_frontend_fees_usd_24h_v2{builder="lit-trade"} - slug: lootbase name: Lootbase - tag: Lootbase HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Lootbase's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="lootbase"} + p50: hl_frontend_fees_usd_24h_v2{builder="lootbase"} p90: hl_frontend_d7_retention_pct{builder="lootbase"} p99: hl_frontend_fees_per_user_usd_v2{builder="lootbase"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="lootbase"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="lootbase"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="lootbase"} - series: hl_frontend_effective_fee_bps_v2{builder="lootbase"} + series: hl_frontend_fees_usd_24h_v2{builder="lootbase"} - slug: mass-dot-money name: Mass.money - tag: Mass.money HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Mass.money's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="mass-dot-money"} + p50: hl_frontend_fees_usd_24h_v2{builder="mass-dot-money"} p90: hl_frontend_d7_retention_pct{builder="mass-dot-money"} p99: hl_frontend_fees_per_user_usd_v2{builder="mass-dot-money"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="mass-dot-money"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="mass-dot-money"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="mass-dot-money"} - series: hl_frontend_effective_fee_bps_v2{builder="mass-dot-money"} + series: hl_frontend_fees_usd_24h_v2{builder="mass-dot-money"} - slug: moonbot name: Moonbot - tag: Moonbot HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Moonbot's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="moonbot"} + p50: hl_frontend_fees_usd_24h_v2{builder="moonbot"} p90: hl_frontend_d7_retention_pct{builder="moonbot"} p99: hl_frontend_fees_per_user_usd_v2{builder="moonbot"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="moonbot"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="moonbot"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="moonbot"} - series: hl_frontend_effective_fee_bps_v2{builder="moonbot"} + series: hl_frontend_fees_usd_24h_v2{builder="moonbot"} - slug: rainbow name: Rainbow - tag: Rainbow HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Rainbow's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="rainbow"} + p50: hl_frontend_fees_usd_24h_v2{builder="rainbow"} p90: hl_frontend_d7_retention_pct{builder="rainbow"} p99: hl_frontend_fees_per_user_usd_v2{builder="rainbow"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="rainbow"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="rainbow"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="rainbow"} - series: hl_frontend_effective_fee_bps_v2{builder="rainbow"} + series: hl_frontend_fees_usd_24h_v2{builder="rainbow"} - slug: supercexy name: SuperCEXy - tag: SuperCEXy HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for SuperCEXy's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="supercexy"} + p50: hl_frontend_fees_usd_24h_v2{builder="supercexy"} p90: hl_frontend_d7_retention_pct{builder="supercexy"} p99: hl_frontend_fees_per_user_usd_v2{builder="supercexy"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="supercexy"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="supercexy"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="supercexy"} - series: hl_frontend_effective_fee_bps_v2{builder="supercexy"} + series: hl_frontend_fees_usd_24h_v2{builder="supercexy"} - slug: superstack name: Superstack - tag: Superstack HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Superstack's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="superstack"} + p50: hl_frontend_fees_usd_24h_v2{builder="superstack"} p90: hl_frontend_d7_retention_pct{builder="superstack"} p99: hl_frontend_fees_per_user_usd_v2{builder="superstack"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="superstack"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="superstack"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="superstack"} - series: hl_frontend_effective_fee_bps_v2{builder="superstack"} + series: hl_frontend_fees_usd_24h_v2{builder="superstack"} - slug: wallet-v name: Wallet V - tag: Wallet V HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Wallet V's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="wallet-v"} + p50: hl_frontend_fees_usd_24h_v2{builder="wallet-v"} p90: hl_frontend_d7_retention_pct{builder="wallet-v"} p99: hl_frontend_fees_per_user_usd_v2{builder="wallet-v"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="wallet-v"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="wallet-v"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="wallet-v"} - series: hl_frontend_effective_fee_bps_v2{builder="wallet-v"} + series: hl_frontend_fees_usd_24h_v2{builder="wallet-v"} - slug: xtrade-protocol name: xTrade Protocol - tag: xTrade Protocol HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for xTrade Protocol's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="xtrade-protocol"} + p50: hl_frontend_fees_usd_24h_v2{builder="xtrade-protocol"} p90: hl_frontend_d7_retention_pct{builder="xtrade-protocol"} p99: hl_frontend_fees_per_user_usd_v2{builder="xtrade-protocol"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="xtrade-protocol"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="xtrade-protocol"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="xtrade-protocol"} - series: hl_frontend_effective_fee_bps_v2{builder="xtrade-protocol"} + series: hl_frontend_fees_usd_24h_v2{builder="xtrade-protocol"} - slug: taco-trade name: Taco Trade - tag: Taco Trade HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Taco Trade's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="taco-trade"} + p50: hl_frontend_fees_usd_24h_v2{builder="taco-trade"} p90: hl_frontend_d7_retention_pct{builder="taco-trade"} p99: hl_frontend_fees_per_user_usd_v2{builder="taco-trade"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="taco-trade"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="taco-trade"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="taco-trade"} - series: hl_frontend_effective_fee_bps_v2{builder="taco-trade"} + series: hl_frontend_fees_usd_24h_v2{builder="taco-trade"} - slug: silhouette name: Silhouette - tag: Silhouette HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Silhouette's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="silhouette"} + p50: hl_frontend_fees_usd_24h_v2{builder="silhouette"} p90: hl_frontend_d7_retention_pct{builder="silhouette"} p99: hl_frontend_fees_per_user_usd_v2{builder="silhouette"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="silhouette"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="silhouette"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="silhouette"} - series: hl_frontend_effective_fee_bps_v2{builder="silhouette"} + series: hl_frontend_fees_usd_24h_v2{builder="silhouette"} - slug: tread-fi name: Tread.fi - tag: Tread.fi HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Tread.fi's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="tread-fi"} + p50: hl_frontend_fees_usd_24h_v2{builder="tread-fi"} p90: hl_frontend_d7_retention_pct{builder="tread-fi"} p99: hl_frontend_fees_per_user_usd_v2{builder="tread-fi"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="tread-fi"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="tread-fi"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="tread-fi"} - series: hl_frontend_effective_fee_bps_v2{builder="tread-fi"} + series: hl_frontend_fees_usd_24h_v2{builder="tread-fi"} - slug: flowbot name: FlowBot - tag: FlowBot HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for FlowBot's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="flowbot"} + p50: hl_frontend_fees_usd_24h_v2{builder="flowbot"} p90: hl_frontend_d7_retention_pct{builder="flowbot"} p99: hl_frontend_fees_per_user_usd_v2{builder="flowbot"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="flowbot"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="flowbot"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="flowbot"} - series: hl_frontend_effective_fee_bps_v2{builder="flowbot"} + series: hl_frontend_fees_usd_24h_v2{builder="flowbot"} - slug: nautilus-trader name: Nautilus Trader - tag: Nautilus Trader HL frontend + tag: Hyperliquid builder code, USD revenue captured over rolling 24h window formula: "Volume-weighted effective builder fee in basis points over the rolling 24h window, computed from the local hl-node fills stream for Nautilus Trader's builder address." queries: - p50: hl_frontend_effective_fee_bps_v2{builder="nautilus-trader"} + p50: hl_frontend_fees_usd_24h_v2{builder="nautilus-trader"} p90: hl_frontend_d7_retention_pct{builder="nautilus-trader"} p99: hl_frontend_fees_per_user_usd_v2{builder="nautilus-trader"} - mean: avg_over_time(hl_frontend_effective_fee_bps_v2{builder="nautilus-trader"}[7d]) + mean: avg_over_time(hl_frontend_fees_usd_24h_v2{builder="nautilus-trader"}[7d]) success: (hl_frontend_local_last_tick_unix_v2 > bool (time() - 120)) sample_size: hl_frontend_fills_total_24h_v2{builder="nautilus-trader"} - series: hl_frontend_effective_fee_bps_v2{builder="nautilus-trader"} + series: hl_frontend_fees_usd_24h_v2{builder="nautilus-trader"} # Companion metric panels surfaced as a switchable mini leaderboard below # the main p50/p90/p99 table. Each panel queries one Prom metric per @@ -933,33 +905,43 @@ providers: # All five metrics come from the local hl-node harness and update at the # same sub-minute cadence as the main headline. metric_panels: - - id: deviation - label: Slippage proxy - description: "Per fill, the basis-point gap between the executed price and the previous trade price on the same asset, averaged over the rolling 24h window. Lower is better. Frontends that route to less liquid venues or slower order paths show higher deviation, which is direct user cost on top of the fee column." - metric: hl_frontend_price_deviation_bps_v2 + - id: fees_7d + label: Fees 7d + metric: hl_frontend_fees_usd_7d_v2 + unit: usd + description: "Total builder fees collected over the rolling 7 day window in USD per Hyperliquid frontend." + - id: fees_30d + label: Fees 30d + metric: hl_frontend_fees_usd_30d_v2 + unit: usd + description: "Total builder fees collected over the rolling 30 day window in USD." + - id: volume_24h + label: Volume 24h + metric: hl_frontend_volume_usd_24h_v2 + unit: usd + description: "Notional USD routed through this frontend over the last 24 hours." + - id: volume_7d + label: Volume 7d + metric: hl_frontend_volume_usd_7d_v2 + unit: usd + description: "Notional USD routed over the last 7 days." + - id: volume_30d + label: Volume 30d + metric: hl_frontend_volume_usd_30d_v2 + unit: usd + description: "Notional USD routed over the last 30 days." + - id: users + label: Users 24h + metric: hl_frontend_users_24h_v2 + unit: count + description: "Unique wallets that traded through this frontend in the last 24 hours." + - id: effective_fee + label: Effective fee bps + metric: hl_frontend_effective_fee_bps_v2 unit: bps - higher_is_better: false + description: "Effective builder fee in basis points. Fees divided by notional volume times 10000. The trader perspective on cost." - id: outage label: Time since last fill - description: "Seconds since this builder's most recent attributed fill landed on Hyperliquid. Cohort baseline runs under one minute during active hours; above a few minutes is a real anomaly. Catches frontends whose routing pipeline is down or quietly stopped operating." metric: hl_frontend_last_fill_age_seconds_v2 unit: s - higher_is_better: false - - id: activity - label: Fills per minute - description: "Activity rate over the rolling 24h window. Higher means more flow currently routes through this frontend. Combine with effective fee bps to read the operational intent: high activity + low fee = aligned, high activity + high fee = extractive." - metric: hl_frontend_fills_per_min_v2 - unit: count - higher_is_better: true - - id: taker - label: Taker share - description: "Fraction of fills that crossed the spread (paid the bid ask gap). Aggressive instant execution wallets skew taker heavy, pro terminals with limit order workflows skew maker heavy. Reveals the routing intent embedded in each frontend's UX." - metric: hl_frontend_taker_pct_v2 - unit: pct - higher_is_better: false - - id: volume - label: Volume routed - description: "Notional USD routed in the rolling 24h window. Headline volume metric most other HL dashboards publish. Here it is companion, not the headline, because volume is only loosely correlated with how aligned a frontend is with its users." - metric: hl_frontend_volume_usd_24h_v2 - unit: usd - higher_is_better: true + description: "Seconds since this frontend's most recent attributed fill. An outage signal."