SHiNE-server/Dev_Docs/Solana_Architecture/details/accounts_and_money_flow.md

4.4 KiB
Raw Blame History

Счета, ключи и движение денег

Кратко

В архитектуре есть три типа объектов:

  1. Ключи программ и DAO.
  2. PDA-счета состояния.
  3. Денежные счета, через которые проходят SOL/lamports.

Ключи

Минимальный набор для понимания:

  1. key_1 — deploy/upgrade authority shine_login_guard.
  2. key_2 — deploy/upgrade authority shine_users.
  3. key_3 — deploy/upgrade authority shine_payments.
  4. DAO_AUTHORITY — адрес, который имеет право менять защищенные настройки.
  5. DAO_TREASURY_WALLET / dao_wallet — казна DAO.
  6. manager_wallet — кошелек менеджера, которому DAO выдает лимиты на создание тикетов.
  7. user root_key — корневой ключ пользователя для подписи пользовательской записи.
  8. user device_key — ключ устройства пользователя.
  9. server_key — ключ сервера пользователя, если пользователь является сервером.

Текущие адреса из programs/common/src/deploy_config.rs:

Роль Адрес
SHINE_LOGIN_GUARD_PROGRAM_ID 3xkopA7cXagxzMFrKdv3NCBfV6BKiRJCk69kr27M2sRo
SHINE_USERS_PROGRAM_ID FZS1YctoeEhCkZ5VTjsysUFAXR8CqxYztcLboXcg2Rpm
SHINE_PAYMENTS_PROGRAM_ID c4yTa4JT9EtQDCBX9LmWFK6T2gp4JGsuymFbom2EudW
DAO_AUTHORITY FUc28vNixp7F3nnkpGVt6nuJbgvJ4429v4B5wS52Df6P
DAO_TREASURY_WALLET FUc28vNixp7F3nnkpGVt6nuJbgvJ4429v4B5wS52Df6P

Постоянные PDA

shine_users:

  • user_pda — создается для каждого логина, seed login= + normalized login.
  • users_economy_config_pda — один PDA с экономикой регистрации, seed shine_users_economy_config.

shine_payments:

  • config_pda — один PDA конфига, seed shine_payments_config.
  • coef_limit_pda — один PDA коэффициента/лимита/награды, seed shine_payments_coef_limit.
  • queues_pda — один PDA агрегатов очередей, seed shine_payments_queues.
  • inflow_vault_pda — один PDA-вольт входящих средств, seed shine_payments_inflow_vault.
  • ticket_pda — много PDA, по одному на тикет, seed shine_payments_q1_ticket или shine_payments_q2_ticket + индекс.
  • manager_allowance_pda — много PDA, по одному на менеджера, seed shine_p_manager_allow + адрес менеджера.

Денежные потоки

Регистрация

user signer -> shine_users::create_user_pda -> shine_payments::inflow_vault_pda

Состав платежа:

  • регистрационная комиссия;
  • оплата additional_limit.

Увеличение лимита

user signer -> shine_users::update_user_pda -> shine_payments::inflow_vault_pda

Состав платежа:

  • только оплата additional_limit.

Покупка тикета

buyer signer -> shine_payments::buy_ticket* -> dao_wallet

При этом создается ticket_pda, но деньги в inflow_vault_pda на этом шаге не идут.

Выплата

shine_payments::inflow_vault_pda -> ticket_recipient_wallet
shine_payments::inflow_vault_pda -> dao_wallet
shine_payments::inflow_vault_pda -> step_payout caller

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

shine_payments::inflow_vault_pda -> dao_wallet

Что нужно создать на старте

Минимально:

  1. Три program id для shine_login_guard, shine_users, shine_payments.
  2. Три upgrade-authority ключа или один временный deploy-ключ с четким планом передачи прав.
  3. DAO authority/treasury.
  4. users_economy_config_pda.
  5. shine_payments PDA: config_pda, coef_limit_pda, queues_pda, inflow_vault_pda.

Динамически будут создаваться:

  • user_pda на каждого пользователя;
  • ticket_pda на каждый тикет;
  • manager_allowance_pda на каждого менеджера.