SHA256
104 lines
5.3 KiB
Markdown
104 lines
5.3 KiB
Markdown
# Деплой и инициализация 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.
|