shine-solana/shine/doc/SHINE_PAYMENTS_V2.md

101 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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, после чего выполняются шаги выплат.