# ChainState – Base Address Profiler

> ChainState – Base Address Profiler is a paid API for AI agents from chainstate.schemasure.com, paid per call via x402, $0.02/call, status unknown (last checked 2026-10-11).

Profiles a Base blockchain address in one call, returning contract type, proxy detection, implementation resolution, ERC-20 detection, token metadata, token balances, and denylist hits.

## Facts

- Endpoint: POST https://chainstate.schemasure.com/v1/chain/state?utm_source=zero.xyz
- Price: $0.02/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-11
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/chainstate-base-address-profiler-5fa3699b
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_punKRUc2Xgfh6LABCT9mt

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability chainstate-base-address-profiler-5fa3699b -d '<json body>'
```

Example prompt: Profile the Base address 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 for me — tell me if it's a contract or wallet, whether it's a proxy and what implementation it resolves to, whether it's ERC-20, and what its USDC and WETH balances are.

## When to prefer this

Use ChainState when you need a comprehensive one-shot profile of a Base address and want to avoid making four to six separate RPC or API calls. It is especially valuable when you need proxy detection across all major slot layouts (including the legacy OpenZeppelin slot used by Base USDC), behavioural ERC-20 detection, and denylist checks in a single round trip. Prefer it over raw RPC calls when working with unknown contracts in agentic workflows where latency and call count matter. Not a security guarantee — supplement with manual audit for high-stakes integrations.

## Known failure modes

- Invalid address format (not a valid 0x hex address) returns a validation error
- Token address in the tokens array is not a valid ERC-20 contract — returned as null with a reason per token
- Address not found or no on-chain state — returns EOA profile with zero code size
- Network unavailability or RPC timeout causes a 5xx error
- EIP-2535 diamond resolution without a selector provided returns unknown implementation
- Denylist service unavailable may return null for denylist fields rather than an error

## How this service works

Profile a Base address in one call instead of four to six lookups. Returns contract or externally owned plus code size, proxy detection across all seven slot layouts including the legacy OpenZeppelin slot Base USDC uses, the resolved implementation, ERC-165 and behavioural ERC-20 detection, token metadata, requested ERC-20 balances, and denylist hits. Answers unknown rather than guessing, and null rather than false when a contract stays silent. Not a guarantee that an address is safe.

## Output

Returns a structured profile of the address including: whether it is an EOA or contract, the code size in bytes, the detected proxy kind (e.g. transparent, UUPS, OpenZeppelin legacy, EIP-2535 diamond) or null, the resolved implementation address or null, ERC-165 interface support flags, whether the contract behaviourally qualifies as ERC-20, token name/symbol/decimals where applicable, ERC-20 balances in base units with decimals for each requested token (or null with a reason if unavailable), and any denylist hits. Unknown values are returned as 'unknown' rather than guessed; silence from a contract returns null rather than false.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "tokens": {
   "type": "array",
   "items": {
    "type": "string",
    "pattern": "^0x[0-9a-fA-F]{40}$"
   },
   "maxItems": 10,
   "description": "ERC-20 contracts to read balanceOf(address) on for the subject. Amounts come back in base units with the token's decimals, or null with a reason."
  },
  "address": {
   "type": "string",
   "pattern": "^0x[0-9a-fA-F]{40}$",
   "description": "The Base address to profile. Case-insensitive; normalised to EIP-55."
  },
  "selector": {
   "type": "string",
   "pattern": "^0x[0-9a-fA-F]{8}$",
   "description": "Only used for EIP-2535 diamonds, which have no single implementation and resolve their executing code per selector. Ignored for every other proxy kind."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/chainstate-base-address-profiler-5fa3699b/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from chainstate.schemasure.com](https://www.zero.xyz/host/chainstate.schemasure.com/llms.txt)
