Перейти к содержанию
Версия: 3.3.51 Обновлено: 2026-01-23

Диаграммы потоков данных


1. Поток аутентификации

1.1 Регистрация/вход пользователя через Supabase

sequenceDiagram
    participant U as 👤 Пользователь
    participant F as 🖥️ Frontend
    participant S as 🔐 Supabase Auth
    participant B as ⚙️ Backend
    participant DB as 🗄️ PostgreSQL

    U->>F: 1. Google OAuth / Email вход
    F->>S: 2. Аутентификация
    S-->>F: 3. Supabase JWT токен

    F->>B: 4. POST /api/auth/supabase/login
    Note right of F: {supabase_token}

    B->>S: 5. Верификация JWKS
    S-->>B: 6. Токен валиден

    B->>DB: 7. Upsert пользователя
    DB-->>B: 8. User record

    B-->>F: 9. Backend JWT (HS256)

    F->>F: 10. Сохранение в localStorage

Контроли безопасности:

  • [AUTH-004] Верификация Supabase JWKS
  • [DATA-001] TLS шифрование в транзите
  • [AUTH-002] Backend JWT с 24ч expiration

1.2 Аутентификация API запроса

sequenceDiagram
    participant U as 👤 Браузер
    participant M as 🛡️ Middleware
    participant H as 📋 Handler
    participant S as ⚙️ Service

    U->>M: GET /api/user/balance
    Note right of U: Authorization: Bearer <JWT>

    rect rgb(255, 240, 240)
        Note over M: Валидация токена
        M->>M: 1. Извлечение токена
        M->>M: 2. Проверка HS256 подписи
        M->>M: 3. Проверка exp/iss
        M->>M: 4. Извлечение user_id
    end

    M->>H: Context с user_id
    H->>S: Получить баланс для user_id

    S-->>H: Данные баланса
    H-->>U: 200 OK + balance

Контроли безопасности:

  • [AUTH-001] Валидация JWT подписи
  • [AUTHZ-004] Скоупинг пользователя через JWT claims
  • [HDR-007] CORS валидация origin

2. Финансовые операции

2.1 Поток депозита (через Crypto2B)

sequenceDiagram
    participant U as 👤 Пользователь
    participant B as ⚙️ Backend
    participant C as 💰 Crypto2B
    participant BC as ⛓️ Blockchain
    participant DB as 🗄️ БД

    U->>B: 1. Запрос депозитного адреса
    B->>C: 2. Генерация адреса
    C-->>B: 3. Депозитный адрес
    B-->>U: 4. Отображение адреса

    U->>BC: 5. Отправка криптовалюты

    BC->>C: 6. Обнаружение депозита
    C->>B: 7. Webhook: депозит подтверждён
    Note right of C: Подпись HMAC

    rect rgb(240, 255, 240)
        Note over B: Обработка webhook
        B->>B: 8. Верификация подписи
        B->>DB: 9. INSERT транзакции депозита
    end

    B-->>U: 10. Баланс обновлён

Контроли безопасности:

  • [HOOK-001] Верификация подписи webhook
  • [HOOK-003] Идемпотентная обработка
  • [FIN-006] Immutable лог транзакций
  • [DATA-003] Параметризованные SQL запросы

2.2 Поток вывода средств (через Fordefi)

sequenceDiagram
    participant U as 👤 Пользователь
    participant B as ⚙️ Backend
    participant A as 👑 Админ
    participant F as 🏦 Fordefi
    participant BC as ⛓️ Blockchain
    participant DB as 🗄️ БД

    U->>B: 1. Запрос на вывод
    B->>DB: 2. Проверка баланса
    DB-->>B: 3. Баланс достаточен

    B->>DB: 4. Создание pending withdrawal
    B-->>U: 5. Статус: ожидает одобрения

    rect rgb(255, 255, 220)
        Note over A,B: Одобрение администратором
        A->>B: 6. Одобрение вывода
        B->>F: 7. Отправка в Fordefi
    end

    rect rgb(220, 255, 220)
        Note over F: Multi-sig одобрение
        F->>F: 8. Внутренние проверки
        F->>BC: 9. Выполнение транзакции
    end

    F->>B: 10. Webhook: выполнено
    B->>DB: 11. Обновление статуса
    B-->>U: 12. Вывод завершён

Контроли безопасности:

  • [FIN-001] Валидация баланса перед выводом
  • [FIN-002] Атомарная запись транзакции (append-only)
  • [FIN-003] Обязательное одобрение администратора
  • [FIN-004] Fordefi multi-sig (внешний контроль)
  • [FIN-006] Полный audit trail
  • [HOOK-001] Верификация webhook Fordefi

3. Операции администратора

3.1 Аутентификация администратора

sequenceDiagram
    participant A as 👑 Админ
    participant B as ⚙️ Backend
    participant C as 📋 Config
    participant S as 🔐 Supabase

    A->>S: 1. Вход через Supabase
    S-->>A: 2. Supabase JWT

    A->>B: 3. POST /api/auth/supabase/login
    B->>S: 4. Верификация JWT
    S-->>B: 5. JWT валиден

    B->>C: 6. Проверка admin whitelist
    C-->>B: 7. Email в списке админов

    B-->>A: 8. Admin JWT токен

