shine-solana/shine/doc/SHINE_PAYMENTS_V2.md

99 lines
3.9 KiB
Markdown
Raw Permalink 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` (права на смену 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, после чего выполняются шаги выплат.