shine-solana/shine/doc/SHINE_PAYMENTS_V2.md

2.7 KiB
Raw Blame History

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