From abdb4f6f54c4cf1d0052d1223db17949e61e7a1a Mon Sep 17 00:00:00 2001 From: Florent Tapponnier Date: Thu, 16 Jul 2026 16:36:48 +0200 Subject: [PATCH] tsp-arb-latency: drop 5 illiquid tickers (TSLA GOOGL AMZN MSFT SPY) Their Uniswap v4 pools on Robinhood Chain have no arb activity: pool spot stays frozen at the last swap value tick after tick while the Yahoo reference moves normally. Events open on ref triggers but roll over as still_open with zero latency samples. Cohort restricted to the 6 tickers with observable arb activity: NVDA AAPL PLTR META AMD MU. --- benchmarks/tokenized-stock-arb-latency.yml | 69 +------------------ .../tokenized-stock-peg/cmd/script/config.go | 15 ++-- 2 files changed, 12 insertions(+), 72 deletions(-) diff --git a/benchmarks/tokenized-stock-arb-latency.yml b/benchmarks/tokenized-stock-arb-latency.yml index dab809d9..61d75409 100644 --- a/benchmarks/tokenized-stock-arb-latency.yml +++ b/benchmarks/tokenized-stock-arb-latency.yml @@ -4,7 +4,7 @@ slug: tokenized-stock-arb-latency number: "080" title: Tokenized stock arb latency, how fast pools catch a Nasdaq move seo_title: "Tokenized stock arb latency 2026" -seo_description: "When Nasdaq moves 25 bps, how fast does the onchain pool follow? Live measurement across 11 tokenized equities on Robinhood Chain." +seo_description: "When Nasdaq moves 25 bps, how fast does the onchain pool follow? Live measurement across 6 liquid tokenized equities on Robinhood Chain." subtitle: "Median seconds between a 25 bps one-minute move on the reference market and the onchain pool coming back within 20 bps, per tokenized equity, regular hours only." category: RWA @@ -38,7 +38,7 @@ methodology: - "Convergence: the pool-to-reference deviation drops back below 20 bps. The bench observes seconds from trigger to convergence into a histogram bucket, tagged per asset." - "Publication: p50, p90 and p99 of the event distribution over 24 hours, per asset. Events that never converge before regular hours end are counted as still_open on a separate counter, not as latency samples." - "Data source: the tsp_price_reference_usd and tsp_price_onchain_usdg series emitted by the tokenized-stock-peg harness at 60s cadence. The event tracker is in-process; no new external calls." - - "Cohort: the 11 tokenized equities the peg bench measures. Arb latency is a first-order signal of pool quality; the peg deviation number is the second-order signal (how close it stays between moves)." + - "Cohort: the 6 liquid tokenized equities the peg bench measures. Arb latency is a first-order signal of pool quality; the peg deviation number is the second-order signal (how close it stays between moves)." - "Caveat: the 25 bps trigger filters out normal market chop while catching real moves. Symbols with fewer than 3 events per 24h during quiet market days will show sparse data; the sample_size column is the honest read of statistical weight." findings: @@ -77,19 +77,6 @@ providers: sample_size: sum(increase(tsp_arb_event_total{issuer="robinhood", asset="nvda", outcome="converged"}[24h])) series: histogram_quantile(0.50, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="nvda"}[1h]))) - - slug: tsla - name: TSLA - tag: "Tesla, most active pool of the cohort" - formula: "Median seconds until the TSLA pool on Robinhood Chain came back within 20 bps of the Yahoo reference after a 25 bps one-minute move, regular hours only, over 24h." - queries: - p50: histogram_quantile(0.50, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="tsla"}[24h]))) - p90: histogram_quantile(0.90, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="tsla"}[24h]))) - p99: histogram_quantile(0.99, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="tsla"}[24h]))) - mean: sum(rate(tsp_arb_latency_seconds_sum{issuer="robinhood", asset="tsla"}[24h])) / sum(rate(tsp_arb_latency_seconds_count{issuer="robinhood", asset="tsla"}[24h])) - success: sum(increase(tsp_arb_event_total{issuer="robinhood", asset="tsla", outcome="converged"}[24h])) / clamp_min(sum(increase(tsp_arb_event_total{issuer="robinhood", asset="tsla"}[24h])), 1) - sample_size: sum(increase(tsp_arb_event_total{issuer="robinhood", asset="tsla", outcome="converged"}[24h])) - series: histogram_quantile(0.50, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="tsla"}[1h]))) - - slug: aapl name: AAPL tag: "Apple, 1% fee" @@ -103,19 +90,6 @@ providers: sample_size: sum(increase(tsp_arb_event_total{issuer="robinhood", asset="aapl", outcome="converged"}[24h])) series: histogram_quantile(0.50, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="aapl"}[1h]))) - - slug: googl - name: GOOGL - tag: "Alphabet, 1% fee" - formula: "Median seconds until the GOOGL pool on Robinhood Chain came back within 20 bps of the Yahoo reference after a 25 bps one-minute move, regular hours only, over 24h." - queries: - p50: histogram_quantile(0.50, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="googl"}[24h]))) - p90: histogram_quantile(0.90, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="googl"}[24h]))) - p99: histogram_quantile(0.99, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="googl"}[24h]))) - mean: sum(rate(tsp_arb_latency_seconds_sum{issuer="robinhood", asset="googl"}[24h])) / sum(rate(tsp_arb_latency_seconds_count{issuer="robinhood", asset="googl"}[24h])) - success: sum(increase(tsp_arb_event_total{issuer="robinhood", asset="googl", outcome="converged"}[24h])) / clamp_min(sum(increase(tsp_arb_event_total{issuer="robinhood", asset="googl"}[24h])), 1) - sample_size: sum(increase(tsp_arb_event_total{issuer="robinhood", asset="googl", outcome="converged"}[24h])) - series: histogram_quantile(0.50, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="googl"}[1h]))) - - slug: meta name: META tag: "Meta, 0.3% fee" @@ -155,19 +129,6 @@ providers: sample_size: sum(increase(tsp_arb_event_total{issuer="robinhood", asset="pltr", outcome="converged"}[24h])) series: histogram_quantile(0.50, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="pltr"}[1h]))) - - slug: spy - name: SPY - tag: "S&P 500 ETF, 1% fee" - formula: "Median seconds until the SPY pool on Robinhood Chain came back within 20 bps of the Yahoo reference after a 25 bps one-minute move, regular hours only, over 24h." - queries: - p50: histogram_quantile(0.50, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="spy"}[24h]))) - p90: histogram_quantile(0.90, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="spy"}[24h]))) - p99: histogram_quantile(0.99, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="spy"}[24h]))) - mean: sum(rate(tsp_arb_latency_seconds_sum{issuer="robinhood", asset="spy"}[24h])) / sum(rate(tsp_arb_latency_seconds_count{issuer="robinhood", asset="spy"}[24h])) - success: sum(increase(tsp_arb_event_total{issuer="robinhood", asset="spy", outcome="converged"}[24h])) / clamp_min(sum(increase(tsp_arb_event_total{issuer="robinhood", asset="spy"}[24h])), 1) - sample_size: sum(increase(tsp_arb_event_total{issuer="robinhood", asset="spy", outcome="converged"}[24h])) - series: histogram_quantile(0.50, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="spy"}[1h]))) - - slug: mu name: MU tag: "Micron, 1% fee" @@ -181,29 +142,3 @@ providers: sample_size: sum(increase(tsp_arb_event_total{issuer="robinhood", asset="mu", outcome="converged"}[24h])) series: histogram_quantile(0.50, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="mu"}[1h]))) - - slug: msft - name: MSFT - tag: "Microsoft, 2% fee, thin pool test" - formula: "Median seconds until the MSFT pool on Robinhood Chain came back within 20 bps of the Yahoo reference after a 25 bps one-minute move, regular hours only, over 24h." - queries: - p50: histogram_quantile(0.50, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="msft"}[24h]))) - p90: histogram_quantile(0.90, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="msft"}[24h]))) - p99: histogram_quantile(0.99, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="msft"}[24h]))) - mean: sum(rate(tsp_arb_latency_seconds_sum{issuer="robinhood", asset="msft"}[24h])) / sum(rate(tsp_arb_latency_seconds_count{issuer="robinhood", asset="msft"}[24h])) - success: sum(increase(tsp_arb_event_total{issuer="robinhood", asset="msft", outcome="converged"}[24h])) / clamp_min(sum(increase(tsp_arb_event_total{issuer="robinhood", asset="msft"}[24h])), 1) - sample_size: sum(increase(tsp_arb_event_total{issuer="robinhood", asset="msft", outcome="converged"}[24h])) - series: histogram_quantile(0.50, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="msft"}[1h]))) - - - slug: amzn - name: AMZN - tag: "Amazon, 2% fee, thin pool test" - formula: "Median seconds until the AMZN pool on Robinhood Chain came back within 20 bps of the Yahoo reference after a 25 bps one-minute move, regular hours only, over 24h." - queries: - p50: histogram_quantile(0.50, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="amzn"}[24h]))) - p90: histogram_quantile(0.90, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="amzn"}[24h]))) - p99: histogram_quantile(0.99, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="amzn"}[24h]))) - mean: sum(rate(tsp_arb_latency_seconds_sum{issuer="robinhood", asset="amzn"}[24h])) / sum(rate(tsp_arb_latency_seconds_count{issuer="robinhood", asset="amzn"}[24h])) - success: sum(increase(tsp_arb_event_total{issuer="robinhood", asset="amzn", outcome="converged"}[24h])) / clamp_min(sum(increase(tsp_arb_event_total{issuer="robinhood", asset="amzn"}[24h])), 1) - sample_size: sum(increase(tsp_arb_event_total{issuer="robinhood", asset="amzn", outcome="converged"}[24h])) - series: histogram_quantile(0.50, sum by (le) (rate(tsp_arb_latency_seconds_bucket{issuer="robinhood", asset="amzn"}[1h]))) - diff --git a/harnesses/tokenized-stock-peg/cmd/script/config.go b/harnesses/tokenized-stock-peg/cmd/script/config.go index 0a91141b..5f96da1e 100644 --- a/harnesses/tokenized-stock-peg/cmd/script/config.go +++ b/harnesses/tokenized-stock-peg/cmd/script/config.go @@ -43,17 +43,22 @@ type Asset struct { USDGIsC0 bool } +// Illiquid tickers dropped 2026-07-16: GOOGL, TSLA, MSFT, AMZN, SPY. +// Their Uniswap v4 pools on Robinhood Chain have no arb activity; +// the pool spot price stays frozen at the last swap value (repeats +// tick after tick) while the Yahoo reference moves normally. Ref +// triggers fire but the pool never converges within the settle +// window, so events roll over as still_open with zero latency +// samples. The 5 dropped names surfaced as "unresponsive" on the +// bench page with no headline number. Cohort restricted to the 6 +// tickers with observable arb activity: NVDA, AAPL, PLTR, META, +// AMD, MU. Re-add when a pool's swap volume picks up. var assets = []Asset{ {Symbol: "NVDA", Token: "0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC", PoolID: "0x3bb34a44f1b2b5f32c034c38a53065a521a47b199700fa9bd19d60985ff24bf1", FeePPM: 3000, USDGIsC0: true}, {Symbol: "AAPL", Token: "0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9", PoolID: "0xda4116b5894ee7479e64eae9276e1a2944ef0e5ce863a299d296a15618deee01", FeePPM: 10000, USDGIsC0: true}, - {Symbol: "GOOGL", Token: "0x2e0847E8910a9732eB3fb1bb4b70a580ADAD4FE3", PoolID: "0xef22239f96c6ac95dcd57b90c6b14c0cc8c3c16844def34daef68dc9dd945344", FeePPM: 10000, USDGIsC0: false}, - {Symbol: "TSLA", Token: "0x322F0929c4625eD5bAd873c95208D54E1c003b2d", PoolID: "0x8517f8071ae5b831b738052f12125e8e3d6c158b78728aa44ce3b25e5104d32e", FeePPM: 3000, USDGIsC0: false}, {Symbol: "PLTR", Token: "0x894E1EC2D74FFE5AEF8Dc8A9e84686acCB964F2A", PoolID: "0xee430ee1003e1985e1828a01b9a20dad67ad4302994fe2abb4a173de4ac54623", FeePPM: 10000, USDGIsC0: true}, {Symbol: "META", Token: "0xc0D6457C16Cc70d6790Dd43521C899C87ce02f35", PoolID: "0x5875d407a42965b0e768c8925cea290e06fa50603ef34fc99eb92a1050e6ae36", FeePPM: 3000, USDGIsC0: true}, {Symbol: "AMD", Token: "0x86923f96303D656E4aa86D9d42D1e57ad2023fdC", PoolID: "0xde9f85fdd9e05a943a52f2c69ffafe3064a3287df03d02c9b431bc92d4781274", FeePPM: 10000, USDGIsC0: true}, - {Symbol: "MSFT", Token: "0xe93237C50D904957Cf27E7B1133b510C669c2e74", PoolID: "0xace02af66d24427b162f80329e039b78c226fb9a79669f5e18d5feec2aa0c056", FeePPM: 20000, USDGIsC0: true}, - {Symbol: "AMZN", Token: "0x12f190a9F9d7D37a250758b26824B97CE941bF54", PoolID: "0xa3280c768df670a535d14af8c22ad3907f2acfc0277c03309fb4d5fc8d43447e", FeePPM: 20000, USDGIsC0: false}, - {Symbol: "SPY", Token: "0x117cc2133c37B721F49dE2A7a74833232B3B4C0C", PoolID: "0x7eeda68cd84620339e6ad4bf054af9b19878ac13139991c7aaec018c40a8bb6a", FeePPM: 10000, USDGIsC0: false}, {Symbol: "MU", Token: "0xfF080c8ce2E5feadaCa0Da81314Ae59D232d4afD", PoolID: "0x6fa3ee0048e78bf0a513eb0ab56f482944a767c21db990fcf555605e69f05659", FeePPM: 10000, USDGIsC0: true}, }