TON Blockchain для разработчиков: Stars, USDT, TonConnect и платежи в Telegram
Технический разбор интеграции TON в Telegram Mini App из опыта The Open Squad. Архитектура, TonConnect, приём Jettons (USDT), Telegram Stars, эскроу-контракты, безопасность.
TON Blockchain в 2026 — это не «крипта Telegram-фанатов», а инфраструктурный слой для всей платежной экосистемы внутри мессенджера. В The Open Squad мы интегрировали TON во все продукты — от выплат пользователям The Open Earn (USDT) до эскроу-сделок в The Open Guarantor (смарт-контракты). Этот гайд — про то, что мы узнали по дороге.
Зачем TON для Telegram-проектов
Альтернативы:
- Stripe / PayPal — медленные, дорогие комиссии (3–5%), не работают для пользователей из 50+ стран нашей аудитории
- Криптокошельки разных сетей — UX мрак: пользователь должен знать сети, адреса, газ
- Internal balance без вывода — пользователи не доверяют
TON решает три проблемы сразу:
- Низкие комиссии — десятые цента за транзакцию (vs $0.30+ у Stripe)
- Скорость — финализация за 5 секунд
- UX — TonConnect позволяет подключить кошелёк в 2 клика, без копирования адресов
Архитектура TON в двух минутах
TON — это шардированный PoS-блокчейн. Базовая единица — TON (нативная монета). Поверх работают:
- Jettons — токены стандарта (аналог ERC-20 в Ethereum). USDT в TON — это Jetton от Tether
- NFT — стандарт уникальных токенов
- Workchains / Shardchains — шарды для масштабирования
Для разработчика это значит:
- Один SDK (
@ton/ton,@ton/core) работает и с TON, и с Jettons - Не нужно поддерживать несколько сетей
- Транзакция — это сообщение от одного контракта другому (всё контракты, даже кошельки)
Подключение кошелька через TonConnect
TonConnect — open-source протокол для соединения dApp с кошельком пользователя. Поддерживается всеми крупными TON-кошельками: Tonkeeper, MyTonWallet, Tonhub.
В Mini App это выглядит так:
import { TonConnectUI } from "@tonconnect/ui";
const tonConnectUI = new TonConnectUI({
manifestUrl: "https://yourapp.com/tonconnect-manifest.json",
});
// Открыть модалку выбора кошелька
await tonConnectUI.openModal();
// После подключения — кошелёк доступен:
const wallet = tonConnectUI.wallet;
console.log(wallet?.account.address);
Манифест (tonconnect-manifest.json) — статичный JSON с метаданными приложения. Кошельки его читают, чтобы показать иконку и название в подтверждении.
Приём платежей: TON и USDT
Сценарий 1: получить TON. Сгенерируйте депозитный адрес для пользователя (через подкошелёк HD-wallet). Слушайте новые транзакции через TON API:
from pytoniq import LiteClient
async def listen_deposits(address: str):
async with LiteClient.from_mainnet_config() as client:
txs = await client.get_transactions(address, count=10)
for tx in txs:
if tx.in_msg.value > 0:
process_deposit(user_id, tx.in_msg.value)
Сценарий 2: получить USDT (Jetton). USDT — это Jetton-контракт. Каждый получатель имеет свой Jetton-кошелёк (отдельный адрес от основного). Слушать надо транзакции к Jetton-кошельку, не к основному.
Простой способ: использовать готовые TON Index API (Tonapi.io, TonCenter) с вебхуками на новые входящие.
Telegram Stars: цифровая валюта Telegram
Stars — виртуальная валюта Telegram (1 Star ≈ $0.013). Используется для покупки цифровых товаров: подписок, эмодзи, тем, премиум-фич ботов.
В отличие от TON, Stars нельзя выводить произвольно — Telegram конвертирует Stars в TON только для верифицированных авторов и с задержкой.
Когда использовать Stars вместо TON:
- Платный контент (статьи, курсы, премиум-фичи бота)
- In-app покупки (стикеры, темы)
- Чаевые и донаты
- Соответствие правилам App Store / Play Store (для встроенных покупок Apple/Google требуют Stars)
Когда лучше TON напрямую:
- B2B-выплаты
- P2P-эскроу
- Крупные суммы
- Когда пользователю нужен свободный вывод
Смарт-контракты: эскроу из опыта The Open Guarantor
The Open Guarantor — наш бот для безопасных P2P-сделок на TON. Логика проста:
- Покупатель шлёт TON в эскроу-контракт
- Контракт держит средства до подтверждения
- Покупатель подтверждает получение → контракт переводит TON продавцу
- При споре — арбитр (мы) принимает решение
Контракт пишется на FunC (низкоуровневый язык TON) или Tact (высокоуровневый). Мы пишем на Tact:
contract Escrow {
buyer: Address;
seller: Address;
arbiter: Address;
amount: Int;
state: Int; // 0 = pending, 1 = released, 2 = refunded
receive("release") {
require(sender() == self.buyer, "only buyer");
require(self.state == 0, "already settled");
send(SendParameters{
to: self.seller,
value: self.amount,
mode: SendPayGasSeparately
});
self.state = 1;
}
// ... refund, dispute logic
}
Деплой через blueprint (TON DevKit). Тестируем на testnet, потом мейннет.
Безопасность платежей: чек-лист
Что мы внедрили после первого инцидента:
- Валидация всех входящих сумм — никогда не доверяйте
valueиз транзакции без проверки - Reorg-protection — ждите 6+ блоков перед зачислением (на TON это ~30 секунд)
- Hot/cold wallet split — на горячем кошельке держим только сумму на 24 часа выплат, остальное в холодном
- Hardware-wallet для cold — Ledger или multisig
- Rate-limiting на вывод — не больше N выводов в минуту с одного аккаунта
- Audit trail — каждое движение средств в БД с дублированием в S3 / Postgres replica
Стоимость операций
Для калькуляции unit-экономики:
- Транзакция TON —
0.005 TON газа ($0.025 при $5/TON) - Транзакция Jetton (USDT) —
0.05 TON ($0.25) - Деплой смарт-контракта — единоразово ~0.1 TON
Если у вас 1000 выводов USDT в день — это $250 газа. Чтобы снизить:
- Батчинг выводов (несколько получателей в одной транзакции)
- TON напрямую вместо USDT для микро-сумм
Что дальше
TON — самая практичная блокчейн-сеть для Telegram-проектов в 2026. Если ваш продукт работает с деньгами, TON-интеграция занимает 2–3 недели и сразу даёт качественный UX, который не получить через классические платёжные шлюзы.
Если интересно, как это всё работает в живом продукте — посмотрите The Open Earn (выводы в USDT) или The Open Guarantor (эскроу-контракты).