SNIFF logo

SNIFF Sniper

A Solana token sniper delivered as a Telegram bot plus a web terminal. Monitor Telegram channels, auto-buy new contract addresses, manage positions, and earn referral commissions.

Auto-snipeWatches public & private channels for token CAs.
Multi-walletUp to 5 derived wallets per user.
Referrals20% of fees, gated by SNIFF holdings.
PNL cardsShareable 3600×2880 trade images.

Architecture

Telegram channels→bot.py / sniper_service.py→Jupiter swap + RPC→Fee transfer→Referral commission
Next.js dashboard→REST API /api→Shared PostgreSQL DB←Telegram bot(s)
LayerTech
FrontendNext.js (App Router), Tailwind v4, next-themes, zustand-style useStore, axios, lucide-react
AuthTelegram Login Widget (SNIFF_SNIPER_BOT) → bearer token in localStorage
Bot / servicesPython, python-telegram-bot, solders, requests, Pillow
ChainRaw JSON-RPC (no solana package)
DataPostgreSQL (DATABASE_URL), shared by main and sniper bots

Setup & Config

NEXT_PUBLIC_API_URL=http://localhost:8000/api   # frontend
WALLET_DERIVATION_SECRET=<long random string>      # backend — never commit
DATABASE_URL=postgres://…                          # backend
assets/pnl_profit.png, assets/pnl_loss.png         # PNL templates
assets/fonts/MyriadPro-Regular.OTF                 # card font
Keep WALLET_DERIVATION_SECRET stable. Every wallet key is derived from it; changing it makes existing wallets unrecoverable.

Login

Users sign in with the Telegram widget. On success the layout stores the token and loads profile, positions and wallets. Until then an INITIALIZING… splash shows.

https://sniff.app
Fig. 1 — Login screen (simulated)

Dashboard

Refreshes every 15 s. Shows balance, all-time realized PnL, win rate, active positions, recent activity and top channels. USD totals use a fixed SOL price of 150.

/
Dashboard
Sniper
Wallets
Channels
Groups
Transfers
Referrals
Settings
Balance2.418 SOL$362.70
Total PnL+1.2045
Win rate64.0%
Quick action
Open Sniper
Active positions
FABLE 8ESs…ump$48.20Manage
PEPE2 Hk3a…9xQ$12.05Manage
Fig. 2 — Dashboard (simulated)

Sniper terminal

Paste a CA (or arrive via /sniper?ca=…) to fetch a quote. Pick a wallet and slippage (10 / 25 / 50 %), then buy with presets (0.01–1 SOL) or a custom amount; sell 25/50/75/100 % of an open position. Slippage is sent as basis points.

/sniper?ca=8ESs…pump
FABLE
8ESs6Wn…pump
Market cap$412,300
QuoteSOL
Your position · PnL +38.4%
Active wallet
W1 · 1.20W2 · 0.40
Slippage
10%25%50%
Close position
25%50%75%100%
Execute buy
0.010.050.10.51.0
Custom amount
BUY
BUY EXECUTED! · VIEW_ON_SOLSCAN
Fig. 3 — Sniper terminal (simulated)

Channels

Add public channels by @username, or private ones (needs an active Telegram session via the bot). Each has its own buy amount, slippage (stored in bps) and optional max market cap.

/channels
+ Add Channel
@GemCallsAlpha
● Monitoring Active
Buy 0.01 SOL · Slip 10% · Max MC NoneEdit · Delete
@SolWhaleAlerts
● Monitoring Active
Buy 0.05 SOL · Slip 25% · Max MC $500,000Edit · Delete
Fig. 4 — Channels (simulated)

Wallets

Each user gets wallet W1 automatically and may create up to 5. Balances are shown in the sniper terminal wallet selector and the header. See Wallet service for key derivation.

/wallets
W1 7xKq…f2Ld1.200 SOL
W2 B9mP…c4Ve0.400 SOL
+ New wallet (2/5)
Fig. 5 — Wallets (simulated)

Transfers

Withdraw SOL to any Solana address. A successful transfer returns a Solscan link.

/transfers
Withdraw SOLDestination address
Paste destination address
Amount (SOL)
0.00
Send SOL
Fig. 6 — Withdraw SOL (simulated)

