Skip to content

Contract Inspector

Paste a contract address. Get its resolved proxy chain and full method schema, with each method's execution target and ABI source, in one read.

EthereumBaseBNB Smart Chainno signup · no wallet connect · free

Result

Fill in the form above and click "Inspect contract" to see its proxy chain and method schema here.

What this tool does

The Contract Inspector reads any contract address and returns two things: its resolved proxy chain and its full method schema. It is built for developers and integrators who need to know what they are actually calling before they write an ABI file or wire up an integration — whether an address is a proxy, what implementation it points to, and which methods are actually callable.

Key facts

  • Resolves both a contract’s proxy chain (EIP-1967, UUPS, Beacon, Diamond, Gnosis Safe, and more) and its full callable method schema in one server-side read.
  • Each resolved method reports executesAt, the address its logic actually runs on, and source, tracing ABI resolution from verified source (Sourcify, Etherscan) down through code-reuse matching, metadata-IPFS, known interfaces, and signature databases (OpenChain, 4byte, evmole).
  • EIP-2535 diamond contracts, which spread logic across many facet contracts, get flattened into one filterable method list.
  • Covers Ethereum, Base, and BNB Smart Chain, with more EVM chains being added.

How to use it

  1. Paste the contract address into the form above.
  2. Pick the chain the contract is deployed to.
  3. Run the query and read the proxy chain and method schema in the result panel.

The proxy chain panel shows the address you pasted, followed by each resolved hop and the pattern it matched, ending at the implementation the calls actually execute on. If the address is not a proxy, the panel says so directly and calls execute on the address you pasted. The method schema panel lists every resolved method with its inputs, outputs, the address it executes on, and where its ABI came from. A raw JSON toggle at the bottom shows the full response for debugging.

What is happening under the hood

Most non-trivial contracts on Ethereum are proxies: a thin contract that forwards every call to an implementation address it can upgrade independently. Reading a proxy’s own bytecode tells you almost nothing about what it does — you have to resolve the proxy pattern, follow it to the implementation, and pull the ABI from there. evmquery does this resolution server-side with the resolution include on POST /query/describe.

POST /query/describe
{
"chain": "evm_ethereum",
"schema": { "contracts": { "target": { "address": "0x..." } } },
"include": ["resolution"]
}
  • The response is a schema object listing every contract you asked about, each annotated with a resolution extension.
  • A contract’s resolution.route is an ordered list of hops. Each hop has a kindeip1967 and eip1967-beacon for the two most common transparent/beacon proxy standards, plus eip1822 (UUPS), eip1167 (minimal proxies), zeppelinos (OpenZeppelin’s legacy proxy), gnosis-safe, eip2535-diamond (multi-facet diamonds), eip7702-delegation, and generic getter/beacon-implementation hops — and a to address, the contract the call is forwarded to at that hop. An empty route means the address is not a proxy: calls execute directly on it.
  • Each method in the schema carries its own resolution extension with executesAt (the address that method’s logic actually runs on, which is the end of the proxy chain for proxied contracts) and source, where its ABI was resolved from.
  • ABI resolution tries verified source first (sourcify, etherscan), then falls back through code-reuse (matching known bytecode), metadata-ipfs, known-interface, and signature databases (openchain, fourbyte, evmole) when no verified source exists.
  • Diamond contracts (EIP-2535) can expose methods across many facets. The schema flattens all of them into one method list, which is why the result panel includes a text filter.

Build this yourself

Each of the snippets below makes the same POST call to the evmquery REST API. The example targets USDC’s proxy contract on Ethereum, a legacy OpenZeppelin (zeppelinos) proxy, not an EIP-1967 one.

REST (curl)

curl -X POST https://api.evmquery.com/api/v1/query/describe \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"chain": "evm_ethereum",
"schema": {
"contracts": { "target": { "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" } }
},
"include": ["resolution"]
}'

Python

import requests
resp = requests.post(
"https://api.evmquery.com/api/v1/query/describe",
headers={"x-api-key": "YOUR_API_KEY"},
json={
"chain": "evm_ethereum",
"schema": {
"contracts": {"target": {"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"}},
},
"include": ["resolution"],
},
timeout=10,
)
print(resp.json())

TypeScript

const resp = await fetch("https://api.evmquery.com/api/v1/query/describe", {
method: "POST",
headers: {
"x-api-key": process.env.EVMQUERY_API_KEY!,
"Content-Type": "application/json",
},
body: JSON.stringify({
chain: "evm_ethereum",
schema: {
contracts: { target: { address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" } },
},
include: ["resolution"],
}),
});
const schema = await resp.json();

The free tier has no monthly cap. Get a free API key to drop these snippets into your project.

When you would use this

  • Before writing an ABI by hand. Confirm which address a contract’s calls actually execute on and what methods are really available before you hardcode an interface.
  • Auditing an unfamiliar integration. Check whether a contract you are about to interact with is a proxy, and if so, what pattern it uses and where it points.
  • Debugging a failed call. If a call to a proxy address behaves unexpectedly, the resolved method schema shows exactly which implementation address is handling it.
  • Exploring diamond contracts. EIP-2535 diamonds spread their logic across many facets. The flattened, filterable method list makes it possible to see everything a diamond exposes in one place.

FAQ

What does the Contract Inspector actually detect?

It resolves the contract’s proxy route, if any, and its method schema. For each method it reports the address the call actually executes on and the source the ABI was resolved from. It does not decode storage slots, estimate gas, or run a security audit.

What proxy patterns are recognized?

EIP-1967 transparent and beacon proxies, EIP-1822 (UUPS), EIP-1167 minimal proxies, EIP-2535 diamonds, Gnosis Safe, OpenZeppelin’s legacy zOS proxies, EIP-7702 delegations, and generic getter-based proxies. If a contract matches none of these, calls execute directly on the address you pasted.

Where does the ABI come from?

evmquery resolves each method’s ABI from verified source where available (sourcify, etherscan), then falls back to code-reuse against known bytecode, metadata-ipfs, known-interface matching, and signature databases (openchain, fourbyte, evmole) when no verified source exists. The Inspector shows the source for every method so you know how much to trust it.

Which chains are supported?

Ethereum, Base, and BNB Smart Chain today. More EVM chains are being added on the evmquery backend.

Why does the read fail for some addresses?

If the address has no deployed bytecode, or the contract’s proxy pattern is not one evmquery recognizes, resolution can be incomplete. The proxy chain panel will show an empty route rather than fail outright, but method resolution for unusual or unverified contracts can be partial.

Can I use this from my own application?

Yes. The same request works against the public REST API. The free tier has no monthly cap. Bring your own API key and the rate limit applied to this page no longer applies.

Limits and accuracy

  • The result reflects the contract’s current on-chain state at the time of the read. Proxies can be upgraded after the fact, so a route resolved today may point somewhere else tomorrow.
  • The demo is rate limited per browser. If you hit the limit, grab a free API key and the limit goes away.

This is schema and routing information, not a security audit. A resolved implementation address does not imply the contract is safe to interact with.

Run this query in your own code

No monthly cap on the free tier. No credit card needed.