Wallet Architecture
The Morana desktop wallet (morana-wallet-rs) is a Rust + Tauri application. Keys are generated and stored locally; nothing sensitive leaves your device.
Crates
- wallet-crypto — key derivation and signing. Transparent uses BIP84 / P2WPKH with Bitcoin BIP143 signing; shielded uses the Sapling (ZIP-243) path.
- wallet-storage — encrypted SQLite vault: addresses, UTXOs, transactions, sync state, and a reorg-safe spend index.
- wallet-core — the application API exposed to the UI via Tauri commands.
- lightd-client — client for the Morana Lightd gateway.
Hybrid transaction model
Morana is a Bitcoin-Core fork with full SegWit v0 + BIP143 for transparent funds, plus Sapling for shielded funds. The wallet therefore uses two signing paths:
- Transparent: Bitcoin SegWit / BIP143 / P2WPKH.
- Shielded: Zcash Sapling v4 / ZIP-243.
Storage & backup
The vault is encrypted at rest with your password. The .morbak backup format is encrypted and bound (AAD) to your network and app version, so a wrong-network restore is rejected. Backups contain no plaintext secrets.
Sync
The wallet syncs through Morana Lightd, which serves compact blocks and (in progress) transparent index data. The gateway cannot decrypt your shielded notes.
Build from source
git clone https://github.com/Morana-Network/morana-wallet-rs
cd morana-wallet-rs && cargo build --release
cd apps/desktop && npm install && npm run tauri build