Skip to content

Instantly share code, notes, and snippets.

@qwadratic
Last active May 6, 2025 10:01
Show Gist options
  • Select an option

  • Save qwadratic/4b1200524ecd33c5b1e1f51bcaeaad06 to your computer and use it in GitHub Desktop.

Select an option

Save qwadratic/4b1200524ecd33c5b1e1f51bcaeaad06 to your computer and use it in GitHub Desktop.

🧾 MVP платформы криптозаймов через Telegram Mini App

📌 Общая идея

Платформа позволяет пользователю взять займ в "виртуальной" криптовалюте под 10% залог в TON. Пользователь видит рост/падение цены, как будто он купил актив, но реальная покупка происходит только при закрытии позиции. Все операции совершаются в Telegram Mini App, а администрирование — через веб-панель.


📱 Пользовательский интерфейс (Telegram Mini App)

Основной функционал

❗ Все пользовательские действия (заявка на займ, закрытие позиции, вывод) оформляются как заявки и требуют подтверждения администратором через админ-панель.

  • Подключение TON-кошелька через ton-connect.
  • Подача заявки на займ:
    • Выбор криптовалюты из предложенного списка.
    • Ввод суммы в USD или криптовалюте.
    • Автоматический расчет 10% залога.
    • Выбор крипты для внесения залога (TON).
    • Отправка транзакции через TON-сеть.
  • Получение займа:
    • Отображение виртуального баланса (например, 0.1 BTC).
    • График курса (обновляется в реальном времени).
    • Отображение точки входа.
    • Текущий PnL (прибыль/убыток).
    • Кнопка "Закрыть позицию".
  • Закрытие позиции:
    • Положительный PnL → возврат займа и залога, плюс прибыль.
    • Отрицательный PnL → удержание части залога.
    • При превышении убытка над залогом → ликвидация.
  • Уведомления:
    • О сильных изменениях курса.
    • О приближении к ликвидации (margin-call).
    • О начисленных процентах.

🛠️ Админ-панель (Next.js Web App)

Dashboard

  • Общий объем активных займов (Liabilities).
  • Общий объем залогов (Assets).
  • Суммарно начисленные проценты.
  • Net Risk = Assets - (Loans + Interest).
  • Средняя ставка и доход от процентов.
  • Кол-во пользователей в зоне риска.

Карточка пользователя

  • Список всех активных позиций.
  • Сумма всех позиций пользователя (в USD).
  • Текущий долг = займ + проценты.
  • Индикатор риска ликвидации.
  • История действий.

Управление

  • Просмотр и подтверждение/отклонение заявок.
  • Принудительная ликвидация позиций.
  • Настройка:
    • Процентная ставка (2–5% в месяц).
    • Лимиты по займам.
    • Список доступных криптовалют.

Уведомления

  • Пользователям — через Telegram Mini App.
  • Администраторам — через Telegram.
  • Все ошибки — в dev-канал Telegram.

🧮 Финансовая логика

Начисление процентов

  • Проценты начисляются ежедневно, исходя из месячной ставки:
    daily_rate = monthly_rate / 30.
  • Начисления хранятся в поле accrued_interest_usd.
  • Увеличивают общий долг пользователя.

Расчёт долга

current_debt_usd = loan_amount_usd + accrued_interest_usd

Расчёт ликвидации

Ключевые понятия:

  • loan_amount_usd: сумма виртуального займа.
  • accrued_interest_usd: накопленные проценты по позиции.
  • collateral_usd: изначальный залог в USD (10% от займа).
  • effective_collateral_usd = collateral_usd - accrued_interest_usd: доступный залог с учётом процентов.
  • current_price: текущая рыночная цена актива.
  • entry_amount: количество актива, приобретённого "виртуально" по займу.
  • current_value_usd = entry_amount * current_price: текущая стоимость позиции.
  • current_debt_usd = loan_amount_usd + accrued_interest_usd: общий долг.

Условия ликвидации:

  1. Сравнивается текущая стоимость актива и долг:

    if current_value_usd < current_debt_usd:
        потенциальный убыток = current_debt_usd - current_value_usd
    
  2. Сравнивается убыток с доступным залогом:

    if потенциальный убыток >= effective_collateral_usd:
        → инициировать ликвидацию позиции
    

Почему это важно:

  • Накопленные проценты уменьшают реальную "подушку" залога.
  • Чем дольше держится позиция, тем ближе она к принудительной ликвидации даже без резкого падения курса.
  • Это защищает платформу от ситуации, когда убыток + проценты превышают внесенный залог.
effective_collateral_usd = collateral_usd - accrued_interest_usd
  1. Вычисляется текущее значение позиции:
    current_value_usd = entry_amount * current_price.

  2. Если current_value_usd < current_debt_usd — позиция ликвидируется.


🧱 Архитектура

Технологии

  • Frontend: TypeScript, Next.js
  • Backend: TypeScript (Express)
  • БД: Supabase (Postgres)
  • Интеграции:
    • TON Connect (TON-кошельки)
    • Binance / CoinMarketCap API
    • Telegram Bot API

Таблицы базы данных

  • users
  • loans
  • positions
    • loan_amount_usd
    • collateral_usd
    • entry_price_usd
    • current_price_usd
    • accrued_interest_usd
    • last_interest_update
  • currency_rates
  • logs
  • notifications

Курсы обновляются каждые 10–30 секунд.


⚙️ Нагрузка и производительность

  • До 1000 одновременных пользователей.
  • Обновление курсов и расчетов PnL в реальном времени.
  • Курс фиксируется в момент подачи заявки.

Рекомендуемая конфигурация сервера

Параметр Значение
vCPU 4–8 ядер
RAM 8–16 ГБ
SSD NVMe 100+ ГБ
Сеть 1 Gbps

🧾 Логирование и безопасность

  • Все действия логируются (пользовательские и админские).
  • Ошибки автоматически отправляются в Telegram-канал разработчиков.
  • Пользователь не может вывести актив до погашения займа.
  • Проверка залога перед выдачей займа обязательна.
  • Ликвидации защищают систему от убытков.

🔮 Возможности расширения

  • Поддержка токенов TON (например, USDT).
  • Интеграция со смарт-контрактами.
  • Автоматическая ликвидация и уведомления.
  • Система рейтинга/доверия пользователей.
  • Публичная статистика состояния платформы.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment