DEV Community

Frits Zwager
Frits Zwager

Posted on Originally published at agentfuel.eu

How we compute a rug score for Solana tokens

A trading bot that buys a fresh pump.fun token has a few seconds to decide. Our rug-check gives it one number from 0 to 100 and a list of reasons. Here is exactly how that number is built.

Short version: we read the token's mint account and its largest holders straight from Solana, add fixed points per red flag (danger 40, warning 15, info 0), and cap the total at 100. No hidden weights.

1. What we read on-chain

  • The mint account: supply, mint authority, freeze authority.
  • The largest token accounts (getTokenLargestAccounts).
  • The owner of each of the top 12 accounts, and which program owns it. That tells us whether it is a person, a pool or a lock.

2. Mint and freeze authority

Finding Severity Why it matters
MINT_AUTHORITY danger (+40) More tokens can be created; holders get diluted
FREEZE_AUTHORITY danger (+40) Your account can be frozen: you can buy but never sell
MINT_REVOKED info (0) Fixed supply, standard on pump.fun

3. Holder concentration, without the noise

On a fresh pump.fun token the biggest account is almost always the bonding curve, often 90%+ of supply. A naive top-10 check flags every new token. So we label accounts first:

  • pool: owned by the pump.fun bonding curve or PumpSwap. Not counted.
  • mayhem_agent: pump.fun's Mayhem Mode agent (unsold tokens burn after 24h). Not counted, and removed from supply.
  • excluded: accounts you pass in. Not counted.
  • locked: held by a lock/vesting program like Streamflow. Still counted, because locked tokens unlock later.

Then: largest holder ≥20% is danger, ≥10% warn. Top 10 ≥50% is danger, ≥30% warn.

4. From findings to one number

Sum of weights, capped at 100. Below 15 is low, 15 to 39 medium, 40+ high. Additive on purpose: you can reproduce the score from the findings, or ignore it and build your own rule from the stable finding codes.

5. Name check

Some scams copy a famous name or use "official / guaranteed" wording. Jev by TypeSafe judges the name, symbol and description; at 0.8+ we add NAME_IMPERSONATION, NAME_CLONE or SCAM_WORDING. Raw scores are in the response.

6. What the score does not tell you

One person spread over many small wallets, a dev selling a minute after your check, thin liquidity, fake socials. A low score means "no red flags found", not "safe".

Try it

MCP (50 free calls/day, no key):
claude mcp add --transport http agentfuel https://api.agentfuel.eu/mcp

HTTP: GET https://api.agentfuel.eu/v1/rugcheck/<mint>, 0.002 USDC per call via x402.

Full version with examples: https://www.agentfuel.eu/blog/rug-score.html

Top comments (0)