An identity you control.
ARC ID is an independent naming application for Arc. It connects an .arc name to a wallet and a public profile. It is not an official ENS or Circle product, and its names require resolver integration in other applications.
Registration, in four steps
- Search a valid name. This first release supports 3–63 ASCII letters, digits, and internal hyphens. Availability and prices come from the registry.
- Connect an EVM wallet and switch to Arc Testnet. You need native testnet USDC for registration and gas.
- Commit your registration. A browser-generated secret protects the name during a 60-second waiting period. Keep this browser’s storage until registration completes.
- Confirm the second transaction within 24 hours. Once confirmed, open My names to manage your address and profile.
Know what your name can do
You can update your wallet address, bio, and HTTPS website; set a primary name; renew; and transfer ownership. Primary names are only returned if they still resolve to the same address. A transfer clears the old profile. At expiry, resolution stops. A 90-day grace period protects the name from re-registration while allowing renewal.
Deploy the registry
The repository includes the Solidity contract, local EVM tests, generated ABI, and a deployment script. Run npm ci, npm test, and npm run contracts:compile. Fund a deployer with Arc Testnet USDC, set DEPLOYER_PRIVATE_KEY and optionally TREASURY_ADDRESS in your local shell, then run npm run deploy:testnet.
Copy the resulting contract address into NEXT_PUBLIC_REGISTRY_ADDRESS in .env.local, then restart the application. Never expose a signing key in a public environment variable. This contract is experimental and needs independent review before holding real value.
Network and payments
Current configuration: Arc Testnet, chain ID 5042002. Native USDC uses 18 decimals; its ERC-20 interface uses 6 decimals. This registry accepts native USDC and does not request token approvals. Initial pricing is 50 USDC/year for 3-character names, 15 for 4 characters, and 5 for longer names. Always use the deployed contract’s quote.
For integrators
Read resolve(label) for the active wallet address, primaryName(address) for a verified primary name, text(label, key) for a single ENSIP-5 style record, and records(label, keys[]) to fetch the address, holder, expiry and several text records in one call. resolveSubname(label, sub) resolves sub.name.arc. A zero address means there is no active destination. Pass the label without .arc. The API is specific to this independent registry; it does not advertise full ENS resolver compatibility.