# Validators dashboard — feature checklist

Local: `/validators/` · Public: **https://secretobank.com/validators/**

## Revert snapshot (local-migration)

Pre-migration zip (no storage cache):

`validators-snapshots/validators-pre-local-20260715-025417.zip`

```bash
cd /home/idunn/projects/secreto
unzip -o validators-snapshots/validators-pre-local-20260715-025417.zip
# optional: clear caches
rm -f validators/storage/*.json
```

## Local data (2026-07-15)

| Data | Source |
|------|--------|
| Top 50 ranking | Lighthouse (docker) |
| Network APR / daily est. | Erigon block withdrawals sample |
| Liquid balances | Erigon |
| Operator withdrawals | Erigon block `withdrawals[]` |
| Outbound PLS | Erigon `ots_getTransactionBySenderAndNonce` nonce walk |
| Token outs (hops) | Erigon `eth_getLogs` Transfer |
| PLS USD | DexScreener (+ CG / Scan fallback) |

Soft fallback to pulsechainstats / PulseScan if local returns empty (`EXTERNAL_HISTORY_FALLBACK`).  
Product: PulseChain **operator / withdrawal-address** radar (not graffiti vanity tags).

---

## Shipped

- [x] **v1 Leaderboard** — top 20 operators by network stake share
- [x] Validator count, staked PLS + USD, share bar
- [x] Liquid PLS on withdrawal address (Erigon)
- [x] Wallet vs contract type
- [x] Est. daily reward (pro-rata network fees × stake share)
- [x] Network cards (active vals, total staked, APR, top-20 concentration)
- [x] Dark `/pools`-style chrome + cache + bootstrap paint fix
- [x] **Network daily rewards** stat card + info popup
- [x] **PLS/USD** from DexScreener (not bad PulseScan coin_price)
- [x] Operator detail page (header, fleet, inflows, outbounds)
- [x] Sink tags + hop-1/2/3 exit breakdown + **left chain**
- [x] Token-transfer mix on intermediates (bridge as left chain)
- [x] Holdings column (native PLS $)
- [x] Leaderboard search + click row → detail
- [x] Fonts +2px on validators UI
- [x] Expanded sinks (OmniBridge family, extra routers, SwapRouter)
- [x] **Dual series chart** inflows vs outflows (sample window, **no** slider)
- [x] CSV export top 20
- [x] Top5 share note + data freshness line
- [x] **Public deploy** proxy + site nav **Validators** link
- [x] **Progressive detail load** (meta → inflows → outflows → hops) + progress bar (page shell ~instant)

---

## Cancelled

- [x] ~~Date range / history slider~~ — not wanted

---

## Still open (later)

### Money-flow accuracy
- [ ] Full lifetime withdrawal backfill (all pages)
- [ ] Token portfolio $ on destinations (heavier)
- [ ] Token outflows as first-class series
- [ ] More CEX deposit wallet tags

### Leaderboard polish
- [ ] Inline filter of top-20 table
- [ ] Recent search history (localStorage)
- [ ] Sort preference persistence

### Optional
- [ ] Fee-recipient tips (`getminedblocks`)
- [ ] Graffiti enrichment (beacon)
- [ ] Compare operators / alerts / WoW share change

---

## Product rules

1. Leaderboard row = **withdrawal / operator address**
2. Detail page = **follow the PLS** for that address
3. Graffiti strings are branding tags, not addresses
4. Bridge out = **left chain** (with swapped = liquid exit proxy)
