# 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` (права на смену coef/limit) - `inflow_vault` - `call_reward_lamports` 2. `coef_limit_pda` (`shine_payments_v2_coef_limit`) - `coef_ppm` (fixed-point, scale = 1_000_000) - `limit_lamports` (лимит долга очереди 1 для обычной покупки) 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` (только `manager_wallet` из config) - меняет коэффициент и лимит покупки в очередь 1. 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`. 5. `manager_add_ticket` - менеджер добавляет тикет в очередь 1 или 2; - без денежного перевода; - списывает лимит менеджера по выбранной очереди. 6. `step_payout` - выбирает очередь по приоритету: 1. сначала очередь 1; 2. если в 1-й нет ожидания — очередь 2. - шаг выплаты: - `X` получателю тикета, - `X` в DAO, - `reward` вызывающему. - если обе очереди пусты/выплачены: - переводит весь доступный остаток 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, после чего выполняются шаги выплат.