From 3262ec9b4ac679ebcfdd66ea13afbbb3500b85a90976e54f1f8c3ef239cf2a8a Mon Sep 17 00:00:00 2001 From: AidarKC Date: Fri, 12 Jun 2026 23:35:05 +0400 Subject: [PATCH] =?UTF-8?q?ESP32:=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=B8=20UI=20=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BD=D0=B0=20=D0=B0=D0=BD?= =?UTF-8?q?=D0=B3=D0=BB=D0=B8=D0=B9=D1=81=D0=BA=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shine_homeserver_main.ino | 100 +++++++++--------- VERSION.properties | 4 +- 2 files changed, 52 insertions(+), 52 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 f7575dc..e764e2a 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 @@ -982,11 +982,11 @@ static bool loadWalletBalanceLamports(uint64_t &lamportsOut, String &messageOut) messageOut = ""; lamportsOut = 0; if (WiFi.status() != WL_CONNECTED) { - messageOut = "Баланс: Wi-Fi не подключен"; + messageOut = "Balance: Wi-Fi not connected"; return false; } if (gDevicePubB58.isEmpty()) { - messageOut = "Баланс: секрет не задан"; + messageOut = "Balance: secret not set"; return false; } @@ -994,12 +994,12 @@ static bool loadWalletBalanceLamports(uint64_t &lamportsOut, String &messageOut) String payload; String req = "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"getBalance\",\"params\":[\"" + gDevicePubB58 + "\",{\"commitment\":\"confirmed\"}]}"; if (!httpPostJson(gSolanaRpcUrl, req, code, payload)) { - messageOut = "Баланс: RPC не ответил"; + messageOut = "Balance: RPC unavailable"; return false; } if (!jsonInt64Field(payload, "value", lamportsOut)) { - messageOut = "Баланс: не удалось прочитать"; + messageOut = "Balance: failed to load"; return false; } @@ -1258,15 +1258,15 @@ static std::vector buildEd25519InstructionData(const uint8_t signature[ static bool getLatestBlockhashBytes(uint8_t out[32], String &blockhashB58, String &messageOut) { String payload; if (!rpcCallSolana("getLatestBlockhash", "[{\"commitment\":\"confirmed\"}]", payload)) { - messageOut = "RPC не вернул blockhash"; + messageOut = "RPC did not return blockhash"; return false; } if (!jsonStringField(payload, "blockhash", blockhashB58) || blockhashB58.isEmpty()) { - messageOut = "В ответе нет blockhash"; + messageOut = "Blockhash missing in response"; return false; } if (!base58ToFixed32(blockhashB58, out)) { - messageOut = "Некорректный blockhash"; + messageOut = "Invalid blockhash"; return false; } return true; @@ -1278,23 +1278,23 @@ static bool pdaAlreadyExists(const String &login, String &pdaAddress, String &me std::vector((const uint8_t *)kUsersSeedPrefix, (const uint8_t *)kUsersSeedPrefix + strlen(kUsersSeedPrefix)), std::vector((const uint8_t *)login.c_str(), (const uint8_t *)login.c_str() + login.length())}; if (!findProgramAddress(seeds, kShineUsersProgramId, userPda)) { - messageOut = "Не удалось вычислить user PDA"; + messageOut = "Failed to derive user PDA"; return false; } pdaAddress = bytesToBase58(userPda, 32); String payload; if (!rpcCallSolana("getAccountInfo", "[\"" + pdaAddress + "\",{\"encoding\":\"base64\",\"commitment\":\"confirmed\"}]", payload)) { - messageOut = "Не удалось проверить PDA"; + messageOut = "Failed to check PDA"; return false; } if (payload.indexOf("\"value\":null") >= 0) { return false; } if (payload.indexOf("\"value\"") >= 0) { - messageOut = "Такой логин уже зарегистрирован"; + messageOut = "Login is already registered"; return true; } - messageOut = "Непонятный ответ getAccountInfo"; + messageOut = "Unexpected getAccountInfo response"; return false; } @@ -1391,12 +1391,12 @@ static bool awaitTransactionConfirmation(const String &signatureB58, String &mes return true; } if (payload.indexOf("\"err\":{") >= 0 || payload.indexOf("\"err\":\"") >= 0) { - messageOut = "Транзакция отклонена сетью"; + messageOut = "Transaction rejected by network"; return false; } delay(1000); } - messageOut = "RPC не подтвердил транзакцию вовремя"; + messageOut = "RPC did not confirm transaction in time"; return false; } @@ -1404,19 +1404,19 @@ static bool registerHomeserverOnSolana(String &messageOut) { messageOut = ""; String cleanLogin = normalizeLoginValue(gLoginValue); if (cleanLogin.isEmpty()) { - messageOut = "Логин не задан"; + messageOut = "Login is not set"; return false; } if (!gSecretConfigured || gRootPrivB58.isEmpty() || gBlockchainPrivB58.isEmpty() || gDevicePrivB58.isEmpty()) { - messageOut = "Секрет не готов"; + messageOut = "Secret is not ready"; return false; } if (WiFi.status() != WL_CONNECTED) { - messageOut = "Сначала подключите Wi-Fi"; + messageOut = "Connect Wi-Fi first"; return false; } if (gSolanaRpcUrl.isEmpty()) { - messageOut = "Сначала задайте Solana RPC"; + messageOut = "Set Solana RPC first"; return false; } @@ -1427,14 +1427,14 @@ static bool registerHomeserverOnSolana(String &messageOut) { gRegistrationSignature = ""; saveAccountPrefs(); gAccountPdaStatus = ACCOUNT_PDA_OK; - gAccountPdaStatusMessage = "Пользователь уже зарегистрирован"; + gAccountPdaStatusMessage = "User is already registered"; gShowRegisterAccountButton = false; - gAccountStatusMessage = "Пользователь уже зарегистрирован"; + gAccountStatusMessage = "User is already registered"; gShineStatusLine = String("SHiNE: ") + (gShineServerUrl.isEmpty() ? "not set" : gShineServerUrl) + " registered"; refreshAccountPdaStatus(); return true; } - if (pdaCheckMessage == "Не удалось вычислить user PDA" || pdaCheckMessage == "Не удалось проверить PDA" || pdaCheckMessage == "Непонятный ответ getAccountInfo") { + if (pdaCheckMessage == "Failed to derive user PDA" || pdaCheckMessage == "Failed to check PDA" || pdaCheckMessage == "Unexpected getAccountInfo response") { messageOut = pdaCheckMessage; return false; } @@ -1452,7 +1452,7 @@ static bool registerHomeserverOnSolana(String &messageOut) { !findProgramAddress({ std::vector((const uint8_t *)kPaymentsInflowSeed, (const uint8_t *)kPaymentsInflowSeed + strlen(kPaymentsInflowSeed)) }, kShinePaymentsProgramId, inflowVault)) { - messageOut = "Не удалось вычислить обязательные PDA"; + messageOut = "Failed to derive required PDAs"; return false; } @@ -1468,7 +1468,7 @@ static bool registerHomeserverOnSolana(String &messageOut) { if (!deriveSeedKeypairFromBase58(gRootPrivB58, rootSeed, rootPub, rootSec) || !deriveSeedKeypairFromBase58(gBlockchainPrivB58, blockchainSeed, blockchainPub, blockchainSec) || !deriveSeedKeypairFromBase58(gDevicePrivB58, deviceSeed, devicePub, deviceSec)) { - messageOut = "Не удалось восстановить ключи"; + messageOut = "Failed to restore keys"; return false; } @@ -1478,7 +1478,7 @@ static bool registerHomeserverOnSolana(String &messageOut) { uint8_t lastBlockSignature[64]; sha256calc(lastBlockState.data(), lastBlockState.size(), lastBlockHash); if (!signMessageEd25519(std::vector(lastBlockHash, lastBlockHash + 32), blockchainSec, lastBlockSignature)) { - messageOut = "Не удалось подписать LastBlockState"; + messageOut = "Failed to sign LastBlockState"; return false; } @@ -1491,7 +1491,7 @@ static bool registerHomeserverOnSolana(String &messageOut) { uint8_t rootSignature[64]; sha256calc(unsignedRecord.data(), unsignedRecord.size(), unsignedHash); if (!signMessageEd25519(std::vector(unsignedHash, unsignedHash + 32), rootSec, rootSignature)) { - messageOut = "Не удалось подписать PDA-запись"; + messageOut = "Failed to sign PDA record"; return false; } @@ -1519,7 +1519,7 @@ static bool registerHomeserverOnSolana(String &messageOut) { createData); uint8_t txSignature[64]; if (!signMessageEd25519(message, deviceSec, txSignature)) { - messageOut = "Не удалось подписать Solana-транзакцию"; + messageOut = "Failed to sign Solana transaction"; return false; } String txBase64 = encodeTransactionBase64(txSignature, message); @@ -1527,11 +1527,11 @@ static bool registerHomeserverOnSolana(String &messageOut) { String payload; if (!rpcCallSolana("sendTransaction", "[\"" + txBase64 + "\",{\"encoding\":\"base64\",\"preflightCommitment\":\"confirmed\"}]", payload)) { - messageOut = "RPC не принял транзакцию"; + messageOut = "RPC did not accept transaction"; return false; } if (rpcResponseHasError(payload)) { - messageOut = "RPC вернул ошибку sendTransaction"; + messageOut = "RPC returned sendTransaction error"; return false; } if (!awaitTransactionConfirmation(signatureB58, messageOut)) { @@ -1540,14 +1540,14 @@ static bool registerHomeserverOnSolana(String &messageOut) { gUserPdaAddress = bytesToBase58(userPda, 32); gRegistrationSignature = signatureB58; - gAccountStatusMessage = "Solana-регистрация завершена"; + gAccountStatusMessage = "Solana registration complete"; gAccountPdaStatus = ACCOUNT_PDA_OK; - gAccountPdaStatusMessage = "Пользователь зарегистрирован"; + gAccountPdaStatusMessage = "User registered"; gShowRegisterAccountButton = false; gShineStatusLine = String("SHiNE: ") + (gShineServerUrl.isEmpty() ? "not set" : gShineServerUrl) + " registered"; saveAccountPrefs(); refreshAccountPdaStatus(); - messageOut = "Solana-регистрация подтверждена"; + messageOut = "Solana registration confirmed"; return true; } @@ -1563,15 +1563,15 @@ static void prepareRegisterAccountScreen() { String cleanLogin = normalizeLoginValue(gLoginValue); if (cleanLogin.isEmpty()) { - gRegisterConfirmMessage = "Логин не задан"; + gRegisterConfirmMessage = "Login is not set"; return; } if (!gSecretConfigured) { - gRegisterConfirmMessage = "Секрет не задан"; + gRegisterConfirmMessage = "Secret is not set"; return; } if (WiFi.status() != WL_CONNECTED) { - gRegisterConfirmMessage = "Wi-Fi не подключен"; + gRegisterConfirmMessage = "Wi-Fi is not connected"; return; } @@ -1582,16 +1582,16 @@ static void prepareRegisterAccountScreen() { } else { gRegisterConfirmBalanceLine = formatSolValue(lamports); if (lamports < 20000000ULL) { - gRegisterConfirmMessage = "Баланс меньше 0.020 SOL"; + gRegisterConfirmMessage = "Balance is below 0.020 SOL"; } else { - gRegisterConfirmMessage = "Баланс подходит: 0.020 SOL или выше"; + gRegisterConfirmMessage = "Balance is OK: 0.020 SOL or more"; } } if (gHomeserverValue.isEmpty()) { - gRegisterConfirmHomeserverLine = "Homeserver не задан"; + gRegisterConfirmHomeserverLine = "Homeserver is not set"; } else if (gHomeserverValue == "homeserver1") { - gRegisterConfirmHomeserverLine = "Homeserver: homeserver1 (стандартное значение)"; + gRegisterConfirmHomeserverLine = "Homeserver: homeserver1 (default value)"; } else { gRegisterConfirmHomeserverLine = String("Homeserver: ") + gHomeserverValue; } @@ -1599,24 +1599,24 @@ static void prepareRegisterAccountScreen() { ShinePdaUserState pdaState; String pdaError; if (!readShineUserPda(cleanLogin, pdaState, pdaError)) { - gRegisterConfirmPdaLine = pdaError.isEmpty() ? "PDA: не удалось проверить" : String("PDA: ") + pdaError; + gRegisterConfirmPdaLine = pdaError.isEmpty() ? "PDA: failed to check" : String("PDA: ") + pdaError; if (gRegisterConfirmMessage.isEmpty()) { - gRegisterConfirmMessage = pdaError.isEmpty() ? "Не удалось проверить PDA" : pdaError; + gRegisterConfirmMessage = pdaError.isEmpty() ? "Failed to check PDA" : pdaError; } return; } if (pdaState.found) { - gRegisterConfirmPdaLine = "PDA уже занят, этот login не свободен"; + gRegisterConfirmPdaLine = "PDA is already occupied, login is not free"; if (gRegisterConfirmMessage.isEmpty()) { - gRegisterConfirmMessage = "Login уже зарегистрирован"; + gRegisterConfirmMessage = "Login is already registered"; } return; } - gRegisterConfirmPdaLine = "PDA свободен для регистрации"; + gRegisterConfirmPdaLine = "PDA is free for registration"; if (gRegisterConfirmMessage.isEmpty()) { - gRegisterConfirmMessage = "Все проверки пройдены"; + gRegisterConfirmMessage = "All checks passed"; } gRegisterConfirmCanSubmit = true; } @@ -3085,12 +3085,12 @@ static void actionButtonCb(lv_event_t *event) { String registerMessage; if (registerHomeserverOnSolana(registerMessage)) { gRegisterResultSuccess = true; - gRegisterResultMessage = "Регистрация в Сиянии завершена"; + gRegisterResultMessage = "Registration in SHiNE completed"; gRegisterResultDetails = registerMessage; - gAccountStatusMessage = "Регистрация завершена"; + gAccountStatusMessage = "Registration completed"; } else { gRegisterResultSuccess = false; - gRegisterResultMessage = "Регистрация не выполнена"; + gRegisterResultMessage = "Registration failed"; gRegisterResultDetails = registerMessage; gAccountStatusMessage = registerMessage; } @@ -3635,7 +3635,7 @@ static void drawSecretGenerateCancelConfirmScreen() { static void drawRegisterAccountConfirmScreen() { setRootStyle(); makeTitle("REGISTER ACCOUNT", 22, &lv_font_montserrat_24); - String topLine = gRegisterConfirmMessage.isEmpty() ? String("Проверка регистрации") : gRegisterConfirmMessage; + String topLine = gRegisterConfirmMessage.isEmpty() ? String("Registration check") : gRegisterConfirmMessage; makeBody(topLine.c_str(), 96, 420); if (!gRegisterConfirmPdaLine.isEmpty()) { makeBody(gRegisterConfirmPdaLine.c_str(), 138, 420); @@ -3647,9 +3647,9 @@ static void drawRegisterAccountConfirmScreen() { makeBody(gRegisterConfirmHomeserverLine.c_str(), 222, 420); } if (gRegisterConfirmCanSubmit) { - makeButton("ЗАРЕГИСТРИРОВАТЬ В СИЯНИИ", 22, 296, 436, 74, 0x2A9D8F, ACTION_REGISTER_ACCOUNT_EXECUTE, &lv_font_montserrat_18); + makeButton("REGISTER IN SHINE", 22, 296, 436, 74, 0x2A9D8F, ACTION_REGISTER_ACCOUNT_EXECUTE, &lv_font_montserrat_18); } else { - makeButton("НЕДОСТУПНО", 22, 296, 436, 74, 0x4A5560, ACTION_NONE, &lv_font_montserrat_20); + makeButton("UNAVAILABLE", 22, 296, 436, 74, 0x4A5560, ACTION_NONE, &lv_font_montserrat_20); } makeButton("BACK", 140, 384, 200, 54, 0x5A6570, ACTION_BACK_HOME, &lv_font_montserrat_20); makeVersionTag(); @@ -3658,7 +3658,7 @@ static void drawRegisterAccountConfirmScreen() { static void drawRegisterAccountResultScreen() { setRootStyle(); makeTitle("REGISTER RESULT", 22, &lv_font_montserrat_24); - String resultTopLine = gRegisterResultSuccess ? String("Регистрация завершилась успешно") : String("Регистрация завершилась с ошибкой"); + String resultTopLine = gRegisterResultSuccess ? String("Registration completed successfully") : String("Registration failed"); makeBody(resultTopLine.c_str(), 96, 420); makeBody(gRegisterResultMessage.c_str(), 140, 420); if (!gRegisterResultDetails.isEmpty()) { diff --git a/VERSION.properties b/VERSION.properties index cca767c..c790f2a 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.165 -server.version=1.2.154 +client.version=1.2.166 +server.version=1.2.155