chainpeek: detect a proxy contract and its implementation
detect_proxyCheck whether a contract is a proxy and identify its type by reading EIP-1967, EIP-1822, and legacy storage slots on Ethereum, Base, or Robinhood.
Instructions
chainpeek: detect whether a contract is a proxy, and of which kind. For code size and hash use get_contract_code. Reads the code, the EIP-1967 / EIP-1822 / OpenZeppelin legacy slots and slot 0, then one multicall. Returns is_contract, is_proxy, kind (eip1967_transparent | eip1967_uups | eip1967 | eip1967_beacon | eip1822_uups | oz_legacy | eip1167_minimal | erc7511_minimal | eip7702_delegation, or the multisig-wallet kind when slot 0 and masterCopy() agree), implementation (and whether it has code), admin, beacon and the raw slots. An upgradeable proxy's implementation can change after this read. A malformed or inconsistent node answer is a 5xx and is not charged. Typically 1-4 s. Price: USD 0.002. Free: 10 chain reads per IP per UTC day. Docs: https://tanod.dev/learn/proxy-contract-detection-api.html
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Chain to read. | |
| address | Yes | Contract address (0x + 40 hex). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| admin | No | ||
| chain | No | ||
| error | No | Only on an error result: an object {code, message}, or the reason string of an x402 PaymentRequired object. | |
| slots | No | ||
| beacon | No | ||
| address | No | ||
| is_proxy | No | ||
| patterns | No | ||
| rpc_calls | No | ||
| code_bytes | No | ||
| is_contract | No | ||
| implementation | No | ||
| implementation_has_code | No |