Разработка Telegram-бота для мониторинга криптопортфеля

Разработка Telegram-бота для мониторинга криптопортфеля Типичная ситуация: у трейдера активы разбросаны по 5–10 сетям — в пулах ликвидности Uniswap, стейкинге Lido, lending на Aave. Чтобы оценить общую экспозицию и риски ликвидации, приходится открывать 6 вкладок и собирать данные вручную. Наш Te

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1308
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1003
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1269
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1009

Разработка Telegram-бота для мониторинга криптопортфеля

Типичная ситуация: у трейдера активы разбросаны по 5–10 сетям — в пулах ликвидности Uniswap, стейкинге Lido, lending на Aave. Чтобы оценить общую экспозицию и риски ликвидации, приходится открывать 6 вкладок и собирать данные вручную. Наш Telegram-бот агрегирует данные из всех сетей в реальном времени: показывает единый портфель, настраиваемые алерты и критичные события. Решение окупается за неделю, если оно предотвращает хотя бы одну ликвидацию на сумму свыше $1000 — именно такую экономию фиксируют наши пользователи. А ещё наш бот заменяет платные мониторинговые сервисы стоимостью до $100/мес — вы получаете те же данные без ежемесячной подписки. Наша команда имеет 5+ лет опыта в блокчейн-разработке и 50+ реализованных проектов по мониторингу. Свяжитесь с нами — мы бесплатно протестируем бота на ваших кошельках и покажем, как он работает.

Проблемы, которые решаем

Фрагментация данных по сетям

Каждая сеть требует отдельного RPC или API-ключа. Мы подключаем Ethereum, Polygon, Arbitrum, Optimism, Base и BNB Chain через Moralis Web3 API для балансов токенов и DeBank API для DeFi-позиций. Для Bitcoin и Solana — отдельные адаптеры. Все данные собираются асинхронно через asyncio.gather. Время ответа бота — менее 2 секунд даже при 50+ кошельках.

Задержка в ценовых алертах

Пуллинг цены каждые 10 секунд — дорого и неточно. Вместо этого подписываемся на WebSocket стримы Binance и Bybit (бесплатно) для top-100 монет. Для остальных — используем события Chainlink price feed. Потери ценовых движений исключены: алерт приходит за 1–2 секунды. WebSocket-алерты приходят в 10 раз быстрее, чем пуллинг каждые 10 секунд.

Мониторинг health factor в lending-протоколах

Health factor Aave зависит от цены залога и долга. Отслеживаем его через события контрактов (Alchemy webhook) при любом изменении, а также через периодическую проверку при движении цены. Если HF падает ниже 1.2 — автоматический алерт с рекомендацией действий.

Как настроить алерт по health factor?

Пошаговая инструкция для встроенной команды /addalert:

  1. Выберите из подсказок health_factor.
  2. Укажите адрес кошелька, который уже добавлен командой /addwallet.
  3. Установите порог: например, 1.2.
  4. Выберите протокол (Aave V3, Compound V3). Бот автоматически определит активные позиции и начнёт мониторинг. При изменении HF бот пришлёт сообщение с текущим значением и ссылкой на Etherscan.

Архитектура бота

Telegram Bot API (polling/webhook) ↓ Bot handler (aiogram 3.x, Python 3.11) ↓ Portfolio aggregator service ├── Price service (Binance WebSocket + CoinGecko REST) ├── Balance fetcher (Moralis Balance API / Alchemy Token API) ├── DeFi positions (DeBank API + прямые вызовы к Aave/Compound) └── Event listener (Alchemy webhooks для on-chain событий) ↓ Database (PostgreSQL + Redis cache) ├── user wallets (public addresses) ├── alert configurations └── cached portfolio snapshots (TTL: цены 30s, балансы 2-5 min) ↓ Alert scheduler (APScheduler cron + event-driven triggers) 

Redis критичен для кэша: каждый запрос /portfolio не ходит к внешним API, а берёт данные из кэша. Это снижает нагрузку на сторонние сервисы и ускоряет ответ в 3–5 раз.

Сравнение источников данных

Источник Тип данных Стоимость Лимиты Задержка
Moralis Balance API Балансы ERC-20 До 40k запросов/день бесплатно 100 wallet/запрос ~1с
Alchemy Token API Балансы ERC-20 Бесплатно (300M CU/мес) 3 req/s ~0.5с
DeBank API DeFi-позиции Бесплатно (100k запр/день) 1 req/s ~2с
Zerion API DeFi-позиции Платно (от $49/мес) По тарифу ~1с
Binance WebSocket Цены Бесплатно 1024 streams real-time
Chainlink price feed Цены on-chain Бесплатно (via node) ~0.05 USD/запрос ~1 блок

