Effort: ~3 hours (contract) + ~1 hour (SDK/frontend) Impact: HIGH — unlocks AI agent and DeFi verticals
- Add a
validTLDsmapping and admin function to register new TLDs - Modify
_normalizeLabelto accept and validate TLD suffixes - Store TLD as part of the record key:
keccak256(label + tld)instead of justkeccak256(label) - Add per-TLD pricing (optional — can share the existing pricing model)
- Update
normalizeName()to parse and validate TLD - Add
supportedTLDs()method - All existing methods work unchanged (
.arcbecomes the default)
- Search page shows availability across all TLDs (like ArcID's grid)
- Registration flow lets user pick TLD
- Dashboard shows names grouped by TLD
- Requires contract redeployment
- Existing
.arcnames would need migration or parallel operation
Effort: ~6–8 hours full rewrite Impact: MEDIUM — better DX and wallet UX, but current UI is functional
- Install:
tailwindcss,@rainbow-me/rainbowkit,wagmi,@tanstack/react-query,viem - Replace
wallet-context.tsxwith wagmi's built-in wallet management - Replace manual
window.ethereumcalls with wagmi hooks (useAccount,useWriteContract,useReadContract) - Replace
globals.csscomponent classes with Tailwind utilities - Add RainbowKit
ConnectButtonin layout — handles multi-wallet, network switching, account modal
- RainbowKit supports MetaMask, WalletConnect, Coinbase Wallet, etc. out of the box
- wagmi handles chain switching, transaction state, and error handling automatically
- Tailwind makes responsive design easier and more consistent
- Large rewrite — test thoroughly before merging
- Must keep the existing
@arc/namesSDK integration working alongside wagmi
Effort: ~2 hours Impact: HIGH — transforms ANS from a registry into a payment tool
- New page:
app/send/page.tsx - Input: recipient (
.arcname or 0x address) + amount (USDC) - Flow:
- If input is
.arcname → resolve via SDK → show resolved address - If input is 0x address → pass through
- Check USDC balance
- Call USDC
transfer(resolvedAddress, amount)
- If input is
- Show confirmation with explorer link
Effort: ~3 hours Impact: MEDIUM-HIGH — positions ANS for the agentic use case
- Add a new endpoint to
packages/api:POST /register - Requires a server-side wallet (funded with USDC) — the API acts as a registrar
- Body:
{ name, owner, years, apiKey } - Server validates, pays USDC from its own balance, registers on behalf of the caller
- Rate limit and API key gate to prevent abuse
- Return
{ txHash, name, owner, expiry }
- Server wallet private key must be in env vars (never exposed)
- API key authentication required
- Per-key rate limiting
- Maximum registration budget per key
- Audit trail logging
- User signs an EIP-712 message off-chain
- Server submits the transaction and pays gas
- More complex but doesn't require the server to hold USDC for fees
Effort: ~5 minutes (contract owner call) Impact: LOW-MEDIUM — marginal adoption factor
- Call
setFees(1000000, 20000000)to set base fee to $1/yr and short name fee to $20/yr - Or deploy with a 3-tier model matching ArcID: $20 (1-3), $5 (4), $1 (5+)
- This is purely a business decision, not a technical one
Effort: ~1 hour (contract change) Impact: LOW — only matters for advanced ENS-like architectures
Your current resolvedAddress field is functionally equivalent for 99% of use cases. The separate resolver pattern only matters if you want names to point to smart contract resolvers that return different addresses based on context (e.g., different addresses for different chains).
Recommendation: Defer this. Your pattern is simpler and works. Only add resolver separation if cross-chain resolution becomes a requirement.
| Priority | Gap | Effort | Impact | Requires Redeploy? |
|---|---|---|---|---|
| 1 | Send USDC page | 2h | HIGH | No |
| 2 | Multiple TLDs | 4h | HIGH | Yes |
| 3 | Agent API | 3h | MEDIUM-HIGH | No |
| 4 | Frontend modernization | 6-8h | MEDIUM | No |
| 5 | Pricing adjustment | 5min | LOW-MEDIUM | No (owner call) |
| 6 | Resolver pattern | 1h | LOW | Yes |
- This week: Build the Send page (#1) — biggest ROI for least effort
- Next week: Add Agent API (#3) + adjust pricing (#5) — no redeployment needed
- Sprint 3: Multi-TLD support (#2) — requires new contract, thorough testing
- Sprint 4: Frontend modernization (#4) — polish pass