Substance documentation

Substance is a due diligence terminal for Robinhood Chain (chain id 4663). You paste a token contract address and it returns a score from 0 to 100 built from ten checks on public data. This page explains exactly how that score is made, where the data comes from and what the tool can and cannot tell you.

Quick start

Open the terminal, paste a token contract address (the long code that starts with 0x) and press Scan. A fresh scan takes about 15 seconds. Results stay cached for ten minutes, so scanning the same token again is instant.

Substance never asks you to connect a wallet. If a page that looks like Substance asks for a wallet, a signature or a payment, close it. It is not us.

The ten checks

Every scan runs the same ten checks. Each check earns points and the total becomes the Substance Score. The exact thresholds are listed below so you can verify any score by hand.

CheckPointsHow it is scored
Verified source20 Full points when the contract source is published on Blockscout. Zero when it is not, because nobody can read what an unverified contract really does.
Liquidity depth15 Based on the deepest pool. $100K or more earns 15, $25K earns 10, $5K earns 5. Below that is a red flag: you cannot exit a thin pool.
Holder base15 2,500 holders or more earns 15, 1,000 earns 12, 250 earns 8, 100 earns 4. Under 100 holders is a red flag.
Web presence and docs15 A listed website earns 5. Social links earn 3. If the site is reachable and has a documentation or whitepaper link it earns 7 more. In our research of dozens of projects, having real docs was the single best signal of a serious team.
Deployer history10 The token's creation transaction names the wallet that launched it. We count that wallet's earlier launches through the Pons factories. Zero to two earlier launches earn 7 points. Three to seven earn 4. Eight or more is a serial deployer and earns 0 with a red flag. The count reads the wallet's recent activity, so very old launches can fall outside the window.
Holder concentration10 Share of supply held by the top wallets. Under 30% earns 10, under 50% earns 6, under 70% earns 3. Pools, lockers and burn addresses are excluded from the math.
Trading activity10 24 hour volume. $50K or more earns 10, $10K earns 7, $1K earns 4.
Track record10 Age of the oldest pool. 30 days or more earns 10, 7 days earns 6, 2 days earns 3. Under 48 hours is a red flag because most rugs happen in the first two days.
Explorer reputation5 Blockscout keeps its own scam list. A clean reputation earns 5. A scam flag caps the whole score at 5 no matter what the other checks say.
Supply sanity5 Checks that supply data parses and notes the fixed 1B supply standard used by Pons launches.

Coming next: launch bundling. A check that reads the opening blocks of a launch and measures how much of the supply left the pool straight away, and into how few hands. It is built and running against live launches while we calibrate the thresholds. It does not affect any score yet, and this page will publish its weights before it does.

The formula

The check points add up to 115 available in total. The score is the points earned divided by the points available from the checks that actually ran, times 100. Worked example: if every check runs and a token earns 108 of the 115 points, the score is 108 / 115 x 100 = 94. If one 10 point check could not fetch its data, the available total drops to 105 and the score is computed over 105. Every report shows this line under the dial, for example 108 of 115 available points, scaled to 94, so you can check the math yourself.

Grades

A · 80 to 100 B · 65 to 79 C · 50 to 64 D · 35 to 49 F · 0 to 34

In plain words: an A is verifiable, liquid and documented. A C has real activity but real weaknesses. An F is a shell where almost nothing can be verified.

Data coverage

Public data sources go down and rate limits happen. When a check cannot fetch its data it is marked N/A and the score is rescaled over the checks that did complete. Every report shows its coverage, for example data coverage 90%. We would rather show a smaller honest score than fill a gap with a guess.

Launch feed

The feed watches the Pons factory contract (0xA5aA…1feB) for its TokenDeployed event. Every new token gets scanned automatically within about a minute of hitting the chain, newest first. The feed keeps the last 200 launches and survives restarts.

Fresh launches score low on purpose. A token that is ten minutes old has no track record, few holders and usually no docs yet. That is a fact about the token, not a bug in the feed. Watch how a launch develops over its first hours instead of judging the first snapshot.

