| .. | ||
| README.md | ||
Деплой и инициализация Solana-регистрации (две обязательные программы)
Коротко
Для рабочей регистрации пользователя нужны обе программы:
shine_users— хранение и обновлениеuser_pda, economy-конфиг, логика регистрации.shine_login_guard— проверка/классификация логина (CPI изshine_users).
Если задеплоена только одна из них — регистрация неработоспособна.
Актуальные адреса (devnet)
shine_users(регистрация пользователей):
3bYrnXwLc56oVPUBAjY8zTMLwHCYq29b5rUMu3b64SQJshine_login_guard:
3xkopA7cXagxzMFrKdv3NCBfV6BKiRJCk69kr27M2sRoshine_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)
- Убедиться, что CLI смотрит в devnet и у кошелька есть SOL.
- Собрать и задеплоить
shine_login_guard. - Собрать и задеплоить
shine_users. - Проверить, что адреса совпадают между:
Anchor.tomldeclare_id!вprograms/*/src/lib.rs- UI/серверными константами.
- Выполнить
init_users_economy_config(один раз на программуshine_users).
Пример команд:
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.tomlshine-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.mdshine-solana/shine/doc/programs/shine_users.mdshine-solana/shine/doc/devnet_keys_and_deploy.md
Как запустить инициализацию economy PDA
- Открыть UI.
- Перейти:
Профиль -> Настройки -> Настройки разработчика -> Solana: init регистрации. - Подключить кошелёк (Phantom, devnet).
- Нажать
Запустить init_users_economy_config. - Дождаться статуса
Успешно.
Страница сама вычисляет 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-классификации логина.
Несовпадение адреса приведёт к ошибке регистрации.