No description
  • TypeScript 32.3%
  • Vue 21.7%
  • Solidity 20.8%
  • JavaScript 19.1%
  • Dockerfile 4.3%
  • Other 1.8%
Find a file
2026-09-17 00:04:23 +02:00
backend Create ANS light site for ans.family and configure private RPC 2026-09-16 22:05:01 +02:00
contracts Remove buybacks and use fresh V2 naming contracts 2026-09-16 23:32:16 +02:00
deploy/nstack Update nstack deploy artifacts 2026-09-16 22:10:15 +02:00
docs Remove buybacks and use fresh V2 naming contracts 2026-09-16 23:32:16 +02:00
frontend Type example names character by character without clipping 2026-09-17 00:04:23 +02:00
scripts Type example names character by character without clipping 2026-09-17 00:04:23 +02:00
.dockerignore init 2026-09-16 06:07:27 +02:00
.env.example Create ANS light site for ans.family and configure private RPC 2026-09-16 22:05:01 +02:00
.gitignore Build Arc names website and deploy ENS-based mainnet contracts 2026-09-16 06:36:32 +02:00
AGENTS.md init 2026-09-16 06:07:27 +02:00
CLAUDE.md init 2026-09-16 06:07:27 +02:00
foundry.toml Build Arc names website and deploy ENS-based mainnet contracts 2026-09-16 06:36:32 +02:00
nstack.config.mjs Create ANS light site for ans.family and configure private RPC 2026-09-16 22:05:01 +02:00
NSTACK_GUIDELINES.md init 2026-09-16 06:07:27 +02:00
package.json Type example names character by character without clipping 2026-09-17 00:04:23 +02:00
paseo.json init 2026-09-16 06:07:27 +02:00
pnpm-lock.yaml Build Arc names website and deploy ENS-based mainnet contracts 2026-09-16 06:36:32 +02:00
pnpm-workspace.yaml init 2026-09-16 06:07:27 +02:00
README.md Remove buybacks and use fresh V2 naming contracts 2026-09-16 23:32:16 +02:00

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.