For Pons launches the feed and every report also show bonding progress. A Pons token trades in its own locked pool from launch and graduates once the WETH paired in that pool reaches the threshold, 4.2 ETH by default. The progress number is that WETH amount against the threshold. Graduation confirms demand reached the bar. It says nothing about quality, so read it next to the score, not instead of it.

The feed is also available as JSON:

GET /api/feed

Data sources

Everything runs on public endpoints that anyone can query for free:

SourceUsed for
Blockscoutrobinhoodchain.blockscout.com/api/v2: token metadata, verified source, holder counts, holder list, scam flags.
Dexscreenerapi.dexscreener.com: pools, liquidity, price, FDV, 24 hour volume, pool age, website and social links.
Public RPCrobinhood-rpc.publicnode.com with rpc.mainnet.chain.robinhood.com as backup: raw chain reads, launch events, and name and symbol for tokens the explorer has not indexed yet.
Pons V2 factory0x000000e200088D55C39a11F609E5F667729ad49b (view on Blockscout). The feed polls its TokenCreated event about once a minute.
Project websiteOne read only page load to check the site is real and to look for a documentation link. We never submit anything.

API

The terminal runs on one simple endpoint that you can call yourself:

GET /api/scan?address=0xTokenAddress

Copyable example:

curl "http://localhost:8563/api/scan?address=0x18E674231A58c239Dc7DaeDcffE15Ec3A24cff5c"

The response is JSON with the score, grade, verdict, all ten checks with their points and details, red flags, green flags, token identity data and explorer links:

{
  "address": "0x18E674231A58c239Dc7DaeDcffE15Ec3A24cff5c",
  "score": 96,
  "grade": "A",
  "verdict": "Top tier substance profile...",
  "coverage_pct": 100,
  "identity": { "name": "Hookr.fun", "symbol": "HOOKR",
                "liquidity_usd": 453427, "holders": 3457, ... },
  "checks": [ { "id": "verified", "status": "pass",
                "points": 20, "max": 20, ... }, ... ],
  "red_flags": [],
  "green_flags": [ "Contract source is verified on Blockscout", ... ]
}

There is also a command line mode that prints the same JSON, made for bots and scripts:

python3 scanner.py 0xTokenAddress

Errors:

CaseStatusBody
Malformed address400{"error": "Invalid address"}
No token at the address404{"error": "No token found..."}
Upstream data failure200a report with the failed checks marked N/A and a lower coverage percent

There is also a machine readable summary of this whole API at /agent.md and /llms.txt for AI agents.

Please be gentle. The scanner leans on public rate limited APIs. If you want to scan in bulk, add a delay between calls.

Self hosting

Substance is plain Python with zero dependencies. No pip, no database, no keys. If you can run Python 3 you can run Substance:

python3 server.py 8563
# then open http://localhost:8563

The whole project is three files: the scan engine, a small web server and one HTML page per screen. Read the source before you run it. That rule applies to us too.

Limitations

Being clear about limits matters more than looking smart. Substance cannot see:

A high score means real and readable. It does not mean safe and it never means buy. Substance is not financial advice and no score is a recommendation.

Token status

There is no official Substance token today. If that ever changes, the contract address will be published on this page first, before anywhere else. Any token using the Substance name before that is fake. This matters on a chain where riding a known name is a common trick.

FAQ

Is Substance free?

Yes. Scanning is free and stays free.

Do I need to connect a wallet?

No, never. Substance is read only. If something that looks like Substance asks for a wallet, it is not us.

Can a project pay for a better score?

No. The scoring table above is public and the same for everyone. If the code is open you can check there is no special path.

A token I like scored low. Is it a scam?

Not always. A low score means little could be verified. Brand new honest projects also start with a low score because they have no track record yet. Read the check details, not just the number.

A token scored high and still rugged. How?

See the limitations section. Substance measures what is public at scan time. It cannot see intent. Use the score to filter out obvious shells, then do your own research on what remains.

Which chains are supported?

Robinhood Chain only for now. The scanner design is not tied to one chain, so more can follow.