AllInKeys is a Python toolkit for discovering and monitoring cryptocurrency keys and addresses. It wraps GPU-accelerated tools like VanitySearch (CUDA/NVIDIA) and Vanitygen++ (OpenCL/AMD) and adds a modular pipeline for downloading balance lists, deriving altcoin addresses, checking matches, and notifying you via encrypted alerts or a live dashboard.
The key generator can run NVIDIA and AMD GPUs in parallel, producing separate output files for each backend so that one workflow can continue even if the other encounters an error.
This repository was recently opened to the public and remains a work in progress. Modules are actively being refactored and new features are added frequently.
🔐 Whether you're a security researcher, digital archaeologist, or white‑hat crypto enthusiast, AllInKeys is a modular suite for probing and understanding blockchain address keyspace.
- Python 3.9+
- Git
- Optional: CUDA/OpenCL drivers and
pyopencl
for GPU support
git clone https://github.com/mattysparkles/allinkeys.git
cd allinkeys
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
Copy .env.example
to .env
and fill in any credentials needed for alert channels (email, Telegram, Twilio, etc.).
-
Start the full pipeline
python main.py
The orchestration script launches key generation, backlog conversion, and any enabled alert or dashboard modules according to
config/settings.py
. -
Run individual modules
Each component can be invoked directly for isolated testing or debugging:
python -m core.keygen # GPU/CPU vanity key generation python -m core.altcoin_derive # Derive altcoin addresses from seeds python -m core.csv_checker # Compare generated addresses to funded lists python -m ui.dashboard_gui # Launch Tkinter dashboard only
-
Run in Docker
docker compose up --build
Use the Compose file to scale across multiple GPUs or hosts.
-
Run tests
pytest
allinkeys/
├── alerts/ # Alert sounds and assets
├── bin/ # Third‑party binaries (VanitySearch, Vanitygen++)
├── config/
│ ├── settings.py # Master configuration
│ ├── constants.py # Shared constants
│ └── coin_definitions.py # Column mapping per coin
├── core/
│ ├── keygen.py # Bitcoin key generation (VanitySearch wrapper)
│ ├── altcoin_derive.py # Seed → WIF + altcoin address derivation
│ ├── csv_checker.py # CSV address matching logic
│ ├── downloader.py # Balance list downloader
│ ├── backlog.py # Convert VanitySearch output to CSV
│ ├── gpu_scheduler.py # Assign work across GPUs
│ ├── gpu_selector.py # GPU role selection helpers
│ ├── alerts.py # PGP, desktop, Telegram, etc.
│ ├── checkpoint.py # Save/restore keygen progress
│ ├── logger.py # Central logging setup
│ ├── dashboard.py # Metrics for the GUI
│ └── utils/ # Misc helpers
├── ui/
│ └── dashboard_gui.py # Tkinter-based dashboard
├── utils/
│ ├── balance_checker.py
│ ├── file_utils.py
│ ├── network_utils.py
│ ├── pgp_utils.py
│ └── puzzle.py
├── Downloads/ # Downloaded funded address lists
├── logs/ # Runtime logs and checkpoints
├── output/
│ ├── csv/ # Converted address batches
│ ├── vanity_output/ # Raw VanitySearch batches (.txt)
│ └── mnemonic_output/ # Mnemonic mode output
├── .env.example
├── main.py # Orchestrates modules
└── requirements.txt
A Docker setup is included for running AllInKeys in a containerized environment.
docker build -t allinkeys .
docker run --gpus all allinkeys
The provided docker-compose.yml
supports multi‑GPU or clustered
deployments. Increase the number of replicas to distribute work across
GPUs or nodes:
docker compose up --scale allinkeys=2
All runtime behaviour is configured in config/settings.py
. Tweak this file to enable or disable modules, change GPU strategy, alert options and more.
Example snippet:
USE_GPU = True
ENABLE_ALERTS = True
ENABLE_BACKLOG_CONVERSION = True
CHECKPOINT_INTERVAL_SECONDS = 30
PGP_PUBLIC_KEY_PATH = os.path.join(BASE_DIR, "my_pgp_key.asc")
RETENTION_DAYS = 30 # how long to keep downloaded files
AllInKeys stores logs, downloads and output under the repository root by default. You can override these locations with environment variables:
Variable | Default | Description |
---|---|---|
ALLINKEYS_BASE_DIR |
repo root | Base directory used for relative paths |
ALLINKEYS_LOG_DIR |
BASE_DIR/logs |
Where log files and checkpoints are written |
ALLINKEYS_CSV_DIR |
BASE_DIR/output/csv |
Converted CSV output |
ALLINKEYS_DOWNLOADS_DIR |
BASE_DIR/Downloads |
Downloaded address lists |
ALLINKEYS_MATCHES_DIR |
BASE_DIR/matches |
Archive of matches and alerts |
ALLINKEYS_VANITY_TXT_DIR |
BASE_DIR/output/vanity_output |
VanitySearch text batches |
ALLINKEYS_MNEMONIC_TXT_DIR |
BASE_DIR/output/mnemonic_output |
Mnemonic mode output |
Example:
export ALLINKEYS_LOG_DIR=/var/tmp/allinkeys/logs
export ALLINKEYS_CSV_DIR=/data/allinkeys/csv
python main.py
python main.py
The default run will:
- Restore or create checkpoints
- Download funded address lists
- Start the GUI dashboard
- Launch key generation and CSV monitoring
- Convert VanitySearch backlog to CSV
- Send match alerts if enabled
python main.py --help
displays all flags. Common examples:
Flag | Description |
---|---|
--skip-backlog |
Start without backlog conversion |
--no-dashboard |
Do not launch the GUI dashboard |
--dashboard-password <pw> |
Protect dashboard with password pw |
--skip-downloads |
Skip downloading balance files |
--headless |
Run without any GUI components |
--match-test |
Trigger a fake match alert on startup |
--purge |
Delete old downloaded files and exit |
--only <coins> |
Restrict processing to coin flow(s); comma-separated list |
--addr-format {compressed,uncompressed} |
BTC-only: choose address format |
--compressed / --uncompressed |
BTC-only convenience flags overriding --addr-format |
--all |
BTC-only: use "all BTC addresses ever used" range mode |
--funded |
BTC-only: use daily funded BTC list |
--puzzle N |
BTC puzzle mode for puzzle number N |
--every |
With --puzzle : keep generic 1** prefix |
--target |
With --puzzle : target specific puzzle address (default) |
--chunk INDEX |
With --puzzle : start at chunk INDEX (0-based) |
Use the Bitcoin puzzle challenge ranges by supplying --puzzle
with a puzzle number.
The generator targets the published address by default (--target
); use --every
to keep the generic 1**
prefix and search the entire range. Puzzle mode
automatically enables compressed addresses and is typically paired with
--only btc
to run a lightweight search.
Puzzle ranges are divided into ~1M-key chunks and tracked in a SQLite database
(logs/work_queue.db
) so multiple workers do not overlap. Progress within a
chunk is saved to logs/puzzleN_checkpoint.json
, enabling restart after
interruptions. Pass --chunk
with a zero-based index to claim a specific
starting chunk.
python main.py --only btc --puzzle 71 # target puzzle 71 address
python main.py --only btc --puzzle 71 --every # search full puzzle range
python main.py --only btc --puzzle 71 --chunk 5 # resume at chunk 5
AllInKeys can also generate BIP‑39 mnemonics and derive keys directly
without running VanitySearch. Enable it with --mnemonic
and select the
mnemonic length via flags like --12words
or --24words
. Output files
are written to output/mnemonic_output/
. All related options are grouped under
Mnemonic Mode in python main.py --help
.
Example invocations:
python main.py --mnemonic --12words # 12‑word mnemonic → BTC address
python main.py --mnemonic --24words --coins btc,eth --atomic # BTC + ETH using Atomic paths
Additional options mirror the specification:
--bip39
(default) or--custom-words-file <path>
choose the word list- Language options
--spanish
,--french
,--italian
,--japanese
,--korean
,--czech
,--portuguese
,--chinese
,--chinese-simple
select a BIP‑39 wordlist --coins btc,eth
or--allcoins
choose which coins to derive--atomic
,--ledger
,--trezor
,--coinomi
,--trust
wallet path presets--path
,--btc-path
,--eth-path
, … supply explicit derivation paths--rng-seed <n>
deterministic mnemonic generation for testing--gpu
/--no-gpu
toggle OpenCL acceleration (falls back to CPU)- Performance controls:
--batch-size
,--threads
,--rate-limit
,--progress-interval
Feature | Module | Config Toggle / Notes |
---|---|---|
GPU Vanity Key Generation | core/keygen.py |
USE_GPU , VANITY_PATTERN , etc. |
Altcoin Address Derivation | core/altcoin_derive.py |
ENABLE_ALTCOIN_DERIVATION |
CSV Address Checking | core/csv_checker.py |
ENABLE_DAY_ONE_CHECK , ENABLE_UNIQUE_RECHECK |
Daily Download of Lists | core/downloader.py |
auto-enabled |
Vanity Output → CSV Backlog | core/backlog.py |
ENABLE_BACKLOG_CONVERSION |
GPU Scheduling | core/gpu_scheduler.py |
GPU_STRATEGY |
GPU Role Assignment | core/gpu_selector.py |
VANITY_GPU_INDEX , ALTCOIN_GPUS_INDEX |
Alerts (PGP, audio, popup...) | core/alerts.py |
ENABLE_ALERTS , PGP_PUBLIC_KEY_PATH |
Live System Dashboard | ui/dashboard_gui.py |
ENABLE_DASHBOARD , ENABLE_GUI |
Logging | core/logger.py |
LOG_LEVEL , LOG_TO_FILE |
Checkpoint Save/Restore | core/checkpoint.py |
CHECKPOINT_INTERVAL_SECONDS |
- 🔊 Audio file alert (
.wav
,.mp3
) - 🖥 Desktop popup window
- 🔐 PGP‑encrypted email (SMTP)
- 📩 Telegram bot
- 📱 SMS / phone call via Twilio
- 💬 Discord webhook
- 🏠 Home Assistant integration
- ☁️ Upload match files to iCloud, Dropbox, Google Drive
Each alert channel can enforce its own cooldown. Set DEFAULT_ALERT_RATE_LIMIT
(in seconds) in your .env
to apply a global limit or override a specific
channel with <CHANNEL>_ALERT_RATE_LIMIT
— for example,
EMAIL_ALERT_RATE_LIMIT=120
limits email alerts to once every two minutes.
Some services allow multiple API keys. Provide comma‑separated lists in the
.env
using the plural form of the variable name:
TELEGRAM_BOT_TOKENS=key1,key2
TWILIO_SIDS=sid1,sid2
TWILIO_AUTH_TOKENS=token1,token2
At runtime you can rotate to the next key without restarting:
from config import settings
settings.rotate_api_keys()
Future alerts will use the new credentials automatically.
gpg --armor --export you@example.com > my_pgp_key.asc
Then set in settings.py
:
ENABLE_PGP = True
PGP_PUBLIC_KEY_PATH = os.path.join(BASE_DIR, "my_pgp_key.asc")
- Set
OUTPUT_ENCRYPTION=pgp
to stream VanitySearch and match logs through your PGP public key (PGP_PUBLIC_KEY_PATH
). - Set
OUTPUT_ENCRYPTION=aes
withAES_PASSPHRASE
to AES‑GCM encrypt those files. - Use
secure_delete(path)
fromutils.file_utils
to overwrite and remove sensitive data.
- Python 3.9+
- PGPy for OpenPGP
- VanitySearch for GPU keygen
- PyInstaller (optional, for
.exe
) - Tkinter + psutil for dashboard
pip install pyinstaller
pyinstaller --onefile main.py
Produces dist/main.exe
— a standalone binary.
Coin | Address |
---|---|
BTC | 18RWVyEciKq8NLz5Q1uEzNGXzTs5ivo37y |
DOGE | DPoHJNbYHEuvNHyCFcUnvtTVmRDMNgnAs5 |
ETH | 0xCb8B2937D60c47438562A2E53d08B85865B57741 |
- Added
env_path
helper and migrated many modules topathlib
-based paths - Introduced
--purge
command with dry-run for cleaning old downloads - Added opt-in telemetry module and consent logging with alert redaction
- Added Docker support and compose configuration
- Implemented dashboard authentication and premium licensing module
- Added plugin entry point system and templates
- Improved GPU detection, selection, and scheduler tests
- Enforced HTTPS downloads with checksum verification
- Added processing throughput metrics and SQLite fallback for funded address lookup
- Stream VanitySearch output to track seeds and expanded binary detection
- Enhanced mnemonic mode with full BIP-39 language support and multilingual output
This project includes a precompiled binary of VanitySearch, a GPU‑accelerated Bitcoin vanity address generator.
bin/VanitySearch.exe
comes from a third‑party MIT‑licensed fork. See third_party_licenses.md
for details.
- Original project: VanitySearch by Jean-Luc Pons
- License: MIT
- Binary origin: Third‑party fork with deterministic seed search
- Compiler: Provided by the forked project
We make no claims or guarantees about the performance, security or accuracy of the included VanitySearch binary. Use at your own discretion.
If you are the author of the specific fork used and would like attribution or changes, feel free to open an issue or PR.
License Notice: The original VanitySearch project and most forks are distributed under the MIT License. A copy of the license is included below.
AllInKeys is provided for educational and research use only. The authors do not condone or support illegal behaviour. Use responsibly.
🧠 Created with love and paranoia by Sparkles