Web3 · Telegram Mini App / Its Step · кейс 06
Платный доступ в канал на TON
Свой открытый проект: Mini App продаёт подписку на закрытый Telegram-канал за TON. Срок подписки хранит смарт-контракт на Tact, бот пускает в канал и убирает, когда срок закончился.
- Tact
- TON Connect
- Node.js
- TypeScript

25 тестовконтракта и бэкенда, плюс настоящая оплата в testnet
Задача
Показать на открытом проекте, как продавать доступ в закрытый Telegram-канал за криптовалюту без платёжного агрегатора и ручной проверки. Источник правды — блокчейн: подписку может проверить кто угодно, не доверяя серверу.
Что сделал
- Два смарт-контракта на Tact: главный принимает оплату, а для каждого подписчика разворачивает свой маленький контракт со сроком. Продление заранее прибавляется к оставшемуся сроку, недоплата возвращается автоматически.
- Бот пускает в канал только по заявке: перед одобрением читает срок подписки из блокчейна, а раз в минуту убирает тех, у кого срок вышел и продления нет.
- Mini App в стиле самого Telegram: статус подписки, оплата через TON Connect, ожидание подтверждения и кнопка входа в канал. Цвета берутся из темы пользователя.
- Сервер проверяет подпись Telegram у каждого запроса Mini App, поэтому посмотреть или оплатить подписку от чужого имени нельзя.
- Деплой в testnet и настоящая оплата. Она нашла ошибку, которой не было в тестах: кошелёк вычел комиссию из суммы, и контракт вернул платёж. Теперь сервер просит запас 0,01 TON, а на этот случай есть отдельный тест.
Результат в цифрах
25 тестовконтракта, бота и API в песочнице TON
≈ 0,001 TONкомиссия сети за одну оплату
2 контрактаобщий и по одному на подписчика
testnetразвёрнут и проверен настоящей оплатой