# Деплой и инициализация Solana-регистрации (две обязательные программы)

## Коротко

Для рабочей регистрации пользователя нужны **обе** программы:

1. `shine_users` — хранение и обновление `user_pda`, economy-конфиг, логика регистрации.
2. `shine_login_guard` — проверка/классификация логина (CPI из `shine_users`).

Если задеплоена только одна из них — регистрация неработоспособна.

## Актуальные адреса (devnet)

- `shine_users` (регистрация пользователей):  
  `FZS1YctoeEhCkZ5VTjsysUFAXR8CqxYztcLboXcg2Rpm`
- `shine_login_guard`:  
  `3xkopA7cXagxzMFrKdv3NCBfV6BKiRJCk69kr27M2sRo`
- `shine_payments`:  
  `c4yTa4JT9EtQDCBX9LmWFK6T2gp4JGsuymFbom2EudW`

## Подтверждение деплоя

- Сеть: `https://api.devnet.solana.com`
- `shine_users`:
  - `Program ID`: `FZS1YctoeEhCkZ5VTjsysUFAXR8CqxYztcLboXcg2Rpm`
  - TX deploy: `5VzfpSirFCRqPUZfvAt3eADY9KnowW79PKZ1pCQAa2DJGiztj4dUYYXrSQNmWEhPVu6mPSDfcuHzFyEVmoKLa9DM`
- `shine_login_guard`:
  - `Program ID`: `3xkopA7cXagxzMFrKdv3NCBfV6BKiRJCk69kr27M2sRo`
  - TX deploy: `5iptngPYrLLjPE3Xby24zyNW3edVUnBNLBx785vjojMoq5JNLFNQvLNAm3jNYHbpf2B36qtbpTNzcvUNyRDqm1Mf`

## Порядок деплоя (devnet)

1. Убедиться, что CLI смотрит в devnet и у кошелька есть SOL.
2. Собрать и задеплоить `shine_login_guard`.
3. Собрать и задеплоить `shine_users`.
4. Проверить, что адреса совпадают между:
   - `Anchor.toml`
   - `declare_id!` в `programs/*/src/lib.rs`
   - UI/серверными константами.
5. Выполнить `init_users_economy_config` (один раз на программу `shine_users`).

Пример команд:

```bash
cd shine-solana/shine
solana config get
solana balance

anchor build -p shine_login_guard
anchor deploy -p shine_login_guard

anchor build -p shine_users
anchor deploy -p shine_users
```

## Куда вписаны адреса в проекте

### UI

- Общие Solana-константы:
  - `shine-UI/js/solana-programs.js`
- Страница инициализации:
  - `shine-UI/js/pages/solana-users-init-view.js`
- Переход на страницу:
  - `shine-UI/js/pages/developer-settings-view.js`

### Сервер

- Серверные константы Solana:
  - `shine-server-config/src/main/java/utils/config/SolanaProgramsConfig.java`

## Как запустить инициализацию economy PDA

1. Открыть UI.
2. Перейти: `Профиль -> Настройки -> Настройки разработчика -> Solana: init регистрации`.
3. Подключить кошелёк (Phantom, devnet).
4. Нажать `Запустить init_users_economy_config`.
5. Дождаться статуса `Успешно`.

Страница сама вычисляет PDA `users_economy_config` по seed:

- seed: `shine_users_economy_config`
- program: `FZS1YctoeEhCkZ5VTjsysUFAXR8CqxYztcLboXcg2Rpm`

## Кто оплачивает create/update user_pda

- И обычная регистрация `create_user_pda`, и последующее `update_user_pda` оплачиваются с `deviceKey`.
- В UI это означает, что Solana fee payer всегда берётся из `device`-ключа пользователя/сервера.
- `rootKey` нужен для подписи unsigned PDA-записи, но не оплачивает транзакцию.
- Для server UI это особенно важно: перед `create` и `update` нужно пополнять именно Solana-адрес `deviceKey`.

## Важно

- `init_users_economy_config` выполняется один раз на программу.  
  Если PDA уже создан, повторный вызов вернёт ошибку "already initialized" (это нормальное поведение).
- Серверные приватные ключи для Solana не используются как отдельный backend-wallet: в UI/server UI транзакцию оплачивает именно `deviceKey`, а содержимое записи подписывает `rootKey`.
- `shine_users` внутри `create_user_pda` требует корректный адрес `shine_login_guard` для CPI-классификации логина.  
  Несовпадение адреса приведёт к ошибке регистрации.
