███████╗████████╗██╗ ██╗███████╗██████╗ ██╗ ██╗ █████╗ ██╗ ██╗██╗ ████████╗██████╗
██╔════╝╚══██╔══╝██║ ██║██╔════╝██╔══██╗██║ ██║██╔══██╗██║ ██║██║ ╚══██╔══╝╚════██╗
█████╗ ██║ ███████║█████╗ ██████╔╝██║ ██║███████║██║ ██║██║ ██║ █████╔╝
██╔══╝ ██║ ██╔══██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██╔══██║██║ ██║██║ ██║ ╚═══██╗
███████╗ ██║ ██║ ██║███████╗██║ ██║ ╚████╔╝ ██║ ██║╚██████╔╝███████╗██║ ██████╔╝
╚══════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝
A secure, feature-rich, and user-friendly Ethereum-only command-line wallet. Built with TypeScript and powered by ethers.js, EtherVault3 provides enterprise-grade security with an intuitive CLI experience.
- AES-256-GCM Encryption: Military-grade encryption for all stored data
- PBKDF2 Key Derivation: 100,000 iterations with SHA-512 for master password
- Secure Storage: All sensitive data encrypted at rest
- Master Password Protection: Single password protects all wallets
- Memory-Only Keys: Private keys never stored in plaintext
- Hierarchical Deterministic: Generate unlimited accounts from single seed
- BIP44 Standard: Industry-standard derivation paths (
m/44'/60'/0'/0/n) - Multi-Account Management: Create and manage multiple accounts per wallet
- Mnemonic Import/Export: Support for 12/24 word seed phrases
- Send Transactions: Native ETH transfers with gas optimization
- Balance Checking: Real-time balance queries across networks
- Transaction History: Complete transaction tracking and analytics
- Gas Estimation: Automatic gas price optimization
- Multi-Network Support: Ethereum, Sepolia, Goerli testnets
- Airdrop Tokens: Bulk token distribution to multiple addresses
- Account Discovery: Automatic detection of existing accounts from mnemonic
- Transaction Analytics: Success rates, gas usage, and performance metrics
- Wallet Management: Create, import, delete, and organize wallets
- Secrets Management: Secure viewing of private keys and mnemonics
- Ethereum Mainnet: Production-ready mainnet support
- Sepolia Testnet: Latest Ethereum testnet
- Goerli Testnet: Legacy testnet support
- Custom RPC: Support for custom network configurations
- Node.js 18.0 or higher
- npm 8.0 or higher
- Git (for cloning)
# Clone the repository
git clone https://github.com/RAHULDINDIGALA-32/ethervault3-cli-wallet.git
# Navigate to project directory
cd ethervault3-cli-wallet
# Install dependencies
npm install
# Build the project
npm run build
# Start the wallet
npm start- Run the application:
npm start
-
Create your profile:
- Enter a username
- Set a strong master password (minimum 8 characters)
- Confirm your password
-
Create or import a wallet:
- Create New: Generate a new HD wallet with mnemonic
- Import Existing: Import using 12/24 word mnemonic phrase
-
Start using your wallet:
- Check balances
- Send transactions
- Manage multiple accounts
- Use advanced features like airdrops
Linux/macOS (latest release tarball)
curl -fsSL https://raw.githubusercontent.com/RAHULDINDIGALA-32/ethervault3-cli-wallet/main/scripts/install.sh -o install.sh \
&& chmod +x install.sh \
&& ./install.shWindows (PowerShell, latest release tarball)
irm https://raw.githubusercontent.com/RAHULDINDIGALA-32/ethervault3-cli-wallet/main/scripts/install.ps1 | iexPin a specific version (example v1.0.1):
- Linux/macOS:
./install.sh v1.0.1→ installshttps://github.com/RAHULDINDIGALA-32/ethervault3-cli-wallet/releases/download/v1.0.1/ethervault3-cli-1.0.1.tgz - Windows:
irm https://raw.githubusercontent.com/RAHULDINDIGALA-32/ethervault3-cli-wallet/main/scripts/install.ps1 | iex; install.ps1 -Tag v1.0.1
After installation:
ethervault3
# or
ethervault3-cliNote:
- Requires Node.js >= 18 and npm.
- Create a
.envwithINFURA_PROJECT_ID=...to enable network access.
By default, EtherVault3 uses public RPC endpoints (no keys required). These are fine for light usage but can be slow or rate‑limited. For a smoother experience, add your own provider key or custom RPC.
- Quick start (no key)
- It “just works” using public RPCs. If you see rate‑limits or intermittent network errors, proceed to step 2 or 3.
- Add your own provider key (Infura example)
- Create a free project:
https://app.infura.io - Copy your Project ID
- Create a
.envfile in the directory where you run the CLI and add:
INFURA_PROJECT_ID=your_infura_project_id_here- Restart the CLI. Networks will resolve to:
- mainnet:
https://mainnet.infura.io/v3/${INFURA_PROJECT_ID} - sepolia:
https://sepolia.infura.io/v3/${INFURA_PROJECT_ID} - goerli:
https://goerli.infura.io/v3/${INFURA_PROJECT_ID}
- mainnet:
- Use your own custom RPC(s)
- Add any HTTPS RPC URL(s) via environment variables (highest priority):
CUSTOM_MAINNET_RPC=https://your-mainnet-rpc.example
CUSTOM_SEPOLIA_RPC=https://your-sepolia-rpc.example
CUSTOM_GOERLI_RPC=https://your-goerli-rpc.example- These override both public fallbacks and Infura.
How resolution works (per network)
-
CUSTOM_*_RPC(if set)
-
INFURA_PROJECT_ID(if set)
-
- Public fallback (no key) – best‑effort, may rate‑limit
Troubleshooting
- If you hit 429/rate limits or provider errors:
- Add
INFURA_PROJECT_IDor set aCUSTOM_*_RPCin.env - Check internet/firewall/VPN settings
- Run again after a short delay (public RPCs throttle)
- Add
┌─────────────────────────────────────────────────────────────────────────────┐
│ Available Options │
├─────────────────────────────────────────────────────────────────────────────┤
│ 1. 🆕 Create New Wallet │
│ 2. 📥 Import Wallet from Mnemonic │
│ 3. 🗂️ Manage Wallet │
│ 4. 💰 Check Balance │
│ 5. 📤 Send Transaction │
│ 6. 📋 Transaction History │
│ 7. ⚙️ Settings │
│ 8. ❌ Exit Application │
└─────────────────────────────────────────────────────────────────────────────┘
- Select "Create New Wallet" from main menu
- Choose a network (Sepolia, Goerli, Mainnet)
- Wallet generates with:
- 12/24 word mnemonic phrase
- First account (index 0)
- Private/public key pair
- Save the wallet for future use
- Select "Import Wallet from Mnemonic"
- Enter your 12/24 word mnemonic phrase
- Choose network for account discovery
- System automatically finds existing accounts
- Save all discovered accounts as a single wallet
- Go to "Manage Wallet" → Select wallet
- View all accounts in the wallet
- Create New Account: Generate additional accounts from same mnemonic
- Switch Account: Change active account
- View Secrets: Access private keys and mnemonic (password required)
- From Main Menu: Option 5 (requires private key input)
- From Account: Option 3 → Select Account → Send Transaction
- Enter recipient address and amount
- Set gas price (or use automatic)
- Confirm transaction details
- Transaction is automatically recorded in history
- Go to "Manage Wallet" → Select Account → "Airdrop Tokens"
- Enter recipient addresses (comma-separated, max 50)
- Set amount per recipient
- Review cost breakdown and gas estimates
- Confirm and execute
- Monitor real-time progress
- View detailed results and transaction hashes
- Quick Check: Main menu option 4 (any address)
- Account Balance: Through wallet management
- Real-time balance queries across all supported networks
- Single Password: Protects all wallets and sensitive data
- Strong Encryption: AES-256-GCM with PBKDF2 key derivation
- Memory-Only: Password never stored, only derived key in memory
- Session Management: Automatic re-authentication when needed
- Encrypted Storage: All data encrypted at rest
- Secure Files: Restricted file permissions (600)
- No Plaintext: Private keys and mnemonics never stored unencrypted
- Salt Protection: Unique salt per installation
ethervault3-cli/
├── src/
│ ├── index.ts # Main application entry point
│ ├── wallet.ts # Wallet operations and transactions
│ ├── storage.ts # Secure storage and encryption
│ ├── networks.ts # Network configurations
│ ├── logger.ts # Centralized logging utility
│ └── utils.ts # Utility functions
├── dist/ # Compiled JavaScript output
├── .wallet-storage/ # Encrypted user data (created at runtime)
├── package.json
├── tsconfig.json
└── README.md
# Development
npm run build # Compile TypeScript to JavaScript
npm start # Build and run the application
npm run dev # Run in development mode (if configured)
# Support/Reset (Development Only)
npm run reset:local # DANGEROUS: Wipes .wallet-storage (uses --yes flag)
# Type Checking
npx tsc --noEmit # Check TypeScript without compilation
# Dependencies
npm install # Install all dependencies
npm update # Update dependenciesFor local development and support, a reset script is provided to wipe the local wallet storage.
- Location:
scripts/reset.js - Behavior: Deletes the
.wallet-storagedirectory after a--yesconfirmation flag - Usage:
node scripts/reset.js --yes
# or
npm run reset:localImportant:
- This script is NOT included in the npm package by default (GitHub only)
- It is destructive – use only in a dev/support context
# Clone repository
git clone https://github.com/RAHULDINDIGALA-32/ethervault3-cli-wallet.git
# Navigate to project directory
cd ethervault3-cli.git
# Install dependencies
npm install
# Build the project
npm run build
# Run the application
npm startCreate a .env file in the project root:
# Infura Project ID (for network access)
INFURA_PROJECT_ID=your_infura_project_id_here
# Optional: Custom RPC URLs
CUSTOM_RPC_URL=https://your-custom-rpc-url.comNetworks are configured in src/networks.ts:
export const NETWORKS: { [key: string]: string } = {
sepolia: `https://sepolia.infura.io/v3/${INFURA_PROJECT_ID}`,
goerli: `https://goerli.infura.io/v3/${INFURA_PROJECT_ID}`,
mainnet: `https://mainnet.infura.io/v3/${INFURA_PROJECT_ID}`,
};This project includes a centralized, industry-grade logging utility to ensure consistent, user-friendly, and structured logs across the CLI.
- Consistent, human-friendly messages
- Structured categories and levels for easy filtering
- No sensitive data is logged (never logs private keys/mnemonics)
- Progress helpers and transaction status helpers
src/logger.ts
- AUTH, WALLET, TRANSACTION, STORAGE, NETWORK, UI, SECURITY, SYSTEM
- DEBUG, INFO, WARN, ERROR
import { log, LogCategory } from "./logger.js";
// Informational
log.info(LogCategory.WALLET, "Creating new wallet");
// Success
log.operationSuccess("Wallet Creation");
// Warnings and errors
log.warn(LogCategory.AUTH, "1 attempt remaining");
log.error(LogCategory.NETWORK, "RPC request failed", err);
// User-friendly error wrapper
log.userError("Send Transaction", "Insufficient balance. Please check your balance and try again.", err);
// Transaction lifecycle
log.transactionSent(tx.hash, toAddress, amount);
log.transactionConfirmed(tx.hash, receipt.blockNumber, receipt.gasUsed.toString());
// Progress and airdrops
log.progress("Sending transaction...");
log.airdropProgress(current, total, recipient);
log.airdropComplete(successful, failed, total);Logging behavior can be tuned via environment variables (optional):
# Set Node environment: production | development
NODE_ENV=productionAdditional formatting options (timestamps, categories, emojis) can be toggled inside src/logger.ts if you want stricter or more verbose output.
- Windows:
\.wallet-storage\ - Linux/Mac:
~/.wallet-storage/(.wallet-storage/located in the current working directory where you run the application)
Files:
user.json- User profile (plaintext)salt.enc- Encryption salt (hex)wallets.enc- Encrypted wallet datatransactions.enc- Encrypted transaction historyconfig.json- Application settings
-
Strong Master Password:
- Use at least 12 characters
- Include uppercase, lowercase, numbers, symbols
- Never share or write down
-
Secure Environment:
- Run on trusted machines only
- Keep your system updated
- Use antivirus software
-
Backup Strategy:
- Save mnemonic phrases securely
- Test recovery process
- Store backups in multiple secure locations
-
Network Security:
- Use HTTPS RPC endpoints
- Verify network connections
- Be cautious with public WiFi
- Algorithm: AES-256-GCM
- Key Derivation: PBKDF2 with SHA-512, 100,000 iterations
- Salt: 16-byte random salt per installation
- Authentication: Additional authenticated data (AAD)
- Cause: Authentication state lost
- Solution: Restart application and re-enter password
- Cause: Wrong master password or corrupted data
- Solution: Verify password, check data integrity
- Cause: Not enough ETH for transaction + gas
- Solution: Check balance, reduce amount, or add funds
- Cause: RPC endpoint problems
- Solution: Check internet connection, verify Infura ID
- Check Issues: GitHub Issues
- Read Documentation: This README and code comments
- Create Issue: Provide detailed error information
We welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open a Pull Request
- Follow TypeScript best practices
- Add comprehensive error handling
- Include unit tests for new features
- Update documentation
- Follow existing code style
This project is licensed under the MIT License - see the LICENSE file for details.
RAHUL DINDIGALA
- GitHub: @RAHULDINDIGALA-32
- Web3 Developer
- Blockchain Enthusiast
- ethers.js - Ethereum library
- inquirer.js - Interactive CLI prompts
- Node.js - Runtime environment
- TypeScript - Type safety
- Chalk - Terminal string styling
- Web3 Community - Inspiration and support
- Features: 15+ major features
- Security: Military-grade encryption
- Networks: 3+ supported networks
- Accounts: Unlimited HD accounts
- Transactions: Full history tracking
This application is provided "as is" without warranty. Users are responsible for:
- Securing their private keys and passwords
- Verifying transaction details before confirmation
- Understanding the risks of cryptocurrency transactions
- Complying with local laws and regulations
Use at your own risk. The developers are not responsible for any loss of funds.
