Search projects, hackathons, sponsors and tech

    ← All projects

    Try Mandate

    ERC-8004 identity + ENS naming for AI agents, gated by a hardware-signed second approval.

    Demo

    About

    Mandate gives on-chain AI agents a real identity, an ERC-8004 registration paired with a human-readable ENS name, instead of just a bare wallet address. From there, any change to that agent's ownership or permissions has to go through a PermissionGate contract: the request sits blocked as Pending until a separate approver signs it with a physically connected Ledger. Nothing executes until that second, hardware-held signature happens, and it can be rejected outright instead. The whole flow is self-serve and non-custodial: connect your own wallet, register your own agent's identity, and deploy your own PermissionGate naming your own approver. No backend ever holds a user's keys. Every agent also carries public reputation feedback left by other users, and its full action history is queryable live from a subgraph, so trust in an agent isn't just assumed, it's inspectable. Everything is live on Sepolia today against real deployed contracts, not a mock or a testnet simulation layered on fake data.

    How it's made

    Identity is ERC-8004 (an Adapter8004 contract binding an ENS-registered ERC-1155 token to a persistent agent identity) plus ENSv2's PermissionedRegistry for the human-readable name. Gating is a custom PermissionGate.sol (Solidity, Foundry-tested): requestOwnershipTransfer and requestPermissionEscalation queue an action, and it only executes once the approver signs an EIP-712 typed-data payload, verified on-chain and relayed by anyone. A PermissionGateFactory deploys one gate per user for the self-serve path, checking Adapter8004.isController so only the real identity owner can deploy a gate for it. A subgraph (The Graph) indexes every GatedAction and reputation-feedback event so the frontend never has to trust a centralized read path. Frontend is React + Vite, wagmi/viem for chain calls, RainbowKit for wallet connect. Backend is a small Express service whose only remaining trusted job is issuing the ENS subname label; everything that touches custody or approval is a direct call from the user's own connected wallet. Backend persistence is MongoDB (swapped in from a local JSON file specifically to survive serverless cold starts on Vercel, where both frontend and backend are deployed).