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"