On-chain contract risk score: detects upgradeable proxies and privileged functions from live bytecode. Use before trading/interacting with an unfamiliar contract.
scan and full modes)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.
| Level | Score | Reading |
|---|---|---|
| low | 0–9 | No centralised-control signals found. |
| medium | 10–29 | Privileged functions or upgradeability present. |
| high | 30+ | Several powerful owner capabilities at once. |
| unknown | — | No code at this address (a wallet, or not deployed yet). |
| Signal | Weight |
|---|---|
| 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 |
alert and full modes)Scrapes the public preview of 10 crypto Telegram channels — security-alert feeds, whale trackers, and ecosystem news — and counts how many times the queried address or ticker appears in each. Results are categorized by keyword:
| Category | What it flags |
|---|---|
securityAlert | hack, exploit, rug, drain, vulnerable, attack, phish, compromised, stolen, malicious, blacklist, frozen |
whaleMovement | minted, burned, transferred, whale, moved, deposit, withdraw |
listing | listed, listing, launch, upgrade, integration, partnership |
other | Mentions that matched none of the above |
Read alertMentions as a live snapshot, not a
historical record. It counts appearances in the current rolling
window — the last 30 messages of each channel, cached for 5 minutes
(15 for low-volume security feeds). securityAlert: 0 means
no security-channel mentions in this window, not
“never flagged.” A contract exploited yesterday, before the
window rolled, will show zero. Absence of alerts is not a safety
guarantee. lastCheckedAt reports the scan timestamp so a
caller can reason about freshness.
full mode)Returns both signals in one response, running the bytecode fetch and
the channel scrape in parallel — so latency is the slower of the two,
not the sum. It is also cheaper than calling scan and
alert separately. The two signals are worth more together
than either alone: a contract with powerful owner functions that is
also being flagged in a security channel is a different situation
from either signal on its own.
riskLevelriskScoreisContractisProxyflagslabel and its weight.alertMentionscategorieschannelssampleslastCheckedAtnoteaddress, chain