SHA256
Подготовка перед деплоем в mainnet
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user