Marketplace has launched, further enabling blockchain developers! Learn more

How to Create a Custom Vanity Wallet Address using Solana CLI

September 23, 2022

Overview

Have you ever noticed that some Solana account addresses have defining prefixes or suffixes (e.g., DUSTawucrTsGU8hcqRdHDCbuYhCPADMLM2VcCb8VnFnQ)?

Example of Vanity URL - $DUST

That can't just be random, right? Correct! Solana's CLI has some powerful tools to generate your own custom Wallet address. In this guide, you will create your very own custom wallet address using Solana CLI and the grind tool.

What You Will Need

Set Up Your Project

Create a new project directory in your terminal with:

set up your project

Copy
mkdir custom-wallet
cd custom-wallet

Check that your Solana CLI tool is installed and up to date. In your terminal, enter:

set up your project

Copy
solana --version

To check for and install updates, in your terminal, enter:

set up your project

Copy
solana-install update

You should see something like this:

Solana CLI Update Complete


Let's get started.

Using Solana-Keygen

Solana CLI has a native command for creating new keypairs, Solana-Keygen. Solana-Keygen commands follow the following format:

using solana keygen

Copy
solana-keygen [OPTIONS] <SUBCOMMAND>

Options and Subcommands are both outlined in the help menu. You can check them and all of the functionality of Solana-Keygen by entering the help subcommand in your terminal:

using solana keygen

Copy
solana-keygen --help

You should see a help menu that looks something like this:

Solana CLI Help Menu


You should see a subcommand, grind. We will be using this to generate your custom wallet. This subcommand effectively generates keys until it finds one that meets your search criteria. Let's test it out!

using solana keygen

Copy
solana-keygen grind --starts-with a23:1

You should see a response like this in your terminal:

using solana keygen

Copy
custom-wallet % solana-keygen grind --starts-with a23:1
Searching with 10 threads for:
        1 pubkey that starts with 'a23' and ends with ''
Wrote keypair to a23...mgr.json

Epic! You just created your first vanity wallet address, one that starts with 1 instance (set by the ":1") of "a23". You should see a .json file in your project folder with the private key of the new address. This can be imported into your Solana project using the Solana JS SDK by using:

using solana keygen

Copy
const keypair = Keypair.fromSecretKey(Uint8Array.from(ARRAY_IN_JSON FILE));

Before checking out a few of solana-keygen's other features, let's grind a wallet that starts with 123456789. In your terminal, enter:

using solana keygen

Copy
solana-keygen grind --starts-with 123456789:1

Your CLI should be showing you an update every couple of seconds that searching continues and 0 matches have been found:

using solana keygen

Copy
custom-wallet % solana-keygen grind --starts-with 123456789:1                          
Searching with 10 threads for:
        1 pubkey that starts with '123456789' and ends with ''
Searched 1000000 keypairs in 1s. 0 matches found.
Searched 2000000 keypairs in 3s. 0 matches found.
Searched 3000000 keypairs in 5s. 0 matches found.
etc.

Press CTRL+C to cancel your search, or you might be waiting a very long time. This is a good example of how the grind subcommand is working. It's looking for a keypair, checking if it matches your criteria, and trying again until your criteria are met. This illustration shows that it is significantly more difficult to find an address with nine user-defined variables than three. That said, it's usually common to only grind addresses with 2-5 characters defined. Beyond that, you'll be utilizing a tremendous amount of computing power and waiting a very long time.

Now let's explore some of the other features of solana-keygen. In your terminal, enter:

using solana keygen

Copy
solana-keygen grind --help

Note the command above, as it's always a great point of reference if you forget how to use the command!

You'll see three sections: Usage, Flags, and Options (tbh, I see flags as just a different type of options, but Solana CLI separates them ):

Usage shows the format of our commands. We always start with solana-keygen grind followed by any flags and options: solana-keygen grind [FLAGS] [OPTIONS]

Your Search Query
 
  • --starts-with PREFIX:COUNT, where PREFIX is the desired custom prefix you are searching for and COUNT is the number of Keypairs to generate (e.g., --starts-with first:2 will generate two Keypairs with a wallet address that starts with quick).
  • --ends-with SUFFIX:COUNT, where SUFFIX is the desired custom suffix you are searching for and COUNT is the number of Keypairs to generate (e.g., --starts-with node:1 will generate one Keypairs with a wallet address that ends with node).
  • --starts-and-ends-with PREFIX:SUFFIX:COUNT, where PREFIX is the desired custom prefix you are searching for, SUFFIX is the desired custom suffix you are searching for, and COUNT is the number of Keypairs to generate (e.g., --starts-and-ends-with quick:node:3 will generate three Keypairs with a wallet address that starts with quick and ends with node).
  • Note: PREFIX and SUFFIX must be of type Base58 (A-Z, a-z, 0-9) except easily mistakable characters (zeroes (0), capital i’s (I) and o’s (O), lower case l’s).

