xrpl-vanity CLI

The same search as the desktop app, from a terminal on Windows or Linux.

Build it

There are no prebuilt binaries: run it from source with the .NET 10 SDK.

$ git clone https://github.com/StaticBit-io/xrpl-vanity-generator.git
$ cd xrpl-vanity-generator
$ dotnet run --project src/XrplVanity.Cli -c Release -- --contains xrp --count 1

The first run builds the program. In the examples below, xrpl-vanity stands for dotnet run --project src/XrplVanity.Cli -c Release --.

A bare word must appear at the start of the address, right after the leading r. A run can mix positions, and an address matches if any one pattern does.

$ xrpl-vanity ripple hodl xrp
$ xrpl-vanity --ends xyz --contains dao
$ xrpl-vanity --starts-ends abc:xyz
$ xrpl-vanity --list words.txt 5

--starts-ends needs both halves on the same address, so it costs as much as one word of their combined length. The last line loads its words from a file and keeps those of at least 5 characters.

Options

OptionDefaultWhat it does
--starts PnoneMatch at the start of the address, after the r. Repeatable. Bare words do the same.
--near-start PnoneLet the word begin at the 2nd or 3rd character. Repeatable.
--ends PnoneMatch at the end of the address. Repeatable.
--contains PnoneMatch anywhere. Repeatable.
--starts-ends PREFIX:SUFFIXnoneRequire a prefix and a suffix on the same address. Repeatable.
--near-starts-ends PREFIX:SUFFIXnoneThe same, with the prefix allowed at the 2nd or 3rd character. Repeatable.
--list FILE [minLen]minLen 4Load words for the start of the address from a file.
--case-sensitiveoffMatch exactly as typed. By default every case combination matches, for words of up to 12 characters.
--threads Nall coresWorker threads for a CPU search. Ignored with --gpu.
--out FILEnoneAppend matches to a file as well as printing them.
--count NnoneStop after N matches. Otherwise the search runs until you press Ctrl+C.
--gpuoffSearch on the GPU: CUDA first, then OpenCL.
--backend NAMEnoneForce cuda or opencl. Implies --gpu.
--device NnonePick a device by index. Implies --gpu.
--list-devicesnoneList every device and exit.
--gpu-devices SPECnoneUse several devices at once: all, cuda, opencl, or a comma-separated list. Implies --gpu.
--gpu-duty N100Keep the GPU busy about N% of the time, from 1–100.

Which words work

Addresses use 58 characters. 0, O, I and l do not exist, so your word is adjusted: l becomes L, 0 and O become o, and I becomes i. A word that still holds an impossible character is reported and skipped.

Each extra character multiplies the wait, by up to 58 times with --case-sensitive and by less without it, because more spellings count as a match.

The first character after the r is usually one of pshnaf39wBUDNEGHJKLM4PQ. A word that starts with anything else is about 23 times rarer than its length suggests. --near-start lets it begin one character later, which finds it about 24 times sooner.

Search on a GPU

$ xrpl-vanity --list-devices
$ xrpl-vanity --gpu --contains dao --count 1
$ xrpl-vanity --gpu-devices cuda --starts abc
$ xrpl-vanity --gpu --gpu-duty 80 --contains dao --count 1 --out dao.tsv

Every GPU hit is derived again on the CPU, and only printed if the two agree, so a faulty device costs speed and never gives you a wrong key. Without a usable device, --gpu exits with code 2 rather than falling back to the CPU.

The first OpenCL run can take tens of seconds while the driver compiles the program. Later runs are fast. --gpu-duty leaves room for other applications, and speed drops roughly in proportion. --gpu-devices all opens each card once per backend, so use --gpu-devices cuda for every NVIDIA card once.

Results and exit codes

Each match is one line on your terminal:

Address: r...	Seed: sEd...

--out FILE appends the same pair, separated by a tab, without the labels. Warnings and the final speed go to stderr, so piping stdout gives you matches alone.

Anyone who holds the seed controls the account. Matches are in plain text, on your terminal and in that file, and nowhere else. Keep them private.

CodeMeaning
0The --count target was met.
2Invalid usage, no reachable pattern, no usable GPU, or a failed search.
130Ended by Ctrl+C before a --count target was met.