ℹ️ ABOUT PDA BRUTE FORCING
WHAT ARE PDAs
✓Program Derived Addresses are deterministic addresses
✓Generated from seeds and program ID
✓Used for program-controlled accounts
✓Essential for Solana program architecture
BRUTE FORCE FEATURES
⚡Search with custom constraints
⚡Variable seed ranges for iteration
⚡Address pattern matching
⚡Real-time progress tracking
USE CASES
🎯Find vanity PDAs for branding
🎯Optimize gas costs with short addresses
🎯Research program address spaces
🎯Discover address patterns
HOW TO USE:
1. Enter the program ID you want to search
2. Configure seeds (static values or variable ranges)
3. Set address constraints (prefix, suffix, contains)
4. Review difficulty estimation
5. Start search and monitor progress
2. Configure seeds (static values or variable ranges)
3. Set address constraints (prefix, suffix, contains)
4. Review difficulty estimation
5. Start search and monitor progress
PERFORMANCE NOTES:
• Longer constraints take exponentially more time
• Large variable ranges can be computationally expensive
• Consider starting with shorter patterns
• Monitor difficulty estimation before searching
• Large variable ranges can be computationally expensive
• Consider starting with shorter patterns
• Monitor difficulty estimation before searching
🎯 PDA BRUTE FORCER
Find Program Derived Addresses (PDAs) with specific properties
Seed 1
Common Patterns:
💡 PDA STRUCTURE & EXAMPLES
How PDAs are Generated:
PDA = findProgramAddress([seed1, seed2, ...], programId)
1. Seeds are concatenated with bump value (255 → 0)
2. SHA256 hash is computed with program ID
3. First valid address (not on curve) is returned
4. Bump value ensures address is not a valid public key
2. SHA256 hash is computed with program ID
3. First valid address (not on curve) is returned
4. Bump value ensures address is not a valid public key
Seed Types & Usage:
Static Seeds
String: "user", "token", "vault"
Public Key: User wallet, token mint
Number: Fixed IDs, timestamps
Use: Predictable, deterministic addresses
Variable Seeds
Range: 0-1000, 1-255
Type: u8, u16, u32, u64
Use: Finding vanity addresses
Note: Computationally expensive
Common PDA Patterns:
USER ACCOUNTS
Seeds: ["user", user_pubkey]
Purpose: User-specific program accounts
Example: User profiles, settings, state
Purpose: User-specific program accounts
Example: User profiles, settings, state
TOKEN ACCOUNTS
Seeds: ["token", owner, mint]
Purpose: Token-specific data
Example: Token balances, metadata
Purpose: Token-specific data
Example: Token balances, metadata
GAME STATE
Seeds: ["game", player, level_id]
Purpose: Game-specific state
Example: Player progress, items, stats
Purpose: Game-specific state
Example: Player progress, items, stats
AUTHORITY
Seeds: ["authority"]
Purpose: Program authority/admin
Example: Protocol admin, treasury
Purpose: Program authority/admin
Example: Protocol admin, treasury
Constraint Examples:
| Constraint | Example | Difficulty | Use Case |
|---|---|---|---|
| Prefix | Cool... | Medium | Branding, recognition |
| Suffix | ...DOGE | Medium | Token themes |
| Contains | ...777... | Hard | Lucky numbers |
| Multiple | A...Z | Very Hard | Perfect vanity |
| None | Any address | Easy | Testing, research |
Performance Optimization:
FASTER SEARCHES:
• Use shorter constraint patterns (1-3 chars)
• Limit variable ranges (max 1000 values)
• Prefer prefix over suffix constraints
• Use case-insensitive matching
• Start with smaller seed combinations
AVOID:
• Very long constraint patterns (5+ chars)
• Large variable ranges (10,000+ values)
• Multiple complex constraints together
• Case-sensitive matching unless needed
• Too many seeds (limit to 4-5 max)
Example: Finding User Account PDA
// Program ID
const PROGRAM_ID = "YourProgramID..."
// Seeds configuration
const seeds = [
{
type: "string",
value: "user",
description: "Static prefix"
},
{
type: "publickey",
value: "UserWalletAddress...",
description: "User wallet"
},
{
type: "variable",
variableRange: { min: 0, max: 100, type: "u8" },
description: "User ID"
}
]
// Constraints
const constraints = {
prefix: "Cool", // Address starts with "Cool"
caseSensitive: false
}
// This will search for PDAs like:
// CoolXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...
// Generated from seeds: ["user", userWallet, 0-100]