Тип бота
Перемещение средств в переписке — с серьёзным отношением к отказам
Кошельковый бот в Telegram позволяет держать баланс, отправлять переводы и выводить средства прямо в чате. Это самая рискованная разработка в каталоге: хранение ключей, защита от повторов и идемпотентность решают, продукт это или инцидент. Некастодиальная схема снимает большую часть риска, и выбирать стоит её всюду, где она подходит.
Криптокошельковые боты: цена, сроки и ограничения
- Фиксированная цена
- $11,800 USD
- Срок
- 45 календарных дней с момента старта
- Семантика апдейтов
- Как минимум однократно, без гарантии порядка
- Финальность в сети TON
- После подтверждения необратимо
- Надёжность имени пользователя
- Ник можно освободить, и его займёт другой человек
- Хранение средств
- Регулируемая деятельность — в Дубае лицензия VARA
As of 2025-10-01, Telegram Bot API 13.4
Какую задачу это решает
Кошельковые боты популярны потому, что схлопывают по-настоящему неудобный сценарий. Обычно отправка средств другому человеку означает адреса, выбор сети, комиссию и экран подтверждения, написанный для тех, кто и так всё понимает. В чате это превращается в сообщение на имя пользователя. Для чаевых, вознаграждений, внутренних экономик сообществ и выплат именно эта разница и есть весь продукт.
Здесь же происходят и крупнейшие потери в телеграмной крипте, причём по причинам совершенно негероическим. Неидемпотентная ручка перевода платит дважды, когда апдейт приходит повторно. Вывод, доверяющий сумме, присланной клиентом, отправит ровно столько, сколько ему сказали. Баланс, обновлённый до подтверждения сетью, — это баланс, который атакующий потратит дважды. Ничего экзотического; всё это раз за разом всплывает в разборах инцидентов.
Поэтому первый архитектурный вопрос — хранение ключей, и отвечать на него нужно раньше всего остального. Кастодиальный бот держит ключи и отвечает за деньги пользователей, а значит тянет за собой управление ключами, операционную безопасность и, в большинстве юрисдикций, регуляторную нагрузку. Некастодиальная схема подключает собственный кошелёк пользователя и не держит ничего: продукт меньше, ответственность несравнимо меньше, и подходит это чаще, чем команды ожидают. Выбрать хранение просто потому, что так удобнее, не посчитав обязательств, — самое дорогое решение из доступных здесь.
Как идёт разработка
Вопрос о хранении ключей решается первым и записывается
Кастодиально или нет — и что это значит для ключей, для страхования и для регулятора в вашей юрисдикции. От этого зависит всё остальное, и такую вещь не доуточняют по ходу реализации.
commandsПополнение зачисляется только после подтверждения
Бот следит за сетью и зачисляет после заданной вами глубины подтверждения. Зачисление по факту отправки — тот самый механизм, за которым стоит большинство потерь от двойной траты в ботах этого класса.
webhookКаждое изменение баланса — проводка, а не перезапись
Двойная запись, только добавление, с указанием причины и ссылки. Баланс, который можно лишь наблюдать, невозможно проверить, а разбор после инцидента без истории попросту не состоится.
webhookПереводы идемпотентны по ключу, который присылает клиент
Один и тот же запрос на перевод, доставленный дважды, двигает средства один раз. Апдейты Telegram приходят как минимум однократно, так что это требование к корректности, а не изящная предосторожность.
commandsВывод проходит лимиты, а выше порога — ещё и человека
Лимиты на операцию и скользящие лимиты за период, период охлаждения для только что добавленных адресов и ручное согласование выше выбранной вами суммы. Трение здесь и есть контроль; убрать трение — значит убрать контроль.
inline-keyboardСверка идёт непрерывно и поднимает тревогу при расхождении
Итог по книге против фактических остатков в сети, по расписанию. Расхождение, найденное за минуты, — это расследование; то же расхождение, найденное в конце месяца, — это убыток.
webhook
Что Telegram разрешает, а что нет
Telegram доставляет апдейты как минимум один раз и не гарантирует порядок между ними.
Любой обработчик, двигающий средства, обязан быть идемпотентным и не рассчитывать на последовательность. Именно это свойство приносит кошельковым ботам больше потерь, чем любая криптографическая слабость.
Транзакция в TON после подтверждения необратима, и арбитра не существует.
Вывод, ушедший не на тот адрес, потерян. Проверка адреса, экраны подтверждения и период охлаждения для новых адресов — единственная защита, и её место в архитектуре, а не в правилах поддержки.
Имена пользователей Telegram можно менять и освобождать, после чего их занимает кто-то другой.
Отправка на `@username` разрешается в числовой идентификатор пользователя в момент перевода. Если хранить имя как личность получателя, освобождённый ник унаследует чужие входящие платежи.
Реорганизация цепочки может отменить транзакцию, выглядевшую подтверждённой.
Глубина подтверждения задаётся отдельно для каждой сети и под размер суммы, а не одной глобальной константой. Глубина, безопасная для чаевых, небезопасна для вывода на пятизначную сумму.
Хранение средств пользователей — регулируемая деятельность в большинстве юрисдикций, включая режим VARA в Дубае.
Кастодиальный кошельковый бот — сначала вопрос лицензии и только потом вопрос разработки. Это прорабатывается с вашими юристами, а проект, который этот шаг пропускает, строит не продукт, а ответственность.
Когда это не нужно строить
- Вы не получали юридической консультации о хранении чужих средств в своей юрисдикции. Держать деньги пользователей без неё — кратчайший путь превратить продукт в дело о нарушении.
- Требование закрывается некастодиальной схемой. Если пользователи могут подключить собственный кошелёк, так и сделайте: это убирает почти всю поверхность риска и бóльшую часть стоимости.
- Вы не готовы финансировать практику операционной безопасности. Управление ключами в кастодиальном кошельке — постоянная дисциплина, а не задача на время разработки, и заброшенная она рано или поздно подводит.
- Суммы ничтожны. Если кошелёк нужен ради мелких чаевых, внесетевая система баллов без вывода обойдётся в долю стоимости и в долю риска.
На чём это работает
| Компонент | Версия | Зачем |
|---|---|---|
| grammY | 1.45 | Фреймворк бота; все обработчики, двигающие средства, написаны идемпотентно. |
| Cloudflare Workers | current | Серверный слой и наблюдатели за состоянием сети. |
| Cloudflare D1 | current | Книга двойной записи только на добавление и состояние сверки. |
| TON Connect | 2.x | Подключение собственного кошелька пользователя, если выбрана некастодиальная схема. |
| TypeScript | 5.9 | Строгий режим; суммы хранятся целыми числами в минимальных единицах, а не дробными. |
О чём спрашивают перед стартом
Делать кошелёк кастодиальным или некастодиальным?
Некастодиальным везде, где он закрывает требование. Так снимаются управление ключами, бóльшая часть нагрузки на операционную безопасность и, в большинстве юрисдикций, вопрос лицензии. Хранение чужих средств должно быть обдуманным решением с юридической опорой, а не значением по умолчанию, выбранным ради удобства.
Что помешает повторному апдейту заплатить пользователю дважды?
Идемпотентность по идентификатору, который присылает клиент, проверяемая внутри той же транзакции, что двигает средства. Telegram гарантирует доставку как минимум один раз, поэтому дубли апдейтов — ожидаемое поведение, а не редкий случай.
Можно ли зачислять пополнение сразу, как только мы его увидели?
Нет. Зачисление по факту отправки, а не по подтверждению, — стандартная дорога к потере от двойной траты. Глубина подтверждения задаётся под сеть и растёт вместе с суммой, потому что безопасное для чаевых небезопасно для крупного вывода.
Годится ли имя пользователя Telegram как идентификатор получателя?
Нет. Ники можно освободить, и зарегистрировать их заново способен кто угодно. Переводы разрешаются в числовой идентификатор пользователя в момент отправки, а сохранённые карточки получателей опираются на этот идентификатор, а не на ник.
Как выглядит регулирование этой истории в Дубае?
Хранение клиентских средств — регулируемая деятельность, и у VARA есть отдельный режим для поставщиков услуг с виртуальными активами. Этот пункт обсуждается на этапе оценки прямо и открыто, потому что ответ про лицензию способен полностью изменить архитектуру.
Как вы узнаёте, что что-то пошло не так?
Непрерывная сверка книги с остатками в сети и тревога при любом расхождении. Проектное допущение состоит в том, что однажды что-то обязательно сломается; требование — чтобы это нашли за минуты, а не в конце месяца.
Почему это самая дорогая разработка в каталоге?
Потому что примерно треть трудозатрат уходит на обработку отказов — реорганизации цепочки, зависшие транзакции, частичные выводы, сверка, — а не на функциональность. В демонстрации эта работа невидима, и именно она отделяет кошелёк от инцидента.