v5.8.0 Release Candidate (#2815)

* v5.8.0 Release Candidate Add Arbitrum EVM chains enhancements Integrate Jupiter swaps for Solana Bug fixes * Exclude transparent address from unified address * fix hiddenAddresses getting discarded [skip ci] * pump zcash order [skip ci] * CW-1372: zcash improvements and missing features second iteration (#2818) * fix: remove hidden addresses from usable address list fix: getBlockHeightByTime fallback to offline calculation fix: remove NewWalletTypeViewModel to fix groups working without restart * fix: rotate T addresses in exchanges * fix: builds without --zcash config (linux) * fix: update address after trade * Add zcash.me * printv [skip ci] --------- Co-authored-by: cyan <cyjan@mrcyjanek.net>

Omar Hatem committed Jan 20, 2026 at 19:23 UTC 9ca2346a45f9c91a4fbc1b3ea38312120e2b7f6b
19 files changed +185 -70
assets/text/Release_Notes.txt
+4 -2
@@ -1,3 +1,5 @@
1 -Add Zcash wallet
2 -Generic enhancements
1 +Add Arbitrum
2 +Zcash improvements
3 +EVM chains enhancements
4 +Integrate Jupiter swaps for Solana
5 Bug fixes
\ No newline at end of file
cw_zcash/lib/src/zcash_taddress_rotation.dart
+25 -5
@@ -17,6 +17,7 @@ import 'dart:io';
17
18 import 'package:cw_core/pathForWallet.dart';
19 import 'package:cw_core/utils/print_verbose.dart';
20 +import 'package:cw_core/wallet_info.dart';
21 import 'package:cw_core/wallet_type.dart';
22 import 'package:cw_zcash/src/util/crc32.dart';
23 import 'package:cw_zcash/src/zcash_wallet.dart';
@@ -232,6 +233,21 @@ class ZcashTaddressRotation {
233 final txs = WarpApi.getTxsSync(coin, a.id);
234 return txs.isNotEmpty;
235 });
236 +
237 + // remove hidden addresses
238 + final wis = await WalletInfo.selectList('type = ?', [WalletType.zcash.index]);
239 +
240 + final List<String> hiddenAddresses_ = [];
241 + for (int k = 0; k < wis.length; k++) {
242 + final addrs = await wis[i].getHiddenAddresses();
243 + final addr2 = await wis[i].getUsedAddresses();
244 + hiddenAddresses_.addAll(addrs);
245 + hiddenAddresses_.addAll(addr2);
246 + }
247 + final Set<String> hiddenAddresses = hiddenAddresses_.toSet();
248 + rotationAccountsUsable[raKeys[i]]!.removeWhere((final a) {
249 + return hiddenAddresses.contains(WarpApi.getTAddr(coin, a.id));
250 + });
251 }
252 printV("rotationAccountsUsable: ${rotationAccountsUsable.length}");
253
@@ -376,12 +392,16 @@ class ZcashTaddressRotation {
392 }
393 }
394
379 - static String? addressForAccount(final int accountId) {
380 - final acc = rotationAccountsUsable[accountId]?.firstOrNull;
381 - if (acc == null) {
382 - return null;
395 + static String? addressForAccount(final int accountId, final Set<String>? hiddenAddresses) {
396 + final accs = rotationAccountsUsable[accountId] ?? [];
397 + for (int i = 0; i < accs.length; i++) {
398 + final addr = WarpApi.getTAddr(coin, accs[i].id);
399 + if (hiddenAddresses?.contains(addr) == true) {
400 + continue;
401 + }
402 + return addr;
403 }
384 - return WarpApi.getTAddr(coin, acc.id);
404 + return null;
405 }
406
407 static List<String>? allAddressesForAccount(final int accountId) {
cw_zcash/lib/src/zcash_transaction_info.dart
-1
@@ -75,7 +75,6 @@ class ZcashTransactionInfo extends TransactionInfo {
75 static final Map<String, String> _destinationAddressMap = {};
76
77 static String? getCachedDestinationAddress(final String txId) {
78 - printV("$txId -> ${_destinationAddressMap.keys.join(",")}");
78 return _destinationAddressMap[txId] ??
79 _destinationAddressMap['"$txId"'] ??
80 _destinationAddressMap[txId.replaceAll('"', '')];
cw_zcash/lib/src/zcash_wallet.dart
+52 -3
@@ -783,7 +783,7 @@ abstract class ZcashWalletBase
783 final newWalletCredentials = credentials as ZcashNewWalletCredentials;
784
785 String mnemonic;
786 - if (newWalletCredentials.mnemonic != null && newWalletCredentials.mnemonic!.isNotEmpty) {
786 + if (newWalletCredentials.mnemonic?.isNotEmpty == true) {
787 mnemonic = newWalletCredentials.mnemonic!;
788 } else {
789 final strength = (newWalletCredentials.seedPhraseLength == 24) ? 256 : 128;
@@ -970,7 +970,56 @@ abstract class ZcashWalletBase
970 _initialized = true;
971 }
972
973 - static Future<int> getHeightByDate(final DateTime date) {
974 - return WarpApi.getBlockHeightByTime(coin, date);
973 + static Future<int> getBlockHeightByTime(final DateTime time) async {
974 + final genesisTime = DateTime.utc(2016, 10, 28);
975 + const genesisHeight = 0;
976 +
977 + final firstHalvingTime = DateTime.utc(2020, 11, 18);
978 + const firstHalvingHeight = 1046400;
979 +
980 + final secondHalvingTime = DateTime.utc(2024, 11, 23);
981 + const secondHalvingHeight = 2726400;
982 +
983 + final t = time.toUtc().millisecondsSinceEpoch;
984 + final t0 = genesisTime.millisecondsSinceEpoch;
985 + final t1 = firstHalvingTime.millisecondsSinceEpoch;
986 + final t2 = secondHalvingTime.millisecondsSinceEpoch;
987 +
988 + if (t <= t0) return genesisHeight;
989 +
990 + if (t < t1) {
991 + return _interpolate(genesisHeight, firstHalvingHeight, t0, t1, t);
992 + }
993 +
994 + if (t < t2) {
995 + return _interpolate(firstHalvingHeight, secondHalvingHeight, t1, t2, t);
996 + }
997 +
998 + final secondsSince2 = (t - t2) / 1000.0;
999 + final blocksSince2 = (secondsSince2 / 76.0).floor();
1000 + return secondHalvingHeight + blocksSince2;
1001 + }
1002 +
1003 + static int _interpolate(
1004 + final int hStart,
1005 + final int hEnd,
1006 + final int tStart,
1007 + final int tEnd,
1008 + final int t,
1009 + ) {
1010 + if (tEnd == tStart) return hStart;
1011 + final ratio = (t - tStart) / (tEnd - tStart);
1012 + return (hStart + (hEnd - hStart) * ratio).round();
1013 + }
1014 +
1015 + static Future<int> getHeightByDate(final DateTime date) async {
1016 + int height = await getBlockHeightByTime(date);
1017 + try {
1018 + final h2 = await WarpApi.getBlockHeightByTime(coin, date);
1019 + height = h2;
1020 + } catch (e) {
1021 + printV("getHeightByDate: $e");
1022 + }
1023 + return height;
1024 }
1025 }
cw_zcash/lib/src/zcash_wallet_addresses.dart
+19 -12
@@ -51,7 +51,7 @@ abstract class ZcashWalletAddressesBase extends WalletAddresses with Store {
51 return orchardAddress;
52 case ZcashAddressType.unifiedType:
53 if (_unifiedAddress == null) {
54 - _unifiedAddress = WarpApi.getAddress(ZcashWalletBase.coin, accountId, 7);
54 + _unifiedAddress = WarpApi.getAddress(ZcashWalletBase.coin, accountId, 6);
55 }
56 return _unifiedAddress ?? "";
57 }
@@ -91,7 +91,7 @@ abstract class ZcashWalletAddressesBase extends WalletAddresses with Store {
91 @computed
92 String? get transparentAddressRotated {
93 try {
94 - return ZcashTaddressRotation.addressForAccount(accountId);
94 + return ZcashTaddressRotation.addressForAccount(accountId, hiddenAddresses);
95 } catch (e) {
96 return null;
97 }
@@ -120,6 +120,7 @@ abstract class ZcashWalletAddressesBase extends WalletAddresses with Store {
120 }
121
122 @override
123 + @computed
124 String get addressForExchange => transparentAddressRotated ?? transparentAddress;
125
126 @override
@@ -130,17 +131,23 @@ abstract class ZcashWalletAddressesBase extends WalletAddresses with Store {
131 static int get coin => ZcashWalletBase.coin;
132
133 @override
133 - Future<void> init() async {
134 + @observable
135 + Set<String> hiddenAddresses = {};
136 +
137 + Future<void> _initAddresses() async {
138 addressesMap = await walletInfo.getAddresses();
139 addressInfos = await walletInfo.getAddressInfos();
140 usedAddresses = await walletInfo.getUsedAddresses();
141 manualAddresses = await walletInfo.getManualAddresses();
142 hiddenAddresses = await walletInfo.getHiddenAddresses();
143 + address = latestAddress;
144 + }
145
140 - addressesMap = {"a": "b"};
146 + @override
147 + Future<void> init() async {
148 + await _initAddresses();
149
150 await ZcashTaddressRotation.init();
143 - printV(ZcashTaddressRotation.rotationAccounts.keys);
151 int accountIndex = 0;
152 addressInfos = {
153 0:
@@ -155,11 +162,13 @@ abstract class ZcashWalletAddressesBase extends WalletAddresses with Store {
162 }).toList() ??
163 [],
164 };
158 - hiddenAddresses = ZcashTaddressRotation.allUsedAddressesForAccount(accountId)?.toSet() ?? {};
165 + hiddenAddresses.addAll(
166 + ZcashTaddressRotation.allUsedAddressesForAccount(accountId)?.toSet() ?? {},
167 + );
168
160 - addressInfos[0]?.removeWhere((final test) => hiddenAddresses.contains(test.address));
169 + // addressInfos[0]?.removeWhere((final test) => hiddenAddresses.contains(test.address));
170 if (_addressPageType == ZcashAddressType.transparentRotated) {
162 - final addr = ZcashTaddressRotation.addressForAccount(accountId);
171 + final addr = ZcashTaddressRotation.addressForAccount(accountId, hiddenAddresses);
172 if (addr != null) {
173 address = addr;
174 }
@@ -167,14 +176,11 @@ abstract class ZcashWalletAddressesBase extends WalletAddresses with Store {
176 await saveAddressesInBox();
177 }
178
170 - @override
179 @observable
180 late String _address = latestAddress;
181
182 + @computed
183 String get address {
175 - if (addressPageType == ZcashAddressType.transparentRotated) {
176 - return transparentAddressRotated ?? transparentAddress;
177 - }
184 return _address;
185 }
186
@@ -191,6 +197,7 @@ abstract class ZcashWalletAddressesBase extends WalletAddresses with Store {
197 await walletInfo.setUsedAddresses(usedAddresses.toList());
198 await walletInfo.setHiddenAddresses(hiddenAddresses.toList());
199 await walletInfo.setManualAddresses(manualAddresses.toList());
200 + await _initAddresses();
201 } catch (e) {
202 printV("Error saving addresses: $e");
203 }
ios/Podfile.lock
+6
@@ -84,6 +84,8 @@ PODS:
84 - payjoin_flutter (0.23.0)
85 - permission_handler_apple (9.3.0):
86 - Flutter
87 + - quick_actions_ios (0.0.1):
88 + - Flutter
89 - reown_yttrium (0.0.1):
90 - Flutter
91 - YttriumWrapper (= 0.8.35)
@@ -169,6 +171,7 @@ DEPENDENCIES:
171 - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
172 - payjoin_flutter (from `.symlinks/plugins/payjoin_flutter/ios`)
173 - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
174 + - quick_actions_ios (from `.symlinks/plugins/quick_actions_ios/ios`)
175 - reown_yttrium (from `.symlinks/plugins/reown_yttrium/ios`)
176 - sensitive_clipboard (from `.symlinks/plugins/sensitive_clipboard/ios`)
177 - share_plus (from `.symlinks/plugins/share_plus/ios`)
@@ -243,6 +246,8 @@ EXTERNAL SOURCES:
246 :path: ".symlinks/plugins/payjoin_flutter/ios"
247 permission_handler_apple:
248 :path: ".symlinks/plugins/permission_handler_apple/ios"
249 + quick_actions_ios:
250 + :path: ".symlinks/plugins/quick_actions_ios/ios"
251 reown_yttrium:
252 :path: ".symlinks/plugins/reown_yttrium/ios"
253 sensitive_clipboard:
@@ -299,6 +304,7 @@ SPEC CHECKSUMS:
304 path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
305 payjoin_flutter: d9d4c8aa16bd5dfedb9b21d0edc8199e0187d96e
306 permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
307 + quick_actions_ios: 56f3cbaa71e94f212838d1f9fe354bd0734779bf
308 reown_yttrium: c0e87e5965fa60a3559564cc35cffbba22976089
309 SDWebImage: 9f177d83116802728e122410fb25ad88f5c7608a
310 sensitive_clipboard: d4866e5d176581536c27bb1618642ee83adca986
lib/di.dart
+2 -6
@@ -188,7 +188,6 @@ import 'package:cake_wallet/view_model/cake_pay/cake_pay_account_view_model.dart
188 import 'package:cake_wallet/view_model/cake_pay/cake_pay_cards_list_view_model.dart';
189 import 'package:cake_wallet/view_model/nano_account_list/nano_account_edit_or_create_view_model.dart';
190 import 'package:cake_wallet/view_model/nano_account_list/nano_account_list_view_model.dart';
191 -import 'package:cake_wallet/view_model/new_wallet_type_view_model.dart';
191 import 'package:cake_wallet/view_model/node_list/pow_node_list_view_model.dart';
192 import 'package:cake_wallet/view_model/wallet_groups_display_view_model.dart';
193 import 'package:cake_wallet/view_model/seed_settings_view_model.dart';
@@ -442,10 +441,6 @@ Future<void> setup({
441 newWalletArguments: newWalletArgs,
442 ));
443
445 -
446 - final walletList = await WalletInfo.getAll();
447 - getIt.registerFactory<NewWalletTypeViewModel>(() => NewWalletTypeViewModel(walletList.isNotEmpty));
448 -
444 getIt.registerFactory<WalletManager>(
445 () => WalletManager(
446 getIt.get<SharedPreferences>(),
@@ -579,6 +574,8 @@ Future<void> setup({
574 sharedPreferences: getIt.get<SharedPreferences>(),
575 keyService: getIt.get<KeyService>()));
576
577 + final walletList = await WalletInfo.getAll();
578 +
579 getIt.registerFactory<AuthService>(
580 () => AuthService(
581 secureStorage: getIt.get<SecureStorage>(),
@@ -1326,7 +1323,6 @@ Future<void> setup({
1323 (newWalletTypeArguments, _) {
1324 return NewWalletTypePage(
1325 newWalletTypeArguments: newWalletTypeArguments,
1329 - newWalletTypeViewModel: getIt.get<NewWalletTypeViewModel>(),
1326 );
1327 });
1328
lib/entities/parse_address_from_domain.dart
+38
@@ -15,6 +15,7 @@ import 'package:cake_wallet/store/settings_store.dart';
15 import 'package:cake_wallet/twitter/twitter_api.dart';
16 import 'package:cw_core/crypto_currency.dart';
17 import 'package:cw_core/utils/print_verbose.dart';
18 +import 'package:cw_core/utils/proxy_wrapper.dart';
19 import 'package:cw_core/wallet_base.dart';
20 import 'package:cw_core/wallet_type.dart';
21 import 'package:flutter/cupertino.dart';
@@ -216,6 +217,19 @@ class AddressResolver {
217 Future<ParsedAddress> resolve(BuildContext context, String text, CryptoCurrency currency) async {
218 final ticker = currency.title;
219 try {
220 + if (text.startsWith("zcash.me")) {
221 + final parts = text.split("/");
222 + final handle = parts.last;
223 + if (parts.length == 2 && handle.isNotEmpty) {
224 + final extractZcashAddress = await _fetchZcashAddress(handle);
225 + if (extractZcashAddress != null) {
226 + return ParsedAddress.zcashAddress(
227 + address: extractZcashAddress,
228 + name: handle,
229 + );
230 + }
231 + }
232 + }
233 // twitter handle example: @username
234 if (text.startsWith('@') && !text.substring(1).contains('@')) {
235 if (currency == CryptoCurrency.zano && settingsStore.lookupsZanoAlias) {
@@ -479,4 +493,28 @@ class AddressResolver {
493
494 return ParsedAddress(addresses: [text]);
495 }
496 +
497 + Future<String?> _fetchZcashAddress(String handle) async {
498 + final url = Uri.parse('https://zcash.me/$handle');
499 +
500 + try {
501 + final response = await ProxyWrapper().get(clearnetUri: url);
502 +
503 + if (response.statusCode == 200) {
504 + final addressRegex = RegExp(
505 + r'(t1[0-9A-Za-z]{33}|t3[0-9A-Za-z]{33}|zs[a-z0-9]{76}|u1[a-z0-9]{1,300})',
506 + caseSensitive: true,
507 + );
508 +
509 + final match = addressRegex.firstMatch(response.body);
510 +
511 + if (match != null) {
512 + return match.group(0);
513 + }
514 + }
515 + } catch (e) {
516 + printV('Error fetching zcash.me profile: $e');
517 + }
518 + return null;
519 + }
520 }
lib/entities/parsed_address.dart
+9
@@ -15,6 +15,7 @@ enum ParseFrom {
15 thorChain,
16 wellKnown,
17 zanoAlias,
18 + zcashAddress,
19 bip353
20 }
21
@@ -167,6 +168,14 @@ class ParsedAddress {
168 );
169 }
170
171 + factory ParsedAddress.zcashAddress({required String address, required String name}) {
172 + return ParsedAddress(
173 + addresses: [address],
174 + name: name,
175 + parseFrom: ParseFrom.zcashAddress,
176 + );
177 + }
178 +
179 factory ParsedAddress.fetchWellKnownAddress({required String address, required String name}) {
180 return ParsedAddress(
181 addresses: [address],
lib/src/screens/new_wallet/new_wallet_type_page.dart
+2 -7
@@ -13,7 +13,6 @@ import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
13 import 'package:cake_wallet/src/widgets/search_bar_widget.dart';
14 import 'package:cake_wallet/utils/responsive_layout_util.dart';
15 import 'package:cake_wallet/utils/show_pop_up.dart';
16 -import 'package:cake_wallet/view_model/new_wallet_type_view_model.dart';
16 import 'package:cake_wallet/wallet_types.g.dart';
17 import 'package:cw_core/currency_for_wallet_type.dart';
18 import 'package:cw_core/hardware/device_connection_type.dart';
@@ -23,11 +22,9 @@ import 'package:flutter/material.dart';
22
23 class NewWalletTypePage extends BasePage {
24 NewWalletTypePage({
26 - required this.newWalletTypeViewModel,
25 required this.newWalletTypeArguments,
26 });
27
30 - final NewWalletTypeViewModel newWalletTypeViewModel;
28 final NewWalletTypeArguments newWalletTypeArguments;
29
30 final walletTypeImage = Image.asset('assets/images/wallet_type.png');
@@ -50,7 +47,6 @@ class NewWalletTypePage extends BasePage {
47 Widget body(BuildContext context) => WalletTypeForm(
48 walletImage: currentTheme.isDark ? walletTypeImage : walletTypeLightImage,
49 isCreate: newWalletTypeArguments.isCreate,
53 - newWalletTypeViewModel: newWalletTypeViewModel,
50 onTypeSelected: newWalletTypeArguments.onTypeSelected,
51 hardwareWalletType: newWalletTypeArguments.hardwareWalletType,
52 );
@@ -60,14 +56,12 @@ class WalletTypeForm extends StatefulWidget {
56 WalletTypeForm({
57 required this.walletImage,
58 required this.isCreate,
63 - required this.newWalletTypeViewModel,
59 this.onTypeSelected,
60 this.hardwareWalletType,
61 });
62
63 final bool isCreate;
64 final Image walletImage;
70 - final NewWalletTypeViewModel newWalletTypeViewModel;
65 final void Function(BuildContext, WalletType)? onTypeSelected;
66 final HardwareWalletType? hardwareWalletType;
67
@@ -195,9 +189,10 @@ class WalletTypeFormState extends State<WalletTypeForm> {
189 // If it's a restore flow, trigger the external callback
190 // If it's not a BIP39 Wallet or if there are no other wallets, route to the newWallet page
191 // Any other scenario, route to pre-existing seed page
192 + final walletList = await WalletInfo.getAll();
193 if (!widget.isCreate) {
194 widget.onTypeSelected!(context, selected!);
200 - } else if (!isBIP39Wallet(selected!) || !widget.newWalletTypeViewModel.hasExisitingWallet) {
195 + } else if (!isBIP39Wallet(selected!) || walletList.isEmpty) {
196 Navigator.of(context).pushNamed(
197 Routes.newWallet,
198 arguments: NewWalletArguments(type: selected!),
lib/src/screens/send/widgets/extract_address_from_parsed.dart
+5
@@ -73,6 +73,11 @@ Future<String> extractAddressFromParsed(
73 content = S.of(context).extracted_address_content('${parsedAddress.name} (Zano Alias)');
74 address = parsedAddress.addresses.first;
75 break;
76 + case ParseFrom.zcashAddress:
77 + title = S.of(context).address_detected;
78 + content = S.of(context).extracted_address_content('${parsedAddress.name} (Zcash.me)');
79 + address = parsedAddress.addresses.first;
80 + break;
81 case ParseFrom.bip353:
82 title = S.of(context).address_detected;
83 content = S.of(context).extracted_address_content('${parsedAddress.name} (BIP-353)');
lib/view_model/new_wallet_type_view_model.dart deleted
-11
@@ -1,11 +0,0 @@
1 -import 'package:mobx/mobx.dart';
2 -
3 -part 'new_wallet_type_view_model.g.dart';
4 -
5 -class NewWalletTypeViewModel = NewWalletTypeViewModelBase with _$NewWalletTypeViewModel;
6 -
7 -abstract class NewWalletTypeViewModelBase with Store {
8 - NewWalletTypeViewModelBase(this.hasExisitingWallet);
9 -
10 - final bool hasExisitingWallet;
11 -}
lib/zcash/cw_zcash.dart
+2 -2
@@ -176,7 +176,7 @@ class CWZcash extends Zcash {
176 }
177
178 @override
179 - ZcashAddressType getZcashAddressType(ReceivePageOption option) {
179 + dynamic getZcashAddressType(ReceivePageOption option) {
180 switch (option) {
181 case ZcashReceivePageOption.unified:
182 return ZcashAddressType.unifiedType;
@@ -196,7 +196,7 @@ class CWZcash extends Zcash {
196 }
197
198 @override
199 - ZcashAddressType getOptionToType(ReceivePageOption option) {
199 + dynamic getOptionToType(ReceivePageOption option) {
200 return (option as ZcashReceivePageOption).toType();
201 }
202
scripts/android/app_env.sh
+4 -4
@@ -14,15 +14,15 @@ TYPES=($MONERO_COM $CAKEWALLET)
14 APP_ANDROID_TYPE=$1
15
16 MONERO_COM_NAME="Monero.com"
17 -MONERO_COM_VERSION="5.6.5"
18 -MONERO_COM_BUILD_NUMBER=4150
17 +MONERO_COM_VERSION="5.8.0"
18 +MONERO_COM_BUILD_NUMBER=4151
19 MONERO_COM_BUNDLE_ID="com.monero.app"
20 MONERO_COM_PACKAGE="com.monero.app"
21 MONERO_COM_SCHEME="monero.com"
22
23 CAKEWALLET_NAME="Cake Wallet"
24 -CAKEWALLET_VERSION="5.7.0"
25 -CAKEWALLET_BUILD_NUMBER=4298
24 +CAKEWALLET_VERSION="5.8.0"
25 +CAKEWALLET_BUILD_NUMBER=4299
26 CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet"
27 CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet"
28 CAKEWALLET_SCHEME="cakewallet"
scripts/ios/app_env.sh
+4 -4
@@ -12,13 +12,13 @@ TYPES=($MONERO_COM $CAKEWALLET)
12 APP_IOS_TYPE=$1
13
14 MONERO_COM_NAME="Monero.com"
15 -MONERO_COM_VERSION="5.6.5"
16 -MONERO_COM_BUILD_NUMBER=153
15 +MONERO_COM_VERSION="5.8.0"
16 +MONERO_COM_BUILD_NUMBER=155
17 MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
18
19 CAKEWALLET_NAME="Cake Wallet"
20 -CAKEWALLET_VERSION="5.7.0"
21 -CAKEWALLET_BUILD_NUMBER=363
20 +CAKEWALLET_VERSION="5.8.0"
21 +CAKEWALLET_BUILD_NUMBER=366
22 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"
23
24
scripts/linux/app_env.sh
+2 -2
@@ -14,8 +14,8 @@ if [ -n "$1" ]; then
14 fi
15
16 CAKEWALLET_NAME="Cake Wallet"
17 -CAKEWALLET_VERSION="5.6.1"
18 -CAKEWALLET_BUILD_NUMBER=75
17 +CAKEWALLET_VERSION="5.8.0"
18 +CAKEWALLET_BUILD_NUMBER=76
19
20 if ! [[ " ${TYPES[*]} " =~ " ${APP_LINUX_TYPE} " ]]; then
21 echo "Wrong app type."
scripts/macos/app_config.sh
+1 -1
@@ -36,7 +36,7 @@ case $APP_MACOS_TYPE in
36 $MONERO_COM)
37 CONFIG_ARGS="--monero";;
38 $CAKEWALLET)
39 - CONFIG_ARGS="--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --solana --tron --wownero --dogecoin --base --zcash --arbitrum";;
39 + CONFIG_ARGS="--monero --bitcoin --ethereum --polygon --nano --bitcoinCash --solana --tron --wownero --dogecoin --base --arbitrum";;
40 esac
41
42 cp -rf pubspec_description.yaml pubspec.yaml
scripts/macos/app_env.sh
+4 -4
@@ -16,13 +16,13 @@ if [ -n "$1" ]; then
16 fi
17
18 MONERO_COM_NAME="Monero.com"
19 -MONERO_COM_VERSION="5.6.6"
20 -MONERO_COM_BUILD_NUMBER=74
19 +MONERO_COM_VERSION="5.8.0"
20 +MONERO_COM_BUILD_NUMBER=75
21 MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
22
23 CAKEWALLET_NAME="Cake Wallet"
24 -CAKEWALLET_VERSION="5.7.0"
25 -CAKEWALLET_BUILD_NUMBER=142
24 +CAKEWALLET_VERSION="5.8.0"
25 +CAKEWALLET_BUILD_NUMBER=143
26 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"
27
28 if ! [[ " ${TYPES[*]} " =~ " ${APP_MACOS_TYPE} " ]]; then
tool/configure.dart
+6 -6
@@ -1631,9 +1631,9 @@ abstract class Zcash {
1631 List<TransactionPriority> getTransactionPriorities();
1632 List<ReceivePageOption> getZcashReceivePageOptions(Object wallet);
1633 ReceivePageOption getSelectedAddressType(Object wallet);
1634 - ZcashAddressType getZcashAddressType(ReceivePageOption option);
1634 + dynamic getZcashAddressType(ReceivePageOption option);
1635 Future<void> setAddressType(Object wallet, dynamic option);
1636 - ZcashAddressType getOptionToType(ReceivePageOption option);
1636 + dynamic getOptionToType(ReceivePageOption option);
1637 void unlockDatabase(String password);
1638 Future<int> getHeightByDate(DateTime date);
1639 }
@@ -1862,6 +1862,10 @@ Future<void> generateWalletTypes({
1862 outputContent += '\tWalletType.solana,\n';
1863 }
1864
1865 + if (hasZcash) {
1866 + outputContent += '\tWalletType.zcash,\n';
1867 + }
1868 +
1869 if (hasTron) {
1870 outputContent += '\tWalletType.tron,\n';
1871 }
@@ -1874,10 +1878,6 @@ Future<void> generateWalletTypes({
1878 outputContent += '\tWalletType.bitcoinCash,\n';
1879 }
1880
1877 - if (hasZcash) {
1878 - outputContent += '\tWalletType.zcash,\n';
1879 - }
1880 -
1881 if (hasBitcoin) {
1882 outputContent += '\tWalletType.litecoin,\n';
1883 }