Telegram bot interface for Ignit3, a decentralized GPU compute platform on Solana. Built with TypeScript + grammY.
- Dashboard (
/start) — live SOL price, network utilization, providers & VRAM online - ⚡ Run Task — submit a GPU compute job (task name → units → submit)
- 🦊 Get Quote — estimate cost before running, then run it in one tap
- 🖥 Providers — paginated list of GPU providers (region, GPU, price, reliability)
- 🤖 Agents — create / list / view / close persistent agent sessions
- 📁 My Jobs — look up job status by ID, with live progress & results
- 📊 Market — network market stats with 24h change
- 👛 Wallet — connect / refresh / disconnect a Solana wallet (base58 validated), with balance & reputation
- 🎮 GPUs — supported GPU models as a monospace table, sorted by price
- 🔗 Referral — referral code, link, earnings; deep-link attribution on
/start ref_XXX; copy & share - 🏗 Be Provider — multi-step GPU-provider onboarding (GPU → region → wallet check → submit → status)
- 🔔 Notifications — background polling notifies you when a submitted job completes or fails
- 💬 Ask Bot — keyword FAQ about Ignit3
- ⚙️ Settings — per-user API key, wallet, and notification toggle
- Persistent store — JSON-file DB with sensitive fields (API keys, wallets) AES-256-GCM encrypted at rest
- Clean inline-keyboard navigation with in-place message editing and loading states
npm install
cp .env.example .env # then fill in TELEGRAM_BOT_TOKEN (+ IGNIT3_API_KEY)Get a bot token from @BotFather.
npm run dev # watch mode (tsx)
# or
npm run build && npm start@ignit3/sdk and api.ignit3.dev are not publicly available yet. To try the bot
end-to-end without a live backend, set:
IGNIT3_MOCK=trueThis serves deterministic demo data for all API calls (providers, market, quotes, jobs that progress queued → running → completed, sessions, and a simulated SOL price).
| Variable | Required | Default | Description |
|---|---|---|---|
TELEGRAM_BOT_TOKEN |
✅ | — | Bot token from BotFather |
IGNIT3_API_KEY |
— | demo-key |
Ignit3 API key (Bearer auth) |
IGNIT3_BASE_URL |
— | https://api.ignit3.dev/v1 |
API base URL |
COINGECKO_API_URL |
— | https://api.coingecko.com/api/v3 |
SOL price source |
IGNIT3_MOCK |
— | false |
Serve built-in demo data |
LOG_LEVEL |
— | info |
Log verbosity |
DATABASE_PATH |
— | ./data/ignit3.json |
Persistent store location |
DB_ENCRYPTION_KEY |
— | TELEGRAM_BOT_TOKEN |
Secret for encrypting data at rest |
BOT_USERNAME |
— | ignit3bot |
Used for referral deep links |
JOB_POLL_INTERVAL |
— | 15000 |
Job notification poll interval (ms) |
JOB_POLL_TIMEOUT |
— | 600000 |
Max job polling duration (ms) |
src/
├── index.ts # Entry point (DB + notifications init, command registration)
├── bot.ts # Bot instance, command/callback router, error boundary
├── config.ts # Environment configuration
├── sdk/index.ts # Vendored @ignit3/sdk (Ignit3Client + types)
├── handlers/ # One module per feature/menu (incl. wallet, gpus, referral, beProvider)
├── services/ # ignit3 facade (+ mock backend), SOL price, notifications
├── db/store.ts # Encrypted JSON persistence (users, wallets, referrals, prefs)
├── utils/ # keyboards, formatters, validators, conversation state
└── types/ # Shared types
The
src/sdkmodule mirrors the documented@ignit3/sdkAPI exactly. Once the real package ships, swap the imports insrc/services/ignit3.tsfor@ignit3/sdk.