v5.1.0 Release Candidate (#2332)
* v5.1.0 Release Candidate * update app versions [skip ci] * separate secrets for Monero.com [skip ci] * fix: amount getting wiped when pasting address * update Trocador Monero api key [skip ci] * move fiat api key to headers [skip ci] * latest Release candidate
Omar Hatem committed
Jun 27, 2025 at 22:20 UTC
c2cca1ff37e770e6322ce40e102a45a1b9601300
20 files changed
+95
-70
.github/workflows/automated_integration_test.yml
+5
-3
@@ -153,8 +153,8 @@ jobs:
153
echo "const shortKey = '${{ secrets.SHORT_KEY }}';" >> lib/.secrets.g.dart
154
echo "const backupSalt = '${{ secrets.BACKUP_SALT }}';" >> lib/.secrets.g.dart
155
echo "const backupKeychainSalt = '${{ secrets.BACKUP_KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
156
- echo "const changeNowApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
157
- echo "const changeNowApiKeyDesktop = '${{ secrets.CHANGE_NOW_API_KEY_DESKTOP }}';" >> lib/.secrets.g.dart
156
+ echo "const changeNowCakeWalletApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
157
+ echo "const changeNowMoneroApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
158
echo "const wyreSecretKey = '${{ secrets.WYRE_SECRET_KEY }}';" >> lib/.secrets.g.dart
159
echo "const wyreApiKey = '${{ secrets.WYRE_API_KEY }}';" >> lib/.secrets.g.dart
160
echo "const wyreAccountId = '${{ secrets.WYRE_ACCOUNT_ID }}';" >> lib/.secrets.g.dart
@@ -168,6 +168,7 @@ jobs:
168
echo "const ioniaClientId = '${{ secrets.IONIA_CLIENT_ID }}';" >> lib/.secrets.g.dart
169
echo "const twitterBearerToken = '${{ secrets.TWITTER_BEARER_TOKEN }}';" >> lib/.secrets.g.dart
170
echo "const trocadorApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
171
+ echo "const trocadorMoneroApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
172
echo "const trocadorExchangeMarkup = '${{ secrets.TROCADOR_EXCHANGE_MARKUP }}';" >> lib/.secrets.g.dart
173
echo "const anonPayReferralCode = '${{ secrets.ANON_PAY_REFERRAL_CODE }}';" >> lib/.secrets.g.dart
174
echo "const fiatApiKey = '${{ secrets.FIAT_API_KEY }}';" >> lib/.secrets.g.dart
@@ -178,7 +179,8 @@ jobs:
179
echo "const etherScanApiKey = '${{ secrets.ETHER_SCAN_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
180
echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
181
echo "const chatwootWebsiteToken = '${{ secrets.CHATWOOT_WEBSITE_TOKEN }}';" >> lib/.secrets.g.dart
181
- echo "const exolixApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
182
+ echo "const exolixCakeWalletApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
183
+ echo "const exolixMoneroApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
184
echo "const robinhoodApplicationId = '${{ secrets.ROBINHOOD_APPLICATION_ID }}';" >> lib/.secrets.g.dart
185
echo "const exchangeHelperApiKey = '${{ secrets.ROBINHOOD_CID_CLIENT_SECRET }}';" >> lib/.secrets.g.dart
186
echo "const walletConnectProjectId = '${{ secrets.WALLET_CONNECT_PROJECT_ID }}';" >> lib/.secrets.g.dart
.github/workflows/pr_test_build_android.yml
+5
-3
@@ -98,8 +98,8 @@ jobs:
98
else
99
echo "const backupKeychainSalt = '${{ secrets.BACKUP_KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
100
fi
101
- echo "const changeNowApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
102
- echo "const changeNowApiKeyDesktop = '${{ secrets.CHANGE_NOW_API_KEY_DESKTOP }}';" >> lib/.secrets.g.dart
101
+ echo "const changeNowCakeWalletApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
102
+ echo "const changeNowMoneroApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
103
echo "const wyreSecretKey = '${{ secrets.WYRE_SECRET_KEY }}';" >> lib/.secrets.g.dart
104
echo "const wyreApiKey = '${{ secrets.WYRE_API_KEY }}';" >> lib/.secrets.g.dart
105
echo "const wyreAccountId = '${{ secrets.WYRE_ACCOUNT_ID }}';" >> lib/.secrets.g.dart
@@ -113,6 +113,7 @@ jobs:
113
echo "const ioniaClientId = '${{ secrets.IONIA_CLIENT_ID }}';" >> lib/.secrets.g.dart
114
echo "const twitterBearerToken = '${{ secrets.TWITTER_BEARER_TOKEN }}';" >> lib/.secrets.g.dart
115
echo "const trocadorApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
116
+ echo "const trocadorMoneroApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
117
echo "const trocadorExchangeMarkup = '${{ secrets.TROCADOR_EXCHANGE_MARKUP }}';" >> lib/.secrets.g.dart
118
echo "const anonPayReferralCode = '${{ secrets.ANON_PAY_REFERRAL_CODE }}';" >> lib/.secrets.g.dart
119
echo "const fiatApiKey = '${{ secrets.FIAT_API_KEY }}';" >> lib/.secrets.g.dart
@@ -124,7 +125,8 @@ jobs:
125
echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
126
echo "const nowNodesApiKey = '${{ secrets.EVM_NOWNODES_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
127
echo "const chatwootWebsiteToken = '${{ secrets.CHATWOOT_WEBSITE_TOKEN }}';" >> lib/.secrets.g.dart
127
- echo "const exolixApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
128
+ echo "const exolixCakeWalletApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
129
+ echo "const exolixMoneroApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
130
echo "const robinhoodApplicationId = '${{ secrets.ROBINHOOD_APPLICATION_ID }}';" >> lib/.secrets.g.dart
131
echo "const exchangeHelperApiKey = '${{ secrets.ROBINHOOD_CID_CLIENT_SECRET }}';" >> lib/.secrets.g.dart
132
echo "const walletConnectProjectId = '${{ secrets.WALLET_CONNECT_PROJECT_ID }}';" >> lib/.secrets.g.dart
.github/workflows/pr_test_build_linux.yml
+5
-3
@@ -91,8 +91,8 @@ jobs:
91
else
92
echo "const backupKeychainSalt = '${{ secrets.BACKUP_KEY_CHAIN_SALT }}';" >> lib/.secrets.g.dart
93
fi
94
- echo "const changeNowApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
95
- echo "const changeNowApiKeyDesktop = '${{ secrets.CHANGE_NOW_API_KEY_DESKTOP }}';" >> lib/.secrets.g.dart
94
+ echo "const changeNowCakeWalletApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
95
+ echo "const changeNowMoneroApiKey = '${{ secrets.CHANGE_NOW_API_KEY }}';" >> lib/.secrets.g.dart
96
echo "const wyreSecretKey = '${{ secrets.WYRE_SECRET_KEY }}';" >> lib/.secrets.g.dart
97
echo "const wyreApiKey = '${{ secrets.WYRE_API_KEY }}';" >> lib/.secrets.g.dart
98
echo "const wyreAccountId = '${{ secrets.WYRE_ACCOUNT_ID }}';" >> lib/.secrets.g.dart
@@ -106,6 +106,7 @@ jobs:
106
echo "const ioniaClientId = '${{ secrets.IONIA_CLIENT_ID }}';" >> lib/.secrets.g.dart
107
echo "const twitterBearerToken = '${{ secrets.TWITTER_BEARER_TOKEN }}';" >> lib/.secrets.g.dart
108
echo "const trocadorApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
109
+ echo "const trocadorMoneroApiKey = '${{ secrets.TROCADOR_API_KEY }}';" >> lib/.secrets.g.dart
110
echo "const trocadorExchangeMarkup = '${{ secrets.TROCADOR_EXCHANGE_MARKUP }}';" >> lib/.secrets.g.dart
111
echo "const anonPayReferralCode = '${{ secrets.ANON_PAY_REFERRAL_CODE }}';" >> lib/.secrets.g.dart
112
echo "const fiatApiKey = '${{ secrets.FIAT_API_KEY }}';" >> lib/.secrets.g.dart
@@ -117,7 +118,8 @@ jobs:
118
echo "const moralisApiKey = '${{ secrets.MORALIS_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
119
echo "const nowNodesApiKey = '${{ secrets.EVM_NOWNODES_API_KEY }}';" >> cw_evm/lib/.secrets.g.dart
120
echo "const chatwootWebsiteToken = '${{ secrets.CHATWOOT_WEBSITE_TOKEN }}';" >> lib/.secrets.g.dart
120
- echo "const exolixApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
121
+ echo "const exolixCakeWalletApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
122
+ echo "const exolixMoneroApiKey = '${{ secrets.EXOLIX_API_KEY }}';" >> lib/.secrets.g.dart
123
echo "const robinhoodApplicationId = '${{ secrets.ROBINHOOD_APPLICATION_ID }}';" >> lib/.secrets.g.dart
124
echo "const exchangeHelperApiKey = '${{ secrets.ROBINHOOD_CID_CLIENT_SECRET }}';" >> lib/.secrets.g.dart
125
echo "const walletConnectProjectId = '${{ secrets.WALLET_CONNECT_PROJECT_ID }}';" >> lib/.secrets.g.dart
assets/text/Monerocom_Release_Notes.txt
+3
-2
@@ -1,3 +1,4 @@
1
-New themes and UI/UX improvements
2
-Ledger flow enhancements
1
+Add built-in Tor support (experimental)
2
+Ledger improvements
3
+UI/UX improvements
4
Bug fixes
\ No newline at end of file
assets/text/Release_Notes.txt
+8
-3
@@ -1,4 +1,9 @@
1
-New themes and UI/UX improvements
2
-Payjoin enhancements
3
-Ledger flow enhancements
1
+Add built-in Tor support (experimental)
2
+Add dEuro investments
3
+Solana fixes/enhancements
4
+Polygon fixes/enhancements
5
+WalletConnect improvements
6
+Ledger improvements
7
+Payjoin improvements
8
+UI/UX improvements
9
Bug fixes
\ No newline at end of file
ios/Podfile.lock
+2
-2
@@ -76,7 +76,7 @@ PODS:
76
- path_provider_foundation (0.0.1):
77
- Flutter
78
- FlutterMacOS
79
- - payjoin_flutter (0.20.0)
79
+ - payjoin_flutter (0.23.0)
80
- permission_handler_apple (9.3.0):
81
- Flutter
82
- reown_yttrium (0.0.1):
@@ -235,7 +235,7 @@ SPEC CHECKSUMS:
235
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
236
package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4
237
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
238
- payjoin_flutter: 6397d7b698cdad6453be4949ab6aca1863f6c5e5
238
+ payjoin_flutter: d9d4c8aa16bd5dfedb9b21d0edc8199e0187d96e
239
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
240
reown_yttrium: c0e87e5965fa60a3559564cc35cffbba22976089
241
SDWebImage: 73c6079366fea25fa4bb9640d5fb58f0893facd8
lib/anonpay/anonpay_api.dart
+2
-1
@@ -6,6 +6,7 @@ import 'package:cake_wallet/anonpay/anonpay_status_response.dart';
6
import 'package:cake_wallet/core/fiat_conversion_service.dart';
7
import 'package:cake_wallet/entities/fiat_currency.dart';
8
import 'package:cake_wallet/exchange/limits.dart';
9
+import 'package:cake_wallet/wallet_type_utils.dart';
10
import 'package:cw_core/utils/proxy_wrapper.dart';
11
import 'package:cw_core/wallet_base.dart';
12
import 'package:cw_core/crypto_currency.dart';
@@ -27,7 +28,7 @@ class AnonPayApi {
28
static const anonPayPath = '/anonpay';
29
static const anonPayStatus = '/anonpay/status';
30
static const coinPath = 'api/coin';
30
- static const apiKey = secrets.trocadorApiKey;
31
+ static final apiKey = isMoneroOnly ? secrets.trocadorMoneroApiKey : secrets.trocadorApiKey;
32
33
Future<AnonpayStatusResponse> paymentStatus(String id) async {
34
final response = await ProxyWrapper().get(
lib/core/fiat_conversion_service.dart
+3
-1
@@ -14,7 +14,6 @@ Future<double> _fetchPrice(String crypto, String fiat, bool torOnly) async {
14
'interval_count': '1',
15
'base': crypto.split(".").first,
16
'quote': fiat,
17
- 'key': secrets.fiatApiKey,
17
};
18
19
num price = 0.0;
@@ -26,6 +25,9 @@ Future<double> _fetchPrice(String crypto, String fiat, bool torOnly) async {
25
final response = await ProxyWrapper().get(
26
onionUri: onionUri,
27
clearnetUri: torOnly ? onionUri : clearnetUri,
28
+ headers: {
29
+ "x-api-key": secrets.fiatApiKey,
30
+ }
31
);
32
33
lib/exchange/provider/changenow_exchange_provider.dart
+3
-7
@@ -11,13 +11,12 @@ import 'package:cake_wallet/exchange/trade_request.dart';
11
import 'package:cake_wallet/exchange/trade_state.dart';
12
import 'package:cake_wallet/exchange/utils/currency_pairs_utils.dart';
13
import 'package:cake_wallet/store/settings_store.dart';
14
-import 'package:cake_wallet/utils/device_info.dart';
14
import 'package:cake_wallet/utils/distribution_info.dart';
15
import 'package:cw_core/utils/proxy_wrapper.dart';
16
import 'package:cake_wallet/wallet_type_utils.dart';
17
import 'package:cw_core/crypto_currency.dart';
18
import 'package:cw_core/utils/print_verbose.dart';
20
-import 'package:cw_core/utils/proxy_wrapper.dart';
19
+
20
class ChangeNowExchangeProvider extends ExchangeProvider {
21
ChangeNowExchangeProvider({required SettingsStore settingsStore})
22
: _settingsStore = settingsStore,
@@ -30,7 +29,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
29
];
30
31
static final apiKey =
33
- DeviceInfo.instance.isMobile ? secrets.changeNowApiKey : secrets.changeNowApiKeyDesktop;
32
+ isMoneroOnly ? secrets.changeNowMoneroApiKey : secrets.changeNowCakeWalletApiKey;
33
static const apiAuthority = 'api.changenow.io';
34
static const createTradePath = '/v2/exchange';
35
static const findTradeByIdPath = '/v2/exchange/by-id';
@@ -74,7 +73,6 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
73
};
74
final uri = Uri.https(apiAuthority, rangePath, params);
75
final response = await ProxyWrapper().get(clearnetUri: uri, headers: headers);
77
-
76
77
if (response.statusCode == 400) {
78
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
@@ -120,7 +118,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
118
119
final uri = Uri.https(apiAuthority, estimatedAmountPath, params);
120
final response = await ProxyWrapper().get(clearnetUri: uri, headers: headers);
123
-
121
+
122
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
123
final fromAmount = double.parse(responseJSON['fromAmount'].toString());
124
final toAmount = double.parse(responseJSON['toAmount'].toString());
@@ -184,7 +182,6 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
182
headers: headers,
183
body: json.encode(body),
184
);
187
-
185
186
if (response.statusCode == 400) {
187
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
@@ -228,7 +225,6 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
225
final params = <String, String>{'id': id};
226
final uri = Uri.https(apiAuthority, findTradeByIdPath, params);
227
final response = await ProxyWrapper().get(clearnetUri: uri, headers: headers);
231
-
228
229
if (response.statusCode == 404) throw TradeNotFoundException(id, provider: description);
230
lib/exchange/provider/exolix_exchange_provider.dart
+2
-1
@@ -9,6 +9,7 @@ import 'package:cake_wallet/exchange/trade_not_found_exception.dart';
9
import 'package:cake_wallet/exchange/trade_request.dart';
10
import 'package:cake_wallet/exchange/trade_state.dart';
11
import 'package:cake_wallet/exchange/utils/currency_pairs_utils.dart';
12
+import 'package:cake_wallet/wallet_type_utils.dart';
13
import 'package:cw_core/utils/proxy_wrapper.dart';
14
import 'package:cw_core/crypto_currency.dart';
15
import 'package:cw_core/utils/print_verbose.dart';
@@ -16,7 +17,7 @@ import 'package:cw_core/utils/print_verbose.dart';
17
class ExolixExchangeProvider extends ExchangeProvider {
18
ExolixExchangeProvider() : super(pairList: supportedPairs(_notSupported));
19
19
- static final apiKey = secrets.exolixApiKey;
20
+ static final apiKey = isMoneroOnly ? secrets.exolixMoneroApiKey : secrets.exolixCakeWalletApiKey;
21
static const apiBaseUrl = 'exolix.com';
22
static const transactionsPath = '/api/v2/transactions';
23
static const ratePath = '/api/v2/rate';
lib/exchange/provider/trocador_exchange_provider.dart
+2
-1
@@ -8,6 +8,7 @@ import 'package:cake_wallet/exchange/trade.dart';
8
import 'package:cake_wallet/exchange/trade_request.dart';
9
import 'package:cake_wallet/exchange/trade_state.dart';
10
import 'package:cake_wallet/exchange/utils/currency_pairs_utils.dart';
11
+import 'package:cake_wallet/wallet_type_utils.dart';
12
import 'package:cw_core/utils/proxy_wrapper.dart';
13
import 'package:cw_core/crypto_currency.dart';
14
import 'package:cw_core/utils/print_verbose.dart';
@@ -51,7 +52,7 @@ class TrocadorExchangeProvider extends ExchangeProvider {
52
CryptoCurrency.zaddr,
53
];
54
54
- static const apiKey = secrets.trocadorApiKey;
55
+ static final apiKey = isMoneroOnly ? secrets.trocadorMoneroApiKey : secrets.trocadorApiKey;
56
static const clearNetAuthority = 'api.trocador.app';
57
static const onionApiAuthority = clearNetAuthority;
58
// static const onionApiAuthority = 'trocadorfyhlu27aefre5u7zri66gudtzdyelymftvr4yjwcxhfaqsid.onion';
lib/src/screens/dashboard/pages/cake_features_page.dart
+22
-19
@@ -10,11 +10,11 @@ import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
10
import 'package:cw_core/utils/print_verbose.dart';
11
import 'package:cw_core/wallet_type.dart';
12
import 'package:flutter/material.dart';
13
+import 'package:flutter_mobx/flutter_mobx.dart';
14
import 'package:url_launcher/url_launcher.dart';
15
16
class CakeFeaturesPage extends StatelessWidget {
16
- CakeFeaturesPage(
17
- {required this.dashboardViewModel, required this.cakeFeaturesViewModel});
17
+ CakeFeaturesPage({required this.dashboardViewModel, required this.cakeFeaturesViewModel});
18
19
final DashboardViewModel dashboardViewModel;
20
final CakeFeaturesViewModel cakeFeaturesViewModel;
@@ -59,23 +59,26 @@ class CakeFeaturesPage extends StatelessWidget {
59
fit: BoxFit.cover,
60
),
61
),
62
- if (dashboardViewModel.type == WalletType.ethereum) ...[
63
- DashBoardRoundedCardWidget(
64
- isDarkTheme: dashboardViewModel.isDarkTheme,
65
- shadowBlur: dashboardViewModel.getShadowBlur(),
66
- shadowSpread: dashboardViewModel.getShadowSpread(),
67
- onTap: () =>
68
- Navigator.of(context).pushNamed(Routes.dEuroSavings),
69
- title: S.of(context).deuro_savings,
70
- subTitle: S.of(context).deuro_savings_subtitle,
71
- image: Image.asset(
72
- 'assets/images/deuro_icon.png',
73
- height: 80,
74
- width: 80,
75
- fit: BoxFit.cover,
76
- ),
77
- ),
78
- ],
62
+ Observer(builder: (_) {
63
+ if (dashboardViewModel.type == WalletType.ethereum) {
64
+ return DashBoardRoundedCardWidget(
65
+ isDarkTheme: dashboardViewModel.isDarkTheme,
66
+ shadowBlur: dashboardViewModel.getShadowBlur(),
67
+ shadowSpread: dashboardViewModel.getShadowSpread(),
68
+ onTap: () => Navigator.of(context).pushNamed(Routes.dEuroSavings),
69
+ title: S.of(context).deuro_savings,
70
+ subTitle: S.of(context).deuro_savings_subtitle,
71
+ image: Image.asset(
72
+ 'assets/images/deuro_icon.png',
73
+ height: 80,
74
+ width: 80,
75
+ fit: BoxFit.cover,
76
+ ),
77
+ );
78
+ }
79
+
80
+ return const SizedBox();
81
+ }),
82
DashBoardRoundedCardWidget(
83
isDarkTheme: dashboardViewModel.isDarkTheme,
84
shadowBlur: dashboardViewModel.getShadowBlur(),
lib/src/screens/exchange/widgets/exchange_card.dart
+2
-1
@@ -302,7 +302,8 @@ class ExchangeCardState<T extends Currency> extends State<ExchangeCard<T>> {
302
final paymentRequest = PaymentRequest.fromUri(uri);
303
addressController.text = paymentRequest.address;
304
305
- if (amountController.text.isNotEmpty) {
305
+ if (amountController.text.isNotEmpty &&
306
+ paymentRequest.amount.isNotEmpty) {
307
_showAmountPopup(context, paymentRequest);
308
return;
309
}
lib/src/widgets/address_text_field.dart
+11
-5
@@ -263,11 +263,17 @@ class AddressTextField<T extends Currency> extends StatelessWidget {
263
final address = clipboard?.text ?? '';
264
265
if (address.isNotEmpty) {
266
- try {
267
- final uri = Uri.parse(address);
268
- controller?.text = uri.path;
269
- onURIScanned?.call(uri);
270
- } catch (_) {
266
+ // if it has query parameters then it's a valid uri
267
+ // added because Uri.parse(address) can parse a normal address string and would still be valid
268
+ if (address.contains("=")) {
269
+ try {
270
+ final uri = Uri.parse(address);
271
+ controller?.text = uri.path;
272
+ onURIScanned?.call(uri);
273
+ } catch (_) {
274
+ controller?.text = address;
275
+ }
276
+ } else {
277
controller?.text = address;
278
}
279
}
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.0.0"
18
-MONERO_COM_BUILD_NUMBER=125
17
+MONERO_COM_VERSION="5.1.0"
18
+MONERO_COM_BUILD_NUMBER=127
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.0.1"
25
-CAKEWALLET_BUILD_NUMBER=264
24
+CAKEWALLET_VERSION="5.1.0"
25
+CAKEWALLET_BUILD_NUMBER=267
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.0.0"
16
-MONERO_COM_BUILD_NUMBER=125
15
+MONERO_COM_VERSION="5.1.0"
16
+MONERO_COM_BUILD_NUMBER=127
17
MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
18
19
CAKEWALLET_NAME="Cake Wallet"
20
-CAKEWALLET_VERSION="5.0.1"
21
-CAKEWALLET_BUILD_NUMBER=322
20
+CAKEWALLET_VERSION="5.1.0"
21
+CAKEWALLET_BUILD_NUMBER=324
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.0.0"
18
-CAKEWALLET_BUILD_NUMBER=56
17
+CAKEWALLET_VERSION="5.1.0"
18
+CAKEWALLET_BUILD_NUMBER=58
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="5.0.0"
20
-MONERO_COM_BUILD_NUMBER=54
19
+MONERO_COM_VERSION="5.1.0"
20
+MONERO_COM_BUILD_NUMBER=56
21
MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
22
23
CAKEWALLET_NAME="Cake Wallet"
24
-CAKEWALLET_VERSION="5.0.0"
25
-CAKEWALLET_BUILD_NUMBER=116
24
+CAKEWALLET_VERSION="5.1.0"
25
+CAKEWALLET_BUILD_NUMBER=119
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 "5.0.0"
2
+#define MyAppVersion "5.1.0"
3
#define MyAppPublisher "Cake Labs LLC"
4
#define MyAppURL "https://cakewallet.com/"
5
#define MyAppExeName "CakeWallet.exe"
tool/utils/secret_key.dart
+5
-3
@@ -12,8 +12,8 @@ class SecretKey {
12
SecretKey('shortKey', () => hex.encode(encrypt.Key.fromSecureRandom(12).bytes)),
13
SecretKey('backupSalt', () => hex.encode(encrypt.Key.fromSecureRandom(8).bytes)),
14
SecretKey('backupKeychainSalt', () => hex.encode(encrypt.Key.fromSecureRandom(12).bytes)),
15
- SecretKey('changeNowApiKey', () => ''),
16
- SecretKey('changeNowApiKeyDesktop', () => ''),
15
+ SecretKey('changeNowCakeWalletApiKey', () => ''),
16
+ SecretKey('changeNowMoneroApiKey', () => ''),
17
SecretKey('wyreSecretKey', () => ''),
18
SecretKey('wyreApiKey', () => ''),
19
SecretKey('wyreAccountId', () => ''),
@@ -26,12 +26,14 @@ class SecretKey {
26
SecretKey('onramperApiKey', () => ''),
27
SecretKey('ioniaClientId', () => ''),
28
SecretKey('trocadorApiKey', () => ''),
29
+ SecretKey('trocadorMoneroApiKey', () => ''),
30
SecretKey('trocadorExchangeMarkup', () => ''),
31
SecretKey('twitterBearerToken', () => ''),
32
SecretKey('anonPayReferralCode', () => ''),
33
SecretKey('fiatApiKey', () => ''),
34
SecretKey('chatwootWebsiteToken', () => ''),
34
- SecretKey('exolixApiKey', () => ''),
35
+ SecretKey('exolixCakeWalletApiKey', () => ''),
36
+ SecretKey('exolixMoneroApiKey', () => ''),
37
SecretKey('robinhoodApplicationId', () => ''),
38
SecretKey('exchangeHelperApiKey', () => ''),
39
SecretKey('walletConnectProjectId', () => ''),