# SHINE Payments v2 ## Назначение `shine_payments` v2 — контракт очереди выплат с двумя очередями: 1. обычная покупка билета (очередь 1); 2. менеджерское добавление билетов (очередь 1 и очередь 2 по лимитам от DAO); 3. пошаговые выплаты из inflow-вольта с приоритетом очереди 1. Сейчас тестовый этап в Devnet: расчеты в SOL/lamports. Следующий этап — модель расчета в USDT по курсу. ## PDA 1. `config_pda` (`shine_payments_v2_config`) - `dao_wallet` - `manager_wallet` (сервисный параметр, для будущих сценариев) - `inflow_vault` 2. `coef_limit_pda` (`shine_payments_v2_coef_limit`) - `coef_ppm` (fixed-point, scale = 1_000_000) - `limit_lamports` (лимит суммарной исторической суммы очереди 1 для обычной покупки) - `call_reward_lamports` (награда за шаг выплат, максимум 0.01 SOL) 3. `queues_pda` (`shine_payments_v2_queues`) - очередь 1: `tickets_total`, `tickets_paid`, `sum_total`, `sum_paid` - очередь 2: `tickets_total`, `tickets_paid`, `sum_total`, `sum_paid` 4. `inflow_vault_pda` (`shine_payments_v2_inflow_vault`) - входящий PDA-вольт программы для выплат. 5. `ticket_pda` - очередь 1: `shine_payments_v2_q1_ticket + index_le_u64` - очередь 2: `shine_payments_v2_q2_ticket + index_le_u64` - поля тикета: - `queue_id` - `index` - `is_paid` - `recipient_wallet` - `payout_lamports` - `debt_before_lamports` 6. `manager_allowance_pda` (`shine_payments_v2_manager_allowance + manager_pubkey`) - `manager_wallet` - `q1_available_lamports` - `q2_available_lamports` ## Методы 1. `init` - вызывается один раз (кто угодно); - создает `config_pda`, `coef_limit_pda`, `queues_pda`, `inflow_vault_pda`. 2. `update_coef_limit` (только `dao_wallet` из config) - меняет коэффициент, лимит покупки в очередь 1 и награду шага выплат; - ограничение награды: не более `0.01 SOL`. 3. `grant_manager_limits` (только `dao_wallet` из config) - DAO выдает/добавляет лимиты менеджеру: - `add_q1_lamports` - `add_q2_lamports` - если PDA менеджера нет — создается; - если есть — лимиты увеличиваются. 4. `buy_ticket` - обычная покупка билета в очередь 1; - сумма покупки идет в DAO; - тикет получает выплату `input * coef_ppm / 1_000_000`; - проверка лимита выполняется по `q1_sum_total` (исторически накопленная сумма, без вычета уже выплаченного). 5. `manager_add_ticket` - менеджер добавляет тикет в очередь 1 или 2; - без денежного перевода; - списывает лимит менеджера по выбранной очереди. 6. `step_payout` - выбирает очередь по приоритету: 1. сначала очередь 1; 2. если в 1-й нет ожидания — очередь 2. - шаг выплаты: - `X` получателю тикета, - `X` в DAO, - `reward` вызывающему (из `coef_limit_pda`). - если обе очереди пусты/выплачены: - переводит весь доступный остаток inflow-вольта в DAO (без reward). ## Стартовые настройки См. `programs/shine_payments/src/settings.rs`: - `START_COEF_PPM = 5_000_000` (коэффициент 5.0) - `START_LIMIT_LAMPORTS = 100 SOL` - `START_CALL_REWARD_LAMPORTS = 0.008 SOL` - `DAO_WALLET` - `MANAGER_WALLET` ## Тестовый режим Пока нет финального production-потока пополнения inflow из регистрации/экосистемы, inflow-вольт пополняется вручную в Devnet, после чего выполняются шаги выплат.