74 lines
2.7 KiB
Markdown
74 lines
2.7 KiB
Markdown
# 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`
|