shine-solana/shine/doc/SHINE_PAYMENTS_V2.md

74 lines
2.7 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:
- пользователь переводит SOL в DAO;
- получает тикет с суммой будущей выплаты `input * coef`.
2. Шаг выплат:
- из inflow-вольта платится следующий тикет;
- такая же сумма отправляется в DAO;
- фиксированная награда отправляется вызвавшему шаг.
## PDA
1. `config_pda` (`shine_payments_v2_config`)
- `dao_wallet`
- `manager_wallet`
- `inflow_vault`
- `call_reward_lamports`
2. `coef_limit_pda` (`shine_payments_v2_coef_limit`)
- `coef_ppm` (коэффициент в fixed-point, scale = 1_000_000)
- `limit_lamports`
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. `q1_ticket_pda` (`shine_payments_v2_q1_ticket + index_le_u64`)
- `is_paid`
- `recipient_wallet`
- `payout_lamports`
- `debt_before_lamports`
- `index`
## Методы
1. `init`
- вызывается один раз (кто угодно);
- создает `config_pda`, `coef_limit_pda`, `queues_pda`, `inflow_vault_pda`.
2. `update_coef_limit` (только manager)
- меняет коэффициент и лимит.
3. `buy_ticket`
- проверяет, что текущий долг очереди 1 меньше лимита;
- переводит входную сумму в DAO;
- создает тикет в очереди 1;
- увеличивает агрегаты очереди.
4. `step_payout`
- если есть тикеты в очереди 1:
- платит `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`