Contracts & chains
A contract is the root object in IMAA. Everything else — monitor targets, alert rules, alert events — hangs off it. Each contract is pinned to a single chain and identified by its on-chain address (or, on Solana, its program address).
Supported chains
The chain picker on the add-contract screen always shows the authoritative, live list — the currently enabled chains are:
| Chain | Chain ID |
|---|---|
| Ethereum | 1 |
| Optimism | 10 |
| BNB Smart Chain | 56 |
| Gnosis | 100 |
| Polygon | 137 |
| Fantom | 250 |
| zkSync Era | 324 |
| Base | 8453 |
| Arbitrum One | 42161 |
| Avalanche C-Chain | 43114 |
| Linea | 59144 |
| Scroll | 534352 |
| Solana (non-EVM) | 900 |
More chains land regularly. If a specific EVM-compatible chain is blocking you, get in touch.
How contract inspection works
On EVM chains, IMAA needs the contract's ABI in order to decode events and function calls. The fetch order is:
- Sourcify — checked first because it stores verified source from the original deployer and is fully open.
- Etherscan V2 (multi-chain) — fallback for chains and contracts that aren't in Sourcify yet.
The ABI is an enrichment, not a gate: a contract with no ABI can still be monitored with generic targets such as tx_rate or latency_proxy. What drives the pending → monitoring transition is whether the contract has at least one enabled monitor target, not whether an ABI was found — an ABI simply makes event- and function-level targets available. On Solana, IMAA reads the program's on-chain Anchor IDL where one is published, or you can paste an IDL at add time.
Contract states
pending— created but has no enabled monitor target yet. No polling happens here; add a target to move it tomonitoring.monitoring— at least one enabled monitor target, polling on schedule.paused— manually paused from the UI or API. No polling, no alerts.error— automatically set after 5 consecutive poll failures (RPC errors, decoder failures, or rate limits that didn't recover). Resume from the contract detail page once the underlying issue is fixed.
You can move a contract through these states from the contract detail page or via the public API.