P2P-платформа: сделки, TON и Jetton
Кейс · P2P / FinTech · Laravel · TON / Jetton
P2P-платформа для обмена криптоактивов между людьми: объявления, сделки, реквизиты, чат, споры, внутренние балансы и связь с отдельным TON-сервисом GRAM. Главная инженерная задача — сохранить финансовую согласованность, когда пользовательские действия, очередь и блокчейн идут в разном темпе.
Что делает сама платформа
Пользователь размещает объявление о покупке или продаже, задаёт курс, лимиты и окно оплаты. Второй участник открывает сделку, видит сохранённые реквизиты и общается в чате. Затем следуют подтверждение участия, отметка об оплате, отпуск криптоактива либо спор. У администратора есть инструменты для разбора споров и вывода средств.
Это отдельное Laravel-приложение с Inertia и Vue, а не только кошельковый микросервис. У него собственные модели объявлений, сделок, балансов, банковских реквизитов и истории операций, веб-интерфейс и REST API v2.
Где появляется риск двойного расхода
Допустим, в объявлении доступно 100 единиц. Два клиента одновременно пытаются открыть сделку на 80. Простая проверка остатка в браузере пропустила бы обоих. В серверном сценарии строка объявления блокируется через lockForUpdate() внутри транзакции MySQL; сумма объявления уменьшается до создания черновика сделки. Когда оставшийся лимит становится меньше минимального, объявление закрывается. Неподтверждённый черновик отменяет фоновое задание.
После оплаты только продавец криптоактива может выполнить release, и только для сделки в статусе paid. В той же транзакции списывается его замороженный баланс и пополняется баланс покупателя. При отмене лимит объявления возвращается, а заморозка снимается по правилам состояния сделки.
Объявление
Курс, доступный объём, минимальная сумма, срок оплаты и статус.
Сделка
Черновик → подтверждение → оплата → release, отмена либо спор.
Деньги
Доступный и замороженный баланс меняются в транзакциях БД.
Почему кошельки вынесены в GRAM
P2P управляет обязательствами перед пользователями; GRAM отвечает за TON-кошельки и сетевые операции. Между ними проходит подписанный межсервисный API. В коде платформы есть отдельные обработчики TON- и Jetton-депозитов, сервисы вывода, журнал операций и процедуры сверки. Сетевое событие нельзя автоматически приравнять к пользовательскому балансу: сначала нужны проверка происхождения, уникальности и точной суммы.
Для TON идентификатор депозита строится из сети, адреса кошелька, LT транзакции и нормализованного хеша. Запрос сверяется с Idempotency-Key. Повтор того же события возвращает прежний результат, а попытка использовать тот же идентификатор с другими данными вызывает конфликт. Зачисление, создание записи депозита и запись в ledger выполняются внутри одной транзакции БД.
Jetton учитывается в atomic units, чтобы не терять точность при дробных количествах. При выводе система сначала резервирует сумму; подтверждение списывает резерв и баланс, отказ освобождает резерв. Для каждого перехода есть ключ идемпотентности в журнале.
Безопасность и эксплуатация
В приложении предусмотрены подтверждение почты, 2FA, PIN для чувствительных операций, восстановление доступа, Telegram-интеграция и административные настройки. Laravel Reverb обслуживает события в реальном времени; очереди, планировщик, MySQL, Redis и Nginx запущены отдельными Docker-сервисами.
Аудит развёрнутого экземпляра 22 сентября 2026 года показал testnet-конфигурацию без пользователей, сделок и депозитов. Часть интеграционных флагов TON/Jetton отключена; поэтому этот кейс описывает реализованную архитектуру и сценарии в исходном коде, а не подтверждённый оборот работающей биржи. Метрики нагрузки и коммерческого результата не заявлены.
Инженерный результат
Платформа разделяет три разных истины: состояние P2P-сделки, внутренний учёт обязательств и подтверждённое событие сети. Связь между ними построена на блокировках строк, статусных переходах, резервировании и идемпотентности. Это позволяет отдельно разбирать пользовательский спор, повтор доставки депозита и ошибку вывода, не смешивая их в одну операцию.
Подробнее о связанных узлах: создание и привязка кошельков, приём TON-депозитов, сбор средств и казначейство. Отдельные заметки о механике платформы опубликованы в разделе Crypto / FinTech.











