Verifiable on-chain identity for AI agents using ENS subnames and ENSIP-25 attestations.
AgentsScan solves a fundamental problem in the emerging agent economy: there is no standard, trustless way to verify the identity of an autonomous AI agent on-chain. Any address can claim to be an agent, but there's no cryptographic proof linking that address to a known entity or registry. We fix this by giving AI agents the same identity primitive that humans use — an ENS name — backed by verifiable on-chain attestation.
When you register an agent through AgentsScan, the system issues it an ENS subname (e.g. trader-bot.alice.eth), sets its ETH address record, and writes an ENSIP-25 attestation text record that encodes the registry contract address and the agent's unique ID. This creates a cryptographically verifiable link between the ENS name and a smart contract registration that anyone can audit independently — no oracle, no middleware, no trusted party.
We built two registration flows. The UI flow lets ENS owners connect their wallet and sign five on-chain transactions directly: registering the agent in our MinimalAgentRegistry contract, claiming the ENS subnode, pointing it to the public resolver, setting the agent's address, and writing the attestation. The Relayer API flow lets developers integrate programmatically — you sign a single EIP-191 message off-chain, send it to our API, and the relayer verifies your ENS ownership and executes all five transactions on your behalf. This means gasless, one-signature agent onboarding.
On the verification side, anyone can enter an agent's ENS name and the system brute-forces the known ENSIP-25 key pattern to find the matching attestation, then cross-references it against the on-chain agent struct in the registry contract. If the name and ID match, the agent is verified. We also surface all ENS text records (capabilities, model, version, description) and generate an AI-powered summary of what the agent does — creating a discoverable profile for every registered agent.
The project has three layers: a Solidity smart contract, a Next.js 16 frontend, and a Relayer API route.
The MinimalAgentRegistry is a lightweight Solidity ^0.8.20 contract deployed on Sepolia. It maintains an auto-incrementing agent counter and a mapping of agent structs (owner address, ENS name, existence flag). Calling registerAgent(ensName) emits an AgentRegistered event with the newly assigned ID. We intentionally kept it minimal — no permissions, no extra storage — so verification is a simple agents(id) read call.
The frontend is built with Next.js 16 (App Router), TypeScript, and Tailwind CSS 4. For Web3 we use wagmi v2 for wallet connections and contract writes, viem for lower-level primitives like namehash, labelhash, recoverMessageAddress, and decodeEventLog, and @tanstack/react-query for async state management. The Onboard tab walks users through the 5-step registration with live transaction progress. The Discover tab verifies agents by resolving their ENS resolver dynamically via the ENS Registry's resolver() function (not hardcoded), then scanning ENSIP-25 text record keys across agent IDs 1-50. Each code block in the docs is a hand-built React component with copy-to-clipboard.
The Relayer API (POST /api/register) is a single Next.js route handler. It takes four fields — parentName, sublabel, agentWalletAddress, and an EIP-191 signature. It recovers the signer address from the signature, queries the ENS Registry's owner() to verify the signer owns the parent ENS name, then uses a server-side wallet client (from RELAYER_PRIVATE_KEY via viem's privateKeyToAccount) to sequentially execute all five on-chain operations with waitForTransactionReceipt after each. The agent ID is extracted by decoding the AgentRegistered event from the registration receipt. The one prerequisite is that the ENS owner must call setApprovalForAll(relayerAddress, true) on the ENS Registry — a one-time approval allowing the relayer to create subnodes.