Referrals

Share your link t.me/sniff_bot?start=ref_<your_id>. You earn 20 % of each referred user’s trading fee. Earnings are claimable only if you hold verified SNIFF; otherwise they accrue as locked until you verify.

/referral
Your Referral Link
https://t.me/sniff_bot?start=ref_12345
Copy
Total referrals14
Total earned0.8120 SOL
Claimable0.5300 SOL
Fig. 7 — Referrals (simulated)

Leaderboard

Ranks groups by total volume and trade count.

/leaderboard
Top Traders
#1 Alpha Gems128.40 SOL
312 trades
#2 Sol Snipers96.10 SOL
240 trades
#3 Degen Den74.85 SOL
198 trades
Fig. 8 — Leaderboard (simulated)

Verify

Checks SNIFF balance across your wallets. Verified holders unlock claimable referral earnings and 10 callers per group.

/verify
Verify SNIFF Holdings
Hold SNIFF to unlock premium features.
Verify Now
✓ Verification Successful! You hold 2,500,000.00 SNIFF (0.2500%). Premium unlocked!
Fig. 9 — Verify (simulated)

Settings

Toggle the auto-snipe engine and set default buy amount and slippage (UI in %, saved as bps).

/settings
Auto-Snipe Engine
Auto-buy tokens from monitored channels
ON
Default buy (SOL)
0.01
Default slippage (%)
10
Save Changes
Fig. 10 — Settings (simulated)

Support

Submit a ticket; admins are notified and reply through the Telegram bot.

/support
Create Support Ticket
E.g., Issue with auto-sell
Explain your issue in detail…
Submit Ticket
Fig. 11 — Support (simulated)

Telegram bot flows

CommandPurpose
/start [ref_ID]Onboard, create W1, register referral
/verifyConnect wallet & verify SNIFF
/claimWithdraw claimable referral balance
Telegram · @sniff_bot
8ESs6WnDYgV9eodF8JpyNrrdQuuvNZrBK9tctnfypump
BUY EXECUTED FABLE · 0.0100 SOL Fee: 0.000005 SOL (0.05%) Slippage 10%
Sell 50%Sell 100%Chart
Referral Earning! +0.000001 SOL Locked — use /verify to unlock
Fig. 12 — Bot conversation (simulated)

PNL card

pnl_card.py overlays token, ROI, PNL, Invested and Position on a 3600×2880 template (pnl_profit.png / pnl_loss.png), auto-fitting font sizes, exported as JPEG (q85). Green #00dda3 for profit, red #e32f2f for loss.

SNIFF
$FABLE
+38%
+$18
$48
$66
Fig. 13 — PNL card (simulated)

Fee service

  • Fee = amount × fee_percent / 100; default 0.05 %, rounded to 9 decimals.
  • Whitelisted users pay 0.
  • Safety: a configured percent above 10 falls back to 0.5 %.
  • transfer_fee_to_collection sends a SOL transfer to the configured fee wallet (min 0.000001 SOL), signed by the user wallet and sent with skipPreflight.

Wallet service

Keys are deterministic: sha256(seed_material)[:32] → Keypair.from_seed. Seed material uses WALLET_DERIVATION_SECRET, a per-wallet random salt (new wallets), user id and wallet number. Legacy W1 (no salt) must match bot.py exactly. migrate_existing_wallets() adds salts to legacy rows.

Adding a salt to a legacy wallet changes its derived address, so migrate with care.

Referral service

Referred user trades→Fee→20% commission→Holds SNIFF?→Claimable / Locked

Self-referral and double-referral are rejected. Tiers from verify_wallet_holdings: whale (≥ 2 % supply), holder (> 0), guest.

Token & Solana services

token_service.py reads SNIFF balance and supply (mint 8ESs…pump) with RPC fallback. solana_service.py provides get_balance, is_holding_token and a Jupiter price lookup, all over raw JSON-RPC.

Notes

Review before production: SOL price is hardcoded to 150 (dashboard and PNL card); WALLET_DERIVATION_SECRET falls back to 'default-secret' if unset; the Jupiter price.jup.ag/v4 endpoint and public RPC URLs are rate-limited or deprecated; main.application is imported lazily by referral notifications.

Screenshots are HTML simulations, not captures.