Выбор в пользу Moralis и Alchemy вместо платного Zerion экономит до $50/мес на подключениях к данным.

Типы алертов

Тип алерта Пример настройки Задержка
Изменение цены BTC -5% за 1 час 1-2 сек
Health factor Aave HF < 1.2 ~1 блок
Крупная транзакция > $100k с кошелька real-time
Whale движение адрес из watchlist отправил > $50k real-time
Новый токен на кошелёк пришёл неизвестный ERC-20 1-2 сек

Как мы это делаем: стек и реализация

Стек: Python 3.11 + aiogram 3.x + asyncio. Для каждого пользователя храним список кошельков в PostgreSQL (один запрос при команде). Агрегатор собирает данные параллельно:

async def get_portfolio(wallets: list[str]) -> Portfolio: async with asyncio.TaskGroup() as tg: balance_task = tg.create_task(balance_fetcher.fetch_all(wallets)) defi_task = tg.create_task(defi_fetcher.fetch_all(wallets)) price_task = tg.create_task(price_service.fetch_prices()) return Portfolio(balances=balance_task.result(), positions=defi_task.result(), usd_values=price_task.result()) 

Форматирование вывода — HTML с эмодзи, таблицами, ссылками на Etherscan. Пример:

/portfolio Ваш портфель (обновлено 2 сек назад): **Ethereum** ETH: 2.345 ($7,850) ↗ 1.2% USDC: 15,000.00 ($15,000) ▸ 0% Aave: депозит 10 ETH, долг 5,000 USDC, Health Factor: 1.45 **Polygon** MATIC: 5000 ($4,200) ↗ 3.1% Uniswap V3: MATIC/USDC (0.05%) — $2,300 

Почему безопасность выходит на первый план?

Бот работает только с публичными адресами. Пользователь никогда не вводит приватные ключи или seed-фразы. В onboarding мы явно сообщаем: «Никаких приватных данных». Если бот детектирует попытку ввести похожий на private key текст (64 hex-символа или 12/24 слова) — команда игнорируется, пользователь получает предупреждение. Адреса хранятся в зашифрованной колонке PostgreSQL. Для защиты от флуда — rate limiting на уровне aiogram: не более 30 команд/мин на пользователя.

На каждом этапе используем проверенные решения: например, Chainlink documentation для ценовых фидов или официальные Aave контракты для HF. Это обеспечивает надёжность, подтверждённую сотнями аудитов.

Процесс работы над заказом

  1. Аналитика — обсуждаем какие сети, протоколы, алерты нужны. 2. Проектирование архитектуры — выбираем источники данных, провайдеров, кэш. 3. Реализация бота — Python/aiogram, интеграция с Telegram Bot API, подключение API и WebSocket. 4. Тестирование — юнит-тесты на обработчики команд, интеграционные тесты с моками API, стресс-тест на 100+ кошельков. 5. Деплой — на Railway, Fly.io или ваш VPS с Docker. Предоставляем документацию и инструкцию по эксплуатации.

Что входит в работу

  • База: команды /addwallet, /removewallet, /portfolio, /alerts.
  • Алерты по цене, health factor, крупным транзакциям.
  • Поддержка всех EVM-сетей (Bitcoin/Solana — опционально).
  • Кэширование в Redis для быстрого отклика.
  • Документация по администрированию и развёртыванию.
  • Гарантия работоспособности и доработки в течение месяца после сдачи.

Сроки ориентировочно

Базовая версия — от 2 до 3 рабочих дней. Расширенная с DeFi-позициями и WebSocket — от 5 до 10 дней. Стоимость рассчитывается индивидуально после анализа требований. Свяжитесь с нами для обсуждения вашего сценария — подберём оптимальную архитектуру. Закажите разработку Telegram-бота для мониторинга криптопортфеля — получите консультацию по вашему кейсу.

Пример кода команды /portfolio (полная версия)
@router.message(Command("portfolio")) async def portfolio_command(message: Message): user = await get_user(message.from_user.id) if not user.wallets: await message.answer("Сначала добавьте кошелёк командой /addwallet 0x...") return async with asyncio.TaskGroup() as tg: pf = tg.create_task(aggregator.get_portfolio(user.wallets)) prices = tg.create_task(price_service.get_all_prices()) portfolio = pf.result() text = format_portfolio(portfolio, prices.result()) await message.answer(text, parse_mode="HTML") 

Закажите разработку Telegram-бота для мониторинга криптопортфеля — получите консультацию по вашему кейсу.