# Счета, ключи и движение денег ## Кратко В архитектуре есть три типа объектов: 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 client_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` + адрес менеджера. ## Денежные потоки ### Регистрация ```text user signer -> shine_users::create_user_pda -> shine_payments::inflow_vault_pda ``` Состав платежа: - регистрационная комиссия; - оплата `additional_limit`. ### Увеличение лимита ```text user signer -> shine_users::update_user_pda -> shine_payments::inflow_vault_pda ``` Состав платежа: - только оплата `additional_limit`. ### Покупка тикета ```text buyer signer -> shine_payments::buy_ticket* -> dao_wallet ``` При этом создается `ticket_pda`, но деньги в `inflow_vault_pda` на этом шаге не идут. ### Выплата ```text shine_payments::inflow_vault_pda -> ticket_recipient_wallet shine_payments::inflow_vault_pda -> dao_wallet shine_payments::inflow_vault_pda -> step_payout caller ``` Если очереди пустые: ```text 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` на каждого менеджера.