```mermaid sequenceDiagram autonumber actor User as Пользователь (MiniApp + TON Connect) participant FE as Frontend (MiniApp) participant BE as Backend participant TC as toncenter API v3 participant SC as Atomic Payment Contract (1 платеж) FE->>BE: CreatePayment -> создать платеж в БД (amount) Note over BE: Генерирует transaction_id и сохраняет в БД: service_public_key, service_private_key, transaction_id, expected_ton_amount, valid_until, статус платежа BE-->>FE: PaymentInit(address, stateInit, payload_signed) Note over BE,FE: payload_signed включает: valid_until, - expected_ton_amount, - (опционально) параметры/ограничения\nи подписан service_public_key FE->>User: TON Connect запрос на оплату\n(to=address, stateInit, payload) User->>SC: Internal message + value (TON) с stateInit (деплой) и payload SC->>SC: Проверка подписи (service_public_key) Проверка valid_until Проверка expected_ton_amount == value alt Валидация ОК SC->>SC: status = 1 (Paid / Awaiting confirm) запоминает факт платежа (anti-replay) SC-->>User: Успех, транзакция принята else Валидация НЕ ОК SC-->>User: Reject / bounce (неверная сумма/подпись/истек срок) end loop Периодический мониторинг активных платежей BE->>BE: Собрать список активных платежей (valid_until не истек) Note over BE: Для каждого платежа вычисляет адрес контракта из service_public_key + transaction_id BE->>TC: getAccounts / getTransactions / getAccountState (batch до ~1000 адресов) TC-->>BE: Статусы/данные по контрактам alt Найден контракт со status=1 и оплатой BE->>BE: Рассчитать распределение: applying_address, applying_ton_amount,\nsystem_fee_address, reserve_amount BE->>SC: External confirm message (подпись backend/service key) SC->>SC: Проверка подписи confirm Проверка status==1 Проверка applying_amount <= paid_amount SC->>SC: Transfer applying_amount -> applying_address SC->>SC: Остаток -> system_fee_address (минус reserve на хранение) SC->>SC: status = 2 (Confirmed / Distributed) BE-->>BE: Пометить платеж зачисленным (можно кредитовать пользователя) else Контракт не оплачен / нет / истек BE-->>BE: Ничего не делать или закрыть платеж по valid_until end end ```