Skip to content
Business
Skill

/pump-rust-vanity

Production-grade multi-threaded Rust vanity address generator for Solana — 100K+ keys/sec using Rayon parallel iterators with solana-sdk, Base58 pattern matching, prefix/suffix support, security-hardened file output, and Criterion benchmarks.

BOOST
From plugin
pump-fun-sdk
13720 skills
Install
$ npx -y skills add nirholas/pump-fun-sdk --skill pump-rust-vanity --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/pump-rust-vanity

Context preview

The summary Claude sees to decide when to auto-load this skill.

Production-grade multi-threaded Rust vanity address generator for Solana — 100K+ keys/sec using Rayon parallel iterators with solana-sdk, Base58 pattern matching, prefix/suffix support, security-hardened file output, and Criterion benchmarks.

SKILL.md

pump-rust-vanity.SKILL.md
name: pump-rust-vanity
description: "Production-grade multi-threaded Rust vanity address generator for Solana — 100K+ keys/sec using Rayon parallel iterators with solana-sdk, Base58 pattern matching, prefix/suffix support, security-hardened file output, and Criterion benchmarks."
metadata:
  openclaw:
    homepage: https://github.com/nirholas/pump-fun-sdk
    requires:
      bins:
        - cargo

Rust Vanity Generator — High-Performance Solana Address Mining

Production-grade Rust binary achieving 100K+ keys/sec using Rayon parallel iterators with security-hardened file output and Solana CLI compatibility.

Architecture

CLI Args ──► VanityConfig ──► VanityGenerator
                                    │
                              Rayon par_iter
                              ┌─────┼─────┐
                            Thread Thread Thread ...
                              │     │     │
                           Keypair::new() per iteration
                              │     │     │
                           Base58 encode + match
                              │     │     │
                              └─────┼─────┘
                                    │
                              AtomicBool found
                                    │
                              SecureOutput (0o600)

CLI Arguments

| Argument | Description | |----------|-------------| | `--prefix` | Required Base58 prefix to match | | `--suffix` | Optional Base58 suffix | | `--output` | Output file path (default: stdout) | | `--threads` | Number of threads (default: all CPUs) |

Core Types

struct VanityConfig {
    prefix: String,
    suffix: Option<String>,
    output: Option<PathBuf>,
    threads: Option<usize>,
}

struct GeneratedAddress {
    keypair: Keypair,
    address: String,
    attempts: u64,
}

Generation Engine

fn generate(config: &VanityConfig) -> Result<GeneratedAddress> {
    let found = AtomicBool::new(false);
    let result = (0..num_cpus::get())
        .into_par_iter()
        .find_map_any(|_| {
            let mut attempts = 0u64;
            loop {
                if found.load(Ordering::Relaxed) { return None; }
                attempts += 1;
                let keypair = Keypair::new();
                let address = keypair.pubkey().to_string();
                if matches_pattern(&address, &config) {
                    found.store(true, Ordering::Relaxed);
                    return Some(GeneratedAddress { keypair, address, attempts });
                }
            }
        });
    result.ok_or_else(|| anyhow!("No match found"))
}

Security Features

| Feature | Implementation | |---------|---------------| | CSPRNG | `OsRng` via `solana-sdk` | | Memory cleanup | `Zeroize` trait on secret key bytes | | File permissions | `0o600` via `std::fs::set_permissions` | | No network | Pure offline operation |

Dependencies

| Crate | Purpose | |-------|---------| | `solana-sdk` | Keypair generation, Base58, signing | | `rayon` | Data-parallel iteration | | `clap` | CLI argument parsing | | `anyhow` | Error handling | | `criterion` | Benchmarking |

Testing

cargo test                            # Unit + integration tests
cargo test --test security_tests      # Security-focused tests
cargo bench                           # Criterion benchmarks

Patterns to Follow

  • Only use `solana-sdk` for cryptographic operations
  • Use `Zeroize` on all key material
  • Set file permissions to `0o600` immediately after writing
  • Use `AtomicBool` for cross-thread termination signaling
  • Use `find_map_any` for early termination on first match

Common Pitfalls

  • Base58 is case-sensitive — `pump` ≠ `Pump`
  • Longer prefixes grow exponentially harder (~58× per character)
  • `Keypair::new()` uses OS entropy — do not seed with user input
  • `rayon` thread pool size should match CPU cores for optimal throughput
Read more
Ships withpump-fun-sdk

Open-source framework for building PumpFun Telegram bots on Solana. Claim monitors, channel feeds, group trackers, whale alerts — build your own or use ours. PumpKit Web App + Documentation

Get the whole plugin

Other skills on pump-fun-sdk.