Free Solana swap guardian. Analyses token risk and warns you before you sign β on Jupiter, Raydium, and Pump.fun.
π zendiq.ai Β· Chrome Web Store
ZendIQ Lite sits silently in your browser and activates the moment you click Swap. Before your wallet is asked to sign anything, a risk overlay appears with:
- A 0β100 Risk Score for the output token
- A plain-English breakdown of every warning signal found
- Proceed or Cancel β you stay in control
It works on Jupiter, Raydium, and Pump.fun with no wallet connection and no account required.
| Score | Level | What it means |
|---|---|---|
| 0β24 | π’ LOW | On-chain hygiene looks clean |
| 25β49 | π‘ MEDIUM | Some risk signals present |
| 50β74 | π HIGH | Significant red flags β review carefully |
| 75β100 | π΄ CRITICAL | Multiple severe warning signs |
| Signal | Source |
|---|---|
| Mint authority (can devs print unlimited tokens?) | Solana RPC |
| Freeze authority (can devs lock your tokens?) | Solana RPC |
| Top-1 holder concentration | Solana RPC |
| Top-5 holder concentration | Solana RPC |
| RugCheck risk flags (known rug, danger / warning items) | RugCheck API |
| Speculative / memecoin market risk | Token metadata |
| LP lock status | RugCheck API |
| 3-month price change | GeckoTerminal |
| Long-term price change (up to 6 months) | GeckoTerminal |
| Volume trend / activity collapse β 7-day vs 30β90-day baseline | GeckoTerminal |
| Token age | DexScreener |
| 24 h price change | DexScreener |
| Liquidity depth | DexScreener |
| Market cap | DexScreener |
| Serial deployer β tokens the creator wallet launched (last 30 days) | Solana RPC |
| Bundle launch detection β Jito bundle manipulation at token creation | Solana RPC |
The popup's Wallet Security tab scans your connected wallet for:
- SPL Token and Token-2022 accounts with unlimited delegations β the most common attack vector used by drainer contracts
- Matches against a list of known drainer contract addresses
- Provides a Security Score (0β100) with per-finding detail and a direct link to revoke.cash for any unlimited approvals
No transaction is required. The scan is read-only.
- Clone or download this repository
- Open
chrome://extensions(orbrave://extensions) - Enable Developer mode (top-right toggle)
- Click Load unpacked β select the
extension/folder insidezendiq-lite/
Transparency is a core commitment. Here is exactly what ZendIQ Lite sends to our server at zendiq-backend.onrender.com, and why.
Every event shares this common envelope:
| Field | Value | Purpose |
|---|---|---|
type |
event name (see below) | Categorise the event |
v |
extension version string | Understand adoption across versions |
ts |
Unix timestamp (ms) | Time-series aggregation |
ext_id |
chrome.runtime.id β a random ID assigned by Chrome to the extension install, not tied to your wallet or identity |
Deduplicate daily-active counts |
The 9 event types currently logged:
| Event | When | Fields sent |
|---|---|---|
extension_installed |
Once on install or update | reason, prev_version, browser |
daily_active |
At most once per UTC day | day (YYYY-MM-DD only) |
token_checked |
After every risk scan completes | mint, score, level, site |
high_risk_detected |
When score β₯ 50 | mint, score, level, site |
transaction_initiated |
When a swap is intercepted | mint, score, level, site, path |
transaction_completed |
User clicks Proceed on low/medium risk | mint, score, level, trade_usd*, site |
transaction_aborted |
User clicks Cancel on low/medium risk | mint, score, level, trade_usd*, site |
proceeded_high_risk |
User clicks Proceed on high/critical risk | mint, score, level, trade_usd*, site |
avoided_high_risk |
User clicks Cancel on high/critical risk | mint, score, level, trade_usd*, site |
* trade_usd is sourced from Jupiter's own /order API response (the USD value Jupiter calculated for the swap). It is null when not available. It is never derived from your wallet balance.
Why we collect this: These aggregated counts let us measure how many high-risk tokens users encounter, how often users proceed vs cancel, and whether ZendIQ's risk scores correlate with real rug events. The data is never sold and never linked to an identity.
| Data | Where it stays |
|---|---|
| Wallet public key or address | chrome.storage.local only β never leaves your browser |
| Private keys or seed phrases | Never accessed β not technically possible from a content script |
| Transaction signatures | chrome.storage.local only |
| Full swap history (amounts, token pairs, quote accuracy) | chrome.storage.local only |
| Wallet security scan results (approvals, drainer matches) | chrome.storage.local only |
| Full risk factor breakdown (all 16 signal details) | Computed and displayed locally; never uploaded |
| RugCheck / DexScreener / GeckoTerminal API responses | Used locally for scoring; never forwarded |
| Deployer address or on-chain transaction history | Used locally for scoring; never forwarded |
The backend validates every inbound event before storage:
- Rate limit: 60 events per IP per minute
- Type whitelist: only the 9 event names above are accepted
- Field constraints:
mintmust be a valid base58 address,scoremust be 0β100,trade_usdcapped at $50,000,sitemust be one ofjup.ag / raydium.io / pump.fun - Payload size:
datafield capped at 2 048 bytes - No raw event rows are ever exposed via any public API endpoint β only aggregated statistics
The extension requests the following browser permissions:
| Permission | Reason |
|---|---|
storage |
Save swap history, security scan results, and settings locally |
activeTab |
Detect the currently open DEX tab |
scripting |
Inject the risk overlay and wallet hook into DEX pages |
tabs |
Query open tabs to find the active DEX |
*://jup.ag/*, *://raydium.io/*, *://pump.fun/* |
Intercept swap events on supported DEXes |
https://api.rugcheck.xyz/* |
Fetch RugCheck risk flags for the output token |
https://api.dexscreener.com/* |
Fetch token age, liquidity, 24 h price change |
https://api.geckoterminal.com/* |
Fetch price history and volume trend |
https://api.mainnet-beta.solana.com/*, https://solana.publicnode.com/* |
On-chain RPC calls (mint authority, holder data, wallet accounts) |
No payment APIs, social networks, or ad networks are contacted.
zendiq-lite/
βββ extension/ Unpacked MV3 extension
β βββ manifest.json
β βββ src/
β βββ background.js Service worker β external fetches + analytics relay
β βββ scripts/
β β βββ page-config.js Shared namespace (window.__zqlite)
β β βββ page-interceptor.js Fetch hook + swap overlay (MAIN world)
β β βββ page-wallet.js Wallet sign hook (MAIN world)
β β βββ page-security.js Wallet account scanner (MAIN world)
β β βββ bridge.js postMessage relay MAIN β service worker (ISOLATED)
β βββ ui/
β β βββ popup.html Extension popup (4 tabs)
β β βββ popup.js Popup logic
β β βββ popup-monitor.js Monitor tab
β β βββ popup-history.js History tab
β β βββ popup-security.js Wallet Security tab
β β βββ popup-settings.js Settings tab
β β βββ styles.css Popup styles
β βββ utils/
β βββ scoring.js 16-signal risk scoring engine
β βββ extraction.js On-chain deployer lookup
β βββ rpc.js Popup β background message helpers
β βββ analytics.js Fire-and-forget event logger
βββ backend/ Optional self-hosted backend
βββ .env.example
βββ package.json
βββ src/
βββ server.js Express entry point
βββ api/routes.js POST /api/events Β· GET /api/stats Β· GET /api/version
βββ db/schema.sql SQLite schema
The extension works fully without a backend β all scoring is local. The optional backend enables:
- Version checks β update banner when a new version is published
- Aggregated analytics β anonymised event counts for the dashboard
cd backend
cp .env.example .env
npm install
npm startThen in the extension popup Settings, set the backend URL to http://localhost:3000.
All free, no API key required:
| API | Used for |
|---|---|
| Solana RPC (publicnode.com + mainnet-beta) | Mint authority, freeze authority, holder data |
| RugCheck.xyz | Comprehensive risk report |
| DexScreener | Price, liquidity, market cap, token age |
| GeckoTerminal | 3M + 6M price history, volume trend |
Need swap interception, MEV protection, and auto-optimised routing on jup.ag? Check out ZendIQ Pro β the full-featured swap guardian that saves you from bad routes and front-running bots.
MIT