Разработка P2P-платформы: сделки, TON и Jetton
P2P · Laravel · Vue · TON · Jetton
P2P-платформа для обмена криптовалютой между пользователями. Проект объединяет объявления, сделки, переписку и разбор споров. Для работы с TON-кошельками и токенами Jetton приложение связано с отдельным микросервисом GRAM.
Задача проекта
Организовать обмен между двумя участниками: от выбора объявления и создания сделки до подтверждения оплаты и завершения обмена. В одном приложении нужны личный кабинет, платёжные реквизиты, чат сделки и административный раздел для спорных ситуаций.
Отдельная задача — связать пользовательские балансы с поступлениями из блокчейна. Платформа ведёт внутренний учёт, а GRAM обслуживает кошельки и передаёт сведения о подтверждённых депозитах.
Архитектура платформы
Основное приложение
Laravel отвечает за серверную логику, Inertia и Vue — за интерфейс. Здесь находятся объявления, сделки, профили пользователей, банковские реквизиты и административные инструменты.
Кошельковый микросервис GRAM
Работа с блокчейном вынесена в отдельное приложение. P2P получает от GRAM события о депозитах и передаёт ему заявки на вывод Jetton через межсервисный API.

Объявления и сделки
Пользователь создаёт объявление на покупку или продажу криптовалюты. Другой участник выбирает предложение и открывает сделку. Для её сопровождения предусмотрены отдельные действия:
- создание и подтверждение сделки;
- принятие или отклонение предложения;
- отметка об отправке оплаты;
- завершение обмена или отмена;
- открытие и закрытие спора.
У сделки есть переписка с вложениями и отметками о прочтении. Платёжные реквизиты управляются в профиле. Для администратора предусмотрены просмотр сделок, работа со спорами и справочник их причин.
Отметка участника об оплате и завершение обмена — разные действия. Это позволяет разделить сообщение об отправке денег и дальнейшее решение по сделке.
Приём TON и Jetton
GRAM передаёт подтверждённые входящие транзакции в P2P через API. Для TON и Jetton предусмотрены разные обработчики и отдельный учёт балансов.
В интеграции используется идентификатор внешнего события: повторная доставка одного депозита должна распознаваться как повтор уже известной операции. Для Jetton документация проекта описывает отдельный журнал зачислений и движений по пользовательским балансам.
Такой подход связывает конкретную блокчейн-операцию с её отражением в учёте платформы.
Вывод Jetton
По описанной в проекте схеме, при создании заявки платформа резервирует сумму и комиссию на балансе пользователя. После подтверждения со стороны GRAM резерв списывается, а при отказе или ошибке освобождается.
Синхронизация заявок вынесена в фоновую команду. Она восстанавливает отправку недоставленных запросов и обновляет статусы активных операций после перезапуска очереди.
Доступ и взаимодействие сервисов
Аккаунт пользователя
В проекте предусмотрены PIN, двухфакторная аутентификация, привязка Telegram и сценарии восстановления доступа. Пользовательские и административные операции разделены в маршрутах приложения.
API между P2P и GRAM
Интеграция использует HMAC-подпись, timestamp, одноразовый nonce, список разрешённых IP и Idempotency-Key. Подпись запроса и распознавание повторной финансовой операции решают отдельные задачи.
Стек и развёртывание
Laravel, PHP, Inertia, Vue, MySQL и Redis. Приложение запускается в Docker: отдельно работают Nginx, PHP-FPM, обработчик очередей, планировщик и Laravel Reverb для WebSocket-соединений.
Фоновые процессы отделены от обработки веб-запросов. Документация содержит порядок развёртывания проекта, обновления кода, запуска миграций и сборки интерфейса.
Тестовый токен для интеграции
Для проверки взаимодействия P2P и GRAM подготовлен отдельный проект TGRAM в TON testnet. В него входят контракты Jetton и инструменты развёртывания, выпуска и перевода тестовых токенов.
TGRAM используется для интеграционных сценариев в тестовой сети. Он не является отдельным платёжным активом запущенной P2P-платформы.
Что объединяет проект
Пользовательская часть отвечает за обмен между участниками, административная — за сопровождение сделок, а интеграция с GRAM — за связь с кошельками и блокчейном. TON и Jetton учитываются раздельно, вывод Jetton проходит через резервирование и синхронизацию заявок.
Описание основано на документации и маршрутах проекта. Показатели нагрузки, оборота и коммерческие результаты в кейсе не заявлены.











