Тип бота
Продажа идёт двадцать минут, и ломается всё одновременно
Telegram-бот запуска токена ведёт регистрацию в аллоулист, следит за соблюдением лимитов на участника и честно выстраивает очередь взносов во время продажи. Его задача — пережить двадцатиминутный наплыв и не раздать больше, чем есть. Сделать продажу законной там, где она не оформлена как положено, он не может.
Боты запуска токенов: цена, сроки и ограничения
- Фиксированная цена
- $8,400 USD
- Срок
- 32 календарных дня с момента старта
- Семантика апдейтов
- Как минимум одна доставка, порядок между апдейтами не гарантирован
- Запись выделений
- Чтение с последующей записью не атомарно — нужна серверная блокировка
- Время подтверждения
- От секунд до минут в зависимости от загрузки сети
- Финальность в TON
- После подтверждения необратимо
As of 2025-10-01, Telegram Bot API 13.4
Какую задачу это решает
Продажа токена — это нагрузочный тест с деньгами и без второй попытки. Трафик приходит пиком в несколько минут, все участники пытаются действовать одновременно, и любой сценарий отказа дорогой: раздать сверх лимита, дважды засчитать взнос, пустить в аллоулист тех, кого не следовало, или выстроить очередь так, что в ней явно выигрывает тот, кто быстрее жал обновление.
От обычного пика трафика это отличается тем, что под нагрузкой нельзя ослабить корректность. Веб-сервис на пике может отбрасывать запросы. Продажа не может раздать больше лимита на том основании, что было много работы. Каждая проверка обязана держать в худший момент, а значит схема должна быть верной при конкурентном доступе, а не верной на стенде и обнадёживающей в бою.
Вторая проблема — восприятие. Продажу, которая разошлась за девяносто секунд, обвинят в нечестности независимо от того, как она прошла, и единственная защита — запись, которую участник может проверить сам: когда открылась и закрылась регистрация, по какому правилу строилась очередь, сколько досталось каждому адресу и почему кого-то не пустили. Проекты, которые это публикуют, обвинение переживают. Проекты, которые просят им верить, — нет.
Как идёт разработка
Регистрация в аллоулист идёт задолго до продажи
Проверка допуска, привязка кошелька и любая верификация проходят в период, когда никто никуда не спешит. Заниматься установлением личности внутри окна продажи — верный способ уронить запуск.
deep-linkАллоулист замораживается и публикуется как обязательство
Хеш итогового списка публикуется до открытия продажи. Участник может потом убедиться, что список не правили после начала взносов, — именно это обвинение звучит всегда.
commandsЁмкость под взнос резервируется атомарно
Взнос забирает резерв в счёт лимита одной операцией ещё до того, как запрошена оплата. Проверить лимит, а затем отдельным шагом раздать — именно так и возникает перераздача при конкурентном доступе.
webhookОчередь строится по правилу, объявленному заранее
Время регистрации, проверяемая случайная жеребьёвка или порядок поступления взносов — что выберете, то и публикуется до открытия. Необъявленное правило упорядочивания неотличимо от его отсутствия, когда участники начинают сверяться между собой.
inline-keyboardПодтверждение оплаты превращает резерв в выделенную долю
Неоплаченные резервы истекают, и ёмкость возвращается в очередь. Без истечения участник, бросивший процесс на экране оплаты, держит ёмкость, которой никто не может воспользоваться.
payments-apiСверка идёт всё время продажи, а не после неё
Выделенные доли сверяются с взносами в сети непрерывно, пока продажа открыта. Расхождение, найденное на третьей минуте, поправимо; то же расхождение после закрытия — это программа возвратов и удар по репутации.
webhook
Что Telegram разрешает, а что нет
Telegram доставляет апдейты как минимум один раз и не гарантирует порядок между ними.
Каждый обработчик взноса идемпотентен по клиентскому ключу. Иначе повторно доставленный апдейт во время наплыва раздаст долю дважды, а наплыв и есть тот момент, когда повторная доставка наиболее вероятна.
Прочитать лимит, а затем записать выделение отдельными операциями — не атомарно.
Ёмкость резервируется условной записью в одной операции. Это самый частый дефект в системах запуска, и проявляется он только при реальном конкурентном доступе.
Подтверждение в сети занимает от секунд до минут в зависимости от её загрузки.
Ждать подтверждения перед выделением нельзя — очередь встанет. Разрыв закрывают резервы, которые истекают, если подтверждение так и не пришло; поэтому обработка истечения здесь несущая конструкция.
Бот отправляет порядка 30 сообщений в секунду суммарно.
Двадцать тысяч участников невозможно одновременно уведомить об открытии продажи. Открытие объявляется в канале — вот это действительно одновременно, — а не личными сообщениями.
Транзакция в TON необратима после подтверждения.
Перераздачу нельзя отменить, откатив платежи. Она превращается в ручную программу возвратов, и поэтому корректность при конкурентном доступе здесь не обсуждается.
Когда это не нужно строить
- Ваша продажа юридически не оформлена в тех юрисдикциях, где находятся участники. Бот исполняет ваши правила; о том, были ли вы вправе их устанавливать, он мнения не имеет.
- У вас нет ни аллоулиста, ни лимитов. Тогда всё, что нужно, — платёжный адрес, а бот добавляет механику, не добавляя контроля.
- Вы не можете провести репетицию при реалистичном конкурентном доступе. Система запуска без нагрузочного теста — это непроверенная система, потому что все дефекты, которые важны, вылезают только под нагрузкой.
- Вы собираетесь менять правила по ходу продажи. Аудиторская запись это зафиксирует, и публиковать её станет хуже, чем не иметь её вовсе.
На чём это работает
| Компонент | Версия | Зачем |
|---|---|---|
| grammY | 1.45 | Фреймворк бота и сценарий продажи со стороны участника. |
| Cloudflare Durable Objects | current | Однопоточный учёт лимитов — именно он делает возможным атомарный резерв. |
| Cloudflare Workers | current | Внешний API и наблюдатели за подтверждениями в сети. |
| Cloudflare D1 | current | Аллоулист, резервы, выделенные доли и аудиторская запись. |
| TypeScript | 5.9 | Строгий режим, суммы везде в целых минимальных единицах. |
О чём спрашивают перед стартом
Что на самом деле ломается во время запуска?
Почти всегда перераздача — из-за того, что чтение лимита и запись выделения сделаны двумя операциями. При реальном конкурентном доступе оба запроса видят свободную ёмкость и оба её раздают. Такой код проходит любой тест, который не выполняется параллельно, поэтому репетиция под реалистичной нагрузкой здесь не опция.
Как сделать очередь защитимо честной?
Опубликовать правило упорядочивания до открытия продажи, а получившийся порядок — после закрытия. Защитить можно любое правило, если оно было названо заранее; и никакое, если участники выводят его сами, уже будучи разочарованными.
Зачем публиковать хеш аллоулиста?
Потому что обвинение в правке списка посреди продажи прозвучит гарантированно. Обязательство, опубликованное заранее, делает его проверяемым и превращает спор, в котором нельзя победить, в проверку, которую может провести кто угодно.
Что будет, если участник начал взнос и бросил его?
Его резерв истекает, и ёмкость возвращается в очередь. Без истечения брошенные оплаты держат долю, которой никто не воспользуется, и продажа выглядит закрытой, пока ёмкость простаивает.
Получится ли объявить об открытии сразу двадцати тысячам человек?
Через канал — да: пост в канале это одно сообщение, которое читают все. Личные сообщения уходят со скоростью около тридцати в секунду и заняли бы больше десяти минут, поэтому открытие объявляется в канале, а не каждому отдельно.
Делает ли это нашу продажу соответствующей требованиям регулятора?
Нет. Бот исполняет правила, которые вы задали, и производит доказательства их исполнения. Законно ли устроена сама продажа — вопрос к вашим юристам, и он целиком выше по течению от всего, что делает бот.