From 43279485b798bbf7ff4cbbc202e97f0b4269f0cf Mon Sep 17 00:00:00 2001
From: Florent Tapponnier
- Open, reproducible benchmarks for crypto infrastructure — measured in
+ Open, reproducible benchmarks for crypto infrastructure. measured in
the open, published in the same format every time.
- The goal is to make performance an observable property of crypto infrastructure — like uptime in SaaS, or p99 in databases — so builders can choose providers on data and users can hold them to it. + The goal is to make performance an observable property of crypto infrastructure. like uptime in SaaS, or p99 in databases. so builders can choose providers on data and users can hold them to it.
- Every benchmark is a YAML spec plus a harness. The spec describes what to measure, which providers, which Prometheus queries hold the numbers; the harness runs continuously and exposes those metrics. A single shared Prometheus scrapes every harness; the site queries Prometheus directly and re-renders every minute. Every provider is rendered with equal visual weight — readers do their own ranking. + Every benchmark is a YAML spec plus a harness. The spec describes what to measure, which providers, which Prometheus queries hold the numbers; the harness runs continuously and exposes those metrics. A single shared Prometheus scrapes every harness; the site queries Prometheus directly and re-renders every minute. Every provider is rendered with equal visual weight. readers do their own ranking.
Anyone can submit a benchmark. The{" "} contribution guide{" "} - walks through the steps. New providers, new metrics, new chains — all welcome via pull request. + walks through the steps. New providers, new metrics, new chains. all welcome via pull request.
Source code{" "} @@ -273,7 +273,7 @@ function DraftNotice({ source }: { source: string }) { return (
- Draft — no live data yet + Draft. no live data yet
The spec is published. Numbers will appear here as soon as the harness diff --git a/src/app/benchmarks/page.tsx b/src/app/benchmarks/page.tsx index 64bd64d88..00947832b 100644 --- a/src/app/benchmarks/page.tsx +++ b/src/app/benchmarks/page.tsx @@ -120,7 +120,7 @@ export default async function BenchmarksIndex() {
- {all.length} {all.length === 1 ? "benchmark" : "benchmarks"} live — and counting. + {all.length} {all.length === 1 ? "benchmark" : "benchmarks"} live. and counting.
- Anyone can publish on OpenChainBench. You write the harness, you host it, you keep your secrets. The project shares one Prometheus that scrapes your public /metrics endpoint — that is the only piece of common infrastructure. + Anyone can publish on OpenChainBench. You write the harness, you host it, you keep your secrets. The project shares one Prometheus that scrapes your public /metrics endpoint. that is the only piece of common infrastructure.
/metrics over HTTPS, and the project's shared Prometheus scrapes that URL on a schedule. You keep your API keys, your wallet keys, your budget. Maintainers only see the metric values your harness chooses to publish.
- The only piece of infrastructure shared by the project is one Prometheus instance — that is the URL every YAML spec points at. Adding a new harness is one extra scrape_configs block in infrastructure/prometheus/prometheus.yml. No new credentials, no new services, no privileged access to share.
+ The only piece of infrastructure shared by the project is one Prometheus instance. that is the URL every YAML spec points at. Adding a new harness is one extra scrape_configs block in infrastructure/prometheus/prometheus.yml. No new credentials, no new services, no privileged access to share.
- For a concrete end-to-end example with a fictional contributor — the spec, the Go harness, deploying to Fly.io, opening the PR — see the{" "} + For a concrete end-to-end example with a fictional contributor. the spec, the Go harness, deploying to Fly.io, opening the PR. see the{" "} walkthrough doc.
/metrics publicly reachable./metrics publicly reachable.~3-4 hours of focused work, spread across a few days. @@ -64,11 +64,11 @@ export default function ContributePage() {
Use the{" "} - 📊 Propose a benchmark + Propose a benchmark {" "}template to describe what you want to measure, which providers, and where the harness will run. Maintainers respond with feedback before any code is written. Want to brainstorm first? Use{" "} @@ -77,9 +77,9 @@ export default function ContributePage() { .
-
- Drop a file at benchmarks/<your-slug>.yml. It is the source of truth for the report — title, abstract, methodology, providers and the PromQL that fills in the numbers.
+ Drop a file at benchmarks/<your-slug>.yml. It is the source of truth for the report. title, abstract, methodology, providers and the PromQL that fills in the numbers.
@@ -87,7 +87,7 @@ export default function ContributePage() {
slug: wallet-portfolio-latency
number: "005"
-title: Wallet Portfolio API — Read Latency
+title: Wallet Portfolio API. Read Latency
subtitle: How fast each wallet API returns a complete portfolio for a busy address.
category: Wallets
status: live
@@ -132,29 +132,29 @@ providers:
That is the entire wire format. The Zod schema in src/lib/spec-schema.ts is the single source of truth; pnpm validate lints every spec in CI.
-
+
- The harness is a long-running data producer. Whatever fits the providers — Bun, Node, Python, Go, Rust. The contract is small:
+ The harness is a long-running data producer. Whatever fits the providers. Bun, Node, Python, Go, Rust. The contract is small:
/metrics over HTTP on a documented port (e.g. :2112 or :9090).harnesses/<slug>/README.md..env.example.infrastructure/ and are shared across every harness./metrics over HTTP on a documented port (e.g. :2112 or :9090).harnesses/<slug>/README.md..env.example.infrastructure/ and are shared across every harness.
- OpenChainBench is a federation: each harness is hosted by whoever wrote it. Pick whatever fits — Railway, Fly, Cloud Run, a VPS, a home server with a static IP. The only requirement is that /metrics is reachable over HTTPS at a stable URL.
+ OpenChainBench is a federation: each harness is hosted by whoever wrote it. Pick whatever fits. Railway, Fly, Cloud Run, a VPS, a home server with a static IP. The only requirement is that /metrics is reachable over HTTPS at a stable URL.
Append a job to infrastructure/prometheus/prometheus.yml pointing at your public URL so the shared Prometheus picks up your harness:
Test the queries locally before opening the PR:
{`pnpm validate # schema lint
diff --git a/src/app/methodology/page.tsx b/src/app/methodology/page.tsx
index 66ec06af2..333474120 100644
--- a/src/app/methodology/page.tsx
+++ b/src/app/methodology/page.tsx
@@ -19,8 +19,8 @@ export default function MethodologyPage() {
-
-
+
+
@@ -29,7 +29,7 @@ export default function MethodologyPage() {
Reported as p50, p90, p99 and arithmetic mean over the run window. Failed requests (timeout, 5xx, malformed response) are excluded from latency aggregates and counted toward success rate.
- Min and max of p50 observed across the rolling 24-hour window — captures the volatility of each provider, not just its central tendency.
+ Min and max of p50 observed across the rolling 24-hour window. captures the volatility of each provider, not just its central tendency.
Each provider's p50 expressed as a percentage delta from the field mean. Negative is below the field, positive is above.
Share of requests returning a usable result within the published timeout. The only metric that includes failures.
Wherever a benchmark is multi-region, the headline figure is the cross-region median. Per-region figures appear in Fig. 3 of each report.
@@ -40,7 +40,7 @@ export default function MethodologyPage() {
- Clone the harness from the link at the bottom of any benchmark report.
- Set API keys for the providers you want to include. Public endpoints work for most aggregators; some bridges require allow-listing.
- - Run the harness — it exposes
/metrics over HTTP. Point a local Prometheus at it, or query the public OpenChainBench Prometheus directly.
+ - Run the harness. it exposes
/metrics over HTTP. Point a local Prometheus at it, or query the public OpenChainBench Prometheus directly.
- Run for at least 24 hours to get a comparable sample size (n typically ≥ 1,000 per provider per region).
- Compare your aggregates to the published numbers. If they diverge, file a provider correction with a reproducer.
diff --git a/src/app/opengraph-image.tsx b/src/app/opengraph-image.tsx
index cf337ef42..c28aad789 100644
--- a/src/app/opengraph-image.tsx
+++ b/src/app/opengraph-image.tsx
@@ -1,7 +1,7 @@
import { ImageResponse } from "next/og";
export const runtime = "nodejs";
-export const alt = "OpenChainBench — Open benchmarks for crypto infrastructure";
+export const alt = "OpenChainBench. Open benchmarks for crypto infrastructure";
export const size = { width: 1200, height: 630 };
export const contentType = "image/png";
@@ -72,7 +72,7 @@ export default function OG() {
maxWidth: 1080,
}}
>
- Latency, accuracy, reliability and cost — measured in the open.
+ Latency, accuracy, reliability and cost. measured in the open.
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 4f20921ae..546b4dfcb 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -39,7 +39,7 @@ export default async function HomePage() {
- {/* Stats strip — neutral facts */}
+ {/* Stats strip. neutral facts */}
@@ -169,7 +169,7 @@ export default async function HomePage() {
No benchmark specs yet.
- Drop a YAML in benchmarks/ to get started — see the{" "}
+ Drop a YAML in benchmarks/ to get started. see the{" "}
tutorial.
diff --git a/src/app/press/page.tsx b/src/app/press/page.tsx
index 28f7418c6..924c3827b 100644
--- a/src/app/press/page.tsx
+++ b/src/app/press/page.tsx
@@ -16,7 +16,7 @@ export default function PressPage() {
- OpenChainBench is an open, reproducible benchmark series for crypto infrastructure. Each report measures latency, accuracy or reliability of one category — aggregators, bridges, RPCs, price feeds — and ships alongside the script that produced it. Methodology, specs and raw metrics are public. The project is community-run and MIT-licensed.
+ OpenChainBench is an open, reproducible benchmark series for crypto infrastructure. Each report measures latency, accuracy or reliability of one category. aggregators, bridges, RPCs, price feeds. and ships alongside the script that produced it. Methodology, specs and raw metrics are public. The project is community-run and MIT-licensed.
@@ -34,7 +34,7 @@ export default function PressPage() {
- For interviews, custom benchmark requests or pre-publication embargoes — open an issue or a discussion on{" "}
+ For interviews, custom benchmark requests or pre-publication embargoes. open an issue or a discussion on{" "}
GitHub.
diff --git a/src/app/twitter-image.tsx b/src/app/twitter-image.tsx
index d11b95076..3eacd4d03 100644
--- a/src/app/twitter-image.tsx
+++ b/src/app/twitter-image.tsx
@@ -1,7 +1,7 @@
import { ImageResponse } from "next/og";
export const runtime = "nodejs";
-export const alt = "OpenChainBench — Open benchmarks for crypto infrastructure";
+export const alt = "OpenChainBench. Open benchmarks for crypto infrastructure";
export const size = { width: 1200, height: 630 };
export const contentType = "image/png";
@@ -56,7 +56,7 @@ export default function TwitterImage() {
maxWidth: 1080,
}}
>
- Latency, cost and reliability — measured in the open.
+ Latency, cost and reliability. measured in the open.
- ↔ Swap
+ Swap A and B
@@ -335,7 +335,7 @@ export function ShareSection({ slug, title, benchmark }: Props) {
diff --git a/src/components/site-header.tsx b/src/components/site-header.tsx
index 03665b534..d8d669627 100644
--- a/src/components/site-header.tsx
+++ b/src/components/site-header.tsx
@@ -44,7 +44,7 @@ export async function SiteHeader() {
- {/* Masthead — wordmark + nav + CTA */}
+ {/* Masthead. wordmark + nav + CTA */}