Разработка Telegram Mini App для крипто-проекта
Крипто-проекты теряют до 90% потенциальных пользователей на этапе регистрации — главный барьер: onboarding через seed phrase. Telegram Mini App (Telegram Web Apps) снимает эту проблему: авторизация в один клик через Telegram, а транзакции подписываются через TON Connect или custodial кошелёк. Пользователь теряет контекст при переходе в браузер — отток на каждом шаге. Mini App удерживает: 70% юзеров завершают транзакцию в Telegram. За 6 лет мы реализовали 15+ таких проектов — от простых faucet-ботов до DeFi-платформ с TVL $50M+. Пользователь даже не замечает, что взаимодействует с блокчейном: интерфейс привычный, скорость реакции — под 60 FPS.
Telegram Web Apps — официальная платформа для создания мини-приложений внутри мессенджера (источник: core.telegram.org/bots/webapps)
Как мы интегрируем кошельки?
Выбор метода определяет порог входа. TON Connect даёт в 3 раза более высокую конверсию среди массовой аудитории, чем WalletConnect, который рассчитан на crypto-native пользователей. Custodial кошелёк — компромисс: onboarding за 10 секунд, но ключи хранятся на сервере.
| Вариант | Аудитория | Сложность | Безопасность |
|---|---|---|---|
| TON Connect | Массовая, пользователи TON | Средняя | Высокая (подпись в кошельке) |
| WalletConnect | Crypto-native (EVM) | Высокая | Высокая |
| Custodial кошелёк | Новички, gaming | Низкая | Средняя (ключи на сервере) |
Для TON используем @tonconnect/sdk. Для EVM — WalletConnect v2. Если аудитория не готова к самостоятельному управлению ключами, реализуем custodial: бэкенд генерирует ключи, пользователь подтверждает действия через Telegram identity. Наш кейс: для NFT-маркетплейса на TON выбрали связку TON Connect + custodial для неактивных юзеров — конверсия выросла на 40%.
Почему важна верификация initData?
Без серверной проверки initData злоумышленник подменяет initDataUnsafe и выдает себя за другого. Telegram подписывает данные HMAC-SHA256 с секретом бота. Проверка обязательна — сравнение с вычисленным хешем:
// Frontend: получаем initData import WebApp from "@twa-dev/sdk"; const initData = WebApp.initData; const user = WebApp.initDataUnsafe.user; const response = await fetch("/api/auth/telegram", { method: "POST", body: JSON.stringify({ initData }), }); // Backend: верификация initData import crypto from "crypto"; function verifyTelegramInitData(initData: string, botToken: string): boolean { const params = new URLSearchParams(initData); const hash = params.get("hash"); params.delete("hash"); const checkString = [...params.entries()] .sort(([a], [b]) => a.localeCompare(b)) .map(([k, v]) => `${k}=${v}`) .join("\n"); const secretKey = crypto .createHmac("sha256", "WebAppData") .update(botToken) .digest(); const expectedHash = crypto .createHmac("sha256", secretKey) .update(checkString) .digest("hex"); return hash === expectedHash; } Никогда не доверяем initDataUnsafe на фронте без серверной проверки. Если хеш не совпадает — сервер возвращает 401. На фронте редиректим на экран ошибки с кнопкой «Повторить». Важно: не используем initData из window — только тот, что пришел от Telegram WebApp.
Как TON Connect ускоряет привлечение пользователей?
TON Connect подходит для массовой аудитории, не знакомой с криптокошельками. Достаточно нажать кнопку «Войти через Telegram» — кошелёк создаётся автоматически. Время до первой транзакции: 40 секунд против 3-5 минут через WalletConnect. Для TON используем @tonconnect/sdk.
import TonConnect from "@tonconnect/sdk"; const connector = new TonConnect({ manifestUrl: "https://yourapp.com/tonconnect-manifest.json", }); const walletsList = await connector.getWallets(); await connector.connect({ universalLink: walletsList[0].universalLink }); await connector.sendTransaction({ validUntil: Math.floor(Date.now() / 1000) + 600, messages: [{ address: recipientAddress, amount: "1000000000", }], }); UI/UX: адаптация под Telegram
Telegram предоставляет CSS-переменные для темы. Используем var(--tg-theme-bg-color), var(--tg-theme-text-color), var(--tg-theme-button-color). MainButton — нативный элемент для подтверждения:
WebApp.MainButton.text = "Подтвердить транзакцию"; WebApp.MainButton.color = "#6366f1"; WebApp.MainButton.show(); WebApp.MainButton.onClick(async () => { WebApp.MainButton.showProgress(true); await sendTransaction(); WebApp.MainButton.hideProgress(); WebApp.close(); }); Haptic feedback — impactOccurred для кнопок, notificationOccurred для успеха. Сравните с браузерным dApp: время до первого действия сокращается в 2-3 раза. Deep links для транзакций: бот отправляет кнопки с startapp=tx_0x1234, бэкенд читает startParam и восстанавливает контекст.
Крипто-специфичные паттерны
Transaction confirmation flow. В отличие от MetaMask, у пользователя нет деталей. Явно показываем: не «Подтвердить», а «Купить 100 USDT за 0.05 ETH», текущие газ-лимиты, время до подтверждения.
| Подход | Время onboarding | Конверсия |
|---|---|---|
| WalletConnect (EVM) | 3-5 мин | 15-20% |
| TON Connect | 40 сек | 45-60% |
| Custodial | 15 сек | 65-80% |
Balance display. Используем WebApp.expand() для полноэкранного режима. Малый экран — карточки вместо таблиц. Закажите разработку Mini App — мы подберём оптимальную схему интеграции.
Что входит в работу
- Аналитика: выбор варианта интеграции кошелька, проектирование UX
- Разработка фронтенда (React + TypeScript +
@twa-dev/sdk) - Интеграция TON Connect или WalletConnect v2
- Бэкенд: верификация initData, обработка транзакций, хранение состояния
- Деплой на HTTPS (Cloudflare Pages или Vercel)
- Документация по использованию и поддержка после запуска
Процесс работы
- Аналитика — обсуждаем требования, выбираем стек и схему кошелька.
- Проектирование — создаём прототип UI и архитектуру.
- Реализация — пишем код фронтенда, смарт-контрактов (если нужно) и бэкенда.
- Тестирование — unit-тесты, fuzzing для контрактов, проверка в Mini App.
- Деплой — размещаем на production, настраиваем домен и бота.
Сроки ориентировочно: от 3 недель для MVP до 4 месяцев для полноценного продукта. Стоимость рассчитывается индивидуально. Получите консультацию по вашей задаче — мы поможем определить оптимальное решение.
Ограничения платформы
- Нет
window.ethereum— классический MetaMask не работает в WebView Telegram. - Ограниченный localStorage — используем sessionStorage или бэкенд.
- Camera/NFC API недоступны — нельзя сканировать QR в iframe.
- Content Security Policy строже браузерного — проверяем inline scripts.
Архитектура типового Mini App
Фронтенд (React) общается с бэкендом через REST API. Бэкенд обрабатывает транзакции, хранит сессии и проверяет initData. Смарт-контракты (Solidity или FunC) развернуты в сети. Взаимодействие через TON Connect или WalletConnect.Свяжитесь с нами для оценки вашего проекта.







