Contract Risk API

On-chain contract risk score: detects upgradeable proxies and privileged functions from live bytecode. Use before trading/interacting with an unfamiliar contract.

How the score works

Every scan reads the contract's live bytecode and the EIP-1967 proxy storage slot, then adds a weight for each risk signal it finds. The total is riskScore; riskLevel is just that total sorted into a band.

LevelScoreReading
low0–9No centralised-control signals found.
medium10–29Privileged functions or upgradeability present.
high30+Several powerful owner capabilities at once.
unknownNo code at this address (a wallet, or not deployed yet).

A high score is not proof of a scam, and a low score is not a safety guarantee. Plenty of legitimate tokens are pausable and mintable by design — the score tells you how much power the owner holds, so you can decide whether you trust whoever holds it.

What each signal adds

SignalWeight
Upgradeable proxy (EIP-1967 implementation slot is set)+10
owner()+5
transferOwnership(address)+5
mint(address,uint256)+15
pause()+10
blacklist(address)+20
setBlacklist(address,bool)+20
excludeFromFee(address)+5
setTaxFee(uint256)+15

Maximum possible score is 105. Function detection searches the bytecode for each function's dispatcher pattern, so it can under-report on heavily optimised or obfuscated contracts, and proxy detection currently only reads the EIP-1967 slot — contracts using older proxy layouts (USDC among them) are reported as isProxy: false. Treat this as one signal among several, not a verdict.

Response fields

riskLevel
Band from the table above: low, medium, high, or unknown.
riskScore
Sum of the weights of every signal found.
isContract
Whether the address has bytecode. False means a wallet or an undeployed address.
isProxy
Whether the EIP-1967 implementation slot is set, meaning an admin can swap the contract's logic.
flags
Each signal found, as a human-readable label and its weight.
address, chain
Echoed back so a stored result is self-describing.
note
Only present when there is no code to analyse.