shine-solana/shine/doc/SHINE_PAYMENTS_V2.md

3.9 KiB
Raw Blame History

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, после чего выполняются шаги выплат.