Engineering · Wallets

AERE wallets via Touch ID / Face ID, passkey accounts live

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

ComponentAddress on chain 2800
AerePasskeyAccountFactory0xfB0eF980667A79Fe1AB69c5f2d512118F1B30739
Account init code hash (for CREATE2)0x027ece49…5506
secp256r1 precompile (Fusaka RIP-7951)0x0000000000000000000000000000000000000100

Cryptographic flow, verified end-to-end

  1. 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.
  2. 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.
  3. 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.
  4. The OS produces a real WebAuthn assertion: authenticatorData + clientDataJSON (containing the challenge as base64url) + ECDSA signature.
  5. 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.
  6. 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)

What you can build

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