Основное (наша работа в этой сессии): - Переименование «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>
52 lines
1.3 KiB
Bash
Executable File
52 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
||
detect_port_from_arduino_cli() {
|
||
local line
|
||
while IFS= read -r line; do
|
||
[[ -z "${line}" ]] && continue
|
||
[[ "${line}" == Port* ]] && continue
|
||
if [[ "${line}" == /dev/* ]]; then
|
||
awk '{print $1}' <<<"${line}"
|
||
return 0
|
||
fi
|
||
done < <(arduino-cli board list 2>/dev/null || true)
|
||
return 1
|
||
}
|
||
|
||
detect_port_from_dev() {
|
||
local candidates=()
|
||
local path
|
||
for path in /dev/ttyACM* /dev/ttyUSB*; do
|
||
[[ -e "${path}" ]] || continue
|
||
candidates+=("${path}")
|
||
done
|
||
|
||
if [[ "${#candidates[@]}" -eq 1 ]]; then
|
||
printf '%s\n' "${candidates[0]}"
|
||
return 0
|
||
fi
|
||
|
||
return 1
|
||
}
|
||
|
||
PORT="${PORT:-}"
|
||
if [[ -z "${PORT}" ]]; then
|
||
PORT="$(detect_port_from_arduino_cli || true)"
|
||
fi
|
||
if [[ -z "${PORT}" ]]; then
|
||
PORT="$(detect_port_from_dev || true)"
|
||
fi
|
||
|
||
if [[ -z "${PORT}" ]]; then
|
||
echo "Не удалось автоматически найти USB-порт ESP32." >&2
|
||
echo "Подключите плату и проверьте 'arduino-cli board list'." >&2
|
||
echo "Либо укажите порт вручную: PORT=/dev/ttyACM0 ./flash_shine_homeserver_ui.sh" >&2
|
||
exit 1
|
||
fi
|
||
|
||
echo "== Найден порт: ${PORT}"
|
||
PORT="${PORT}" "${ROOT_DIR}/burn.sh" homeserver-ui
|