From b72443a8c4f2fb50e34a7e5510afb52cf13f366d Mon Sep 17 00:00:00 2001 From: mkyq <53115730+mkyq@users.noreply.github.com> Date: Tue, 19 Jul 2022 15:29:28 +0100 Subject: [PATCH] Release 4.4.3 (#415) * Add ability for change password for wallets classes. * Update generateWalletPassword * Add WalletLoadingService * Add update monero password after wallet loading. * Update version for Cake Wallet to 4.4.2 (103) * Changed version for Cake Wallet to 4.4.3 (104). * Changed version for Cake Wallet android * Changed version for Monero.com ios and android. --- .../lib/electrum_transaction_history.dart | 7 ++- cw_bitcoin/lib/electrum_wallet.dart | 9 +++- cw_core/lib/wallet_base.dart | 2 + cw_haven/ios/Classes/haven_api.cpp | 10 ++++ cw_haven/lib/api/signatures.dart | 2 + cw_haven/lib/api/types.dart | 2 + cw_haven/lib/api/wallet.dart | 19 +++++++ cw_haven/lib/haven_wallet.dart | 5 ++ cw_monero/ios/Classes/monero_api.cpp | 10 ++++ cw_monero/lib/api/signatures.dart | 2 + cw_monero/lib/api/types.dart | 2 + cw_monero/lib/api/wallet.dart | 19 +++++++ cw_monero/lib/monero_wallet.dart | 5 ++ lib/core/generate_wallet_password.dart | 10 +--- lib/core/wallet_creation_service.dart | 42 ++++++++++++--- lib/core/wallet_loading_service.dart | 52 +++++++++++++++++++ lib/di.dart | 9 +++- lib/entities/load_current_wallet.dart | 7 ++- lib/entities/preferences_key.dart | 4 ++ .../wallet_list/wallet_list_view_model.dart | 15 +++--- .../wallet_restoration_from_keys_vm.dart | 2 +- .../wallet_restoration_from_seed_vm.dart | 2 +- lib/view_model/wallet_restore_view_model.dart | 2 +- scripts/android/app_env.sh | 8 +-- scripts/ios/app_env.sh | 8 +-- 25 files changed, 214 insertions(+), 41 deletions(-) create mode 100644 lib/core/wallet_loading_service.dart diff --git a/cw_bitcoin/lib/electrum_transaction_history.dart b/cw_bitcoin/lib/electrum_transaction_history.dart index d1459d7f7..94f328900 100644 --- a/cw_bitcoin/lib/electrum_transaction_history.dart +++ b/cw_bitcoin/lib/electrum_transaction_history.dart @@ -24,7 +24,7 @@ abstract class ElectrumTransactionHistoryBase } final WalletInfo walletInfo; - final String _password; + String _password; int _height; Future init() async => await _load(); @@ -51,6 +51,11 @@ abstract class ElectrumTransactionHistoryBase } } + Future changePassword(String password) async { + _password = password; + await save(); + } + Future> _read() async { final dirPath = await pathForWalletDir(name: walletInfo.name, type: walletInfo.type); diff --git a/cw_bitcoin/lib/electrum_wallet.dart b/cw_bitcoin/lib/electrum_wallet.dart index 2902a21ca..f6d3f30f8 100644 --- a/cw_bitcoin/lib/electrum_wallet.dart +++ b/cw_bitcoin/lib/electrum_wallet.dart @@ -109,7 +109,7 @@ abstract class ElectrumWalletBase extends WalletBase BitcoinWalletKeys( wif: hd.wif, privateKey: hd.privKey, publicKey: hd.pubKey); - final String _password; + String _password; List unspentCoins; List _feeRates; Map> _scripthashesUpdateSubject; @@ -392,6 +392,13 @@ abstract class ElectrumWalletBase extends WalletBase changePassword(String password) async { + _password = password; + await save(); + await transactionHistory.changePassword(password); + } + bitcoin.ECPair keyPairFor({@required int index}) => generateKeyPair(hd: hd, index: index, network: networkType); diff --git a/cw_core/lib/wallet_base.dart b/cw_core/lib/wallet_base.dart index b8c1aaa45..173ba8155 100644 --- a/cw_core/lib/wallet_base.dart +++ b/cw_core/lib/wallet_base.dart @@ -69,4 +69,6 @@ abstract class WalletBase< Future rescan({int height}); void close(); + + Future changePassword(String password); } diff --git a/cw_haven/ios/Classes/haven_api.cpp b/cw_haven/ios/Classes/haven_api.cpp index 92bca4294..c1013bf87 100644 --- a/cw_haven/ios/Classes/haven_api.cpp +++ b/cw_haven/ios/Classes/haven_api.cpp @@ -565,6 +565,16 @@ extern "C" store_lock.unlock(); } + bool set_password(char *password, Utf8Box &error) { + bool is_changed = get_current_wallet()->setPassword(std::string(password)); + + if (!is_changed) { + error = Utf8Box(strdup(get_current_wallet()->errorString().c_str())); + } + + return is_changed; + } + bool transaction_create(char *address, char *asset_type, char *payment_id, char *amount, uint8_t priority_raw, uint32_t subaddr_account, Utf8Box &error, PendingTransactionRaw &pendingTransaction) { diff --git a/cw_haven/lib/api/signatures.dart b/cw_haven/lib/api/signatures.dart index c9db9ac8d..9dd1c8dac 100644 --- a/cw_haven/lib/api/signatures.dart +++ b/cw_haven/lib/api/signatures.dart @@ -51,6 +51,8 @@ typedef set_recovering_from_seed = Void Function(Int8); typedef store_c = Void Function(Pointer); +typedef set_password = Int8 Function(Pointer password, Pointer error); + typedef set_listener = Void Function(); typedef get_syncing_height = Int64 Function(); diff --git a/cw_haven/lib/api/types.dart b/cw_haven/lib/api/types.dart index 09b6f77e0..878297501 100644 --- a/cw_haven/lib/api/types.dart +++ b/cw_haven/lib/api/types.dart @@ -51,6 +51,8 @@ typedef SetRecoveringFromSeed = void Function(int); typedef Store = void Function(Pointer); +typedef SetPassword = int Function(Pointer password, Pointer error); + typedef SetListener = void Function(); typedef GetSyncingHeight = int Function(); diff --git a/cw_haven/lib/api/wallet.dart b/cw_haven/lib/api/wallet.dart index e490743d2..3370fd3e0 100644 --- a/cw_haven/lib/api/wallet.dart +++ b/cw_haven/lib/api/wallet.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'dart:ffi'; import 'package:ffi/ffi.dart'; +import 'package:cw_haven/api/structs/ut8_box.dart'; import 'package:cw_haven/api/convert_utf8_to_string.dart'; import 'package:cw_haven/api/signatures.dart'; import 'package:cw_haven/api/types.dart'; @@ -67,6 +68,9 @@ final setRecoveringFromSeedNative = havenApi final storeNative = havenApi.lookup>('store').asFunction(); +final setPasswordNative = + havenApi.lookup>('set_password').asFunction(); + final setListenerNative = havenApi .lookup>('set_listener') .asFunction(); @@ -193,6 +197,21 @@ void storeSync() { free(pathPointer); } +void setPasswordSync(String password) { + final passwordPointer = Utf8.toUtf8(password); + final errorMessagePointer = allocate(); + final changed = setPasswordNative(passwordPointer, errorMessagePointer) != 0; + free(passwordPointer); + + if (!changed) { + final message = errorMessagePointer.ref.getValue(); + free(errorMessagePointer); + throw Exception(message); + } + + free(errorMessagePointer); +} + void closeCurrentWallet() => closeCurrentWalletNative(); String getSecretViewKey() => diff --git a/cw_haven/lib/haven_wallet.dart b/cw_haven/lib/haven_wallet.dart index 7fb8ed157..c107d2f52 100644 --- a/cw_haven/lib/haven_wallet.dart +++ b/cw_haven/lib/haven_wallet.dart @@ -240,6 +240,11 @@ abstract class HavenWalletBase extends WalletBase changePassword(String password) async { + haven_wallet.setPasswordSync(password); + } + Future getNodeHeight() async => haven_wallet.getNodeHeight(); Future isConnected() async => haven_wallet.isConnected(); diff --git a/cw_monero/ios/Classes/monero_api.cpp b/cw_monero/ios/Classes/monero_api.cpp index f81f63d16..4d3f5f56b 100644 --- a/cw_monero/ios/Classes/monero_api.cpp +++ b/cw_monero/ios/Classes/monero_api.cpp @@ -467,6 +467,16 @@ extern "C" store_lock.unlock(); } + bool set_password(char *password, Utf8Box &error) { + bool is_changed = get_current_wallet()->setPassword(std::string(password)); + + if (!is_changed) { + error = Utf8Box(strdup(get_current_wallet()->errorString().c_str())); + } + + return is_changed; + } + bool transaction_create(char *address, char *payment_id, char *amount, uint8_t priority_raw, uint32_t subaddr_account, Utf8Box &error, PendingTransactionRaw &pendingTransaction) { diff --git a/cw_monero/lib/api/signatures.dart b/cw_monero/lib/api/signatures.dart index 9781aff2e..16f983480 100644 --- a/cw_monero/lib/api/signatures.dart +++ b/cw_monero/lib/api/signatures.dart @@ -47,6 +47,8 @@ typedef set_recovering_from_seed = Void Function(Int8); typedef store_c = Void Function(Pointer); +typedef set_password = Int8 Function(Pointer password, Pointer error); + typedef set_listener = Void Function(); typedef get_syncing_height = Int64 Function(); diff --git a/cw_monero/lib/api/types.dart b/cw_monero/lib/api/types.dart index 4caa1283f..3438b89fc 100644 --- a/cw_monero/lib/api/types.dart +++ b/cw_monero/lib/api/types.dart @@ -47,6 +47,8 @@ typedef SetRecoveringFromSeed = void Function(int); typedef Store = void Function(Pointer); +typedef SetPassword = int Function(Pointer password, Pointer error); + typedef SetListener = void Function(); typedef GetSyncingHeight = int Function(); diff --git a/cw_monero/lib/api/wallet.dart b/cw_monero/lib/api/wallet.dart index 72507e912..9e84d7865 100644 --- a/cw_monero/lib/api/wallet.dart +++ b/cw_monero/lib/api/wallet.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'dart:ffi'; import 'package:ffi/ffi.dart'; +import 'package:cw_monero/api/structs/ut8_box.dart'; import 'package:cw_monero/api/convert_utf8_to_string.dart'; import 'package:cw_monero/api/signatures.dart'; import 'package:cw_monero/api/types.dart'; @@ -67,6 +68,9 @@ final setRecoveringFromSeedNative = moneroApi final storeNative = moneroApi.lookup>('store').asFunction(); +final setPasswordNative = + moneroApi.lookup>('set_password').asFunction(); + final setListenerNative = moneroApi .lookup>('set_listener') .asFunction(); @@ -197,6 +201,21 @@ void storeSync() { free(pathPointer); } +void setPasswordSync(String password) { + final passwordPointer = Utf8.toUtf8(password); + final errorMessagePointer = allocate(); + final changed = setPasswordNative(passwordPointer, errorMessagePointer) != 0; + free(passwordPointer); + + if (!changed) { + final message = errorMessagePointer.ref.getValue(); + free(errorMessagePointer); + throw Exception(message); + } + + free(errorMessagePointer); +} + void closeCurrentWallet() => closeCurrentWalletNative(); String getSecretViewKey() => diff --git a/cw_monero/lib/monero_wallet.dart b/cw_monero/lib/monero_wallet.dart index 6ac31c9f0..175bd96f5 100644 --- a/cw_monero/lib/monero_wallet.dart +++ b/cw_monero/lib/monero_wallet.dart @@ -258,6 +258,11 @@ abstract class MoneroWalletBase extends WalletBase changePassword(String password) async { + monero_wallet.setPasswordSync(password); + } + Future getNodeHeight() async => monero_wallet.getNodeHeight(); Future isConnected() async => monero_wallet.isConnected(); diff --git a/lib/core/generate_wallet_password.dart b/lib/core/generate_wallet_password.dart index 71fb68d9c..c9a9fac57 100644 --- a/lib/core/generate_wallet_password.dart +++ b/lib/core/generate_wallet_password.dart @@ -1,12 +1,6 @@ import 'package:uuid/uuid.dart'; import 'package:cw_core/key.dart'; -import 'package:cw_core/wallet_type.dart'; -String generateWalletPassword(WalletType type) { - switch (type) { - case WalletType.monero: - return Uuid().v4(); - default: - return generateKey(); - } +String generateWalletPassword() { + return generateKey(); } diff --git a/lib/core/wallet_creation_service.dart b/lib/core/wallet_creation_service.dart index 636547308..9c37657f2 100644 --- a/lib/core/wallet_creation_service.dart +++ b/lib/core/wallet_creation_service.dart @@ -1,5 +1,6 @@ import 'package:cake_wallet/di.dart'; import 'package:cw_core/wallet_info.dart'; +import 'package:cake_wallet/entities/preferences_key.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:hive/hive.dart'; @@ -31,6 +32,8 @@ class WalletCreationService { final Box walletInfoSource; WalletService _service; + static const _isNewMoneroWalletPasswordUpdated = true; + void changeWalletType({@required WalletType type}) { this.type = type; _service = getIt.get(param1: type); @@ -51,28 +54,55 @@ class WalletCreationService { Future create(WalletCredentials credentials) async { checkIfExists(credentials.name); - final password = generateWalletPassword(type); + final password = generateWalletPassword(); credentials.password = password; await keyService.saveWalletPassword( password: password, walletName: credentials.name); - return await _service.create(credentials); + final wallet = await _service.create(credentials); + + if (wallet.type == WalletType.monero) { + await sharedPreferences + .setBool( + PreferencesKey.moneroWalletUpdateV1Key(wallet.name), + _isNewMoneroWalletPasswordUpdated); + } + + return wallet; } Future restoreFromKeys(WalletCredentials credentials) async { checkIfExists(credentials.name); - final password = generateWalletPassword(type); + final password = generateWalletPassword(); credentials.password = password; await keyService.saveWalletPassword( password: password, walletName: credentials.name); - return await _service.restoreFromKeys(credentials); + final wallet = await _service.restoreFromKeys(credentials); + + if (wallet.type == WalletType.monero) { + await sharedPreferences + .setBool( + PreferencesKey.moneroWalletUpdateV1Key(wallet.name), + _isNewMoneroWalletPasswordUpdated); + } + + return wallet; } Future restoreFromSeed(WalletCredentials credentials) async { checkIfExists(credentials.name); - final password = generateWalletPassword(type); + final password = generateWalletPassword(); credentials.password = password; await keyService.saveWalletPassword( password: password, walletName: credentials.name); - return await _service.restoreFromSeed(credentials); + final wallet = await _service.restoreFromSeed(credentials); + + if (wallet.type == WalletType.monero) { + await sharedPreferences + .setBool( + PreferencesKey.moneroWalletUpdateV1Key(wallet.name), + _isNewMoneroWalletPasswordUpdated); + } + + return wallet; } } diff --git a/lib/core/wallet_loading_service.dart b/lib/core/wallet_loading_service.dart new file mode 100644 index 000000000..844e5c1ca --- /dev/null +++ b/lib/core/wallet_loading_service.dart @@ -0,0 +1,52 @@ +import 'package:cake_wallet/core/generate_wallet_password.dart'; +import 'package:cake_wallet/core/key_service.dart'; +import 'package:cake_wallet/entities/preferences_key.dart'; +import 'package:cw_core/wallet_base.dart'; +import 'package:cw_core/wallet_service.dart'; +import 'package:cw_core/wallet_type.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +class WalletLoadingService { + WalletLoadingService( + this.sharedPreferences, + this.keyService, + this.walletServiceFactory); + + final SharedPreferences sharedPreferences; + final KeyService keyService; + final WalletService Function(WalletType type) walletServiceFactory; + + Future load(WalletType type, String name) async { + if (walletServiceFactory == null) { + throw Exception('WalletLoadingService.walletServiceFactory is not set'); + } + final walletService = walletServiceFactory?.call(type); + final password = await keyService.getWalletPassword(walletName: name); + final wallet = await walletService.openWallet(name, password); + + if (type == WalletType.monero) { + await upateMoneroWalletPassword(wallet); + } + + return wallet; + } + + Future upateMoneroWalletPassword(WalletBase wallet) async { + final key = PreferencesKey.moneroWalletUpdateV1Key(wallet.name); + var isPasswordUpdated = sharedPreferences.getBool(key) ?? false; + + if (isPasswordUpdated) { + return; + } + + final password = generateWalletPassword(); + // Save new generated password with backup key for case + // if wallet will change password, but it will faild to updated in secure storage + final bakWalletName = '#__${wallet.name}_bak__#'; + await keyService.saveWalletPassword(walletName: bakWalletName, password: password); + await wallet.changePassword(password); + await keyService.saveWalletPassword(walletName: wallet.name, password: password); + isPasswordUpdated = true; + await sharedPreferences.setBool(key, isPasswordUpdated); + } +} \ No newline at end of file diff --git a/lib/di.dart b/lib/di.dart index 29fed4c56..2270f1863 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -124,6 +124,7 @@ import 'package:cake_wallet/exchange/exchange_template.dart'; import 'package:cake_wallet/.secrets.g.dart' as secrets; import 'package:cake_wallet/src/screens/dashboard/widgets/address_page.dart'; import 'package:cake_wallet/src/screens/receive/fullscreen_qr_page.dart'; +import 'package:cake_wallet/core/wallet_loading_service.dart'; final getIt = GetIt.instance; @@ -218,6 +219,12 @@ Future setup( sharedPreferences: getIt.get(), walletInfoSource: _walletInfoSource)); + getIt.registerFactory( + () => WalletLoadingService( + getIt.get(), + getIt.get(), + (WalletType type) => getIt.get(param1: type))); + getIt.registerFactoryParam((type, _) => WalletNewVM(getIt.get(), getIt.get(param1: type), _walletInfoSource, @@ -352,7 +359,7 @@ Future setup( getIt.registerFactory(() => WalletListViewModel( _walletInfoSource, getIt.get(), - getIt.get())); + getIt.get())); getIt.registerFactory(() => WalletListPage(walletListViewModel: getIt.get())); diff --git a/lib/entities/load_current_wallet.dart b/lib/entities/load_current_wallet.dart index 6751b7709..56502cc59 100644 --- a/lib/entities/load_current_wallet.dart +++ b/lib/entities/load_current_wallet.dart @@ -5,6 +5,7 @@ import 'package:cake_wallet/core/key_service.dart'; import 'package:cw_core/wallet_service.dart'; import 'package:cake_wallet/entities/preferences_key.dart'; import 'package:cw_core/wallet_type.dart'; +import 'package:cake_wallet/core/wallet_loading_service.dart'; Future loadCurrentWallet() async { final appStore = getIt.get(); @@ -15,9 +16,7 @@ Future loadCurrentWallet() async { getIt.get().getInt(PreferencesKey.currentWalletType) ?? 0; final type = deserializeFromInt(typeRaw); - final password = - await getIt.get().getWalletPassword(walletName: name); - final _service = getIt.get(param1: type); - final wallet = await _service.openWallet(name, password); + final walletLoadingService = getIt.get(); + final wallet = await walletLoadingService.load(type, name); appStore.changeCurrentWallet(wallet); } diff --git a/lib/entities/preferences_key.dart b/lib/entities/preferences_key.dart index 82e100c42..f4a0008a2 100644 --- a/lib/entities/preferences_key.dart +++ b/lib/entities/preferences_key.dart @@ -22,4 +22,8 @@ class PreferencesKey { static const bitcoinTransactionPriority = 'current_fee_priority_bitcoin'; static const shouldShowReceiveWarning = 'should_show_receive_warning'; static const shouldShowYatPopup = 'should_show_yat_popup'; + static const moneroWalletPasswordUpdateV1Base = 'monero_wallet_update_v1'; + + static String moneroWalletUpdateV1Key(String name) + => '${PreferencesKey.moneroWalletPasswordUpdateV1Base}_${name}'; } diff --git a/lib/view_model/wallet_list/wallet_list_view_model.dart b/lib/view_model/wallet_list/wallet_list_view_model.dart index 67a80db8f..1afe3347d 100644 --- a/lib/view_model/wallet_list/wallet_list_view_model.dart +++ b/lib/view_model/wallet_list/wallet_list_view_model.dart @@ -1,9 +1,9 @@ +import 'package:cake_wallet/core/wallet_loading_service.dart'; import 'package:cake_wallet/view_model/wallet_new_vm.dart'; import 'package:hive/hive.dart'; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/di.dart'; import 'package:cake_wallet/store/app_store.dart'; -import 'package:cake_wallet/core/key_service.dart'; import 'package:cw_core/wallet_service.dart'; import 'package:cake_wallet/view_model/wallet_list/wallet_list_item.dart'; import 'package:cw_core/wallet_info.dart'; @@ -16,7 +16,7 @@ class WalletListViewModel = WalletListViewModelBase with _$WalletListViewModel; abstract class WalletListViewModelBase with Store { WalletListViewModelBase(this._walletInfoSource, this._appStore, - this._keyService) { + this._walletLoadingService) { wallets = ObservableList(); _updateList(); } @@ -26,17 +26,14 @@ abstract class WalletListViewModelBase with Store { final AppStore _appStore; final Box _walletInfoSource; - final KeyService _keyService; + final WalletLoadingService _walletLoadingService; WalletType get currentWalletType => _appStore.wallet.type; @action - Future loadWallet(WalletListItem wallet) async { - final password = - await _keyService.getWalletPassword(walletName: wallet.name); - final walletService = getIt.get(param1: wallet.type); - final loadedWallet = await walletService.openWallet(wallet.name, password); - _appStore.changeCurrentWallet(loadedWallet); + Future loadWallet(WalletListItem walletItem) async { + final wallet = await _walletLoadingService.load(walletItem.type, walletItem.name); + _appStore.changeCurrentWallet(wallet); _updateList(); } diff --git a/lib/view_model/wallet_restoration_from_keys_vm.dart b/lib/view_model/wallet_restoration_from_keys_vm.dart index a51d8011c..ae51bc833 100644 --- a/lib/view_model/wallet_restoration_from_keys_vm.dart +++ b/lib/view_model/wallet_restoration_from_keys_vm.dart @@ -45,7 +45,7 @@ abstract class WalletRestorationFromKeysVMBase extends WalletCreationVM @override WalletCredentials getCredentials(dynamic options) { - final password = generateWalletPassword(type); + final password = generateWalletPassword(); switch (type) { case WalletType.monero: diff --git a/lib/view_model/wallet_restoration_from_seed_vm.dart b/lib/view_model/wallet_restoration_from_seed_vm.dart index ffd4184e0..a4fb3c34a 100644 --- a/lib/view_model/wallet_restoration_from_seed_vm.dart +++ b/lib/view_model/wallet_restoration_from_seed_vm.dart @@ -36,7 +36,7 @@ abstract class WalletRestorationFromSeedVMBase extends WalletCreationVM @override WalletCredentials getCredentials(dynamic options) { - final password = generateWalletPassword(type); + final password = generateWalletPassword(); switch (type) { case WalletType.monero: diff --git a/lib/view_model/wallet_restore_view_model.dart b/lib/view_model/wallet_restore_view_model.dart index 83dcc57ce..ce6546655 100644 --- a/lib/view_model/wallet_restore_view_model.dart +++ b/lib/view_model/wallet_restore_view_model.dart @@ -53,7 +53,7 @@ abstract class WalletRestoreViewModelBase extends WalletCreationVM with Store { @override WalletCredentials getCredentials(dynamic options) { - final password = generateWalletPassword(type); + final password = generateWalletPassword(); final height = options['height'] as int; name = options['name'] as String; diff --git a/scripts/android/app_env.sh b/scripts/android/app_env.sh index 689b866eb..9245c9c1f 100755 --- a/scripts/android/app_env.sh +++ b/scripts/android/app_env.sh @@ -14,14 +14,14 @@ TYPES=($MONERO_COM $CAKEWALLET $HAVEN) APP_ANDROID_TYPE=$1 MONERO_COM_NAME="Monero.com" -MONERO_COM_VERSION="1.0.6" -MONERO_COM_BUILD_NUMBER=13 +MONERO_COM_VERSION="1.0.7" +MONERO_COM_BUILD_NUMBER=14 MONERO_COM_BUNDLE_ID="com.monero.app" MONERO_COM_PACKAGE="com.monero.app" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="4.4.1" -CAKEWALLET_BUILD_NUMBER=104 +CAKEWALLET_VERSION="4.4.3" +CAKEWALLET_BUILD_NUMBER=105 CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet" CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet" diff --git a/scripts/ios/app_env.sh b/scripts/ios/app_env.sh index ca7e5de70..de6d2adf8 100755 --- a/scripts/ios/app_env.sh +++ b/scripts/ios/app_env.sh @@ -13,13 +13,13 @@ TYPES=($MONERO_COM $CAKEWALLET $HAVEN) APP_IOS_TYPE=$1 MONERO_COM_NAME="Monero.com" -MONERO_COM_VERSION="1.0.6" -MONERO_COM_BUILD_NUMBER=16 +MONERO_COM_VERSION="1.0.7" +MONERO_COM_BUILD_NUMBER=17 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="4.4.1" -CAKEWALLET_BUILD_NUMBER=100 +CAKEWALLET_VERSION="4.4.3" +CAKEWALLET_BUILD_NUMBER=104 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" HAVEN_NAME="Haven"