From 65dd2d572a463e377612aac78e8c46cd6428f151 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Wed, 5 Aug 2026 15:38:14 +0200 Subject: [PATCH 1/3] chore: drop indexing-freshness harness (bench retired 2026-08-05) --- harnesses/indexing-freshness/Dockerfile | 22 --- .../indexing-freshness/cmd/script/config.go | 67 --------- .../indexing-freshness/cmd/script/main.go | 131 ----------------- .../indexing-freshness/cmd/script/metrics.go | 62 -------- .../indexing-freshness/cmd/script/pollers.go | 111 -------------- .../indexing-freshness/cmd/script/sampler.go | 139 ------------------ harnesses/indexing-freshness/go.mod | 18 --- harnesses/indexing-freshness/go.sum | 46 ------ harnesses/indexing-freshness/railway.toml | 7 - 9 files changed, 603 deletions(-) delete mode 100644 harnesses/indexing-freshness/Dockerfile delete mode 100644 harnesses/indexing-freshness/cmd/script/config.go delete mode 100644 harnesses/indexing-freshness/cmd/script/main.go delete mode 100644 harnesses/indexing-freshness/cmd/script/metrics.go delete mode 100644 harnesses/indexing-freshness/cmd/script/pollers.go delete mode 100644 harnesses/indexing-freshness/cmd/script/sampler.go delete mode 100644 harnesses/indexing-freshness/go.mod delete mode 100644 harnesses/indexing-freshness/go.sum delete mode 100644 harnesses/indexing-freshness/railway.toml diff --git a/harnesses/indexing-freshness/Dockerfile b/harnesses/indexing-freshness/Dockerfile deleted file mode 100644 index 63108cfc..00000000 --- a/harnesses/indexing-freshness/Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -FROM golang:1.24-alpine AS builder - -WORKDIR /app -RUN apk add --no-cache git - -COPY go.mod go.sum ./ -RUN go mod download - -COPY . . - -RUN CGO_ENABLED=0 GOOS=linux go build -o /app/monitor ./cmd/script - -FROM debian:bookworm-slim - -WORKDIR /app -RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/* - -COPY --from=builder /app/monitor /app/monitor - -EXPOSE 2112 - -CMD ["/app/monitor"] diff --git a/harnesses/indexing-freshness/cmd/script/config.go b/harnesses/indexing-freshness/cmd/script/config.go deleted file mode 100644 index b4d86824..00000000 --- a/harnesses/indexing-freshness/cmd/script/config.go +++ /dev/null @@ -1,67 +0,0 @@ -package main - -import ( - "os" - "strconv" - "strings" - "time" -) - -// Provider is one wallet-data API we race. Keys come exclusively from -// env (INDEXING_KEY_); a provider without a key is skipped. -// -// EveryN throttles participation for quota-tight free tiers: the -// provider only joins every Nth probe event. Budget is the monthly -// API-call budget for the guard (90% cutoff, calendar-month reset) — -// derived from each free tier's documented quota with headroom. -type Provider struct { - Slug string - EveryN int - Budget int64 -} - -var providers = []Provider{ - {Slug: "mobula", EveryN: 1, Budget: 250_000}, - {Slug: "zerion", EveryN: 1, Budget: 55_000}, - {Slug: "goldrush", EveryN: 1, Budget: 90_000}, - // Allium free tier: 20k calls/month, aggressive per-second limits. - {Slug: "allium", EveryN: 3, Budget: 18_000}, -} - -func keyFor(slug string) string { - return strings.TrimSpace(os.Getenv("INDEXING_KEY_" + strings.ToUpper(slug))) -} - -func activeProviders() []Provider { - var out []Provider - for _, p := range providers { - if keyFor(p.Slug) != "" { - out = append(out, p) - } - } - return out -} - -const chainSlug = "base" - -func rpcHTTP() string { return strings.TrimSpace(os.Getenv("INDEXING_RPC_HTTP")) } -func rpcWSS() string { return strings.TrimSpace(os.Getenv("INDEXING_RPC_WSS")) } - -// eventInterval: one probe event (fresh organic tx picked from a new -// block) per interval. 10 min default → 144 events/day, which keeps -// every provider inside its monthly free quota given the poll schedule. -func eventInterval() time.Duration { - if v := strings.TrimSpace(os.Getenv("INDEXING_EVENT_SECONDS")); v != "" { - if n, err := strconv.Atoi(v); err == nil && n >= 60 { - return time.Duration(n) * time.Second - } - } - return 10 * time.Minute -} - -// pollSchedule: seconds after T0 at which each provider is polled. -// Front-loaded because the interesting race happens in the first -// seconds; capped at 120s after which the event counts as "missed". -// Precision note for the methodology: measured lag is an upper bound -// with resolution equal to the gap between consecutive polls. -var pollSchedule = []int{1, 2, 3, 4, 6, 8, 11, 15, 20, 26, 34, 45, 60, 80, 100, 120} diff --git a/harnesses/indexing-freshness/cmd/script/main.go b/harnesses/indexing-freshness/cmd/script/main.go deleted file mode 100644 index 5d2ab929..00000000 --- a/harnesses/indexing-freshness/cmd/script/main.go +++ /dev/null @@ -1,131 +0,0 @@ -package main - -import ( - "context" - "fmt" - "os" - "os/signal" - "strings" - "sync" - "syscall" - "time" -) - -// indexing-freshness — bench №070. -// -// One probe event per interval: grab a fresh organic native transfer -// from the newest block (T0 = our observation of the block), then poll -// every cohort wallet API on a front-loaded schedule until each one -// returns the tx (lag = poll time − T0) or 120s passes (missed). - -func main() { - fmt.Println("=== Indexing Freshness Harness ===") - fmt.Println("OpenChainBench — organic tx → wallet-API visibility lag.") - if rpcHTTP() == "" { - fmt.Println("[fatal] INDEXING_RPC_HTTP not set") - os.Exit(1) - } - active := activeProviders() - if len(active) == 0 { - fmt.Println("[fatal] no INDEXING_KEY_* env vars set") - os.Exit(1) - } - fmt.Printf("Chain: %s | event interval: %s | poll cap: %ds\n", chainSlug, eventInterval(), pollSchedule[len(pollSchedule)-1]) - for _, p := range active { - fmt.Printf(" - %-10s everyN=%d budget=%d calls/mo\n", p.Slug, p.EveryN, p.Budget) - } - - addr := ":2112" - if v := strings.TrimSpace(os.Getenv("METRICS_ADDR")); v != "" { - addr = v - } - fmt.Printf("Metrics server: %s/metrics\n\n", addr) - go func() { - if err := StartMetricsServer(addr); err != nil { - fmt.Printf("[fatal] metrics server: %v\n", err) - os.Exit(1) - } - }() - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - go runEvents(ctx, active) - - sig := make(chan os.Signal, 1) - signal.Notify(sig, os.Interrupt, syscall.SIGTERM) - s := <-sig - fmt.Printf("\n[shutdown] %v\n", s) - cancel() -} - -func runEvents(ctx context.Context, active []Provider) { - t := time.NewTicker(eventInterval()) - defer t.Stop() - var lastSeen uint64 - eventN := 0 - for { - eventN++ - _, bn, tx := waitFreshBlock(lastSeen) - lastSeen = bn - t0 := time.Now() - fmt.Printf("[event %d] block=%d tx=%s wallet=%s\n", eventN, bn, tx.Hash[:14]+"…", tx.From[:10]+"…") - - var wg sync.WaitGroup - for _, p := range active { - if eventN%p.EveryN != 0 { - continue - } - if !quota.allow(p) { - probeTotal.WithLabelValues(p.Slug, chainSlug, "quota_paused").Inc() - fmt.Printf(" %-10s quota guard tripped — paused until month rollover\n", p.Slug) - continue - } - wg.Add(1) - go func(p Provider) { - defer wg.Done() - raceProvider(ctx, p, tx.From, tx.Hash, t0) - }(p) - } - wg.Wait() - - select { - case <-ctx.Done(): - return - case <-t.C: - } - } -} - -func raceProvider(ctx context.Context, p Provider, wallet, txHash string, t0 time.Time) { - var lastErr error - for _, after := range pollSchedule { - wait := time.Until(t0.Add(time.Duration(after) * time.Second)) - if wait > 0 { - select { - case <-ctx.Done(): - return - case <-time.After(wait): - } - } - found, err := checkProvider(p.Slug, wallet, txHash) - if err != nil { - lastErr = err - continue - } - if found { - lag := time.Since(t0).Seconds() - freshnessSeconds.WithLabelValues(p.Slug, chainSlug).Set(lag) - freshnessHist.WithLabelValues(p.Slug, chainSlug).Observe(lag) - probeTotal.WithLabelValues(p.Slug, chainSlug, "found").Inc() - fmt.Printf(" %-10s found in %.1fs\n", p.Slug, lag) - return - } - } - if lastErr != nil { - probeTotal.WithLabelValues(p.Slug, chainSlug, "api_error").Inc() - fmt.Printf(" %-10s api_error: %s\n", p.Slug, sanitize(lastErr)) - return - } - probeTotal.WithLabelValues(p.Slug, chainSlug, "missed").Inc() - fmt.Printf(" %-10s MISSED (not indexed within %ds)\n", p.Slug, pollSchedule[len(pollSchedule)-1]) -} diff --git a/harnesses/indexing-freshness/cmd/script/metrics.go b/harnesses/indexing-freshness/cmd/script/metrics.go deleted file mode 100644 index e2286884..00000000 --- a/harnesses/indexing-freshness/cmd/script/metrics.go +++ /dev/null @@ -1,62 +0,0 @@ -package main - -import ( - "net/http" - - "github.com/prometheus/client_golang/prometheus" - "github.com/prometheus/client_golang/prometheus/promauto" - "github.com/prometheus/client_golang/prometheus/promhttp" -) - -var ( - freshnessSeconds = promauto.NewGaugeVec( - prometheus.GaugeOpts{ - Name: "indexing_freshness_seconds", - Help: "Latest observed lag between an organic on-chain tx confirmation and the moment the provider's wallet API first returns it.", - }, - []string{"provider", "chain"}, - ) - - freshnessHist = promauto.NewHistogramVec( - prometheus.HistogramOpts{ - Name: "indexing_freshness_seconds_histogram", - Help: "Histogram of wallet-API indexing freshness lags — drives p50/p90 via quantile_over_time.", - Buckets: []float64{1, 2, 3, 4, 6, 8, 11, 15, 20, 26, 34, 45, 60, 80, 100, 120}, - }, - []string{"provider", "chain"}, - ) - - probeTotal = promauto.NewCounterVec( - prometheus.CounterOpts{ - Name: "indexing_probe_total", - Help: "Probe outcomes per provider: found | missed (not indexed within 120s) | api_error | quota_paused.", - }, - []string{"provider", "chain", "result"}, - ) - - apiCalls = promauto.NewCounterVec( - prometheus.CounterOpts{ - Name: "indexing_api_calls_total", - Help: "API calls issued per provider (feeds the monthly quota guard).", - }, - []string{"provider"}, - ) - - quotaUsedRatio = promauto.NewGaugeVec( - prometheus.GaugeOpts{ - Name: "indexing_quota_used_ratio", - Help: "Fraction of the provider's monthly call budget consumed (probing pauses at 0.90).", - }, - []string{"provider"}, - ) -) - -func StartMetricsServer(addr string) error { - mux := http.NewServeMux() - mux.Handle("/metrics", promhttp.Handler()) - mux.HandleFunc("/health", func(w http.ResponseWriter, _ *http.Request) { - w.WriteHeader(http.StatusOK) - _, _ = w.Write([]byte("ok")) - }) - return http.ListenAndServe(addr, mux) -} diff --git a/harnesses/indexing-freshness/cmd/script/pollers.go b/harnesses/indexing-freshness/cmd/script/pollers.go deleted file mode 100644 index de7b8463..00000000 --- a/harnesses/indexing-freshness/cmd/script/pollers.go +++ /dev/null @@ -1,111 +0,0 @@ -package main - -import ( - "bytes" - "encoding/base64" - "fmt" - "io" - "net/http" - "strings" - "sync" - "time" -) - -// Detection is deliberately parser-free: we lowercase the raw response -// body and look for the tx hash substring. Every cohort API returns the -// hash verbatim in its JSON, so this is immune to per-provider schema -// churn and cannot be accused of favouring any response shape. -func bodyContains(resp *http.Response, txHash string) (bool, error) { - defer resp.Body.Close() - raw, err := io.ReadAll(io.LimitReader(resp.Body, 4<<20)) - if err != nil { - return false, err - } - if resp.StatusCode != 200 { - return false, fmt.Errorf("status %d", resp.StatusCode) - } - return bytes.Contains(bytes.ToLower(raw), []byte(strings.ToLower(txHash))), nil -} - -var httpClient = &http.Client{Timeout: 8 * time.Second} - -// checkProvider asks one provider's wallet API whether it has indexed -// txHash for wallet yet. Returns (found, error). Every call increments -// the quota counter regardless of outcome. -func checkProvider(slug, wallet, txHash string) (bool, error) { - apiCalls.WithLabelValues(slug).Inc() - key := keyFor(slug) - var req *http.Request - var err error - - switch slug { - case "zerion": - u := fmt.Sprintf("https://api.zerion.io/v1/wallets/%s/transactions/?page%%5Bsize%%5D=20&filter%%5Bchain_ids%%5D=%s", wallet, chainSlug) - req, err = http.NewRequest("GET", u, nil) - if err == nil { - req.Header.Set("Authorization", "Basic "+base64.StdEncoding.EncodeToString([]byte(key+":"))) - req.Header.Set("Accept", "application/json") - } - case "goldrush": - u := fmt.Sprintf("https://api.covalenthq.com/v1/%s-mainnet/address/%s/transactions_v3/?page-size=20", chainSlug, wallet) - req, err = http.NewRequest("GET", u, nil) - if err == nil { - req.Header.Set("Authorization", "Bearer "+key) - } - case "allium": - body := fmt.Sprintf(`[{"chain":"%s","address":"%s","limit":20}]`, chainSlug, wallet) - req, err = http.NewRequest("POST", "https://api.allium.so/api/v1/developer/wallet/transactions", strings.NewReader(body)) - if err == nil { - req.Header.Set("X-API-KEY", key) - req.Header.Set("Content-Type", "application/json") - } - case "mobula": - u := fmt.Sprintf("https://api.mobula.io/api/1/wallet/transactions?wallet=%s&limit=20", wallet) - req, err = http.NewRequest("GET", u, nil) - if err == nil { - req.Header.Set("Authorization", key) - } - default: - return false, fmt.Errorf("unknown provider %s", slug) - } - if err != nil { - return false, err - } - req.Header.Set("User-Agent", "OpenChainBench/1.0 (+https://openchainbench.com)") - resp, err := httpClient.Do(req) - if err != nil { - return false, err - } - return bodyContains(resp, txHash) -} - -// --------------------------------------------------------------------------- -// Monthly quota guard (same design as rpc-keyed-latency). -// --------------------------------------------------------------------------- - -type quotaGuard struct { - mu sync.Mutex - month string - counts map[string]int64 -} - -var quota = "aGuard{counts: make(map[string]int64)} - -func (q *quotaGuard) allow(p Provider) bool { - q.mu.Lock() - defer q.mu.Unlock() - m := time.Now().UTC().Format("2006-01") - if m != q.month { - q.month = m - q.counts = make(map[string]int64) - } - used := q.counts[p.Slug] - ratio := float64(used) / float64(p.Budget) - quotaUsedRatio.WithLabelValues(p.Slug).Set(ratio) - if ratio >= 0.90 { - return false - } - // Reserve the worst case for one event (full poll schedule). - q.counts[p.Slug] = used + int64(len(pollSchedule)) - return true -} diff --git a/harnesses/indexing-freshness/cmd/script/sampler.go b/harnesses/indexing-freshness/cmd/script/sampler.go deleted file mode 100644 index 33a2d2ee..00000000 --- a/harnesses/indexing-freshness/cmd/script/sampler.go +++ /dev/null @@ -1,139 +0,0 @@ -package main - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - "math/rand" - "net/http" - "strconv" - "strings" - "time" -) - -// The organic sampler. Instead of funding a probe wallet, we pick a -// fresh native transfer from the newest block: real user, real tx, -// different wallet every event — which also makes the ground truth -// impossible for a provider to special-case (there is no benchmark -// wallet to whitelist). -// -// T0 = the instant WE observe the block containing the tx via our own -// RPC. Identical reference for every provider, same host clock. - -type rpcTx struct { - Hash string `json:"hash"` - From string `json:"from"` - To string `json:"to"` - Input string `json:"input"` - Value string `json:"value"` -} - -type rpcBlock struct { - Number string `json:"number"` - Transactions []rpcTx `json:"transactions"` -} - -func rpcCall(method string, params string) (json.RawMessage, error) { - body := fmt.Sprintf(`{"jsonrpc":"2.0","method":"%s","params":%s,"id":%d}`, method, params, time.Now().UnixNano()) - req, _ := http.NewRequest("POST", rpcHTTP(), strings.NewReader(body)) - req.Header.Set("Content-Type", "application/json") - req.Header.Set("User-Agent", "OpenChainBench/1.0 (+https://openchainbench.com)") - resp, err := httpClient.Do(req) - if err != nil { - return nil, err - } - defer resp.Body.Close() - raw, err := io.ReadAll(io.LimitReader(resp.Body, 8<<20)) - if err != nil { - return nil, err - } - var env struct { - Result json.RawMessage `json:"result"` - Error *struct { - Message string `json:"message"` - } `json:"error"` - } - if err := json.Unmarshal(raw, &env); err != nil { - return nil, err - } - if env.Error != nil { - return nil, fmt.Errorf("rpc: %s", env.Error.Message) - } - return env.Result, nil -} - -func latestBlock() (*rpcBlock, error) { - res, err := rpcCall("eth_getBlockByNumber", `["latest",true]`) - if err != nil { - return nil, err - } - var b rpcBlock - if err := json.Unmarshal(res, &b); err != nil { - return nil, err - } - return &b, nil -} - -// pickNativeTransfer returns a random plain native transfer from the -// block: value > 0, empty calldata, sender is a normal EOA. On OP-stack -// chains transactions[0] is always the L1 system deposit — the -// 0xdeaddead filter drops it. -func pickNativeTransfer(b *rpcBlock) *rpcTx { - var cands []rpcTx - for _, tx := range b.Transactions { - if tx.Input != "0x" || tx.To == "" || strings.EqualFold(tx.From, tx.To) { - continue - } - if strings.HasPrefix(strings.ToLower(tx.From), "0xdeaddead") { - continue - } - v, err := strconv.ParseUint(strings.TrimPrefix(tx.Value, "0x"), 16, 64) - if err != nil || v == 0 { - continue - } - cands = append(cands, tx) - } - if len(cands) == 0 { - return nil - } - tx := cands[rand.Intn(len(cands))] - return &tx -} - -// waitFreshBlock polls the RPC until a block newer than lastSeen with a -// usable native transfer shows up. 500ms cadence bounds the T0 error at -// +500ms, identical for every provider. -func waitFreshBlock(lastSeen uint64) (*rpcBlock, uint64, *rpcTx) { - for { - b, err := latestBlock() - if err != nil { - time.Sleep(2 * time.Second) - continue - } - bn, _ := strconv.ParseUint(strings.TrimPrefix(b.Number, "0x"), 16, 64) - if bn > lastSeen { - if tx := pickNativeTransfer(b); tx != nil { - return b, bn, tx - } - lastSeen = bn - } - time.Sleep(500 * time.Millisecond) - } -} - -// sanitize strips anything URL-ish from provider errors before logging -// (defense in depth — no endpoint carries a key in this harness's URLs -// except mobula/allium headers, but keep the rule uniform). -func sanitize(err error) string { - if err == nil { - return "" - } - s := err.Error() - if i := strings.Index(s, "http"); i >= 0 { - return s[:i] + "" - } - return s -} - -var _ = bytes.MinRead diff --git a/harnesses/indexing-freshness/go.mod b/harnesses/indexing-freshness/go.mod deleted file mode 100644 index 55bd09f7..00000000 --- a/harnesses/indexing-freshness/go.mod +++ /dev/null @@ -1,18 +0,0 @@ -module indexing-freshness - -go 1.24.0 - -require github.com/prometheus/client_golang v1.23.2 - -require ( - github.com/beorn7/perks v1.0.1 // indirect - github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/kr/text v0.2.0 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.66.1 // indirect - github.com/prometheus/procfs v0.16.1 // indirect - go.yaml.in/yaml/v2 v2.4.2 // indirect - golang.org/x/sys v0.35.0 // indirect - google.golang.org/protobuf v1.36.8 // indirect -) diff --git a/harnesses/indexing-freshness/go.sum b/harnesses/indexing-freshness/go.sum deleted file mode 100644 index d6b8ca98..00000000 --- a/harnesses/indexing-freshness/go.sum +++ /dev/null @@ -1,46 +0,0 @@ -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= -github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= -github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= -github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= -github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= -github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs= -github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA= -github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= -github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= -github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= -go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= -go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= -golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= -golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= -google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/harnesses/indexing-freshness/railway.toml b/harnesses/indexing-freshness/railway.toml deleted file mode 100644 index 2abbb1f0..00000000 --- a/harnesses/indexing-freshness/railway.toml +++ /dev/null @@ -1,7 +0,0 @@ -[build] -builder = "DOCKERFILE" -dockerfilePath = "Dockerfile" - -[deploy] -healthcheckPath = "/health" -restartPolicyType = "ON_FAILURE" From 99ceb2df293a2cc06f4af1db621c0c36f8eeff23 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Wed, 5 Aug 2026 16:25:22 +0200 Subject: [PATCH 2/3] feat: add wave-7 RPC benches 184-199 (16 chains) --- benchmarks/chiliz-rpc.yml | 155 +++++++++++++ benchmarks/cronos-zkevm-rpc.yml | 132 ++++++++++++ benchmarks/ethereum-classic-rpc.yml | 132 ++++++++++++ benchmarks/etherlink-rpc.yml | 155 +++++++++++++ benchmarks/fantom-rpc.yml | 181 ++++++++++++++++ benchmarks/haqq-rpc.yml | 155 +++++++++++++ benchmarks/hydration-rpc.yml | 178 +++++++++++++++ benchmarks/kusama-rpc.yml | 204 ++++++++++++++++++ benchmarks/oraichain-rpc.yml | 132 ++++++++++++ benchmarks/peaq-rpc.yml | 132 ++++++++++++ benchmarks/pulsechain-rpc.yml | 132 ++++++++++++ benchmarks/songbird-rpc.yml | 155 +++++++++++++ benchmarks/telos-rpc.yml | 132 ++++++++++++ benchmarks/warden-rpc.yml | 132 ++++++++++++ benchmarks/wemix-rpc.yml | 155 +++++++++++++ benchmarks/zetachain-rpc.yml | 178 +++++++++++++++ .../rpc-capabilities/cmd/script/config.go | 178 +++++++++++++++ public/logos/chiliz.png | Bin 0 -> 33460 bytes public/logos/cronos-zkevm.png | Bin 0 -> 9539 bytes public/logos/ethereum-classic.png | Bin 0 -> 2953 bytes public/logos/etherlink.png | Bin 0 -> 34798 bytes public/logos/fantom.png | Bin 0 -> 6050 bytes public/logos/haqq.svg | 16 ++ public/logos/hydration.png | Bin 0 -> 32256 bytes public/logos/kusama.png | Bin 0 -> 2215 bytes public/logos/oraichain.svg | 14 ++ public/logos/peaq.png | Bin 0 -> 37830 bytes public/logos/pulsechain.png | Bin 0 -> 42556 bytes public/logos/songbird.png | Bin 0 -> 1086 bytes public/logos/telos.png | Bin 0 -> 19796 bytes public/logos/warden.svg | 4 + public/logos/wemix.png | Bin 0 -> 66425 bytes public/logos/zetachain.png | Bin 0 -> 22032 bytes src/lib/logo-manifest.ts | 32 +++ 34 files changed, 2684 insertions(+) create mode 100644 benchmarks/chiliz-rpc.yml create mode 100644 benchmarks/cronos-zkevm-rpc.yml create mode 100644 benchmarks/ethereum-classic-rpc.yml create mode 100644 benchmarks/etherlink-rpc.yml create mode 100644 benchmarks/fantom-rpc.yml create mode 100644 benchmarks/haqq-rpc.yml create mode 100644 benchmarks/hydration-rpc.yml create mode 100644 benchmarks/kusama-rpc.yml create mode 100644 benchmarks/oraichain-rpc.yml create mode 100644 benchmarks/peaq-rpc.yml create mode 100644 benchmarks/pulsechain-rpc.yml create mode 100644 benchmarks/songbird-rpc.yml create mode 100644 benchmarks/telos-rpc.yml create mode 100644 benchmarks/warden-rpc.yml create mode 100644 benchmarks/wemix-rpc.yml create mode 100644 benchmarks/zetachain-rpc.yml create mode 100644 public/logos/chiliz.png create mode 100644 public/logos/cronos-zkevm.png create mode 100644 public/logos/ethereum-classic.png create mode 100644 public/logos/etherlink.png create mode 100644 public/logos/fantom.png create mode 100644 public/logos/haqq.svg create mode 100644 public/logos/hydration.png create mode 100644 public/logos/kusama.png create mode 100644 public/logos/oraichain.svg create mode 100644 public/logos/peaq.png create mode 100644 public/logos/pulsechain.png create mode 100644 public/logos/songbird.png create mode 100644 public/logos/telos.png create mode 100644 public/logos/warden.svg create mode 100644 public/logos/wemix.png create mode 100644 public/logos/zetachain.png diff --git a/benchmarks/chiliz-rpc.yml b/benchmarks/chiliz-rpc.yml new file mode 100644 index 00000000..bf754b6a --- /dev/null +++ b/benchmarks/chiliz-rpc.yml @@ -0,0 +1,155 @@ +# OpenChainBench. Bench № 190 + +slug: chiliz-rpc +number: "190" +title: Fastest free Chiliz Chain RPC, live no-key endpoint latency +seo_title: "Fastest free Chiliz Chain RPC 2026" +seo_description: "{{best_name}} leads free Chiliz Chain RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 4 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public Chiliz Chain EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Chiliz Chain (chain 88888) is an EVM-compatible sports and entertainment blockchain powering fan tokens for FC Barcelona, PSG, Juventus and 150+ clubs. CHZ is the gas token. Four keyless endpoints are probed continuously: PublicNode (chiliz-rpc.publicnode.com), Ankr (rpc.ankr.com/chiliz), Chiliz Foundation official (rpc.chiliz.com), and dRPC (chiliz.drpc.org). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Chiliz Chain. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public Chiliz Chain endpoint + that sustains continuous probing, 4 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Chiliz-scoped answer with per-region breakdowns as a first-class dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\",false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"chiliz\"`. Provider coverage at launch: 4 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Chiliz Chain RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 4 measured providers." + +faq: + - q: "What is the fastest free Chiliz Chain RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 4 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Chiliz Chain RPCs work without an API key?" + a: "4 endpoints sustain continuous keyless probing: PublicNode, Ankr, Chiliz Foundation official, and dRPC. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Chiliz RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Chiliz Chain RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="chiliz"}) + +dimensions: + region: + - { value: all, label: All regions } + - { value: us-east, label: US-East } + - { value: eu-west, label: EU-West } + - { value: sgp, label: Singapore } + +providers: + - slug: publicnode + name: PublicNode + tag: PublicNode multi-chain gateway for Chiliz Chain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to PublicNode's no-key Chiliz endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="chiliz"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="chiliz"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="chiliz"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="chiliz"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="chiliz"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="chiliz"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="chiliz"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="chiliz"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="chiliz", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="chiliz", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="chiliz", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="chiliz", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="chiliz", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="chiliz", region="sgp"}[1h]) + + - slug: ankr + name: Ankr + tag: Ankr decentralized node provider for Chiliz Chain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Ankr's no-key Chiliz endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="chiliz"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="ankr", chain="chiliz"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="ankr", chain="chiliz"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="ankr", chain="chiliz"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="ankr", chain="chiliz"}) / sum(ocb:rpc_call:rate_24h{provider="ankr", chain="chiliz"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="ankr", chain="chiliz"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="chiliz"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="chiliz", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="chiliz", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="chiliz", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="chiliz", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="chiliz", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="chiliz", region="sgp"}[1h]) + + - slug: chiliz-official + name: Chiliz Foundation + tag: Chiliz Foundation official public RPC endpoint + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Chiliz Foundation's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chiliz-official", chain="chiliz"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="chiliz-official", chain="chiliz"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="chiliz-official", chain="chiliz"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="chiliz-official", chain="chiliz"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="chiliz-official", chain="chiliz"}) / sum(ocb:rpc_call:rate_24h{provider="chiliz-official", chain="chiliz"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="chiliz-official", chain="chiliz"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="chiliz-official", chain="chiliz"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chiliz-official", chain="chiliz", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="chiliz-official", chain="chiliz", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chiliz-official", chain="chiliz", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="chiliz-official", chain="chiliz", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="chiliz-official", chain="chiliz", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="chiliz-official", chain="chiliz", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for Chiliz Chain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key Chiliz endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="chiliz"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="chiliz"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="chiliz"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="chiliz"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="chiliz"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="chiliz"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="chiliz"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="chiliz"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="chiliz", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="chiliz", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="chiliz", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="chiliz", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="chiliz", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="chiliz", region="sgp"}[1h]) diff --git a/benchmarks/cronos-zkevm-rpc.yml b/benchmarks/cronos-zkevm-rpc.yml new file mode 100644 index 00000000..819a5429 --- /dev/null +++ b/benchmarks/cronos-zkevm-rpc.yml @@ -0,0 +1,132 @@ +# OpenChainBench. Bench № 193 + +slug: cronos-zkevm-rpc +number: "193" +title: Fastest free Cronos zkEVM RPC, live no-key endpoint latency +seo_title: "Fastest free Cronos zkEVM RPC 2026" +seo_description: "{{best_name}} leads free Cronos zkEVM RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public Cronos zkEVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Cronos zkEVM (chain 388) is Crypto.com's zkEVM Layer 2 built on the zkSync Era stack, distinct from Cronos EVM. CRO is the bridged gas token. Three keyless endpoints are probed continuously: the Cronos official mainnet gateway (mainnet.zkevm.cronos.org), dRPC (cronos-zkevm.drpc.org), and Blast API. + +abstract: | + Per-chain member of the RPC latency cluster, extended to Cronos zkEVM. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public Cronos zkEVM endpoint + that sustains continuous probing, 3 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Cronos zkEVM-scoped answer with per-region breakdowns as a first-class dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\",false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"cronos-zkevm\"`. Provider coverage at launch: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Cronos zkEVM RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Cronos zkEVM RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Cronos zkEVM RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: Cronos official, dRPC, and Blast API. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Cronos zkEVM RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Cronos zkEVM RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="cronos-zkevm"}) + +dimensions: + region: + - { value: all, label: All regions } + - { value: us-east, label: US-East } + - { value: eu-west, label: EU-West } + - { value: sgp, label: Singapore } + +providers: + - slug: cronos-zkevm-official + name: Cronos (Crypto.com) + tag: Crypto.com official Cronos zkEVM public RPC + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to the official Cronos zkEVM no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="cronos-zkevm-official", chain="cronos-zkevm"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="cronos-zkevm-official", chain="cronos-zkevm"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="cronos-zkevm-official", chain="cronos-zkevm"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="cronos-zkevm-official", chain="cronos-zkevm"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="cronos-zkevm-official", chain="cronos-zkevm"}) / sum(ocb:rpc_call:rate_24h{provider="cronos-zkevm-official", chain="cronos-zkevm"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="cronos-zkevm-official", chain="cronos-zkevm"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="cronos-zkevm-official", chain="cronos-zkevm"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="cronos-zkevm-official", chain="cronos-zkevm", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="cronos-zkevm-official", chain="cronos-zkevm", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="cronos-zkevm-official", chain="cronos-zkevm", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="cronos-zkevm-official", chain="cronos-zkevm", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="cronos-zkevm-official", chain="cronos-zkevm", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="cronos-zkevm-official", chain="cronos-zkevm", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for Cronos zkEVM + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key Cronos zkEVM endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="cronos-zkevm"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="cronos-zkevm"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="cronos-zkevm"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="cronos-zkevm"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="cronos-zkevm"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="cronos-zkevm"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="cronos-zkevm"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="cronos-zkevm"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="cronos-zkevm", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="cronos-zkevm", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="cronos-zkevm", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="cronos-zkevm", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="cronos-zkevm", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="cronos-zkevm", region="sgp"}[1h]) + + - slug: blastapi + name: Blast API + tag: Blast API public gateway for Cronos zkEVM + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Blast API's no-key Cronos zkEVM endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="cronos-zkevm"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blastapi", chain="cronos-zkevm"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blastapi", chain="cronos-zkevm"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blastapi", chain="cronos-zkevm"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blastapi", chain="cronos-zkevm"}) / sum(ocb:rpc_call:rate_24h{provider="blastapi", chain="cronos-zkevm"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blastapi", chain="cronos-zkevm"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="cronos-zkevm"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="cronos-zkevm", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="cronos-zkevm", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="cronos-zkevm", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="cronos-zkevm", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="cronos-zkevm", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="cronos-zkevm", region="sgp"}[1h]) diff --git a/benchmarks/ethereum-classic-rpc.yml b/benchmarks/ethereum-classic-rpc.yml new file mode 100644 index 00000000..6add2964 --- /dev/null +++ b/benchmarks/ethereum-classic-rpc.yml @@ -0,0 +1,132 @@ +# OpenChainBench. Bench № 194 + +slug: ethereum-classic-rpc +number: "194" +title: Fastest free Ethereum Classic RPC, live no-key endpoint latency +seo_title: "Fastest free Ethereum Classic RPC 2026" +seo_description: "{{best_name}} leads free Ethereum Classic RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public Ethereum Classic EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Ethereum Classic (chain 61) is the original Ethereum chain post-2016 DAO fork, continuing as a Proof-of-Work EVM network with ETC as the gas token. The chain upholds code-is-law immutability and has a dedicated long-term holder community. Three keyless endpoints are probed continuously: dRPC (etc.drpc.org), ETCDesktop (etc.etcdesktop.com), and ETCMC (rpc.etcmc.net). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Ethereum Classic. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public Ethereum Classic endpoint + that sustains continuous probing, 3 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Ethereum Classic-scoped answer with per-region breakdowns as a first-class dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\",false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"ethereum-classic\"`. Provider coverage at launch: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Ethereum Classic RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Ethereum Classic RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Ethereum Classic RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: dRPC, ETCDesktop, and ETCMC. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Ethereum Classic RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Ethereum Classic RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="ethereum-classic"}) + +dimensions: + region: + - { value: all, label: All regions } + - { value: us-east, label: US-East } + - { value: eu-west, label: EU-West } + - { value: sgp, label: Singapore } + +providers: + - slug: drpc + name: dRPC + tag: dRPC public gateway for Ethereum Classic + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key Ethereum Classic endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="ethereum-classic"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="ethereum-classic"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="ethereum-classic"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="ethereum-classic"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="ethereum-classic"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="ethereum-classic"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="ethereum-classic"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="ethereum-classic"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="ethereum-classic", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="ethereum-classic", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="ethereum-classic", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="ethereum-classic", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="ethereum-classic", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="ethereum-classic", region="sgp"}[1h]) + + - slug: etcdesktop + name: ETCDesktop + tag: ETCDesktop community public RPC for Ethereum Classic + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to ETCDesktop's no-key Ethereum Classic endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etcdesktop", chain="ethereum-classic"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="etcdesktop", chain="ethereum-classic"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="etcdesktop", chain="ethereum-classic"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="etcdesktop", chain="ethereum-classic"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="etcdesktop", chain="ethereum-classic"}) / sum(ocb:rpc_call:rate_24h{provider="etcdesktop", chain="ethereum-classic"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="etcdesktop", chain="ethereum-classic"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="etcdesktop", chain="ethereum-classic"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etcdesktop", chain="ethereum-classic", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etcdesktop", chain="ethereum-classic", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etcdesktop", chain="ethereum-classic", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etcdesktop", chain="ethereum-classic", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etcdesktop", chain="ethereum-classic", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etcdesktop", chain="ethereum-classic", region="sgp"}[1h]) + + - slug: etcmc + name: ETCMC + tag: ETCMC community public RPC for Ethereum Classic + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to ETCMC's no-key Ethereum Classic endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etcmc", chain="ethereum-classic"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="etcmc", chain="ethereum-classic"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="etcmc", chain="ethereum-classic"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="etcmc", chain="ethereum-classic"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="etcmc", chain="ethereum-classic"}) / sum(ocb:rpc_call:rate_24h{provider="etcmc", chain="ethereum-classic"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="etcmc", chain="ethereum-classic"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="etcmc", chain="ethereum-classic"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etcmc", chain="ethereum-classic", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etcmc", chain="ethereum-classic", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etcmc", chain="ethereum-classic", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etcmc", chain="ethereum-classic", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etcmc", chain="ethereum-classic", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etcmc", chain="ethereum-classic", region="sgp"}[1h]) diff --git a/benchmarks/etherlink-rpc.yml b/benchmarks/etherlink-rpc.yml new file mode 100644 index 00000000..0edd3e16 --- /dev/null +++ b/benchmarks/etherlink-rpc.yml @@ -0,0 +1,155 @@ +# OpenChainBench. Bench № 189 + +slug: etherlink-rpc +number: "189" +title: Fastest free Etherlink RPC, live no-key endpoint latency +seo_title: "Fastest free Etherlink RPC 2026" +seo_description: "{{best_name}} leads free Etherlink RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 4 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public Etherlink EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Etherlink (chain 42793) is a Tezos L2 using Smart Rollup technology, offering EVM compatibility backed by the Tezos Foundation. XTZ is the bridged gas token. Four keyless endpoints are probed continuously: Etherlink official (node.mainnet.etherlink.com), dRPC (etherlink.drpc.org), Ankr (rpc.ankr.com/etherlink_mainnet), and Blast API. + +abstract: | + Per-chain member of the RPC latency cluster, extended to Etherlink. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public Etherlink endpoint + that sustains continuous probing, 4 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Etherlink-scoped answer with per-region breakdowns as a first-class dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\",false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"etherlink\"`. Provider coverage at launch: 4 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Etherlink RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 4 measured providers." + +faq: + - q: "What is the fastest free Etherlink RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 4 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Etherlink RPCs work without an API key?" + a: "4 endpoints sustain continuous keyless probing: Etherlink official, dRPC, Ankr, and Blast API. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Etherlink RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Etherlink RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="etherlink"}) + +dimensions: + region: + - { value: all, label: All regions } + - { value: us-east, label: US-East } + - { value: eu-west, label: EU-West } + - { value: sgp, label: Singapore } + +providers: + - slug: etherlink-official + name: Etherlink Foundation + tag: Etherlink official public RPC endpoint + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Etherlink's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etherlink-official", chain="etherlink"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="etherlink-official", chain="etherlink"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="etherlink-official", chain="etherlink"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="etherlink-official", chain="etherlink"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="etherlink-official", chain="etherlink"}) / sum(ocb:rpc_call:rate_24h{provider="etherlink-official", chain="etherlink"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="etherlink-official", chain="etherlink"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="etherlink-official", chain="etherlink"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etherlink-official", chain="etherlink", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etherlink-official", chain="etherlink", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etherlink-official", chain="etherlink", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etherlink-official", chain="etherlink", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="etherlink-official", chain="etherlink", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="etherlink-official", chain="etherlink", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for Etherlink mainnet + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key Etherlink endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="etherlink"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="etherlink"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="etherlink"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="etherlink"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="etherlink"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="etherlink"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="etherlink"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="etherlink"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="etherlink", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="etherlink", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="etherlink", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="etherlink", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="etherlink", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="etherlink", region="sgp"}[1h]) + + - slug: ankr + name: Ankr + tag: Ankr decentralized node provider for Etherlink + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Ankr's no-key Etherlink endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="etherlink"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="ankr", chain="etherlink"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="ankr", chain="etherlink"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="ankr", chain="etherlink"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="ankr", chain="etherlink"}) / sum(ocb:rpc_call:rate_24h{provider="ankr", chain="etherlink"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="ankr", chain="etherlink"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="etherlink"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="etherlink", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="etherlink", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="etherlink", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="etherlink", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="etherlink", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="etherlink", region="sgp"}[1h]) + + - slug: blastapi + name: Blast API + tag: Blast API public gateway for Etherlink mainnet + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Blast API's no-key Etherlink endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="etherlink"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blastapi", chain="etherlink"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blastapi", chain="etherlink"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blastapi", chain="etherlink"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blastapi", chain="etherlink"}) / sum(ocb:rpc_call:rate_24h{provider="blastapi", chain="etherlink"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blastapi", chain="etherlink"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="etherlink"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="etherlink", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="etherlink", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="etherlink", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="etherlink", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="etherlink", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="etherlink", region="sgp"}[1h]) diff --git a/benchmarks/fantom-rpc.yml b/benchmarks/fantom-rpc.yml new file mode 100644 index 00000000..5c3668e7 --- /dev/null +++ b/benchmarks/fantom-rpc.yml @@ -0,0 +1,181 @@ +# OpenChainBench. Bench № 184 + +slug: fantom-rpc +number: "184" +title: Fastest free Fantom RPC, live no-key endpoint latency +seo_title: "Fastest free Fantom RPC 2026" +seo_description: "{{best_name}} leads free Fantom RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 5 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public Fantom EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Fantom Opera (chain 250) is a DAG-based EVM-compatible L1 using Lachesis aBFT consensus, delivering ~1-2 second finality with FTM as the gas token. Five keyless endpoints are probed continuously: the Fantom Foundation official gateway (rpcapi.fantom.network), dRPC (fantom.drpc.org), Ankr (rpc.ankr.com/fantom), Thirdweb (250.rpc.thirdweb.com), and Blast API (fantom-mainnet.public.blastapi.io). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Fantom. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public Fantom endpoint + that sustains continuous probing, 5 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The harness + classifies every response (ok / http_err / jsonrpc_err / stale / + timeout) so the leaderboard rewards sustained availability rather than + fast error messages. The cross-chain view lives on the parent + `rpc-capabilities` benchmark; this page is the Fantom-scoped answer + with per-region breakdowns as a first-class dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\",false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result), `http_err`, `jsonrpc_err` (HTTP 200 carrying an error body), `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"fantom\"`. Provider coverage at launch: 5 no-key endpoints (Fantom Foundation, dRPC, Ankr, Thirdweb, Blast API)." + +findings: + - "{{best_name}} currently leads free Fantom RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 5 measured providers." + +faq: + - q: "What is the fastest free Fantom RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 5 no-key providers probed every 60 seconds from us-east, eu-west and Singapore. The leaderboard re-sorts continuously against fresh Prometheus samples." + - q: "Which Fantom RPCs work without an API key?" + a: "5 endpoints sustain continuous keyless probing at launch: Fantom Foundation, dRPC, Ankr, Thirdweb, Blast API. Every listed endpoint was live-verified before inclusion." + - q: "Does the fastest Fantom RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin; pick the one closest to where your requests originate." + - q: "How is Fantom RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions. Responses are classified so an endpoint stuck on an old head or returning errors is never ranked as fastest." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="fantom"}) + +dimensions: + region: + - { value: all, label: All regions } + - { value: us-east, label: US-East } + - { value: eu-west, label: EU-West } + - { value: sgp, label: Singapore } + +providers: + - slug: fantom-official + name: Fantom Foundation + tag: Fantom Foundation official public RPC gateway + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Fantom Foundation's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="fantom-official", chain="fantom"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="fantom-official", chain="fantom"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="fantom-official", chain="fantom"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="fantom-official", chain="fantom"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="fantom-official", chain="fantom"}) / sum(ocb:rpc_call:rate_24h{provider="fantom-official", chain="fantom"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="fantom-official", chain="fantom"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="fantom-official", chain="fantom"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="fantom-official", chain="fantom", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="fantom-official", chain="fantom", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="fantom-official", chain="fantom", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="fantom-official", chain="fantom", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="fantom-official", chain="fantom", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="fantom-official", chain="fantom", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for Fantom mainnet + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key Fantom endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="fantom"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="fantom"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="fantom"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="fantom"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="fantom"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="fantom"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="fantom"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="fantom"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="fantom", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="fantom", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="fantom", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="fantom", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="fantom", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="fantom", region="sgp"}[1h]) + + - slug: ankr + name: Ankr + tag: Ankr decentralized node provider for Fantom + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Ankr's no-key Fantom endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="fantom"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="ankr", chain="fantom"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="ankr", chain="fantom"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="ankr", chain="fantom"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="ankr", chain="fantom"}) / sum(ocb:rpc_call:rate_24h{provider="ankr", chain="fantom"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="ankr", chain="fantom"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="fantom"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="fantom", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="fantom", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="fantom", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="fantom", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ankr", chain="fantom", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ankr", chain="fantom", region="sgp"}[1h]) + + - slug: thirdweb + name: Thirdweb + tag: Thirdweb chain-ID RPC gateway for Fantom + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Thirdweb's no-key Fantom endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="fantom"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="thirdweb", chain="fantom"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="thirdweb", chain="fantom"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="thirdweb", chain="fantom"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="thirdweb", chain="fantom"}) / sum(ocb:rpc_call:rate_24h{provider="thirdweb", chain="fantom"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="thirdweb", chain="fantom"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="fantom"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="fantom", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="fantom", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="fantom", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="fantom", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="fantom", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="fantom", region="sgp"}[1h]) + + - slug: blastapi + name: Blast API + tag: Blast API public gateway for Fantom mainnet + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Blast API's no-key Fantom endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="fantom"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blastapi", chain="fantom"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blastapi", chain="fantom"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blastapi", chain="fantom"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blastapi", chain="fantom"}) / sum(ocb:rpc_call:rate_24h{provider="blastapi", chain="fantom"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blastapi", chain="fantom"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="fantom"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="fantom", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="fantom", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="fantom", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="fantom", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="fantom", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="fantom", region="sgp"}[1h]) diff --git a/benchmarks/haqq-rpc.yml b/benchmarks/haqq-rpc.yml new file mode 100644 index 00000000..bd4ba78b --- /dev/null +++ b/benchmarks/haqq-rpc.yml @@ -0,0 +1,155 @@ +# OpenChainBench. Bench № 188 + +slug: haqq-rpc +number: "188" +title: Fastest free HAQQ Network RPC, live no-key endpoint latency +seo_title: "Fastest free HAQQ Network RPC 2026" +seo_description: "{{best_name}} leads free HAQQ Network RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 4 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public HAQQ Network EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + HAQQ Network (chain 11235) is a Cosmos SDK EVM-compatible blockchain focused on Islamic finance and halal DeFi, with ISLM as the native gas token. Four keyless endpoints are probed continuously: PublicNode (haqq-evm-rpc.publicnode.com), dRPC (haqq.drpc.org), HAQQ Foundation official (rpc.eth.haqq.network), and Blast API. + +abstract: | + Per-chain member of the RPC latency cluster, extended to HAQQ Network. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public HAQQ Network endpoint + that sustains continuous probing, 4 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + HAQQ-scoped answer with per-region breakdowns as a first-class dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\",false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"haqq\"`. Provider coverage at launch: 4 no-key endpoints." + +findings: + - "{{best_name}} currently leads free HAQQ Network RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 4 measured providers." + +faq: + - q: "What is the fastest free HAQQ Network RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 4 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which HAQQ Network RPCs work without an API key?" + a: "4 endpoints sustain continuous keyless probing: PublicNode, dRPC, HAQQ Foundation official, and Blast API. Every endpoint was live-verified before inclusion." + - q: "Does the fastest HAQQ RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is HAQQ Network RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="haqq"}) + +dimensions: + region: + - { value: all, label: All regions } + - { value: us-east, label: US-East } + - { value: eu-west, label: EU-West } + - { value: sgp, label: Singapore } + +providers: + - slug: publicnode + name: PublicNode + tag: PublicNode multi-chain gateway for HAQQ EVM + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to PublicNode's no-key HAQQ endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="haqq"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="haqq"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="haqq"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="haqq"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="haqq"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="haqq"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="haqq"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="haqq"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="haqq", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="haqq", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="haqq", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="haqq", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="haqq", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="haqq", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for HAQQ Network + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key HAQQ endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="haqq"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="haqq"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="haqq"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="haqq"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="haqq"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="haqq"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="haqq"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="haqq"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="haqq", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="haqq", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="haqq", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="haqq", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="haqq", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="haqq", region="sgp"}[1h]) + + - slug: haqq-official + name: HAQQ Foundation + tag: HAQQ Foundation official public RPC endpoint + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to HAQQ Foundation's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="haqq-official", chain="haqq"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="haqq-official", chain="haqq"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="haqq-official", chain="haqq"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="haqq-official", chain="haqq"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="haqq-official", chain="haqq"}) / sum(ocb:rpc_call:rate_24h{provider="haqq-official", chain="haqq"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="haqq-official", chain="haqq"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="haqq-official", chain="haqq"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="haqq-official", chain="haqq", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="haqq-official", chain="haqq", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="haqq-official", chain="haqq", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="haqq-official", chain="haqq", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="haqq-official", chain="haqq", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="haqq-official", chain="haqq", region="sgp"}[1h]) + + - slug: blastapi + name: Blast API + tag: Blast API public gateway for HAQQ Network + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Blast API's no-key HAQQ endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="haqq"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blastapi", chain="haqq"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blastapi", chain="haqq"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blastapi", chain="haqq"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blastapi", chain="haqq"}) / sum(ocb:rpc_call:rate_24h{provider="blastapi", chain="haqq"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blastapi", chain="haqq"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="haqq"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="haqq", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="haqq", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="haqq", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="haqq", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="haqq", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="haqq", region="sgp"}[1h]) diff --git a/benchmarks/hydration-rpc.yml b/benchmarks/hydration-rpc.yml new file mode 100644 index 00000000..423f4894 --- /dev/null +++ b/benchmarks/hydration-rpc.yml @@ -0,0 +1,178 @@ +# OpenChainBench. Bench № 186 + +slug: hydration-rpc +number: "186" +title: Fastest free Hydration RPC, live no-key endpoint latency +seo_title: "Fastest free Hydration RPC 2026" +seo_description: "{{best_name}} leads free Hydration RPC at {{best_p50}} (chain_getHeader p50, 24h). 5 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for chain_getHeader against every free, no-key public Hydration Polkadot parachain endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Hydration (formerly HydraDX) is an Omnipool-based DEX parachain on Polkadot enabling single-sided liquidity provision across assets. HDX is the native token. Five keyless endpoints are probed continuously: Hydration's official gateway (rpc.hydradx.cloud), Dwellir, Helikon, Dotters Network, and Parachains Network. + +abstract: | + Per-chain member of the RPC latency cluster, extended to Hydration. + We measure the round-trip latency of a single, identical JSON-RPC call + (`chain_getHeader`) against every no-key public Hydration parachain endpoint + that sustains continuous probing, 5 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Hydration-scoped answer with per-region breakdowns as a first-class dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"chain_getHeader\",\"params\":[]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + parsable hex block number), `http_err`, `jsonrpc_err`, `stale` (more than 40 blocks behind the cross-provider tip), `timeout`." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"hydration\"`. Provider coverage at launch: 5 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Hydration RPC at {{best_p50}} (`chain_getHeader` p50, 24h) across 5 measured providers." + +faq: + - q: "What is the fastest free Hydration RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`chain_getHeader` p50 over the last 24h), measured against 5 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Hydration RPCs work without an API key?" + a: "5 endpoints sustain continuous keyless probing: Hydration official, Dwellir, Helikon, Dotters Network, and Parachains Network. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Hydration RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Hydration RPC latency measured here?" + a: "One identical Substrate JSON-RPC POST (`chain_getHeader`) every 60 seconds from each of 3 regions." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="hydration"}) + +dimensions: + region: + - { value: all, label: All regions } + - { value: us-east, label: US-East } + - { value: eu-west, label: EU-West } + - { value: sgp, label: Singapore } + +providers: + - slug: hydration-official + name: Hydration + tag: Hydration official public RPC gateway + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to Hydration's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="hydration-official", chain="hydration"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="hydration-official", chain="hydration"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="hydration-official", chain="hydration"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="hydration-official", chain="hydration"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="hydration-official", chain="hydration"}) / sum(ocb:rpc_call:rate_24h{provider="hydration-official", chain="hydration"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="hydration-official", chain="hydration"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="hydration-official", chain="hydration"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="hydration-official", chain="hydration", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="hydration-official", chain="hydration", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="hydration-official", chain="hydration", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="hydration-official", chain="hydration", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="hydration-official", chain="hydration", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="hydration-official", chain="hydration", region="sgp"}[1h]) + + - slug: dwellir + name: Dwellir + tag: Dwellir Substrate infrastructure provider + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to Dwellir's no-key Hydration endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="hydration"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="dwellir", chain="hydration"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="dwellir", chain="hydration"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="dwellir", chain="hydration"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="dwellir", chain="hydration"}) / sum(ocb:rpc_call:rate_24h{provider="dwellir", chain="hydration"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="dwellir", chain="hydration"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="hydration"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="hydration", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="hydration", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="hydration", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="hydration", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="hydration", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="hydration", region="sgp"}[1h]) + + - slug: helikon + name: Helikon + tag: Helikon community RPC for Hydration + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to Helikon's no-key Hydration endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="helikon", chain="hydration"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="helikon", chain="hydration"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="helikon", chain="hydration"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="helikon", chain="hydration"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="helikon", chain="hydration"}) / sum(ocb:rpc_call:rate_24h{provider="helikon", chain="hydration"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="helikon", chain="hydration"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="helikon", chain="hydration"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="helikon", chain="hydration", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="helikon", chain="hydration", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="helikon", chain="hydration", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="helikon", chain="hydration", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="helikon", chain="hydration", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="helikon", chain="hydration", region="sgp"}[1h]) + + - slug: dotters-network + name: Dotters Network + tag: Dotters Network community RPC for Hydration + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to Dotters Network's no-key Hydration endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dotters-network", chain="hydration"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="dotters-network", chain="hydration"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="dotters-network", chain="hydration"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="dotters-network", chain="hydration"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="dotters-network", chain="hydration"}) / sum(ocb:rpc_call:rate_24h{provider="dotters-network", chain="hydration"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="dotters-network", chain="hydration"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="dotters-network", chain="hydration"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dotters-network", chain="hydration", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dotters-network", chain="hydration", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dotters-network", chain="hydration", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dotters-network", chain="hydration", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dotters-network", chain="hydration", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dotters-network", chain="hydration", region="sgp"}[1h]) + + - slug: parachains-network + name: Parachains Network + tag: Parachains.network community RPC for Hydration + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to Parachains Network's no-key Hydration endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="parachains-network", chain="hydration"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="parachains-network", chain="hydration"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="parachains-network", chain="hydration"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="parachains-network", chain="hydration"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="parachains-network", chain="hydration"}) / sum(ocb:rpc_call:rate_24h{provider="parachains-network", chain="hydration"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="parachains-network", chain="hydration"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="parachains-network", chain="hydration"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="parachains-network", chain="hydration", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="parachains-network", chain="hydration", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="parachains-network", chain="hydration", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="parachains-network", chain="hydration", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="parachains-network", chain="hydration", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="parachains-network", chain="hydration", region="sgp"}[1h]) diff --git a/benchmarks/kusama-rpc.yml b/benchmarks/kusama-rpc.yml new file mode 100644 index 00000000..e671788c --- /dev/null +++ b/benchmarks/kusama-rpc.yml @@ -0,0 +1,204 @@ +# OpenChainBench. Bench № 185 + +slug: kusama-rpc +number: "185" +title: Fastest free Kusama RPC, live no-key endpoint latency +seo_title: "Fastest free Kusama RPC 2026" +seo_description: "{{best_name}} leads free Kusama RPC at {{best_p50}} (chain_getHeader p50, 24h). 6 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for chain_getHeader against every free, no-key public Kusama relay-chain endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Kusama is Polkadot's canary network — a live, production relay chain (KSM token) where new features ship before Polkadot mainnet. Substrate-based, ~6 s block time, same Substrate JSON-RPC wire protocol as Polkadot. Six keyless endpoints are probed continuously: PublicNode, OnFinality, dRPC, IBP Network, Dwellir, and 1RPC. + +abstract: | + Per-chain member of the RPC latency cluster, extended to Kusama. + We measure the round-trip latency of a single, identical JSON-RPC call + (`chain_getHeader`) against every no-key public Kusama relay-chain endpoint + that sustains continuous probing, 6 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The harness + classifies every response (ok / http_err / jsonrpc_err / stale / + timeout) with a relay-chain-scaled staleness gap (40 blocks). The + cross-chain view lives on the parent `rpc-capabilities` benchmark; + this page is the Kusama-scoped answer with per-region breakdowns as a + first-class dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"chain_getHeader\",\"params\":[]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + parsable hex block number), `http_err`, `jsonrpc_err`, `stale` (more than 40 relay blocks behind the cross-provider tip), `timeout`." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"kusama\"`. Provider coverage at launch: 6 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Kusama RPC at {{best_p50}} (`chain_getHeader` p50, 24h) across 6 measured providers." + +faq: + - q: "What is the fastest free Kusama RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`chain_getHeader` p50 over the last 24h), measured against 6 no-key providers probed every 60 seconds from us-east, eu-west and Singapore. The leaderboard re-sorts continuously against fresh Prometheus samples." + - q: "Which Kusama RPCs work without an API key?" + a: "6 endpoints sustain continuous keyless probing at launch: PublicNode, OnFinality, dRPC, IBP Network (Kusama governance-funded infra), Dwellir, and 1RPC. Every listed endpoint was live-verified before inclusion." + - q: "Does the fastest Kusama RPC change by region?" + a: "Often. Substrate-ecosystem infra concentrates in Europe; endpoints that win from Amsterdam can lose from Singapore. The region tabs re-scope every number to a single origin." + - q: "How is Kusama RPC latency measured here?" + a: "One identical Substrate JSON-RPC POST (`chain_getHeader`) every 60 seconds from each of 3 regions. Responses are classified so stale or error endpoints are never ranked as fastest." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="kusama"}) + +dimensions: + region: + - { value: all, label: All regions } + - { value: us-east, label: US-East } + - { value: eu-west, label: EU-West } + - { value: sgp, label: Singapore } + +providers: + - slug: publicnode + name: PublicNode + tag: Allnodes-operated multi-chain gateway including Substrate + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to PublicNode's no-key Kusama endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="kusama"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="kusama"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="kusama"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="kusama"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="kusama"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="kusama"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="kusama"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="kusama"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="kusama", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="kusama", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="kusama", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="kusama", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="kusama", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="kusama", region="sgp"}[1h]) + + - slug: onfinality + name: OnFinality + tag: Substrate-native public gateway, Web3 Foundation grantee + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to OnFinality's no-key Kusama endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="kusama"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="onfinality", chain="kusama"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="onfinality", chain="kusama"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="onfinality", chain="kusama"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="onfinality", chain="kusama"}) / sum(ocb:rpc_call:rate_24h{provider="onfinality", chain="kusama"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="onfinality", chain="kusama"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="kusama"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="kusama", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="kusama", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="kusama", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="kusama", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="kusama", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="kusama", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for Kusama relay chain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to dRPC's no-key Kusama endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="kusama"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="kusama"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="kusama"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="kusama"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="kusama"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="kusama"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="kusama"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="kusama"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="kusama", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="kusama", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="kusama", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="kusama", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="kusama", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="kusama", region="sgp"}[1h]) + + - slug: ibp + name: IBP Network + tag: Kusama governance-funded infrastructure provider + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to IBP Network's no-key Kusama endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ibp", chain="kusama"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="ibp", chain="kusama"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="ibp", chain="kusama"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="ibp", chain="kusama"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="ibp", chain="kusama"}) / sum(ocb:rpc_call:rate_24h{provider="ibp", chain="kusama"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="ibp", chain="kusama"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="ibp", chain="kusama"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ibp", chain="kusama", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ibp", chain="kusama", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ibp", chain="kusama", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ibp", chain="kusama", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ibp", chain="kusama", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ibp", chain="kusama", region="sgp"}[1h]) + + - slug: dwellir + name: Dwellir + tag: Dwellir Substrate infrastructure provider + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to Dwellir's no-key Kusama endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="kusama"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="dwellir", chain="kusama"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="dwellir", chain="kusama"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="dwellir", chain="kusama"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="dwellir", chain="kusama"}) / sum(ocb:rpc_call:rate_24h{provider="dwellir", chain="kusama"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="dwellir", chain="kusama"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="kusama"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="kusama", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="kusama", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="kusama", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="kusama", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="dwellir", chain="kusama", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="dwellir", chain="kusama", region="sgp"}[1h]) + + - slug: "1rpc" + name: 1RPC + tag: 1RPC privacy-preserving relay for Kusama + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to 1RPC's no-key Kusama endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="1rpc", chain="kusama"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="1rpc", chain="kusama"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="1rpc", chain="kusama"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="1rpc", chain="kusama"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="1rpc", chain="kusama"}) / sum(ocb:rpc_call:rate_24h{provider="1rpc", chain="kusama"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="1rpc", chain="kusama"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="1rpc", chain="kusama"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="1rpc", chain="kusama", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="1rpc", chain="kusama", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="1rpc", chain="kusama", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="1rpc", chain="kusama", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="1rpc", chain="kusama", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="1rpc", chain="kusama", region="sgp"}[1h]) diff --git a/benchmarks/oraichain-rpc.yml b/benchmarks/oraichain-rpc.yml new file mode 100644 index 00000000..36fe5517 --- /dev/null +++ b/benchmarks/oraichain-rpc.yml @@ -0,0 +1,132 @@ +# OpenChainBench. Bench № 198 + +slug: oraichain-rpc +number: "198" +title: Fastest free Oraichain RPC, live no-key endpoint latency +seo_title: "Fastest free Oraichain RPC 2026" +seo_description: "{{best_name}} leads free Oraichain RPC at {{best_p50}} (Tendermint status p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for the Tendermint status method against every free, no-key public Oraichain Cosmos SDK endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Oraichain is an AI-focused Cosmos SDK chain featuring the ORAI native token, an AI oracle network (OraiDEX), and an AI data marketplace. It bridges AI computation and blockchain, enabling verifiable AI inference on-chain. Three keyless Cosmos RPC endpoints are probed continuously: PublicNode (oraichain-rpc.publicnode.com), the Orai Foundation official endpoint (rpc.orai.io), and LavenderFive (oraichain-rpc.lavenderfive.com). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Oraichain. + We measure the round-trip latency of a single, identical Cosmos RPC call + (Tendermint `status`) against every no-key public Oraichain endpoint + that sustains continuous probing, 3 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Oraichain-scoped answer with per-region breakdowns as a first-class dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: Tendermint/CometBFT `status` JSON-RPC call. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + parsable latest_block_height), `http_err`, `jsonrpc_err`, `stale` (more than 40 blocks behind the cross-provider tip), `timeout`." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"oraichain\"`. Provider coverage at launch: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Oraichain RPC at {{best_p50}} (Tendermint status p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Oraichain RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (Tendermint status p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Oraichain RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: PublicNode, Orai Foundation official, and LavenderFive. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Oraichain RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Oraichain RPC latency measured here?" + a: "One identical Tendermint status POST every 60 seconds against each provider from each of 3 regions." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="oraichain"}) + +dimensions: + region: + - { value: all, label: All regions } + - { value: us-east, label: US-East } + - { value: eu-west, label: EU-West } + - { value: sgp, label: Singapore } + +providers: + - slug: publicnode + name: PublicNode + tag: PublicNode multi-chain gateway for Oraichain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single Tendermint status POST sent every 60s from 3 regions to PublicNode's no-key Oraichain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="oraichain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="oraichain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="oraichain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="oraichain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="oraichain"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="oraichain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="oraichain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="oraichain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="oraichain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="oraichain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="oraichain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="oraichain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="oraichain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="oraichain", region="sgp"}[1h]) + + - slug: orai-official + name: Orai Foundation + tag: Orai Foundation official public Cosmos RPC + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single Tendermint status POST sent every 60s from 3 regions to the Orai Foundation's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="orai-official", chain="oraichain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="orai-official", chain="oraichain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="orai-official", chain="oraichain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="orai-official", chain="oraichain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="orai-official", chain="oraichain"}) / sum(ocb:rpc_call:rate_24h{provider="orai-official", chain="oraichain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="orai-official", chain="oraichain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="orai-official", chain="oraichain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="orai-official", chain="oraichain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="orai-official", chain="oraichain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="orai-official", chain="oraichain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="orai-official", chain="oraichain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="orai-official", chain="oraichain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="orai-official", chain="oraichain", region="sgp"}[1h]) + + - slug: lavenderfive + name: LavenderFive + tag: LavenderFive validator and RPC provider for Cosmos chains + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single Tendermint status POST sent every 60s from 3 regions to LavenderFive's no-key Oraichain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="oraichain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="lavenderfive", chain="oraichain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="lavenderfive", chain="oraichain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="lavenderfive", chain="oraichain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="lavenderfive", chain="oraichain"}) / sum(ocb:rpc_call:rate_24h{provider="lavenderfive", chain="oraichain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="lavenderfive", chain="oraichain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="oraichain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="oraichain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="oraichain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="oraichain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="oraichain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="lavenderfive", chain="oraichain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="lavenderfive", chain="oraichain", region="sgp"}[1h]) diff --git a/benchmarks/peaq-rpc.yml b/benchmarks/peaq-rpc.yml new file mode 100644 index 00000000..7a7c34f4 --- /dev/null +++ b/benchmarks/peaq-rpc.yml @@ -0,0 +1,132 @@ +# OpenChainBench. Bench № 199 + +slug: peaq-rpc +number: "199" +title: Fastest free Peaq Network RPC, live no-key endpoint latency +seo_title: "Fastest free Peaq Network RPC 2026" +seo_description: "{{best_name}} leads free Peaq Network RPC at {{best_p50}} (chain_getHeader p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for chain_getHeader against every free, no-key public Peaq Network Polkadot parachain endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Peaq Network is a DePIN (Decentralized Physical Infrastructure) parachain on Polkadot focused on the machine economy and IoT connectivity. PEAQ is the native token. Partnerships with Bosch and Fetch.ai underpin its real-world machine data use cases. Three keyless endpoints are probed continuously: PublicNode (peaq-rpc.publicnode.com), Peaq Foundation official (rpc.peaq.network), and OnFinality (peaq.api.onfinality.io/public). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Peaq Network. + We measure the round-trip latency of a single, identical JSON-RPC call + (`chain_getHeader`) against every no-key public Peaq parachain endpoint + that sustains continuous probing, 3 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Peaq-scoped answer with per-region breakdowns as a first-class dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"chain_getHeader\",\"params\":[]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + parsable hex block number), `http_err`, `jsonrpc_err`, `stale` (more than 40 blocks behind the cross-provider tip), `timeout`." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"peaq\"`. Provider coverage at launch: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Peaq Network RPC at {{best_p50}} (`chain_getHeader` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Peaq Network RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`chain_getHeader` p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Peaq Network RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: PublicNode, Peaq Foundation official, and OnFinality. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Peaq RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Peaq Network RPC latency measured here?" + a: "One identical Substrate JSON-RPC POST (`chain_getHeader`) every 60 seconds against each provider from each of 3 regions." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="peaq"}) + +dimensions: + region: + - { value: all, label: All regions } + - { value: us-east, label: US-East } + - { value: eu-west, label: EU-West } + - { value: sgp, label: Singapore } + +providers: + - slug: publicnode + name: PublicNode + tag: PublicNode multi-chain gateway including Substrate/Peaq + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to PublicNode's no-key Peaq endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="peaq"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="peaq"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="peaq"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="peaq"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="peaq"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="peaq"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="peaq"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="peaq"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="peaq", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="peaq", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="peaq", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="peaq", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="peaq", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="peaq", region="sgp"}[1h]) + + - slug: peaq-official + name: Peaq Foundation + tag: Peaq Foundation official public RPC endpoint + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to Peaq Foundation's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="peaq-official", chain="peaq"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="peaq-official", chain="peaq"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="peaq-official", chain="peaq"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="peaq-official", chain="peaq"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="peaq-official", chain="peaq"}) / sum(ocb:rpc_call:rate_24h{provider="peaq-official", chain="peaq"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="peaq-official", chain="peaq"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="peaq-official", chain="peaq"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="peaq-official", chain="peaq", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="peaq-official", chain="peaq", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="peaq-official", chain="peaq", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="peaq-official", chain="peaq", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="peaq-official", chain="peaq", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="peaq-official", chain="peaq", region="sgp"}[1h]) + + - slug: onfinality + name: OnFinality + tag: OnFinality Substrate public gateway for Peaq + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `chain_getHeader` POST sent every 60s from 3 regions to OnFinality's no-key Peaq endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="peaq"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="onfinality", chain="peaq"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="onfinality", chain="peaq"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="onfinality", chain="peaq"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="onfinality", chain="peaq"}) / sum(ocb:rpc_call:rate_24h{provider="onfinality", chain="peaq"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="onfinality", chain="peaq"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="peaq"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="peaq", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="peaq", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="peaq", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="peaq", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="onfinality", chain="peaq", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="onfinality", chain="peaq", region="sgp"}[1h]) diff --git a/benchmarks/pulsechain-rpc.yml b/benchmarks/pulsechain-rpc.yml new file mode 100644 index 00000000..48943f01 --- /dev/null +++ b/benchmarks/pulsechain-rpc.yml @@ -0,0 +1,132 @@ +# OpenChainBench. Bench № 196 + +slug: pulsechain-rpc +number: "196" +title: Fastest free PulseChain RPC, live no-key endpoint latency +seo_title: "Fastest free PulseChain RPC 2026" +seo_description: "{{best_name}} leads free PulseChain RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public PulseChain EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + PulseChain (chain 369) is a full-state Ethereum fork launched in 2023 with PLS as the gas token. It maintains EVM compatibility and has a large retail user base. Three keyless endpoints are probed continuously: PublicNode (pulsechain-rpc.publicnode.com), PulseChain official (rpc.pulsechain.com), and G4MM4 (rpc-pulsechain.g4mm4.io). + +abstract: | + Per-chain member of the RPC latency cluster, extended to PulseChain. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public PulseChain endpoint + that sustains continuous probing, 3 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + PulseChain-scoped answer with per-region breakdowns as a first-class dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\",false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"pulsechain\"`. Provider coverage at launch: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free PulseChain RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free PulseChain RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which PulseChain RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: PublicNode, PulseChain official, and G4MM4. Every endpoint was live-verified before inclusion." + - q: "Does the fastest PulseChain RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is PulseChain RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="pulsechain"}) + +dimensions: + region: + - { value: all, label: All regions } + - { value: us-east, label: US-East } + - { value: eu-west, label: EU-West } + - { value: sgp, label: Singapore } + +providers: + - slug: publicnode + name: PublicNode + tag: PublicNode multi-chain gateway for PulseChain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to PublicNode's no-key PulseChain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="pulsechain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="pulsechain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="pulsechain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="pulsechain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="pulsechain"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="pulsechain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="pulsechain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="pulsechain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="pulsechain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="pulsechain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="pulsechain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="pulsechain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="pulsechain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="pulsechain", region="sgp"}[1h]) + + - slug: pulsechain-official + name: PulseChain Foundation + tag: PulseChain official public RPC endpoint + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to PulseChain Foundation's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="pulsechain-official", chain="pulsechain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="pulsechain-official", chain="pulsechain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="pulsechain-official", chain="pulsechain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="pulsechain-official", chain="pulsechain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="pulsechain-official", chain="pulsechain"}) / sum(ocb:rpc_call:rate_24h{provider="pulsechain-official", chain="pulsechain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="pulsechain-official", chain="pulsechain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="pulsechain-official", chain="pulsechain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="pulsechain-official", chain="pulsechain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="pulsechain-official", chain="pulsechain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="pulsechain-official", chain="pulsechain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="pulsechain-official", chain="pulsechain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="pulsechain-official", chain="pulsechain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="pulsechain-official", chain="pulsechain", region="sgp"}[1h]) + + - slug: g4mm4 + name: G4MM4 + tag: G4MM4 community public RPC for PulseChain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to G4MM4's no-key PulseChain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="g4mm4", chain="pulsechain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="g4mm4", chain="pulsechain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="g4mm4", chain="pulsechain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="g4mm4", chain="pulsechain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="g4mm4", chain="pulsechain"}) / sum(ocb:rpc_call:rate_24h{provider="g4mm4", chain="pulsechain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="g4mm4", chain="pulsechain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="g4mm4", chain="pulsechain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="g4mm4", chain="pulsechain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="g4mm4", chain="pulsechain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="g4mm4", chain="pulsechain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="g4mm4", chain="pulsechain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="g4mm4", chain="pulsechain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="g4mm4", chain="pulsechain", region="sgp"}[1h]) diff --git a/benchmarks/songbird-rpc.yml b/benchmarks/songbird-rpc.yml new file mode 100644 index 00000000..3929a57c --- /dev/null +++ b/benchmarks/songbird-rpc.yml @@ -0,0 +1,155 @@ +# OpenChainBench. Bench № 192 + +slug: songbird-rpc +number: "192" +title: Fastest free Songbird RPC, live no-key endpoint latency +seo_title: "Fastest free Songbird RPC 2026" +seo_description: "{{best_name}} leads free Songbird RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 4 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public Songbird EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Songbird (chain 19, SGB) is Flare Network's canary network — a production EVM-compatible chain used to test and validate Flare's FTSO (Flare Time Series Oracle) oracle system before mainnet deployment. The Flare Foundation operates four keyless endpoints: the official Songbird gateway (songbird-api.flare.network/ext/C/rpc), dRPC (songbird.drpc.org), Blast API, and the community node sgb.ftso.com.au. + +abstract: | + Per-chain member of the RPC latency cluster, extended to Songbird. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public Songbird endpoint + that sustains continuous probing, 4 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Songbird-scoped answer with per-region breakdowns as a first-class dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\",false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"songbird\"`. Provider coverage at launch: 4 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Songbird RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 4 measured providers." + +faq: + - q: "What is the fastest free Songbird RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 4 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Songbird RPCs work without an API key?" + a: "4 endpoints sustain continuous keyless probing: Flare Foundation official, dRPC, Blast API, and ftso.com.au community node. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Songbird RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Songbird RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="songbird"}) + +dimensions: + region: + - { value: all, label: All regions } + - { value: us-east, label: US-East } + - { value: eu-west, label: EU-West } + - { value: sgp, label: Singapore } + +providers: + - slug: flare-official + name: Flare Foundation + tag: Flare Foundation official Songbird public RPC + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to the Flare Foundation's no-key Songbird endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="flare-official", chain="songbird"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="flare-official", chain="songbird"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="flare-official", chain="songbird"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="flare-official", chain="songbird"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="flare-official", chain="songbird"}) / sum(ocb:rpc_call:rate_24h{provider="flare-official", chain="songbird"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="flare-official", chain="songbird"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="flare-official", chain="songbird"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="flare-official", chain="songbird", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="flare-official", chain="songbird", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="flare-official", chain="songbird", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="flare-official", chain="songbird", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="flare-official", chain="songbird", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="flare-official", chain="songbird", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for Songbird canary network + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key Songbird endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="songbird"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="songbird"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="songbird"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="songbird"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="songbird"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="songbird"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="songbird"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="songbird"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="songbird", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="songbird", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="songbird", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="songbird", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="songbird", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="songbird", region="sgp"}[1h]) + + - slug: blastapi + name: Blast API + tag: Blast API public gateway for Songbird + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Blast API's no-key Songbird endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="songbird"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blastapi", chain="songbird"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blastapi", chain="songbird"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blastapi", chain="songbird"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blastapi", chain="songbird"}) / sum(ocb:rpc_call:rate_24h{provider="blastapi", chain="songbird"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blastapi", chain="songbird"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="songbird"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="songbird", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="songbird", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="songbird", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="songbird", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="songbird", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="songbird", region="sgp"}[1h]) + + - slug: ftso-au + name: FTSO AU + tag: ftso.com.au community Songbird RPC node + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to ftso.com.au's no-key Songbird endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ftso-au", chain="songbird"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="ftso-au", chain="songbird"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="ftso-au", chain="songbird"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="ftso-au", chain="songbird"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="ftso-au", chain="songbird"}) / sum(ocb:rpc_call:rate_24h{provider="ftso-au", chain="songbird"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="ftso-au", chain="songbird"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="ftso-au", chain="songbird"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ftso-au", chain="songbird", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ftso-au", chain="songbird", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ftso-au", chain="songbird", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ftso-au", chain="songbird", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="ftso-au", chain="songbird", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="ftso-au", chain="songbird", region="sgp"}[1h]) diff --git a/benchmarks/telos-rpc.yml b/benchmarks/telos-rpc.yml new file mode 100644 index 00000000..53136be7 --- /dev/null +++ b/benchmarks/telos-rpc.yml @@ -0,0 +1,132 @@ +# OpenChainBench. Bench № 195 + +slug: telos-rpc +number: "195" +title: Fastest free Telos EVM RPC, live no-key endpoint latency +seo_title: "Fastest free Telos EVM RPC 2026" +seo_description: "{{best_name}} leads free Telos EVM RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public Telos EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Telos EVM (chain 40) is a high-performance EVM-compatible blockchain with sub-0.5 second block times, TLOS as the gas token, and a carbon-neutral operational commitment. One of the longest-running EVM-compatible chains, live since 2021. Three keyless endpoints are probed continuously: Telos Foundation official (mainnet.telos.net/evm), dRPC (telos.drpc.org), and Blast API. + +abstract: | + Per-chain member of the RPC latency cluster, extended to Telos EVM. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public Telos EVM endpoint + that sustains continuous probing, 3 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Telos-scoped answer with per-region breakdowns as a first-class dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\",false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"telos\"`. Provider coverage at launch: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Telos EVM RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Telos EVM RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Telos EVM RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: Telos Foundation official, dRPC, and Blast API. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Telos RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Telos EVM RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="telos"}) + +dimensions: + region: + - { value: all, label: All regions } + - { value: us-east, label: US-East } + - { value: eu-west, label: EU-West } + - { value: sgp, label: Singapore } + +providers: + - slug: telos-official + name: Telos Foundation + tag: Telos Foundation official public EVM RPC + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Telos Foundation's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="telos-official", chain="telos"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="telos-official", chain="telos"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="telos-official", chain="telos"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="telos-official", chain="telos"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="telos-official", chain="telos"}) / sum(ocb:rpc_call:rate_24h{provider="telos-official", chain="telos"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="telos-official", chain="telos"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="telos-official", chain="telos"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="telos-official", chain="telos", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="telos-official", chain="telos", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="telos-official", chain="telos", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="telos-official", chain="telos", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="telos-official", chain="telos", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="telos-official", chain="telos", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for Telos EVM + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key Telos endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="telos"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="telos"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="telos"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="telos"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="telos"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="telos"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="telos"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="telos"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="telos", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="telos", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="telos", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="telos", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="telos", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="telos", region="sgp"}[1h]) + + - slug: blastapi + name: Blast API + tag: Blast API public gateway for Telos EVM + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Blast API's no-key Telos endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="telos"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blastapi", chain="telos"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blastapi", chain="telos"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blastapi", chain="telos"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blastapi", chain="telos"}) / sum(ocb:rpc_call:rate_24h{provider="blastapi", chain="telos"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blastapi", chain="telos"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="telos"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="telos", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="telos", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="telos", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="telos", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="telos", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="telos", region="sgp"}[1h]) diff --git a/benchmarks/warden-rpc.yml b/benchmarks/warden-rpc.yml new file mode 100644 index 00000000..0bb99648 --- /dev/null +++ b/benchmarks/warden-rpc.yml @@ -0,0 +1,132 @@ +# OpenChainBench. Bench № 197 + +slug: warden-rpc +number: "197" +title: Fastest free Warden Protocol RPC, live no-key endpoint latency +seo_title: "Fastest free Warden Protocol RPC 2026" +seo_description: "{{best_name}} leads free Warden Protocol RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 3 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public Warden Protocol EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + Warden Protocol is a modular intent-based L1 for cross-chain smart contract security, built by the Qredo team with WARD as the native gas token. EVM-compatible with Cosmos SDK internals, enabling omnichain key management and intent execution via SpaceWard. Three keyless EVM endpoints are probed continuously: PublicNode (warden-evm-rpc.publicnode.com), dRPC (warden.drpc.org), and the Warden Foundation official endpoint (evm.wardenprotocol.org). + +abstract: | + Per-chain member of the RPC latency cluster, extended to Warden Protocol. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public Warden EVM endpoint + that sustains continuous probing, 3 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + Warden-scoped answer with per-region breakdowns as a first-class dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\",false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"warden\"`. Provider coverage at launch: 3 no-key endpoints." + +findings: + - "{{best_name}} currently leads free Warden Protocol RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 3 measured providers." + +faq: + - q: "What is the fastest free Warden Protocol RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 3 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which Warden Protocol RPCs work without an API key?" + a: "3 endpoints sustain continuous keyless probing: PublicNode, dRPC, and the Warden Foundation official endpoint. Every endpoint was live-verified before inclusion." + - q: "Does the fastest Warden RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is Warden Protocol RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="warden"}) + +dimensions: + region: + - { value: all, label: All regions } + - { value: us-east, label: US-East } + - { value: eu-west, label: EU-West } + - { value: sgp, label: Singapore } + +providers: + - slug: publicnode + name: PublicNode + tag: PublicNode multi-chain gateway for Warden EVM + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to PublicNode's no-key Warden endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="warden"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="publicnode", chain="warden"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="publicnode", chain="warden"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="publicnode", chain="warden"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="publicnode", chain="warden"}) / sum(ocb:rpc_call:rate_24h{provider="publicnode", chain="warden"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="publicnode", chain="warden"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="warden"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="warden", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="warden", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="warden", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="warden", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="publicnode", chain="warden", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="publicnode", chain="warden", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for Warden Protocol + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key Warden endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="warden"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="warden"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="warden"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="warden"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="warden"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="warden"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="warden"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="warden"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="warden", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="warden", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="warden", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="warden", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="warden", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="warden", region="sgp"}[1h]) + + - slug: warden-official + name: Warden Foundation + tag: Warden Foundation official public EVM RPC + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to the Warden Foundation's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="warden-official", chain="warden"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="warden-official", chain="warden"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="warden-official", chain="warden"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="warden-official", chain="warden"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="warden-official", chain="warden"}) / sum(ocb:rpc_call:rate_24h{provider="warden-official", chain="warden"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="warden-official", chain="warden"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="warden-official", chain="warden"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="warden-official", chain="warden", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="warden-official", chain="warden", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="warden-official", chain="warden", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="warden-official", chain="warden", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="warden-official", chain="warden", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="warden-official", chain="warden", region="sgp"}[1h]) diff --git a/benchmarks/wemix-rpc.yml b/benchmarks/wemix-rpc.yml new file mode 100644 index 00000000..9b3772d5 --- /dev/null +++ b/benchmarks/wemix-rpc.yml @@ -0,0 +1,155 @@ +# OpenChainBench. Bench № 191 + +slug: wemix-rpc +number: "191" +title: Fastest free WEMIX RPC, live no-key endpoint latency +seo_title: "Fastest free WEMIX RPC 2026" +seo_description: "{{best_name}} leads free WEMIX RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 4 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public WEMIX 3.0 EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + WEMIX 3.0 (chain 1111) is a South Korean gaming blockchain by WeMade, EVM-compatible with WEMIX as the native gas token. Home to Mirror World, WonderX, and a large P2E gaming ecosystem in Asia. Four keyless endpoints are probed continuously: WEMIX official (api.wemix.com), dRPC (wemix.drpc.org), Blast API, and 1RPC. + +abstract: | + Per-chain member of the RPC latency cluster, extended to WEMIX. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public WEMIX endpoint + that sustains continuous probing, 4 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + WEMIX-scoped answer with per-region breakdowns as a first-class dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\",false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"wemix\"`. Provider coverage at launch: 4 no-key endpoints." + +findings: + - "{{best_name}} currently leads free WEMIX RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 4 measured providers." + +faq: + - q: "What is the fastest free WEMIX RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 4 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which WEMIX RPCs work without an API key?" + a: "4 endpoints sustain continuous keyless probing: WEMIX official, dRPC, Blast API, and 1RPC. Every endpoint was live-verified before inclusion." + - q: "Does the fastest WEMIX RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin." + - q: "How is WEMIX RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="wemix"}) + +dimensions: + region: + - { value: all, label: All regions } + - { value: us-east, label: US-East } + - { value: eu-west, label: EU-West } + - { value: sgp, label: Singapore } + +providers: + - slug: wemix-official + name: WeMade + tag: WeMade official WEMIX 3.0 public RPC + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to WEMIX's no-key endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="wemix-official", chain="wemix"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="wemix-official", chain="wemix"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="wemix-official", chain="wemix"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="wemix-official", chain="wemix"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="wemix-official", chain="wemix"}) / sum(ocb:rpc_call:rate_24h{provider="wemix-official", chain="wemix"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="wemix-official", chain="wemix"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="wemix-official", chain="wemix"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="wemix-official", chain="wemix", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="wemix-official", chain="wemix", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="wemix-official", chain="wemix", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="wemix-official", chain="wemix", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="wemix-official", chain="wemix", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="wemix-official", chain="wemix", region="sgp"}[1h]) + + - slug: drpc + name: dRPC + tag: dRPC public gateway for WEMIX 3.0 + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key WEMIX endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="wemix"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="wemix"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="wemix"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="wemix"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="wemix"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="wemix"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="wemix"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="wemix"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="wemix", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="wemix", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="wemix", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="wemix", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="wemix", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="wemix", region="sgp"}[1h]) + + - slug: blastapi + name: Blast API + tag: Blast API public gateway for WEMIX 3.0 + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Blast API's no-key WEMIX endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="wemix"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blastapi", chain="wemix"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blastapi", chain="wemix"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blastapi", chain="wemix"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blastapi", chain="wemix"}) / sum(ocb:rpc_call:rate_24h{provider="blastapi", chain="wemix"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blastapi", chain="wemix"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="wemix"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="wemix", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="wemix", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="wemix", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="wemix", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="wemix", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="wemix", region="sgp"}[1h]) + + - slug: "1rpc" + name: 1RPC + tag: 1RPC privacy-preserving relay for WEMIX + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to 1RPC's no-key WEMIX endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="1rpc", chain="wemix"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="1rpc", chain="wemix"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="1rpc", chain="wemix"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="1rpc", chain="wemix"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="1rpc", chain="wemix"}) / sum(ocb:rpc_call:rate_24h{provider="1rpc", chain="wemix"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="1rpc", chain="wemix"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="1rpc", chain="wemix"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="1rpc", chain="wemix", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="1rpc", chain="wemix", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="1rpc", chain="wemix", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="1rpc", chain="wemix", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="1rpc", chain="wemix", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="1rpc", chain="wemix", region="sgp"}[1h]) diff --git a/benchmarks/zetachain-rpc.yml b/benchmarks/zetachain-rpc.yml new file mode 100644 index 00000000..c064be35 --- /dev/null +++ b/benchmarks/zetachain-rpc.yml @@ -0,0 +1,178 @@ +# OpenChainBench. Bench № 187 + +slug: zetachain-rpc +number: "187" +title: Fastest free ZetaChain RPC, live no-key endpoint latency +seo_title: "Fastest free ZetaChain RPC 2026" +seo_description: "{{best_name}} leads free ZetaChain RPC at {{best_p50}} (eth_getBlockByNumber p50, 24h). 5 no-key providers measured every 60s from 3 regions." +subtitle: HTTP round-trip latency for eth_getBlockByNumber against every free, no-key public ZetaChain EVM endpoint, audited every 60 seconds from 3 regions. + +category: RPCs +status: live +metric: RPC latency +unit: ms +higher_is_better: false + +seo_intro: | + ZetaChain (chain 7000) is an EVM-compatible omnichain L1 enabling native cross-chain assets — BTC, ETH, BNB — without bridges or wrapped tokens. ZETA is the gas token. Five keyless endpoints are probed continuously: dRPC, BlockPI, Thirdweb (7000.rpc.thirdweb.com), All That Node, and Blast API. + +abstract: | + Per-chain member of the RPC latency cluster, extended to ZetaChain. + We measure the round-trip latency of a single, identical RPC call + (`eth_getBlockByNumber`) against every no-key public ZetaChain endpoint + that sustains continuous probing, 5 providers at launch, + every 60 seconds, from us-east, eu-west and Singapore. The cross-chain + view lives on the parent `rpc-capabilities` benchmark; this page is the + ZetaChain-scoped answer with per-region breakdowns as a first-class dimension. + +methodology: + - "Cadence: every 60 seconds per provider, from each of 3 probe regions (us-east Virginia, eu-west Amsterdam, sgp Singapore). Headline p50/p90/p99 aggregate across all 3 regions via Prometheus `avg(quantile_over_time(...))`; per-region breakdowns are first-class on this page via the region tabs." + - "Payload: `{\"jsonrpc\":\"2.0\",\"id\":,\"method\":\"eth_getBlockByNumber\",\"params\":[\"latest\",false]}`. Plain HTTP POST, identical for every endpoint, no API key in any request." + - "Latency: client-side round-trip delta in milliseconds, exposed as both a gauge and a histogram (buckets 50 ms to 10 s), so percentiles are computed via Prometheus `quantile_over_time` over the last 24 hours." + - "Call-result classification: `ok` (HTTP 200 + non-empty result), `http_err`, `jsonrpc_err`, `stale` (more than 20 blocks behind the cross-provider tip), `timeout`." + - "This page is part of the per-chain RPC cluster derived from the cross-chain [rpc-capabilities](https://openchainbench.com/benchmarks/rpc-capabilities) benchmark; the identical harness, cadence and exclusion rules apply on every chain." + - "Chain scope: every query on this page is pinned to `chain=\"zetachain\"`. Provider coverage at launch: 5 no-key endpoints." + +findings: + - "{{best_name}} currently leads free ZetaChain RPC at {{best_p50}} (`eth_getBlockByNumber` p50, 24h) across 5 measured providers." + +faq: + - q: "What is the fastest free ZetaChain RPC right now?" + a: "{{best_name}} currently leads at {{best_p50}} (`eth_getBlockByNumber` p50 over the last 24h), measured against 5 no-key providers probed every 60 seconds from us-east, eu-west and Singapore." + - q: "Which ZetaChain RPCs work without an API key?" + a: "5 endpoints sustain continuous keyless probing: dRPC, BlockPI, Thirdweb, All That Node, and Blast API. Every endpoint was live-verified before inclusion." + - q: "Does the fastest ZetaChain RPC change by region?" + a: "Often. The region tabs at the top of the page re-scope every number to a single origin; pick the one closest to where your requests originate." + - q: "How is ZetaChain RPC latency measured here?" + a: "One identical JSON-RPC POST (`eth_getBlockByNumber`) every 60 seconds against each provider from each of 3 regions." + +source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/rpc-capabilities + +prometheus: + window: 24h + freshness_metric: rpc_latency_milliseconds + +rank_matrix_query: avg by (provider, region) (ocb:rpc_latency_milliseconds:p50_24h{chain="zetachain"}) + +dimensions: + region: + - { value: all, label: All regions } + - { value: us-east, label: US-East } + - { value: eu-west, label: EU-West } + - { value: sgp, label: Singapore } + +providers: + - slug: drpc + name: dRPC + tag: dRPC public gateway for ZetaChain mainnet + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to dRPC's no-key ZetaChain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="zetachain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="drpc", chain="zetachain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="drpc", chain="zetachain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="drpc", chain="zetachain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="drpc", chain="zetachain"}) / sum(ocb:rpc_call:rate_24h{provider="drpc", chain="zetachain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="drpc", chain="zetachain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="zetachain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="zetachain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="zetachain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="zetachain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="zetachain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="drpc", chain="zetachain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="drpc", chain="zetachain", region="sgp"}[1h]) + + - slug: blockpi + name: BlockPI + tag: BlockPI public RPC gateway for ZetaChain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to BlockPI's no-key ZetaChain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blockpi", chain="zetachain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blockpi", chain="zetachain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blockpi", chain="zetachain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blockpi", chain="zetachain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blockpi", chain="zetachain"}) / sum(ocb:rpc_call:rate_24h{provider="blockpi", chain="zetachain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blockpi", chain="zetachain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blockpi", chain="zetachain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blockpi", chain="zetachain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blockpi", chain="zetachain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blockpi", chain="zetachain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blockpi", chain="zetachain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blockpi", chain="zetachain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blockpi", chain="zetachain", region="sgp"}[1h]) + + - slug: thirdweb + name: Thirdweb + tag: Thirdweb chain-ID RPC gateway for ZetaChain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Thirdweb's no-key ZetaChain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="zetachain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="thirdweb", chain="zetachain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="thirdweb", chain="zetachain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="thirdweb", chain="zetachain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="thirdweb", chain="zetachain"}) / sum(ocb:rpc_call:rate_24h{provider="thirdweb", chain="zetachain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="thirdweb", chain="zetachain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="zetachain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="zetachain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="zetachain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="zetachain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="zetachain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="thirdweb", chain="zetachain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="thirdweb", chain="zetachain", region="sgp"}[1h]) + + - slug: allthatnode + name: All That Node + tag: All That Node archive-grade public gateway for ZetaChain + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to All That Node's no-key ZetaChain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="allthatnode", chain="zetachain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="allthatnode", chain="zetachain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="allthatnode", chain="zetachain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="allthatnode", chain="zetachain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="allthatnode", chain="zetachain"}) / sum(ocb:rpc_call:rate_24h{provider="allthatnode", chain="zetachain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="allthatnode", chain="zetachain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="allthatnode", chain="zetachain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="allthatnode", chain="zetachain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="allthatnode", chain="zetachain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="allthatnode", chain="zetachain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="allthatnode", chain="zetachain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="allthatnode", chain="zetachain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="allthatnode", chain="zetachain", region="sgp"}[1h]) + + - slug: blastapi + name: Blast API + tag: Blast API public gateway for ZetaChain mainnet + formula: "50th percentile over 24h of client-side round-trip latency (ms) for a single `eth_getBlockByNumber` POST sent every 60s from 3 regions to Blast API's no-key ZetaChain endpoint." + queries: + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="zetachain"}) + p90: avg(ocb:rpc_latency_milliseconds:p90_24h{provider="blastapi", chain="zetachain"}) + p99: avg(ocb:rpc_latency_milliseconds:p99_24h{provider="blastapi", chain="zetachain"}) + mean: avg(ocb:rpc_latency_milliseconds:mean_24h{provider="blastapi", chain="zetachain"}) + success: sum(ocb:rpc_call:ok_rate_24h{provider="blastapi", chain="zetachain"}) / sum(ocb:rpc_call:rate_24h{provider="blastapi", chain="zetachain"}) + sample_size: sum(ocb:rpc_call:increase_24h{provider="blastapi", chain="zetachain"}) + series: avg(avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="zetachain"}[1h])) + regions: + - region: us-east + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="zetachain", region="us-east"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="zetachain", region="us-east"}[1h]) + - region: eu-west + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="zetachain", region="eu-west"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="zetachain", region="eu-west"}[1h]) + - region: ap-southeast + p50: avg(ocb:rpc_latency_milliseconds:p50_24h{provider="blastapi", chain="zetachain", region="sgp"}) + series: avg_over_time(rpc_latency_milliseconds{provider="blastapi", chain="zetachain", region="sgp"}[1h]) diff --git a/harnesses/rpc-capabilities/cmd/script/config.go b/harnesses/rpc-capabilities/cmd/script/config.go index 0c6dc72c..ab02e508 100644 --- a/harnesses/rpc-capabilities/cmd/script/config.go +++ b/harnesses/rpc-capabilities/cmd/script/config.go @@ -1339,6 +1339,184 @@ func chains() []Chain { {Slug: "stavr", Name: "STAVR", URL: envDefault("RPC_URL_COMDEX_STAVR", "https://comdex.rpc.m.stavr.tech:443")}, }, }, + // Fantom — EVM (chain 250). 5 keyless providers. + { + Slug: "fantom", + Name: "Fantom", + Providers: []Provider{ + {Slug: "fantom-official", Name: "Fantom Foundation", URL: envDefault("RPC_URL_FANTOM_OFFICIAL", "https://rpcapi.fantom.network")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_FANTOM_DRPC", "https://fantom.drpc.org")}, + {Slug: "ankr", Name: "Ankr", URL: envDefault("RPC_URL_FANTOM_ANKR", "https://rpc.ankr.com/fantom")}, + {Slug: "thirdweb", Name: "Thirdweb", URL: envDefault("RPC_URL_FANTOM_THIRDWEB", "https://250.rpc.thirdweb.com")}, + {Slug: "blastapi", Name: "Blast API", URL: envDefault("RPC_URL_FANTOM_BLASTAPI", "https://fantom-mainnet.public.blastapi.io")}, + }, + }, + // Kusama — Polkadot canary relay chain. 6 keyless providers. + { + Slug: "kusama", + Name: "Kusama", + Kind: "polkadot", + Providers: []Provider{ + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_KUSAMA_PUBLICNODE", "https://kusama-rpc.publicnode.com")}, + {Slug: "onfinality", Name: "OnFinality", URL: envDefault("RPC_URL_KUSAMA_ONFINALITY", "https://kusama.api.onfinality.io/public")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_KUSAMA_DRPC", "https://kusama.drpc.org")}, + {Slug: "ibp", Name: "IBP Network", URL: envDefault("RPC_URL_KUSAMA_IBP", "https://rpc.ibp.network/kusama")}, + {Slug: "dwellir", Name: "Dwellir", URL: envDefault("RPC_URL_KUSAMA_DWELLIR", "https://kusama-rpc.dwellir.com")}, + {Slug: "1rpc", Name: "1RPC", URL: envDefault("RPC_URL_KUSAMA_1RPC", "https://1rpc.io/ksm")}, + }, + }, + // Hydration — Polkadot DeFi parachain (HydraDX). 5 keyless providers. + { + Slug: "hydration", + Name: "Hydration", + Kind: "polkadot", + Providers: []Provider{ + {Slug: "hydration-official", Name: "Hydration Foundation", URL: envDefault("RPC_URL_HYDRATION_OFFICIAL", "https://rpc.hydration.cloud")}, + {Slug: "dwellir", Name: "Dwellir", URL: envDefault("RPC_URL_HYDRATION_DWELLIR", "https://hydradx-rpc.dwellir.com")}, + {Slug: "helikon", Name: "Helikon", URL: envDefault("RPC_URL_HYDRATION_HELIKON", "https://rpc.helikon.io/hydradx")}, + {Slug: "dotters-network", Name: "Dotters Network", URL: envDefault("RPC_URL_HYDRATION_DOTTERS", "https://hydradx.dotters.network")}, + {Slug: "parachains-network", Name: "Parachains.network", URL: envDefault("RPC_URL_HYDRATION_PARACHAINS", "https://rpc.parachains.network/hydradx")}, + }, + }, + // ZetaChain — EVM omnichain L1 (chain 7000). 5 keyless providers. + { + Slug: "zetachain", + Name: "ZetaChain", + Providers: []Provider{ + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_ZETACHAIN_DRPC", "https://zetachain.drpc.org")}, + {Slug: "blockpi", Name: "BlockPi", URL: envDefault("RPC_URL_ZETACHAIN_BLOCKPI", "https://zetachain.blockpi.network/v1/rpc/public")}, + {Slug: "thirdweb", Name: "Thirdweb", URL: envDefault("RPC_URL_ZETACHAIN_THIRDWEB", "https://7000.rpc.thirdweb.com")}, + {Slug: "allthatnode", Name: "AllThatNode", URL: envDefault("RPC_URL_ZETACHAIN_ATN", "https://zetachain-mainnet.rpc.public.allthatnode.com")}, + {Slug: "blastapi", Name: "Blast API", URL: envDefault("RPC_URL_ZETACHAIN_BLASTAPI", "https://zetachain-mainnet.public.blastapi.io")}, + }, + }, + // HAQQ — EVM Islamic finance L1 (chain 11235). 4 keyless providers. + { + Slug: "haqq", + Name: "HAQQ", + Providers: []Provider{ + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_HAQQ_PUBLICNODE", "https://haqq-evm-rpc.publicnode.com")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_HAQQ_DRPC", "https://haqq.drpc.org")}, + {Slug: "haqq-official", Name: "HAQQ Foundation", URL: envDefault("RPC_URL_HAQQ_OFFICIAL", "https://rpc.eth.haqq.network")}, + {Slug: "blastapi", Name: "Blast API", URL: envDefault("RPC_URL_HAQQ_BLASTAPI", "https://haqq-network.public.blastapi.io")}, + }, + }, + // Etherlink — Tezos EVM L2 (chain 42793). 4 keyless providers. + { + Slug: "etherlink", + Name: "Etherlink", + Providers: []Provider{ + {Slug: "etherlink-official", Name: "Etherlink Foundation", URL: envDefault("RPC_URL_ETHERLINK_OFFICIAL", "https://node.mainnet.etherlink.com")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_ETHERLINK_DRPC", "https://etherlink.drpc.org")}, + {Slug: "ankr", Name: "Ankr", URL: envDefault("RPC_URL_ETHERLINK_ANKR", "https://rpc.ankr.com/etherlink")}, + {Slug: "blastapi", Name: "Blast API", URL: envDefault("RPC_URL_ETHERLINK_BLASTAPI", "https://etherlink-mainnet.public.blastapi.io")}, + }, + }, + // Chiliz — Sports fan token EVM (chain 88888). 4 keyless providers. + { + Slug: "chiliz", + Name: "Chiliz", + Providers: []Provider{ + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_CHILIZ_PUBLICNODE", "https://chiliz-rpc.publicnode.com")}, + {Slug: "ankr", Name: "Ankr", URL: envDefault("RPC_URL_CHILIZ_ANKR", "https://rpc.ankr.com/chiliz")}, + {Slug: "chiliz-official", Name: "Chiliz Foundation", URL: envDefault("RPC_URL_CHILIZ_OFFICIAL", "https://rpc.chiliz.com")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_CHILIZ_DRPC", "https://chiliz.drpc.org")}, + }, + }, + // WEMIX — Korean web3 gaming EVM (chain 1111). 4 keyless providers. + { + Slug: "wemix", + Name: "WEMIX", + Providers: []Provider{ + {Slug: "wemix-official", Name: "WEMIX Foundation", URL: envDefault("RPC_URL_WEMIX_OFFICIAL", "https://api.wemix.com")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_WEMIX_DRPC", "https://wemix.drpc.org")}, + {Slug: "blastapi", Name: "Blast API", URL: envDefault("RPC_URL_WEMIX_BLASTAPI", "https://wemix-mainnet.public.blastapi.io")}, + {Slug: "1rpc", Name: "1RPC", URL: envDefault("RPC_URL_WEMIX_1RPC", "https://1rpc.io/wemix")}, + }, + }, + // Songbird — Flare canary network (chain 19). 4 keyless providers. + { + Slug: "songbird", + Name: "Songbird", + Providers: []Provider{ + {Slug: "flare-official", Name: "Flare Foundation", URL: envDefault("RPC_URL_SONGBIRD_FLARE", "https://songbird-api.flare.network/ext/C/rpc")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_SONGBIRD_DRPC", "https://songbird.drpc.org")}, + {Slug: "blastapi", Name: "Blast API", URL: envDefault("RPC_URL_SONGBIRD_BLASTAPI", "https://songbird-mainnet.public.blastapi.io")}, + {Slug: "ftso-au", Name: "FTSO AU", URL: envDefault("RPC_URL_SONGBIRD_FTSOAU", "https://songbird.rpc.ftso.au")}, + }, + }, + // Cronos zkEVM — zkSync-stack Cronos L2 (chain 388). 3 keyless providers. + { + Slug: "cronos-zkevm", + Name: "Cronos zkEVM", + Providers: []Provider{ + {Slug: "cronos-zkevm-official", Name: "Crypto.com Foundation", URL: envDefault("RPC_URL_CRONOS_ZKEVM_OFFICIAL", "https://mainnet.zkevm.cronos.org")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_CRONOS_ZKEVM_DRPC", "https://cronos-zkevm.drpc.org")}, + {Slug: "blastapi", Name: "Blast API", URL: envDefault("RPC_URL_CRONOS_ZKEVM_BLASTAPI", "https://cronos-zkevm-mainnet.public.blastapi.io")}, + }, + }, + // Ethereum Classic — Original Ethereum chain (chain 61). 3 keyless providers. + { + Slug: "ethereum-classic", + Name: "Ethereum Classic", + Providers: []Provider{ + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_ETC_DRPC", "https://etc.drpc.org")}, + {Slug: "etcdesktop", Name: "ETC Desktop", URL: envDefault("RPC_URL_ETC_ETCDESKTOP", "https://rpc.etcdesktop.com")}, + {Slug: "etcmc", Name: "ETCMC", URL: envDefault("RPC_URL_ETC_ETCMC", "https://etcmc.rpc.nz")}, + }, + }, + // Telos EVM — High-performance EVM (chain 40). 3 keyless providers. + { + Slug: "telos", + Name: "Telos", + Providers: []Provider{ + {Slug: "telos-official", Name: "Telos Foundation", URL: envDefault("RPC_URL_TELOS_OFFICIAL", "https://mainnet.telos.net/evm")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_TELOS_DRPC", "https://telos.drpc.org")}, + {Slug: "blastapi", Name: "Blast API", URL: envDefault("RPC_URL_TELOS_BLASTAPI", "https://telos-mainnet.public.blastapi.io")}, + }, + }, + // PulseChain — Full-state Ethereum fork (chain 369). 3 keyless providers. + { + Slug: "pulsechain", + Name: "PulseChain", + Providers: []Provider{ + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_PULSECHAIN_PUBLICNODE", "https://pulsechain-rpc.publicnode.com")}, + {Slug: "pulsechain-official", Name: "PulseChain Foundation", URL: envDefault("RPC_URL_PULSECHAIN_OFFICIAL", "https://rpc.pulsechain.com")}, + {Slug: "g4mm4", Name: "G4MM4", URL: envDefault("RPC_URL_PULSECHAIN_G4MM4", "https://rpc-pulsechain.g4mm4.io")}, + }, + }, + // Warden Protocol — Intent-based EVM L1. 3 keyless providers. + { + Slug: "warden", + Name: "Warden Protocol", + Providers: []Provider{ + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_WARDEN_PUBLICNODE", "https://warden-evm-rpc.publicnode.com")}, + {Slug: "drpc", Name: "dRPC", URL: envDefault("RPC_URL_WARDEN_DRPC", "https://warden.drpc.org")}, + {Slug: "warden-official", Name: "Warden Foundation", URL: envDefault("RPC_URL_WARDEN_OFFICIAL", "https://evm.wardenprotocol.org")}, + }, + }, + // Oraichain — AI-focused Cosmos SDK chain. 3 keyless providers. + { + Slug: "oraichain", + Name: "Oraichain", + Kind: "cosmos", + Providers: []Provider{ + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_ORAICHAIN_PUBLICNODE", "https://oraichain-rpc.publicnode.com")}, + {Slug: "orai-official", Name: "Orai Foundation", URL: envDefault("RPC_URL_ORAICHAIN_OFFICIAL", "https://rpc.orai.io")}, + {Slug: "lavenderfive", Name: "LavenderFive", URL: envDefault("RPC_URL_ORAICHAIN_LAVENDERFIVE", "https://oraichain-rpc.lavenderfive.com")}, + }, + }, + // Peaq Network — DePIN Polkadot parachain. 3 keyless providers. + { + Slug: "peaq", + Name: "Peaq Network", + Kind: "polkadot", + Providers: []Provider{ + {Slug: "publicnode", Name: "PublicNode", URL: envDefault("RPC_URL_PEAQ_PUBLICNODE", "https://peaq-rpc.publicnode.com")}, + {Slug: "peaq-official", Name: "Peaq Foundation", URL: envDefault("RPC_URL_PEAQ_OFFICIAL", "https://rpc.peaq.network")}, + {Slug: "onfinality", Name: "OnFinality", URL: envDefault("RPC_URL_PEAQ_ONFINALITY", "https://peaq.api.onfinality.io/public")}, + }, + }, } filter := strings.TrimSpace(os.Getenv("OCB_CHAINS")) diff --git a/public/logos/chiliz.png b/public/logos/chiliz.png new file mode 100644 index 0000000000000000000000000000000000000000..dfcc8d14a4de9237b3e807ea33efc49577c09483 GIT binary patch literal 33460 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 literal 0 HcmV?d00001 diff --git a/public/logos/cronos-zkevm.png b/public/logos/cronos-zkevm.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4b44e694528ee9c249066f2d9fdad42b22983c GIT binary patch literal 9539 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 D>3m|g literal 0 HcmV?d00001 diff --git a/public/logos/ethereum-classic.png b/public/logos/ethereum-classic.png new file mode 100644 index 0000000000000000000000000000000000000000..eb921c2b0011385f103d5400fcbccbcb1e290caa GIT binary patch literal 2953 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 literal 0 HcmV?d00001 diff --git a/public/logos/etherlink.png b/public/logos/etherlink.png new file mode 100644 index 0000000000000000000000000000000000000000..01138ea9366140b112b985e73f0e8efa3fadba71 GIT binary patch literal 34798 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

CeM2;slSZk6R}rZwM`GE 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 literal 0 HcmV?d00001 diff --git a/public/logos/fantom.png b/public/logos/fantom.png new file mode 100644 index 0000000000000000000000000000000000000000..153c1b30159f90658ae121c3ed08cb1a80cf4404 GIT binary patch literal 6050 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 + + + + + + + + + + + + + + + diff --git a/public/logos/hydration.png b/public/logos/hydration.png new file mode 100644 index 0000000000000000000000000000000000000000..0606d01fb99d99922bd4c96b519ca888dd52b7f1 GIT binary patch literal 32256 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 + + + + + + + + + + + + + diff --git a/public/logos/peaq.png b/public/logos/peaq.png new file mode 100644 index 0000000000000000000000000000000000000000..58850147e15de1e3a2727060bfaae3a47018e8c8 GIT binary patch literal 37830 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

iT4hRXr|Lgz!bpH=`_MD~L&XS#}12wX2 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 literal 0 HcmV?d00001 diff --git a/public/logos/songbird.png b/public/logos/songbird.png new file mode 100644 index 0000000000000000000000000000000000000000..fc8523fb556a95450cb9621518e301278fdcd7e1 GIT binary patch literal 1086 zcmV-E1i|}KNk&FC1ONb6MM6+kP&iB}1ONap8^8tt9y-ppDUzhKj>p!RGZr&5Gcz+Y zGcz+4XI5nXM!_LQVw3TgGK^t{#W=xQtqS8?-u3xk2(^YKOR{a+*1zB8?b)_%+qP}I zx4F3YEXk5=o3{1Ww{=^#ZQHhO+xC6NUTcn3{hxpk2uR=nvfx2k7Nbm*hyu~iU$XM? zY5s#U3Nz>6beRtUBIhYp`1R+@9~Gt$90`sK3Oj~5tstg;IWkZziamJ}>JJE!NLUK8 zb1VX!2)=K;ILT_Klyhkng@O`UD;(7tjTic zjxyTza#yD)vvFZQfnA;rl5{CXQJ|#9C_s zYa#B=!;){qZ;iUjYBpt6FHdgW->~-S7VMm3W)fLTAT~q>qDyx?AIcX0T~sWIZ8P6C z@^rCDQ~B_TF<%oZ-n`MN;IDJve#`ttfQ%9MMw>X=$G;{MH7)0xhMvx~9c-#!Rr48mHpS>RYYm;_3P%N z%R7D;k>!on0b)Re1UVhY-JJKj*J7-;<#c`T-NA+L=l#1!#`i2IJ{i$6+NHR0(!f;g z^Y@(`0Kx*86w&GZ?z3rEY5$$Uu}@2VHb$Bj*N^U5nKOIbxS(P{WB-tr{*~Luq|y4@ zZz1e*0C?E&)uEyLBRvj#T2D81YVK=U*gm3rrC-D7qLs59S8vlM7RaF;i9QNz?F1$e zZ&TqiI5cquycFk1`OZ{9e8%AK`o|99=% zN#E7ZL3g90A6F)C?@gH8nKHAx?(8kh2s~K>vxrpy$^)4|n$jEcA)8y2A?$Fk!wyDk z_2x93Eo(MaUAHQ?dq>;SlVdN#s2tCF&OL494W&FJ1E+Bb+;QBPySZNby^Y388&8zg z@5vv(J-OrSKFXq$`v*~(<#@<2Sss>Lbn}~8|8|?sRbHsupWk7!e&y$BjDJyN6oP~j za!wn5Ln@Gx5@iS{u_IW=!;aRQjUCroh98a{=T8QUQrZ8Q`3*exos)c&K_>h~E<`EV z%kKr8SL=!Ean-+#kE8rG|9QDH22TTm;w=a|Q#lh$%NhM)YpT5CA3=0N7?hq)6(r+pQ@k?+#}|6@S@6Cr`|Uzmw97zzF# zmLH9~3hT6G*Xz#PA#Y_0l<~S8z*En=a>@BmIPfMop8i<(a60dJZR_t{5_dW>2y#i$ zU$Z<1kWBxa`I_D9QwAuC1*aZ^^_^1b*UN}}1ZEZifIPs{z}l}AIQnlC21<{9 literal 0 HcmV?d00001 diff --git a/public/logos/telos.png b/public/logos/telos.png new file mode 100644 index 0000000000000000000000000000000000000000..4606f1433dc76877f0e110b07b22aca1187bb889 GIT binary patch literal 19796 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 + + + diff --git a/public/logos/wemix.png b/public/logos/wemix.png new file mode 100644 index 0000000000000000000000000000000000000000..482298259d8a0f4f47ad7b9393f8677ec04ff87a GIT binary patch literal 66425 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

AcoibFpx=}RkC9op76_pr* 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 literal 0 HcmV?d00001 diff --git a/src/lib/logo-manifest.ts b/src/lib/logo-manifest.ts index 4d5dfb18..3b81c121 100644 --- a/src/lib/logo-manifest.ts +++ b/src/lib/logo-manifest.ts @@ -480,6 +480,24 @@ const RAW: Record = { regen: "/logos/regen.png", comdex: "/logos/comdex.png", + // ─── Wave-7 RPC cluster chains (benches 184-199, 2026-08-05) ─── + fantom: "/logos/fantom.png", + kusama: "/logos/kusama.png", + hydration: "/logos/hydration.png", + zetachain: "/logos/zetachain.png", + haqq: "/logos/haqq.svg", + etherlink: "/logos/etherlink.png", + chiliz: "/logos/chiliz.png", + wemix: "/logos/wemix.png", + songbird: "/logos/songbird.png", + "cronos-zkevm": "/logos/cronos-zkevm.png", + "ethereum-classic": "/logos/ethereum-classic.png", + telos: "/logos/telos.png", + pulsechain: "/logos/pulsechain.png", + warden: "/logos/warden.svg", + oraichain: "/logos/oraichain.svg", + peaq: "/logos/peaq.png", + // ─── Wave-6 Cosmos RPC providers ─── ecostake: "/logos/ecostake.png", autostake: "/logos/autostake.png", @@ -602,6 +620,20 @@ const ALIASES: Record = { "iotex-mirror": "iotex", "harmony-s0": "harmony", + // Wave-7 RPC official-endpoint aliases (2026-08-05, benches 184-199) + "fantom-official": "fantom", + "hydration-official": "hydration", + "haqq-official": "haqq", + "etherlink-official": "etherlink", + "chiliz-official": "chiliz", + "wemix-official": "wemix", + "cronos-zkevm-official": "cronos-zkevm", + "telos-official": "telos", + "pulsechain-official": "pulsechain", + "warden-official": "warden", + "orai-official": "oraichain", + "peaq-official": "peaq", + }; export function logoPath(slug: string): string | null { From 1399160348611d098b521a5293f21327b85b5861 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Wed, 5 Aug 2026 16:27:01 +0200 Subject: [PATCH 3/3] fix: remove em-dashes from kusama/songbird/zetachain seo_intro --- benchmarks/kusama-rpc.yml | 2 +- benchmarks/songbird-rpc.yml | 2 +- benchmarks/zetachain-rpc.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/benchmarks/kusama-rpc.yml b/benchmarks/kusama-rpc.yml index e671788c..a69eb843 100644 --- a/benchmarks/kusama-rpc.yml +++ b/benchmarks/kusama-rpc.yml @@ -14,7 +14,7 @@ unit: ms higher_is_better: false seo_intro: | - Kusama is Polkadot's canary network — a live, production relay chain (KSM token) where new features ship before Polkadot mainnet. Substrate-based, ~6 s block time, same Substrate JSON-RPC wire protocol as Polkadot. Six keyless endpoints are probed continuously: PublicNode, OnFinality, dRPC, IBP Network, Dwellir, and 1RPC. + Kusama is Polkadot's canary network, a live production relay chain (KSM token) where new features ship before Polkadot mainnet. Substrate-based, ~6 s block time, same Substrate JSON-RPC wire protocol as Polkadot. Six keyless endpoints are probed continuously: PublicNode, OnFinality, dRPC, IBP Network, Dwellir, and 1RPC. abstract: | Per-chain member of the RPC latency cluster, extended to Kusama. diff --git a/benchmarks/songbird-rpc.yml b/benchmarks/songbird-rpc.yml index 3929a57c..db727d94 100644 --- a/benchmarks/songbird-rpc.yml +++ b/benchmarks/songbird-rpc.yml @@ -14,7 +14,7 @@ unit: ms higher_is_better: false seo_intro: | - Songbird (chain 19, SGB) is Flare Network's canary network — a production EVM-compatible chain used to test and validate Flare's FTSO (Flare Time Series Oracle) oracle system before mainnet deployment. The Flare Foundation operates four keyless endpoints: the official Songbird gateway (songbird-api.flare.network/ext/C/rpc), dRPC (songbird.drpc.org), Blast API, and the community node sgb.ftso.com.au. + Songbird (chain 19, SGB) is Flare Network's canary network, a production EVM-compatible chain used to test and validate Flare's FTSO oracle system before mainnet deployment. The Flare Foundation operates four keyless endpoints: the official Songbird gateway (songbird-api.flare.network/ext/C/rpc), dRPC (songbird.drpc.org), Blast API, and the community node sgb.ftso.com.au. abstract: | Per-chain member of the RPC latency cluster, extended to Songbird. diff --git a/benchmarks/zetachain-rpc.yml b/benchmarks/zetachain-rpc.yml index c064be35..2b9a1bba 100644 --- a/benchmarks/zetachain-rpc.yml +++ b/benchmarks/zetachain-rpc.yml @@ -14,7 +14,7 @@ unit: ms higher_is_better: false seo_intro: | - ZetaChain (chain 7000) is an EVM-compatible omnichain L1 enabling native cross-chain assets — BTC, ETH, BNB — without bridges or wrapped tokens. ZETA is the gas token. Five keyless endpoints are probed continuously: dRPC, BlockPI, Thirdweb (7000.rpc.thirdweb.com), All That Node, and Blast API. + ZetaChain (chain 7000) is an EVM-compatible omnichain L1 enabling native cross-chain assets (BTC, ETH, BNB) without bridges or wrapped tokens. ZETA is the gas token. Five keyless endpoints are probed continuously: dRPC, BlockPI, Thirdweb (7000.rpc.thirdweb.com), All That Node, and Blast API. abstract: | Per-chain member of the RPC latency cluster, extended to ZetaChain.