TON-депозиты: идемпотентность и точное зачисление

Crypto / FinTech · TON deposits

Блокчейн подтвердил перевод, но событие доставки может прийти дважды. Как зачислить TON ровно один раз и отличить повтор от попытки подменить данные?

У события должна быть проверяемая идентичность

В обработчике TON-депозита платформы внешний идентификатор вычисляется из сети, адреса кошелька, LT транзакции и нормализованного хеша. Полученный external_id обязан совпасть и с этой формулой, и с заголовком Idempotency-Key. Поэтому отправитель не может просто выбрать произвольный «уникальный» ID для уже известного перевода.

Перед зачислением код проверяет минимальную сумму и запрет депозитов для пользователя. Повтор с теми же параметрами возвращает существующий результат; повтор с конфликтующими параметрами завершается ошибкой. Дополнительная проверка ищет совпадение по сетевой транзакции даже при другом внешнем ID.

Баланс и журнал меняются вместе

Создание записи депозита, пополнение баланса и запись в TON ledger находятся внутри транзакции БД. Для баланса используется блокировка строки. Если запись в журнале не удалась, не должно оставаться зачисления без следа. Уведомление пользователю отправляется уже после успешного commit; ошибка уведомления не откатывает деньги.

Jetton проходит по отдельному маршруту и учитывается в атомарных единицах, поскольку десятичное округление для токенов недопустимо.

Что это даёт

Повторная доставка webhook или retry очереди становится безопасным штатным событием. Оператор может отдельно разбирать доставку, идентичность сетевой транзакции и внутренний баланс.

Подробнее о приёме TON-депозитов → · Кейс P2P-платформы →