{"id":"EIP-7951","name":"Precompile for secp256r1 (Passkeys)","status":"Final","chain":"both","category":{"id":"onboarding","name":"Onboarding & Access","description":"Getting users into web3 without friction"},"journeyStages":[{"id":"authentication","name":"Authentication & Identity","description":"Proving who you are and logging in"}],"uxImpact":"Users authenticate with passkeys (Face ID, Touch ID, Windows Hello, hardware security keys) instead of seed phrases — familiar biometric login for blockchain. Design implications: design passkey registration flows using device-native prompts, show biometric authentication UI for transaction signing, remove seed phrase backup requirements for passkey-only accounts, support multiple passkeys per account for device redundancy. Design decisions: decide whether passkeys supplement or replace traditional keys, design recovery flows when passkey device is lost, handle cross-device passkey sync (iCloud Keychain, Google Password Manager), consider showing security level differences between platform vs roaming authenticators. Final on Ethereum; Monad has native secp256r1 support — design passkey-first onboarding on both chains.","hasDetailedContent":true,"content":{"id":"EIP-7951","summary":"EIP-7951 adds native support for passkeys (Face ID, Touch ID, Windows Hello) to sign blockchain transactions. Instead of managing seed phrases, users authenticate with their face or fingerprint. The browser's secure hardware generates and stores keys. This is the biggest onboarding unlock: anyone with a phone can use crypto like they use Apple Pay.","applicability":{"whenToUse":["Your product addresses: seed phrases are terrible UX and security risk.","Your product addresses: new users scared away by key management complexity.","The flow should deliver: face ID or fingerprint, backed up to iCloud/Google automatically.","Connect flows must list wallets with names, icons, and explicit user choice."],"whenToAvoid":["Require secondary recovery (guardians, backup key).","\"Face ID\", \"Touch ID\", \"Fingerprint\", \"Passkey\".","Allow device passcode as fallback authentication.","Wallet or chain support is fixed and users cannot choose providers."]},"designerTakeaways":["You can design UI that delivers face ID or fingerprint.","You can design UI that delivers \"Sign up with Face ID\", feels like any other app.","You can design UI that delivers keys in Secure Enclave/TPM, never extracted."],"problemsSolved":[{"problem":"Seed phrases are terrible UX and security risk","oldWay":"Write down 12-24 words, store them safely, never lose them","newWay":"Face ID or fingerprint, backed up to iCloud/Google automatically","impact":"critical"},{"problem":"New users scared away by key management complexity","oldWay":"Explain private keys, wallets, security... users leave","newWay":"\"Sign up with Face ID\" — feels like any other app","impact":"critical"},{"problem":"Mobile wallet apps have security vulnerabilities","oldWay":"Keys stored in app, potentially accessible to malware","newWay":"Keys in Secure Enclave/TPM, never extracted","impact":"high"},{"problem":"Hardware wallets expensive and clunky","oldWay":"Buy $100+ device, connect via USB, manage firmware","newWay":"Your phone IS the hardware wallet","impact":"high"},{"problem":"Account recovery requires seed phrase backup","oldWay":"Lose phrase = lose funds forever","newWay":"Device syncs passkey via cloud (iCloud Keychain, etc.)","impact":"high"}],"uxPatterns":[{"name":"Passkey Wallet Creation","description":"One-tap wallet creation with biometric","mockup":"concept/siwe-sign-in","userFlow":["User taps \"Create Wallet\"","System shows Face ID prompt","User authenticates with face/fingerprint","Passkey created and synced","Wallet ready to use"]},{"name":"Transaction Signing with Biometric","description":"Confirm transactions with face or touch","mockup":"concept/siwe-sign-in","userFlow":["User initiates transaction","App shows transaction details","Biometric prompt appears","User authenticates","Transaction signed and broadcast"]},{"name":"Multi-Device Passkey Sync","description":"Access wallet from any device in your ecosystem","mockup":"concept/siwe-sign-in","userFlow":["User opens app on new device","Detects existing passkey via cloud","Shows available devices","User authenticates with biometric","Wallet loaded instantly"]},{"name":"Passkey + Guardian Recovery","description":"Fallback when biometric device is lost","mockup":"concept/siwe-sign-in","userFlow":["User views recovery settings","Sees passkey as primary method","Guardians as backup","Can add additional methods","All methods shown with status"]}],"uiComponents":[{"name":"BiometricPrompt","description":"Native system prompt for Face ID/Touch ID/Windows Hello","states":["idle","prompting","success","failed","unavailable"],"props":["reason","fallbackTitle","onSuccess","onFail"]},{"name":"PasskeyCreator","description":"Creates new passkey and associates with smart wallet","states":["ready","creating","syncing","complete","error"],"props":["accountAddress","rpId","userName"]},{"name":"DeviceSyncIndicator","description":"Shows which devices have access to passkey","states":["syncing","synced","offline"],"props":["devices[]","lastSync"]},{"name":"PasskeyAuthButton","description":"Initiates passkey authentication flow","states":["idle","waiting","authenticated","error"],"props":["onAuth","fallbackOptions"]},{"name":"RecoveryMethodManager","description":"Configure and view recovery options","states":["no-backup","partial","fully-configured"],"props":["methods[]","onAddMethod","onRemoveMethod"]}],"antiPatterns":[{"pattern":"Only offering passkey with no fallback","why":"Lost all devices = lost wallet forever","instead":"Require secondary recovery (guardians, backup key)","severity":"critical"},{"pattern":"Calling it \"secp256r1\" or \"WebAuthn\" to users","why":"Technical jargon that means nothing to users","instead":"\"Face ID\", \"Touch ID\", \"Fingerprint\", \"Passkey\"","severity":"high"},{"pattern":"Not explaining cloud sync clearly","why":"Users don't understand how recovery works","instead":"Show \"Backed up to iCloud\" or \"Synced via Google\"","severity":"medium"},{"pattern":"Hiding where passkey is stored","why":"Users worried about security can't evaluate it","instead":"Explain \"Key stored in your device's secure chip\"","severity":"medium"},{"pattern":"No biometric fallback (PIN/password)","why":"Wet fingers, injuries, etc. can block biometric","instead":"Allow device passcode as fallback authentication","severity":"high"},{"pattern":"Requiring passkey for low-value actions","why":"Friction fatigue — users annoyed by constant prompts","instead":"Session keys for frequent/low-value, biometric for high-value","severity":"medium"}],"onMonad":[{"aspect":"Native Support","ethereum":"Requires ERC-4337 + custom verifier contract","monad":"EIP-7951 precompile makes verification 100x cheaper","designImplication":"Passkey wallets more economically viable on Monad"},{"aspect":"Transaction Confirmation","ethereum":"Sign → wait 12+ seconds → confirmed","monad":"Sign → instant confirmation (sub-second)","designImplication":"Biometric + instant feedback feels native"},{"aspect":"Gas for Verification","ethereum":"~250k gas for secp256r1 verification","monad":"~3k gas with precompile","designImplication":"Can use passkeys for every transaction economically"},{"aspect":"Reserve Balance","ethereum":"N/A","monad":"Passkey wallets still need 10 MON reserve; delegated accounts cannot use emptying exception","designImplication":"Show spendable vs total even for passkey accounts"}],"keyTakeaways":["Passkeys = Face ID/Touch ID for crypto","Always require backup recovery method","Use human terms: \"Face ID\" not \"secp256r1\"","Show cloud sync status clearly","On Monad: 100x cheaper passkey verification via precompile"],"technicalNotes":"EIP-7951 adds a precompile at a designated address that performs secp256r1 (P-256) signature verification. This is the curve used by WebAuthn/passkeys. Without this precompile, verification costs ~250k gas via Solidity implementation. The precompile reduces this to ~3k gas. Passkeys are created via WebAuthn API, stored in device Secure Enclave, and synced via platform keychain (iCloud, Google Password Manager)."},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-7951","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=EIP-7951","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/EIP-7951","markdown":"https://www.eipsfordesigners.com/standards/EIP-7951/content.md","agent":"https://www.eipsfordesigners.com/standards/EIP-7951/agent.md","api":"https://www.eipsfordesigners.com/api/standards/EIP-7951","official":"https://eips.ethereum.org/EIPS/eip-7951","discussion":"https://ethereum-magicians.org/search?q=EIP-7951"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}