SHA256
homeserver: рендейм subserver→homeserver, документ деривации ключей, запрет пустого пароля
Основное (наша работа в этой сессии): - Переименование «subserver» → «homeserver» по всему проекту: основной ESP32-скетч (папка shine_subserver_ui → shine_homeserver_ui, .ino, flash-скрипт, режим burn.sh homeserver-ui), скетч lvgl_nav_minimal_test (ключ homeserver.key:<имя>), spec-доки reference/*, формат PDA (терминология session_type=100 «Homeserver пользователя»), константа SESSION_TYPE_HOMESERVER в JS и Rust (значение 100 не менялось, формат не затронут), pending/future доки, AGENTS.md, DAO-док. Сохранены отдельный lvgl_subserver_touch_test и историческая пометка о рендейме в DERIVATION.md. - Новый источник истины по деривации ключей: Dev_Docs/Keys/DERIVATION.md (Argon2id-секрет из пароля, формула Ed25519(SHA-256(base64(secret)|suffix)), суффиксы root/bch/dev/homeserver.key, Solana-ключ = dev.key). Уточнены роли root (главный/master) и dev (пополняемый кошелёк) в Dev_Docs/Keys/README.md. - UI: убран легаси-путь пустого пароля (derivePasswordSeed и др.), deriveMasterSecretFromPassword бросает ошибку на пустом пароле, register-view блокирует пустой пароль; экран пополнения переведён на канонический device-адрес из preGeneratedKeyBundle (удалён расходящийся deriveWalletFromPassword). Включены также параллельные правки Solana-аудита №3 (были в рабочем дереве, переплетены в lib.rs): - shine_users: defense-in-depth «строгий список аккаунтов» (require!(it.next().is_none())) в init/update economy config и create/update user PDA, плюс описание в doc/programs/shine_users.md; - Dev_Docs/audit/Solana-audit-3-by-Claude-12июня2026.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
cf6a2830c8
commit
42dcf6970d
+6
-6
@@ -1,26 +1,26 @@
|
||||
# ESP32 UI-прототип сабсервера SHiNE
|
||||
# ESP32 UI-прототип homeserver SHiNE
|
||||
|
||||
- краткое описание фичи:
|
||||
для `Waveshare ESP32-S3-Touch-AMOLED-2.16` добавлен новый интерактивный UI-скетч сабсервера `SHiNE` с хранением данных в `NVS`, настройками `Wi-Fi`, настройками серверов, кошельком, экраном `QR/URI`, живой Solana-регистрацией и экраном входящих запросов. Логика PIN в коде сохранена, но вход по PIN во временной сборке отключён, чтобы не блокировать проверку остальных экранов. В текущей версии `Wi-Fi` подключается реально, адреса `API/RPC/WS` проверяются реально, баланс кошелька читается из `Solana RPC`, а регистрация отправляет `create_user_pda` в `shine_users`.
|
||||
для `Waveshare ESP32-S3-Touch-AMOLED-2.16` добавлен новый интерактивный UI-скетч homeserver `SHiNE` с хранением данных в `NVS`, настройками `Wi-Fi`, настройками серверов, кошельком, экраном `QR/URI`, живой Solana-регистрацией и экраном входящих запросов. Логика PIN в коде сохранена, но вход по PIN во временной сборке отключён, чтобы не блокировать проверку остальных экранов. В текущей версии `Wi-Fi` подключается реально, адреса `API/RPC/WS` проверяются реально, баланс кошелька читается из `Solana RPC`, а регистрация отправляет `create_user_pda` в `shine_users`.
|
||||
|
||||
- что именно проверять:
|
||||
1. Прошить режим `subserver-ui` и дождаться открытия главного экрана без PIN.
|
||||
1. Прошить режим `homeserver-ui` и дождаться открытия главного экрана без PIN.
|
||||
2. Проверить, что текст в заголовках, кнопках и статусах отображается читаемо; в текущей временной сборке допускается ASCII-транслитерация русского текста.
|
||||
3. Открыть `Настройки` и убедиться, что показывается пометка о временно отключённом входе по PIN.
|
||||
4. Открыть `Подключение -> Wi-Fi`, ввести `SSID` и пароль, нажать `Проверить`, дождаться реального подключения, затем перезагрузить устройство и проверить, что значения сохранились.
|
||||
5. Открыть `Подключение -> Серверы`, проверить или изменить `API/RPC/WS`, нажать `Проверить` и убедиться, что показываются реальные статусы доступности, затем перезагрузить устройство и проверить сохранение значений.
|
||||
6. Открыть `Аккаунт`, ввести логин, имя сабсервера и нажать `Сгенерировать`; проверить, что появились секрет и адрес кошелька, а после перезагрузки они не исчезают.
|
||||
6. Открыть `Аккаунт`, ввести логин, имя homeserver и нажать `Сгенерировать`; проверить, что появились секрет и адрес кошелька, а после перезагрузки они не исчезают.
|
||||
7. Открыть `Кошелёк`, нажать `Проверить` и убедиться, что баланс реально читается из `Solana RPC`; затем открыть `QR и URI` и проверить, что QR-код отрисовывается и сканируется как `solana:`-ссылка.
|
||||
8. При необходимости отдельно проверить тестовые кнопки `+/- SOL`: они меняют локальный баланс для UX-сценариев, но после следующей реальной RPC-проверки баланс должен вернуться к сетевому значению.
|
||||
9. Вернуться на главный экран и проверить, что до выполнения всех условий кнопка регистрации недоступна, а после выполнения становится доступной.
|
||||
10. Выполнить регистрацию и убедиться, что статус меняется на `Сабсервер активен`, онлайн-статус становится активным, а на экране появляются краткие отпечатки `PDA/TX`.
|
||||
10. Выполнить регистрацию и убедиться, что статус меняется на `Homeserver активен`, онлайн-статус становится активным, а на экране появляются краткие отпечатки `PDA/TX`.
|
||||
11. После регистрации проверить через `Solana`/UI проекта, что `user_pda` для этого логина реально создана и соответствует `device`-адресу устройства.
|
||||
12. Открыть `Запросы`, поочерёдно открыть оба демонстрационных запроса и проверить, что кнопки `Разрешить` и `Отклонить` меняют их статус.
|
||||
13. При необходимости открыть `Настройки -> Сменить PIN` и убедиться, что новый PIN сохраняется, хотя вход по PIN временно не используется на старте.
|
||||
14. Выполнить `Полный сброс` и убедиться, что все поля, секрет, баланс, онлайн и регистрация очищаются.
|
||||
|
||||
- ожидаемый результат:
|
||||
новый `ESP32`-скетч стабильно запускается, показывает читаемый интерфейс хотя бы в ASCII-транслитерации, сохраняет данные во внутренней памяти устройства, реально подключается к `Wi-Fi`, реально проверяет `API/RPC/WS`, реально читает баланс из `Solana RPC`, рисует рабочий `QR` для `solana:`-URI и позволяет вручную пройти полный сценарий on-chain регистрации сабсервера.
|
||||
новый `ESP32`-скетч стабильно запускается, показывает читаемый интерфейс хотя бы в ASCII-транслитерации, сохраняет данные во внутренней памяти устройства, реально подключается к `Wi-Fi`, реально проверяет `API/RPC/WS`, реально читает баланс из `Solana RPC`, рисует рабочий `QR` для `solana:`-URI и позволяет вручную пройти полный сценарий on-chain регистрации homeserver.
|
||||
|
||||
- статус:
|
||||
pending
|
||||
@@ -1,13 +1,13 @@
|
||||
# ESP32 авто-прошивка shine_subserver_ui
|
||||
# ESP32 авто-прошивка shine_homeserver_ui
|
||||
|
||||
- краткое описание фичи:
|
||||
добавлен исполняемый скрипт `flash_shine_subserver_ui.sh`, который автоматически ищет USB-порт `ESP32` и запускает заливку прошивки `shine_subserver_ui` без ручного указания `PORT`.
|
||||
добавлен исполняемый скрипт `flash_shine_homeserver_ui.sh`, который автоматически ищет USB-порт `ESP32` и запускает заливку прошивки `shine_homeserver_ui` без ручного указания `PORT`.
|
||||
- что именно проверять:
|
||||
1. Подключить плату `ESP32` по USB.
|
||||
2. Перейти в папку `ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/test-device/`.
|
||||
3. Запустить `./flash_shine_subserver_ui.sh`.
|
||||
3. Запустить `./flash_shine_homeserver_ui.sh`.
|
||||
4. Убедиться, что скрипт сам показывает найденный порт и успешно запускает compile/upload.
|
||||
- ожидаемый результат:
|
||||
скрипт без ручного ввода порта находит `ESP32`, печатает найденный `/dev/ttyACM*` или `/dev/ttyUSB*` и заливает `shine_subserver_ui`.
|
||||
скрипт без ручного ввода порта находит `ESP32`, печатает найденный `/dev/ttyACM*` или `/dev/ttyUSB*` и заливает `shine_homeserver_ui`.
|
||||
- статус:
|
||||
pending
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# ESP32 PIN-клавиатура: подписи кнопок
|
||||
|
||||
- краткое описание фичи:
|
||||
в UI-скетче `shine_subserver_ui` изменена отрисовка подписей кнопок. Вместо малого шрифта теперь используется более стабильный шрифт с явным центрированием текста внутри кнопок, чтобы на экране ввода PIN и других экранах не пропадали цифры и надписи.
|
||||
в UI-скетче `shine_homeserver_ui` изменена отрисовка подписей кнопок. Вместо малого шрифта теперь используется более стабильный шрифт с явным центрированием текста внутри кнопок, чтобы на экране ввода PIN и других экранах не пропадали цифры и надписи.
|
||||
- что именно проверять:
|
||||
1. Включить устройство и дождаться экрана ввода PIN.
|
||||
2. Убедиться, что на всех серых кнопках видны цифры `0-9`, `Отмена` и `OK`.
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
1. Запустить `./burn.sh gfx-text-test` и убедиться, что прошивается тест текста из новой папки.
|
||||
2. Запустить `./burn.sh gfx-layout-test` и проверить нижние ряды кнопок.
|
||||
3. Запустить `./burn.sh lvgl-basic-test` и проверить, что `LVGL` показывает текст и кнопки.
|
||||
4. Убедиться, что новая папка не мешает сборке `subserver-ui`.
|
||||
4. Убедиться, что новая папка не мешает сборке `homeserver-ui`.
|
||||
- ожидаемый результат:
|
||||
тестовые скетчи лежат отдельно от основного UI, шьются отдельными режимами и позволяют быстро проверять разные гипотезы по экрану без правок в `shine_subserver_ui`.
|
||||
тестовые скетчи лежат отдельно от основного UI, шьются отдельными режимами и позволяют быстро проверять разные гипотезы по экрану без правок в `shine_homeserver_ui`.
|
||||
- статус:
|
||||
pending
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# ESP32 nav minimal test
|
||||
|
||||
- Краткое описание: минимальный UI-прототип для сабсервера на базе `LVGL + subserver touch`, с Wi-Fi flow, серверными адресами и общим экраном редактирования текста.
|
||||
- Краткое описание: минимальный UI-прототип для homeserver на базе `LVGL + subserver touch`, с Wi-Fi flow, серверными адресами и общим экраном редактирования текста.
|
||||
- Что проверять:
|
||||
- стартует экран `HOME`;
|
||||
- на `HOME` видны реальное значение сабсервера или `subserver not set`, реальное значение логина или `login not set`, при отсутствии секрета строка `secret not set`, а также `STATUS`, верхний правый блок с процентом батареи, иконкой батареи и индикатором Wi-Fi, кнопка баланса, строка `SHiNE: ...`, кнопка `SETTINGS` уменьшенной ширины у правого края и нижняя подпись `SHiNE subserver (v.0.18)`;
|
||||
- на `HOME` видны реальное значение homeserver или `homeserver not set`, реальное значение логина или `login not set`, при отсутствии секрета строка `secret not set`, а также `STATUS`, верхний правый блок с процентом батареи, иконкой батареи и индикатором Wi-Fi, кнопка баланса, строка `SHiNE: ...`, кнопка `SETTINGS` уменьшенной ширины у правого края и нижняя подпись `SHiNE homeserver (v.0.18)`;
|
||||
- справа от строки логина виден индикатор статуса Solana-аккаунта:
|
||||
- зелёный, если ключи совпали;
|
||||
- красный, если mismatch;
|
||||
@@ -19,9 +19,9 @@
|
||||
- `unavailable`
|
||||
- пока открыт `HOME`, статус сам обновляется без перехода на другие экраны;
|
||||
- баланс обновляется кнопкой по нажатию;
|
||||
- если логин зарегистрирован и секрет/сабсервер заданы, устройство:
|
||||
- если логин зарегистрирован и секрет/homeserver заданы, устройство:
|
||||
- читает `user_pda` через Solana RPC;
|
||||
- сверяет `root`, `blockchain`, `device` и `subserver` session type `100`;
|
||||
- сверяет `root`, `blockchain`, `device` и `homeserver` session type `100`;
|
||||
- поднимает WebSocket-сессию с сервером SHiNE;
|
||||
- шлёт `Ping` раз в минуту;
|
||||
- кнопка `SETTINGS` открывает `SETTINGS_MENU`;
|
||||
@@ -54,7 +54,7 @@
|
||||
- визуальный курсор в поле ввода не показывается;
|
||||
- новые символы всегда дописываются только в конец строки;
|
||||
- основные 3 ряда клавиш и нижний служебный ряд стали выше;
|
||||
- внизу остаётся отдельная тёмная полоса с версией `SHiNE subserver (v.0.18)`, а рамка клавиатурного блока заканчивается выше неё;
|
||||
- внизу остаётся отдельная тёмная полоса с версией `SHiNE homeserver (v.0.18)`, а рамка клавиатурного блока заканчивается выше неё;
|
||||
- одно непрерывное касание вызывает не более одного действия кнопки;
|
||||
- скольжение пальцем по клавиатуре не нажимает подряд несколько клавиш;
|
||||
- медленный свайп по экрану не должен превращаться в случайное нажатие кнопки;
|
||||
@@ -75,11 +75,11 @@
|
||||
- нажатие `Account` открывает `ACCOUNT_SCREEN`;
|
||||
- `ACCOUNT_SCREEN` показывает 3 кнопки:
|
||||
- `Login (<value|not set>)`
|
||||
- `Subserver (<value|not set>)`
|
||||
- `Homeserver (<value|not set>)`
|
||||
- `Secret (<*****|not set>)`
|
||||
- `Login` открывает общий экран редактирования и сохраняется в NVS;
|
||||
- `Subserver` открывает промежуточный экран с `USE SUBSERVER1` и `EDIT MANUALLY`;
|
||||
- `USE SUBSERVER1` возвращает стандартное значение `subserver1`;
|
||||
- `Homeserver` открывает промежуточный экран с `USE HOMESERVER1` и `EDIT MANUALLY`;
|
||||
- `USE HOMESERVER1` возвращает стандартное значение `homeserver1`;
|
||||
- `EDIT MANUALLY` открывает общий экран редактирования и сохраняет значение в NVS;
|
||||
- `Secret` теперь открывает меню секрета с показом секрета, ручным вводом и генерацией;
|
||||
- в `SHOW SECRET` показывается прокручиваемый список всех ключей:
|
||||
@@ -90,15 +90,15 @@
|
||||
- `Blockchain key priv (base58)`
|
||||
- `Device key (base58)`
|
||||
- `Device key priv (base58)`
|
||||
- `Subserver key (base58)`
|
||||
- `Subserver key priv (base58)`
|
||||
- `Homeserver key (base58)`
|
||||
- `Homeserver key priv (base58)`
|
||||
- значения ключей показываются полными строками увеличенным шрифтом;
|
||||
- при смене `login` сохранённый секрет сбрасывается в `not set`;
|
||||
- во время генерации секрета есть `CANCEL` и подтверждение остановки;
|
||||
- при отмене генерации старый секрет, если он был, не должен теряться;
|
||||
- свайп вправо из внутренних экранов возвращает в `SETTINGS_MENU`;
|
||||
- свайп вправо из `ACCOUNT_SUBSERVER_SCREEN` и `ACCOUNT_SECRET_SCREEN` возвращает в `ACCOUNT_SCREEN`;
|
||||
- свайп вправо из `ACCOUNT_HOMESERVER_SCREEN` и `ACCOUNT_SECRET_SCREEN` возвращает в `ACCOUNT_SCREEN`;
|
||||
- если во время реального свайпа палец проходит по кнопке, это не должно открывать кнопку как обычный `click`.
|
||||
- Ожидаемый результат: новый скетч даёт чистый навигационный каркас и уже умеет настраивать Wi-Fi и серверные адреса на самой ESP32.
|
||||
- Дополнительно ожидается: `HOME` уже показывает реальный Solana/WS-статус сабсервера, а отсутствие пользователя в Solana заметно сразу без перехода в настройки.
|
||||
- Дополнительно ожидается: `HOME` уже показывает реальный Solana/WS-статус homeserver, а отсутствие пользователя в Solana заметно сразу без перехода в настройки.
|
||||
- Статус: pending
|
||||
|
||||
Reference in New Issue
Block a user