Biometric Wallet Infrastructure for Solana
Eliminate seed phrases forever. Sign transactions with your face.
Live Demo Β· Watch Demo Video Β· Documentation
solana blockchain webauthn passkeys biometrics wallet secp256r1 anchor rust typescript nextjs defi web3 crypto hackathon
- The Problem
- The Solution
- Demo
- Features
- Architecture
- How It Works
- Quick Start
- Project Structure
- Program Instructions
- Browser Compatibility
- Security Model
- Tech Stack
- Roadmap
- Known Limitations
- Acknowledgments
Seed phrases are the single biggest barrier to mainstream crypto adoption. Users must:
- Write down 12-24 random words and store them securely forever
- Risk permanent loss of funds if the phrase is lost, stolen, or damaged
- Trust themselves to never make a mistake with irreversible consequences
78% of potential users abandon wallet setup when confronted with seed phrase management.
Keyless replaces seed phrases with the biometric authentication users already trustβFace ID and Touch ID. Private keys are generated and stored in your device's secure enclave, never exposed to the network or even the application itself.
Create a Solana wallet in 5 seconds. No seed phrase. No compromise on security.
- Open the live demo
- Click "Create with Face ID"
- Authenticate with biometrics
- You now have a fully functional Solana walletβno seed phrase required
That's it. Five seconds to a working wallet.
| Feature | Description |
|---|---|
| Zero Seed Phrases | Private keys live in your device's secure enclaveβnothing to write down or lose |
| Biometric Authentication | Face ID / Touch ID for every transaction |
| Multi-Device Support | Register up to 5 devices as backup authenticators |
| Configurable Multi-Sig | Set threshold signatures for high-value transactions |
| Native secp256r1 | Leverages Solana's new precompile (SIMD-0075) for on-chain passkey verification |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β USER DEVICE β
β βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββββββββββ β
β β Application βββββΆβ WebAuthn βββββΆβ Secure Enclave β β
β β (Next.js) β β (Passkeys) β β (secp256r1 keypair) β β
β βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SOLANA BLOCKCHAIN β
β βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββββββββββ β
β β Keyless Program βββββΆβ secp256r1 βββββΆβ Identity PDA β β
β β (Anchor) β β Precompile β β + Vault β β
β βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
User clicks "Create with Face ID"
β
Browser generates secp256r1 keypair in secure enclave
β
Public key transmitted to Solana program
β
Identity PDA created with associated vault
β
Credential ID stored locally
β
β Wallet readyβno seed phrase generated or stored anywhere
User initiates transaction
β
Biometric prompt (Face ID / Touch ID)
β
Secure enclave signs with secp256r1 private key
β
Signature submitted to Solana program
β
On-chain verification via secp256r1 precompile
β
Transaction executed if threshold met
- Node.js 18+
- Rust 1.70+
- Solana CLI 1.18+
- Anchor 0.30.1
- Device with Face ID, Touch ID, or security key
# Clone the repository
git clone https://github.com/your-org/keyless.git
cd keyless
# Install program dependencies
npm install
# Install frontend dependencies
cd app && npm install && cd ..# Build the Solana program
anchor build
# Deploy
anchor deploy --provider.cluster devnet
# Get your program ID
solana address -k target/deploy/keystore-keypair.jsonUpdate the program ID in three locations:
// programs/keystore/src/lib.rs
declare_id!("YOUR_PROGRAM_ID");// app/src/lib/keystore.ts
export const PROGRAM_ID = new PublicKey("YOUR_PROGRAM_ID");# Anchor.toml
[programs.devnet]
keystore = "YOUR_PROGRAM_ID"cd app
npm run devkeyless/
βββ programs/keystore/ # Solana program (Anchor)
β βββ src/
β βββ lib.rs # Program entrypoint
β βββ state.rs # Account structures
β βββ error.rs # Custom errors
β βββ instructions/ # Instruction handlers
β
βββ app/ # Next.js frontend
β βββ src/
β βββ app/ # Pages and routing
β βββ lib/
β β βββ passkey.ts # WebAuthn integration
β β βββ keystore.ts # On-chain client
β β βββ solana.ts # Solana utilities
β βββ components/ # React components
β
βββ tests/ # Anchor test suite
βββ Anchor.toml # Anchor configuration
βββ README.md
Creates a new identity with the initial passkey.
Accounts: payer (signer), identity (PDA), vault (PDA)
Arguments:
pubkey: 33-byte compressed secp256r1 public keydevice_name: Human-readable identifier
Registers an additional passkey to an existing identity.
Accounts: authority (signer), identity (PDA)
Arguments:
new_pubkey: Public key to adddevice_name: Device identifier
Executes an action after verifying signatures against the configured threshold.
Accounts: identity, vault, recipient (optional), instructions (sysvar), system_program
Arguments:
action:Send { amount, recipient }orSetThreshold { threshold }sigs: Array of signatures with corresponding key indices
| Browser | Minimum Version |
|---|---|
| Chrome / Edge | 109+ |
| Safari | 16+ |
| Firefox | 119+ |
| iOS Safari | 16+ |
| Android Chrome | 109+ |
| Layer | Protection |
|---|---|
| Key Storage | Private keys generated and stored in device secure enclaveβnever exported |
| Authentication | Biometric verification required for all signing operations |
| Recovery | Multi-device registration prevents single point of failure |
| High-Value Protection | Configurable multi-sig thresholds |
| Cryptography | secp256r1 (NIST P-256)βindustry standard used by Apple, Google, Microsoft |
On-Chain: Anchor 0.30.1 Β· Solana 1.18 Β· secp256r1 Precompile (SIMD-0075)
Frontend: Next.js 14 Β· React 18 Β· TypeScript Β· Tailwind CSS Β· @solana/web3.js
- Session keys for gasless transactions
- Social recovery with guardian keys
- SPL token and NFT support
- Transaction batching
- React Native mobile app
- Hardware wallet integration
- Multi-chain expansion
This is a hackathon demonstration. Current constraints:
- Devnet deployment only
- Transaction history not yet implemented
- Multi-key UI partially complete
- Solana Foundation β Hackathon sponsorship
- SIMD-0075 β secp256r1 precompile specification
- WebAuthn Community β Passkey standards
- Anchor Framework β Solana development infrastructure
Built for the Solana University Hackathon
Live Demo Β· Video Walkthrough