Onchain name registry on Base. Register yourname.hazza.name with USDC, get an ERC-721 NFT, ENS-compatible resolution via CCIP-Read, and an optional ERC-8004 AI agent identity. Pay once, available forever.
Live: hazza.name
- Contract: Solidity (Foundry), deployed on Base mainnet
- Worker: Cloudflare Worker (TypeScript/Hono), serves the site + API + x402 payment protocol
- Resolution: CCIP-Read (ERC-3668) gateway for ENS-compatible
.hazza.nameresolution
Registry: 0xdf92cA2fc1e588F7A2ebAEA039CF3860826f4746
USDC: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
| Function | Description |
|---|---|
registerDirect(...) |
Relayer-only registration (8 params) |
registerDirectWithMember(...) |
Registration with Net Library member ID for free claim (9 params) |
quoteName(...) |
Get registration price |
quoteNameWithMember(...) |
Get price with free claim check |
hasClaimedFreeName(uint256) |
Check if member already claimed free name |
resolve(string) |
Resolve name to owner, token ID, agent |
reverseResolve(address) |
Wallet to primary name |
contractURI() |
Collection-level metadata for marketplaces |
All names: $5 flat. Pay once, available forever — no renewals, no expiration.
First name free — everyone's first registration costs nothing (just pay gas).
Free names do NOT count toward progressive pricing tiers.
Progressive anti-squat pricing applies to paid registrations within a 90-day window:
| Paid names in window | Multiplier | Price |
|---|---|---|
| 1–3 | 1x | $5 |
| 4–5 | 2.5x | $12.50 |
| 6–7 | 5x | $25 |
| 8+ | 10x | $50 |
Unlimited Pass holders get 20% off all paid registrations.
Net Library members with an Unlimited Pass ($10 NFT on Base) get:
- 1 free hazza name (bonus, in addition to everyone's first-free)
- 20% discount on all additional registrations
- No daily or total registration limits (same as everyone — progressive pricing is the only brake)
Free names are tracked by Net Library member ID (not wallet address). Each member number can claim exactly 1 free name, ever. Transferring the Unlimited Pass NFT to another wallet doesn't help — the new wallet needs its own Net Library membership with a different member ID.
Unlimited Pass (Base): 0xCe559A2A6b64504bE00aa7aA85C5C31EA93a16BB
All endpoints at hazza.name.
| Endpoint | Method | Description |
|---|---|---|
/api/available/:name |
GET | Check name availability |
/api/resolve/:name |
GET | Resolve name to owner + records |
/api/profile/:name |
GET | Full profile with text records |
/api/quote/:name |
GET | Get registration price. Optional: ?memberId=N for free claim check |
/api/reverse/:address |
GET | Wallet to primary name |
/api/names/:address |
GET | All names owned by wallet |
/api/free-claim/:address |
GET | Check free claim eligibility (NL membership + Unlimited Pass + unclaimed) |
/api/collection-metadata |
GET | Collection-level metadata (contractURI) |
/x402/register |
POST | Register a name via x402 payment protocol |
/api/ens-names/:address |
GET | ENS name suggestions for wallet |
- Connect wallet on register page
- Worker checks
/api/free-claim/{address}→ queries Net Library API for membership + Unlimited Pass - If eligible: quote shows FREE, checkout skips USDC transfer
- Worker calls
registerDirectWithMember(... memberId)— no payment collected - Contract marks
memberFreeClaimed[memberId] = trueto prevent reuse
POST /x402/registerwith{ name, owner }— returns 402 with USDC amount- User transfers USDC to relayer address
POST /x402/registerwithX-PAYMENTheader containing tx proof- Worker verifies payment on-chain, calls
registerDirectvia relayer
cd contracts
forge build
forge testcd worker
npm install
npx wrangler dev # local dev
npx wrangler deploy # deploy to Cloudflarecd contracts
HAZZA_TREASURY=0x27eBa4D7B8aBae95eFB0A0E0308F4F1c0d3e5B0a \
UNLIMITED_PASS=0xCe559A2A6b64504bE00aa7aA85C5C31EA93a16BB \
RELAYER_WALLET=0xa6eB678F607bB811a25E2071A7AAe6F53E674e7d \
forge script script/Deploy.s.sol:DeployHazza --rpc-url https://mainnet.base.org --private-key $PK --broadcastAfter deploying, each relayer must approve the registry to spend USDC:
cast send 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \
"approve(address,uint256)" \
0xdf92cA2fc1e588F7A2ebAEA039CF3860826f4746 \
115792089237316195423570985008687907853269984665640564039457584007913129639935 \
--rpc-url https://mainnet.base.org --private-key $RELAYER_PK| Path | Page |
|---|---|
/ |
Landing page with name search |
/register |
Registration flow (wallet connect + x402 checkout) |
/manage |
Name management (text records, agent, operator, custom domain) |
/dashboard |
Dashboard showing all owned names |
/pricing |
Pricing details |
/pricing/protections |
Anti-squatting and name rights |
/pricing/details |
Full pricing breakdown |
/about |
About hazza |
/docs |
API documentation |
*.hazza.name |
Profile pages (wildcard subdomains) |
| Role | Address |
|---|---|
| Owner (GEAUX) | 0x96168ACf7f3925e7A9eAA08Ddb21e59643da8097 |
| Treasury | 0x27eBa4D7B8aBae95eFB0A0E0308F4F1c0d3e5B0a |
| Relayer | 0xa6eB678F607bB811a25E2071A7AAe6F53E674e7d |
Powered by x402, XMTP and Net Protocol. Built on Base.