Every Second, specified.
This is the engineering description of the instrument: what is measured, how it is stored, how it is scored, how it is delivered. The site describes the promise; this document describes the machine that keeps it.
Overview
Every Second measures the reliability of every mainnet Avalanche L1 from outside the chain. Three probes, on infrastructure independent of every measured chain, send real signed transactions and record how long each takes to become final. From those timings, together with validator telemetry and cross-chain message tracing, the system derives a public, deterministic score per chain, an ecosystem index, and an incident stream.
- Listen — an AvalancheGo full node follows every L1 on mainnet: blocks, validator sets, ICM traffic. Passive, continuous, free for every chain.
- Touch — probes in Frankfurt, Virginia and Singapore send signed transactions on a 60-second cadence, tightening to 5 seconds on anomaly.
- Tell — the public sees the dashboard and the X feed; operators receive streams, webhooks and the API; foundations receive the instrument for their ecosystem.
Architecture
| Component | Role | Notes |
|---|---|---|
probe | Sends transactions, stamps t₀/t₁/t₂, signs measurements, ships them to the collector | One process per region; funded wallet per chain; NTP-disciplined clock |
listener | Full node + indexers for blocks, validator sets and ICM messages | Passive; the source of validator health and leg-1/leg-3 timestamps |
collector | Ingests measurements, validates signatures, writes raw store | Idempotent by measurement id |
scorer | Computes percentiles, components, score, index, incidents | Pure function of the raw store and the methodology version |
delivery | REST API, WebSocket stream, webhook dispatcher, X publisher | All read from the same event log |
dashboard | Public console; a WebSocket subscriber like any operator | Static files; no private view |
The invariant: every published number is a deterministic function of the raw store and a methodology version. No component may write a score by hand.
Regions & cadence
| Region | Code | Role |
|---|---|---|
| Frankfurt | fra | Europe; transit corridor for western CIS traffic |
| Virginia | iad | North America |
| Singapore | sin | Asia-Pacific |
Roadmap: São Paulo, Johannesburg, Dubai, Tokyo — seven continent-scale internet regions. Cadence: 60 s base per chain per region; 5 s burst for a chain while any of its metrics is outside baseline; burst ends after five clean minutes. Probes never run on infrastructure operated by a measured chain.
Probe protocol
- Construct a minimal self-transfer on the target chain from the probe wallet; sign locally.
t₀— broadcast to the chain's public RPC; record wall-clock and monotonic time.t₁— first inclusion observed (block containing the tx seen by the listener or the RPC).t₂— finality confirmed: the block is irreversibly accepted by the validator set, as observed by the listener.- Emit a
measurementevent:{id, chain, region, sent_at, t1_ms, t2_ms, tx, probe_sig}. Timeouts emitmeasurement.failedwith the stage reached.
Finality is t₂ − t₀. Per chain, per region and per window the scorer reports p50, p95 and p99.
Data model
measurement { id, chain, region, wallet_epoch, rpc_id, sent_at, t1_ms, t2_ms, tx, probe_sig, methodology } visibility: evidence
icm_trace { id, route:{from,to}, sent_at, leg1_ms, leg2_ms, leg3_ms, delivered, evidence_tx } visibility: evidence
validator_obs { chain, observed_at, count, hhi, churn_24h }
incident { id, chain, type, leg?, started, ended, duration_ms, evidence_tx, public_post } visibility: public
score { chain, computed_at, F, U, M, V, score, ci_low, ci_high, rank_band, coverage, methodology } visibility: public
index { period, median_finality_ms, chains, methodology } visibility: public
commitment { period, merkle_root, methodology, tx } visibility: public
Raw events are immutable. Aggregates are derived and can be rebuilt from raw at any time.
Score specification
| Component | Definition | Normalisation |
|---|---|---|
| F · finality | p99 of t₂ − t₀ over the window, cross-region median | 1 at ≤ 1 s, 0 at ≥ 10 s, log-scaled between |
| U · uptime | share of probe windows with successful inclusion, 90 days | 1 at 100 %, 0 at 95 %, linear |
| M · message delivery | share of probe ICM messages delivered within 60 s, 24 h | 1 at 100 %, 0 at 80 %, linear |
| V · validator health | set size, stake concentration (HHI), 24 h churn | composite 0–1 against public thresholds |
Windows: F over 24 h, U over 90 d, M over 24 h, V at computation time. Weights and thresholds are part of the methodology version; a change is a new version, announced before it takes effect. The dashboard shows a chain as healthy at score ≥ 93, degraded ≥ 87, incident below.
Three-leg ICM
Probes send Interchain Messages between measured chains. Each message is timed in three legs: leg 1 source finality (message finalised on the source chain), leg 2 relayer pickup (a relayer observes and submits it), leg 3 destination delivery (execution on the destination). A message undelivered after 90 s opens icm.stalled attributed to the leg that broke.
Incident model
| Type | Opens when | Closes when |
|---|---|---|
finality.degraded | p99 above threshold for 3 consecutive probes | 5 clean minutes |
uptime.incident | probe tx failing from ≥ 2 regions for 60 s | 5 clean minutes |
icm.stalled | message undelivered after 90 s | delivery, or 24 h expiry |
validators.changed | set size or HHI shifts beyond threshold | informational; closes immediately |
region.gap | one region's p50 drifts > 25 % from the others | 5 clean minutes |
Every incident carries an evidence transaction and, on open and on recovery, a public post on X.
Proof of measurement
The probe transaction proves that a measurement happened. A second mechanism proves that the record of it was never altered: every hour, the Merkle root of that hour's raw measurements is written to the chain in one transaction, together with the methodology version in force. Each monthly index value is committed the same way.
- Anyone can see that a commitment exists and when it was made — without seeing the raw data.
- A licensee or auditor holding the raw dataset verifies it against the on-chain root: the data is exactly what was recorded at the time.
- The index the foundation quotes has an on-chain source: value, month, methodology version.
Raw measurements themselves are never written on-chain; they stay in the evidence layer. Cost: one transaction per hour.
REST API
Base https://api.everysecond.online/v1. JSON, UTC, milliseconds. Auth Authorization: Bearer <key>. Endpoints: /chains, /chains/{id}, /chains/{id}/finality, /chains/{id}/incidents, /icm/routes, /index, /badge/{id}.svg, /methodology. See the API page for samples. Limits: 600 req/min per operator key; foundation keys are ecosystem-wide.
WebSocket
Two streams from one event log. wss://…/v1/public — no key: score.updated, incident.opened, incident.recovered, index.updated; the dashboard is a subscriber. wss://…/v1/stream?chain={id} — partnership key, one subscription per chain: every measurement and trace for that chain. Frames are the same JSON objects as the data model: measurement, measurement.failed, icm_trace, incident.opened, incident.recovered, score.updated. Heartbeat every 15 s; reconnect with ?since=<event id> to replay a gap.
Webhooks
JSON POST per event. Headers X-ES-Event, X-ES-Signature: sha256=HMAC(body, secret). Non-2xx responses retried 5 times with exponential backoff (1 m → 30 m). Events are idempotent by id; stream and webhook share ids.
Public layer
Two layers. Public, for everyone, no key: the dashboard, the public stream and API (scores, incidents with evidence transactions, the index, badges) and the incident feed on X. Evidence, for an ecosystem through its foundation's partnership: raw measurements, three-leg timings, region and incident detail, history, webhooks, signed scorecards — provisioned to L1 teams by the foundation. Raw historical data is licensed to institutions. The score is never sold.
Retention
Raw events: 90 days. Hourly aggregates: indefinitely. Incidents and evidence transactions: indefinitely. Methodology versions and the raw store are sufficient to rebuild every published number.
Deployment
The site is static: HTML, CSS and JavaScript with Three.js from a CDN; no build step. Upload the folder to Cloudflare Pages; _headers sets security headers. The dashboard reads demo data until it is pointed at the stream; switch by replacing the demo universe in assets/dashboard.js with a WebSocket subscriber that emits the same objects.
Build order
The order in which the instrument becomes real. Each step is independently demonstrable; nothing below depends on a step above being polished.
- Probe + collector — one region, the 100 most active chains, one wallet per chain, one RPC. Signed measurements landing in the raw store. Proves t₀/t₁/t₂. Test configuration: no rotation, no cross-check yet.
- Three regions, every mainnet L1 — funded wallets, chain registry, cadence and burst. Proves coverage.
- Scorer + full methodology — percentiles with confidence intervals, rank bands, components, score, incidents, index, coverage classes; rotating wallet pools, randomised timing, multiple RPC endpoints per chain switched on. Methodology v1.0 frozen. Proves reproducibility and resistance to gaming — because from here on, scores are published.
- Delivery — REST, WebSocket, webhooks, X publisher from one event log; hourly Merkle commitment on-chain. Proves "we push" and "we cannot rewrite".
- Dashboard on the stream — replace the demo universe with the subscriber; the page is already built for it.
- Listener + ICM traces — validator telemetry, three-leg timing and the organic cross-check (passive measurement of third-party transactions). Completes V and M and the probe-preference flag.
Step 3 is the moment the foundation conversation changes: from "an idea" to "a number you can recompute".
Glossary
| Term | Meaning |
|---|---|
| measurement | one probe transaction with its t₀/t₁/t₂ timestamps |
| finality | t₂ − t₀; what a user waits |
| incident | a threshold crossing with a start, an end and evidence |
| evidence tx | the signed on-chain transaction behind a measurement or incident |
| leg | one of the three timed stages of a cross-chain message |
| region gap | (max − min) / median of p50 across regions |
| index | monthly median measured finality across every L1 |
| operator | a team running an L1 with access to streams and evidence |