[Product]
Risk Score Methodology
The Knovo score is a deterministic 0-100 number computed from eight weighted components, then adjusted by penalty deductions and a small set of override rules. It is implemented in lib/riskScore.ts and contains no AI or randomness.
[ Note ]
1. Component scores
Eight components are scored independently from the pair and holder data, then summed. Components can score 0 when the underlying data (usually holder data) isn't available.
| Component | Max points | Driven by |
|---|---|---|
| Liquidity | 20 | USD liquidity in the primary pool |
| Market Cap | 15 | Market cap, falling back to FDV |
| Holders | 20 | Top-holder % (max 10) + top-10-holder % (max 10) |
| Activity | 15 | 24h volume relative to liquidity (volume / liquidity ratio) |
| Pressure | 10 | Share of 24h transactions that are buys vs. sells |
| Volatility | 10 | Absolute 24h price change |
| Pool Age | 5 | Hours since the pair was created |
| Security | 10 | Fixed baseline. Reserved for automated contract-safety checks not yet wired into scoring (see below) |
Liquidity (0-20)
| USD Liquidity | Points |
|---|---|
| > $2,000,000 | 20 |
| $500,000 – $2,000,000 | 16 |
| $150,000 – $500,000 | 12 |
| $50,000 – $150,000 | 8 |
| Below $50,000 | 4 |
Market cap (0-15)
| Market Cap | Points |
|---|---|
| Unavailable | 0 |
| > $5,000,000,000 | 15 |
| $500,000,000 – $5,000,000,000 | 13 |
| $50,000,000 – $500,000,000 | 10 |
| $5,000,000 – $50,000,000 | 7 |
| Below $5,000,000 | 4 |
Holders (0-20)
Requires holder data from Moralis; scores 0 when unavailable. Split into two sub-scores that add together.
| Top holder % | Points |
|---|---|
| < 2% | 10 |
| 2% – 5% | 8 |
| 5% – 10% | 6 |
| 10% – 20% | 3 |
| > 20% | 0 |
| Top 10 holders % | Points |
|---|---|
| < 20% | 10 |
| 20% – 40% | 8 |
| 40% – 60% | 5 |
| > 60% | 2 |
Activity (0-15)
Based on the ratio of 24h volume to liquidity, a rough measure of how hard the pool is being traded relative to its depth.
| Volume ÷ Liquidity | Points |
|---|---|
| ≥ 1.0 | 15 |
| 0.5 – 1.0 | 12 |
| 0.2 – 0.5 | 8 |
| 0.05 – 0.2 | 4 |
| Below 0.05 | 1 |
Pressure (0-10)
Based on the share of 24h transactions that are buys. Scores 0 when buy/sell counts aren't available.
| Buy share of txns | Points |
|---|---|
| > 60% | 10 |
| 40% – 60% | 7 |
| 25% – 40% | 4 |
| Below 25% | 1 |
Volatility (0-10)
Based on the absolute value of the 24h price change.
| |24h price change| | Points |
|---|---|
| ≤ 8% | 10 |
| 8% – 20% | 8 |
| 20% – 40% | 5 |
| Above 40% | 2 |
Pool age (0-5)
| Pool age | Points |
|---|---|
| Unknown | 0 |
| ≥ 30 days | 5 |
| 3 days – 30 days | 3 |
| Below 3 days | 1 |
Security (fixed at 10)
This component currently contributes a fixed 10 points to every score. It is a placeholder for automated contract-safety signals (source verification, LP lock/burn status, deployer concentration) that exist as standalone modules in the codebase but are not yet wired into the public score. See lib/explorer.ts and lib/launchDetection.ts in Data Sources.
2. Penalty deductions
After the eight components are summed, specific risk conditions subtract points and add a human-readable reason to the response. Multiple penalties can apply at once and stack.
| Condition | Deduction |
|---|---|
| Liquidity below $30,000 | -10 |
| Market cap below $1,000,000 | -5 |
| Top holder above 15% of supply | -10 |
| Top 10 holders above 70% of supply | -10 |
| High volume (≥0.5x liquidity) with sell-heavy flow (>60% sells) | -5 |
| A 5m, 1h, or 6h price drop of 30% or more | -5 |
3. Override rules
A small number of floor and cap rules run after the score is clamped, to keep specific well-known or clearly dangerous cases consistent regardless of how the weighted math lands.
- Stablecoin floor: if the token symbol is
USDT,USDC, orDAI, the score is raised to at least 90. - Mega-cap floor: market cap above $1B, liquidity above $1M, and top holder under 5% raises the score to at least 85.
- High whale cap: top holder above 25% caps the score at 50.
- Low liquidity cap: liquidity below $20,000 caps the score at 45.
- Extreme concentration cap: top 10 holders above 80% caps the score at 55.
4. Final score
The summed, penalty-adjusted, override-applied score is rounded and clamped to a 0-100 range. The response also includes:
breakdown: the raw per-component points listed above.penalties: the list of penalty labels that applied.reasons: short explanations tied to whichever penalties fired, or a general summary sentence keyed to the score band when no penalties applied.