Engineering · Wallets
AERE wallets via Touch ID / Face ID, passkey accounts live
By AERE Network
June 1, 2026
5 min read
Today AERE Network deployed AerePasskeyAccount + AerePasskeyAccountFactory on chain 2800. Anyone with a modern device (iPhone, iPad, Android, Mac, Windows 10/11, YubiKey, EU Digital Identity Wallet) can now create an AERE wallet by tapping their fingerprint or showing their face. No seed phrase. No app install. No browser extension.
Why this matters: 100% of the friction in crypto onboarding is wallet UX. Seed phrases, MetaMask installs, signature popups that look like phishing, all gone. Your passkey is what your bank already trusts for login on iPhone. Now it's also your AERE wallet.
What's deployed
| Component | Address on chain 2800 |
| AerePasskeyAccountFactory | 0xfB0eF980667A79Fe1AB69c5f2d512118F1B30739 |
| Account init code hash (for CREATE2) | 0x027ece49…5506 |
| secp256r1 precompile (Fusaka RIP-7951) | 0x0000000000000000000000000000000000000100 |
Cryptographic flow, verified end-to-end
- User taps Touch ID / Face ID. The OS's secure enclave generates a P-256 (secp256r1) keypair. Private key never leaves the device; public key is exported.
- JavaScript on wallet.aere.network computes the user's AERE address via CREATE2, fully deterministic from the passkey public key. The address exists before the on-chain contract is even deployed.
- To transact, the page constructs a 32-byte challenge,
keccak256(account, chainid, nonce, target, value, data), and asks the OS to sign it with the passkey.
- The OS produces a real WebAuthn assertion:
authenticatorData + clientDataJSON (containing the challenge as base64url) + ECDSA signature.
- The assertion is submitted to
AerePasskeyAccount.execute(), which calls the on-chain WebAuthn library, computes the message hash sha256(authenticatorData || sha256(clientDataJSON)), and verifies the signature via the RIP-7951 precompile at 0x100.
- On valid signature, the account executes the inner call, sending AERE, calling another contract, anything.
First end-to-end test transaction on chain 2800: 0x3045dd33…d4426 at block 2,157,502. Gas used: 141,246, covering WebAuthn signature parsing, JSON challenge extraction, precompile verification (~6,900 gas for the secp256r1 verify itself), and the inner call.
Phase 1 limitations (honest)
- Relayer not yet live. Currently the user needs an external AERE-funded address to submit the first deployment transaction (createAccount) and any subsequent execute calls. Foundation-funded relayer coming next, when complete, the entire flow will be gasless (paid by
AereOnboardingPaymaster from Tier 1.3).
- No social recovery yet. Your passkey is your only signer. Loss-of-device recovery currently depends on your iCloud / Google / Microsoft account backup syncing the passkey to a new device. Multi-key accounts (passkey + YubiKey, passkey + email-recovery) are Tier 1.19 work.
- No batch transactions yet in the demo UX. The contract supports
executeBatch for atomic multi-call, but the demo page only shows single-call.
What you can build
- Neobank onboarding, tap Face ID, you have an AERE wallet, your euro IBAN is provisioned via BaaS partner, ready to swipe within 30 seconds of opening the app
- NFT mint flows, no MetaMask, no seed phrase, mint by tapping
- One-tap signature requests, any dApp can prompt the user's passkey for explicit consent without an extension
- Account abstraction for everyone, gas sponsorship, session keys, batched txs work out of the box
What we explicitly did NOT do
We did not ship a "passkey wallet" with a stub verifier returning true for all signatures. We did not invent custom WebAuthn parsing, we adopted Coinbase Smart Wallet's audited approach. We did not assume the precompile worked, we proved it by submitting the canonical Wycheproof test vector and confirming 0x...01 return.
→ Try wallet.aere.network
← Back to all posts