From aea855d0232f3d4cc60237b2c2bef5cbe4dc98cb Mon Sep 17 00:00:00 2001 From: Omar Hatem Date: Mon, 15 Dec 2025 04:49:51 +0200 Subject: [PATCH] Fix db getting deleted on iOS (#2736) * Fix db getting deleted on iOS * Fix db getting deleted on iOS and add a patch for users who updated * remove prints [skip ci] --- assets/text/Monerocom_Release_Notes.txt | 2 -- assets/text/Release_Notes.txt | 2 -- cw_bitcoin/lib/bitcoin_wallet.dart | 9 +++++++++ cw_bitcoin/lib/electrum_derivations.dart | 1 + cw_bitcoin/lib/litecoin_wallet.dart | 9 +++++++++ cw_core/lib/db/sqlite.dart | 2 +- cw_nano/lib/nano_wallet.dart | 7 +++++++ lib/src/screens/new_wallet/new_wallet_page.dart | 2 +- .../restore/wallet_restore_choose_derivation.dart | 1 - scripts/android/app_env.sh | 8 ++++---- scripts/ios/app_env.sh | 8 ++++---- 11 files changed, 36 insertions(+), 15 deletions(-) diff --git a/assets/text/Monerocom_Release_Notes.txt b/assets/text/Monerocom_Release_Notes.txt index 76b14c4e8..677268508 100644 --- a/assets/text/Monerocom_Release_Notes.txt +++ b/assets/text/Monerocom_Release_Notes.txt @@ -1,3 +1 @@ -Fix QR scanning -UI enhancements Bug fixes \ No newline at end of file diff --git a/assets/text/Release_Notes.txt b/assets/text/Release_Notes.txt index 76b14c4e8..677268508 100644 --- a/assets/text/Release_Notes.txt +++ b/assets/text/Release_Notes.txt @@ -1,3 +1 @@ -Fix QR scanning -UI enhancements Bug fixes \ No newline at end of file diff --git a/cw_bitcoin/lib/bitcoin_wallet.dart b/cw_bitcoin/lib/bitcoin_wallet.dart index 0a2b54913..b1feeb7a9 100644 --- a/cw_bitcoin/lib/bitcoin_wallet.dart +++ b/cw_bitcoin/lib/bitcoin_wallet.dart @@ -224,6 +224,15 @@ abstract class BitcoinWalletBase extends ElectrumWallet with Store { snp?.derivationPath ?? electrum_path; derivationInfo.derivationType ??= snp?.derivationType ?? DerivationType.electrum; + if (derivationInfo.derivationType == DerivationType.unknown) { + if (snp?.derivationPath == electrum_path || snp?.derivationType == DerivationType.electrum) { + derivationInfo.derivationPath = electrum_path; + derivationInfo.derivationType = DerivationType.electrum; + } else { + derivationInfo.derivationPath = segwit_path; + derivationInfo.derivationType = DerivationType.bip39; + } + } await derivationInfo.save(); Uint8List? seedBytes = null; diff --git a/cw_bitcoin/lib/electrum_derivations.dart b/cw_bitcoin/lib/electrum_derivations.dart index 26dc1f82d..b17ed9cf1 100644 --- a/cw_bitcoin/lib/electrum_derivations.dart +++ b/cw_bitcoin/lib/electrum_derivations.dart @@ -115,3 +115,4 @@ Map> electrum_derivations = { }; String electrum_path = electrum_derivations[DerivationType.electrum]!.first.derivationPath!; +String segwit_path = "m/84'/0'/0'"; diff --git a/cw_bitcoin/lib/litecoin_wallet.dart b/cw_bitcoin/lib/litecoin_wallet.dart index bdbbe3f67..d80dedf92 100644 --- a/cw_bitcoin/lib/litecoin_wallet.dart +++ b/cw_bitcoin/lib/litecoin_wallet.dart @@ -283,6 +283,15 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store { // set the default if not present: derivationInfo.derivationPath ??= snp?.derivationPath ?? electrum_path; derivationInfo.derivationType ??= snp?.derivationType ?? DerivationType.electrum; + if (derivationInfo.derivationType == DerivationType.unknown) { + if (snp?.derivationPath == electrum_path || snp?.derivationType == DerivationType.electrum) { + derivationInfo.derivationPath = electrum_path; + derivationInfo.derivationType = DerivationType.electrum; + } else { + derivationInfo.derivationPath = segwit_path; + derivationInfo.derivationType = DerivationType.bip39; + } + } Uint8List? seedBytes = null; final mnemonic = keysData.mnemonic; diff --git a/cw_core/lib/db/sqlite.dart b/cw_core/lib/db/sqlite.dart index 4ac263c81..f4e235026 100644 --- a/cw_core/lib/db/sqlite.dart +++ b/cw_core/lib/db/sqlite.dart @@ -15,7 +15,7 @@ Future initDb({String? pathOverride}) async { final dbFileOld = File("${await getDatabasesPath()}/cake.db"); final dbFile = File("${(await getAppDir()).path}/cake.db"); - if (dbFileOld.existsSync()) { + if (Platform.isAndroid && dbFileOld.existsSync() && dbFileOld.path != dbFile.path) { final copied = dbFileOld.copySync(dbFile.path); if (copied.existsSync()) { dbFileOld.deleteSync(); diff --git a/cw_nano/lib/nano_wallet.dart b/cw_nano/lib/nano_wallet.dart index 2cf7fd30d..44b4a3c8a 100644 --- a/cw_nano/lib/nano_wallet.dart +++ b/cw_nano/lib/nano_wallet.dart @@ -436,6 +436,13 @@ abstract class NanoWalletBase final derivationInfo = await walletInfo.getDerivationInfo(); derivationInfo.derivationType ??= derivationType; + if (derivationInfo.derivationType == DerivationType.unknown) { + if (data?['derivationType'] != null) { + derivationInfo.derivationType = derivationType; + } else { + derivationInfo.derivationType = DerivationType.bip39; + } + } derivationInfo.save(); return NanoWallet( diff --git a/lib/src/screens/new_wallet/new_wallet_page.dart b/lib/src/screens/new_wallet/new_wallet_page.dart index 2b489766c..7fed51a7d 100644 --- a/lib/src/screens/new_wallet/new_wallet_page.dart +++ b/lib/src/screens/new_wallet/new_wallet_page.dart @@ -360,7 +360,7 @@ class _WalletNameFormState extends State { alertContent: S.of(context).wallet_name_exists, buttonText: S.of(context).ok, buttonAction: () { - if (Navigator.of(context).canPop()) { + if (mounted && Navigator.of(context).canPop()) { Navigator.of(context).pop(); } }); diff --git a/lib/src/screens/restore/wallet_restore_choose_derivation.dart b/lib/src/screens/restore/wallet_restore_choose_derivation.dart index 9da97f603..fb869bd0b 100644 --- a/lib/src/screens/restore/wallet_restore_choose_derivation.dart +++ b/lib/src/screens/restore/wallet_restore_choose_derivation.dart @@ -17,7 +17,6 @@ class WalletRestoreChooseDerivationPage extends BasePage { ); final WalletRestoreChooseDerivationViewModel walletRestoreChooseDerivationViewModel; - DerivationType derivationType = DerivationType.unknown; @override Widget body(BuildContext context) { diff --git a/scripts/android/app_env.sh b/scripts/android/app_env.sh index 218bd96fd..b3bfed229 100644 --- a/scripts/android/app_env.sh +++ b/scripts/android/app_env.sh @@ -14,15 +14,15 @@ TYPES=($MONERO_COM $CAKEWALLET) APP_ANDROID_TYPE=$1 MONERO_COM_NAME="Monero.com" -MONERO_COM_VERSION="5.6.3" -MONERO_COM_BUILD_NUMBER=4148 +MONERO_COM_VERSION="5.6.4" +MONERO_COM_BUILD_NUMBER=4149 MONERO_COM_BUNDLE_ID="com.monero.app" MONERO_COM_PACKAGE="com.monero.app" MONERO_COM_SCHEME="monero.com" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="5.6.3" -CAKEWALLET_BUILD_NUMBER=4294 +CAKEWALLET_VERSION="5.6.4" +CAKEWALLET_BUILD_NUMBER=4295 CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet" CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet" CAKEWALLET_SCHEME="cakewallet" diff --git a/scripts/ios/app_env.sh b/scripts/ios/app_env.sh index d572c8935..e0cccc372 100644 --- a/scripts/ios/app_env.sh +++ b/scripts/ios/app_env.sh @@ -12,13 +12,13 @@ TYPES=($MONERO_COM $CAKEWALLET) APP_IOS_TYPE=$1 MONERO_COM_NAME="Monero.com" -MONERO_COM_VERSION="5.6.3" -MONERO_COM_BUILD_NUMBER=151 +MONERO_COM_VERSION="5.6.4" +MONERO_COM_BUILD_NUMBER=152 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="5.6.3" -CAKEWALLET_BUILD_NUMBER=357 +CAKEWALLET_VERSION="5.6.4" +CAKEWALLET_BUILD_NUMBER=359 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"