Files
SHiNE-server/docs/Инициализация_Solana_регистрации/README.md
T

104 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Деплой и инициализация Solana-регистрации
## Коротко
Для рабочей регистрации пользователя нужны три программы:
1. `shine_users` — хранение и обновление `user_pda`, economy-конфиг, логика регистрации.
2. `shine_login_guard` — проверка/классификация логина через CPI из `shine_users`.
3. `shine_payments` — приём платежей за регистрацию и докупку лимита через `inflow_vault PDA`.
Если `shine_users` или `shine_login_guard` не совпадают по адресам с UI/сервером, регистрация неработоспособна.
## Актуальные адреса (mainnet)
- `shine_users`:
`SHiNEPr1APdAgNBteUyBXcNovaHctpSjUu8oH2ZJdN6`
- `shine_login_guard`:
`SHiGxGsXGioQYCYhchQ5R7KWoxN5UjFAFsucPf6sfnh`
- `shine_payments`:
`SHiPmXbM9Fs9khzRUW3TGKsS2W84aqaXTxs3ZkajW9v`
Временный on-chain admin для `shine_users` и `shine_payments` до перевода управления на DAO:
- `aiShm43fZjm3YkMs22sYL1bpXaL3bVxv7SSraPHzVgq`
## Подтверждение текущего mainnet deploy
- Сеть: `https://api.mainnet-beta.solana.com`
- `shine_login_guard`:
- `Program ID`: `SHiGxGsXGioQYCYhchQ5R7KWoxN5UjFAFsucPf6sfnh`
- TX deploy: `5gCxrw5gj7ig5C3HFf4AUrHq2pMW1LxgfLUj4jtmQvTqXnR7xp1iySf7m63S3MaimpeUyYhQR1zpPFJyPi6NTAv7`
- `shine_users`:
- `Program ID`: `SHiNEPr1APdAgNBteUyBXcNovaHctpSjUu8oH2ZJdN6`
- TX deploy: `5Cwp53EegPv6aV69Ztxj7nXomHt9H9ZaXSgWvDfLPeR5EAaU38ADsQjn9h8xShU34AgttYGwWaVWiicF2vLwJXU9`
- `shine_payments`:
- `Program ID`: `SHiPmXbM9Fs9khzRUW3TGKsS2W84aqaXTxs3ZkajW9v`
- TX deploy: `2vzsM85bTwSxdYvzWKZMpAg7Gqxs8R7CC5T5LTm7cRFizhr11QZvgDKqP77b8n2mcmA6DF4RqwrUrPzQ8bsQhvCn`
## Как адреса связаны между собой
- `shine_users` внутри кода вызывает `shine_login_guard`.
- `shine_users` внутри кода знает `shine_payments` и переводит оплату в `inflow_vault PDA` этой программы.
- `shine_users` и `shine_payments` пока управляются временным адресом `aiShm...`.
- Позже эти hardcoded authority-адреса планируется заменить на адреса DAO через upgrade программ.
## Куда вписаны адреса в проекте
### UI
- `shine-UI/js/solana-programs.js`
- `shine-UI/js/pages/wallet-view.js`
- `shine-UI/js/services/solana-register-service.js`
- `shine-UI/server-ui/*.html`
### Browser plugin wallet
- `SHiNE-browser-plugin-wallet/js/lib/shine-server-resolver.js`
### Сервер
- `SHiNE-server/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`
- `shine-solana/shine/programs/shine_users/src/settings.rs`
- `shine-solana/shine/programs/shine_login_guard/src/lib.rs`
- `shine-solana/shine/programs/shine_payments/src/lib.rs`
- `shine-solana/shine/programs/shine_payments/src/settings.rs`
### Дополнительные потребители
- `shine-solana/shine/programs/shine_payments/web/*.html`
- `ESP32/.../shine_homeserver_main.ino`
- `ESP32/.../shine_homeserver_ui.ino`
## Как запустить инициализацию economy PDA
1. Открыть UI.
2. Перейти: `Профиль -> Настройки -> Настройки разработчика -> Solana: init регистрации`.
3. Подключить mainnet-кошелёк.
4. Нажать `Запустить init_users_economy_config`.
5. Дождаться статуса `Успешно`.
Страница вычисляет PDA `users_economy_config` по seed:
- seed: `shine_users_economy_config`
- program: `SHiNEPr1APdAgNBteUyBXcNovaHctpSjUu8oH2ZJdN6`
## Кто оплачивает 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: транзакцию оплачивает `clientKey`, а содержимое записи подписывает `rootKey`.
- `shine_users` внутри `create_user_pda` требует корректный адрес `shine_login_guard` для CPI-классификации логина.
- При новом devnet deploy планируется использовать те же program keypair, чтобы `program id` на devnet совпадали с mainnet.