
TapOut
Tap. Send. Done. No coordination needed.
Demo
About
The problem it solves # TapOut ***The Problem*** Paying someone in crypto shouldn't require a 5-minute conversation: - *"What chain are you on?"* - *"Do you have USDC or ETH?"* - *"Send me your wallet address"* - Wrong network → stuck funds → frustration **Token and chain fragmentation broke casual payments.** --- ## What TapOut Does | Before | With TapOut | |--------|-------------| | Share wallet address | Share phone number or ENS | | Agree on chain & token | AI auto-negotiates from ENS prefs | | Manual bridge + swap | AI routes & executes automatically | | 3-5 apps, 5 minutes | 1 tap, ~30 seconds | --- ## Use Cases ### In-Person (NFC) - Split dinner bill - Pay a friend back - Community meetups & events ### Remote (ENS) - Send money across cities/countries - Pay freelancers globally - Family remittances --- ## What Makes It Better | Aspect | Improvement | |--------|-------------| | **Easier** | Phone number = wallet. No addresses. | | **Faster** | AI handles routing. One confirmation. | | **Safer** | Forwarding contracts hide main wallet. | | **Cheaper** | AI finds lowest gas + best route. | --- ## Tagline > **Crypto payments, finally simple.**
How it's made
Challenges we ran into # Challenges I Ran Into ## 1. ENS Privacy Leak (Critical) **The Problem:** Early in development, our mentors pointed out a major flaw: resolving `bob.phoneno.eth` returned his main wallet address directly. This meant anyone could view his entire transaction history on Etherscan. **We were doxxing users by design.** **The Solution:** We built a **Privacy Forwarding Contract**. - Users deploy a lightweight forwarder contract. - ENS records point to the *contract address*, not the main wallet. - Funds received auto-sweep to the main wallet internally. - **Result:** Public sees only the contract. Main wallet stays hidden. --- ## 2. x402 Payment Interception **The Problem:** Integrating HeyElsa's x402 API wasn't just a normal HTTP request. Every call returned `HTTP 402 Payment Required`. Our initial code crashed because it didn't know how to sign and attach the USDC payment proof automatically. **The Solution:** We wrote a custom **axios interceptor** using `viem`: - Detects 402 responses. - Parses payment requirements (amount, recipient). - Signs payment locally with user's wallet. - Retries request with `X-Payment-Token` header. - **Result:** Seamless micropayments ($0.001 per data call) without user friction. --- ## 3. Network Mismatch Errors **The Problem:** During testing, transactions failed with: `Error: network changed: 1 => 11155111` The wallet was on Mainnet, but our agent tried to execute on Sepolia/Base. Ethers.js refused to sign across mismatched networks. **The Solution:** Added a **network validation hook** before execution: - Checks current wallet chain ID. - Prompts user to switch networks if mismatched. - Forces provider alignment before signing. - **Result:** Reliable execution across multiple chains. --- ## 4. AI Agent Decision Making **The Problem:** Our first version used hard-coded rules for route selection. It wasn't actually using OpenClaw/AI. We risked missing the HeyElsa bounty criteria. **The Solution:** Refactored the orchestrator to call `agent.execute()`: - Sends route options to OpenClaw. - AI analyzes gas, speed, and security. - Returns structured recommendation with reasoning. - **Result:** Genuine AI-powered routing, not just scripted logic.