From 3f8cedbad7c68bea0dcee0b6485b86b40b95832e Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Mon, 10 Aug 2026 19:38:05 +0200 Subject: [PATCH 1/2] fix(agg-head-lag): update Codex mint to new /api/codex/token endpoint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit www.defined.fi/api (createApiTokens GraphQL mutation) is dead as of 2026-08. New endpoint is /api/codex/token which returns JWE directly. Still blocked by Vercel TLS checkpoint for Go HTTP — use CODEX_JWT env var or DEFINED_TOKEN_SERVICE_URL sidecar (Paris box) for automatic refresh. scrape-cookie: add awaitPromise fix, diagnostic headers, in-browser fetch test. --- .../cmd/scrape-cookie/main.go | 154 ++++++++++++++++++ .../cmd/script/defined_auth.go | 42 ++--- 2 files changed, 169 insertions(+), 27 deletions(-) create mode 100644 harnesses/aggregator-head-lag/cmd/scrape-cookie/main.go diff --git a/harnesses/aggregator-head-lag/cmd/scrape-cookie/main.go b/harnesses/aggregator-head-lag/cmd/scrape-cookie/main.go new file mode 100644 index 00000000..c8e2ba91 --- /dev/null +++ b/harnesses/aggregator-head-lag/cmd/scrape-cookie/main.go @@ -0,0 +1,154 @@ +package main + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + "os" + "time" + + "github.com/chromedp/cdproto/network" + "github.com/chromedp/cdproto/runtime" + "github.com/chromedp/chromedp" +) + +func main() { + opts := append(chromedp.DefaultExecAllocatorOptions[:], + chromedp.Flag("headless", true), + chromedp.Flag("disable-gpu", true), + chromedp.Flag("no-sandbox", true), + chromedp.Flag("disable-dev-shm-usage", true), + chromedp.UserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"), + ) + + allocCtx, cancel := chromedp.NewExecAllocator(context.Background(), opts...) + defer cancel() + ctx, cancel := chromedp.NewContext(allocCtx) + defer cancel() + ctx, cancel = context.WithTimeout(ctx, 120*time.Second) + defer cancel() + + cookies := map[string]string{} + capturedCodexAuth := "" + apiCodexTokenResponse := "" + + // Intercept requests to api.defined.fi to capture Authorization header + chromedp.ListenTarget(ctx, func(ev interface{}) { + switch e := ev.(type) { + case *network.EventRequestWillBeSent: + if e.Request == nil { + return + } + // Capture auth from api.defined.fi requests + if len(e.Request.URL) > 20 && capturedCodexAuth == "" { + for k, v := range e.Request.Headers { + if k == "authorization" || k == "Authorization" { + fmt.Fprintf(os.Stderr, "[auth intercept] %s -> %s\n", + truncate(e.Request.URL, 60), truncate(fmt.Sprint(v), 100)) + capturedCodexAuth = fmt.Sprint(v) + } + } + } + } + }) + + err := chromedp.Run(ctx, + chromedp.Navigate("https://www.defined.fi/"), + chromedp.WaitVisible(`body`, chromedp.ByQuery), + chromedp.Sleep(8*time.Second), + + // Collect cookies + chromedp.ActionFunc(func(ctx context.Context) error { + cookieParams, err := network.GetCookies().Do(ctx) + if err != nil { + return fmt.Errorf("failed to get cookies: %w", err) + } + for _, cookie := range cookieParams { + cookies[cookie.Name] = cookie.Value + fmt.Fprintf(os.Stderr, "cookie: %s (len=%d)\n", cookie.Name, len(cookie.Value)) + } + return nil + }), + + // Call /api/codex/token from the browser (bypasses Vercel challenge) + chromedp.ActionFunc(func(ctx context.Context) error { + script := ` +new Promise((resolve, reject) => { + fetch('https://www.defined.fi/api/codex/token', { + method: 'POST', + credentials: 'include', + headers: {'Content-Type': 'application/json', 'Accept': 'application/json'} + }) + .then(r => { + const status = r.status; + const hdrs = {}; + r.headers.forEach((v, k) => { hdrs[k] = v; }); + return r.text().then(body => resolve(JSON.stringify({status, headers: hdrs, body: body.substring(0, 500)}))); + }) + .catch(e => reject(e.toString())) +}) +` + var result string + err := chromedp.Evaluate(script, &result, func(p *runtime.EvaluateParams) *runtime.EvaluateParams { + return p.WithAwaitPromise(true) + }).Do(ctx) + if err != nil { + fmt.Fprintf(os.Stderr, "/api/codex/token fetch error: %v\n", err) + return nil + } + apiCodexTokenResponse = result + fmt.Fprintf(os.Stderr, "/api/codex/token response: %s\n", result) + return nil + }), + + // Navigate to a token page to trigger API calls with auth headers + chromedp.Navigate("https://www.defined.fi/eth/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"), + chromedp.WaitVisible(`body`, chromedp.ByQuery), + chromedp.Sleep(8*time.Second), + + // Collect updated cookies after navigation + chromedp.ActionFunc(func(ctx context.Context) error { + cookieParams, err := network.GetCookies().Do(ctx) + if err != nil { + return nil + } + for _, cookie := range cookieParams { + cookies[cookie.Name] = cookie.Value + } + fmt.Fprintf(os.Stderr, "auth intercepted: %s\n", truncate(capturedCodexAuth, 100)) + return nil + }), + ) + if err != nil { + fmt.Fprintf(os.Stderr, "chrome error: %v\n", err) + os.Exit(1) + } + + _ = apiCodexTokenResponse + + if attToken, ok := cookies["defined-attestation-token"]; ok { + fmt.Printf("DEFINED_SESSION_COOKIE=%s\n", attToken) + } + + if raw, ok := cookies["codex_token"]; ok { + decoded, _ := url.QueryUnescape(raw) + var obj struct { + Token string `json:"token"` + } + if json.Unmarshal([]byte(decoded), &obj) == nil && obj.Token != "" { + fmt.Printf("CODEX_TOKEN=%s\n", obj.Token) + } + } + + if capturedCodexAuth != "" { + fmt.Printf("CAPTURED_CODEX_AUTH=%s\n", capturedCodexAuth) + } +} + +func truncate(s string, n int) string { + if len(s) <= n { + return s + } + return s[:n] +} diff --git a/harnesses/aggregator-head-lag/cmd/script/defined_auth.go b/harnesses/aggregator-head-lag/cmd/script/defined_auth.go index 716f05f0..1c1ab929 100644 --- a/harnesses/aggregator-head-lag/cmd/script/defined_auth.go +++ b/harnesses/aggregator-head-lag/cmd/script/defined_auth.go @@ -1,7 +1,6 @@ package main import ( - "bytes" "encoding/base64" "encoding/json" "fmt" @@ -12,12 +11,10 @@ import ( "time" ) +// DefinedTokenResponse is kept for compatibility but the /api/codex/token endpoint +// now returns {"token":"..."} directly (not GraphQL). type DefinedTokenResponse struct { - Data struct { - CreateApiTokens []struct { - Token string `json:"token"` - } `json:"createApiTokens"` - } `json:"data"` + Token string `json:"token"` } // JWT token cache to avoid rate limiting @@ -123,30 +120,21 @@ func generateDefinedJWTToken(sessionCookie string) (string, error) { Transport: transport, } - reqBody := map[string]interface{}{ - "operationName": "CreateApiToken", - "query": "mutation CreateApiToken { createApiTokens(input: { count: 1 }) { token } }", - "variables": map[string]interface{}{}, - } - - bodyBytes, _ := json.Marshal(reqBody) - req, _ := http.NewRequest("POST", "https://www.defined.fi/api", bytes.NewBuffer(bodyBytes)) + // NOTE: www.defined.fi/api (old createApiTokens GraphQL endpoint) is dead as of 2026-08. + // The new endpoint is /api/codex/token which returns {"token":""} directly. + // This endpoint is protected by Vercel's TLS-fingerprint checkpoint and cannot be + // called from Go's net/http directly. Use CODEX_JWT env var or DEFINED_TOKEN_SERVICE_URL + // (sidecar using headless Chrome) to bypass this. + req, _ := http.NewRequest("POST", "https://www.defined.fi/api/codex/token", nil) req.Header.Set("Accept", "application/json") - req.Header.Set("Accept-Language", "en-US,en;q=0.9") req.Header.Set("Content-Type", "application/json") req.Header.Set("Origin", "https://www.defined.fi") req.Header.Set("Referer", "https://www.defined.fi/") req.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36") - req.Header.Set("sec-ch-ua", `"Not_A Brand";v="8", "Chromium";v="131", "Google Chrome";v="131"`) - req.Header.Set("sec-ch-ua-mobile", "?0") - req.Header.Set("sec-ch-ua-platform", `"macOS"`) - req.Header.Set("sec-fetch-dest", "empty") - req.Header.Set("sec-fetch-mode", "cors") - req.Header.Set("sec-fetch-site", "same-origin") - req.AddCookie(&http.Cookie{Name: "session", Value: sessionCookie}) - - fmt.Println("[DEFINED-AUTH] Sending POST request to https://www.defined.fi/api...") + req.AddCookie(&http.Cookie{Name: "defined-attestation-token", Value: sessionCookie}) + + fmt.Println("[DEFINED-AUTH] Sending POST request to https://www.defined.fi/api/codex/token...") resp, err := client.Do(req) if err != nil { fmt.Printf("[DEFINED-AUTH] ❌ Request failed: %v\n", err) @@ -178,13 +166,13 @@ func generateDefinedJWTToken(sessionCookie string) (string, error) { return "", fmt.Errorf("failed to decode: %w", err) } - if len(tokenResp.Data.CreateApiTokens) == 0 { + if tokenResp.Token == "" { fmt.Println("[DEFINED-AUTH] ❌ No token in response") return "", fmt.Errorf("no token returned") } - fmt.Printf("[DEFINED-AUTH] ✅ JWT token generated successfully (length: %d)\n", len(tokenResp.Data.CreateApiTokens[0].Token)) - return tokenResp.Data.CreateApiTokens[0].Token, nil + fmt.Printf("[DEFINED-AUTH] ✅ JWT token generated successfully (length: %d)\n", len(tokenResp.Token)) + return tokenResp.Token, nil } // InvalidateTokenCache forces a token refresh on next request From 8218fe0c18d6eea7744c3d86b3b7b04f9a765ffc Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Mon, 10 Aug 2026 19:40:35 +0200 Subject: [PATCH 2/2] revert: layerzero back to raw queries (lz rate24h rule too expensive for VPS) --- benchmarks/layerzero-message-latency.yml | 210 +++++++++++------------ 1 file changed, 105 insertions(+), 105 deletions(-) diff --git a/benchmarks/layerzero-message-latency.yml b/benchmarks/layerzero-message-latency.yml index 343b036c..20f2a9c1 100644 --- a/benchmarks/layerzero-message-latency.yml +++ b/benchmarks/layerzero-message-latency.yml @@ -84,11 +84,11 @@ providers: tag: Ethereum → any chain, ~12s block time floor before DVN verification begins formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Ethereum." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="ethereum"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="ethereum"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="ethereum"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="ethereum"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="ethereum"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="ethereum"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="ethereum"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="ethereum"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="ethereum"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="ethereum"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="ethereum"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="ethereum"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="ethereum"}[1h]))) - slug: solana @@ -96,11 +96,11 @@ providers: tag: Solana → any chain, sub-second slot inclusion + DVN verification formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Solana." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="solana"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="solana"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="solana"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="solana"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="solana"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="solana"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="solana"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="solana"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="solana"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="solana"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="solana"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="solana"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="solana"}[1h]))) - slug: bnb @@ -108,11 +108,11 @@ providers: tag: BNB Chain → any chain, ~3s block time + DVN verification formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from BNB Chain." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="bnb"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="bnb"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="bnb"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="bnb"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="bnb"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="bnb"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="bnb"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="bnb"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="bnb"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="bnb"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="bnb"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="bnb"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="bnb"}[1h]))) - slug: arbitrum @@ -120,11 +120,11 @@ providers: tag: Arbitrum One → any chain, sub-second L2 block + DVN verification formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Arbitrum." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="arbitrum"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="arbitrum"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="arbitrum"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="arbitrum"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="arbitrum"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="arbitrum"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="arbitrum"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="arbitrum"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="arbitrum"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="arbitrum"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="arbitrum"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="arbitrum"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="arbitrum"}[1h]))) - slug: base @@ -132,11 +132,11 @@ providers: tag: Base → any chain, 2s block time + DVN verification formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Base." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="base"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="base"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="base"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="base"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="base"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="base"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="base"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="base"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="base"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="base"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="base"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="base"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="base"}[1h]))) - slug: optimism @@ -144,11 +144,11 @@ providers: tag: Optimism → any chain, 2s block time + DVN verification formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Optimism." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="optimism"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="optimism"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="optimism"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="optimism"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="optimism"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="optimism"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="optimism"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="optimism"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="optimism"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="optimism"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="optimism"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="optimism"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="optimism"}[1h]))) - slug: polygon @@ -156,11 +156,11 @@ providers: tag: Polygon PoS → any chain, Bor block time + DVN verification formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Polygon." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="polygon"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="polygon"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="polygon"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="polygon"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="polygon"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="polygon"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="polygon"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="polygon"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="polygon"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="polygon"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="polygon"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="polygon"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="polygon"}[1h]))) - slug: avalanche @@ -168,11 +168,11 @@ providers: tag: Avalanche C-Chain → any chain, Snowman++ sub-second finality + DVN verification formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Avalanche." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="avalanche"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="avalanche"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="avalanche"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="avalanche"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="avalanche"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="avalanche"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="avalanche"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="avalanche"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="avalanche"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="avalanche"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="avalanche"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="avalanche"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="avalanche"}[1h]))) - slug: robinhood @@ -180,11 +180,11 @@ providers: tag: Robinhood Chain → any chain, Nitro block time + DVN verification formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Robinhood Chain." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="robinhood"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="robinhood"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="robinhood"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="robinhood"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="robinhood"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="robinhood"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="robinhood"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="robinhood"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="robinhood"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="robinhood"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="robinhood"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="robinhood"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="robinhood"}[1h]))) - slug: monad @@ -192,130 +192,130 @@ providers: tag: Monad → any chain, sub-second block + DVN verification formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Monad." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="monad"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="monad"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="monad"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="monad"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="monad"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="monad"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="monad"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="monad"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="monad"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="monad"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="monad"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="monad"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="monad"}[1h]))) - slug: berachain name: Berachain tag: Berachain → any chain formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Berachain." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="berachain"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="berachain"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="berachain"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="berachain"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="berachain"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="berachain"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="berachain"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="berachain"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="berachain"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="berachain"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="berachain"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="berachain"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="berachain"}[1h]))) - slug: celo name: Celo tag: Celo → any chain formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Celo." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="celo"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="celo"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="celo"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="celo"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="celo"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="celo"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="celo"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="celo"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="celo"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="celo"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="celo"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="celo"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="celo"}[1h]))) - slug: injective name: Injective tag: Injective (Cosmos) → any chain formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Injective." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="injective"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="injective"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="injective"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="injective"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="injective"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="injective"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="injective"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="injective"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="injective"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="injective"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="injective"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="injective"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="injective"}[1h]))) - slug: ink name: Ink tag: Ink L2 → any chain formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Ink." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="ink"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="ink"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="ink"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="ink"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="ink"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="ink"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="ink"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="ink"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="ink"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="ink"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="ink"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="ink"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="ink"}[1h]))) - slug: linea name: Linea tag: Linea → any chain formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Linea." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="linea"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="linea"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="linea"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="linea"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="linea"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="linea"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="linea"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="linea"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="linea"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="linea"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="linea"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="linea"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="linea"}[1h]))) - slug: mantle name: Mantle tag: Mantle → any chain formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Mantle." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="mantle"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="mantle"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="mantle"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="mantle"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="mantle"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="mantle"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="mantle"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="mantle"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="mantle"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="mantle"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="mantle"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="mantle"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="mantle"}[1h]))) - slug: moonbeam name: Moonbeam tag: Moonbeam parachain → any chain formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Moonbeam." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="moonbeam"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="moonbeam"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="moonbeam"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="moonbeam"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="moonbeam"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="moonbeam"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="moonbeam"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="moonbeam"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="moonbeam"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="moonbeam"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="moonbeam"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="moonbeam"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="moonbeam"}[1h]))) - slug: scroll name: Scroll tag: Scroll → any chain formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Scroll." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="scroll"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="scroll"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="scroll"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="scroll"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="scroll"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="scroll"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="scroll"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="scroll"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="scroll"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="scroll"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="scroll"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="scroll"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="scroll"}[1h]))) - slug: sui name: Sui tag: Sui → any chain formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Sui." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="sui"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="sui"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="sui"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="sui"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="sui"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="sui"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="sui"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="sui"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="sui"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="sui"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="sui"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="sui"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="sui"}[1h]))) - slug: unichain name: Unichain tag: Unichain → any chain formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from Unichain." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="unichain"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="unichain"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="unichain"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="unichain"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="unichain"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="unichain"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="unichain"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="unichain"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="unichain"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="unichain"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="unichain"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="unichain"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="unichain"}[1h]))) - slug: world-chain name: World Chain tag: World Chain → any chain formula: "50th percentile over 24h of LayerZero end-to-end delivery latency for messages sourced from World Chain." queries: - p50: histogram_quantile(0.50, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="world-chain"}) - p90: histogram_quantile(0.90, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="world-chain"}) - p99: histogram_quantile(0.99, ocb:lz_message_latency_ms_bucket:rate24h{source_chain="world-chain"}) - mean: ocb:lz_message_latency_ms_sum:rate24h{source_chain="world-chain"} / ocb:lz_message_latency_ms_count:rate24h{source_chain="world-chain"} - sample_size: ocb:lz_message_seen:increase24h{source_chain="world-chain"} + p50: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="world-chain"}[24h]))) + p90: histogram_quantile(0.90, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="world-chain"}[24h]))) + p99: histogram_quantile(0.99, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="world-chain"}[24h]))) + mean: sum(rate(lz_message_latency_milliseconds_sum{source_chain="world-chain"}[24h])) / sum(rate(lz_message_latency_milliseconds_count{source_chain="world-chain"}[24h])) + sample_size: sum(increase(lz_message_seen_total{source_chain="world-chain"}[24h])) series: histogram_quantile(0.50, sum by(le) (rate(lz_message_latency_milliseconds_bucket{source_chain="world-chain"}[1h])))