Other Options
  • --ignore-case will make your search case insensitive (case sensitive by default)
  • --use-mnemonic    by default, the **grind** function saves a private key, not a mnemonic key phrase. This flag will generate using a mnemonic key phrase.  Expect a significant slowdown in this mode.
  • --no-outfile  (must be used in conjunction with --use-mnemonic). Only print a seed phrase and pubkey. Do not output a keypair file.
  • --no-bip39-passphrase (must be used in conjunction with --use-mnemonic). Do not prompt for a BIP39 passphrase (This passphrase improves the security of the recovery seed phrase, NOT the keypair file itself, which is stored as insecure plain text)
  • --word-count  (must be used in conjunction with --use-mnemonic). Specify the number of words that will be in the generated seed phrase (default: 12)
  • --language <LANGUAGE> (must be used in conjunction with --use-mnemonic) specify the language for the mnemonic phrase (english, chinese-simplified, chinese-traditional, japanese, spanish, korean, french, italian)
  • --num-threads <NUMBER> Specify the number of grind threads [default: 10]
  • -C, --config <FILEPATH> Configuration file to use

There's a lot there, so don't worry if it doesn't all make sense. The best way to learn is to test it out!

Create a Custom Wallet

Time to test it out! You can look above for help if you need it. Generate a single address that starts with your first name initial and ends with your last name initial (not case sensitive). Create a 24-word Japanese mnemonic that does not have a .json output or bip39 passphrase.

After you have tried it out on your own, you can take a look at how we did it below:

create a custom wallet

Copy
solana-keygen grind --starts-and-ends-with A:M:1 --ignore-case --use-mnemonic --word-count 24 --language japanese --no-outfile --no-bip39-passphrase 

How'd you do? If all went right, you should see a response in your terminal that says "Found matching key" with your wallet address and seed phrase! Pretty cool, right?

If you'd like, you can do a reverse look up with your seed phrase using this command: 

create a custom wallet

Copy
solana-keygen pubkey prompt://

I'd recommend trying out each option to understand how everything works and then make the address of your dreams!

Stay Safe Out There!

Remember, regardless of how you create new seeds or wallets, please practice wallet safety best practices. We have published a Guide: An Introduction to Crypto Wallets and How to Keep Them Secure to help you out.

Is your vanity wallet just scratching the surface of what you're looking for? Check out our Guide: How to Create a .sol Domain using Solana Naming Service to create a custom .sol domain name.

Create a cool wallet? Shoot us a note on Discord or Twitter and share!

We <3 Feedback!

If you have any feedback or questions on this guide, let us know. We’d love to hear from you!

Related articles 33

Como crear un NFT en SOLANA
Published: Dec 27, 2021
Updated: Sep 23, 2022

¡Hola querido lector! Bienvenidos a una nueva guía de Solana.Solana es una blockchain que promete mucho a la hora de intentar resolver los problemas de escalabilidad que...

Continue reading
How to Get Transaction Logs on Solana
Published: Jun 24, 2022
Updated: Oct 27, 2022

Ever need to pull all the transactions associated with a Wallet? Want to see all of the mint transactions associated with a Candy Machine? Or maybe see transaction history of an NFT? Solana's...

Continue reading
How to Transfer SPL Tokens on Solana
Published: Sep 23, 2022
Updated: Sep 23, 2022

Sending Solana Program Library (SPL) Tokens is a critical mechanism for Solana development. Whether you are airdropping whitelist tokens to your community, bulk sending NFTs to another wallet,...

Continue reading
How to Mint an NFT on Solana
Published: Aug 27, 2021
Updated: Sep 23, 2022

Updated at: April 10, 2022Welcome to another QuickNode guide on Solana - the up-and-coming blockchain that seeks to solve the scalability issues of Ethereum. We will be walking through...

Continue reading
How to Send Bulk Transactions on Solana
Published: Aug 31, 2022
Updated: Oct 3, 2022

Are you running a batch process that has many transactions? Perhaps an airdrop to your community's NFT holders or a token distribution to early users of your dApp. Solana transaction...

Continue reading
Solana Fundamentals Reference Guide
Published: Oct 27, 2022
Updated: Oct 27, 2022

The Solana blockchain is a powerful tool, delivering thousands of transactions per second with almost no-cost transaction fees. If you are new to Web3 or have developed on EVM-based...

Continue reading