4.4 KiB
4.4 KiB
Счета, ключи и движение денег
Кратко
В архитектуре есть три типа объектов:
- Ключи программ и DAO.
- PDA-счета состояния.
- Денежные счета, через которые проходят SOL/lamports.
Ключи
Минимальный набор для понимания:
key_1— deploy/upgrade authorityshine_login_guard.key_2— deploy/upgrade authorityshine_users.key_3— deploy/upgrade authorityshine_payments.DAO_AUTHORITY— адрес, который имеет право менять защищенные настройки.DAO_TREASURY_WALLET/dao_wallet— казна DAO.manager_wallet— кошелек менеджера, которому DAO выдает лимиты на создание тикетов.user root_key— корневой ключ пользователя для подписи пользовательской записи.user client_key— ключ устройства пользователя.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— создается для каждого логина, seedlogin=+ normalized login.users_economy_config_pda— один PDA с экономикой регистрации, seedshine_users_economy_config.
shine_payments:
config_pda— один PDA конфига, seedshine_payments_config.coef_limit_pda— один PDA коэффициента/лимита/награды, seedshine_payments_coef_limit.queues_pda— один PDA агрегатов очередей, seedshine_payments_queues.inflow_vault_pda— один PDA-вольт входящих средств, seedshine_payments_inflow_vault.ticket_pda— много PDA, по одному на тикет, seedshine_payments_q1_ticketилиshine_payments_q2_ticket+ индекс.manager_allowance_pda— много PDA, по одному на менеджера, seedshine_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
Что нужно создать на старте
Минимально:
- Три program id для
shine_login_guard,shine_users,shine_payments. - Три upgrade-authority ключа или один временный deploy-ключ с четким планом передачи прав.
- DAO authority/treasury.
users_economy_config_pda.shine_paymentsPDA:config_pda,coef_limit_pda,queues_pda,inflow_vault_pda.
Динамически будут создаваться:
user_pdaна каждого пользователя;ticket_pdaна каждый тикет;manager_allowance_pdaна каждого менеджера.