Terminal Wallets
Terminal Wallets are self-custodial wallets built into CubeTerminal. They enable popup-free swaps, copy trading, and portfolio tracking without relying on browser extension wallets.
Features
- No Popups - Transactions sign instantly without extension approval dialogs
- Multi-Chain - Solana and EVM (Ethereum, BSC, Base, Polygon) wallets
- Encrypted Storage - Private keys encrypted with AES-256-GCM in browser IndexedDB
- Password Protected - Each wallet requires a password to unlock
- Create or Import - Generate fresh keypairs or import existing private keys
- Export & Backup - Decrypt and export private keys for safekeeping
Security Model
Terminal wallets use the Web Crypto API for all cryptographic operations. Private keys never leave the browser.
Encryption
- Algorithm - AES-256-GCM (authenticated encryption)
- Key Derivation - PBKDF2 with SHA-256, 600,000 iterations
- Salt - 16 random bytes per wallet (unique per encryption)
- IV - 12 random bytes per encryption operation
- Storage - Encrypted blobs stored in IndexedDB
Key Lifecycle
- Creation/Import - A keypair is generated or imported, then immediately encrypted with the user's password
- Locked State - Only the encrypted blob, salt, IV, and public address are stored; the plaintext key is not accessible
- Unlock - The user enters their password; PBKDF2 derives the decryption key; AES-GCM decrypts the private key into memory
- Active Use - The decrypted key is held in memory for signing transactions
- Lock - The in-memory key is zeroed out and discarded
Wallet data is stored in browser IndexedDB. Clearing site data, reinstalling the browser, or using a different browser profile will permanently delete your wallets. Always export a backup after creating a wallet.
Creating a Wallet
- Click Connect Wallet in the terminal header (or open Manage Terminal Wallets from the dropdown)
- Click Create
- Select the chain:
- Solana - Generates an Ed25519 keypair
- EVM (All chains) - Generates a secp256k1 keypair (works on Ethereum, BSC, Base, Polygon)
- Enter a wallet name (e.g. "Trading Wallet")
- Set an encryption password (minimum 4 characters)
- Confirm the password
- Click Create Wallet
The wallet is automatically unlocked and set as the active wallet.
Importing a Wallet
- Open the wallet manager and click Import
- Select the chain (Solana or EVM)
- Enter a wallet name
- Paste your private key:
- Solana - Base58 or hex format
- EVM - Hex format (with or without
0xprefix)
- Set an encryption password
- Confirm the password
- Click Import Wallet
The imported wallet is automatically unlocked and activated.
Your private key is encrypted immediately on import and the plaintext is discarded. The terminal never stores unencrypted keys on disk.
Managing Wallets
The wallet manager modal lists all saved wallets with their chain, name, address, and lock status.
Unlock
- Click Unlock on a locked wallet
- Enter the wallet password
- The wallet is unlocked and auto-activated
Lock
Click Lock on an unlocked wallet. The decrypted key is zeroed out from memory. If this was the active wallet, it is deactivated.
Set Active
When multiple wallets are unlocked, click Set Active to choose which wallet signs transactions.
Rename
Click Rename to change the wallet display name. The name is stored in IndexedDB alongside the encrypted key.
Export
- Click Export on any wallet
- Enter the wallet password to decrypt
- The private key is displayed in plaintext
- Click Copy to Clipboard to save it
Exporting reveals your private key in plaintext. Only do this to back up or transfer your wallet. Never share your private key with anyone.
Delete
Click Delete to permanently remove a wallet from IndexedDB. A confirmation prompt warns that this is irreversible if no backup exists.
Using Terminal Wallets
Once unlocked and active, terminal wallets are used automatically by:
- Swap Widget - Sign and send swap transactions (Jupiter for Solana, 0x for EVM)
- Copy Trading - Execute mirrored trades without popup approvals
- Portfolio Widget - Fetch token balances and display holdings
- Quick Sell - Sell tokens directly from the Portfolio widget
- Phoenix - Sign in and trade Solana perps with a Solana terminal wallet — no extension popups
- Arcus - An EVM terminal wallet powers the whole Arcus flow: the trading key is derived from it (nothing extra stored), registration signs silently, and testnet deposits / EIP-712 withdrawals sign without popups
The active wallet address appears in the terminal header with a purple "Terminal" badge.
Wallet Button
The header wallet button shows:
- Connected state - Truncated address with a purple indicator
- Disconnected state - "Connect Wallet" label
Click the button to:
- Open the wallet manager (when disconnected)
- View the address and copy it (when connected)
- Open on Solscan block explorer
- Access Manage Terminal Wallets
- Disconnect the wallet
Persistent Storage
The terminal requests persistent storage (opens in a new tab) from the browser to prevent automatic eviction of IndexedDB data. However, manual actions like clearing site data will still delete wallet data.
Troubleshooting
Wallet Not Showing
- Open the wallet manager to verify wallets exist
- Ensure the wallet is unlocked (green lock icon)
- Click Set Active if multiple wallets are unlocked
Wrong Password
- Passwords are case-sensitive
- There is no password recovery; if forgotten, you need the exported private key to re-import
Transaction Failing
- Check that the wallet has sufficient native token for gas fees
- Ensure the wallet is on the correct chain for the operation
- Verify the wallet is unlocked and active
Wallet Data Lost
- IndexedDB was cleared (browser settings, reinstall, or storage pressure)
- Restore from a previously exported private key backup using Import