2.7 KiB
2.7 KiB
SHINE Payments v2 (краткое описание)
Назначение
shine_payments v2 — контракт очереди выплат:
- Покупка билета в очередь 1:
- пользователь переводит SOL в DAO;
- получает тикет с суммой будущей выплаты
input * coef.
- Шаг выплат:
- из inflow-вольта платится следующий тикет;
- такая же сумма отправляется в DAO;
- фиксированная награда отправляется вызвавшему шаг.
PDA
-
config_pda(shine_payments_v2_config)dao_walletmanager_walletinflow_vaultcall_reward_lamports
-
coef_limit_pda(shine_payments_v2_coef_limit)coef_ppm(коэффициент в fixed-point, scale = 1_000_000)limit_lamports
-
queues_pda(shine_payments_v2_queues)- очередь 1:
tickets_total,tickets_paid,sum_total,sum_paid - очередь 2:
tickets_total,tickets_paid,sum_total,sum_paid
- очередь 1:
-
inflow_vault_pda(shine_payments_v2_inflow_vault)- PDA-вольт программы для выплат.
-
q1_ticket_pda(shine_payments_v2_q1_ticket + index_le_u64)is_paidrecipient_walletpayout_lamportsdebt_before_lamportsindex
Методы
-
init- вызывается один раз (кто угодно);
- создает
config_pda,coef_limit_pda,queues_pda,inflow_vault_pda.
-
update_coef_limit(только manager)- меняет коэффициент и лимит.
-
buy_ticket- проверяет, что текущий долг очереди 1 меньше лимита;
- переводит входную сумму в DAO;
- создает тикет в очереди 1;
- увеличивает агрегаты очереди.
-
step_payout- если есть тикеты в очереди 1:
- платит
Xполучателю тикета, - платит
Xв DAO, - платит reward вызвавшему;
- помечает тикет выплаченным, обновляет агрегаты.
- платит
- если обе очереди пусты/полностью выплачены:
- переводит из inflow-вольта в DAO весь доступный остаток (сверх ренты),
- reward не платится.
- если есть тикеты в очереди 1:
Стартовые настройки
См. programs/shine_payments/src/settings.rs:
START_COEF_PPM = 5_000_000(коэффициент 5.0)START_LIMIT_LAMPORTS = 100 SOLSTART_CALL_REWARD_LAMPORTS = 0.008 SOLDAO_WALLET,MANAGER_WALLET