Token Due Diligence: Risk Flags, Price, Liquidity
Pricing
from $15.00 / 1,000 token snapshots
Token Due Diligence: Risk Flags, Price, Liquidity
Facts about any ERC-20 on Base, Ethereum, Arbitrum, Optimism or Polygon: supply, owner and renouncement, upgradeable proxy, owner-only mint/pause/blacklist/fee functions, and USD price, liquidity and FDV from its deepest DEX pool.
Pricing
from $15.00 / 1,000 token snapshots
Rating
0.0
(0)
Developer
leo xing
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Token Due Diligence: Risk Score, Price & Liquidity
Paste token addresses, get a 0–100 risk score with plain-English reasons and a factual snapshot of each token, read live from the blockchain on Base, Ethereum, Arbitrum, Optimism, Polygon or Solana:
- Risk score: 0 (nothing found) to 100 (extreme), a level (
low,medium,high,critical), and the reasons with the points each one adds. It measures how exposed a holder is: powers someone holds over the token (minting, freezing, blacklisting, fees, pausing, changing the code) and how easy it is to exit (liquidity, and holder concentration on Solana). Powers count for less on tokens with millions in liquidity, where they're usually a large issuer's compliance controls. - EVM tokens (ERC-20): name, symbol, decimals, total supply; contract owner and whether ownership is renounced; upgradeable proxy with its implementation and admin (EIP-1967 and the older ZeppelinOS layout used by USDC); owner-only levers found in the bytecode (mint, pause, blacklist, fee changes, max-transaction limits, trading on/off switches); USD price, quote-side liquidity and fully diluted value from the deepest WETH/USDC (or WPOL/USDC) pool on Uniswap v3, Aerodrome (Base) or Velodrome (Optimism), priced with Chainlink.
- Solana tokens (SPL and Token-2022): mint and freeze authorities, metadata and whether it can still change, Token-2022 extensions an issuer can use against holders (permanent delegate, transfer fees, transfer hooks, non-transferable, frozen by default, pausable), the largest holders grouped by owner (wallets vs. pools and vaults), pump.fun / letsbonk.fun launches, and price, liquidity, 24 h volume and the deepest pool from Jupiter and DexScreener.
Input
| Field | Example |
|---|---|
| Chain | base (or eth, arbitrum, optimism, polygon, solana) |
| Token addresses | 0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed on Base, JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN on Solana |
All tokens in one run are on the chosen chain.
Output (one dataset item per token)
An EVM token (DEGEN on Base; the market object shortened):
{"address": "0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed","chain": "base","name": "Degen","symbol": "DEGEN","risk": {"score": 15,"level": "low","reasons": [{ "code": "can-pause", "points": 10, "text": "The owner can pause all transfers." },{ "code": "owner-not-renounced", "points": 5, "text": "Ownership is not renounced." }],"summary": "Low risk: the owner can pause all transfers; ownership is not renounced."},"decimals": 18,"totalSupply": 35967154646.5,"owner": "0x704Ec5C12Ca20a293C2C0B72B22619A4231f3c0d","ownershipRenounced": false,"proxy": { "upgradeable": false },"privilegedFunctions": { "mint": false, "pause": true, "blacklist": false, "setFees": false, "maxTransaction": false, "tradingSwitch": false },"market": { "dex": "uniswap-v3", "pairedWith": "WETH", "priceUsd": 0.000962867, "quoteSideLiquidityUsd": 134100, "fullyDilutedValueUsd": 34630000, "poolsFound": 10 },"flags": { "upgradeable": false, "ownerCanAct": true, "canMint": false, "canBlacklist": false, "canChangeFees": false, "noLiquidPool": false, "thinLiquidity": false }}
A Solana token (JUP; holders and some market and flag fields shortened):
{"address": "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN","chain": "solana","name": "Jupiter","symbol": "JUP","risk": {"score": 3,"level": "low","reasons": [{ "code": "metadata-mutable", "points": 3, "text": "The name, symbol and logo can still be changed." }],"summary": "Low risk: the name, symbol and logo can still be changed. Powers are weighted down for $5.5M of liquidity."},"decimals": 6,"supply": 6861485919.61,"program": "token","mintAuthority": null,"freezeAuthority": null,"metadata": { "source": "metaplex", "uri": "https://static.jup.ag/jup/metadata.json", "updateAuthority": "61aq585V8cR2sZBeawJFt2NPqmN7zDi1sws4KLs5xHXV", "mutable": true },"extensions": null,"launchpad": null,"holders": {"top": [{ "owner": "EXJHiMkj6NRFDfhWBMKccHNwdSpCT7tdvQeRf87yHm6T", "kind": "program", "amount": 1700000000, "percent": 24.78 },{ "owner": "61aq585V8cR2sZBeawJFt2NPqmN7zDi1sws4KLs5xHXV", "kind": "program", "amount": 1682700000, "percent": 24.52 }],"top10Percent": 65.5,"top10WalletsPercent": 5.997,"largestWalletPercent": 2.33},"market": {"priceUsd": 0.313819,"liquidityUsd": 5461000,"fullyDilutedValueUsd": 2153000000,"volume24hUsd": 2564000,"deepestPool": { "dex": "meteora", "pool": "C8Gr6AUuq9hEdSYJzoEpNcdjpojPZwqG5MtQbeouNNwg", "pairedWith": "SOL", "liquidityUsd": 2056000 },"poolsFound": 30,"oldestPoolCreatedAt": "2024-01-29T08:22:38.000Z"},"flags": { "canMint": false, "canFreeze": false, "metadataMutable": true, "permanentDelegate": false, "transferFee": false, "transferHook": false, "concentratedHolders": false, "noLiquidPool": false, "thinLiquidity": false }}
Invalid addresses and addresses that aren't tokens produce an item with an error field instead.
Pricing
Pay per event: charged once per token snapshot that completes. Invalid addresses, non-token contracts and failed chain reads are not charged.
Good to know
- The score is rules-based and every point is explained in
reasons; it's a summary of the facts below it, not a prediction and not investment advice. - Owner-only functions on EVM tokens are detected from bytecode selectors: a strong signal, not proof that a function is callable. Read the verified source before relying on it.
- Solana holders are the 20 largest token accounts grouped by owner. "program" owners are pools,
vaults, bonding curves and lockers, which can't sell on their own; holder concentration counts
only wallets. If the holder lookup is unavailable,
holdersisnulland the score leaves it out.