{"x402Version":2,"resources":[{"url":"https://oracle.futureus.win/api/assess-token-risk","method":"POST","description":"EVM token and smart contract risk oracle. Returns a structured, explainable risk report for any contract address across 60+ EVM chains (Ethereum, Base, Arbitrum, Polygon, BSC, Optimism). Detects proxy contracts (EIP-1967/1822/1167/beacon), introspects implementation ABIs for mint/blacklist/pause/fee capabilities, analyzes transfer-path logic for honeypot and sell-restriction patterns by effect not name, verifies LP burn/lock status, checks deployer/owner concentration, flags burned-LP honeypot traps, and detects Uniswap V4 pool hooks — identifying swap-skimming, liquidity-trapping, and sell-blocking hook capabilities from address permission flags and source analysis. Four-band transparent score (low/medium/high/extreme) with dispositive critical flags for holder-harm mechanisms. Read-only, no wallet required. Factual signals and heuristics, not financial advice.","serviceName":"EVM Contract Risk Oracle","tags":["evm","risk","security","token","oracle"],"accepts":[{"scheme":"exact","price":"$0.10","network":"eip155:8453","payTo":"0xBaB300665fFdac6e73225C5dFbD8e32EbB9d2D6d"}],"inputSchema":{"type":"object","properties":{"address":{"type":"string","description":"0x-prefixed EVM contract address to assess."},"chainId":{"type":"number","description":"EVM chain id (required, no default). e.g. 1, 8453, 10, 56."}},"required":["address","chainId"]},"outputSchema":{"type":"object","description":"Full risk report for the assessed contract. This schema is the complete response contract — every field a successful paid call can return is described here. The same declaration is mirrored in the discovery manifest at GET /.well-known/x402.json. Optional fields are omitted when the corresponding signal could not be gathered (e.g. unverified source, unsupported chain).","required":["address","chainId","isContract","verified","proxy","ownership","proxyFunctions","implementationFunctions","riskyFunctions","flags","score","sources"],"properties":{"address":{"type":"string","description":"Checksummed contract address that was assessed."},"chainId":{"type":"number","description":"EVM chain id the address was assessed on."},"isContract":{"type":"boolean","description":"False when the address has no deployed bytecode (an EOA)."},"verified":{"type":"boolean","description":"True when the explorer has verified source code for the address."},"contractName":{"type":"string","description":"Explorer contract name, when source is verified."},"proxy":{"type":"object","description":"Proxy resolution result. When isProxy is true, the risky-function analysis targets the implementation.","required":["isProxy"],"properties":{"isProxy":{"type":"boolean"},"standard":{"type":"string","enum":["EIP-1967","OZ-legacy","EIP-1822","EIP-1167","beacon","explorer","unknown"],"description":"How the implementation was resolved (or what flagged it as a proxy)."},"implementation":{"type":"string","description":"Resolved implementation address (the code that actually runs)."},"admin":{"type":"string","description":"Upgrade controller (EIP-1967 admin slot)."},"adminOwner":{"type":"string","description":"For OZ ProxyAdmin patterns: the EOA/contract that owns the admin."},"beacon":{"type":"string","description":"Beacon contract address, for beacon proxies."}}},"ownership":{"type":"object","description":"Owner/admin status from the contract's ownership surface.","required":["ownerFound","renounced"],"properties":{"ownerFound":{"type":"boolean"},"owner":{"type":"string","description":"Current owner address, when discoverable."},"renounced":{"type":"boolean","description":"True when ownership is renounced (owner is the zero/dead address)."}}},"erc20":{"type":"object","description":"ERC-20 metadata from live chain reads, when the contract exposes it.","required":["name","symbol","decimals","totalSupply"],"properties":{"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"number"},"totalSupply":{"type":"string","description":"Raw total supply as a decimal string (not decimal-adjusted)."}}},"proxyFunctions":{"type":"array","items":{"type":"string"},"description":"Upgrade surface exposed on the proxy's own ABI (e.g. upgradeTo, changeAdmin)."},"implementationFunctions":{"type":"array","items":{"type":"string"},"description":"Risky functions on the resolved implementation (the real powers)."},"riskyFunctions":{"type":"array","items":{"type":"string"},"description":"Effective risky set: the implementation's when a proxy, else the contract's own (mint/blacklist/pause/fee/...)."},"creation":{"type":"object","description":"Deployment provenance from the explorer.","properties":{"deployer":{"type":"string"},"creationTxHash":{"type":"string"}}},"onchain":{"type":"object","description":"On-chain depth that works even for unverified tokens (no source required).","properties":{"ageDays":{"type":"number","description":"Age of the contract in days, when the creation block is known."},"deployer":{"type":"string"},"concentration":{"type":"array","description":"Privileged/known holders' share of supply (excludes the LP pair and burn addresses).","items":{"type":"object","required":["label","address","pct"],"properties":{"label":{"type":"string","description":"e.g. deployer | owner | contract."},"address":{"type":"string"},"pct":{"type":"number","description":"Share of total supply, 0..100."}}}},"lp":{"type":"object","description":"DEX-pair LP-lock status, when a UniV2-style pair is resolvable.","required":["dex","pair","burnedPct","ownerHeldPct","otherPct","status"],"properties":{"dex":{"type":"string"},"pair":{"type":"string"},"burnedPct":{"type":"number","description":"LP sent to the zero/dead address."},"ownerHeldPct":{"type":"number","description":"LP held by deployer/owner (rug-capable)."},"otherPct":{"type":"number","description":"LP held elsewhere (possible locker / other holders)."},"status":{"type":"string","enum":["burned","owner-held","distributed-or-locked","no-liquidity"]}}},"lpNote":{"type":"string","description":"Why LP couldn't be assessed (unsupported DEX/chain), if applicable."}}},"v4Hooks":{"type":"object","description":"Uniswap V4 pool hook detection: identifies hooks attached to the token's V4 pools and flags swap-skim, liquidity-trap, and sell-block capabilities. Absent when V4 wasn't assessed.","required":["found"],"properties":{"found":{"type":"boolean","description":"True only when at least one V4 pool for the token was found."},"discovery":{"type":"string","enum":["subgraph","getLogs-full","getLogs-chunked"],"description":"How pools were discovered (subgraph fast-path vs eth_getLogs fallback)."},"incomplete":{"type":"boolean","description":"True when discovery was capped (chunked getLogs hit its chunk limit)."},"poolManager":{"type":"string","description":"PoolManager address scanned, set once V4 is supported on this chain."},"poolCount":{"type":"number","description":"Total V4 pools discovered for the token."},"hooks":{"type":"array","description":"Unique non-zero hook contracts across those pools.","items":{"type":"object","required":["address","permissions","poolCount"],"properties":{"address":{"type":"string","description":"Hook contract address (low 14 bits encode its permissions)."},"permissions":{"type":"array","items":{"type":"string"},"description":"Decoded permission flags the address advertises (e.g. beforeSwap)."},"poolCount":{"type":"number","description":"Number of the token's V4 pools that use this hook."},"isContract":{"type":"boolean","description":"Is the hook a deployed contract? (omitted = RPC read failed)"},"verified":{"type":"boolean","description":"Source verified on the explorer? (omitted = not looked up)"},"name":{"type":"string","description":"Explorer contract name, if available."}}}},"hasHooklessPools":{"type":"boolean","description":"True when at least one pool uses the zero-address (no) hook."},"note":{"type":"string","description":"Why V4 wasn't (fully) assessed — unsupported chain or RPC getLogs failure."}}},"flags":{"type":"array","description":"Explanatory risk signals that drove the score.","items":{"type":"object","required":["id","severity","message"],"properties":{"id":{"type":"string","description":"Stable flag identifier."},"severity":{"type":"string","enum":["info","warn","high","critical"]},"message":{"type":"string","description":"Human-readable explanation of the signal."}}}},"score":{"type":"object","description":"Transparent four-band score. `extreme` is reached only via a dispositive critical flag, never additive score alone.","required":["value","band","dispositive","dispositiveFlags","note"],"properties":{"value":{"type":"number","description":"Additive numeric risk score."},"band":{"type":"string","enum":["low","medium","high","extreme"]},"dispositive":{"type":"boolean","description":"True when the band was forced by a critical flag, not the additive sum."},"dispositiveFlags":{"type":"array","items":{"type":"string"},"description":"Ids of the critical flags that forced the band, when dispositive."},"note":{"type":"string","description":"Short explanation of how the band was reached."}}},"sources":{"type":"array","items":{"type":"string"},"description":"Data sources consulted for this report (explorer/RPC/subgraph calls)."}}}}]}