A Python-based terminal application for creating and managing Solana cold wallets on USB drives. This tool enables offline transaction signing for maximum security.
- USB Detection & Flashing: Detect USB devices and flash them with a minimal offline Linux OS
- Wallet Generation: Create Solana keypairs with Ed25519 cryptography
- Offline Signing: Sign transactions on air-gapped devices without network access
- Transaction Management: Create, sign, and broadcast SOL transfer transactions
- Balance Checking: Query wallet balances via Solana RPC
- Devnet Airdrop: Request test SOL on Devnet for testing
- Python 3.11+
- Windows or Linux operating system
- Root/Administrator privileges (for USB operations)
Before launching VS Code, install the required Python packages by running this command in your terminal:
pip install rich questionary solana solders pynacl httpx aiofiles base58- Clone this repository
- Open the project folder in VS Code
- If you haven't installed dependencies yet, open the VS Code terminal (
Ctrl+`) and run:
pip install rich questionary solana solders pynacl httpx aiofiles base58- Run the application:
python main.pyNote for Linux users: USB operations (flashing, mounting) may require root privileges:
sudo python main.py- Detect USB Devices - Scan and list connected USB drives
- Flash Cold Wallet OS to USB - Create a bootable offline wallet USB
- Generate New Wallet (Local) - Create a new Solana keypair locally
- View Wallet Information - Check wallet public key and balance
- Create Unsigned Transaction - Build a SOL transfer transaction
- Sign Transaction (Offline) - Sign a transaction with your private key
- Broadcast Signed Transaction - Send a signed transaction to the network
- Request Devnet Airdrop - Get free test SOL on Devnet
- Network Status - Check Solana RPC connection status
- Generate a wallet (Option 3)
- Request airdrop to fund the wallet (Option 8)
- Create unsigned transaction specifying recipient and amount (Option 5)
- Sign the transaction with your keypair (Option 6)
- Broadcast the signed transaction to the network (Option 7)
For true offline signing:
- Flash a USB with the cold wallet OS (Option 2)
- Boot from the USB on an air-gapped machine
- Generate wallet on the USB (keys never leave the device)
- Copy unsigned transactions to
/inboxon the USB - Sign using the
sign_tx.shscript on the USB - Copy signed transactions from
/outboxback to online host - Broadcast from the online host
.
├── main.py # Main CLI entry point
├── config.py # Configuration settings
├── src/
│ ├── __init__.py
│ ├── ui.py # Terminal UI components
│ ├── wallet.py # Wallet/keypair management
│ ├── network.py # Solana RPC communication
│ ├── transaction.py # Transaction creation/signing
│ ├── usb.py # USB device detection/mounting
│ └── iso_builder.py # Bootable ISO creation
├── local_wallet/ # Local wallet storage
│ ├── keypair.json # Private keypair (KEEP SECURE!)
│ ├── pubkey.txt # Public key
│ └── transactions/ # Transaction files
└── README.md
- Private keys are stored in
keypair.json- NEVER share this file - The cold wallet USB has no network drivers - private keys cannot be exfiltrated
- Always verify transaction details before signing
- Use Devnet for testing before moving to Mainnet
Currently configured for Devnet. To switch to Mainnet, edit config.py:
# For Mainnet
SOLANA_RPC_URL = "https://api.mainnet-beta.solana.com"
# For Devnet (default)
SOLANA_RPC_URL = "https://api.devnet.solana.com"- USB flashing requires Linux with root privileges
- No hardware wallet integration (planned)
- No staking support (planned)
MIT License