A Chrome extension that creates ENS subdomains and rotates wallet bindings to keep you private.
ENS names are convenient, but they're also a privacy liability — once someone knows your .eth name, they can trace every transaction tied to that wallet. Our extension tackles this by letting you spin up subdomains under your root .eth name and bind each one to a different address from a pool you manage. You can randomize which address a subdomain points to at any time, making it much harder for third parties to link your public-facing identity to a specific wallet. The extension connects via WalletConnect v2 so it works with any mobile wallet, no seed phrase exposure required. The whole flow — creating subdomains, managing your address pool, activating and deactivating bindings — lives inside a Chrome popup.
Built as a Chrome Manifest V3 extension using React, TypeScript, Vite, and Tailwind. Wallet connection runs through WalletConnect v2's EthereumProvider directly from the popup — no content scripts or page injection needed, which was a non-obvious constraint to work around. On-chain writes go through viem's writeContract calling ENS Registry and Public Resolver ABIs directly, rather than using ensjs's wallet helpers. We found that ensjs's wallet functions internally simulate transactions through the wallet client, which causes them to hang indefinitely when the client is a pure WalletConnect signer. Dropping down to raw contract calls fixed that entirely. ENS subdomain creation handles both wrapped (NameWrapper) and legacy registry names automatically. Address pool state is persisted in chrome.storage.local so it survives popup restarts, which required careful hydration timing in the app shell. Zustand manages all global state across the wallet, ENS records, subdomains, and address pool.

