EthTwin
Crypto for everyone — even my grandma.
Created on 8th May 2026
•
EthTwin
Crypto for everyone — even my grandma.
The problem EthTwin solves
Crypto has a 500M-user ceiling, and it's a UX problem not a tech problem.
Ask your grandma to send 100 USDC. She has to: install a wallet, write down 12 words, copy a 42-character address, pick the right chain, hold ETH for gas, pray she didn't send it on Polygon when the
receiver expected Base, and hope she didn't fat-finger a hex digit. One mistake = funds gone forever. This is why crypto still feels like a hobby for engineers, not money for humans.
EthTwin replaces all of that with one sentence:
▎ "Hey Twin, send 100 USDC to my grandson Tom."
What changes with EthTwin
- Seed phrase → Passkey / Face ID. No 12 words. No paper backup. Privy + smart wallet.
- 0x742d35Cc6634C0532... → tom.ethtwin.eth. Names, not hex.
- Public forever-receipts → Stealth addresses by default. EIP-5564, unlinkable.
- "What's a gas fee?" → Gasless. Smart wallet sponsors gas.
- Chain → bridge → swap → sign → confirm → wait → "did it work?" → One voice command.
- Agents with no identity or economy → ENSIP-25 + ERC-8004 + x402 micropayments. Agents that can prove who they are and pay each other per-call.
Three problems, one interface
-
Onboarding is hostile. Voice-first + ENS subname + passkey. Maria (67, Stuttgart) goes from zero to her first on-chain transfer in under 60 seconds. No seed phrase. No hex. No "are you sure you're on the
right chain?" -
Privacy is opt-in and painful. Every public ENS name is a forever receipt. EthTwin makes stealth addresses the default — payments resolve through an EIP-5564 stealth meta-key stored as an ENS Text
Record, seeded by cosmic randomness from a real satellite (Orbitport cTRNG). Unlinkable by default, verifiable on-chain. -
Agents have no economy. AI agents today can't prove who they are, can't hire each other, can't pay for work. EthTwin's Twin is a fully ENSIP-25-compliant agent registered in the ERC-8004 IdentityRegistry
— it can discover other agents via ENS, verify them on-chain, and pay them per-call via x402 micropayments. The Twin literally hired an Apify scraping agent for $1 USDC live during the demo.
The "wow" moment
Maria's voice command silently triggered: an ENS subname resolution, an ENSIP-25 agent verification, a satellite-seeded stealth address generation, an EIP-5564 announcement, and an x402 micropayment to a
third-party agent — across two chains.
She just thought she sent her grandson money.
That's the bet: the next billion users don't want to learn crypto. They want crypto to learn them.
Challenges we ran into
We bet on five bleeding-edge specs in 48 hours: ENSIP-25 (drafted weeks ago), ERC-8004, EIP-5564 stealth addresses, x402 micropayments (v2 just shipped), and Vercel AI SDK v6 (released days before the
hackathon). Every single one bit us. Here are the four that almost killed the demo.
- The x402 ecosystem split — same name, different package
We installed x402-fetch and spent 4 hours debugging "401 Payment Required" loops that never settled. Turns out there are two competing x402 libraries with nearly identical names:
- [email protected] — Coinbase's original implementation
- @x402/fetch@2.11.0 — the x402-foundation v2 standard
They speak different protocols. Apify's facilitator only accepts v2. The npm search results showed v1 first, every blog post we found used v1, and the error messages were silent — payments just… never
settled.
Fix: ripped out x402-fetch, installed @x402/fetch + @x402/core + @coinbase/x402 (facilitator), wired up x402Client with ExactEvmScheme. Locked the verified versions into CLAUDE.md so future-us couldn't
repeat the mistake.
- Privy deprecated their server SDK during the hackathon
We started with @privy-io/server-auth (every tutorial uses it). Twelve hours in, the package showed a deprecation warning we'd been ignoring: "Use @privy-io/node instead."
The new SDK has a completely different shape — no PrivyClient class, just free functions. It also requires a PRIVY_VERIFICATION_KEY you have to manually fetch from the Privy Dashboard (not documented in the
migration guide we found).
Fix: rewrote every server route that touched auth, regenerated the verification key, and added the env var. Lost ~3 hours but ended up on the supported path.
Bonus gotcha: Privy v3 also nested embedded-wallet config. v2 was embeddedWallets.createOnLogin, v3 is embeddedWallets.ethereum.createOnLogin. Silent change. Wallets just… didn't auto-create. Took an hour
to find.
- AI SDK v6 silently renamed every tool definition
Vercel released AI SDK v6 four days before the hackathon. We followed every tutorial we knew. Tools wouldn't fire. No error — Claude just refused to call them.
The diff: in v5, tools used parameters: z.object(...). In v6, it's inputSchema: z.object(...). Same zod, same shape, different key. The TypeScript types accepted both. The runtime silently treated v5-style
tools as having no schema.
Fix: found one obscure GitHub issue confirming the rename, migrated all 15 Twin tools (sendMessage, hireAgent, inspectMyWallet, etc.) in lib/twin-tools.ts. Also discovered convertToModelMessages is now
async — must await it or the chat route crashes with a confusing "messages.map is not a function" error.
- Apify's x402 minimum killed our original demo math
Original pitch: "Twin hires an Apify agent for $0.20 USDC." Cute number. Live demo we'd practiced for hours.
Two days before submission, we actually read Apify's x402 docs carefully: the minimum is $1 USDC per request, not $0.20. Only Pay-Per-Event Actors are x402-enabled. And Base Sepolia support depends on the
facilitator — Mainnet is the safe path.
Fix: rewrote the demo script around a $1 USDC payment (still cheap enough to feel like a micropayment, expensive enough that the live tx is satisfying to watch). Switched the facilitator config to Base
Mainnet for the demo, kept Base Sepolia as the dev-mode fallback. Updated docs/06-Demo-Skript.md accordingly.
What we learned
When you build on five specs that are all younger than your hackathon, the documentation is the codebase, the ecosystem is forking in real time, and yesterday's tutorial is today's footgun. Our defense
became CLAUDE.md — a living document of every verified package version, every silent breaking change, every "wait, that's not how it works anymore" moment. Future-us reads it first; past-us would have saved
12 hours.
The bet paid off: every primitive that almost broke the build is the same primitive that makes the demo feel like magic.
Tracks Applied (7)
Ethereum Core
Network Economy
Future Society
SpaceComputer Bounty
SpaceComputer
Sourcify Bounty
Sourcify
Best ENS Integration for AI Agents
ENS
Most Creative Use of ENS
ENS
Cheer Project
Cheering for a project means supporting a project you like with as little as 0.0025 ETH. Right now, you can Cheer using ETH on Arbitrum, Optimism and Base.
