# SHiNE DAO

## Кратко

DAO — управляющий слой Solana-части SHiNE. В текущем коде это не отдельная Anchor-программа в `programs/`, а модель управления через DAO-кошелек, DAO-authority, governance-скрипты и будущую передачу upgrade-authority программ.

## Что DAO должно уметь

1. Управлять казной.
   - Принимать средства на `dao_wallet`.
   - Выплачивать средства со счета DAO по решениям голосования.

2. Управлять настройками `shine_users`.
   - Обновлять регистрационную комиссию.
   - Обновлять цену шага лимита.
   - Обновлять стартовый бонус лимита.

3. Управлять настройками `shine_payments`.
   - Обновлять коэффициент выплат.
   - Обновлять лимит очереди.
   - Обновлять награду за вызов `step_payout`.

4. Управлять менеджерами.
   - Выдавать менеджеру лимит на добавление тикетов.
   - Отдельно учитывать лимиты Q1 и Q2.

5. Управлять правами программ.
   - Принять upgrade-authority `shine_users`.
   - Принять upgrade-authority `shine_payments`.
   - Позже принять upgrade-authority `shine_login_guard`, если это потребуется.

6. Управлять ключами DAO.
   - Добавлять управляющие ключи.
   - Отзывать или сжигать управляющие ключи.
   - Делать это через голосование, а не вручную одним админом.

7. Фиксировать решения.
   - Делать заявления/решения через governance-механику.
   - Привязывать важные изменения к proposal/vote/execute.

## Текущие адреса управления

В общем deploy-конфиге сейчас есть два важных адреса:

- `DAO_AUTHORITY` — используется `shine_users` для проверки права менять economy-конфиг.
- `DAO_TREASURY_WALLET` — используется `shine_payments` как `dao_wallet`.

Сейчас они могут совпадать. В целевой DAO-модели их лучше рассматривать как разные роли:

- authority/governance signer — кто имеет право исполнять управленческие инструкции;
- treasury wallet — счет, куда приходят деньги DAO.

## Передача прав

Рекомендуемый порядок:

1. Сначала стабилизировать и проверить `shine_users` и `shine_payments`.
2. Передать DAO право обновлять настройки, если оно еще не передано.
3. Передать DAO upgrade-authority второй и третьей программ.
4. Оставить `shine_login_guard` на отдельном ключе до стабилизации словарей и правил логинов.
5. После стабилизации решить отдельным голосованием, передавать ли первую программу DAO.

## Важное разделение

Есть два разных типа прав:

1. Право вызвать защищенную функцию программы.
   - Например, `update_coef_limit` или `grant_manager_limits`.
   - Проверяется внутри программы по `dao_wallet` или `DAO_AUTHORITY`.

2. Право обновить саму программу.
   - Это upgrade-authority Solana ProgramData.
   - Оно передается отдельной Solana-командой/DAO-транзакцией и не равно обычному PDA-счету.

