# monero-vanity monero-vanity is a GUI/CLI tool that generates vanity addresses for Monero, like this one:

44hintoFpuo3ugKfcqJvh5BmrsTRpnTasJmetKC4VXCt6QDtbHVuixdTtsm6Ptp7Y8haXnJ6j8Gj2dra8CKy5ewz7Vi9CYW

#### GUI https://user-images.githubusercontent.com/101352116/229327381-2b001b8a-b1a0-4889-93d2-ce6a9c2a858f.mp4 #### CLI https://user-images.githubusercontent.com/101352116/229327380-52a7f8a2-fcf7-4eb0-9ec8-c0554f86a2bc.mp4


Comparison

| Generator | Hardware needed | Regex | Calculates seed | Normal speed | Regex speed | |---------------------------------------------------------------------|------------------------|-------|-----------------|-----------------|-------------| | vanity-monero | CPU (x86, 32/64-bit) | Yes | Yes | 400k/sec | 170k/sec | monero-vanity | CPU (x86, 64-bit) | Yes | No | 5.8million/sec | 5.8million/sec | vanity-xmr-cuda | NVIDIA GPU (with CUDA) | No | No | 8.1million/sec |

Tested with: Ryzen 5950x, GTX 1660 Ti

Estimate

| Characters | Example | Rough Time Estimate | |------------|------------------|----------------------| | 1 | 44h | Instant | | 2 | 44hi | Instant | | 3 | 44hin | Instant | | 4 | 44hint | 2 seconds | | 5 | 44hinto | 1 minute, 30 seconds | | 6 | 44hintoj | 1 hour, 30 minutes | | 7 | 44hintoja | 4 days, 10 hours | | 8 | 44hintojan | 280 days | | 9 | 44hintojana | 49 years | | 10 | 44hintojanai | 3,151 years | | 11 | 44hintojanaiy | 100,852 years | | 12 | 44hintojanaiyo | Pretty much never |

Assuming speed of 5.8million keys a second

GUI Usage

After finding an address, create a new Monero wallet: Input the address, private view key, and private spend key: And verify your new wallet address is correct:

CLI Usage

```bash Usage: monero-vanity [--OPTIONS]

Options: -t, --threads How many threads to use [default: HALF_THREADS] -p, --pattern Address regex pattern to look for -f, --first Start from 1st character instead of: ^4.PATTERN.*$ -r, --refresh How many milliseconds in-between output refreshes [default: 500] -v, --version Print version -h, --help Print help (see more with '--help') Example 1 - Basic pattern using half threads: bash ./monero-vanity --pattern hinto

44hinto... ```

Example 2 - Advanced regex pattern using half threads: ```bash ./monero-vanity --first --pattern "^4(4|8)h(i|1)nto.*$"

48hinto... ```

After finding the private spend key: ./monero-wallet-cli --generate-from-spend-key YOUR_WALLET_NAME Enter the private key and the generated wallet will have the address found.

Notes: - Rust regex is allowed in any mode - All characters must be ASCII, Unicode, or a regex pattern - I, O, l, 0, +, / are invalid characters in Monero addresses - Using slightly less than max threads might be faster

monero-vanity automatically prefixes your input with ^4. and suffixes it with .*$ so that your PATTERN starts from the 3rd character until the 43rd character of the address.

Example input: hinto
Actual regex used: ^4.hinto.*$

To disable this, use --first.

Warning: this puts you in full control of the regex, you can input any value, even an impossible one.

Install

Download here.

Cargo

If you have cargo, you can install with: bash cargo install monero-vanity

Arch

If you're using Arch Linux, you can install with: bash paru monero-vanity

Implementation

  1. Random [u8; 64] is generated (512 bits/64 bytes)
  2. Scalar is created from above bytes
  3. EdwardsPoint's base58 encoding is checked (4...) with regex
  4. If match, create full address and return to user, else...
  5. Increment EdwardsPoint by 1 and continue

Notes: - Each thread seeds its own RNG - The (optional) private view key is also created with 512 random bits

Build

cargo build --release Optimized for your specific CPU (up to 15%~ speed increase): RUSTFLAGS="-C target-cpu=native" cargo build --release

Thanks

Big thanks to kayabaNerve for helping me with ECC cryptography and Rust (he's the reason why it's fast).