How HolDEX works
A Solana token conviction analyzer. Track diamond hands, measure holder commitment, and discover tokens with the strongest communities.
How It Works
Conviction Score
The conviction percentage shown on the main leaderboard is the >1 Month diamond hands rate. It measures what percentage of the top 250 holders (>0.01% Supply) have been holding a token continuously for more than 30 days.
- ELITE (75%+) — 3 out of 4 holders are long-term diamond hands
- HIGH (50%+) — Majority of holders are committed
- MID (25%+) — Some committed holders mixed with traders
- LOW (<25%) — Mostly short-term traders
Holder Snapshots
For every curated token, HolDEX reads the complete holder list about once an hour (Helius DAS getTokenAccounts, every page) and stores it as a snapshot. Token accounts are combined per wallet. LP pools and burn wallets are excluded, and so are dust balances below 0.00001% of the held supply.
How Hold Time Is Measured
A wallet's hold time starts when its holding streak began: the moment its balance went from zero to positive. Selling part of a position doesn't reset it. Selling out completely and buying back later starts a new streak.
- New holders are dated by the snapshots themselves: a wallet that shows up between two hourly snapshots bought within that hour.
- Holders who were already there when tracking began are dated once from their token account's transfer history, by rewinding the balance to the transfer that took it from zero. For extremely active accounts the history is capped and the result is a lower bound.
The hold time is now - streakStart.
Top 250 Holders (>0.01% Supply)
Diamond hands are measured on the Top 250 Holders (>0.01% Supply) in the latest snapshot: the 250 largest wallets that each hold at least 0.01% of supply, with LP and burn wallets left out. A token with fewer wallets above that line is measured on all of them. The percentages describe these top holders, not every wallet that holds the token.
Diamond Hands Distribution
The Diamond Hands section on each token page shows what percentage of holders have held for at least 6h, 24h, 3d, 1w, 1M, 3M, 6M, 9M and 1yr. The share of supply held by those wallets is computed too.
King of the Pill
The banner at the top of the home page goes to the curated token with the strongest Diamond Hands score, computed once a day at 00:20 UTC. The score turns the distribution above into one number from 0 to 100: holders past each threshold count more the longer the threshold, only thresholds the token is old enough to reach count (so a month-old token is judged on its first month, not on a year it has not had), the share of holders carries 70% of the weight and the share of supply 30%, and a token under 90 days old is discounted while it earns its place. A token whose holders have held longer than they had a week ago gets a lift of up to 10%, growing its holder base over a month adds up to 5%, and losing holders costs up to 25%. Trading activity moves it by up to 25% either way: half from the 24h volume in dollars (from $10k to $1M a day, on a log scale) and half from turnover, the 24h volume as a share of market cap (25% a day is full marks), so a token nobody trades loses ground to one that is both held and traded. Price momentum counts too: the 24h, 7d and 30d price changes (worth 20%, 40% and 40% of the term, saturating at +25%, +50% and +100%) add up to 15% for a token on the way up and cost up to 10% for one on the way down. Only curated tokens at least a week old with 100 or more holders and a fresh snapshot are scored.
The same score orders the Diamond Hands table on the home page, highest first; tokens not yet scored follow in random order.
The crown rotates on purpose. A King keeps it for at least three days; from day three its score counts 6% less per day and a challenger has to beat that by two points; nobody holds it past a week; and an ex-King cannot be crowned again for two weeks. The HolDEX team can still hand-pick a King, which replaces the automatic one until it is cleared.
Token Pages
Each token detail page shows:
- Price & Market Data — Current price, 24h change, market cap, volume, liquidity. Sourced from GeckoTerminal.
- Token Statistics — Market cap, volume, liquidity, holder count, supply, token age, and page views.
- Conviction Metrics — Holder concentration (top 5/10/20%), token age, fresh wallet detection, locked/burnt supply, and the Diamond Hands distribution.
- Top Holders Table — The largest 100 holders with balances, USD values, supply percentages, and individual hold times.
- Liquidity Pools — Active DEX pools with volume and liquidity data.
Watchlist
Connect your Solana wallet to save tokens to your personal watchlist. You can add tokens from the star button on any token page, and view them from the WATCHLIST pill on the main terminal or the dedicated Watchlist page.
The Watchlist page also shows a global leaderboard of the most watchlisted tokens across all users.
Data Sources
| Data | Source | Notes |
|---|---|---|
| Holder list & hold times | Solana RPC via Helius | DAS API for full holder snapshots, transaction history (getTransactionsForAddress, else Enhanced Transactions) for one-time hold-time backfill |
| Price, volume, liquidity | GeckoTerminal | Free tier, rate-limited with circuit breakers |
| Token metadata | Helius DAS + on-chain | Name, symbol, logo, social links from on-chain & off-chain JSON |
| Holder count | Jupiter + Helius | Jupiter search API (fast) with Helius DAS fallback |
| Liquidity pools | GeckoTerminal | Pool addresses, reserves, volume per DEX |
| Social links | On-chain + DexScreener | Helius metadata extensions, off-chain JSON, DexScreener for curated tokens |
Cache & Refresh Times
HolDEX caches data at multiple levels to balance freshness with API cost. Here are the current cache durations:
Server-Side Cache
| Data | Cache Duration | Notes |
|---|---|---|
| Holder snapshot | 1 hour | Full holder list for curated tokens, stored in the database |
| Per-wallet hold time | permanent | A streak start is found once and kept until the wallet sells out |
| Diamond Hands distribution | 15 min | Recomputed from the latest snapshot |
| Token price/market data | 1-10 min | Price data: 1 min. Token info: 10 min. |
| Conviction leaderboard | 1 min | Leaderboard query results cached briefly |
| Holder analytics (concentration) | 1 hour | Top holder list and concentration metrics |
| Holder count | 24 hours | From Jupiter/Helius. Cached longer since it changes slowly. |
| Token metadata (name, logo) | 1 hour | Stable data, rarely changes |
Frontend Cache (Browser)
| Data | Cache Duration | Notes |
|---|---|---|
| Token list page | 2 min | Auto-refreshes every 2 minutes |
| Token detail page | 5 min | Price refreshes every 5 minutes with freshness indicator |
| Search results | 2 min | Cached to avoid redundant API calls on re-search |
| Pool data | 5 min | Liquidity pool information |
Background Jobs
| Job | Interval | Notes |
|---|---|---|
| Curated token conviction refresh | 1 hour | Re-analyzes all admin-curated tokens |
| Curated price refresh | 10 min | Market cap and ATH for admin-curated tokens |
| Cache warm on startup | Once | Pre-fetches market data for top 20 most-viewed tokens |
| View count flush | 5 sec | Batches page view increments to the database |
Curated Tokens
Site administrators can add tokens to a curated list via the admin panel. Curated tokens:
- Appear on the conviction leaderboard immediately (with 0% conviction until analysis completes)
- Have their conviction data refreshed automatically every hour
- Can display DexScreener banner images and social links on their token page
Technical Details
- Backend: Node.js + Express, PostgreSQL, Redis (BullMQ), deployed on Render
- Frontend: Vanilla HTML/CSS/JS (no build step), static site
- Wallet: Supports Phantom, Solflare, Backpack, Coinbase, Trust, Brave, Exodus
- RPC: Helius for DAS API and standard Solana RPC, with public RPC fallback
- Rate Limiting: Per-IP rate limits on all API endpoints, circuit breakers on external APIs
- Security: Helmet CSP headers, CORS, signature-based replay protection, timing-safe admin auth