New: AI Agent SDK is live — integrate Claude-powered wallet actions into your app. Read the docs
Introduction

Veil — Invisible Wallet

Veil is a passkey-powered smart wallet built on Stellar Soroban. It lets users register, authenticate, and authorize blockchain transactions using device biometrics — Face ID, fingerprint, or Windows Hello — with no seed phrases and no private key exposure.

Veil implements the WebAuthn / FIDO2 standard and the ES256 (P-256 ECDSA) signature scheme. All cryptographic verification happens on-chain inside a Soroban custom account contract.

Live on Stellar Mainnet

Veil is deployed and source-verified on Stellar mainnet — not a testnet-only project. The factory contract CCZ3JLRE…OQ7BK is built reproducibly through scripts/reproducible-build.sh (Docker rust:1.85.0-bookworm); its on-chain bytecode matches contracts/expected-hashes.json byte for byte (factory.wasm 3a6756d2…, invisible_wallet.wasm b485f817…). A reviewer can rebuild locally and match the ledger directly.

Real transactions on the public network prove the full passkey path works end to end:

What it provesTransaction
A WebAuthn passkey authorizing a mainnet transfer on-chain (__check_auth)626e1106…ebcc
Soroswap aggregator swap (1 XLM → 0.2024626 USDC)5e29e3d8…6f4f
Sponsored classic send to an external wallet (LOBSTR)3ef7598f…ab5c
Passkey wallet deployed via the factoryacbc3147…57fe

Full receipts (including the wallet contract and funding transaction) are in the repo’s docs/SCF_STRATEGY.md §0. Note there is no public mainnet Soroban RPC — see Choosing a Network for the paid-provider proxy the wallet uses.

Why Veil?

Traditional WalletVeil
24-word seed phraseFingerprint / Face ID
Private key fileSecure enclave (never exported)
User must back up keysDevice + guardian recovery
Complex multi-step UXSingle tap to authorize
Centralized custody riskFully self-custodied, on-chain

Core Concepts

  • WebAuthn — A W3C standard that lets browsers create and use P-256 key pairs stored in hardware secure enclaves.
  • Soroban Custom Account — A contract that implements __check_auth, called by the Soroban runtime for every transaction authorization.
  • Challenge Binding — The Soroban signature_payload (32 bytes) is used directly as the WebAuthn challenge, binding the biometric signature to the exact transaction.
  • P-256 ECDSA — The ES256 algorithm used by WebAuthn, verified on-chain using the p256 Rust crate.

Project Structure

invisible_wallet/
├── contracts/invisible_wallet/   # Rust/Soroban smart contract
│   └── src/
│       ├── lib.rs                # Entry points + __check_auth
│       ├── auth.rs               # WebAuthn ES256 verification
│       └── storage.rs            # Signer/guardian storage
└── sdk/
    └── src/
        ├── useInvisibleWallet.ts # React hook
        └── utils.ts              # Crypto utilities

Quick Navigation

Development Status

PhaseStatusDescription
Phase 1CompleteContract, WalletError, 6 unit tests
Phase 2CompleteFull WebAuthn pipeline, DER to raw, key extraction
Phase 3CompleteFactory contract, deterministic deployment
Phase 4CompleteTestnet + mainnet deployment, end-to-end demo
Phase 5In ProgressGuardian recovery, multi-signer, replay protection
⚠️

Veil is live on Stellar mainnet (see above) but still under active development — the contract and SDK APIs may change before a stable 1.0 release. Test on Testnet before moving real value, and never deploy unaudited changes to Mainnet.