From 7d9db68d80070e09e7da6251a5908ee511ac6c19f0797f717769d5eeb31d5d58 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Tue, 23 Jun 2026 18:32:32 +0400 Subject: [PATCH] =?UTF-8?q?ESP32:=20NTP=20=D0=B4=D0=BB=D1=8F=20update=20us?= =?UTF-8?q?er=5Fpda?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shine_homeserver_main/shine_homeserver_main.ino | 12 +++++++++++- .../reference/shine_homeserver_ui_spec.md | 2 +- VERSION.properties | 4 ++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/main-device/shine_homeserver_main/shine_homeserver_main.ino b/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/main-device/shine_homeserver_main/shine_homeserver_main.ino index d2c70a1..2a33bf9 100644 --- a/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/main-device/shine_homeserver_main/shine_homeserver_main.ino +++ b/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/main-device/shine_homeserver_main/shine_homeserver_main.ino @@ -3254,6 +3254,16 @@ static bool updateHomeserverSessionOnSolana(bool requireExisting, String &messag } saveRegisterDiagCheckpoint("Local keys restored", diagDetails); + if (!ensureNtpTimeSynced(messageOut)) { + diagDetails += String("ntp_error=") + messageOut + "\n"; + return failWithDiag(messageOut); + } + uint64_t updatedAtMs = 0; + if (!getSystemEpochMs(updatedAtMs)) { + return failWithDiag("NTP time is not ready"); + } + diagDetails += String("updated_at_ms=") + String((unsigned long long)updatedAtMs) + "\n"; + uint8_t userPda[32] = {}; uint8_t economyConfig[32] = {}; uint8_t inflowVault[32] = {}; @@ -3279,7 +3289,7 @@ static bool updateHomeserverSessionOnSolana(bool requireExisting, String &messag memcpy(nextState.recoveryKey32, recoveryPub, 32); memcpy(nextState.rootKey32, rootPub, 32); memcpy(nextState.clientKey32, clientPub, 32); - nextState.updatedAtMs = shineNowMs(); + nextState.updatedAtMs = updatedAtMs; nextState.recordNumber = currentState.recordNumber + 1; if (nextState.sessionsMode == 0) { nextState.sessionsMode = 1; diff --git a/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/reference/shine_homeserver_ui_spec.md b/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/reference/shine_homeserver_ui_spec.md index dc55165..5a310d9 100644 --- a/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/reference/shine_homeserver_ui_spec.md +++ b/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/reference/shine_homeserver_ui_spec.md @@ -70,7 +70,7 @@ - флаги: `wifiReady`, `serversReady`, `secretReady`, `registered`, `online`. -Для первой регистрации обычного `user PDA` устройство берёт `createdAtMs` / `updatedAtMs` из NTP прямо перед отправкой транзакции в Solana. Дальше в `user PDA` сохраняется `accessServers`, где по умолчанию лежит `shineupme`. +Для первой регистрации обычного `user PDA` устройство берёт `createdAtMs` из NTP прямо перед отправкой транзакции в Solana. При последующих обновлениях `user PDA` устройство так же берёт актуальный `updatedAtMs` из NTP перед отправкой update-транзакции. Дальше в `user PDA` сохраняется `accessServers`, где по умолчанию лежит `shineupme`. ## Правило серверной сессии SHiNE diff --git a/VERSION.properties b/VERSION.properties index 8c11778..40f30dd 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.246 -server.version=1.2.231 +client.version=1.2.247 +server.version=1.2.232