Firo · Light-wallet infrastructure

Firo Spark Sync Monitor

Live preview
Checking fleet…connecting to Firo backends
Shared Spark sync signal for the public Electrum backends light wallets use — anon-set fetch cost, setHash agreement, and tip lag. For wallet/SDK teams and operators. Privacy-safe probes only (no addresses, keys, or wallet data).
Firo · Spark · Public Electrum fleet
Can wallets complete a Spark sync on these backends?
connecting…
Loading live data from the Firo Electrum backends… first probe can take up to ~20–30s.
Open /api/status Spark health detail Developer feed

Spark sync signal?Flagship metrics height-only tools miss: full anonymity-set fetch cost and setHash agreement. On this Vercel preview, figures may be from a recent measured snapshot until always-on hosting.

flagship · anon set + setHash

Tip can look fine while Spark sync still stalls on a slow or divergent set. Ranked fetch cards and bandwidth compare: Spark health.

Fleet at a glance

Full backends table →
Backend Lag Spark id Anon-set setHash Status
Waiting for probes…

Session charts & probe RTT

secondary · this browser session · this monitor
Fleet health over session ·
green yellow red
Avg probe RTT · median ·
Measuring probe RTT…

Live backend status

synced & consistent lag / slow / Spark mismatch unreachable / far behind
Backend Operator Height?Chain tip height this backend reports, via blockchain.headers.subscribe. Lag?Blocks behind the fleet reference tip (highest height at least two backends agree on). 0 means fully synced. Anon-set?Full Spark anonymity-set fetch time and size from the latest measurement (snapshot on this preview). Probe RTT?Round trip for the light probe (TLS + tip) from this monitor. Secondary to Spark setHash and lag. Trend?This backend's probe RTT across polls this browser session. Spark id?Active Spark coin-group id from spark.getsparklatestcoinid, cross-checked fleet-wide. ✗ = differs from consensus. Status?green = tip fresh, Spark id + setHash match · yellow = lag / slow / missing Spark id / coin-id or setHash mismatch (setHash ✗ alone is enough) · red = unreachable or far behind.
Probing live Firo servers…
Anonymity-set fetch health
The Spark signal height only tools miss
Each public backend’s active Spark anonymity set is fully downloaded so the community can see fetch time, size, and whether setHash matches across the fleet. Serve times are measured from this monitor’s region.

Fetch ranking (fastest → slowest)

#BackendFetchSizeCoinssetHash
Waiting…

Per-backend anon-set fetch?Full download of each backend's Spark anonymity set for the active coin group (spark.getsparkanonymityset): time, coins, MB, and setHash. This is the real mobile-sync bottleneck.

Same set, different bandwidth?Backends can serve the same setHash at different byte sizes. Useful when comparing operator efficiency for mobile sync.

bytes per full fetch · identical setHash
collecting…
Why fund this: height only trackers miss the Spark path. The active coin group is often tens of thousands of coins / tens of MB and can take 15 to 40 s+ to serve. A backend can be green on tip and still stall mobile Spark sync. Fleet wide setHash checks also catch a host serving a different or stale set. Funded always on hosting keeps anon set sweeps continuous (see Roadmap).
Delivery plan
From live prototype to community infrastructure
Firo Crowdfunding System ask: $2,000, split 50/50 across two milestones. Not only hardening — productionize the Spark fleet signal, then ship ops and decision tools wallet teams can use. Work starts on funding and finishes within one month. MIT licensed for the whole community.
Now
Working prototype · live fleet probes
Week 1
M1 · Always-on production
Weeks 2–3
M2 · Ops + decision tools
≤ 1 month
Complete & handed over
$2,000
Total (in FIRO)
50 / 50 across milestones
~3 wks
Work duration
within 1 month of funding
MIT
License
fully open-source

Past the prototype — what funding unlocks

The Vercel preview already proves the Spark signal. What’s left is always-on community infrastructure (continuous anon-set sweeps, durable history, own domain), then tools so wallet teams and operators can decide, not only watch a status wall.

Milestone 1 · Always-on production · Week 1 · prepaid · incl. $200 hosting
$1,000
  • Public MIT GitHub repo with README, methodology, and contribution guide
  • Own domain + HTTPS + always on VPS hosting (12 months prepaid)
  • Production dashboard: reachability, height, tip lag, probe RTT, version
  • Spark coin group consistency cross checked across the public fleet
  • Live anon set fetch health: time, size/coins, setHash consistency
  • Durable history (SQLite/Postgres) with real 24h / 7d uptime %
  • Public JSON API (/api/status, /api/docs, /api/history) + concrete curl / CI examples
  • Firo forum launch write up for the community
