Подготовка перед деплоем в mainnet

This commit is contained in:
AidarKC
2026-07-01 12:23:30 +04:00
parent ab4dab34aa
commit 0240db59ee
52 changed files with 1018 additions and 473 deletions
@@ -0,0 +1,45 @@
# Синхронизация mainnet-адресов Solana по UI/серверу/ESP32
- статус: `pending`
## Кратко
Во все основные клиентские и серверные точки проекта протянуты актуальные mainnet-адреса программ:
- `shine_login_guard`: `SHiGxGsXGioQYCYhchQ5R7KWoxN5UjFAFsucPf6sfnh`
- `shine_users`: `SHiNEPr1APdAgNBteUyBXcNovaHctpSjUu8oH2ZJdN6`
- `shine_payments`: `SHiPmXbM9Fs9khzRUW3TGKsS2W84aqaXTxs3ZkajW9v`
Также по умолчанию переключены основные RPC defaults на `https://api.mainnet-beta.solana.com` там, где это нужно для рабочего mainnet-сценария.
## Что проверять
1. Основной UI:
- отображение и использование новых program id;
- регистрация/чтение Solana PDA в mainnet;
- экран кошелька и покупка лимита.
2. Server UI:
- создание server PDA в mainnet;
- чтение PDA;
- обновление PDA;
- корректная блокировка devnet-автопополнения при mainnet endpoint.
3. Browser plugin wallet:
- резолв `user_pda` и `server PDA` через mainnet RPC.
4. Web UI `shine_payments`:
- чтение очередей;
- покупка билета;
- admin/manager/dao tools открываются с новыми program id и mainnet RPC.
5. ESP32 homeserver UI:
- отображаются новые program id;
- дефолтный Solana RPC теперь mainnet.
## Ожидаемый результат
- Во всех перечисленных поверхностях используются новые mainnet program id.
- Запросы по умолчанию идут в mainnet, кроме явно devnet-утилит.
- Нет обращений к старым devnet program id.
+3 -3
View File
@@ -46,9 +46,9 @@ DAO в текущем виде не является отдельной Anchor-
| Программа | Program ID |
| --- | --- |
| `shine_login_guard` | `3xkopA7cXagxzMFrKdv3NCBfV6BKiRJCk69kr27M2sRo` |
| `shine_users` | `3bYrnXwLc56oVPUBAjY8zTMLwHCYq29b5rUMu3b64SQJ` |
| `shine_payments` | `c4yTa4JT9EtQDCBX9LmWFK6T2gp4JGsuymFbom2EudW` |
| `shine_login_guard` | `SHiGxGsXGioQYCYhchQ5R7KWoxN5UjFAFsucPf6sfnh` |
| `shine_users` | `SHiNEPr1APdAgNBteUyBXcNovaHctpSjUu8oH2ZJdN6` |
| `shine_payments` | `SHiPmXbM9Fs9khzRUW3TGKsS2W84aqaXTxs3ZkajW9v` |
Если эти адреса меняются, нужно синхронно обновить:
@@ -26,11 +26,11 @@
| Роль | Адрес |
| --- | --- |
| `SHINE_LOGIN_GUARD_PROGRAM_ID` | `3xkopA7cXagxzMFrKdv3NCBfV6BKiRJCk69kr27M2sRo` |
| `SHINE_USERS_PROGRAM_ID` | `3bYrnXwLc56oVPUBAjY8zTMLwHCYq29b5rUMu3b64SQJ` |
| `SHINE_PAYMENTS_PROGRAM_ID` | `c4yTa4JT9EtQDCBX9LmWFK6T2gp4JGsuymFbom2EudW` |
| `DAO_AUTHORITY` | `FUc28vNixp7F3nnkpGVt6nuJbgvJ4429v4B5wS52Df6P` |
| `DAO_TREASURY_WALLET` | `FUc28vNixp7F3nnkpGVt6nuJbgvJ4429v4B5wS52Df6P` |
| `SHINE_LOGIN_GUARD_PROGRAM_ID` | `SHiGxGsXGioQYCYhchQ5R7KWoxN5UjFAFsucPf6sfnh` |
| `SHINE_USERS_PROGRAM_ID` | `SHiNEPr1APdAgNBteUyBXcNovaHctpSjUu8oH2ZJdN6` |
| `SHINE_PAYMENTS_PROGRAM_ID` | `SHiPmXbM9Fs9khzRUW3TGKsS2W84aqaXTxs3ZkajW9v` |
| `DAO_AUTHORITY` | `aiShm43fZjm3YkMs22sYL1bpXaL3bVxv7SSraPHzVgq` |
| `DAO_TREASURY_WALLET` | `aiShm43fZjm3YkMs22sYL1bpXaL3bVxv7SSraPHzVgq` |
## Постоянные PDA
@@ -1,125 +1,103 @@
# Деплой и инициализация Solana-регистрации (две обязательные программы)
# Деплой и инициализация Solana-регистрации
## Коротко
Для рабочей регистрации пользователя нужны **обе** программы:
Для рабочей регистрации пользователя нужны три программы:
1. `shine_users` — хранение и обновление `user_pda`, economy-конфиг, логика регистрации.
2. `shine_login_guard` — проверка/классификация логина (CPI из `shine_users`).
2. `shine_login_guard` — проверка/классификация логина через CPI из `shine_users`.
3. `shine_payments` — приём платежей за регистрацию и докупку лимита через `inflow_vault PDA`.
Если задеплоена только одна из них — регистрация неработоспособна.
Если `shine_users` или `shine_login_guard` не совпадают по адресам с UI/сервером, регистрация неработоспособна.
## Актуальные адреса (devnet)
## Актуальные адреса (mainnet)
- `shine_users` (регистрация пользователей):
`3bYrnXwLc56oVPUBAjY8zTMLwHCYq29b5rUMu3b64SQJ`
- `shine_users`:
`SHiNEPr1APdAgNBteUyBXcNovaHctpSjUu8oH2ZJdN6`
- `shine_login_guard`:
`3xkopA7cXagxzMFrKdv3NCBfV6BKiRJCk69kr27M2sRo`
`SHiGxGsXGioQYCYhchQ5R7KWoxN5UjFAFsucPf6sfnh`
- `shine_payments`:
`c4yTa4JT9EtQDCBX9LmWFK6T2gp4JGsuymFbom2EudW`
`SHiPmXbM9Fs9khzRUW3TGKsS2W84aqaXTxs3ZkajW9v`
## Подтверждение деплоя
Временный on-chain admin для `shine_users` и `shine_payments` до перевода управления на DAO:
- Сеть: `https://api.devnet.solana.com`
- `shine_users`:
- `Program ID`: `3bYrnXwLc56oVPUBAjY8zTMLwHCYq29b5rUMu3b64SQJ`
- TX deploy: `5VzfpSirFCRqPUZfvAt3eADY9KnowW79PKZ1pCQAa2DJGiztj4dUYYXrSQNmWEhPVu6mPSDfcuHzFyEVmoKLa9DM`
- `aiShm43fZjm3YkMs22sYL1bpXaL3bVxv7SSraPHzVgq`
## Подтверждение текущего mainnet deploy
- Сеть: `https://api.mainnet-beta.solana.com`
- `shine_login_guard`:
- `Program ID`: `3xkopA7cXagxzMFrKdv3NCBfV6BKiRJCk69kr27M2sRo`
- TX deploy: `5iptngPYrLLjPE3Xby24zyNW3edVUnBNLBx785vjojMoq5JNLFNQvLNAm3jNYHbpf2B36qtbpTNzcvUNyRDqm1Mf`
- `Program ID`: `SHiGxGsXGioQYCYhchQ5R7KWoxN5UjFAFsucPf6sfnh`
- TX deploy: `5gCxrw5gj7ig5C3HFf4AUrHq2pMW1LxgfLUj4jtmQvTqXnR7xp1iySf7m63S3MaimpeUyYhQR1zpPFJyPi6NTAv7`
- `shine_users`:
- `Program ID`: `SHiNEPr1APdAgNBteUyBXcNovaHctpSjUu8oH2ZJdN6`
- TX deploy: `5Cwp53EegPv6aV69Ztxj7nXomHt9H9ZaXSgWvDfLPeR5EAaU38ADsQjn9h8xShU34AgttYGwWaVWiicF2vLwJXU9`
- `shine_payments`:
- `Program ID`: `SHiPmXbM9Fs9khzRUW3TGKsS2W84aqaXTxs3ZkajW9v`
- TX deploy: `2vzsM85bTwSxdYvzWKZMpAg7Gqxs8R7CC5T5LTm7cRFizhr11QZvgDKqP77b8n2mcmA6DF4RqwrUrPzQ8bsQhvCn`
## Порядок деплоя (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
```
- `shine_users` внутри кода вызывает `shine_login_guard`.
- `shine_users` внутри кода знает `shine_payments` и переводит оплату в `inflow_vault PDA` этой программы.
- `shine_users` и `shine_payments` пока управляются временным адресом `aiShm...`.
- Позже эти hardcoded authority-адреса планируется заменить на адреса DAO через upgrade программ.
## Куда вписаны адреса в проекте
### 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`
- `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
- Резолвер 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`
- `SHiNE-browser-plugin-wallet/js/lib/shine-server-resolver.js`
### Сервер
- Серверные константы Solana:
- `shine-server-config/src/main/java/utils/config/SolanaProgramsConfig.java`
- `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` (`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!`)
- `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`
### Где ещё нужно синхронизировать адреса после нового 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`
- `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. Подключить кошелёк (Phantom, devnet).
3. Подключить mainnet-кошелёк.
4. Нажать `Запустить init_users_economy_config`.
5. Дождаться статуса `Успешно`.
Страница сама вычисляет PDA `users_economy_config` по seed:
Страница вычисляет PDA `users_economy_config` по seed:
- seed: `shine_users_economy_config`
- program: `3bYrnXwLc56oVPUBAjY8zTMLwHCYq29b5rUMu3b64SQJ`
- program: `SHiNEPr1APdAgNBteUyBXcNovaHctpSjUu8oH2ZJdN6`
## Кто оплачивает create/update user_pda
- И обычная регистрация `create_user_pda`, и последующее `update_user_pda` оплачиваются с `clientKey`.
- В UI это означает, что Solana fee payer всегда берётся из `device`-ключа пользователя/сервера.
- В 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-классификации логина.
Несовпадение адреса приведёт к ошибке регистрации.
- `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.