Importing Contracts from a Wallet
Wallet discovery is the fastest way to get 10+ contracts under monitoring. Paste a wallet or Safe address, and IMAA scans on-chain for the contracts connected to it: ones the wallet deployed, contracts it has interacted with, tokens it holds, and contracts it has granted approvals to. You pick which ones to import.
It's a paid feature — available from Starter up. Free tier sees an upgrade prompt from the contracts page.
When to use it
- Onboarding a protocol's Gnosis Safe or multisig — get all deployed/admin contracts in one pass
- Onboarding a Safe or deployer wallet — discover everything it deployed or controls in one pass. (Migrating an OpenZeppelin Defender Sentinel fleet specifically? Use the dedicated Defender importer, which reads your Sentinel export directly.)
- Auditing a wallet you don't fully trust — see what it's connected to
- DeFi position monitoring — token holdings and approvals surface automatically
How it works
- Go to Contracts and click Import from wallet.
- Paste the EVM address (0x-prefixed, 40 hex chars). Checksummed input is fine.
- Pick chains to scan. Starter and Pro scan 1 chain per run, Team 5, Enterprise unlimited.
- Click Discover — the scan typically takes 30–90 seconds.
- Results come back grouped by category. Tick the contracts you want, optionally leave "Attach default monitoring targets" on, and click Import.
You can close the progress modal while a scan is running — the job keeps going server-side and you can check it from the history page.
Categories
| Category | What it means |
|---|---|
| Deployed | Contracts this wallet created (direct CREATE or factory CREATE/CREATE2). Highest signal — you probably care about these the most. |
| Interacted | Contracts the wallet has called, with per-contract transaction counts. Useful for finding protocols the wallet uses — e.g. Uniswap Router if it's a trading wallet. |
| Approved | Token contracts the wallet has granted Approval or ApprovalForAll to, within the last 90 days. Worth monitoring if you hold a position that depends on an approval not being drained. |
| Tokens | ERC-20 / ERC-721 tokens the wallet currently holds (a non-zero balanceOf — tokens it has fully sold out of are dropped), plus ERC-1155 contracts it has transfer history with. Symbol and name come from the token contract. |
| Referencing | Heuristic — contracts whose owner() or DEFAULT_ADMIN_ROLE points at this wallet. Disabled by default; ops can enable via config flag. |
Tier limits
| Plan | Discoveries / month | Chains per run |
|---|---|---|
| Free | 0 | — |
| Starter | 2 | 1 |
| Pro | 10 | 1 |
| Team | 50 | 5 |
| Enterprise | Unlimited | Unlimited |
Re-running the same wallet+chain within an hour returns cached results — that doesn't burn a discovery from your monthly quota. Fresh results require either a different chain, a new wallet, or an hour of patience.
What gets imported
For each selected contract, IMAA dedupes against your existing contracts (already-monitored entries are skipped, not re-imported), fetches the ABI from Sourcify or Etherscan, and creates a Contract row owned by your org.
With Attach default monitoring targets ticked, the import wires category- appropriate monitor targets:
- Deployed / Referencing:
tx_rate+anomaly_detection - Interacted / Token / Approved:
tx_rate
No alert rules are created automatically in v1 — set those up from each contract's detail page once the import completes.
Limits & caveats
- EVM only. Solana wallet discovery is a separate feature on the roadmap — the chain selector filters Solana out.
- Max 10,000 transactions scanned per wallet. Very active wallets (CEX hot wallets, public infrastructure) may hit this cap and return partial results. Typical protocol Safes or deployer EOAs fit comfortably inside.
- Max 500 results per category. Prevents runaway responses.
- Max 100 contracts per import. Run the import twice if you need more.
- Per-org rate limit: 3 discoveries per minute. Shared across everyone on the org.
Security notes
- Don't import random wallets just to browse their history — each import creates Contract rows that show up on your dashboard and count toward your
max_contractslimit. - Contracts imported this way are treated like any other — they poll on your organisation's polling interval and use your org's notification channels.
- Every discovery lifecycle event is logged to the admin audit log (started / completed / failed / imported with contract IDs).
API reference
See the public API reference for programmatic use. The three endpoints are POST /wallet-discoveries, GET /wallet-discoveries/{id} (poll every 2 seconds until status is terminal), and POST /wallet-discoveries/{id}/import.