Технический стек:
Язык: Python 3.10+
Фреймворк: Aiogram 3.x (асинхронный)
База данных: aiosqlite (асинхронный SQLite, локальный файл crypto_exchange.db)
Сеть блокчейна: TON (The Open Network). Проверка транзакций идет через открытый API (aiohttp + TonAPI).
Фронтенд (Интерфейс P2P): Telegram Mini App. Написан на чистом HTML/JS/CSS и бесплатно хостится на GitHub Pages.
Связь с Telegram: Long Polling (бот сам запрашивает обновления, веб-сервер и домен не требуются).
2. Архитектура и Логика:
Модель «Единый кошелек» (Single Wallet): Все реальные USDT пользователей хранятся на одном главном TON-кошельке Админа. Внутри бота ведется учет их виртуальных балансов.
Передача данных в WebApp: Чтобы не поднимать свой API-сервер, список заявок кодируется в формат Base64 и передается прямо в ссылке при открытии Mini App. Для обхода лимита длины ссылки передаются только 15 старейших активных заявок.
3. Главный функционал (Фишки):
Эскроу (Безопасная сделка): При связке заявок USDT замораживаются. Бот выступает гарантом.
Умные депозиты: Бот запрашивает TxID (хеш) транзакции в сети TON, сам идет в блокчейн, проверяет, что это именно USDT, проверяет адрес получателя и сумму, после чего автоматически начисляет баланс.
Защита от Double Spend: Строгая проверка статусов заявок в БД, чтобы предотвратить двойные начисления при случайных кликах.
Таймер P2P: Если покупатель не присылает фото чека об оплате в течение 15 минут, сделка автоматически отменяется, а USDT возвращаются продавцу.
Система арбитража: При нажатии кнопки "Спор" админ получает в личку детали сделки и 2 кнопки для решения (отдать USDT покупателю или вернуть продавцу).
4. Права и роли:
Пользователь: Может пополнять баланс, выводить средства (с удержанием комиссии сети), создавать заявки на покупку/продажу, просматривать свою статистику (профиль) и отменять свои свободные заявки.
Админ: Владеет скрытыми командами (/setrate, /setfee, /setlimit, /del, /send), получает уведомления о новых заявках, связывает сделки через удобный пульт (WebApp) и подтверждает/отклоняет заявки на вывод средств.
Нужно выгрузить на сервер, что-бы бот работал стабильно