RHCHECK

Methodology

How the Risk Score and Analysis Coverage are calculated, where every figure comes from, and — just as importantly — what this score does not and cannot guarantee.

What the Risk Score is

A 0–100 estimate of verifiable risk signals, not a safety rating.

Every RHCHECK report is built from a fixed set of independently justified findings. Each finding has a severity, a confidence level, a description, a piece of evidence, a named data source, and a point value ("score impact"). The Risk Score is the sum of every triggered finding's score impact, clamped between 0 and 100.

0 means the lowest risk RHCHECK is capable of observing — not that a token is safe. 100 means the highest risk RHCHECK is capable of observing from the rules below. A token with no on-chain risk indicators still carries real market and execution risk that no automated tool can measure.

Scoring rules

The exact rules applied in this MVP.

RuleScore impact
Source code not verified+20
Upgradeable proxy contract+10
Proxy implementation not verified (additional, if proxy)+10
Mint authority detected (owner/role can increase supply)+25
Blacklist function detected+20
Pause / halt-transfers authority detected+15
Fee/tax changeable by a privileged account+20
Max transaction/wallet limit changeable+10
Largest independent holder > 20% of supply+20
Top 10 independent holders > 50% of supply+20
Top 10 independent holders 30–50% of supply+10
No trading pair found on DexScreener+20
Liquidity below $10,000+20
Liquidity between $10,000 and $50,000+10
Primary liquidity pool younger than 24 hours+10
Deployer created 3–4 contracts within 24 hours+10
Deployer created 5+ contracts within 24 hours+20
Liquidity pool (LP) tokens held by a regular wallet, not locked or burned+20
LP tokens held by an unlabeled contract (lock status unconfirmed)+5
Deployer reused identical contract bytecode on 1–2 other deployments+15
Deployer reused identical contract bytecode on 3+ other deployments+25

Ownership not being renounced is never scored on its own. It is only surfaced as contextual information when the contract also has one of the strong owner powers above (mint, blacklist, pause, or fee-change), to clarify that those powers are currently exercisable rather than purely theoretical.

Analysis Coverage

A separate 0–100% figure showing how much of the analysis could actually be verified.

Coverage is tracked independently of the Risk Score. It counts how many of ~14 checkpoints across contract verification, holder data, liquidity data, liquidity lock status, and deployer history returned real, usable data instead of "Unknown." A token can have a low Risk Score and low coverage at the same time — that combination means "little was found wrong, but also little could be verified," which is very different from a token with high coverage and a low score.

Data sources

  • Blockscout (robinhoodchain.blockscout.com) — contract verification status, ABI, source code, compiler metadata, proxy detection, token metadata, holder balances, and creator/deployer information. All requests happen server-side against Blockscout's public v2 REST API.
  • DexScreener — price, liquidity, market cap/FDV, 24h volume and buy/sell counts, pair creation date, and DEX identity, queried by the Robinhood Chain slug configured in DEXSCREENER_CHAIN_ID.
  • Robinhood Chain RPC — direct, read-only calls used only as a cross-check: confirming bytecode exists, reading owner() when present, reading the EIP-1967 proxy implementation storage slot when Blockscout doesn't already report it, and fetching deployed bytecode for bytecode-reuse comparison.

Liquidity lock detection

Whether the pool backing this token's liquidity can be unilaterally withdrawn.

RHCHECK first classifies the primary pool's AMM design from DexScreener labels (and, for Uniswap V4, from the 32-byte pool id shape), then runs the matching custody check:

  • Uniswap V2-style: the pair contract is an ERC-20 LP token. RHCHECK looks up LP token holders and classifies the largest holder as burned, labeled/known locker, unlabeled contract, or regular wallet.
  • Uniswap V3: liquidity is an NFT position. RHCHECK reads pool Mint events, resolves the largest mint transactions to NonfungiblePositionManager token ids, then checks current ownerOf — including known permanent lockers such as PonsLaunchLocker.
  • Uniswap V4: liquidity lives in a shared PoolManager under a pool id. RHCHECK reads ModifyLiquidity events for that id, resolves the largest adds to PositionManager NFTs, then checks current owners (including known UniswapV4LiquidityLocker contracts).

V3/V4 checks sample the largest liquidity-add transactions (not every historical mint) for scan latency, so they are best-effort. An unlabeled contract is never assumed to be a locker without a label or a known locker address.

Deployer bytecode reuse (clone detection)

Whether this deployer redeployed byte-identical contract logic under a different token.

RHCHECK fetches the deployed (runtime) bytecode of up to 5 other contracts recently created by the same deployer and compares it byte-for-byte against this contract's bytecode. An exact match means the same underlying logic was redeployed under a different name, symbol, or marketing — a pattern commonly seen in mass-produced token launches. This is exact string comparison, not a similarity heuristic, so it never reports a match that isn't genuinely identical. It is bounded to the 5 most recent sibling contracts for scan performance, so a deployer with many more contracts than that may have additional undetected reuse.

How permission detection works

RHCHECK never infers a capability from a function name alone. A detection requires (1) a matching function actually present in the verified ABI, with the correct mutability (e.g. a real state-changing mint(), not just the word "mint" appearing in a comment or an internal OpenZeppelin _mint call that is never exposed externally), and (2) the verified source code is inspected for an access-control modifier (like onlyOwner or onlyRole(MINTER_ROLE)) on that exact function. If a modifier can't be found, the finding is still shown, but its confidence is lowered and the report says so explicitly rather than asserting who can call it. If the contract's source is not verified at all, none of these checks run — permissions are reported as Unknown, never as absent.

Known limitations

  • This is not a honeypot simulator — RHCHECK does not simulate buy/sell transactions.
  • Holder concentration only excludes addresses RHCHECK can confidently identify (the token contract, burn/zero addresses, and pools confirmed via DexScreener, or contracts explicitly labeled by the explorer). Unlabeled contract holders are not assumed to be infrastructure and are counted as independent holders.
  • Deployer history is limited to what is derivable from public transaction history in this MVP. Tokens launched through a factory/launcher contract show the end-user account that triggered the launch, but full multi-hop attribution across unrelated wallets is out of scope.
  • Analysis only covers the top holders returned by Blockscout's paginated holder endpoint, not the full holder list for tokens with very large holder counts.
  • Only one chain — Robinhood Chain mainnet (chain ID 4663) — is supported.
  • This score reflects a fixed rule set. It is not a machine-learning prediction and does not update retroactively for new attack patterns without a code change.

This is not a safety guarantee.

RHCHECK does not label any token as "safe" or "a scam." This report only reflects risk signals that could be verified from public on-chain data and the sources listed above at the time of the scan. Missing or unverifiable data is shown as Unknown and is treated as a risk factor, never as a safe default. Always do your own research before interacting with any token.

RHCHECK is an independent analytics tool and is not affiliated with or endorsed by Robinhood. Risk reports are informational only and do not constitute financial advice.