- TypeScript 32.3%
- Vue 21.7%
- Solidity 20.8%
- JavaScript 19.1%
- Dockerfile 4.3%
- Other 1.8%
| backend | ||
| contracts | ||
| deploy/nstack | ||
| docs | ||
| frontend | ||
| scripts | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| foundry.toml | ||
| nstack.config.mjs | ||
| NSTACK_GUIDELINES.md | ||
| package.json | ||
| paseo.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
ANS
ANS at https://ans.family is a Nuxt website for the ENS-based naming protocol
on Arc mainnet, chain ID 5042.
The frontend supports name lookup, wallet connection, commit/reveal registration,
renewal, and address-record updates. Names use native USDC, with 18 decimals.
Run
pnpm setup
pnpm dev
The current proxy controller is read from contracts/deployments/5042-proxy-v2.json.
Set NUXT_ARC_RPC_URL in the ignored root .env to the Alchemy endpoint.
The browser and wallet use /rpc/arc; the Alchemy key stays on the server.
Override NUXT_PUBLIC_ARC_NAMES_ADDRESS only to use a different controller.
The homepage is /, registration is /names, and integration details are /build.
Verify
Install Foundry so forge and anvil are on PATH, then run:
pnpm check
pnpm contracts:test
pnpm test:browser
pnpm build
The browser suite starts its own Anvil instance on port 18545 and uses nstack
devexec for the application. It verifies actual transactions, commitment
recovery across a reload, and desktop/mobile rendering. Screenshots are saved
under .nstack/screenshots. The test signer is ephemeral and never spends real USDC.
Contracts
contracts/vendor/ens contains the ENS 1.7.0 registry, NFT registrar, and resolver
profiles with their license and provenance. Arc-specific code is in
contracts/src/ArcNames.sol. See docs/architecture.md for ownership, expiry,
pricing, compatibility, and scope decisions.
The deployed contract has fixed annual prices of 100 USDC for 3 characters, 25 USDC for 4 characters, and 5 USDC for 5 or more characters. Registration and renewal accept one to ten years. Commitments require a 60-second wait and expire after 24 hours. Names expire with a 90-day renewal grace period.
The resolver follows NFT ownership and stops resolving after expiry. The ENS registrar supports transfers and registry ownership reclamation. This release does not include reverse resolution, Unicode names, or automatic integration with Ethereum ENS wallets. The adapted contracts have automated tests, not an independent security audit.
Deployment
The Arc mainnet deployment manifest includes the controller, registry, registrar, resolver, treasury, transaction hash, and block. Its source is included in the frontend Docker build so the same deployment is used locally and in production.
For a new deployment, prepare a dedicated private signer at
.nstack/wallets/deployer.json, with private filesystem permissions. The existing
signer file was generated locally and is ignored by Git. Do not put it in runtime
environment variables or the frontend. The deployment script defaults the treasury
to that signer, or accepts ARC_NAMES_TREASURY.
pnpm contracts:estimate
pnpm contracts:deploy
The deploy command writes a separate 5042-proxy-v2.json manifest and refuses to
overwrite an existing or pending proxy deployment. It does not change the
legacy manifest or the frontend controller address.
Inspect the manifest before attempting recovery. The legacy contracts are immutable; the current namespace uses proxies.
The new source deploys four OpenZeppelin 4.9.6 transparent proxies with one
ProxyAdmin. Set ARC_NAMES_ADMIN to the address that should control upgrades
and controller ownership. It defaults to the deployer. The deployment initializes
every proxy in the same transaction.
Existing names remain on the legacy contracts. Deploying the proxy namespace does not migrate ownership, records, or commitments. The website now uses the new proxy namespace. The legacy manifest remains available for old registrations.
Registration and renewal fees stay in the controller until withdraw() sends
them to the configured treasury. Excess payments are refunded. The source no
longer includes swaps, token configuration, or quoted purchase methods.
See historical V1 deployment for historical V1 upgrade details. This website uses the fresh V2 deployment, which has no migrated names and no buyback code. V1 remains unchanged.
The nstack app slug is ansfamily and the domain is ans.family.
The app deploys through its own Dokploy target and source repository. Website
deployment does not upgrade the onchain contracts.