Release Notes
Changelog and version history for X1.Ninja Screener
- FixMaker filter now matches the chart and works on mobile
Filtering the transaction feed by a wallet was leaking other wallets' liquidity add/remove events into the results, and the list showed only the few matching trades that happened to be in the recent feed while the chart showed the wallet's full history. The list now pulls the wallet's complete recent history server-side so it lines up with the chart markers. The Maker column is also visible on mobile now (it was hidden below the tablet breakpoint), and the table columns stay aligned when scrolling sideways.
- FixFresh trades no longer show a negative "time ago"
When a block timestamp ran a few seconds ahead of your device clock, a brand-new trade could render as "-10s ago". Elapsed time is now clamped to zero.
- FixMore accurate live sidebar stats on quiet pools
The live trade stream backfills recent history on connect, which on low-activity pools could reach back days and get double-counted into the 24h buy/sell/volume figures. Only trades newer than the last server snapshot are now overlaid.
- ImprovementDrag to adjust on-chart price alerts
Grab an alert line on the chart and drag it to a new price to update that alert in place — no duplicate created. The above/below direction is recomputed from the current price on drop.
- FeatureOn-chart price alerts
Set a price alert by toggling the Alert tool on the chart and clicking at a price — it drops a dashed line (green above / red below the current price) and fires a browser notification and in-app toast when crossed. Alerts created from the bell menu now also appear as lines on the chart. USD-price mode only.
- ImprovementCapybara delegation minimum updated to 3,000 XNT
The X1 Foundation replaced the previous 1,000 XNT floor plus dynamic top-85% self-stake cutoff with a flat 3,000 XNT minimum. The validator monitor now qualifies validators against that flat floor, with an on-bubble band just above it.
- FixPool count shows the true total again
The tracked-pool count in the sidebar, ops, and status displays was showing only pools updated in the current sync cycle (~985) instead of all tracked pools (~1,035, matching on-chain XDEX). It now reports the true total.
- FixVolume and transaction stats refresh reliably
As the trade database grew past ~800k rows, the per-cycle stats refresh started timing out and the header and sidebar counters could go stale. The refresh was rewritten to two aggregate queries over the 24h window and now completes in under a second.
- ImprovementLP Tool reframed for new and exotic pools
The LP tool now leads with its purpose — pricing pairs where you don't already know the rate — prefers a direct pool when one exists, shows agreement between routing paths so you can gauge confidence, and has a sortable pools table. Fixed token icons and a quote-side price that was off by a squared factor.
- ImprovementProfile submission overhaul
Submitting or updating a token profile now has an in-app payment step, a token picker, drag-and-drop logo upload, and inline validation, with clearer copy throughout. Switching to Update with a token already selected now runs the ownership check automatically.
- ImprovementVerified tokens card gallery
The verified tokens page is now a card gallery, and broken accent styling was fixed.
- ImprovementRealistic vanity address estimates
The vanity generator's time estimate now uses measured throughput instead of an optimistic fixed rate, warns when a chosen prefix starts with a rare leading character (which is far slower to find), and defaults the thread count to your machine's core count.
- FixAccount Closer no longer times out on large wallets
Scanning a wallet fired one RPC call per token plus an off-chain metadata fetch each, which timed out on wallets with many accounts. Mint and metadata reads are now batched; a 105-account wallet that previously timed out now loads in about 300ms.
- ImprovementMulti-chart page controls and layouts
The charts page gained global timeframe and price-type controls, a 1×1 layout option, share and clear actions, auto-fill of recent pairs, on-screen instructions, and proper stacking on mobile.
- ImprovementShadow Feed velocity visuals
The live trade terminal now conveys trade tempo at a glance — a velocity meter, pulse, and sparks that scale with activity — and the row columns now align correctly.
- ImprovementSortable leaderboard with average trade size
The trader leaderboard columns are now sortable and include an average trade size column.
- ImprovementWallet tracker visual refresh
The wallet page palette now matches the rest of the site, and the whole section shares one wallet connection so connecting once loads your portfolio automatically.
- ImprovementBubble Map always shows holders
The X-Ray view now always shows holder bubbles plus any wallet-to-wallet connections, instead of going blank for tokens with only swap activity.
- FixMore accurate real-time prices and volume
Fixed a real-time pricing divergence, corrected liquidity-event volume, and de-duplicated wallet stats so live figures line up with the reconciled totals.
- FixStatus page stops flagging quiet markets as degraded
The public status page no longer reports "degraded" simply because trading is quiet — low activity is no longer mistaken for an ingestion problem.
- FeatureChart indicators and TradingView-style shortcuts
Added EMA, VWAP, and Bollinger Band overlays, vertical and crosshair line tools, and keyboard shortcuts modeled on TradingView.
- FixCharts include late-arriving trades
The candle aggregator now picks up trades that were backfilled after its progress marker had already advanced, so candles no longer miss late history.
- FixSafety scores no longer flicker each sync
Pool sync was briefly clearing safety scores and 1h stats at the start of every cycle before recomputing them; it now preserves them, so they no longer disappear and reappear.
- FixRestored swaps after an XDEX API change
XDEX changed how native XNT is addressed in their swap-preparation API, which broke swap building on our side. Updated to match so swaps work again.
- ImprovementOHLCV API accepts a timeframe alias
The public v1 OHLCV endpoint now accepts "timeframe" as an alias for the interval parameter and rejects invalid values with a clear 400 error.
- FeatureTrader leaderboard
Top wallets by traded volume over the last hour, day, or week at /leaderboard — with trade counts, buy/sell split, and pairs traded. Each wallet links to the wallet tracker.
- FeatureSafety scores in the screener table
The Safety column is now on by default, showing each pool's 0-100 score (mint/freeze authority, holder concentration, liquidity depth, pool age, LP burn). Scores fill in progressively as pools are checked; the full factor breakdown stays on the pair page.
- ImprovementReal-time volume and transaction stats
Volume and transaction counters now update the moment a trade lands instead of waiting for the next sync cycle. Exact values are still reconciled in the background.
- ImprovementBuy impact preview in the swap panel
The swap panel now shows estimated price impact at $100 / $1k / $10k buy sizes from current pool reserves, so liquidity constraints are visible before entering an amount.
- FeatureReal-time new pool detection
New XDEX pools now appear on the screener within seconds of their first transaction instead of waiting for the next sync cycle (previously up to ~20 minutes). The first trade on a brand-new pool is captured too.
- FeaturePrice alerts
Set price targets from the bell on any pair page. While a tab is open, alerts are checked every 30 seconds and fire a browser notification plus an in-app toast when crossed. Stored locally in your browser.
- FeatureTrending preset
New built-in preset that ranks pairs by transaction activity over the last hour — see what's moving right now rather than over 24 hours.
- ImprovementLive price flash on the screener
Price cells flash green or red when a price changes, so movement is visible at a glance.
- ImprovementPaste any address into search
Search now resolves every pool address and token mint on paste, including quote-side mints.
- FixMore accurate volume and transaction stats
Stats aggregation now fully deduplicates trades during ingestion retry windows, eliminating brief over-counts of volume and transaction totals.
- FixTrade ingestion durability
If the analytics database is down for an extended period, buffered trades now spill to a durable queue and are written once it recovers — previously a long enough outage could drop them.
- ImprovementLess redundant polling on pair pages
While the live trade stream is connected, the page no longer also polls for the same trades in the background.
- ImprovementUI polish pass
Visible focus rings on inputs, consistent button sizing, hover states on sortable table headers, and small contrast improvements.
- ImprovementProduction reliability maintenance
Completed a scheduled infrastructure maintenance window and verified the web app, real-time data pipeline, analytics, monitoring, and validator connectivity after restart.
- ImprovementPinned database and analytics container versions
ClickHouse and Umami now run from explicit release tags instead of moving latest-style tags. This makes rebuilds, restores, and rollbacks more predictable.
- ImprovementDocumented container upgrade process
Added a repeatable upgrade and rollback checklist for stateful infrastructure services, including preflight backup checks and post-upgrade health verification.
- FixCleaner deploy workspace tracking
Deployment-generated Next.js directories and live symlinks are now ignored by git, reducing noise during release preparation.
- FeatureVanity Address Generator
New tool at /vanity to generate custom X1 wallet addresses by prefix, suffix, or contains-pattern. Runs entirely in your browser via Web Workers — keys never leave your device. Multi-threaded with live progress, difficulty estimate, and one-click keypair download.
- FeatureAccount Closer
New tool at /account-closer for cleaning up token accounts. Close empty accounts to reclaim rent, or burn unwanted tokens and NFTs in batch. Handles both Token and Token-2022 programs with prominent warnings on irreversible actions.
- FeatureToken Allowance Manager
New security tool at /token-allowance to scan your wallet for active SPL token delegations and revoke any you no longer need. One-click revoke per delegation, or batch-revoke everything in a single transaction.
- FeatureTransaction Decoder
New tool at /transaction-decoder — paste any X1 transaction signature and get a human-readable breakdown of every instruction, balance change, and program log. Useful for debugging swaps, transfers, and arbitrary on-chain interactions.
- FeatureMaker filter on transaction feed
Pair pages now have a wallet filter on the Maker column — paste any base58 address to see only that wallet's trades on the current pair. Great for tracking specific traders without leaving the page.
- ImprovementCapybara dashboard refresh
Validator monitor at /capy-mon now sorts by qualifying status by default and supports starring favorite validators (★) with a Favorites-only filter. Stars persist across sessions.
- ImprovementPool sync resilience
Pool sync now caches token metadata persistently and skips pools that the real-time pipeline already updated within the last 15 minutes. The full sync cycle now finishes well within budget even when public RPCs are flaky.
- ImprovementQuieter background logs
Reduced trade-indexer log volume by collapsing per-cycle no-op messages while keeping signal (errors and successful indexing) visible. Easier to spot real issues at a glance.
- FixReal-time pipeline noise reduction
The WSS listener no longer floods the log with transient ECONNRESET messages — it batches and summarizes them. Heartbeat timestamp now reflects actual signature arrivals rather than the last successful tick, so monitoring tools accurately detect ingestion stalls.
- ImprovementDefault chart type set to Heikin Ashi
New visitors now see Heikin Ashi candles by default, which smooths out noise and makes trend direction easier to read. Existing chart preferences are preserved.
- FixLP burn detection via archival RPC
Safety scoring scans LP holder accounts via an archival RPC, so pools with longer histories now correctly detect partial and full LP burns instead of silently scoring zero.
- ImprovementZero-downtime deploys
Deploys no longer drop in-flight requests. The web server now runs under PM2 cluster mode, so new code swaps in via a graceful handoff instead of a hard restart. Real-time trade streams and pending API requests survive the swap cleanly.
- ImprovementRate-limit headers on every public API response
API responses now include X-RateLimit-Limit, X-RateLimit-Window, and X-API-Service headers so developers building on our API can see their quota without having to trigger a 429 first. Zero impact on latency — served from a static config table at the edge.
- ImprovementValidator tunnel health monitoring
Added automated checks for the SSH tunnel that powers real-time price updates. The 5-minute health cron now verifies the systemd service, all three forwarded ports, and does a live RPC probe. If the tunnel ever silently degrades, we hear about it on Telegram within minutes instead of noticing hours later through indirect symptoms.
- ImprovementDatabase write-ahead logging enabled
Switched SQLite (the small app-metadata DB that holds token profiles, transfer graphs, developer accounts) to WAL mode. Concurrent readers no longer block writes, and cache size was raised from 2 MB to 50 MB. Invisible to users but noticeably snappier on admin paths.
- FixLiquidity add/remove events now appear in trade history
LP add/remove events were silently missing from the default "All Trades" feed on pair pages due to a schema mismatch in the backend query — the call ran ~10 times per minute since launch, always failing quietly and returning empty. LP events now show alongside swaps, correctly labeled and timestamped.
- ImprovementListing payments now verified on-chain
Paid listing approvals now confirm the payment transaction on-chain — verifying the signature exists, wasn't reverted, was sent to the correct fee wallet, and met the tier's required amount. Also guards against a single transaction being used to pay for multiple listings.
- ImprovementHardened TLS certificate auto-renewal
Reconfigured the renewal pipeline so future certificate refreshes happen cleanly with no manual intervention.
- ImprovementTightened firewall rules against a persistent scraper bot
An axios-based bot hitting a non-existent API endpoint ~8k times a day was being rejected by nginx but still consuming a TLS handshake per request. Blocklist rules are now ordered so the bot is dropped at the kernel level before any TLS work happens.
- ImprovementClient-side error reporting for faster bug response
Uncaught JavaScript errors and unhandled promise rejections in the browser are now reported to our own server-side log (no third-party service, no bundled tracker, nothing that slows page load). Problems that would previously only show up if a user reported them now surface automatically within seconds. Capped per-session to prevent noise, rate-limited per IP.
- FixRestored real token names across hundreds of pools
Many pools were showing truncated mint addresses in place of their actual token names (e.g. "DohWBfvX..." instead of "MIND Token"). Metadata lookups now try multiple RPC endpoints with automatic failover, and a nightly backfill picks up any tokens that missed their initial sync. 84% of tracked tokens now display full names; the rest have no on-chain metadata published.
- FixCaptured aggregator-routed swaps that were being missed
Trades routed through two pools in a single transaction (multi-hop swaps) were only being recorded against one of the pools. Our cross-check against on-chain data showed this affected roughly 13% of swaps on high-volume pairs. All pools touched by a transaction are now indexed, and 24h volume/transaction counts reflect the full picture.
- FixSafety scores now load reliably on popular pools
The safety score on heavily-traded pools was timing out due to the depth of LP holder history that had to be scanned on each request. Added a wall-clock budget to the scan and a short negative-cache on failures to prevent retry storms. Cold-miss response dropped from 30s+ (timeout) to under 5 seconds; cached responses return in ~20ms.
- FixHolder concentration no longer counts DEX vaults as whales
The "Top 10 holders own N% of supply" figure in safety scores was incorrectly including each pool's own liquidity vaults as top holders, inflating concentration to near 100% on many pools. Safety now excludes DEX pool vaults across every pool holding the same token, so the concentration figure reflects actual wallet holdings.
- ImprovementClearer swap error messages
Swap attempts that fail on the DEX side (insufficient balance, invalid slippage, etc.) used to show a generic "Swap preparation failed" message regardless of cause. The specific reason is now passed through, so you see the actual problem immediately.
- ImprovementRPC resilience across the stack
Pool sync, price polling, trade indexing, wallet lookups, holder queries, and safety scans now fail over automatically across multiple RPC endpoints with health-based routing and small retry backoff. A single slow or failing RPC no longer causes silent data gaps or stalled requests.
- ImprovementPer-IP limit on live trade stream
The real-time SSE trade feed now caps concurrent connections per IP (default 10). Protects site responsiveness from misbehaving clients without affecting normal multi-tab or multi-pair usage.
- FeatureWallet Tracker
New tool at /wallet — paste any address or connect your wallet to view token holdings with live USD values, 24h price changes, and a dust filter. Wallet connect auto-redirects to your portfolio.
- FeatureWallet Trade History
Full trade history for any wallet pulled from our indexed database of 423K+ trades. See every swap across all XDEX pools with pair names, prices, and buy/sell breakdowns.
- FeatureWallet Metrics
Third tab on the wallet page showing trading activity by pool, co-traders (wallets that trade the same pools ranked by overlap), and direct transfer peers. All queries return in under 1 second.
- ImprovementHolder cache optimization
Holder list cache increased from 60s to 5 minutes. The underlying getProgramAccounts RPC call takes 3-8 seconds — now only the first visitor per token pays that cost.
- ImprovementHardened info exposure
Removed internal paths from robots.txt, stripped technology fingerprinting headers, and slimmed down public API responses to avoid leaking infrastructure details.
- ImprovementStandardized RPC endpoints
All 8 backend scripts now use a consistent set of benchmarked RPC nodes with the fastest endpoints prioritized. Removed unreliable public RPC from fallback rotation.
- FixFixed missing token logos
Approved profile images for FOREST, PV, and 5 other tokens were stored with a stale CDN domain. Corrected all URLs and flushed cached API responses.
- FeatureLP pool labels on holder lists
Holder lists now label known addresses — XDEX pool authority, DEX vaults, and burn addresses are tagged with colored badges so you can instantly see how much supply is locked in liquidity pools vs held by wallets.
- FixFixed chart volume bleeding into price axis
The volume histogram scale was rendering labels on the price axis, causing stray numbers (like "82.87") to appear on the chart. Volume scale is now hidden — bars still display but won't interfere with price labels.
- FeatureShadow Feed — live trade terminal
New real-time trade feed at /terminal showing every XDEX swap as it happens. Features a cypherpunk-styled interface with buy/sell color coding, whale alerts (>$25), top trading pairs, active wallet rankings, and live buy/sell volume ratio — all derived from the Geyser stream with zero additional RPC load.
- ImprovementUpgraded to dedicated RPC infrastructure
All backend scripts and the web server now use a private RPC node as the primary endpoint, eliminating rate-limit failures that were causing empty holder data and stale prices during high-traffic periods.
- FixFixed bubble maps and holder data
Holder queries were returning empty for every token because the web server was hitting the rate-limited public RPC. Switching to the private validator RPC restored holder data, bubble maps, and safety scores across all 830+ pools.
- FeatureGlobal SSE trade stream
The /api/stream/trades endpoint now supports a global feed (pool=all) that streams every trade across all pools. Powers the Shadow Feed with no per-pool subscription needed.
- FixFixed real-time price updates for 527 pools
The Geyser consumer assumed on-chain vault ordering (token0Vault/token1Vault) matched base/quote token assignment, but XDEX doesn't guarantee this. 527 of 830 pools had swapped vault ordering, causing the Geyser pipeline to write inverted reserves and wildly wrong prices (e.g. a $0.00004 token shown as $3,531). The sync now stores explicit baseVault/quoteVault mappings, and the Geyser consumer uses role-based mapping instead of index-based.
- FixFixed pool reserve data accuracy in batch sync
The batch sync had the same vault ordering assumption — it assigned vault balances by index rather than by actual token mint. Reserves are now mapped by verifying each vault's on-chain mint. All 830 pool prices, liquidity, and LP data verified against on-chain within 0.03%.
- ImprovementBatch vault optimization — 20x faster sync
Pool sync now pre-fetches all vault balances in batches of 100 (17 RPC calls for 830 pools) instead of 830 individual calls. Combined with holder count caching, sync dropped from 20+ minutes (timing out) to ~8 minutes on warm runs.
- FixFixed candle aggregator skipping new pools
Pools indexed after their first trades permanently had empty charts because the candle aggregator applied a 48-hour lookback window. New pools with no prior watermark now aggregate all historical swaps on their first run, so charts appear immediately.
- FixProfile logos now override on-chain metadata
User-submitted profile images were being ignored because the API used them as a fallback only. Now the uploaded profile logo takes priority over the default IPFS mint logo.
- ImprovementColumn headers clarified
Screener table headers now show "Txns 24H" and "Vol 24H" instead of ambiguous "Txns" and "Vol".
- FeatureGeyser pipeline for instant price updates
Prices now update directly from the validator's Geyser plugin instead of polling public RPC. Vault balance changes stream in real-time through an SSH tunnel, giving sub-second price updates with zero RPC load. This eliminates the stale data issues caused by public RPC congestion.
- FeatureValidator SSH tunnel infrastructure
Persistent autossh tunnel to the private validator for RPC, WebSocket, and Geyser relay access. Auto-reconnects on drop, survives reboots via systemd. All ports bound to localhost only.
- ImprovementSEO overhaul: sitemap, robots.txt, canonical URLs
Added a dynamic sitemap.xml with 820+ URLs (all pool pages), robots.txt with crawl rules, and fixed canonical URLs on pair pages that were incorrectly pointing all 810 pages to the homepage.
- FixFixed stale trade display on pair pages
Trades now refresh immediately when switching back to the tab instead of waiting up to 60 seconds. Tightened polling intervals and added refetchOnWindowFocus to both trade and pool queries.
- FixResolved 13-hour sync outage
The batch sync pipeline hung overnight due to X1 public RPC instability — pool sync timed out 4 times, then the price poller got stuck on an unresponsive RPC call. Killed the stuck process and the Geyser pipeline now provides resilience against future RPC outages.
- FeatureNear-real-time price updates
Pool prices now update within seconds of each trade via the WebSocket pipeline, instead of waiting for the 16-22 minute batch sync cycle. Active pools show live prices on both the screener table and pair detail pages.
- FeatureDynamic SEO on pair pages
Sharing a pair link on Discord, Telegram, or Twitter now shows the token name, current price, 24h change, volume, and liquidity in the preview — instead of the generic site title.
- ImprovementPrice freshness indicator
The pair detail sidebar now shows "Updated X ago" with color coding: green (< 5 min), yellow (5-15 min), red (> 15 min). Auto-refreshes every 15 seconds.
- ImprovementCustom error and 404 pages
Broken pages now show a styled error screen with a retry button instead of white-screening. Invalid URLs and missing pools get dedicated 404 pages with navigation back to the screener.
- FixFixed Telegram bot crash loop
The approval bot was stuck in a 409-conflict restart loop due to duplicate PM2 daemon processes. Cleaned up zombie daemons, added a singleton guard to prevent duplicates, and increased shutdown timeout for clean Telegram session release.
- FixBlocked API spam and tightened rate limits
Blocked a persistent bot hammering a non-existent endpoint (/api/price/xnt) at the nginx level. Reduced API burst allowance from 60 to 20 requests.
- FeatureLP Pool Tool
New tool at /lp-tool to search any token and see all its pools with prices, reserves, and liquidity. Prices for non-standard pairs (e.g. FOREST/XUNI) are derived by looking up each token's price from their own XNT or USDC pools. Includes a cross-price calculator to compute the correct rate when initializing a new pair.
- FeatureCross-price calculator for new pool initialization
Pick any two tokens and get the calculated exchange rate routed through shared intermediaries (XNT, USDC, pXNT, rXNT). Shows confidence level based on liquidity depth, with a reserve calculator that tells you exactly how much of each token to deposit.
- FeatureToken price lookup across all pools
New /api/token-pools endpoint returns all pools for a token with derived USD prices — even for non-standard pairs where the pipeline shows $0. Paired token prices are looked up from their own pools in the system.
- FixFixed x1-web restart loop on port conflict
An orphaned Next.js process was holding port 3000, causing every PM2 restart to fail with EADDRINUSE. Added restart_delay and max_restarts to the PM2 config to prevent runaway restart loops.
- FixTop Gainers ticker loop fix
The scrolling marquee now loops seamlessly without visible jumps or gaps at the wrap point
- FeatureReal-time sidebar stats on pair pages
Price, volume, and trade counts in the sidebar now update instantly as trades stream in — no more waiting for the next poll cycle
- ImprovementFaster pair page data refresh (60s → 15s)
Pool stats now refresh 4x more frequently on pair pages, keeping the sidebar in sync with live activity
- ImprovementSmarter trade feed polling
When the live trade stream (SSE) is connected, redundant API polling backs off from 15s to 60s — reducing server load without affecting data freshness
- FixFixed refetch storms on tab switch
Switching browser tabs no longer triggers a burst of API requests across all active queries
- ImprovementTop Gainers ticker now derived from cached data
The scrolling ticker no longer makes its own API call when pool data is already loaded — cuts duplicate requests on the home page
- FeaturePrice Range ruler tool added to chart
New ruler drawing tool on the chart toolbar lets you measure price distance and percentage change between two points
- FixDeterministic trade history ordering
Trades with the same block timestamp now sort consistently by signature — fixes occasional row-shuffling in the transaction feed
- FixFixed watchlist hydration mismatch
Watchlist stars and badge counts no longer flash incorrectly on first page load
- FixImproved sticky table header on mobile
Table header stays visually anchored when scrolling horizontally on small screens
- ImprovementTelegram community link added to sidebar
- FixTransfer indexer now captures plain transfer instructions
Previously only transferChecked instructions were indexed — plain SPL transfer instructions are now resolved via token balance entries and captured as edges
- FixAMM filter relaxed from transaction-level to instruction-level
Mixed transactions containing both a swap and a separate wallet-to-wallet transfer no longer lose the transfer edge
- ImprovementX-Ray empty state now shows explanation instead of blank graph
Tokens with no transfers show a clear message distinguishing between "not yet indexed" and "no transfers found (AMM-only activity)"
- ImprovementRe-indexed all 413 tokens with improved parsing
All transfer index progress reset to re-scan with the new instruction-level filter and plain transfer support
- ImprovementCandle aggregator incremental rebuild
Only re-aggregates candle buckets affected by new swaps instead of the full 48h window — major ClickHouse CPU reduction
- ImprovementTrade indexer 4x faster batch processing
Reduced inter-batch sleep from 1s to 250ms with RPC rotation per batch to spread load across endpoints
- ImprovementWSS queue dedup now O(1) instead of O(n)
Signature dedup in the real-time trade queue uses a Set lookup instead of linear array scan
- FixFixed Telegram bot crash loop on restart
Bot now properly releases the Telegram polling session on shutdown, preventing 409 conflicts on restart
- FixRemoved dead RPC from trade indexer
Dead endpoint 51.195.104.145 was still in trade indexer RPC list, causing timeout waste every 5th batch
- FixLP burn detection now recognizes burnChecked
Safety score now detects LP tokens destroyed via SPL burnChecked instruction, not just tokens sent to burn addresses
- ImprovementHolder concentration scoring adjusted for small-cap tokens
Threshold widened from 50% to 80% — early-stage tokens now get partial credit instead of a flat zero
- FixHolder concentration now excludes DEX vaults and burn addresses
XDEX pool vaults, burn addresses, and system accounts are no longer counted as top holders in the safety score
- ImprovementMigrated CDN and token profile storage to gptree.vip
Token profile images now served from gptree.vip via Cloudflare R2
- FixFixed backup script failing on cron runs
Scheduled backups had stopped running on cron — restored to clean nightly execution.
- FixLP burn detection now recognizes partial burns
Safety score now shows actual burn percentage instead of binary pass/fail — pools with 50-90% LP burned get partial credit
- FixTransfer indexer batch retry on RPC failure
Failed transaction batches now retry on a different RPC instead of silently dropping transfers
- ImprovementX-Ray view now shows all holders as nodes
Holder bubbles are always visible in X-Ray, even when no wallet-to-wallet transfers exist
- FixX-Ray transfer graph now shows correct data per token
Fixed fallback that caused all unindexed tokens to display the same XNT transfer graph
- FixTransfer indexer now scans full token history
Scans up to 100k signatures per cycle per token, resuming deeper each cycle to reach initial distributions
- ImprovementTransfer indexer RPC split for reliable signature fetching
Archival RPC for signature history, fast validator RPCs for transaction data
- FixAMM-only pages no longer count against indexer scan limit
High-volume tokens with mostly swap activity are now scanned deeper to find actual transfers
- FixRemoved dead RPC endpoint from WSS and transfer indexer
- Feature
- FeatureX-Ray transfer graph with cluster detection
- FeatureWallet Inspector panel with flow analysis
- FeatureOn-demand transfer indexing
- FeatureHolder concentration metrics (Gini coefficient)
- ImprovementKnown address labels (DEX vaults, burn address, system program)
- ImprovementFullscreen mode for Bubble Map
- FeatureToken Safety Scanner with risk scoring
- FeatureTable sparklines for 24h price trends
- FeatureBiggest gainer ticker marquee
- FeatureChart timezone selection
- Feature
- FixWatchlist view preference now persists across reloads
- FixMobile table header alignment on horizontal scroll
- FixPool count display now shows true count beyond 500
- Feature
- Feature
- FeatureTrade simulator widget
- ImprovementToken redirect pages
- FeatureReal-time trade streaming (WSS → Redis Streams → SSE)
- FeatureLive trade feed with green pulsing indicator
- ImprovementBuy/sell volume split in sidebar
- FeatureSite analytics (Umami integration)
- Feature
- FeatureTelegram ops bot with slash commands
- Feature
- FeatureStandalone candle aggregator
- Feature
- Feature
- ImprovementUI overhaul: sidebar branding, density improvements