Acceptance: live public URL; repo public under MIT; API returning real fleet data; anon-set fetch-health populated for all backends; continuous history recording.
Milestone 2 · Ops, decision tools & upstream · Weeks 2–3 · on delivery
$1,000
  • Per backend detail pages with historical charts (24h / 7d / 30d)
  • Anon set growth tracker (coins, MB, fetch time over time)
  • Opt in alerting (Telegram / Discord / webhook) for red status, Spark / setHash mismatch, or lag spikes
  • Operator self service: add or verify your server + privacy-safe self check page
  • Embed kits / README + status-page snippets for the already-live /api/badge (and docs embeds)
  • Wallet scorecard: short ranked table (Spark-consistent · anon-set ms/MB · tip lag · uptime %) for default-server review
  • One-click compare: side-by-side Spark id, setHash, fetch MB/ms, and lag across 2–3 backends
  • Public Spark incident / transparency log (e.g. setHash divergence windows)
  • Expand Developers docs: deeper ElectrumX + Spark method examples beyond the live Developers tab already shipping (complements wallet SDKs; does not replace them)
  • At least one upstream contribution to Firo wallet or docs (e.g. Spark health check)
  • Handover runbook and 6 to 12 month uptime commitment
Acceptance: detail pages + 30-day charts live; scorecard + compare usable on the public site; alerting demonstrable within one poll cycle; ≥1 upstream PR opened/merged; handover doc + incident log published.

Budget · $2,000

paid in FIRO at approval
M1 · production engineering + deploy$800
M1 · domain + VPS hosting (12 months)$200
M2 · ops, decision tools, alerting, upstream$1,000
Total$2,000
For Firo developers
Machine readable Spark Electrum fleet health

Firo light wallets sync Spark through public Electrumx backends. A host can look fine on height and still serve a slow or inconsistent anonymity set. This page documents the public JSON feed that reports tip freshness, Spark coin group agreement, setHash consistency, and anon set fetch cost across the curated fleet.

Who this is for

Primary: wallet / SDK / mobile teams reviewing default Electrum hosts, and Electrumx operators watching Spark serve cost. Secondary: public transparency when Spark sync stalls. The dashboard and the JSON feed show the same probe data.

vs a wallet Electrum SDK: an SDK (or app) talks to one host and does real Spark sync for the user. This monitor watches the curated public fleet — tip lag, coin-group agreement, full anon-set fetch ms/MB, and setHash consistency — so teams do not each re-download ~18–32 MB just to compare backends. Complement, not a replacement. Not an in-wallet “pick a server” UI.

Where this sits in the Firo stack

LayerRoleTypical use
Full node Authoritative chain and Spark state Required behind every Electrumx instance
Electrumx (Spark) Indexed light wallet protocol for Firo Spark What light and mobile wallets sync through in production
Wallet / SDK / app client Talks to a chosen Electrum host Real Spark sync, coin group fetch, user facing wallet logic
This monitor Continuous probes across the curated public fleet Alerts, CI, default list review, incident triage, status pages
Electrum clients query one host. This API watches the fleet. Use it when the community needs a shared answer: which public backends agree on Spark state, and how costly a full anon set fetch is right now.
Open /api/docs
Loading live /api/ci gate…

Public JSON routes

GET /api/status
Full fleet snapshot: lag, Spark consistency, anon set health, summary, and a meta block describing purpose.
GET /api/spark
Compact Spark consensus for docs and light polling. Includes inconsistent endpoint ids without ranking hosts.
GET /api/ci
Pass/fail JSON. HTTP 200 when ok (Spark healthy and tip lag ≤2). Mild lag alone can yield spark_ok: true with HTTP 503 — use spark_ok for Spark-only gates.
GET /api/docs
Machine readable field glossary, probe list, and example uses.
GET /api/badge
SVG badge of current fleet health for READMEs and operator docs.
GET /api/history
Durable time series on funded always on hosting.

Fields that matter in /api/status

FieldMeaning for a developer
referenceMajority safe fleet tip. Highest height that at least two backends agree on, so one forked host cannot skew lag for everyone.
spark_consensusModal active Spark coin group id from spark.getsparklatestcoinid.
spark_sethash_consensusModal anon set setHash across measured backends.
endpoints[].lagBlocks behind reference. Primary freshness signal.
endpoints[].spark_consistenttrue when this host’s coin group matches fleet consensus.
endpoints[].anonset.msWall time to fully download the active anon set from this monitor’s region.
endpoints[].anonset.mb / coinsBytes on the wire and coin count for that full fetch.
endpoints[].anonset.setHash / consistentIdentity of the set and whether it matches fleet setHash consensus.
endpoints[].latency_msLight probe RTT from this monitor only. Secondary. Not user device latency and not a ranking score.
endpoints[].statusgreen, yellow, or red from lag, Spark consistency, and probe RTT rules (see meta.status_rules).
anonset_sourcesnapshot on this Vercel preview (bundled last sweep). live on the always on host once funded.
anonset_checked_atWhen the last full anon set sweep finished. May be older than checked_at on the preview.
metaPurpose notes, probe methods, status rules, and height only vs Spark field map. Safe to ignore if you only need metrics.

