Method
How a report is computed.
Everything on a report comes from Robinhood Chain (chain id 4663) through public JSON-RPC. There is no model, no estimate, no external data vendor. The same chain state gives the same report.
Sources
- Launch record: the pons v2 factory's
TokenLaunched(token, curve, deployer, pairToken, launchConfigId, graduationThreshold)event, queried by the indexed token topic (or from the local index). - Curve state:
getReserves(),realQuoteReserve(),graduationThreshold(),readyToGraduate(),creatorTaxBps(),phantomQuote(),quoteFeeBalance()on the curve, in one multicall. - Price: quote reserve ÷ token reserve (pair units per token). Market cap = price × totalSupply. USD only when a trustworthy source exists: the Chainlink ETH/USD feed at
0x78F3…d3A9for ETH pairs, the per-stock Chainlink feeds for Robinhood Stock Token pairs (feed age shown), and a labelled 1:1 assumption for USDG. Other pairs show no USD. - Tape: every
CurveBuyandCurveSelllog on the curve since the launch block. - Holders: every ERC-20
Transferlog on the token since launch, replayed into balances. The set is marked unverified if the balances do not sum tototalSupply. - Deployer:
TokenLaunchedfiltered by the deployer topic across the factory's lifetime (from block 27,000,000), andLaunchSweptfor those tokens. - Graduation: a
LaunchSweptevent for the token.
Definitions
- Circulating: totalSupply − curve balance − burned (0x0 and 0x…dEaD).
- Quote in: sum of
quoteInacross buys, in the pair asset. - Snipe window: 50 blocks (~5 s at 0.1 s/block), the same span as pons's decaying snipe tax.
- Deployer sold: a Transfer from the deployer to the curve. A transfer to any other wallet is a move, not a sell, and is not flagged.
Flags
| Code | Severity | Condition |
|---|---|---|
| SNIPE_CLUSTER | warning | ≥3 buys landed within 50 blocks (~5 s) of the launch block and those buys are ≥30% of all quote ever bought in. Evidence: the buy transactions. |
| SINGLE_WALLET_DOMINANCE | warning | With ≥3 buys on the tape, one wallet's buys are ≥50% of all quote bought in. |
| DEPLOYER_SOLD | warning | The launching wallet transferred tokens to the curve (a sell) at least once. Evidence: those transfers. |
| DEPLOYER_SERIAL | warning | The launching wallet has ≥5 launches in the last 24 h or ≥15 in the last 7 days on the pons v2 factory. |
| SYMBOL_COLLISION (warning) | warning | At least one indexed launch that graduated uses the same symbol (case-insensitive). |
| SYMBOL_COLLISION (notice) | notice | ≥3 other indexed launches use the same symbol and none graduated. |
| COORDINATED_WALLETS | notice / warning | ≥3 wallets linked by same-transaction buys, identical buy amounts within ~1 min of launch, or token transfers between them (warning when the linked wallets bought ≥40% of quote in). A heuristic from public data, not a funding-source trace. |
| HOLDER_CONCENTRATION | notice | With ≥3 holders and reconciled balances, the top 10 wallets hold ≥70% of circulating supply (supply outside the curve, burns excluded). |
| DEPLOYER_HOLDS_LARGE | notice | The deployer holds ≥20% of circulating supply and has not sold. |
| DEPLOYER_LOW_GRADUATION | notice | The deployer has ≥10 launches on record and none graduated. |
| SELL_ONLY_TAPE | notice | The last 5 or more trades were all sells, on a tape of ≥6 trades. |
| ROUND_TRIPPING | notice | ≥2 wallets each bought at least twice and sold at least twice. |
| THIN_TAPE | notice | ≤6 trades from ≤3 wallets. |
| NO_TRADES | notice | No CurveBuy or CurveSell events since launch. |
| PARTIAL_DATA | notice | An RPC budget (calls or logs) was hit while reading trades, transfers or the deployer record. Affected figures are lower bounds. |
| NEAR_GRADUATION | info | Real quote reserve is ≥80% of the graduation threshold. |
| GRADUATED | info | A LaunchSwept event exists for the token. |
| BOND_ACTIVE / BOND_SLASHED | info / warning | The deployer has an active, or a slashed, commitment bond on the AssayBond contract (when deployed). |
Limits: what a report cannot tell you
- Intent. A snipe cluster can be bots or friends; round-tripping can be market making or washing. The tape shows what happened, not why.
- Wallet links. Clusters come from behaviour visible on this token (batch buys, lockstep amounts, hand-offs), not from a funding-source trace. Ten wallets can still be one person without leaving any of those marks.
- After graduation. Price and market cap come from the locked Uniswap v4 pool (PoolManager
0x8366…0951, slot0 read throughextsload); the pool's swap count and volume are read from its Swap events. Curve figures stay as final values at sweep. - Coverage. The index backfills the factory's whole history in the background; until that finishes, symbol collisions and deployer records for older launches are read from the chain within budgets and may be partial.
/api/healthshows the backfill progress. - Budgets. Public RPCs cap log queries at 10,000 results and rate-limit bursts. When a budget is hit the report says so (PARTIAL_DATA) and the figures are lower bounds.
- Freshness. Reports are cached for 20 s on the curve and 5 min after graduation. The block number on every report is the truth about when it was read.
- No safety rating. “No flags raised” is a statement about the listed conditions at one block. It is not a recommendation.
Reproduce it
The analysis functions are pure and live in src/lib/assay/. Fetch the same logs with any RPC client, replay them through analyzeTape, analyzeHolders and deriveFlags, and you get the same report.