# Деплой и инициализация Solana-регистрации (две обязательные программы) ## Коротко Для рабочей регистрации пользователя нужны **обе** программы: 1. `shine_users` — хранение и обновление `user_pda`, economy-конфиг, логика регистрации. 2. `shine_login_guard` — проверка/классификация логина (CPI из `shine_users`). Если задеплоена только одна из них — регистрация неработоспособна. ## Актуальные адреса (devnet) - `shine_users` (регистрация пользователей): `3bYrnXwLc56oVPUBAjY8zTMLwHCYq29b5rUMu3b64SQJ` - `shine_login_guard`: `3xkopA7cXagxzMFrKdv3NCBfV6BKiRJCk69kr27M2sRo` - `shine_payments`: `c4yTa4JT9EtQDCBX9LmWFK6T2gp4JGsuymFbom2EudW` ## Подтверждение деплоя - Сеть: `https://api.devnet.solana.com` - `shine_users`: - `Program ID`: `3bYrnXwLc56oVPUBAjY8zTMLwHCYq29b5rUMu3b64SQJ` - 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` ### Browser plugin wallet - Резолвер PDA и проверка адресов: - `SHiNE-browser-plugin-wallet/js/lib/shine-server-resolver.js` - Проверка текущего wallet по PDA: - `SHiNE-browser-plugin-wallet/background.js` - Отображение состояния в popup: - `SHiNE-browser-plugin-wallet/popup.js` ### Сервер - Серверные константы Solana: - `shine-server-config/src/main/java/utils/config/SolanaProgramsConfig.java` ### Solana / Anchor - `shine-solana/shine/Anchor.toml` - `shine-solana/shine/programs/shine_users/src/lib.rs` (`declare_id!`) - `shine-solana/shine/programs/shine_login_guard/src/lib.rs` (`declare_id!`) - `shine-solana/shine/programs/shine_payments/src/lib.rs` (`declare_id!`) ### Где ещё нужно синхронизировать адреса после нового deploy - UI-константы и все потребители в `shine-UI/js/*` - browser-plugin-wallet - серверный `SolanaProgramsConfig.java` - Anchor-конфиг и `declare_id!` в Solana-модуле - документы: - `Dev_Docs/Solana/user_pda/README.md` - `shine-solana/shine/doc/programs/shine_users.md` - `shine-solana/shine/doc/devnet_keys_and_deploy.md` ## Как запустить инициализацию 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: `3bYrnXwLc56oVPUBAjY8zTMLwHCYq29b5rUMu3b64SQJ` ## Кто оплачивает create/update user_pda - И обычная регистрация `create_user_pda`, и последующее `update_user_pda` оплачиваются с `clientKey`. - В UI это означает, что Solana fee payer всегда берётся из `device`-ключа пользователя/сервера. - `rootKey` нужен для подписи unsigned PDA-записи, но не оплачивает транзакцию. - Для server UI это особенно важно: перед `create` и `update` нужно пополнять именно Solana-адрес `clientKey`. ## Важно - `init_users_economy_config` выполняется один раз на программу. Если PDA уже создан, повторный вызов вернёт ошибку "already initialized" (это нормальное поведение). - Серверные приватные ключи для Solana не используются как отдельный backend-wallet: в UI/server UI транзакцию оплачивает именно `clientKey`, а содержимое записи подписывает `rootKey`. - `shine_users` внутри `create_user_pda` требует корректный адрес `shine_login_guard` для CPI-классификации логина. Несовпадение адреса приведёт к ошибке регистрации.