SHiNE-server/shine-solana/shine/doc/FUNDS_FLOW.md

2.7 KiB
Raw Blame History

Движение Средств (Shine)

Документ описывает, как перемещаются средства между счетами в текущей схеме.

1) Регистрация и увеличение лимита (shine_users)

Регистрация пользователя (create_user_pda)

  1. Плательщик: кошелек signer (кто отправил транзакцию).
  2. Получатель комиссии: inflow_vault (PDA в программе shine_payments).
  3. Сумма перевода:
    • registration_fee_lamports из economy-конфига shine_users;
    • плюс комиссия за additional_limit (по формуле через limit_step и lamports_per_limit_step).

Увеличение лимита (update_user_pda)

  1. Плательщик: кошелек signer.
  2. Получатель комиссии: inflow_vault (тот же PDA shine_payments).
  3. Сумма перевода:
    • только комиссия за additional_limit (без регистрационной части).

2) Покупка билета (shine_payments)

Покупка (buy_ticket, buy_ticket_usd, buy_ticket_sol)

  1. Плательщик: кошелек покупателя (signer).
  2. Получатель: dao_wallet (казна DAO из ConfigState).
  3. В inflow_vault на этом шаге средства не зачисляются.

3) Шаг выплат (shine_payments::step_payout)

Источник выплат: inflow_vault (ConfigState.inflow_vault).

Порядок очередей:

  1. сначала Q1;
  2. потом Q2;
  3. потом Q3.

При шаге выплаты:

  1. Из inflow_vault переводится ticket получателю тикета.
  2. Из inflow_vault переводится DAO-часть в dao_wallet.
    • для Q1 это 1x payout_usd;
    • для Q2 это 2x payout_usd;
    • для Q3 это 3x payout_usd;
  3. Из inflow_vault переводится call_reward_lamports вызывающему шаг.

Если очереди пусты:

  1. Весь доступный остаток inflow_vault переводится в dao_wallet.

4) Какие адреса задаются настройками

  1. dao_wallet — хранится в ConfigState (shine_payments), задается при init.
  2. inflow_vault — PDA shine_payments, вычисляется по seed и program id.
  3. Для shine_users получатель комиссии не настраивается отдельно:
    • всегда используется PDA inflow_vault программы shine_payments.