4.22.1 RC (#1932)

* 4.22.1 RC * minor cleanup [skip ci] * Fix frozen balance not displaying at startup issue * Monero balance tx display issue (#1934) * minor cleanup [skip ci] * Fix frozen balance not displaying at startup issue * fix transactions not updating (stupid mobx reactions :3) * [skip ci]

Omar Hatem committed Jan 5, 2025 at 03:11 UTC d1c45a5326317b0b78675d34f4d827a88a5bba5a
10 files changed +32 -54
assets/text/Monerocom_Release_Notes.txt
+2 -3
@@ -1,3 +1,2 @@
1 -Support Monero Ledger
2 -Bug fixes
3 -New designs and better user experience
\ No newline at end of file
1 +UI enhancements
2 +Bug fixes
\ No newline at end of file
assets/text/Release_Notes.txt
+4 -5
@@ -1,5 +1,4 @@
1 -Support Monero Ledger
2 -Prepare for Haven removal
3 -Improve Ethereum and Polygon sending process
4 -Bug fixes
5 -New designs and better user experience
\ No newline at end of file
1 +Bitcoin and Litecoin enhancements
2 +Solana and Nano fixes/improvements
3 +UI enhancements
4 +Bug fixes
\ No newline at end of file
cw_monero/lib/monero_wallet.dart
+7 -27
@@ -7,7 +7,6 @@ import 'package:cw_core/pathForWallet.dart';
7 import 'package:cw_core/transaction_priority.dart';
8 import 'package:cw_core/account.dart';
9 import 'package:cw_core/crypto_currency.dart';
10 -import 'package:cw_core/monero_amount_format.dart';
10 import 'package:cw_core/monero_balance.dart';
11 import 'package:cw_core/monero_transaction_priority.dart';
12 import 'package:cw_core/monero_wallet_keys.dart';
@@ -28,7 +27,6 @@ import 'package:cw_monero/api/transaction_history.dart' as transaction_history;
27 import 'package:cw_monero/api/wallet.dart' as monero_wallet;
28 import 'package:cw_monero/api/wallet_manager.dart';
29 import 'package:cw_monero/exceptions/monero_transaction_creation_exception.dart';
31 -import 'package:cw_monero/exceptions/monero_transaction_no_inputs_exception.dart';
30 import 'package:cw_monero/ledger.dart';
31 import 'package:cw_monero/monero_transaction_creation_credentials.dart';
32 import 'package:cw_monero/monero_transaction_history.dart';
@@ -58,8 +56,9 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance,
56 required String password})
57 : balance = ObservableMap<CryptoCurrency, MoneroBalance>.of({
58 CryptoCurrency.xmr: MoneroBalance(
61 - fullBalance: monero_wallet.getFullBalance(accountIndex: 0),
62 - unlockedBalance: monero_wallet.getFullBalance(accountIndex: 0))
59 + fullBalance: monero_wallet.getFullBalance(accountIndex: 0),
60 + unlockedBalance: monero_wallet.getUnlockedBalance(accountIndex: 0),
61 + )
62 }),
63 _isTransactionUpdating = false,
64 _hasSyncAfterStartup = false,
@@ -281,7 +280,6 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance,
280 final hasMultiDestination = outputs.length > 1;
281 final unlockedBalance = monero_wallet.getUnlockedBalance(
282 accountIndex: walletAddresses.account!.id);
284 - var allInputsAmount = 0;
283
284 PendingTransactionDescription pendingTransactionDescription;
285
@@ -295,11 +293,9 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance,
293
294 for (final utx in unspentCoins) {
295 if (utx.isSending) {
298 - allInputsAmount += utx.value;
296 inputs.add(utx.keyImage!);
297 }
298 }
302 - final spendAllCoins = inputs.length == unspentCoins.length;
299
300 if (hasMultiDestination) {
301 if (outputs.any(
@@ -311,8 +307,6 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance,
307 final int totalAmount = outputs.fold(
308 0, (acc, value) => acc + (value.formattedCryptoAmount ?? 0));
309
314 - final estimatedFee =
315 - calculateEstimatedFee(_credentials.priority, totalAmount);
310 if (unlockedBalance < totalAmount) {
311 throw MoneroTransactionCreationException(
312 'You do not have enough XMR to send this amount.');
@@ -342,8 +336,6 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance,
336 output.isParsedAddress ? output.extractedAddress : output.address;
337 final amount =
338 output.sendAll ? null : output.cryptoAmount!.replaceAll(',', '.');
345 - final formattedAmount =
346 - output.sendAll ? null : output.formattedCryptoAmount;
339
340 // if ((formattedAmount != null && unlockedBalance < formattedAmount) ||
341 // (formattedAmount == null && unlockedBalance <= 0)) {
@@ -353,8 +345,6 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance,
345 // 'You do not have enough unlocked balance. Unlocked: $formattedBalance. Transaction amount: ${output.cryptoAmount}.');
346 // }
347
356 - final estimatedFee =
357 - calculateEstimatedFee(_credentials.priority, formattedAmount);
348 if (inputs.isEmpty) MoneroTransactionCreationException(
349 'No inputs selected');
350 pendingTransactionDescription =
@@ -750,26 +740,16 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance,
740 Future<void> _askForUpdateTransactionHistory() async =>
741 await updateTransactions();
742
753 - int _getFullBalance() =>
754 - monero_wallet.getFullBalance(accountIndex: walletAddresses.account!.id);
755 -
743 int _getUnlockedBalance() => monero_wallet.getUnlockedBalance(
744 accountIndex: walletAddresses.account!.id);
745
746 int _getFrozenBalance() {
747 var frozenBalance = 0;
748
762 - unspentCoinsInfo.values.forEach((info) {
763 - unspentCoins.forEach((element) {
764 - if (element.hash == info.hash &&
765 - element.vout == info.vout &&
766 - info.isFrozen &&
767 - element.value == info.value && info.walletId == id &&
768 - info.accountIndex == walletAddresses.account!.id) {
769 - if (element.isFrozen && !element.isSending) frozenBalance+= element.value;
770 - }
771 - });
772 - });
749 + for (var coin in unspentCoinsInfo.values.where((element) =>
750 + element.walletId == id && element.accountIndex == walletAddresses.account!.id)) {
751 + if (coin.isFrozen && !coin.isSending) frozenBalance += coin.value;
752 + }
753
754 return frozenBalance;
755 }
ios/Podfile.lock
+1 -1
@@ -272,7 +272,7 @@ SPEC CHECKSUMS:
272 uni_links: d97da20c7701486ba192624d99bffaaffcfc298a
273 universal_ble: cf52a7b3fd2e7c14d6d7262e9fdadb72ab6b88a6
274 url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
275 - wakelock_plus: 78ec7c5b202cab7761af8e2b2b3d0671be6c4ae1
275 + wakelock_plus: 373cfe59b235a6dd5837d0fb88791d2f13a90d56
276 workmanager: 0afdcf5628bbde6924c21af7836fed07b42e30e6
277
278 PODFILE CHECKSUM: e448f662d4c41f0c0b1ccbb78afd57dbf895a597
lib/view_model/dashboard/dashboard_view_model.dart
+3 -3
@@ -641,7 +641,7 @@ abstract class DashboardViewModelBase with Store {
641
642 transactions.clear();
643
644 - transactions = ObservableList.of(
644 + transactions.addAll(
645 wallet.transactionHistory.transactions.values.map(
646 (transaction) => TransactionListItem(
647 transaction: transaction,
@@ -703,7 +703,7 @@ abstract class DashboardViewModelBase with Store {
703 monero!.getTransactionInfoAccountId(tx) == monero!.getCurrentAccount(wallet).id)
704 .toList();
705
706 - transactions = ObservableList.of(
706 + transactions.addAll(
707 _accountTransactions.map(
708 (transaction) => TransactionListItem(
709 transaction: transaction,
@@ -723,7 +723,7 @@ abstract class DashboardViewModelBase with Store {
723 wow.wownero!.getCurrentAccount(wallet).id)
724 .toList();
725
726 - transactions = ObservableList.of(
726 + transactions.addAll(
727 _accountTransactions.map(
728 (transaction) => TransactionListItem(
729 transaction: transaction,
scripts/android/app_env.sh
+4 -4
@@ -15,15 +15,15 @@ TYPES=($MONERO_COM $CAKEWALLET $HAVEN)
15 APP_ANDROID_TYPE=$1
16
17 MONERO_COM_NAME="Monero.com"
18 -MONERO_COM_VERSION="1.19.0"
19 -MONERO_COM_BUILD_NUMBER=109
18 +MONERO_COM_VERSION="1.19.1"
19 +MONERO_COM_BUILD_NUMBER=110
20 MONERO_COM_BUNDLE_ID="com.monero.app"
21 MONERO_COM_PACKAGE="com.monero.app"
22 MONERO_COM_SCHEME="monero.com"
23
24 CAKEWALLET_NAME="Cake Wallet"
25 -CAKEWALLET_VERSION="4.22.0"
26 -CAKEWALLET_BUILD_NUMBER=240
25 +CAKEWALLET_VERSION="4.22.1"
26 +CAKEWALLET_BUILD_NUMBER=241
27 CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet"
28 CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet"
29 CAKEWALLET_SCHEME="cakewallet"
scripts/ios/app_env.sh
+4 -4
@@ -13,13 +13,13 @@ TYPES=($MONERO_COM $CAKEWALLET $HAVEN)
13 APP_IOS_TYPE=$1
14
15 MONERO_COM_NAME="Monero.com"
16 -MONERO_COM_VERSION="1.19.0"
17 -MONERO_COM_BUILD_NUMBER=106
16 +MONERO_COM_VERSION="1.19.1"
17 +MONERO_COM_BUILD_NUMBER=107
18 MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
19
20 CAKEWALLET_NAME="Cake Wallet"
21 -CAKEWALLET_VERSION="4.22.0"
22 -CAKEWALLET_BUILD_NUMBER=287
21 +CAKEWALLET_VERSION="4.22.1"
22 +CAKEWALLET_BUILD_NUMBER=288
23 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"
24
25 HAVEN_NAME="Haven"
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="1.12.0"
18 -CAKEWALLET_BUILD_NUMBER=41
17 +CAKEWALLET_VERSION="1.12.1"
18 +CAKEWALLET_BUILD_NUMBER=42
19
20 if ! [[ " ${TYPES[*]} " =~ " ${APP_LINUX_TYPE} " ]]; then
21 echo "Wrong app type."
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="1.9.0"
20 -MONERO_COM_BUILD_NUMBER=39
19 +MONERO_COM_VERSION="1.9.1"
20 +MONERO_COM_BUILD_NUMBER=40
21 MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
22
23 CAKEWALLET_NAME="Cake Wallet"
24 -CAKEWALLET_VERSION="1.15.0"
25 -CAKEWALLET_BUILD_NUMBER=99
24 +CAKEWALLET_VERSION="1.15.1"
25 +CAKEWALLET_BUILD_NUMBER=100
26 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"
27
28 if ! [[ " ${TYPES[*]} " =~ " ${APP_MACOS_TYPE} " ]]; then
scripts/windows/build_exe_installer.iss
+1 -1
@@ -1,5 +1,5 @@
1 #define MyAppName "Cake Wallet"
2 -#define MyAppVersion "0.3.0"
2 +#define MyAppVersion "0.3.1"
3 #define MyAppPublisher "Cake Labs LLC"
4 #define MyAppURL "https://cakewallet.com/"
5 #define MyAppExeName "CakeWallet.exe"