Skip to main content

Wallet Guide

The zkCoins wallet is a web application at zkcoins.app for sending and receiving private Bitcoin transactions.

Getting started

  1. Open zkcoins.app
  2. Click Create Account — this generates a BIP32 HD wallet in your browser
  3. Use the Faucet button to mint testnet coins
  4. Enter a recipient address and amount, then click Send Coins

Your keys are generated locally and stored in the browser. They are never sent to any server.

Features

FeatureStatusDescription
Account creation✅ LiveBIP32 HD wallet generation via WASM
Balance display✅ LiveAuto-refreshing balance with 5s polling
Send coins✅ LiveTransfer to any zkCoins address
Faucet✅ LiveMint testnet coins (testnet only)
Transaction log✅ LiveLocal history of all transactions
WASM crypto✅ LiveSchnorr signing and key derivation in browser
Encrypted storage🔜 PlannedIndexedDB with Web Crypto API
Account backup🔜 PlannedExport/import wallet state
Multi-coin TX🔜 PlannedSend to multiple recipients
Mobile PWA🔜 PlannedProgressive Web App for mobile

Tech stack

LayerTechnology
FrameworkNext.js 14 (App Router)
LanguageTypeScript
StylingTailwind CSS (dark theme, Bitcoin orange)
StateZustand with localStorage persistence
CryptoRust → WebAssembly (secp256k1, BIP32)
APIREST client to Rust/Axum backend

Self-hosting

The wallet is fully open-source and can be self-hosted:

# Clone the monorepo
git clone https://github.com/zk-coins/zkcoins-app.git
cd zkcoins-app

# Install dependencies
yarn install

# Start the wallet in development mode
yarn dev

# The wallet is available at http://localhost:3090

To connect to your own backend, set the environment variable:

NEXT_PUBLIC_API_URL=http://localhost:4242

API endpoints

The wallet communicates with the Rust backend via REST:

EndpointMethodDescription
/api/mintPOSTMint new coins (testnet faucet)
/api/sendPOSTSend coins to a recipient
/api/balanceGETQuery account balance
/api/proof/:idGETDownload a coin proof