Real-time Solana wallet monitoring via Telegram. Get instant alerts for every transaction. Built for traders, researchers, and operators.
Monitor any Solana wallet and get instant Telegram alerts for:
- πΈ SOL transfers (sent/received)
- πͺ Token transfers
- π Transaction details (amount, fee, signature)
- π Direct Solscan links
No dashboards. No polling. Just alerts when it matters.
- Start the bot:
/start - Add a wallet:
/watch <wallet_address> - Get alerts: Instant notifications for new transactions
Free tier: Monitor 1 wallet
Pro tier: Monitor 3 wallets ($10 USDC/month)
Premium tier: Unlimited wallets ($30 USDC/month)
| Command | Description |
|---|---|
/start |
Register and get started |
/watch <address> |
Start monitoring a wallet |
/unwatch <address> |
Stop monitoring a wallet |
/list |
Show all monitored wallets |
/upgrade |
View upgrade options |
/verify <signature> |
Verify USDC payment and upgrade |
- Send
/upgradeto see payment instructions - Send 10 USDC (Pro) or 30 USDC (Premium) to the payment address
- Copy your transaction signature
- Send
/verify <signature> - Instant upgrade - no manual approval needed
Why USDC?
- β Instant verification (on-chain proof)
- β No KYC/cards required
- β Global - works anywhere
- β Trustless - blockchain doesn't lie
Hybrid Architecture:
- Commands: Make.com (visual workflow automation)
- Monitoring: Python on Railway (24/7 background worker)
- Edge Routing: Cloudflare Workers
- Database: Supabase (PostgreSQL)
- Blockchain Data: Helius API
- Alerts: Telegram Bot API
Why hybrid?
- Make.com = fast iteration on commands
- Python = unlimited monitoring operations
- No operation limits, infinite scale
graph TB
subgraph "User Interface"
U[User via Telegram]
end
subgraph "Edge Layer - Cloudflare Workers"
CW[Cloudflare Worker<br/>Edge Routing]
end
subgraph "Command Layer - Make.com"
WH[Webhook Trigger]
R[Router<br/>Command Parser]
subgraph "Command Routes"
START[/start<br/>User Registration/]
WATCH[/watch<br/>Add Wallet/]
UNWATCH[/unwatch<br/>Remove Wallet/]
LIST[/list<br/>Show Wallets/]
UPGRADE[/upgrade<br/>Payment Info/]
VERIFY[/verify<br/>Payment Verification/]
end
subgraph "Payment Flow"
HTTP[Helius API Call<br/>Fetch Transaction]
CHK[Check Payment<br/>Valid USDC?]
DUP[Check Signature<br/>Already Used?]
UPG[Upgrade User Tier<br/>+ Log Payment]
end
end
subgraph "Monitoring Layer - Railway"
MON[Python Monitor<br/>monitor.py]
SEED[Startup Seeding<br/>Load 50 Existing Tx]
LOOP[60s Loop<br/>Check All Wallets]
end
subgraph "Data Layer - Supabase PostgreSQL"
DB[(Database)]
subgraph "Tables"
TBL_U[users<br/>telegram_chat_id, tier]
TBL_B[bots<br/>user_id, wallet_address]
TBL_A[alerts<br/>bot_id, alert_data]
TBL_S[seen_signatures<br/>signature, wallet]
TBL_P[processed_payments<br/>signature, user_id, amount]
end
end
subgraph "External APIs"
HEL[Helius API<br/>Solana Blockchain Data]
TG[Telegram Bot API<br/>Send Messages]
end
subgraph "Blockchain"
SOL[Solana Network<br/>On-Chain Transactions]
end
%% User Flow
U -->|Commands| CW
CW -->|Forward| WH
WH --> R
%% Command Routing
R -->|Parse| START
R -->|Parse| WATCH
R -->|Parse| UNWATCH
R -->|Parse| LIST
R -->|Parse| UPGRADE
R -->|Parse| VERIFY
%% Payment Verification Flow
VERIFY --> HTTP
HTTP -->|Fetch Tx| HEL
HTTP --> CHK
CHK -->|Valid| DUP
DUP -->|New Sig| UPG
DUP -->|Used| TG
UPG --> DB
%% All Commands β Database
START --> DB
WATCH --> DB
UNWATCH --> DB
LIST --> DB
UPGRADE --> TG
%% All Commands β Telegram Response
START --> TG
WATCH --> TG
UNWATCH --> TG
LIST --> TG
UPG --> TG
%% Monitoring Flow
MON -->|On Startup| SEED
SEED -->|Load Wallets| DB
SEED -->|Fetch Existing Tx| HEL
SEED -->|Mark Seen| DB
MON -->|Every 60s| LOOP
LOOP -->|Get Active Wallets| DB
LOOP -->|Fetch Transactions| HEL
LOOP -->|Check if Seen| DB
LOOP -->|Send Alerts| TG
LOOP -->|Log Alerts| DB
%% Helius β Blockchain
HEL -->|Query| SOL
%% Telegram β User
TG -->|Deliver| U
%% Database Internal Relationships
TBL_U -.->|1:N| TBL_B
TBL_B -.->|1:N| TBL_A
TBL_U -.->|1:N| TBL_P
%% Styling
classDef userClass fill:#e1f5ff,stroke:#0066cc,stroke-width:2px
classDef edgeClass fill:#fff4e6,stroke:#ff9900,stroke-width:2px
classDef makeClass fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
classDef railwayClass fill:#f3e5f5,stroke:#9c27b0,stroke-width:2px
classDef dbClass fill:#fff3e0,stroke:#ff6f00,stroke-width:2px
classDef apiClass fill:#e0f2f1,stroke:#009688,stroke-width:2px
class U userClass
class CW edgeClass
class WH,R,START,WATCH,UNWATCH,LIST,UPGRADE,VERIFY,HTTP,CHK,DUP,UPG makeClass
class MON,SEED,LOOP railwayClass
class DB,TBL_U,TBL_B,TBL_A,TBL_S,TBL_P dbClass
class HEL,TG,SOL apiClass
- Telegram Bot Token
- Supabase Project
- Helius API Key
- Railway Account (or any hosting)
- Clone the repo:
git clone https://github.com/intenxe-ops/alert-forge.git
cd alert-forge- Environment variables:
cd bot
cp .env.example .env
# Add your keys to .env- Install dependencies:
pip install -r requirements.txt- Database setup: Create tables in Supabase SQL Editor:
-- Users
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
telegram_chat_id TEXT UNIQUE NOT NULL,
subscription_tier TEXT DEFAULT 'free',
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Monitored wallets
CREATE TABLE bots (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
wallet_address TEXT NOT NULL,
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Alert history
CREATE TABLE alerts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
bot_id UUID REFERENCES bots(id) ON DELETE CASCADE,
alert_type TEXT NOT NULL,
alert_data JSONB,
sent_at TIMESTAMPTZ DEFAULT NOW()
);
-- Deduplication
CREATE TABLE seen_signatures (
id BIGSERIAL PRIMARY KEY,
signature TEXT UNIQUE NOT NULL,
wallet_address TEXT NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Payment tracking (prevents signature reuse)
CREATE TABLE processed_payments (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
signature TEXT UNIQUE NOT NULL,
user_id UUID REFERENCES users(id),
amount NUMERIC NOT NULL,
tier_granted TEXT NOT NULL,
processed_at TIMESTAMPTZ DEFAULT NOW()
);
-- Indexes
CREATE INDEX idx_user_chat_id ON users(telegram_chat_id);
CREATE INDEX idx_bot_wallet ON bots(wallet_address);
CREATE INDEX idx_bot_user ON bots(user_id);
CREATE INDEX idx_sig ON seen_signatures(signature);
CREATE INDEX idx_payment_sig ON processed_payments(signature);- Deploy monitoring:
# Local testing
python monitor.py
# Production: Deploy to Railway
# Connect GitHub repo, set env vars, deploy- Make.com setup:
Visual workflow handles commands. Architecture:
- Webhook β Router β Command handlers β Supabase + Telegram
- 6 routes: /start, /watch, /unwatch, /list, /upgrade, /verify
- Cloudflare Worker:
cd cloudflare
# Deploy worker.js to Cloudflare
# Set MAKE_WEBHOOK_URL environment variable- Set Telegram webhook:
curl -X POST "https://api.telegram.org/bot<YOUR_BOT_TOKEN>/setWebhook" \
-H "Content-Type: application/json" \
-d '{"url": "https://your-worker.workers.dev/"}'users
ββ id (UUID)
ββ telegram_chat_id (TEXT, unique)
ββ subscription_tier (TEXT: 'free', 'pro', 'premium')
ββ created_at (TIMESTAMPTZ)
bots
ββ id (UUID)
ββ user_id (UUID β users.id)
ββ wallet_address (TEXT)
ββ is_active (BOOLEAN)
ββ created_at (TIMESTAMPTZ)
alerts
ββ id (UUID)
ββ bot_id (UUID β bots.id)
ββ alert_type (TEXT)
ββ alert_data (JSONB)
ββ sent_at (TIMESTAMPTZ)
seen_signatures
ββ id (BIGSERIAL)
ββ signature (TEXT, unique)
ββ wallet_address (TEXT)
ββ created_at (TIMESTAMPTZ)
processed_payments
ββ id (UUID)
ββ signature (TEXT, unique)
ββ user_id (UUID β users.id)
ββ amount (NUMERIC)
ββ tier_granted (TEXT)
ββ processed_at (TIMESTAMPTZ)- Wallet monitoring
- USDC payment verification
- Tier system
- Token price alerts
- NFT floor tracking
- Web dashboard
- Multi-chain support (ETH, Base, Arbitrum)
MIT
Questions? Telegram: @intenxe22
Built with the Operator Doctrine.
Ship systems, not dashboards.