Skip to main content
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.
  1. Generate a classic token with the read:packages scope
  2. Add the following to $HOME/.gradle/gradle.properties:
savaGithubPackagesUsername=GITHUB_USERNAME
savaGithubPackagesPassword=GITHUB_TOKEN

Installation and Compilation

Compile the vanity address generator:
./sava-vanity/compile.sh

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

./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

ArgumentAliasDefaultDescription
jvmArgsjvm-server -Xms64M -Xmx128MJVM arguments for memory and server mode
screen-0Enable screen session management (0 or 1)
numThreadsntHalf of system CPUsNumber of threads to use for generation
numKeysnk1Number of matching keys to generate
keyFormatkfbase64KeyPairOutput format for generated keys
checkFoundcf131072Iterations between checking if required keys are found
logDelayld5SDelay between progress log updates
outDiro.keysDirectory to save generated keys
sigVerifysvfalseEnable signature verification

Prefix Options

ArgumentAliasDefaultDescription
prefixp""Required prefix for the generated address
pCaseSensitivepcfalseEnable case-sensitive prefix matching
p1337NumberspntrueAllow numbers to replace similar letters (e.g., 3→E, 1→I)
p1337LetterspltrueAllow letters to replace similar numbers

Suffix Options

ArgumentAliasDefaultDescription
suffixs""Required suffix for the generated address
sCaseSensitivescfalseEnable case-sensitive suffix matching
s1337NumberssntrueAllow numbers to replace similar letters (e.g., 3→E, 1→I)
s1337LetterssltrueAllow 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).

Performance Tips

  1. Shorter is faster: Each additional character in your prefix/suffix increases generation time exponentially
  2. Use more threads: Set --numThreads to match your CPU core count for maximum performance
  3. Enable 1337 speak: Leaving p1337Numbers and p1337Letters enabled (default) increases match probability
  4. Case insensitive: Searching with pCaseSensitive=false (default) is significantly faster
  5. 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.

Build docs developers (and LLMs) love