4.4 KiB
SHINE Payments v2
Назначение
shine_payments v2 — контракт очереди выплат с двумя очередями:
- обычная покупка билета (очередь 1);
- менеджерское добавление билетов (очередь 1 и очередь 2 по лимитам от DAO);
- пошаговые выплаты из inflow-вольта с приоритетом очереди 1.
Сейчас тестовый этап в Devnet: расчеты в SOL/lamports.
Следующий этап — модель расчета в USDT по курсу.
PDA
-
config_pda(shine_payments_v2_config)dao_walletmanager_wallet(сервисный параметр, для будущих сценариев)inflow_vault
-
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)
-
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-вольт программы для выплат.
-
ticket_pda- очередь 1:
shine_payments_v2_q1_ticket + index_le_u64 - очередь 2:
shine_payments_v2_q2_ticket + index_le_u64 - поля тикета:
queue_idindexis_paidrecipient_walletpayout_lamportsdebt_before_lamports
- очередь 1:
-
manager_allowance_pda(shine_payments_v2_manager_allowance + manager_pubkey)manager_walletq1_available_lamportsq2_available_lamports
Методы
-
init- вызывается один раз (кто угодно);
- создает
config_pda,coef_limit_pda,queues_pda,inflow_vault_pda.
-
update_coef_limit(толькоdao_walletиз config)- меняет коэффициент, лимит покупки в очередь 1 и награду шага выплат;
- ограничение награды: не более
0.01 SOL.
-
grant_manager_limits(толькоdao_walletиз config)- DAO выдает/добавляет лимиты менеджеру:
add_q1_lamportsadd_q2_lamports
- если PDA менеджера нет — создается;
- если есть — лимиты увеличиваются.
- DAO выдает/добавляет лимиты менеджеру:
-
buy_ticket- обычная покупка билета в очередь 1;
- сумма покупки идет в DAO;
- тикет получает выплату
input * coef_ppm / 1_000_000; - проверка лимита выполняется по
q1_sum_total(исторически накопленная сумма, без вычета уже выплаченного).
-
manager_add_ticket- менеджер добавляет тикет в очередь 1 или 2;
- без денежного перевода;
- списывает лимит менеджера по выбранной очереди.
-
step_payout- выбирает очередь по приоритету:
- сначала очередь 1;
- если в 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 SOLSTART_CALL_REWARD_LAMPORTS = 0.008 SOLDAO_WALLETMANAGER_WALLET
Тестовый режим
Пока нет финального production-потока пополнения inflow из регистрации/экосистемы, inflow-вольт пополняется вручную в Devnet, после чего выполняются шаги выплат.