draft · current risk score is a first attempt, yet to be refined.

risk rating

5 min readmetropolx
  • risk
  • creators
share

every launch alert comes with a rating of the creator, not of the token. a brand new token has no history, the wallet that launched it often does.

the rating is a score from 0 (safest) to 100 (riskiest), computed the moment the token launches, from every token the same wallet launched before it on nad.fun.

how the rating works

three factors, each turned into a goodness gg between 0 (bad) and 1 (good):

factorquestionweight
graduationdo their tokens graduate?50%
survivalare their tokens still trading a day later?30%
serial launchingdo they spray launches and hope?20%

the score is what's left of the weighted mean:

score=100×(1−∑iwi gi∑iwi)\text{score} = 100 \times \left(1 - \frac{\sum_i w_i \, g_i}{\sum_i w_i}\right)

rounded to the nearest integer. a factor without data is left out, and the weights of the others are rescaled.

two rules apply to every factor:

  • only known outcomes count. a launch counts toward the graduation rate once it graduated or is 24 h old, toward the survival rate once it is 48 h old. a token launched 10 minutes ago tells nothing yet
  • recent launches weigh more. a launch tt days old weighs w(t)=0.5 t/60w(t) = 0.5^{\,t/60}: half as much after 60 days, a quarter after 120

graduation

graduation is when a token leaves the launchpad bonding curve. most tokens never do, the launchpad base rate is about 0.5%.

a creator with 1 graduation out of 2 launches is not a 50% creator, that's mostly luck. so the rate is pulled toward the base rate, as if every creator started with 20 average launches behind them:

pgrad=G+0.005×20N+20p_\text{grad} = \frac{G + 0.005 \times 20}{N + 20}

with GG the weighted count of graduated launches and NN the weighted count of resolved ones. the more launches a creator has, the more their own record wins over the base rate.

rates span from 0.03% to 50%, so goodness is read on a log scale, from 0 at 0.1% to 1 at 15%:

ggrad=clamp⁡[0,1](ln⁡(pgrad/0.001)ln⁡(0.15/0.001))g_\text{grad} = \operatorname{clamp}_{[0,1]}\left(\frac{\ln(p_\text{grad} / 0.001)}{\ln(0.15 / 0.001)}\right)

a graduation after a community takeover (CTO) does not count: the community did the work, not the launcher.

survival

a launch survived if it still traded a day later: it has a daily candle opening at least 24 h after launch. the base rate is about 21%, smoothed the same way with 10 pseudo-launches, then read on a linear scale from 0 at 5% to 1 at 60%:

psurv=S+0.21×10Ns+10gsurv=clamp⁡[0,1](psurv−0.050.60−0.05)p_\text{surv} = \frac{S + 0.21 \times 10}{N_s + 10} \qquad g_\text{surv} = \operatorname{clamp}_{[0,1]}\left(\frac{p_\text{surv} - 0.05}{0.60 - 0.05}\right)

launches without candle data are skipped. when none have any, survival is left out of the score.

serial launching

some wallets launch dozens of tokens a week and walk away from each. this factor counts the launches of the last 30 days that did not graduate, FF, discounted by the graduation record: a creator who does graduate tokens is forgiven their misses.

F′=F×(1−ggrad)gserial=1−clamp⁡[0,1](ln⁡(1+F′)ln⁡(1+30))F' = F \times (1 - g_\text{grad}) \qquad g_\text{serial} = 1 - \operatorname{clamp}_{[0,1]}\left(\frac{\ln(1 + F')}{\ln(1 + 30)}\right)

log scale again: the first few misses cost the most, and 30 adjusted misses take this factor to 0.

rating levels

tierscorealert borderdiscord feed
low0 – 35🟦 blue #54A9FF🟦 bluechip
medium36 – 64🟨 yellow #FFE254🟧 medium
high65 – 100🟥 red #FF5454🟥 high
unknown–⬜ grey #95A5A6⬛ clusterfuck only

every rated launch also goes to ⬛ clusterfuck, see add to discord.

graduations carry no rating, they get their own color and feed:

eventalert borderdiscord feed
graduation🟪 purple #6E54FF🟪 graduates

colors

the graduation purple is the metropolx primary, #6E54FF=hsl(249.1°, 100%, 66.5%)\texttt{\#6E54FF} = \text{hsl}(249.1°,\ 100\%,\ 66.5\%). the tier colors keep its saturation and lightness and only turn the hue:

colorhuehslhex
🟪 purple (primary)249.1°hsl(249.1°, 100%, 66.5%)#6E54FF
🟦 blue210°hsl(210°, 100%, 66.5%)#54A9FF
🟨 yellow50°hsl(50°, 100%, 66.5%)#FFE254
🟥 red0°hsl(0°, 100%, 66.5%)#FF5454

examples

four creators, their earlier launches all a few days old:

recordgraduationsurvivalserialscoretier
2 graduated, 4 survived, out of 50.880.640.9119low
1 graduated, 3 survived, out of 100.720.370.6341medium
0 graduated, 0 survived, out of 100.240.100.3777high
0 graduated, 1 survived, out of 400.110.020.0094high

note the second row: 1 graduation in 10 is 20× the launchpad base rate, that alone keeps the creator out of the high tier.

first-time creators

no track record is a red flag, not a neutral one. a creator with no resolved launch is always rated high, with a score of at least 85:

  • a wallet launching its very first token
  • a wallet whose earlier launches are all younger than 24 h and none graduated, e.g. three launches in the last hour

fresh wallets cost nothing to make, so a rug often comes from one.

unknown

unknown means we could not read the creator's history in time (database error, or the 2 s lookup timeout). freshness beats completeness: the alert goes out anyway, in grey, to clusterfuck only.

limitations

  • it rates a wallet, not a person. a serial rugger with a fresh wallet looks like any first-time creator, which is why those are rated high
  • the past is not the future. a creator with a clean record can rug next time
  • nad.fun only. launches on other launchpads or chains are not counted
  • last 500 launches. older history of very prolific wallets is ignored, it weighs almost nothing anyway after the 60-day half-life
  • candle gaps. survival depends on daily candles; tokens we have no candles for are skipped, not counted as dead

not financial advice. the rating is one signal, read it with the creator metrics shown next to it.