Контроли безопасности:

  • [AUTHZ-002] Config-based admin whitelist
  • [AUTHZ-001] Отдельный тип AdminClaims токена
  • [AUTH-004] Верификация Supabase JWT

3.2 Одобрение вывода средств

sequenceDiagram
    participant A as 👑 Админ
    participant M as 🛡️ Middleware
    participant S as ⚙️ Service
    participant DB as 🗄️ БД

    A->>M: POST /api/admin/withdrawals/{id}/approve
    Note right of A: Authorization: Bearer <AdminJWT>

    rect rgb(255, 240, 240)
        Note over M: Проверки безопасности
        M->>M: 1. Валидация AdminJWT
        M->>M: 2. Проверка IsAdmin()
        M->>M: 3. Проверка permissions
    end

    M->>S: 4. Одобрить вывод

    S->>DB: 5. Проверка существования
    DB-->>S: 6. Withdrawal найден

    S->>DB: 7. Обновление статуса
    S->>DB: 8. Логирование действия админа

    S-->>A: 200 OK

Контроли безопасности:

  • [AUTHZ-001] Требуется AdminClaims
  • [AUTHZ-002] Проверка admin whitelist
  • [AUTHZ-005] Валидация permissions
  • [DATA-004] Логирование действий админа

4. Хранение данных

4.1 Классификация чувствительных данных

flowchart TB
    subgraph Critical["🔴 КРИТИЧНЫЕ (никогда не логируются)"]
        JWT["JWT_SECRET"]
        API["API ключи<br/>Fordefi, Crypto2B, Supabase"]
        DBCred["Учётные данные БД"]
    end

    subgraph Sensitive["🟡 ЧУВСТВИТЕЛЬНЫЕ (контроль доступа)"]
        Email["Email пользователей"]
        Balance["Балансы"]
        TxDetails["Детали транзакций"]
        Addresses["Адреса вывода"]
    end

    subgraph Internal["🟢 ВНУТРЕННИЕ (стандартный доступ)"]
        TxID["ID транзакций"]
        Timestamps["Timestamps"]
        Status["Коды статусов"]
    end

    subgraph Public["⚪ ПУБЛИЧНЫЕ (без защиты)"]
        Strategies["Описания стратегий"]
        APY["APY ставки"]
        Stats["Статистика платформы"]
    end

4.2 Схема базы данных (таблицы, связанные с безопасностью)

erDiagram
    users {
        uuid id PK
        varchar email UK "NOT NULL - идентификатор"
        varchar full_name
        varchar status "DEFAULT 'active'"
        timestamptz created_at
        timestamptz updated_at
    }

    transactions {
        uuid id PK
        uuid user_id FK
        varchar type "NOT NULL"
        decimal amount "NOT NULL"
        varchar currency "NOT NULL"
        varchar status "NOT NULL"
        varchar blockchain_tx_hash
        timestamptz created_at "Immutable"
    }

    withdrawal_requests {
        uuid id PK
        uuid user_id FK
        decimal amount "CHECK > 0"
        varchar to_address "CHECK regex"
        varchar status "State machine"
        uuid admin_id "Audit trail"
        varchar fordefi_tx_id
        varchar blockchain_tx_hash
        timestamptz created_at
        timestamptz updated_at
    }

    users ||--o{ transactions : "user_id"
    users ||--o{ withdrawal_requests : "user_id"

Особенности безопасности:

  • transactions — append-only, без soft delete
  • withdrawal_requests — state machine для статусов
  • Все FK с каскадным удалением отключены
  • Email с UNIQUE constraint

5. Коммуникация с внешними сервисами

5.1 Supabase Auth

flowchart LR
    subgraph Backend
        B[Backend API]
    end

    subgraph Supabase["Supabase (SOC 2)"]
        Auth[Auth Service]
        JWKS[JWKS Endpoint]
    end

    B -->|HTTPS| Auth
    B -->|Verify tokens| JWKS

    style Supabase fill:#e8f5e9
Параметр Значение
Направление Backend → Supabase
Протокол HTTPS
Аутентификация Supabase project keys
Данные JWT токены, профили пользователей
Безопасность JWKS верификация, TLS

5.2 Fordefi

flowchart LR
    subgraph Backend
        B[Backend API]
        WH[Webhook Handler]
    end

    subgraph Fordefi["Fordefi (Enterprise)"]
        API[Fordefi API]
        Custody[Custody Service]
    end

    B -->|"API Key + HTTPS"| API
    Custody -->|"Webhook + Signature"| WH

    style Fordefi fill:#fff3e0
Параметр Значение
Направление Backend ↔ Fordefi
Протокол HTTPS
Аутентификация API key
Данные Запросы на вывод, статусы транзакций
Безопасность API key auth, подписи webhook, TLS

5.3 Crypto2B

flowchart LR
    subgraph Backend
        B[Backend API]
        WH[Webhook Handler]
    end

    subgraph Crypto2B["Crypto2B"]
        API[Crypto2B API]
        Monitor[Deposit Monitor]
    end

    B -->|"API Key + HTTPS"| API
    Monitor -->|"Webhook + Signature"| WH

    style Crypto2B fill:#e3f2fd
Параметр Значение
Направление Backend ↔ Crypto2B
Протокол HTTPS
Аутентификация API key
Данные Депозитные адреса, подтверждения депозитов
Безопасность API key auth, подписи webhook, TLS

Связанные документы