Overview
hades-ps-sniper is a Rust-based trading bot that monitors pump.fun token graduations to the PumpSwap AMM in real time. The bot subscribes to PumpPortal's WebSocket migration feed, applies a battery of on-chain filters to each graduating token, waits a configurable pre-buy window with active rug detection, then executes buy and sell transactions with dynamic exit logic and Discord telemetry.
The architecture is designed for hands-off operation — automatic WebSocket reconnects with exponential backoff, slippage escalation on failed transactions, and three concurrent exit signals that compete for the trigger pull. It can run continuously without supervision.
Key Features
- Real-time graduation monitoring via the PumpPortal WebSocket migration feed.
- On-chain filtering — holder count, bonding-curve trade history, and top-holder concentration thresholds.
- Pre-buy timer with integrated rug-pull detection during the wait window.
- Automated buy/sell execution through PumpPortal with locally signed transactions and configurable slippage.
- Three concurrent exit signals: hard stop-loss, hard take-profit, and dynamic multi-tier trailing stops (e.g.
12:7,20:10,40:10). - Direct PumpSwap pool price tracking — no third-party price feed dependency.
- Optional Discord webhook notifications for entries, exits, and exceptional events.
- Auto-reconnect with exponential backoff on WebSocket disconnects.
Requirements
- Rust 1.85+ with edition 2024.
- Solana mainnet RPC endpoint — a paid tier is strongly recommended for stable WebSocket connections under load.
- PumpPortal account — free tier is sufficient. API key optional.
- Funded Solana wallet (64-byte keypair JSON from
solana-keygen). - Discord webhook URL (optional, for live notifications).
Setup
1. Clone and build
$ git clone https://github.com/hadesbaker/hades-ps-sniper.git
$ cd hades-ps-sniper
$ cp .env.example .env
$ cargo build --release2. Configure your environment
Edit .env with your RPC endpoints, wallet keypair path,
and (optional) Discord webhook URL. Edit config.toml to set
your trade amount, slippage tolerance, priority fees, on-chain filter
thresholds, and the trailing-stop tier string.
3. Run
$ cargo run --release
# or, with persistent logs:
$ cargo run --release 2>&1 | tee logs/run.logTrailing-Stop Tiers
The multi-tier trailing stop is the bot's most distinctive exit mechanism.
Each tier is defined as profit%:drawdown% — once a profit
tier is hit, the trailing stop locks in that level and tightens the
drawdown allowance. Tiers stack so the stop ratchets upward as a
position works.
# Example: ratchets profit to +12% / +20% / +40% milestones,
# with progressively tighter drawdown allowances at each.
trailing_tiers = "12:7,20:10,40:10"