The Sava Vanity Address Generator is a high-performance tool for creating Solana keypairs with custom prefixes or suffixes. This is useful for creating memorable or branded wallet addresses.
What It Does
The vanity address generator creates Solana keypairs by repeatedly generating random keypairs until it finds one whose public address matches your specified criteria. You can:
- Generate addresses with custom prefixes (e.g., addresses starting with “Sava”)
- Generate addresses with custom suffixes (e.g., addresses ending with “abc”)
- Use “1337 speak” character substitutions (e.g., “3” for “E”, “1” for “I”)
- Control case sensitivity
- Utilize multi-threading for faster generation
- Manage long-running sessions with screen support
Prerequisites
GitHub Access Token
You’ll need a GitHub Personal Access Token to access dependencies hosted on GitHub Package Repository.
- Generate a classic token with the
read:packages scope
- Add the following to
$HOME/.gradle/gradle.properties:
savaGithubPackagesUsername=GITHUB_USERNAME
savaGithubPackagesPassword=GITHUB_TOKEN
Installation and Compilation
Compile the vanity address generator:
Usage
Basic Usage
Generate an address with a prefix:
./sava-vanity/genKeys.sh --prefix="abc"
Generate an address with a suffix:
./sava-vanity/genKeys.sh --suffix="xyz"
Generate an address with both prefix and suffix:
./sava-vanity/genKeys.sh --prefix="Sava" --suffix="123"
At least one of prefix or suffix must be provided.
Advanced Examples
Case-Sensitive Search
./sava-vanity/genKeys.sh --prefix="Sava" --pCaseSensitive=true
Multiple Keys with Custom Thread Count
./sava-vanity/genKeys.sh --prefix="abc" --numKeys=5 --numThreads=8
With Screen for Long-Running Sessions
./sava-vanity/genKeys.sh --prefix="Sava" --screen=1
To detach from screen session: Ctrl+A then D
To re-attach: screen -r
Custom Output Directory
./sava-vanity/genKeys.sh --prefix="abc" --outDir="./my-keys"
Disable 1337 Speak Substitutions
./sava-vanity/genKeys.sh --prefix="elite" --p1337Numbers=false --p1337Letters=false
Command-Line Arguments
Run Control
| Argument | Alias | Default | Description |
|---|
jvmArgs | jvm | -server -Xms64M -Xmx128M | JVM arguments for memory and server mode |
screen | - | 0 | Enable screen session management (0 or 1) |
numThreads | nt | Half of system CPUs | Number of threads to use for generation |
numKeys | nk | 1 | Number of matching keys to generate |
keyFormat | kf | base64KeyPair | Output format for generated keys |
checkFound | cf | 131072 | Iterations between checking if required keys are found |
logDelay | ld | 5S | Delay between progress log updates |
outDir | o | .keys | Directory to save generated keys |
sigVerify | sv | false | Enable signature verification |
Prefix Options
| Argument | Alias | Default | Description |
|---|
prefix | p | "" | Required prefix for the generated address |
pCaseSensitive | pc | false | Enable case-sensitive prefix matching |
p1337Numbers | pn | true | Allow numbers to replace similar letters (e.g., 3→E, 1→I) |
p1337Letters | pl | true | Allow letters to replace similar numbers |
Suffix Options
| Argument | Alias | Default | Description |
|---|
suffix | s | "" | Required suffix for the generated address |
sCaseSensitive | sc | false | Enable case-sensitive suffix matching |
s1337Numbers | sn | true | Allow numbers to replace similar letters (e.g., 3→E, 1→I) |
s1337Letters | sl | true | Allow letters to replace similar numbers |
How It Works
Threading
- By default, the generator uses half of your system’s CPU cores
- Each thread independently generates and checks keypairs
- Every
checkFound iterations (default: 131072), each thread checks if the required number of keys has been found
1337 Speak Character Substitutions
When enabled, the generator allows visually similar character substitutions:
- p1337Numbers: Alphabetic characters can be replaced by similar numbers (e.g., searching for “ELITE” might match “3L1T3”)
- p1337Letters: Numbers can be replaced by similar letters
This significantly increases the chances of finding a match but may result in addresses that don’t exactly match your input string.
Screen Session Management
For long-running generation tasks (especially for longer prefixes/suffixes), you can use screen to manage the session:
./sava-vanity/genKeys.sh --prefix="YourPrefix" --screen=1
This allows you to:
- Detach from the session with
Ctrl+A then D
- Re-attach later with
screen -r
- Continue generation even if your remote SSH connection is lost
Output
Generated keypairs are saved to the specified output directory (default: .keys/) in the format specified by keyFormat (default: base64KeyPair).
- Shorter is faster: Each additional character in your prefix/suffix increases generation time exponentially
- Use more threads: Set
--numThreads to match your CPU core count for maximum performance
- Enable 1337 speak: Leaving
p1337Numbers and p1337Letters enabled (default) increases match probability
- Case insensitive: Searching with
pCaseSensitive=false (default) is significantly faster
- Adjust memory: For very high thread counts, increase JVM memory with
--jvmArgs="-server -Xms128M -Xmx256M"
Generating addresses with prefixes/suffixes longer than 4-5 characters can take a very long time, even with multiple threads. The difficulty increases exponentially with each additional character.