SolanaSolana support coming soon. dWallets are expanding to Solana for native cross-chain signing.
Ika LogoIka Docs
Examples

KeySpring Cross-Chain Wallet

This example demonstrates a cross-chain wallet that creates an Ethereum address from any browser wallet or passkey, using Ika's distributed key generation.

Overview

KeySpring enables:

  • Creating Ethereum wallets using any existing wallet (MetaMask, Phantom, etc.) or passkeys
  • Sending ETH transactions on Base Sepolia testnet
  • Non-custodial key management — secret key share never leaves the browser
  • Cross-chain control — use a Solana wallet to get an Ethereum address
  • Passkey authentication via WebAuthn PRF extension (Face ID, Touch ID, Windows Hello)

Source Code: examples/keyspring/

Architecture

Your Wallet                    Ika Network                   Base Sepolia
    │                              │                              │
    │  1. Sign message             │                              │
    │─────────────────────────────▶│                              │
    │                              │                              │
    │  2. DKG creates dWallet      │                              │
    │◀─────────────────────────────│                              │
    │                              │                              │
    │  3. You get ETH address      │                              │
    │  (derived from dWallet)      │                              │
    │                              │                              │
    │  4. Sign tx locally          │                              │
    │  (secret never leaves)       │                              │
    │─────────────────────────────▶│                              │
    │                              │                              │
    │  5. Ika completes signature  │  6. Broadcast tx             │
    │                              │─────────────────────────────▶│
    │                              │                              │
    │  7. TX confirmed!            │◀─────────────────────────────│
    │◀─────────────────────────────│                              │

Key Concepts

Cross-Chain Wallet Creation

The core idea is simple: use any authentication method to derive encryption keys, then let Ika's DKG create a new Ethereum wallet:

  • Connect with a Solana wallet → get an Ethereum address
  • Connect with MetaMask → get a new, separate Ethereum address
  • Use a Passkey (Face ID, Touch ID, Windows Hello) → get an Ethereum address with no wallet needed

Passkey Authentication

When using a passkey instead of a wallet:

  1. Registration: A passkey is created with the WebAuthn PRF extension enabled
  2. Authentication: The PRF extension derives a deterministic 32-byte secret from your passkey
  3. Key Derivation: This secret is used as the seed for encryption keys (same as a wallet signature would be)
  4. DKG: The rest of the flow is identical — Ika's DKG creates your new Ethereum wallet

Important: If you delete your passkey, you lose access to the wallet permanently. There is no recovery option.

Non-Custodial Design

  • Your secret key share is computed in your browser and never sent to any server
  • Based on Ika's Zero-Trust dWallet model
  • The backend only facilitates the DKG process and transaction broadcasting

Supported Authentication Methods

MethodTypeNotes
PasskeyWebAuthnFace ID, Touch ID, Windows Hello, YubiKey
MetaMaskEthereum
Phantom (Ethereum)Ethereum
Phantom (Solana)Solana
Other Solana walletsSolana

Passkey Browser Support

PlatformBrowserPlatform PasskeyHardware Key
macOS 15+Chrome/Safari 18+YesChrome only
Windows 11Chrome/EdgeYesYes
iOS 18+SafariYesNo
AndroidChromeYesUSB only

Passkey support requires the WebAuthn PRF extension for deterministic key derivation.

File Structure

examples/keyspring/
├── README.md
├── backend/
│   ├── src/           # Bun/TypeScript backend server
│   ├── package.json
│   └── tsconfig.json
└── frontend/
    ├── src/           # Next.js frontend application
    ├── package.json
    ├── tailwind.config.js
    └── tsconfig.json

Quick Start

1. Start the Backend

cd examples/keyspring/backend
bun install
 
# Set your Sui admin key
export SUI_ADMIN_SECRET_KEY="your-base64-encoded-key"
export IKA_COIN_ID="your-ika-coin-id"
 
bun run dev

2. Start the Frontend

cd examples/keyspring/frontend
bun install
bun run dev

3. Use the Demo

  1. Open http://localhost:3000
  2. Connect your wallet (MetaMask, Phantom, etc.) or create a passkey wallet
  3. Click "Create Wallet" and sign the message (or authenticate with your passkey)
  4. Wait for your new Ethereum address to be generated
  5. Fund it with Base Sepolia testnet ETH
  6. Send a transaction!

Configuration

Backend Environment

VariableDescriptionDefault
PORTServer port3001
SUI_ADMIN_SECRET_KEYBase64-encoded Ed25519 keyRequired
SUI_NETWORKtestnet or mainnettestnet

Frontend Environment

VariableDescriptionDefault
NEXT_PUBLIC_API_URLBackend URLhttp://localhost:5153
NEXT_PUBLIC_ADMIN_ADDRESSSui admin address for DKGRequired

Security Considerations

  1. Non-custodial: Secret key shares are computed client-side and never transmitted
  2. Passkey permanence: Deleting a passkey means permanent loss of wallet access
  3. Testnet only: This demo is configured for Base Sepolia testnet

Next Steps