Methodology
How a wallet becomes a number
Every constant on this page is imported from the same module that computes live scores. If we tune the model, this page changes with it. Transparency isn't a feature of Scora; it is the product. The public API returns every input below.
The overall Scora
Five sub-scores, each 0–10, are blended by fixed weights and scaled to 0–100: Scora = round(10 × Σ subscoreᵢ × weightᵢ)
| Sub-score | Weight |
|---|---|
| Conviction | 30% |
| Vintage | 15% |
| Portfolio Health | 20% |
| Discipline | 20% |
| Degen Index | 15% |
| Scora | Tier |
|---|---|
| 0–39 | Paper |
| 40–59 | Steel |
| 60–79 | Titanium |
| 80–100 | Diamond |
Conviction · 30%
Value-weighted average hold duration across current holdings. Curve: 0d→0, 7d→3, 30d→6, 90d→8.5, 180d+→10 (log-interpolated). Tokens are weighted by their USD share so dust can't inflate the score.
| Held for | Score |
|---|---|
| 0d | 0 |
| 7d | 3 |
| 30d | 6 |
| 90d | 8.5 |
| 180d+ | 10 |
When a token was acquired before our scan window, its hold time is a floor: shown as “90+ days” and scored at the floor value. That is a positive signal, never treated as missing data. Native SOL uses the wallet's age as its hold-time proxy.
Vintage · 15%
Age curve: 0d→0, 90d→4, 365d→7, 730d+→10 (linear). +1 bonus if active in ≥60% of observed weeks (capped at 10).
| Wallet age | Score |
|---|---|
| 0d | 0 |
| 90d | 4 |
| 365d | 7 |
| 730d+ | 10 |
Continuity bonus: +1 when the wallet was active in at least 60% of the weeks we observed, capped at 10.
Portfolio Health · 20%
A token counts as alive when it has a live market price (Jupiter, with the on-chain price snapshot as fallback). No price usually means dead or rugged. The score is the USD-weighted alive share ×10, minus 0.15 per dead mint (capped at 3, so one airdrop-farm era can't zero a wallet). Holdings under $1 are ignored throughout.
Discipline · 20%
Two equally-weighted parts:
| Signal | Rule |
|---|---|
| Churn | ≤25 swaps/week → 10 · falls linearly to 0 at 100/week. Swaps are detected on a recent-transaction sample; unknown tempo scores a neutral 7. |
| Concentration | Top non-exempt token ≤60% of portfolio → 10 · slides down to 4 at 90% · toward 0 beyond. SOL and stables are exempt. |
Degen Index · 15%
The memecoin share of portfolio value: everything that isn't SOL, a liquid staking token, a stablecoin or a hardcoded blue chip counts as a memecoin. The score peaks at a mixed portfolio and floors at 2for the extremes. It's a character axis: the labels are celebratory, never insulting.
| Memecoin share | Label |
|---|---|
| 0–20% | Tourist |
| 20–50% | Balanced |
| 50–80% | Degen |
| 80–100% | Full Degen |
Data window & honesty
Scora runs on free public infrastructure and budgets every analysis: up to ~5,000 recent signatures for wallet history, per-token hold-time scans for the top holdings by value, and one parsed-transaction sample for swap detection. Everything the budget couldn't reach is reported in the coverage field (0–1) instead of being silently guessed. Below 40% coverage, every score is marked as an estimate in the UI.
Edge cases
| Wallet | Behavior |
|---|---|
| Empty (no tokens, no SOL, no history) | No score at all, never a fake zero. |
| Fresh (< 7 days and < 10 transactions) | Scored, but flagged “Fresh wallet”, because a low score would be misleading. |
| Coverage below 40% | Scores render with an “estimate” chip. |
Scores are informational, not financial advice. Scoring runs only on public on-chain data; Scora stores nothing about you or the wallets you look up.