fix: Restrict Windows platform from using Zcash and Lightning features; update Lightning availability checks. (#3220)

Konstantin Ullrich committed May 6, 2026 at 21:40 UTC 46064f075aa67645be9880ccb894ed53343e0971
6 files changed +18 -10
cakewallet.bat
+1 -1
@@ -24,7 +24,7 @@ IF NOT EXIST "%secrets_file_path%" (
24 ) ELSE (echo === Using previously/already generated secrets file: %secrets_file_path% ===)
25
26 echo === Generating mobx models ===
27 -for /d %%i in (cw_core cw_monero cw_bitcoin cw_ethereum cw_evm cw_polygon cw_nano cw_bitcoin_cash cw_solana cw_tron cw_base cw_arbitrum.) do (
27 +for /d %%i in (cw_core cw_monero cw_bitcoin cw_evm cw_nano cw_bitcoin_cash cw_solana cw_tron cw_zcash.) do (
28 cd %%i
29 call flutter pub get > nul
30 call dart run build_runner build --delete-conflicting-outputs > nul
cw_bitcoin/lib/bitcoin_wallet.dart
+2 -2
@@ -100,7 +100,7 @@ abstract class BitcoinWalletBase extends ElectrumWallet with Store {
100 // String sideDerivationPath = derivationPath.substring(0, derivationPath.length - 1) + "1";
101 // final hd = bitcoin.HDWallet.fromSeed(seedBytes, network: networkType);
102
103 - if (mnemonic != null && this.useLightning) {
103 + if (mnemonic != null && this.useLightning && LightningWallet.isAvailable) {
104 try {
105 lightningWallet = LightningWallet(
106 mnemonic: mnemonic,
@@ -142,7 +142,7 @@ abstract class BitcoinWalletBase extends ElectrumWallet with Store {
142 });
143
144 reaction((_) => this.useLightning, (bool useLightning) {
145 - if (useLightning) {
145 + if (useLightning && LightningWallet.isAvailable) {
146 if (mnemonic != null) {
147 lightningWallet = LightningWallet(
148 mnemonic: mnemonic,
cw_bitcoin/lib/lightning/lightning_wallet.dart
+3 -1
@@ -33,9 +33,11 @@ class LightningWallet {
33 required this.apiKey,
34 required this.lnurlDomain,
35 this.network = Network.mainnet,
36 - this.cachedAddress
36 + this.cachedAddress,
37 });
38
39 + static bool get isAvailable => Platform.isIOS || Platform.isAndroid || Platform.isMacOS;
40 +
41 StreamSubscription<SdkEvent>? _eventSubscription;
42 Stream<SdkEvent>? _eventStream;
43
lib/main.dart
+10 -5
@@ -165,12 +165,17 @@ Future<void> runAppWithZone({Key? topLevelKey}) async {
165 if (FeatureFlag.hasDevOptions) {
166 ProxyWrapper.logger = MemoryProxyLogger();
167 }
168 - var zcashPassword = await secureStorageShared.read(key: "com.cakewallet.cw_zcash/zec.db");
169 - if (zcashPassword == null || zcashPassword.isEmpty) {
170 - zcashPassword = generateKey().substring(0, 32);
171 - secureStorageShared.write(key: "com.cakewallet.cw_zcash/zec.db", value: zcashPassword);
168 +
169 + if (!Platform.isWindows) {
170 + var zcashPassword = await secureStorageShared.read(
171 + key: "com.cakewallet.cw_zcash/zec.db");
172 + if (zcashPassword == null || zcashPassword.isEmpty) {
173 + zcashPassword = generateKey().substring(0, 32);
174 + secureStorageShared.write(
175 + key: "com.cakewallet.cw_zcash/zec.db", value: zcashPassword);
176 + }
177 + zcash?.unlockDatabase(zcashPassword);
178 }
173 - zcash?.unlockDatabase(zcashPassword);
179
180 // Basically when we're running a test
181 if (topLevelKey != null) {
lib/view_model/settings/privacy_settings_view_model.dart
+1 -1
@@ -109,7 +109,7 @@ abstract class PrivacySettingsViewModelBase with Store {
109 bool get canUsePayjoin => _wallet.type == WalletType.bitcoin && DeviceInfo.instance.isMobile;
110
111 @computed
112 - bool get canUseLightning => _wallet.type == WalletType.bitcoin;
112 + bool get canUseLightning => _wallet.type == WalletType.bitcoin && !Platform.isWindows;
113
114 @computed
115 bool get useLightning => _wallet.type == WalletType.bitcoin && bitcoin!.useLightning(_wallet);
pubspec_base.yaml
+1
@@ -226,6 +226,7 @@ dependency_overrides:
226 ref: c414574bc5ac349450f601e7f72c7b9f31b4d087
227 decimal: ^2.3.3
228 flutter_rust_bridge: 2.11.1
229 + flutter_secure_storage_windows: 3.1.2
230
231 flutter_icons:
232 image_path: "assets/images/app_logo.png"