Skip to main content

wallet-gen

wallet-gen is an offline tool for generating Monolythium wallets in bulk. It is intended for operators who need to create multiple wallets for distributions, exchange integrations, or testnet genesis preparation.

Use Cases

  • Exchange integrations: Generate deposit addresses for users
  • Token distributions: Create wallets for airdrops or campaigns
  • Testnet genesis prep: Generate genesis accounts for testing
  • Development: Create test accounts for automation
Security

Private keys are sensitive. Never share them, commit them to version control, or expose them in logs.

Installation

Download the latest release from github.com/mono-experimental/wallet-gen/releases.

Platform Binaries

PlatformBinary
Windowswalletgen-windows-amd64.exe
macOS (Intel)walletgen-darwin-amd64
macOS (Apple Silicon)walletgen-darwin-arm64
Linuxwalletgen-linux-amd64

macOS/Linux Setup

chmod +x walletgen-darwin-arm64
./walletgen-darwin-arm64 --help

Usage Methods

Method 1: Windows Double-Click Wizard

On Windows, double-click walletgen-windows-amd64.exe to launch an interactive wizard:

  1. Enter the number of wallets to generate
  2. Choose output format (raw or encrypted)
  3. If encrypted, enter a password
  4. Output file is created in the current directory

Method 2: CLI Flags

For scripting and automation:

# Generate 10 wallets with raw private keys
./walletgen --count 10 --output wallets.csv

# Generate 100 wallets with encrypted keystores
./walletgen --count 100 --output wallets.csv --encrypt --password-file password.txt

Method 3: Helper Scripts

For convenience, helper scripts are provided:

PlatformScript
macOSscripts/wallet-gen.command (double-click)
Linux/macOSscripts/wallet-gen.sh

CLI Options

FlagDescriptionDefault
--count, -nNumber of wallets to generate1
--output, -oOutput file pathwallets.csv
--encryptEnable keystore V3 encryptionfalse
--password-filePath to file containing password(none)
--passwordPassword for encryption (interactive prompt if not specified)(none)
--quiet, -qSuppress progress outputfalse

Output Format

Raw Mode (Default)

CSV format with columns:

bech32,evm,privatekey
mono1abc...,0x123...,<redacted>
mono1def...,0x456...,<redacted>
ColumnDescription
bech32Cosmos bech32 address (mono1...)
evmEVM hex address (0x...)
privatekeyRaw hex private key

Encrypted Mode (--encrypt)

When encryption is enabled:

  • Private keys are encrypted using Ethereum Keystore V3 format
  • Each wallet's keystore JSON is saved in an ./keystores/ directory
  • The CSV contains only addresses and keystore filenames:
bech32,evm,keystore_file
mono1abc...,0x123...,keystore-0x123....json

Security Recommendations

Raw Private Keys

  • Delete the output file after importing keys to your system
  • Never store raw keys in plain text long-term
  • Use encrypted mode for production workflows

Encrypted Mode

  • Use a strong, unique password
  • Store the password securely (password manager, HSM, etc.)
  • The password file is plaintext and should be deleted after use

General

  • Run on an air-gapped machine if possible
  • Verify the binary hash before running
  • Do not use online generators for production keys

Example Workflows

Exchange Deposit Addresses

# Generate 1000 addresses for user deposits
./walletgen --count 1000 --output deposits.csv --encrypt --password-file secret.txt

# Import keystores to your hot wallet system
# Delete secret.txt after import

Testnet Genesis Accounts

# Generate 10 accounts for genesis
./walletgen --count 10 --output genesis-accounts.csv

# Use bech32 addresses in genesis.json accounts
# Fund with initial balances

Development Test Wallets

# Quick generation for local testing
./walletgen --count 5 --output test-wallets.csv

Verifying Installation

Check the version:

./walletgen --version

Verify addresses are valid:

# Generated addresses should be queryable (once funded)
monod query bank balances mono1abc...