SFDP Watch
Program membership and grades, per cluster, measured not asserted.
Current epoch, funded counts and snapshot age
Program-wide figures
Failed epochs, program-wide
Full dashboard →failed ÷ graded per epoch · last 60 epochs · the program’s own grades, not derived here
Epoch by epoch, and how this is measured
| Epoch | Mainnet failed/graded | Rate | Testnet failed/graded | Rate |
|---|---|---|---|---|
| 1016 | 15/360 | 4.17% | — | — |
| 1015 | 9/360 | 2.50% | — | — |
| 1014 | 11/361 | 3.05% | — | — |
| 1013 | 4/360 | 1.11% | — | — |
| 1012 | 5/361 | 1.39% | — | — |
| 1011 | 8/361 | 2.22% | — | — |
| 1010 | 4/361 | 1.11% | — | — |
| 1009 | 15/366 | 4.10% | — | — |
| 1008 | 17/366 | 4.64% | — | — |
| 1007 | 16/367 | 4.36% | 61/468 | 13.03% |
| 1006 | 15/367 | 4.09% | 60/468 | 12.82% |
| 1005 | 20/368 | 5.43% | 66/468 | 14.10% |
Each point is failed divided by graded for that epoch. Epochs the program never assessed are on neither side of the division, so a gap is never counted as a failure. Epochs with fewer than 20 graded validators are dropped and break the line rather than rendering as a value. An em dash means no plotted data for that cluster and epoch, which is not the same as a measured zero. The two clusters are judged against different published floors, so their rates are not a like-for-like comparison. The window is the last 60 epochs; testnet settles epochs at a different rate from mainnet-beta, so its line can end earlier.
Two clusters, two rulebooks
Every published threshold →5 of 5 comparable thresholds differ, every one· read live from the program’s config, nothing hardcoded
| Criterion | Mainnet-betaepoch 1016 | Testnetepoch 1007 |
|---|---|---|
| Min vote credits | 97% | 85% |
| Max skip rate | 5% | 40% |
| Max commission | 5% | 100% |
| Max MEV commission | 10% | — |
| Min Agave version | 4.2.0-rc.1 | 4.2.0-rc.0 |
| Min Firedancer version | 0.1104.0-rc.40200 | 0.1102.0-beta.40201 |
How these thresholds are measured
The program publishes its thresholds per epoch and per cluster, and they are not the same. A validator can sit comfortably inside testnet’s limits while failing mainnet’s, so the two readings are never like for like. Thresholds are published once an epoch completes, so the values above are the most recent settled ones rather than the epoch in progress; the epoch each column came from is stated in its heading.
Every pass or fail on this site is computed from these published numbers against a measured value, both shown. Nothing is hardcoded, and no threshold is inferred.
Where everyone stands
Browse all validators →state decides cluster standing, not pubkeys
- 13Pendingnone yet0.12% of all records
- 106TestnetOnboardedtestnet only0.97% of all records
- 370Approvedmainnet-beta + testnet3.4% of all records
- 6,985Rejectednone63.7% of all records
- 3,492Retirednone31.8% of all records
How states map to clusters
State, not which pubkeys a record carries, is what determines cluster standing. Almost every record here, rejected ones included, holds both a mainnet and a testnet pubkey, because a mainnet key is registered at application time. Approved validators run both clusters; TestnetOnboarded is the only genuinely testnet-only state. TestnetOnboarded plus Pending is the pipeline toward mainnet delegation.
Recent changes
Full ledger →69 observed · 37 lost mainnet stake · 3 gained · observed times, not program decision times
- 2Wf9V9…2DuMDc
joined the list
Pending - PendingApproved+ MAINNET STAKE
- TestnetOnboardedRetired
- TestnetOnboardedRetired
- TestnetOnboardedRetired
- TestnetOnboardedRetired
Go deeper
Where these numbers come from
Membership is the documented sfdp_participants endpoint: one request, no parameters, the complete table, polled hourly and diffed against the previous snapshot. Grades, failure reasons and community-cluster data are read from files committed to this repository, never fetched while a page renders. Pass rates count Bonus and Baseline grades over graded epochs only; epochs the program never assessed sit in neither the numerator nor the denominator.
The validators/list endpoint silently ignores every filter parameter: ?state=approved returns byte-identical results to ?state=bogusvalue, mostly rejected and retired records. This site never relies on it for membership.
The grade history covers today’s funded validators plus those observed leaving, so older epochs show the survivors’ history rather than everyone who was in the program at the time. Where a validator was graded before its recorded join date, the record is shown as it was published and labelled on that validator’s page.
snapshot · grades 2026-08-18 04:11:28 UTC · watching since 2026-07-30 07:46:51 UTC
