# Деплой и инициализация Solana-регистрации (две обязательные программы) ## Коротко Для рабочей регистрации пользователя нужны **обе** программы: 1. `shine_users` — хранение и обновление `user_pda`, economy-конфиг, логика регистрации. 2. `shine_login_guard` — проверка/классификация логина (CPI из `shine_users`). Если задеплоена только одна из них — регистрация неработоспособна. ## Актуальные адреса (devnet) - `shine_users` (регистрация пользователей): `FZS1YctoeEhCkZ5VTjsysUFAXR8CqxYztcLboXcg2Rpm` - `shine_login_guard`: `3xkopA7cXagxzMFrKdv3NCBfV6BKiRJCk69kr27M2sRo` - `shine_payments`: `m48pWRGWrMj3TEHjuU4zsp5Gju4e7ZaPovk8RcVt7kR` ## Подтверждение деплоя - Сеть: `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_v2` - 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-классификации логина. Несовпадение адреса приведёт к ошибке регистрации.