126 lines
5.7 KiB
Markdown
126 lines
5.7 KiB
Markdown
# Деплой и инициализация 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-классификации логина.
|
||
Несовпадение адреса приведёт к ошибке регистрации.
|