diff --git a/src/app.cpp b/src/app.cpp index d8bcaa5..7552aeb 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -403,6 +403,12 @@ void App::update() // Apply any lite-wallet refresh the controller's background worker produced (main thread). if (lite_wallet_) { + // Lite has no RPC daemon (tryConnect() is a no-op in lite builds), so derive the app's + // "online" state — which gates the wallet UI via isConnected() — from the lite wallet. + // A wallet is open only after a successful backend init against the lite server, so this + // is a non-blocking proxy for "lite backend operational". + state_.connected = lite_wallet_->walletOpen(); + wallet::LiteWalletAppRefreshModel liteModel; if (lite_wallet_->takeRefreshedModel(liteModel)) { wallet::applyLiteRefreshModelToWalletState(liteModel, state_); diff --git a/src/app_network.cpp b/src/app_network.cpp index 60ed328..8330535 100644 --- a/src/app_network.cpp +++ b/src/app_network.cpp @@ -164,8 +164,13 @@ static WarmupText translateWarmup(const std::string& raw) void App::tryConnect() { + // Lite builds have no full node / RPC daemon, so never run the RPC connection state machine + // (it would just fail every tick). The lite controller drives the wallet; "online" status is + // derived from it each frame in App::update(), which also gates the wallet UI (isConnected()). + if (isLiteBuild()) return; + if (connection_in_progress_) return; - + static int connect_attempt = 0; ++connect_attempt;