Height only checks vs Spark path

What you look atWhat you learnWhat you miss
ok, height, lagHost answers and is near tip Slow or divergent Spark anon set (the usual mobile sync stall)
spark_latest_coin_id, spark_consistent Coin group agreement across the fleet Fetch cost and byte size of the set
anonset.ms, mb, setHash, consistent Whether a wallet can finish a Spark sync on this host, and whether the set matches peers Nothing height only tools already cover

Concrete jobs this API supports

  1. CI or ops alert. Fail a job or page someone when any default host has spark_consistent === false or anonset.consistent === false.
  2. Incident triage. Separate an app bug from an Electrum host that is serving a slow or divergent Spark set.
  3. Default list review. Compare anonset.mb and anonset.ms across operators before publishing recommended backends (same setHash can still mean different bytes on the wire).
  4. Docs transparency. Embed /api/badge or poll /api/ci from a status page.

Example: list Spark inconsistent hosts

curl -sS https://firo-spark-sync-monitor.vercel.app/api/status \
  | jq '[.endpoints[]
      | select(.spark_consistent == false
          or (.anonset != null and .anonset.consistent == false))
      | {name, lag, spark_consistent, anonset}]'

Example: CI gate with /api/ci

# Exit non zero when tip+Spark gate fails (HTTP 503)
curl -sS -f https://firo-spark-sync-monitor.vercel.app/api/ci \
  | jq '{ok, spark_ok, max_lag, reasons, green, yellow, red}'

ok requires spark_ok and max_lag ≤ 2. Mild lag alone can yield spark_ok: true with ok: false — see reasons. -f fails curl on HTTP 503. For Spark-only CI, assert spark_ok.

Example: compact consensus poll

curl -sS https://firo-spark-sync-monitor.vercel.app/api/spark \
  | jq '{checked_at, spark_consensus, spark_sethash_consensus, summary, inconsistent}'

Privacy and probe surface

Probes are public Electrum methods only: server.version, blockchain.headers.subscribe, spark.getsparklatestcoinid, and spark.getsparkanonymityset. No addresses, keys, transactions, or wallet traffic are sent or stored. CORS is open (*) so browser tools and dashboards can read the feed.

Start here: /api/docs · /api/status · /api/ci

What this is

A community health board and JSON feed for the public Firo Electrum backends that light and mobile wallets depend on. Flagship focus: Spark sync health (anon set fetch and setHash), plus tip lag. The dashboard and the API show the same data. See Developers for integration details.

How to read the Overview in 30 seconds

  1. Spark sync signal — coins, MB, median fetch time, setHash agreement (the flagship).
  2. CI / tip gatesspark_ok vs strict tip band (ok / max lag ≤2).
  3. Fleet at a glance — which host is lagging or slow on anon-set; open a row for detail.

What it checks (privacy safe)

  • server.version: reachability, TLS, software version
  • blockchain.headers.subscribe: chain height and lag vs fleet reference tip
  • spark.getsparklatestcoinid: active Spark coin group id, cross checked across backends
  • spark.getsparkanonymityset: full anon set fetch time, size, and setHash consistency

No addresses, keys, transactions, or wallet data are sent or stored. The reference tip is the highest height at least two backends agree on. Spark consensus is the modal value across the fleet.

Status model

  • green: reachable, ≤2 blocks behind, Spark id and setHash match fleet, probe RTT under 3s from this monitor
  • yellow: lagging, slow RTT, missing Spark id, or Spark coin id / setHash mismatch — tip can be 0 blk with Spark id matching and still yellow on setHash ✗
  • red: unreachable or more than 100 blocks behind

What funding unlocks

This preview already probes the live fleet and ships a Developers JSON guide. Funding moves it to always-on hosting with continuous anon-set sweeps, durable multi-day history, alerting, operator tooling, wallet scorecard / compare views, Spark incident log, deeper ElectrumX method docs, and a proper community domain. Details on the Roadmap.

Public JSON API: /api/status · field docs: /api/docs · badge: /api/badge firo spark fleet health badge