I built a high-performance desktop tool that generates custom Ethereum addresses with your chosen prefix and/or suffix. Instead of settling for a random address like 0x7a3b..., you can generate one like 0xDEAD... or 0x...CAFE — a vanity address.
Here's what makes it different from browser-based generators: it's fast, offline, and your private keys never leave your machine.
What Is a Vanity Address?
Every Ethereum address is a 40-character hex string. A vanity address is one where part of that string matches a pattern you choose. For example:
- Prefix "abc" → 0xABC91f7d3a8e...
- Suffix "dead" → 0x7f3b91c8...DEAD
- Both → 0xABC...DEAD
The longer the pattern, the harder it is to find. A 1-character prefix takes milliseconds. A 6-character prefix could take minutes. The app handles all of this with brute-force speed.
Technical Specs
- Crypto Engine: Native C++ DLL
- Elliptic Curve: secp256k1 (same as Ethereum and Bitcoin)
- Hash Algorithm: Keccak-256 (Ethereum's variant, not standard SHA-3)
- Random Source: OS-level CSPRNG (BCryptGenRandom on Windows)
- UI Framework: WPF on .NET 8
- Threading: All available CPU cores (configurable)
- Deployment: Self-contained single-file EXE + native DLL
- Dependencies: Zero — no .NET runtime install required
- OS Support: Windows 10/11 (x64)
- Binary Size: ~160 MB (EXE) + ~1.3 MB (DLL)
Key Features
Multi-Core Brute Force
The C++ engine spawns one worker thread per CPU core. Each thread pulls from a 4KB pool of OS-random bytes, generates secp256k1 keypairs, hashes the public key with Keccak-256, and checks the resulting address against your pattern. On a modern CPU, this runs at hundreds of thousands of addresses per second.
Multiple Results Mode
Unlike most vanity generators that stop at the first match, this one lets you set a target count. For example, find 10 matching addresses. All results appear in a scrollable list, and you can pick the one you like best.
Real-Time Performance Dashboard
Live counters showing total attempts, speed in addresses per second, elapsed time, and a difficulty estimate with per-core ETA breakdown.
QR Code Generation
Select any result and a QR code for the address is generated instantly. Useful for mobile wallet imports or sharing your address.
Search History
All found addresses persist across searches within the session. Nothing is lost if you start a new search with a different pattern.
MetaMask-Compatible Export
One-click export to encrypted Keystore V3 JSON with password protection. Import directly into MetaMask, MyEtherWallet, or any wallet that supports JSON keystore files.
Verify and Import
Paste any private key to derive its Ethereum address and verify it matches. Useful for double-checking results before sending any funds.
Security
This was designed with security as a first-class concern.
Fully Offline — No network calls. No telemetry. No cloud. Everything runs locally on your machine.
Secure Memory Wipe — Private key buffers in the C++ engine are zeroed using volatile writes after use. This prevents keys from lingering in RAM after the search ends.
Auto-Clear Timer — After 5 minutes of inactivity, all private keys, addresses, and form fields are automatically wiped from the UI. The countdown is visible on screen.
OS-Level Randomness — Keys are generated from Windows CSPRNG (BCryptGenRandom), not pseudo-random number generators.
No Key Logging — The app writes nothing to disk unless you explicitly export a keystore JSON file.
Difficulty Reference
Finding a 1-character pattern takes about 16 attempts — instant.
A 2-character pattern takes about 256 attempts — still instant.
A 3-character pattern takes about 4,096 attempts — under 1 second.
A 4-character pattern takes about 65,536 attempts — a few seconds.
A 5-character pattern takes about 1,048,576 attempts — roughly 10 seconds.
A 6-character pattern takes about 16,777,216 attempts — 2 to 5 minutes.
A 7-character pattern takes about 268,435,456 attempts — 30 minutes to 1 hour.
An 8-character pattern takes about 4,294,967,296 attempts — 6 to 12 hours.
These times are based on approximately 500,000 addresses per second on a modern 8-core CPU. Prefix and suffix lengths are additive, so wanting both a 4-character prefix and a 4-character suffix is equivalent to an 8-character search.
Architecture
The application is split into two layers. The top layer is the WPF desktop UI built on .NET 8, handling the dark theme interface, cards, QR codes, and the auto-clear timer. The bottom layer is vanity_engine.dll, a native C++ library that handles all the cryptography — secp256k1 key generation, Keccak-256 hashing, multithreading, secure memory wipe, and OS random number generation. The two layers communicate through P/Invoke with callbacks marshaled safely to the UI thread.
The UI and engine are fully separated. If the engine encounters an error, the UI stays alive and reports the issue gracefully.
How to Use
- Launch EthVanityGui.exe (keep vanity_engine.dll in the same folder).
- Enter a hex prefix such as "dead" and/or a suffix.
- Set thread count (0 means all cores) and how many results you want.
- Click Start Search.
- Wait for matches to appear in the results list, then select one.
- Copy the address or private key, or export as an encrypted JSON keystore.
Technology Stack
The core engine is written in C++17 and compiled with MSVC using a static CRT. It uses libsecp256k1, the same elliptic curve library used by Bitcoin Core, along with Keccak-256 for Ethereum address derivation. The desktop UI is built with C# and WPF on .NET 8. QR code generation is handled by QRCoder, and keystore encryption uses Nethereum for MetaMask compatibility. The final app is published as a self-contained single-file executable, so no .NET runtime installation is needed.
Two files. That's it. Drop EthVanityGui.exe and vanity_engine.dll in a folder and run. Windows 10/11, 64-bit.
Important: Always verify a generated address by importing the private key into a wallet and confirming the address matches before sending any funds. The app includes a built-in verify tool for exactly this purpose. Use at your own risk.

Comments
Post a Comment