diff --git a/assets/text/Monerocom_Release_Notes.txt b/assets/text/Monerocom_Release_Notes.txt index 5eeeb2d22..011435baa 100644 --- a/assets/text/Monerocom_Release_Notes.txt +++ b/assets/text/Monerocom_Release_Notes.txt @@ -1,4 +1,3 @@ -Added passphrase support -Added decentralized cross-chain exchange, Chainflip +Ledger fixes 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 191b24ce3..ca69e0b98 100644 --- a/assets/text/Release_Notes.txt +++ b/assets/text/Release_Notes.txt @@ -1,5 +1,5 @@ -Added Zano wallet support -Added Monero/Wownero passphrase support -Added decentralized cross-chain exchange, Chainflip +Zano enhancements +Ethereum enhancements +Ledger fixes UI enhancements Bug fixes \ No newline at end of file diff --git a/cw_bitcoin/lib/electrum_wallet.dart b/cw_bitcoin/lib/electrum_wallet.dart index e7b8be156..64595b253 100644 --- a/cw_bitcoin/lib/electrum_wallet.dart +++ b/cw_bitcoin/lib/electrum_wallet.dart @@ -915,6 +915,10 @@ abstract class ElectrumWalletBase } } + // if the amount left for change is less than dust, but not less than 0 + // then add it to the fees + fee += amountLeftForChange; + return EstimatedTxResult( utxos: utxoDetails.utxos, inputPrivKeyInfos: utxoDetails.inputPrivKeyInfos, @@ -1366,7 +1370,7 @@ abstract class ElectrumWalletBase List updatedUnspentCoins = []; final previousUnspentCoins = List.from(unspentCoins.where((utxo) => - utxo.bitcoinAddressRecord.type != SegwitAddresType.mweb && + utxo.bitcoinAddressRecord.type != SegwitAddresType.mweb && utxo.bitcoinAddressRecord is! BitcoinSilentPaymentAddressRecord)); if (hasSilentPaymentsScanning) { @@ -1424,7 +1428,6 @@ abstract class ElectrumWalletBase required List updatedUnspentCoins, required List?> results, }) { - if (failedCount == results.length) { printV("All UTXOs failed to fetch, falling back to previous UTXOs"); return previousUnspentCoins; diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index 29dc03f9e..00d49c288 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -11,7 +11,8 @@ class CryptoCurrency extends EnumerableItem with Serializable implemen this.iconPath, this.tag, this.enabled = false, - }) + this.isPotentialScam = false, + }) : super(title: title, raw: raw); final String name; @@ -20,6 +21,7 @@ class CryptoCurrency extends EnumerableItem with Serializable implemen final String? iconPath; final int decimals; final bool enabled; + final bool isPotentialScam; set enabled(bool value) => this.enabled = value; diff --git a/cw_evm/lib/evm_chain_exceptions.dart b/cw_evm/lib/evm_chain_exceptions.dart index d0f300270..c7509a17f 100644 --- a/cw_evm/lib/evm_chain_exceptions.dart +++ b/cw_evm/lib/evm_chain_exceptions.dart @@ -16,8 +16,8 @@ class EVMChainTransactionCreationException implements Exception { class EVMChainTransactionFeesException implements Exception { final String exceptionMessage; - EVMChainTransactionFeesException() - : exceptionMessage = 'Current balance is less than the estimated fees for this transaction.'; + EVMChainTransactionFeesException(String currency) + : exceptionMessage = 'Transaction failed due to insufficient $currency balance to cover the fees.'; @override String toString() => exceptionMessage; diff --git a/cw_evm/lib/evm_chain_wallet.dart b/cw_evm/lib/evm_chain_wallet.dart index 646abd7ae..9691993ad 100644 --- a/cw_evm/lib/evm_chain_wallet.dart +++ b/cw_evm/lib/evm_chain_wallet.dart @@ -417,7 +417,7 @@ abstract class EVMChainWalletBase // check the fees on the base currency (Eth/Polygon) if (estimatedFeesForTransaction > balance[currency]!.balance) { - throw EVMChainTransactionFeesException(); + throw EVMChainTransactionFeesException(currency.title); } if (currencyBalance.balance < totalAmount) { diff --git a/lib/buy/dfx/dfx_buy_provider.dart b/lib/buy/dfx/dfx_buy_provider.dart index c11a0d771..eba48632b 100644 --- a/lib/buy/dfx/dfx_buy_provider.dart +++ b/lib/buy/dfx/dfx_buy_provider.dart @@ -310,7 +310,7 @@ class DFXBuyProvider extends BuyProvider { final accessToken = await auth(cryptoCurrencyAddress); - final uri = Uri.https('services.dfx.swiss', actionType, { + final uri = Uri.https('app.dfx.swiss', actionType, { 'session': accessToken, 'lang': 'en', 'asset-out': isBuyAction ? quote.cryptoCurrency.toString() : quote.fiatCurrency.toString(), diff --git a/lib/buy/robinhood/robinhood_buy_provider.dart b/lib/buy/robinhood/robinhood_buy_provider.dart index 937af0315..b44fab311 100644 --- a/lib/buy/robinhood/robinhood_buy_provider.dart +++ b/lib/buy/robinhood/robinhood_buy_provider.dart @@ -59,7 +59,7 @@ class RobinhoodBuyProvider extends BuyProvider { case WalletType.bitcoinCash: return await wallet.signMessage(message, address: wallet.walletAddresses.address); default: - throw Exception("WalletType is not available for Robinhood ${wallet.type}"); + throw Exception("Wallet Type ${wallet.type.name} is not available for Robinhood"); } } diff --git a/lib/core/address_validator.dart b/lib/core/address_validator.dart index 65c9faff9..888be1768 100644 --- a/lib/core/address_validator.dart +++ b/lib/core/address_validator.dart @@ -281,6 +281,9 @@ class AddressValidator extends TextValidator { } } + static String get silentPaymentAddressPattern => SilentPaymentAddress.regex.pattern; + static String get mWebAddressPattern => MwebAddress.regex.pattern; + static String? getAddressFromStringPattern(CryptoCurrency type) { String? pattern = null; diff --git a/lib/di.dart b/lib/di.dart index 9f2256304..3e10bd7a1 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -1256,7 +1256,7 @@ Future setup({ getIt.registerFactoryParam( (Order order, _) => OrderDetailsPage(getIt.get(param1: order))); - getIt.registerFactory(() => SupportViewModel()); + getIt.registerFactory(() => SupportViewModel(getIt.get())); getIt.registerFactory(() => SupportPage(getIt.get())); @@ -1418,4 +1418,4 @@ Future setup({ getIt.registerFactory(() => SeedVerificationPage(getIt.get())); _isSetupFinished = true; -} \ No newline at end of file +} diff --git a/lib/entities/bip_353_record.dart b/lib/entities/bip_353_record.dart index 80c0099a8..8685185da 100644 --- a/lib/entities/bip_353_record.dart +++ b/lib/entities/bip_353_record.dart @@ -1,5 +1,6 @@ import 'package:basic_utils/basic_utils.dart'; import 'package:cake_wallet/generated/i18n.dart'; +import 'package:cake_wallet/src/widgets/alert_with_picker_option.dart'; import 'package:cake_wallet/src/widgets/picker.dart'; import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:cw_core/crypto_currency.dart'; @@ -100,44 +101,41 @@ class Bip353Record { Map addressMap, ) async { final entriesList = addressMap.entries.toList(); - final displayItems = entriesList.map((e) { - final extendedKeyName = keyDisplayMap[e.key] ?? e.key; - final truncatedValue = _truncate(e.value, front: 6, back: 6); - return '$extendedKeyName : $truncatedValue'; + final List> displayItems = entriesList.map((entry) { + final originalKey = entry.key; + final originalValue = entry.value; + + final extendedKeyName = keyDisplayMap[originalKey] ?? originalKey; + final truncatedValue = _truncate(originalValue, front: 6, back: 6); + + return { + 'displayKey': extendedKeyName, + 'displayValue': truncatedValue, + 'originalKey': originalKey, + 'originalValue': originalValue, + }; }).toList(); - String? selectedDisplayItem; + String? selectedOriginalValue; if (context.mounted) { await showPopUp( context: context, builder: (dialogContext) { - return Picker( - selectedAtIndex: 0, - title: - '$bip353Name \n was successfully resolved to the following addresses, please choose one:', - items: displayItems, - onItemSelected: (String displayItem) { - selectedDisplayItem = displayItem; + return AlertWithPickerOption( + alertTitle: S.of(context).multiple_addresses_detected + '\n$bip353Name', + alertTitleTextSize: 14, + alertSubtitle: S.of(context).please_choose_one + ':', + options: displayItems, + onOptionSelected: (Map chosenItem) { + selectedOriginalValue = chosenItem['originalValue']; }, + alertBarrierDismissible: true, ); }, ); } - - if (selectedDisplayItem == null) { - if (displayItems.isEmpty) { - return null; - } - selectedDisplayItem = displayItems[0]; - } - - final index = displayItems.indexOf(selectedDisplayItem!); - if (index < 0) { - return null; - } - - return entriesList[index].value; + return selectedOriginalValue; } static String _truncate(String value, {int front = 6, int back = 6}) { diff --git a/lib/entities/parse_address_from_domain.dart b/lib/entities/parse_address_from_domain.dart index f5f96a8cd..3fbbe0709 100644 --- a/lib/entities/parse_address_from_domain.dart +++ b/lib/entities/parse_address_from_domain.dart @@ -32,33 +32,56 @@ class AddressResolver { static const unstoppableDomains = [ "888", + "academy", + "agency", "altimist", "anime", "austin", "bald", + "bay", "benji", "bet", "binanceus", "bitcoin", "bitget", + "bitscrunch", "blockchain", + "boomer", + "boston", "ca", + "caw", + "cc", + "chat", "chomp", "clay", + "club", "co", "com", + "company", "crypto", "dao", + "design", "dfz", "digital", + "doga", + "donut", "dream", + "email", + "emir", "eth", "ethermail", + "family", "farms", + "finance", "fun", + "fyi", + "games", + "global", "go", "group", + "guru", "hi", + "hockey", "host", "info", "io", @@ -68,43 +91,78 @@ class AddressResolver { "lfg", "life", "live", + "llc", + "ltc", "ltd", "manga", + "me", + "media", "metropolis", + "miami", + "miku", + "money", "moon", "mumu", "net", + "network", + "news", "nft", + "npc", + "onchain", "online", "org", + "podcast", "pog", "polygon", "press", + "privacy", "pro", "propykeys", "pudgy", "pw", + "quantum", + "rad", "raiin", + "retardio", + "rip", + "rocks", "secret", + "services", "site", "smobler", + "social", + "solutions", "space", "stepn", "store", + "studio", + "systems", "tball", + "tea", + "team", "tech", + "technology", + "today", + "tribe", + "u", "ubu", "uno", "unstoppable", + "vip", "wallet", "website", + "wif", "wifi", "witg", + "work", + "world", "wrkx", + "wtf", "x", "xmr", "xyz", "zil", + "zone" ]; static String? extractAddressByType({required String raw, required CryptoCurrency type}) { diff --git a/lib/ethereum/cw_ethereum.dart b/lib/ethereum/cw_ethereum.dart index 413cafc30..dc91e4fc2 100644 --- a/lib/ethereum/cw_ethereum.dart +++ b/lib/ethereum/cw_ethereum.dart @@ -209,4 +209,9 @@ class CWEthereum extends Ethereum { throw err; } } + + @override + List getDefaultTokenContractAddresses() { + return DefaultEthereumErc20Tokens().initialErc20Tokens.map((e) => e.contractAddress).toList(); + } } diff --git a/lib/polygon/cw_polygon.dart b/lib/polygon/cw_polygon.dart index 7c447406d..b8f78e9e2 100644 --- a/lib/polygon/cw_polygon.dart +++ b/lib/polygon/cw_polygon.dart @@ -208,4 +208,9 @@ class CWPolygon extends Polygon { throw err; } } + + @override + List getDefaultTokenContractAddresses() { + return DefaultPolygonErc20Tokens().initialPolygonErc20Tokens.map((e) => e.contractAddress).toList(); + } } diff --git a/lib/reactions/fiat_rate_update.dart b/lib/reactions/fiat_rate_update.dart index 62710c515..de3dea4a2 100644 --- a/lib/reactions/fiat_rate_update.dart +++ b/lib/reactions/fiat_rate_update.dart @@ -60,9 +60,12 @@ Future startFiatRateUpdate( tron!.getTronTokenCurrencies(appStore.wallet!).where((element) => element.enabled); } - if (currencies != null) { for (final currency in currencies) { + // skip potential scams: + if (currency.isPotentialScam) { + continue; + } () async { fiatConversionStore.prices[currency] = await FiatConversionService.fetchPrice( crypto: currency, diff --git a/lib/solana/cw_solana.dart b/lib/solana/cw_solana.dart index 7894f77ed..d8257396f 100644 --- a/lib/solana/cw_solana.dart +++ b/lib/solana/cw_solana.dart @@ -154,4 +154,9 @@ class CWSolana extends Solana { double? getEstimateFees(WalletBase wallet) { return (wallet as SolanaWallet).estimatedFee; } + + @override + List getDefaultTokenContractAddresses() { + return DefaultSPLTokens().initialSPLTokens.map((e) => e.mintAddress).toList(); + } } diff --git a/lib/src/screens/dashboard/edit_token_page.dart b/lib/src/screens/dashboard/edit_token_page.dart index bb0d4a3e2..11a584b39 100644 --- a/lib/src/screens/dashboard/edit_token_page.dart +++ b/lib/src/screens/dashboard/edit_token_page.dart @@ -211,6 +211,21 @@ class _EditTokenPageBodyState extends State { .checkIfERC20TokenContractAddressIsAPotentialScamAddress( _contractAddressController.text, ); + + final isWhitelisted = await widget.homeSettingsViewModel + .checkIfTokenIsWhitelisted(_contractAddressController.text); + + bool isPotentialScam = hasPotentialError; + final tokenSymbol = _tokenSymbolController.text.toUpperCase(); + + // check if the token symbol is the same as any of the base currencies symbols (ETH, SOL, POL, TRX, etc): + // if it is, then it's probably a scam unless it's in the whitelist + final baseCurrencySymbols = + CryptoCurrency.all.map((e) => e.title.toUpperCase()).toList(); + if (baseCurrencySymbols.contains(tokenSymbol) && !isWhitelisted) { + isPotentialScam = true; + } + final actionCall = () async { try { await widget.homeSettingsViewModel.addToken( @@ -219,6 +234,7 @@ class _EditTokenPageBodyState extends State { title: _tokenSymbolController.text.toUpperCase(), decimals: int.parse(_tokenDecimalController.text), iconPath: _tokenIconPathController.text, + isPotentialScam: isPotentialScam, ), contractAddress: _contractAddressController.text, ); @@ -226,7 +242,6 @@ class _EditTokenPageBodyState extends State { if (mounted) { Navigator.pop(context); } - } catch (e) { showPopUp( context: context, @@ -303,7 +318,8 @@ class _EditTokenPageBodyState extends State { if (token != null) { final isZano = widget.homeSettingsViewModel.walletType == WalletType.zano; if (_tokenNameController.text.isEmpty || isZano) _tokenNameController.text = token.name; - if (_tokenSymbolController.text.isEmpty || isZano) _tokenSymbolController.text = token.title; + if (_tokenSymbolController.text.isEmpty || isZano) + _tokenSymbolController.text = token.title; if (_tokenIconPathController.text.isEmpty) _tokenIconPathController.text = token.iconPath ?? ''; if (_tokenDecimalController.text.isEmpty || isZano) @@ -338,7 +354,9 @@ class _EditTokenPageBodyState extends State { placeholder: S.of(context).token_contract_address, options: [AddressTextFieldOption.paste], buttonColor: Theme.of(context).hintColor, - validator: widget.homeSettingsViewModel.walletType == WalletType.zano ? null : AddressValidator(type: widget.homeSettingsViewModel.nativeToken).call, + validator: widget.homeSettingsViewModel.walletType == WalletType.zano + ? null + : AddressValidator(type: widget.homeSettingsViewModel.nativeToken).call, onPushPasteButton: (_) { _pasteText(); }, diff --git a/lib/src/screens/dashboard/pages/navigation_dock.dart b/lib/src/screens/dashboard/pages/navigation_dock.dart index 77f6b7c5b..52b39cdf7 100644 --- a/lib/src/screens/dashboard/pages/navigation_dock.dart +++ b/lib/src/screens/dashboard/pages/navigation_dock.dart @@ -18,176 +18,38 @@ class NavigationDock extends StatelessWidget { @override Widget build(BuildContext context) { - return dashboardViewModel.settingsStore.currentTheme.type == ThemeType.bright - ? Positioned( - child: Observer( - builder: (_) { - return Container( - alignment: Alignment.bottomCenter, - height: 150, - decoration: BoxDecoration( - gradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - Theme.of(context) - .extension()! - .thirdGradientBackgroundColor - .withAlpha(10), - Theme.of(context) - .extension()! - .thirdGradientBackgroundColor - .withAlpha(75), - Theme.of(context) - .extension()! - .thirdGradientBackgroundColor - .withAlpha(150), - Theme.of(context) - .extension()! - .thirdGradientBackgroundColor, - Theme.of(context) - .extension()! - .thirdGradientBackgroundColor - ], - ), - ), - child: Container( - margin: const EdgeInsets.only(left: 16, right: 16, bottom: 16), - child: ClipRRect( - borderRadius: BorderRadius.circular(50), - child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 50, sigmaY: 50), - child: Container( - height: 75, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(50.0), - border: Border.all( - color: - Theme.of(context).extension()!.cardBorderColor, - width: 1, - ), - color: Theme.of(context) - .extension()! - .syncedBackgroundColor, - ), - child: Container( - padding: EdgeInsets.symmetric(horizontal: 10), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: MainActions.all - .where((element) => - element.canShow?.call(dashboardViewModel) ?? true) - .map( - (action) => Expanded( - child: Semantics( - button: true, - enabled: - (action.isEnabled?.call(dashboardViewModel) ?? true), - child: ActionButton( - key: ValueKey( - 'dashboard_page_${action.name(context)}_action_button_key'), - image: Image.asset( - action.image, - height: 24, - width: 24, - color: - action.isEnabled?.call(dashboardViewModel) ?? true - ? Theme.of(context) - .extension()! - .mainActionsIconColor - : Theme.of(context) - .extension()! - .labelTextColor, - ), - title: action.name(context), - onClick: () async => - await action.onTap(context, dashboardViewModel), - textColor: - action.isEnabled?.call(dashboardViewModel) ?? true - ? null - : Theme.of(context) - .extension()! - .labelTextColor, - ), - ), - ), - ) - .toList(), - ), - ), - ), - ), - ), - ), - ); - }, + return Positioned( + child: Observer( + builder: (_) { + return Container( + height: 150, + alignment: Alignment.bottomCenter, + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: _getColors(context), + ), ), - ) - : Positioned( - child: Observer( - builder: (_) { - return Container( - alignment: Alignment.bottomCenter, - height: 150, - decoration: BoxDecoration( - gradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - Theme.of(context) - .extension()! - .thirdGradientBackgroundColor - .withAlpha(5), - Theme.of(context) - .extension()! - .thirdGradientBackgroundColor - .withAlpha(50), - Theme.of(context) - .extension()! - .thirdGradientBackgroundColor - .withAlpha(125), - Theme.of(context) - .extension()! - .thirdGradientBackgroundColor - .withAlpha(150), - Theme.of(context) - .extension()! - .thirdGradientBackgroundColor - .withAlpha(200), - Theme.of(context) - .extension()! - .thirdGradientBackgroundColor, - Theme.of(context) - .extension()! - .thirdGradientBackgroundColor - ], - ), - ), + child: Container( + margin: const EdgeInsets.only(left: 16, right: 16, bottom: 16), + child: ClipRRect( + borderRadius: BorderRadius.circular(50), + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 50, sigmaY: 50), child: Container( - margin: const EdgeInsets.only(left: 16, right: 16, bottom: 16), - child: Container( - height: 75, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(50.0), - border: Border.all( - color: Theme.of(context).extension()!.cardBorderColor, - width: 1, - ), - color: Theme.of(context) - .extension()! - .syncedBackgroundColor, - // boxShadow: [ - // BoxShadow( - // color: Theme.of(context) - // .extension()! - // .cardBorderColor - // .withAlpha(50), - // spreadRadius: dashboardViewModel.getShadowSpread(), - // blurRadius: dashboardViewModel.getShadowBlur()) - // ], + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(50.0), + border: Border.all( + color: Theme.of(context).extension()!.cardBorderColor, + width: 1, ), - child: Container( - padding: EdgeInsets.symmetric(horizontal: 10), + color: + Theme.of(context).extension()!.syncedBackgroundColor, + ), + child: Container( + padding: EdgeInsets.symmetric(horizontal: 10), + child: IntrinsicHeight( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: MainActions.all @@ -229,9 +91,57 @@ class NavigationDock extends StatelessWidget { ), ), ), - ); - }, + ), + ), ), ); + }, + ), + ); + } + + List _getColors(BuildContext context) { + final isBright = dashboardViewModel.settingsStore.currentTheme.type == ThemeType.bright; + return isBright + ? [ + Theme.of(context) + .extension()! + .thirdGradientBackgroundColor + .withAlpha(10), + Theme.of(context) + .extension()! + .thirdGradientBackgroundColor + .withAlpha(75), + Theme.of(context) + .extension()! + .thirdGradientBackgroundColor + .withAlpha(150), + Theme.of(context).extension()!.thirdGradientBackgroundColor, + Theme.of(context).extension()!.thirdGradientBackgroundColor + ] + : [ + Theme.of(context) + .extension()! + .thirdGradientBackgroundColor + .withAlpha(5), + Theme.of(context) + .extension()! + .thirdGradientBackgroundColor + .withAlpha(50), + Theme.of(context) + .extension()! + .thirdGradientBackgroundColor + .withAlpha(125), + Theme.of(context) + .extension()! + .thirdGradientBackgroundColor + .withAlpha(150), + Theme.of(context) + .extension()! + .thirdGradientBackgroundColor + .withAlpha(200), + Theme.of(context).extension()!.thirdGradientBackgroundColor, + Theme.of(context).extension()!.thirdGradientBackgroundColor + ]; } } diff --git a/lib/src/screens/dashboard/widgets/action_button.dart b/lib/src/screens/dashboard/widgets/action_button.dart index b762b65c7..786c56658 100644 --- a/lib/src/screens/dashboard/widgets/action_button.dart +++ b/lib/src/screens/dashboard/widgets/action_button.dart @@ -31,7 +31,7 @@ class ActionButton extends StatelessWidget { }, child: Container( color: Colors.transparent, - padding: EdgeInsets.only(top: 5, bottom: 5, left: 0, right: 0), + padding: EdgeInsets.only(top: 5, bottom: 4, left: 0, right: 0), alignment: alignment, child: Column( mainAxisSize: MainAxisSize.max, diff --git a/lib/src/screens/pin_code/pin_code_widget.dart b/lib/src/screens/pin_code/pin_code_widget.dart index d39c88cc9..dcd875d7a 100644 --- a/lib/src/screens/pin_code/pin_code_widget.dart +++ b/lib/src/screens/pin_code/pin_code_widget.dart @@ -136,7 +136,7 @@ class PinCodeState extends State { }, child: Container( color: Theme.of(context).colorScheme.background, - padding: EdgeInsets.only(left: 40.0, right: 40.0, bottom: 40.0), + padding: EdgeInsets.only(left: 40.0, right: 40.0, bottom: 60.0), child: Column( children: [ Spacer(flex: 2), @@ -146,7 +146,7 @@ class PinCodeState extends State { fontWeight: FontWeight.w500, color: Theme.of(context).extension()!.titleColor)), - Spacer(flex: 3), + Spacer(flex: 8), Container( width: 180, child: Row( @@ -168,7 +168,7 @@ class PinCodeState extends State { }), ), ), - Spacer(flex: 2), + Spacer(flex: 3), if (widget.hasLengthSwitcher) ...[ TextButton( onPressed: () { @@ -204,8 +204,8 @@ class PinCodeState extends State { childAspectRatio: _aspectRatio, physics: const NeverScrollableScrollPhysics(), children: List.generate(12, (index) { - const double marginRight = 15; - const double marginLeft = 15; + const double marginRight = 8; + const double marginLeft = 8; if (index == 9) { // Empty container @@ -243,12 +243,12 @@ class PinCodeState extends State { key: ValueKey('pin_code_button_${index}_key'), onPressed: () => _push(index), style: TextButton.styleFrom( - backgroundColor: Theme.of(context).colorScheme.background, + backgroundColor: Theme.of(context).cardColor, shape: CircleBorder(), ), child: Text('$index', style: TextStyle( - fontSize: 30.0, + fontSize: 25.0, fontWeight: FontWeight.w600, color: Theme.of(context).extension()!.titleColor)), ), diff --git a/lib/src/screens/receive/widgets/address_list.dart b/lib/src/screens/receive/widgets/address_list.dart index 45891d03a..8d22d81ef 100644 --- a/lib/src/screens/receive/widgets/address_list.dart +++ b/lib/src/screens/receive/widgets/address_list.dart @@ -1,4 +1,3 @@ - import 'dart:math'; import 'package:cake_wallet/di.dart'; @@ -21,6 +20,7 @@ import 'package:cw_core/wallet_type.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; +import 'package:mobx/mobx.dart'; class AddressList extends StatefulWidget { const AddressList({ @@ -37,7 +37,6 @@ class AddressList extends StatefulWidget { } class _AddressListState extends State { - bool showHiddenAddresses = false; void _toggleHiddenAddresses() { @@ -62,7 +61,7 @@ class _AddressListState extends State { void updateItems() { setState(() { - items = getItems(widget.addressListViewModel.items, showHiddenAddresses); + items = getItems(widget.addressListViewModel.forceRecomputeItems, showHiddenAddresses); }); } @@ -132,9 +131,10 @@ class _AddressListState extends State { showTrailingButton: widget.addressListViewModel.showAddManualAddresses, showSearchButton: true, onSearchCallback: updateItems, - trailingButtonTap: () => Navigator.of(context).pushNamed(Routes.newSubaddress).then((value) { - updateItems(); // refresh the new address - }), + trailingButtonTap: () => + Navigator.of(context).pushNamed(Routes.newSubaddress).then((value) { + updateItems(); // refresh the new address + }), trailingIcon: Icon( Icons.add, size: 20, @@ -149,7 +149,8 @@ class _AddressListState extends State { cell = Container(); } else { cell = Observer(builder: (_) { - final isCurrent = item.address == widget.addressListViewModel.address.address && editable; + final isCurrent = + item.address == widget.addressListViewModel.address.address && editable; final backgroundColor = isCurrent ? Theme.of(context).extension()!.currentTileBackgroundColor : Theme.of(context).extension()!.tilesBackgroundColor; @@ -157,17 +158,17 @@ class _AddressListState extends State { ? Theme.of(context).extension()!.currentTileTextColor : Theme.of(context).extension()!.tilesTextColor; - return AddressCell.fromItem( item, isCurrent: isCurrent, hasBalance: widget.addressListViewModel.isBalanceAvailable, hasReceived: widget.addressListViewModel.isReceivedAvailable, - // hasReceived: - backgroundColor: (kDebugMode && item.isHidden) ? - Theme.of(context).colorScheme.error : - (kDebugMode && item.isManual) ? Theme.of(context).colorScheme.error.withBlue(255) : - backgroundColor, + // hasReceived: + backgroundColor: (kDebugMode && item.isHidden) + ? Theme.of(context).colorScheme.error + : (kDebugMode && item.isManual) + ? Theme.of(context).colorScheme.error.withBlue(255) + : backgroundColor, textColor: textColor, onTap: (_) { if (widget.onSelect != null) { @@ -177,9 +178,11 @@ class _AddressListState extends State { widget.addressListViewModel.setAddress(item); }, onEdit: editable - ? () => Navigator.of(context).pushNamed(Routes.newSubaddress, arguments: item).then((value) { - updateItems(); // refresh the new address - }) + ? () => Navigator.of(context) + .pushNamed(Routes.newSubaddress, arguments: item) + .then((value) { + updateItems(); // refresh the new address + }) : null, isHidden: item.isHidden, onHide: () => _hideAddress(item), @@ -191,8 +194,8 @@ class _AddressListState extends State { return index != 0 ? cell : ClipRRect( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(30), topRight: Radius.circular(30)), + borderRadius: + BorderRadius.only(topLeft: Radius.circular(30), topRight: Radius.circular(30)), child: cell, ); }, @@ -203,5 +206,4 @@ class _AddressListState extends State { await widget.addressListViewModel.toggleHideAddress(item); updateItems(); } - } diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart index 6e9178cda..d3c741c0c 100644 --- a/lib/src/screens/send/send_page.dart +++ b/lib/src/screens/send/send_page.dart @@ -1,4 +1,5 @@ import 'package:cake_wallet/bitcoin/bitcoin.dart'; +import 'package:cake_wallet/core/address_validator.dart'; import 'package:cake_wallet/core/auth_service.dart'; import 'package:cake_wallet/entities/contact_record.dart'; import 'package:cake_wallet/core/execution_state.dart'; @@ -544,6 +545,10 @@ class SendPage extends BasePage { ); newContactAddress = newContactAddress ?? sendViewModel.newContactAddress(); + if (newContactAddress?.address != null && isRegularElectrumAddress(newContactAddress!.address)) { + newContactAddress = null; + } + if (sendViewModel.coinTypeToSpendFrom != UnspentCoinType.any) newContactAddress = null; if (newContactAddress != null && sendViewModel.showAddressBookPopup) { @@ -664,4 +669,35 @@ class SendPage extends BasePage { ), context: context); } + + bool isRegularElectrumAddress(String address) { + final supportedTypes = [CryptoCurrency.btc, CryptoCurrency.ltc, CryptoCurrency.bch]; + final excludedPatterns = [ + RegExp(AddressValidator.silentPaymentAddressPattern), + RegExp(AddressValidator.mWebAddressPattern) + ]; + + final trimmed = address.trim(); + + bool isValid = false; + for (var type in supportedTypes) { + final addressPattern = AddressValidator.getAddressFromStringPattern(type); + if (addressPattern != null) { + final regex = RegExp('^$addressPattern\$'); + if (regex.hasMatch(trimmed)) { + isValid = true; + break; + } + } + } + + for (var pattern in excludedPatterns) { + if (pattern.hasMatch(trimmed)) { + return false; + } + } + + return isValid; + } + } diff --git a/lib/src/screens/send/widgets/send_card.dart b/lib/src/screens/send/widgets/send_card.dart index eed0ce233..24cbd2061 100644 --- a/lib/src/screens/send/widgets/send_card.dart +++ b/lib/src/screens/send/widgets/send_card.dart @@ -459,6 +459,14 @@ class SendCardState extends State with AutomaticKeepAliveClientMixin sendViewModel.selectedCryptoCurrency, (Currency currency) { + if (output.sendAll) { + output.setSendAll(sendViewModel.balance); + } + + output.setCryptoAmount(cryptoAmountController.text); + }); + reaction((_) => output.fiatAmount, (String amount) { if (amount != fiatAmountController.text) { fiatAmountController.text = amount; diff --git a/lib/src/screens/settings/desktop_settings/desktop_settings_page.dart b/lib/src/screens/settings/desktop_settings/desktop_settings_page.dart index 83139ec97..bbcb80791 100644 --- a/lib/src/screens/settings/desktop_settings/desktop_settings_page.dart +++ b/lib/src/screens/settings/desktop_settings/desktop_settings_page.dart @@ -20,7 +20,7 @@ class DesktopSettingsPage extends StatefulWidget { } class _DesktopSettingsPageState extends State { - final int itemCount = SettingActions.desktopSettings.length; + final int itemCount = SettingActions.all.length; int? currentPage; @@ -54,7 +54,7 @@ class _DesktopSettingsPageState extends State { child: ListView.separated( padding: EdgeInsets.only(top: 0), itemBuilder: (_, index) { - final item = SettingActions.desktopSettings[index]; + final item = SettingActions.all[index]; if (!widget.dashboardViewModel.hasSilentPayments && item.name(context) == S.of(context).silent_payments_settings) { diff --git a/lib/src/screens/support_chat/support_chat_page.dart b/lib/src/screens/support_chat/support_chat_page.dart index 203b75775..b66af5a59 100644 --- a/lib/src/screens/support_chat/support_chat_page.dart +++ b/lib/src/screens/support_chat/support_chat_page.dart @@ -3,10 +3,8 @@ import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/screens/support_chat/widgets/chatwoot_widget.dart'; import 'package:cake_wallet/view_model/support_view_model.dart'; -import 'package:cw_core/utils/print_verbose.dart'; import 'package:flutter/material.dart'; - class SupportChatPage extends BasePage { SupportChatPage(this.supportViewModel, {required this.secureStorage}); @@ -23,17 +21,16 @@ class SupportChatPage extends BasePage { Widget body(BuildContext context) => FutureBuilder( future: getCookie(), builder: (BuildContext context, AsyncSnapshot snapshot) { - printV(snapshot.data); if (snapshot.hasData) return ChatwootWidget( secureStorage, - supportUrl: supportViewModel.fetchUrl(authToken: snapshot.data!) + supportUrl: supportViewModel.fetchUrl(authToken: snapshot.data!), + appVersion: supportViewModel.appVersion, ); return Container(); }, ); - Future getCookie() async { - return await secureStorage.read(key: COOKIE_KEY) ?? ""; - } + Future getCookie() async => + await secureStorage.read(key: COOKIE_KEY) ?? ""; } diff --git a/lib/src/screens/support_chat/widgets/chatwoot_widget.dart b/lib/src/screens/support_chat/widgets/chatwoot_widget.dart index 4f5e58c97..3b9c3301a 100644 --- a/lib/src/screens/support_chat/widgets/chatwoot_widget.dart +++ b/lib/src/screens/support_chat/widgets/chatwoot_widget.dart @@ -1,46 +1,50 @@ import 'dart:convert'; import 'package:cake_wallet/core/secure_storage.dart'; -import 'package:cw_core/utils/print_verbose.dart'; import 'package:flutter/material.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; const COOKIE_KEY = 'chatwootCookie'; class ChatwootWidget extends StatefulWidget { - ChatwootWidget(this.secureStorage, {required this.supportUrl}); + const ChatwootWidget( + this.secureStorage, { + required this.supportUrl, + required this.appVersion, + }); final SecureStorage secureStorage; final String supportUrl; + final String appVersion; @override ChatwootWidgetState createState() => ChatwootWidgetState(); } class ChatwootWidgetState extends State { - final GlobalKey _webViewkey = GlobalKey(); + final GlobalKey _webViewKey = GlobalKey(); @override Widget build(BuildContext context) => InAppWebView( - key: _webViewkey, - initialSettings: InAppWebViewSettings( - transparentBackground: true, - ), + key: _webViewKey, + initialSettings: InAppWebViewSettings(transparentBackground: true), initialUrlRequest: URLRequest(url: WebUri(widget.supportUrl)), onWebViewCreated: (InAppWebViewController controller) { controller.addWebMessageListener( WebMessageListener( jsObjectName: 'ReactNativeWebView', - onPostMessage: (WebMessage? message, WebUri? sourceOrigin, bool isMainFrame, - PlatformJavaScriptReplyProxy replyProxy) { + onPostMessage: (WebMessage? message, WebUri? sourceOrigin, + bool isMainFrame, PlatformJavaScriptReplyProxy replyProxy) { final shortenedMessage = message?.data.toString().substring(16); - if (shortenedMessage != null && isJsonString(shortenedMessage)) { + if (shortenedMessage != null && + _isJsonString(shortenedMessage)) { final parsedMessage = jsonDecode(shortenedMessage); final eventType = parsedMessage["event"]; if (eventType == 'loaded') { final authToken = parsedMessage["config"]["authToken"]; - printV(authToken); - storeCookie(authToken as String); + _storeCookie(authToken as String); + _setCustomAttributes( + controller, {"app_version": widget.appVersion}); } } }, @@ -49,7 +53,7 @@ class ChatwootWidgetState extends State { }, ); - bool isJsonString(String str) { + bool _isJsonString(String str) { try { jsonDecode(str); } catch (e) { @@ -58,7 +62,24 @@ class ChatwootWidgetState extends State { return true; } - Future storeCookie(String value) async { - await widget.secureStorage.write(key: COOKIE_KEY, value: value); + /// Add additional contact attributes to the chatwoot chat. + /// IMPORTANT: You have to add the attribute key in the chatwoot settings + /// under: settings/custom-attributes + Future _setCustomAttributes( + InAppWebViewController controller, + Map customAttributes, + ) { + final attributeObject = { + "event": "set-custom-attributes", + "customAttributes": customAttributes, + }; + return controller.postWebMessage( + message: WebMessage( + data: "chatwoot-widget:${jsonEncode(attributeObject)}", + ), + ); } + + Future _storeCookie(String value) => + widget.secureStorage.write(key: COOKIE_KEY, value: value); } diff --git a/lib/src/widgets/alert_with_picker_option.dart b/lib/src/widgets/alert_with_picker_option.dart new file mode 100644 index 000000000..bedcdefd4 --- /dev/null +++ b/lib/src/widgets/alert_with_picker_option.dart @@ -0,0 +1,120 @@ +import 'package:flutter/material.dart'; +import 'package:cake_wallet/src/widgets/base_alert_dialog.dart'; +import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; + +class AlertWithPickerOption extends BaseAlertDialog { + AlertWithPickerOption( + {required this.alertTitle, + required this.alertTitleTextSize, + required this.alertSubtitle, + required this.options, + this.onOptionSelected, + this.alertBarrierDismissible = true, + Key? key}); + + final String alertTitle; + final double alertTitleTextSize; + final String alertSubtitle; + final List> options; + final ValueChanged>? onOptionSelected; + final bool alertBarrierDismissible; + + @override + String get titleText => alertTitle; + + @override + double? get titleTextSize => alertTitleTextSize; + + @override + String get contentText => alertSubtitle; + + @override + bool get barrierDismissible => alertBarrierDismissible; + + @override + Widget actionButtons(BuildContext context) => Container(); + + @override + bool get isBottomDividerExists => false; + + @override + Widget content(BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + const SizedBox(height: 16), + Text( + contentText, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 10, + fontWeight: FontWeight.w500, + fontFamily: 'Lato', + color: Theme.of(context).extension()!.titleColor, + decoration: TextDecoration.none), + ), + const SizedBox(height: 4), + Container( + constraints: const BoxConstraints(maxHeight: 200), + child: ListView.separated( + shrinkWrap: true, + padding: EdgeInsets.zero, + separatorBuilder: (context, index) => const SizedBox(height: 8), + itemCount: options.length, + itemBuilder: (context, index) { + final item = options[index]; + final displayKey = item['displayKey'] ?? ''; + final displayValue = item['displayValue'] ?? ''; + return GestureDetector( + onTap: () { + onOptionSelected?.call(item); + Navigator.of(context).pop(); + }, + child: Container( + width: double.infinity, + padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 12), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(30), + color: Theme.of(context).colorScheme.background), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + displayKey, + style: TextStyle( + fontSize: 12, + fontFamily: 'Lato', + color: Theme.of(context).extension()!.titleColor, + decoration: TextDecoration.none, + ), + ), + Row( + children: [ + Text( + displayValue, + style: TextStyle( + fontSize: 12, + fontFamily: 'Lato', + color: Theme.of(context).extension()!.titleColor, + decoration: TextDecoration.none, + ), + ), + const SizedBox(width: 4), + Icon( + Icons.arrow_forward_ios, + size: 18, + color: Theme.of(context).extension()!.titleColor, + ), + ], + ), + ], + ), + ), + ); + }, + ), + ), + ], + ); + } +} diff --git a/lib/src/widgets/base_alert_dialog.dart b/lib/src/widgets/base_alert_dialog.dart index bede33ebf..02b8f85ab 100644 --- a/lib/src/widgets/base_alert_dialog.dart +++ b/lib/src/widgets/base_alert_dialog.dart @@ -9,6 +9,8 @@ class BaseAlertDialog extends StatelessWidget { String? get titleText => ''; + double? get titleTextSize => 20; + String get contentText => ''; String get leftActionButtonText => ''; @@ -46,7 +48,7 @@ class BaseAlertDialog extends StatelessWidget { titleText!, textAlign: TextAlign.center, style: TextStyle( - fontSize: 20, + fontSize: titleTextSize, fontFamily: 'Lato', fontWeight: FontWeight.w600, color: Theme.of(context).extension()!.titleColor, diff --git a/lib/src/widgets/setting_actions.dart b/lib/src/widgets/setting_actions.dart index c5938b746..d383129cc 100644 --- a/lib/src/widgets/setting_actions.dart +++ b/lib/src/widgets/setting_actions.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/routes.dart'; import 'package:flutter/material.dart'; @@ -20,20 +22,8 @@ class SettingActions { walletSettingAction, addressBookSettingAction, silentPaymentsSettingAction, - litecoinMwebSettingAction, - exportOutputsAction, - securityBackupSettingAction, - privacySettingAction, - displaySettingAction, - otherSettingAction, - supportSettingAction, - ]; - - static List desktopSettings = [ - connectionSettingAction, - walletSettingAction, - addressBookSettingAction, - silentPaymentsSettingAction, + if (Platform.isIOS || Platform.isAndroid) litecoinMwebSettingAction, + if (Platform.isIOS || Platform.isAndroid) exportOutputsAction, securityBackupSettingAction, privacySettingAction, displaySettingAction, diff --git a/lib/tron/cw_tron.dart b/lib/tron/cw_tron.dart index 8bceafe01..bf2fac590 100644 --- a/lib/tron/cw_tron.dart +++ b/lib/tron/cw_tron.dart @@ -133,4 +133,9 @@ class CWTron extends Tron { void updateTronGridUsageState(WalletBase wallet, bool isEnabled) { (wallet as TronWallet).updateScanProviderUsageState(isEnabled); } + + @override + List getDefaultTokenContractAddresses() { + return DefaultTronTokens().initialTronTokens.map((e) => e.contractAddress).toList(); + } } diff --git a/lib/utils/exception_handler.dart b/lib/utils/exception_handler.dart index b949c9968..17e6daed3 100644 --- a/lib/utils/exception_handler.dart +++ b/lib/utils/exception_handler.dart @@ -201,6 +201,7 @@ class ExceptionHandler { "Connection closed before full header was received", "Connection terminated during handshake", "PERMISSION_NOT_GRANTED", + "OS Error: Permission denied", "Failed host lookup:", "CERTIFICATE_VERIFY_FAILED", "Handshake error in client", diff --git a/lib/view_model/dashboard/home_settings_view_model.dart b/lib/view_model/dashboard/home_settings_view_model.dart index 197d550c3..e3e02a045 100644 --- a/lib/view_model/dashboard/home_settings_view_model.dart +++ b/lib/view_model/dashboard/home_settings_view_model.dart @@ -114,13 +114,12 @@ abstract class HomeSettingsViewModelBase with Store { if (_balanceViewModel.wallet.type == WalletType.zano) { await zano!.addZanoAssetById(_balanceViewModel.wallet, contractAddress); } - + _updateTokensList(); _updateFiatPrices(token); } catch (e) { throw e; - } - finally { + } finally { isAddingToken = false; } } @@ -189,6 +188,40 @@ abstract class HomeSettingsViewModelBase with Store { } } + bool checkIfTokenIsWhitelisted(String contractAddress) { + // get the default tokens for each currency type: + List defaultTokenAddresses = []; + switch (_balanceViewModel.wallet.type) { + case WalletType.ethereum: + defaultTokenAddresses = ethereum!.getDefaultTokenContractAddresses(); + break; + case WalletType.polygon: + defaultTokenAddresses = polygon!.getDefaultTokenContractAddresses(); + break; + case WalletType.solana: + defaultTokenAddresses = solana!.getDefaultTokenContractAddresses(); + break; + case WalletType.tron: + defaultTokenAddresses = tron!.getDefaultTokenContractAddresses(); + break; + case WalletType.zano: + case WalletType.banano: + case WalletType.monero: + case WalletType.none: + case WalletType.bitcoin: + case WalletType.litecoin: + case WalletType.haven: + case WalletType.nano: + case WalletType.wownero: + case WalletType.bitcoinCash: + return false; + } + + // check if the contractAddress is in the defaultTokenAddresses + bool isInWhitelist = defaultTokenAddresses.any((element) => element == contractAddress); + return isInWhitelist; + } + Future _isPotentialScamTokenViaMoralis( String contractAddress, String chainName, @@ -363,6 +396,7 @@ abstract class HomeSettingsViewModelBase with Store { CryptoCurrency get nativeToken => _balanceViewModel.wallet.currency; void _updateFiatPrices(CryptoCurrency token) async { + if (token.isPotentialScam) return; // don't fetch price data for potential scam tokens try { _balanceViewModel.fiatConvertationStore.prices[token] = await FiatConversionService.fetchPrice( @@ -455,9 +489,10 @@ abstract class HomeSettingsViewModelBase with Store { } if (_balanceViewModel.wallet.type == WalletType.zano) { - tokens.addAll(zano!.getZanoAssets(_balanceViewModel.wallet) - .where((element) => _matchesSearchText(element)) - .toList() + tokens.addAll(zano! + .getZanoAssets(_balanceViewModel.wallet) + .where((element) => _matchesSearchText(element)) + .toList() ..sort(_sortFunc)); } } diff --git a/lib/view_model/send/send_view_model.dart b/lib/view_model/send/send_view_model.dart index 53c52aa1e..998521ede 100644 --- a/lib/view_model/send/send_view_model.dart +++ b/lib/view_model/send/send_view_model.dart @@ -102,7 +102,9 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor outputs .add(Output(wallet, _settingsStore, _fiatConversationStore, () => selectedCryptoCurrency)); - unspentCoinsListViewModel.initialSetup(); + unspentCoinsListViewModel.initialSetup().then((_) { + unspentCoinsListViewModel.resetUnspentCoinsInfoSelections(); + }); } @observable @@ -728,11 +730,10 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor return S.current.insufficient_funds_for_tx; } - return - '''${S.current.insufficient_funds_for_tx} \n\n''' - '''${S.current.balance}: ${parsedErrorMessageResult.balanceEth} ${walletType == WalletType.polygon ? "POL" : "ETH"} (${parsedErrorMessageResult.balanceUsd} ${fiatFromSettings.name})\n\n''' - '''${S.current.transaction_cost}: ${parsedErrorMessageResult.txCostEth} ${walletType == WalletType.polygon ? "POL" : "ETH"} (${parsedErrorMessageResult.txCostUsd} ${fiatFromSettings.name})\n\n''' - '''${S.current.overshot}: ${parsedErrorMessageResult.overshotEth} ${walletType == WalletType.polygon ? "POL" : "ETH"} (${parsedErrorMessageResult.overshotUsd} ${fiatFromSettings.name})'''; + return '''${S.current.insufficient_funds_for_tx} \n\n''' + '''${S.current.balance}: ${parsedErrorMessageResult.balanceEth} ${walletType == WalletType.polygon ? "POL" : "ETH"} (${parsedErrorMessageResult.balanceUsd} ${fiatFromSettings.name})\n\n''' + '''${S.current.transaction_cost}: ${parsedErrorMessageResult.txCostEth} ${walletType == WalletType.polygon ? "POL" : "ETH"} (${parsedErrorMessageResult.txCostUsd} ${fiatFromSettings.name})\n\n''' + '''${S.current.overshot}: ${parsedErrorMessageResult.overshotEth} ${walletType == WalletType.polygon ? "POL" : "ETH"} (${parsedErrorMessageResult.overshotUsd} ${fiatFromSettings.name})'''; } return errorMessage; @@ -809,4 +810,4 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor return false; } -} \ No newline at end of file +} diff --git a/lib/view_model/support_view_model.dart b/lib/view_model/support_view_model.dart index d48b182b1..766bcc9a2 100644 --- a/lib/view_model/support_view_model.dart +++ b/lib/view_model/support_view_model.dart @@ -1,16 +1,19 @@ +import 'package:cake_wallet/.secrets.g.dart' as secrets; import 'package:cake_wallet/generated/i18n.dart'; +import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/view_model/settings/link_list_item.dart'; import 'package:cake_wallet/view_model/settings/settings_list_item.dart'; import 'package:cake_wallet/wallet_type_utils.dart'; import 'package:mobx/mobx.dart'; -import 'package:cake_wallet/.secrets.g.dart' as secrets; part 'support_view_model.g.dart'; class SupportViewModel = SupportViewModelBase with _$SupportViewModel; abstract class SupportViewModelBase with Store { - SupportViewModelBase() + final SettingsStore settingsStore; + + SupportViewModelBase(this.settingsStore) : items = [ LinkListItem( title: 'Email', @@ -116,5 +119,8 @@ abstract class SupportViewModelBase with Store { return supportUrl; } + String get appVersion => + "${isMoneroOnly ? "Monero.com" : "Cake Wallet"} - ${settingsStore.appVersion}"; + List items; } diff --git a/lib/view_model/unspent_coins/unspent_coins_list_view_model.dart b/lib/view_model/unspent_coins/unspent_coins_list_view_model.dart index 52820adcb..9a8a4a8f2 100644 --- a/lib/view_model/unspent_coins/unspent_coins_list_view_model.dart +++ b/lib/view_model/unspent_coins/unspent_coins_list_view_model.dart @@ -68,7 +68,6 @@ abstract class UnspentCoinsListViewModelBase with Store { bool get hasAdjustableFieldChanged => items.any(_hasAdjustableFieldChanged); - Future saveUnspentCoinInfo(UnspentCoinsItem item) async { try { final existingInfo = _unspentCoinsInfo.values @@ -79,7 +78,6 @@ abstract class UnspentCoinsListViewModelBase with Store { existingInfo.isSending = item.isSending; existingInfo.note = item.note; - await existingInfo.save(); _updateUnspentCoinsInfo(); } catch (e) { @@ -167,6 +165,17 @@ abstract class UnspentCoinsListViewModelBase with Store { items.addAll(unspents); } + @action + void resetUnspentCoinsInfoSelections() { + // reset all unspent coins selections to true except frozen ones + for (final item in items) { + if (!item.isFrozen) { + item.isSending = true; + saveUnspentCoinInfo(item); + } + } + } + @action void toggleSelectAll(bool value) { for (final item in items) { diff --git a/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart b/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart index 773d8335c..ef1c52f31 100644 --- a/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart +++ b/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart @@ -26,14 +26,14 @@ import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_i import 'package:cake_wallet/wownero/wownero.dart'; import 'package:cw_core/amount_converter.dart'; import 'package:cw_core/currency.dart'; +import 'package:cw_core/utils/print_verbose.dart'; import 'package:cw_core/wallet_type.dart'; import 'package:intl/intl.dart'; import 'package:mobx/mobx.dart'; part 'wallet_address_list_view_model.g.dart'; -class WalletAddressListViewModel = WalletAddressListViewModelBase - with _$WalletAddressListViewModel; +class WalletAddressListViewModel = WalletAddressListViewModelBase with _$WalletAddressListViewModel; abstract class PaymentURI { PaymentURI({required this.amount, required this.address}); @@ -222,9 +222,7 @@ class ZanoURI extends PaymentURI { } } - -abstract class WalletAddressListViewModelBase - extends WalletChangeListenerViewModel with Store { +abstract class WalletAddressListViewModelBase extends WalletChangeListenerViewModel with Store { WalletAddressListViewModelBase({ required AppStore appStore, required this.yatStore, @@ -245,8 +243,7 @@ abstract class WalletAddressListViewModelBase _init(); selectedCurrency = walletTypeToCryptoCurrency(wallet.type); - hasAccounts = [WalletType.monero, WalletType.wownero, WalletType.haven] - .contains(wallet.type); + hasAccounts = [WalletType.monero, WalletType.wownero, WalletType.haven].contains(wallet.type); } static const String _cryptoNumberPattern = '0.00000000'; @@ -259,8 +256,7 @@ abstract class WalletAddressListViewModelBase double? _fiatRate; String _rawAmount = ''; - List get currencies => - [walletTypeToCryptoCurrency(wallet.type), ...FiatCurrency.all]; + List get currencies => [walletTypeToCryptoCurrency(wallet.type), ...FiatCurrency.all]; String get buttonTitle { if (isElectrumWallet) { @@ -286,8 +282,8 @@ abstract class WalletAddressListViewModelBase WalletType get type => wallet.type; @computed - WalletAddressListItem get address => WalletAddressListItem( - address: wallet.walletAddresses.address, isPrimary: false); + WalletAddressListItem get address => + WalletAddressListItem(address: wallet.walletAddresses.address, isPrimary: false); @computed PaymentURI get uri { @@ -317,25 +313,23 @@ abstract class WalletAddressListViewModelBase case WalletType.wownero: return WowneroURI(amount: amount, address: address.address); case WalletType.zano: - return ZanoURI(amount: amount, address: address.address); + return ZanoURI(amount: amount, address: address.address); case WalletType.none: throw Exception('Unexpected type: ${type.toString()}'); } } + @computed ObservableList get items => ObservableList() ..addAll(_baseItems) ..addAll(addressList); - @computed - ObservableList get addressList { + ObservableList _computeAddressList() { final addressList = ObservableList(); if (wallet.type == WalletType.monero) { - final primaryAddress = - monero!.getSubaddressList(wallet).subaddresses.first; - final addressItems = - monero!.getSubaddressList(wallet).subaddresses.map((subaddress) { + final primaryAddress = monero!.getSubaddressList(wallet).subaddresses.first; + final addressItems = monero!.getSubaddressList(wallet).subaddresses.map((subaddress) { final isPrimary = subaddress == primaryAddress; return WalletAddressListItem( @@ -351,10 +345,8 @@ abstract class WalletAddressListViewModelBase } if (wallet.type == WalletType.wownero) { - final primaryAddress = - wownero!.getSubaddressList(wallet).subaddresses.first; - final addressItems = - wownero!.getSubaddressList(wallet).subaddresses.map((subaddress) { + final primaryAddress = wownero!.getSubaddressList(wallet).subaddresses.first; + final addressItems = wownero!.getSubaddressList(wallet).subaddresses.map((subaddress) { final isPrimary = subaddress == primaryAddress; return WalletAddressListItem( @@ -367,10 +359,8 @@ abstract class WalletAddressListViewModelBase } if (wallet.type == WalletType.haven) { - final primaryAddress = - haven!.getSubaddressList(wallet).subaddresses.first; - final addressItems = - haven!.getSubaddressList(wallet).subaddresses.map((subaddress) { + final primaryAddress = haven!.getSubaddressList(wallet).subaddresses.first; + final addressItems = haven!.getSubaddressList(wallet).subaddresses.map((subaddress) { final isPrimary = subaddress == primaryAddress; return WalletAddressListItem( @@ -384,8 +374,7 @@ abstract class WalletAddressListViewModelBase if (isElectrumWallet) { if (bitcoin!.hasSelectedSilentPayments(wallet)) { - final addressItems = - bitcoin!.getSilentPaymentAddresses(wallet).map((address) { + final addressItems = bitcoin!.getSilentPaymentAddresses(wallet).map((address) { final isPrimary = address.id == 0; return WalletAddressListItem( @@ -436,8 +425,7 @@ abstract class WalletAddressListViewModelBase if (wallet.type == WalletType.litecoin && addressItems.length >= 1000) { // find the index of the last item with a txCount > 0 final addressItemsList = addressItems.toList(); - int index = addressItemsList - .lastIndexWhere((item) => (item.txCount ?? 0) > 0); + int index = addressItemsList.lastIndexWhere((item) => (item.txCount ?? 0) > 0); if (index == -1) { index = 0; } @@ -451,22 +439,19 @@ abstract class WalletAddressListViewModelBase if (wallet.type == WalletType.ethereum) { final primaryAddress = ethereum!.getAddress(wallet); - addressList.add(WalletAddressListItem( - isPrimary: true, name: null, address: primaryAddress)); + addressList.add(WalletAddressListItem(isPrimary: true, name: null, address: primaryAddress)); } if (wallet.type == WalletType.polygon) { final primaryAddress = polygon!.getAddress(wallet); - addressList.add(WalletAddressListItem( - isPrimary: true, name: null, address: primaryAddress)); + addressList.add(WalletAddressListItem(isPrimary: true, name: null, address: primaryAddress)); } if (wallet.type == WalletType.solana) { final primaryAddress = solana!.getAddress(wallet); - addressList.add(WalletAddressListItem( - isPrimary: true, name: null, address: primaryAddress)); + addressList.add(WalletAddressListItem(isPrimary: true, name: null, address: primaryAddress)); } if (wallet.type == WalletType.nano) { @@ -480,21 +465,18 @@ abstract class WalletAddressListViewModelBase if (wallet.type == WalletType.tron) { final primaryAddress = tron!.getAddress(wallet); - addressList.add(WalletAddressListItem( - isPrimary: true, name: null, address: primaryAddress)); + addressList.add(WalletAddressListItem(isPrimary: true, name: null, address: primaryAddress)); } for (var i = 0; i < addressList.length; i++) { if (!(addressList[i] is WalletAddressListItem)) continue; - (addressList[i] as WalletAddressListItem).isHidden = wallet - .walletAddresses.hiddenAddresses + (addressList[i] as WalletAddressListItem).isHidden = wallet.walletAddresses.hiddenAddresses .contains((addressList[i] as WalletAddressListItem).address); } for (var i = 0; i < addressList.length; i++) { if (!(addressList[i] is WalletAddressListItem)) continue; - (addressList[i] as WalletAddressListItem).isManual = wallet - .walletAddresses.manualAddresses + (addressList[i] as WalletAddressListItem).isManual = wallet.walletAddresses.manualAddresses .contains((addressList[i] as WalletAddressListItem).address); } @@ -516,13 +498,28 @@ abstract class WalletAddressListViewModelBase return addressList; } + @computed + ObservableList get addressList { + return _computeAddressList(); + } + + List get forceRecomputeItems { + // necessary because the addressList contains non-observable items + List recomputed = []; + recomputed.addAll(_baseItems); + recomputed.addAll(_computeAddressList()); + return recomputed; + } + Future toggleHideAddress(WalletAddressListItem item) async { if (item.isHidden) { - wallet.walletAddresses.hiddenAddresses - .removeWhere((element) => element == item.address); + item.isHidden = false; + wallet.walletAddresses.hiddenAddresses.removeWhere((element) => element == item.address); } else { + item.isHidden = true; wallet.walletAddresses.hiddenAddresses.add(item.address); } + // update the address list: await wallet.walletAddresses.saveAddressesInBox(); if (wallet.type == WalletType.monero) { monero! @@ -568,28 +565,22 @@ abstract class WalletAddressListViewModelBase ].contains(wallet.type); @computed - bool get isElectrumWallet => [ - WalletType.bitcoin, - WalletType.litecoin, - WalletType.bitcoinCash - ].contains(wallet.type); + bool get isElectrumWallet => + [WalletType.bitcoin, WalletType.litecoin, WalletType.bitcoinCash].contains(wallet.type); @computed bool get isBalanceAvailable => isElectrumWallet; @computed - bool get isReceivedAvailable => - [WalletType.monero, WalletType.wownero].contains(wallet.type); + bool get isReceivedAvailable => [WalletType.monero, WalletType.wownero].contains(wallet.type); @computed bool get isSilentPayments => - wallet.type == WalletType.bitcoin && - bitcoin!.hasSelectedSilentPayments(wallet); + wallet.type == WalletType.bitcoin && bitcoin!.hasSelectedSilentPayments(wallet); @computed bool get isAutoGenerateSubaddressEnabled => - _settingsStore.autoGenerateSubaddressStatus != - AutoGenerateSubaddressStatus.disabled && + _settingsStore.autoGenerateSubaddressStatus != AutoGenerateSubaddressStatus.disabled && !isSilentPayments; @computed @@ -672,8 +663,7 @@ abstract class WalletAddressListViewModelBase @action void _convertAmountToCrypto() { final cryptoCurrency = walletTypeToCryptoCurrency(wallet.type); - final fiatRate = - _fiatRate ?? (fiatConversionStore.prices[cryptoCurrency] ?? 0.0); + final fiatRate = _fiatRate ?? (fiatConversionStore.prices[cryptoCurrency] ?? 0.0); if (fiatRate <= 0.0) { dev.log("Invalid Fiat Rate $fiatRate"); diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb index 2fcba584c..0bffae6c4 100644 --- a/res/values/strings_ar.arb +++ b/res/values/strings_ar.arb @@ -175,7 +175,7 @@ "contact_name_exists": " .ﻒﻠﺘﺨﻣ ﻢﺳﺍ ﺭﺎﻴﺘﺧﺍ ءﺎﺟﺮﻟﺍ .ﻞﻌﻔﻟﺎﺑ ﺓﺩﻮﺟﻮﻣ ﻢﺳﻻﺍ ﺍﺬﻬﺑ ﻝﺎﺼﺗﺍ ﺔﻬﺟ", "contact_support": "اتصل بالدعم", "continue_text": "التالي", - "contract_warning": "تم وضع علامة على عنوان العقد هذا على أنه احتيالي محتمل. يرجى المعالجة بحذر.", + "contract_warning": "تم وضع علامة على عنوان العقد هذا على أنه احتيالي محتمل. يرجى المتابعة بحذر.", "contractName": "ﺪﻘﻌﻟﺍ ﻢﺳﺍ", "contractSymbol": "ﺪﻘﻌﻟﺍ ﺰﻣﺭ", "copied_key_to_clipboard": "تم نسخ ${key} إلى الحافظة", @@ -437,6 +437,7 @@ "monero_light_theme": " ضوء مونيرو", "moonpay_alert_text": "يجب أن تكون قيمة المبلغ أكبر من أو تساوي ${minAmount} ${fiatCurrency}", "more_options": "المزيد من الخيارات", + "multiple_addresses_detected": "عناوين متعددة تم اكتشافها", "mweb_confirmed": "أكد MWEB", "mweb_unconfirmed": "غير مؤكد MWEB", "name": "ﻢﺳﺍ", @@ -513,6 +514,7 @@ "pin_number": "الرقم السري", "placeholder_contacts": "سيتم عرض جهات الاتصال الخاصة بك هنا", "placeholder_transactions": "سيتم عرض معاملاتك هنا", + "please_choose_one": "الرجاء اختيار واحد", "please_fill_totp": "يرجى ملء الرمز المكون من 8 أرقام الموجود على جهازك الآخر", "please_make_selection": "يرجى الأختيار لإنشاء أو استعادة محفظتك.", "please_reference_document": "يرجى الرجوع إلى الوثائق أدناه لمزيد من المعلومات.", diff --git a/res/values/strings_bg.arb b/res/values/strings_bg.arb index b79f8c8f7..5195ab39c 100644 --- a/res/values/strings_bg.arb +++ b/res/values/strings_bg.arb @@ -175,7 +175,7 @@ "contact_name_exists": "Вече съществува контакт с това име. Моля, изберете друго име.", "contact_support": "Свържи се с отдел поддръжка", "continue_text": "Напред", - "contract_warning": "Този адрес на договора е маркиран като потенциално измамник. Моля, обработете с повишено внимание.", + "contract_warning": "Този адрес на договора е маркиран като потенциално измамник. Моля, продължете с повишено внимание.", "contractName": "Име на договора", "contractSymbol": "Договор Символ", "copied_key_to_clipboard": "Копиран ключ: ${key}", @@ -437,6 +437,7 @@ "monero_light_theme": "Лека тема Monero", "moonpay_alert_text": "Сумата трябва да бъде най-малко ${minAmount} ${fiatCurrency}", "more_options": "Още настройки", + "multiple_addresses_detected": "Открити множество адреси", "mweb_confirmed": "Потвърден MWeb", "mweb_unconfirmed": "Непотвърден mweb", "name": "Име", @@ -513,6 +514,7 @@ "pin_number": "PIN код", "placeholder_contacts": "Вашите контакти ще се покажат тук", "placeholder_transactions": "Вашите транзакции ще се покажат тук", + "please_choose_one": "Моля, изберете един", "please_fill_totp": "Моля, попълнете 8-цифрения код на другото ви устройство", "please_make_selection": "Моля, изберете отдолу за създаване или възстановяване на портфейл.", "please_reference_document": "Моля, вижте документите по-долу за повече информация.", diff --git a/res/values/strings_cs.arb b/res/values/strings_cs.arb index 391513fda..4babb1070 100644 --- a/res/values/strings_cs.arb +++ b/res/values/strings_cs.arb @@ -175,7 +175,7 @@ "contact_name_exists": "Kontakt s tímto jménem již existuje. Vyberte prosím jiný název.", "contact_support": "Kontaktovat podporu", "continue_text": "Pokračovat", - "contract_warning": "Tato adresa smlouvy byla označena jako potenciálně podvodná. Zpracovejte prosím opatrně.", + "contract_warning": "Tato adresa smlouvy byla označena jako potenciálně podvodná. Pokračujte opatrně.", "contractName": "Název smlouvy", "contractSymbol": "Symbol smlouvy", "copied_key_to_clipboard": "Zkopírován ${key} do schránky", @@ -437,6 +437,7 @@ "monero_light_theme": "Světlé téma Monero", "moonpay_alert_text": "Částka musí být větší nebo rovna ${minAmount} ${fiatCurrency}", "more_options": "Více možností", + "multiple_addresses_detected": "Detekované více adres", "mweb_confirmed": "Potvrzený mweb", "mweb_unconfirmed": "Nepotvrzené mWeb", "name": "název", @@ -513,6 +514,7 @@ "pin_number": "Číslo PIN", "placeholder_contacts": "Vaše kontakty budou zobrazeny zde", "placeholder_transactions": "Vaše transakce budou zobrazeny zde", + "please_choose_one": "Vyberte si prosím jeden", "please_fill_totp": "Vyplňte prosím 8místný kód na vašem druhém zařízení", "please_make_selection": "Prosím vyberte si níže, jestli chcete vytvořit, nebo obnovit peněženku.", "please_reference_document": "Více informací naleznete v dokumentu níže.", diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 641e99125..69c9e5783 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -175,7 +175,7 @@ "contact_name_exists": "Ein Kontakt mit diesem Namen besteht bereits. Bitte wählen Sie einen anderen Namen.", "contact_support": "Support kontaktieren", "continue_text": "Weiter", - "contract_warning": "Diese Contract Adresse wurde als potenziell betrügerisch gekennzeichnet. Bitte fahren Sie mit Vorsicht fort.", + "contract_warning": "Diese Vertragsadresse wurde als potenziell betrügerisch gekennzeichnet. Bitte gehen Sie mit Vorsicht vor.", "contractName": "Contract-Name", "contractSymbol": "Contract-Symbol", "copied_key_to_clipboard": "${key} in Zwischenablage kopiert", @@ -437,6 +437,7 @@ "monero_light_theme": "Monero Light-Thema", "moonpay_alert_text": "Der Wert des Betrags muss größer oder gleich ${minAmount} ${fiatCurrency} sein", "more_options": "Weitere Optionen", + "multiple_addresses_detected": "Mehrere Adressen erkannt", "mweb_confirmed": "Bestätigt MWeb", "mweb_unconfirmed": "Unbestätigter MWeb", "name": "Name", @@ -513,6 +514,7 @@ "pin_number": "PIN-Nummer", "placeholder_contacts": "Ihre Kontakte werden hier angezeigt", "placeholder_transactions": "Ihre Transaktionen werden hier angezeigt", + "please_choose_one": "Bitte wählen Sie einen", "please_fill_totp": "Bitte geben Sie den 8-stelligen Code ein, der auf Ihrem anderen Gerät vorhanden ist", "please_make_selection": "Bitte treffen Sie unten eine Auswahl zum Erstellen oder Wiederherstellen Ihrer Wallet.", "please_reference_document": "Bitte verweisen Sie auf die folgenden Dokumente, um weitere Informationen zu erhalten.", diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 08ecad2a5..8fa1f92b5 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -175,7 +175,7 @@ "contact_name_exists": "A contact with that name already exists. Please choose a different name.", "contact_support": "Contact Support", "continue_text": "Continue", - "contract_warning": "This contract address has been flagged as potentially fraudulent. Please process with caution.", + "contract_warning": "This contract address has been flagged as potentially fraudulent. Please proceed with caution.", "contractName": "Contract Name", "contractSymbol": "Contract Symbol", "copied_key_to_clipboard": "Copied ${key} to Clipboard", @@ -437,6 +437,7 @@ "monero_light_theme": "Monero Light Theme", "moonpay_alert_text": "Value of the amount must be more or equal to ${minAmount} ${fiatCurrency}", "more_options": "More Options", + "multiple_addresses_detected": "Multiple addresses detected", "mweb_confirmed": "Confirmed MWEB", "mweb_unconfirmed": "Unconfirmed MWEB", "name": "Name", @@ -514,6 +515,7 @@ "pin_number": "PIN number", "placeholder_contacts": "Your contacts will be displayed here", "placeholder_transactions": "Your transactions will be displayed here", + "please_choose_one": "Please choose one", "please_fill_totp": "Please fill in the 8-digit code present on your other device", "please_make_selection": "Please make a selection below to create or recover your wallet.", "please_reference_document": "Please reference the documents below for more information.", diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index c5220d580..c6363a15f 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -175,7 +175,7 @@ "contact_name_exists": "Ya existe un contacto con ese nombre. Elija un nombre diferente.", "contact_support": "Contactar con Soporte", "continue_text": "Continuar", - "contract_warning": "Esta dirección de contrato ha sido marcada como potencialmente fraudulenta. Por favor, procese con precaución.", + "contract_warning": "Esta dirección de contrato ha sido marcada como potencialmente fraudulenta. Proceda con precaución.", "contractName": "Nombre del contrato", "contractSymbol": "Símbolo de contrato", "copied_key_to_clipboard": "Copiado ${key} al portapapeles", @@ -437,6 +437,7 @@ "monero_light_theme": "Tema ligero de Monero", "moonpay_alert_text": "El valor de la cantidad debe ser mayor o igual a ${minAmount} ${fiatCurrency}", "more_options": "Más Opciones", + "multiple_addresses_detected": "Múltiples direcciones detectadas", "mweb_confirmed": "Confirmado mweb", "mweb_unconfirmed": "Mweb no confirmado", "name": "Nombre", @@ -514,6 +515,7 @@ "pin_number": "Número PIN", "placeholder_contacts": "Tus contactos se mostrarán aquí", "placeholder_transactions": "Tus transacciones se mostrarán aquí", + "please_choose_one": "Elija uno", "please_fill_totp": "Completa el código de 8 dígitos presente en su otro dispositivo", "please_make_selection": "Selecciona a continuación para crear o recuperar su billetera.", "please_reference_document": "Consulta los documentos a continuación para obtener más información.", diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 8e9cb197a..41409968a 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -175,7 +175,7 @@ "contact_name_exists": "Un contact portant ce nom existe déjà. Veuillez choisir un autre nom.", "contact_support": "Contacter l'assistance", "continue_text": "Continuer", - "contract_warning": "Cette adresse contractuelle a été signalée comme potentiellement frauduleuse. Veuillez traiter avec prudence.", + "contract_warning": "Cette adresse contractuelle a été signalée comme potentiellement frauduleuse. Veuillez procéder avec prudence.", "contractName": "Nom du contrat", "contractSymbol": "Symbole du contrat", "copied_key_to_clipboard": "${key} copiée vers le presse-papier", @@ -437,6 +437,7 @@ "monero_light_theme": "Thème de lumière Monero", "moonpay_alert_text": "Le montant doit être au moins égal à ${minAmount} ${fiatCurrency}", "more_options": "Plus d'options", + "multiple_addresses_detected": "Plusieurs adresses détectées", "mweb_confirmed": "Confirmé MWEB", "mweb_unconfirmed": "Mweb non confirmé", "name": "Nom", @@ -513,6 +514,7 @@ "pin_number": "Numéro PIN", "placeholder_contacts": "Vos contacts apparaîtront ici", "placeholder_transactions": "Vos transactions apparaîtront ici", + "please_choose_one": "Veuillez en choisir un", "please_fill_totp": "Veuillez renseigner le code à 8 chiffres affiché sur votre autre appareil", "please_make_selection": "Merci de faire un choix ci-dessous pour créer ou restaurer votre portefeuille (wallet).", "please_reference_document": "Veuillez vous référer aux documents ci-dessous pour plus d'informations.", diff --git a/res/values/strings_ha.arb b/res/values/strings_ha.arb index 3c870d6f1..c528c58d2 100644 --- a/res/values/strings_ha.arb +++ b/res/values/strings_ha.arb @@ -175,7 +175,7 @@ "contact_name_exists": "An riga an sami lamba tare da wannan sunan. Da fatan za a zaɓi suna daban.", "contact_support": "Tuntuɓi Support", "continue_text": "Ci gaba", - "contract_warning": "An kafa wannan adireshin kwantaragin kwangilar yayin da yuwuwar zamba. Da fatan za a aiwatar da taka tsantsan.", + "contract_warning": "An kafa wannan adireshin kwantaragin kwangilar yayin da yuwuwar zamba. Da fatan za a ci gaba da taka tsantsan.", "contractName": "Sunan Kwangila", "contractSymbol": "Alamar Kwangila", "copied_key_to_clipboard": "An kwafa ${key} a cikin kwafin", @@ -437,6 +437,7 @@ "monero_light_theme": "Jigon Hasken Monero", "moonpay_alert_text": "Darajar adadin dole ne ya zama fiye ko daidai da ${minAmount} ${fiatCurrency}", "more_options": "Ƙarin Zaɓuɓɓuka", + "multiple_addresses_detected": "An gano adiresoshin da aka gano", "mweb_confirmed": "Tabbatar da Mweb", "mweb_unconfirmed": "Myconfired", "name": "Suna", @@ -515,6 +516,7 @@ "pin_number": "Lambar PIN", "placeholder_contacts": "Za a nuna lambobin sadarwar ku anan", "placeholder_transactions": "Za a nuna ma'amalolin ku anan", + "please_choose_one": "Da fatan za a zabi ɗaya", "please_fill_totp": "Da fatan za a cika lambar lambobi 8 da ke yanzu a kan sauran na'urarku", "please_make_selection": "Don Allah zaɓi ƙasa don ƙirƙira ko dawo da kwalinku.", "please_reference_document": "Da fatan za a nemi takaddun da ke ƙasa don ƙarin bayani.", diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index 5ee761ed4..cc1a7c6e1 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -175,7 +175,7 @@ "contact_name_exists": "उस नाम का एक संपर्क पहले से मौजूद है. कृपया कोई भिन्न नाम चुनें.", "contact_support": "सहायता से संपर्क करें", "continue_text": "जारी रहना", - "contract_warning": "इस अनुबंध के पते को संभावित रूप से धोखाधड़ी के रूप में चिह्नित किया गया है। कृपया सावधानी के साथ प्रक्रिया करें।", + "contract_warning": "इस अनुबंध के पते को संभावित रूप से धोखाधड़ी के रूप में चिह्नित किया गया है। कृपया सावधानी के साथ आगे बढ़ें।", "contractName": "अनुबंध का नाम", "contractSymbol": "अनुबंध चिह्न", "copied_key_to_clipboard": "की नकल की ${key} क्लिपबोर्ड पर", @@ -437,6 +437,7 @@ "monero_light_theme": "मोनेरो लाइट थीम", "moonpay_alert_text": "राशि का मूल्य अधिक है या करने के लिए बराबर होना चाहिए ${minAmount} ${fiatCurrency}", "more_options": "और विकल्प", + "multiple_addresses_detected": "कई पते का पता चला", "mweb_confirmed": "MWEB की पुष्टि की", "mweb_unconfirmed": "अपुष्ट MWEB", "name": "नाम", @@ -505,8 +506,8 @@ "paste": "पेस्ट करें", "pause_wallet_creation": "हेवन वॉलेट बनाने की क्षमता फिलहाल रुकी हुई है।", "payment_id": "भुगतान ID: ", - "Payment_was_received": "आपका भुगतान प्राप्त हो गया था।", "payment_was_received": "आपका भुगतान प्राप्त हुआ था।", + "Payment_was_received": "आपका भुगतान प्राप्त हो गया था।", "pending": " (अपूर्ण)", "percentageOf": "${amount} का", "pin_at_top": "शीर्ष पर ${token} पिन करें", @@ -514,6 +515,7 @@ "pin_number": "पिन नंबर", "placeholder_contacts": "आपके संपर्क यहां प्रदर्शित होंगे", "placeholder_transactions": "आपके लेनदेन यहां प्रदर्शित होंगे", + "please_choose_one": "एक का चयन करें", "please_fill_totp": "कृपया अपने दूसरे डिवाइस पर मौजूद 8 अंकों का कोड भरें", "please_make_selection": "कृपया नीचे चयन करें अपना बटुआ बनाएं या पुनर्प्राप्त करें.", "please_reference_document": "कृपया अधिक जानकारी के लिए नीचे दिए गए दस्तावेज़ देखें।", diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index 02bb9960c..9aae5501e 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -175,7 +175,7 @@ "contact_name_exists": "Kontakt s tim imenom već postoji. Odaberite drugo ime.", "contact_support": "Kontaktirajte podršku", "continue_text": "Nastavak", - "contract_warning": "Ova adresa ugovora označena je kao potencijalno lažna. Molimo obradite s oprezom.", + "contract_warning": "Ova adresa ugovora označena je kao potencijalno lažna. Molimo nastavite s oprezom.", "contractName": "Naziv ugovora", "contractSymbol": "Simbol ugovora", "copied_key_to_clipboard": "${key} kopiran u međuspremnik", @@ -437,6 +437,7 @@ "monero_light_theme": "Monero lagana tema", "moonpay_alert_text": "Vrijednost iznosa mora biti veća ili jednaka ${minAmount} ${fiatCurrency}", "more_options": "Više opcija", + "multiple_addresses_detected": "Otkrivene više adresa", "mweb_confirmed": "Potvrđen MWeb", "mweb_unconfirmed": "Nepotvrđeni mWeb", "name": "Ime", @@ -513,6 +514,7 @@ "pin_number": "PIN broj", "placeholder_contacts": "Vaši će kontakti biti prikazani ovdje", "placeholder_transactions": "Vaše će transakcije biti prikazane ovdje", + "please_choose_one": "Molimo odaberite jedan", "please_fill_totp": "Unesite 8-znamenkasti kod koji se nalazi na vašem drugom uređaju", "please_make_selection": "Molimo odaberite opcije niže za izradu novog novčanika ili za oporavak postojećeg.", "please_reference_document": "Molimo pogledajte dokumente ispod za više informacija.", diff --git a/res/values/strings_hy.arb b/res/values/strings_hy.arb index 64b3dc2d8..bc99fda74 100644 --- a/res/values/strings_hy.arb +++ b/res/values/strings_hy.arb @@ -175,7 +175,7 @@ "contact_name_exists": "Այդ անվանման հետ կապ կա արդեն: Խնդրում ենք ընտրել այլ անուն:", "contact_support": "Հետադարձ կապ", "continue_text": "Շարունակել", - "contract_warning": "Պայմանագրի այս հասցեն դրոշմել է որպես հնարավոր կեղծ: Խնդրում ենք զգուշությամբ մշակել:", + "contract_warning": "Պայմանագրի այս հասցեն դրոշմել է որպես հնարավոր կեղծ: Խնդրում ենք զգուշությամբ շարունակեք:", "contractName": "Գործարքի անուն", "contractSymbol": "Գործարքի Նշան", "copied_key_to_clipboard": "${key} պատճենված է տեքստի բուֆերում", @@ -437,6 +437,7 @@ "monero_light_theme": "Monero պայծառ տեսք", "moonpay_alert_text": "Գումարի արժեքը պետք է լինի հավասար կամ ավելի քան ${minAmount} ${fiatCurrency}", "more_options": "Այլ տարբերակներ", + "multiple_addresses_detected": "Հայտնաբերվել են բազմաթիվ հասցեներ", "mweb_confirmed": "Հաստատված MWEB", "mweb_unconfirmed": "Չկարգավորված Mweb", "name": "Անուն", @@ -513,6 +514,7 @@ "pin_number": "Պին-կոդ", "placeholder_contacts": "Ձեր կոնտակտները այստեղ կցուցադրվեն", "placeholder_transactions": "Ձեր գործարքները այստեղ կցուցադրվեն", + "please_choose_one": "Խնդրում ենք ընտրել մեկը", "please_fill_totp": "Խնդրում ենք լրացնել 8-նիշյա կոդը, որը կա ձեր այլ սարքի վրա", "please_make_selection": "Խնդրում ենք ընտրություն կատարել ներքևում ձեր դրամապանակը ստեղծելու կամ վերականգնելու համար", "please_reference_document": "Խնդրում ենք դիտել ներքևի փաստաթղթերը ավելի շատ տեղեկատվության համար", diff --git a/res/values/strings_id.arb b/res/values/strings_id.arb index 6f3aaf898..1458d69ef 100644 --- a/res/values/strings_id.arb +++ b/res/values/strings_id.arb @@ -175,7 +175,7 @@ "contact_name_exists": "Kontak dengan nama tersebut sudah ada. Silakan pilih nama lain.", "contact_support": "Hubungi Dukungan", "continue_text": "Lanjutkan", - "contract_warning": "Alamat kontrak ini telah ditandai sebagai berpotensi curang. Silakan memproses dengan hati -hati.", + "contract_warning": "Alamat kontrak ini telah ditandai sebagai berpotensi curang. Silakan lanjutkan dengan hati -hati.", "contractName": "Nama Kontrak", "contractSymbol": "Simbol Kontrak", "copied_key_to_clipboard": "Kunci ${key} disalin ke Clipboard", @@ -437,6 +437,7 @@ "monero_light_theme": "Tema Cahaya Monero", "moonpay_alert_text": "Nilai jumlah harus lebih atau sama dengan ${minAmount} ${fiatCurrency}", "more_options": "Opsi Lainnya", + "multiple_addresses_detected": "Banyak alamat terdeteksi", "mweb_confirmed": "Mengkonfirmasi mWeb", "mweb_unconfirmed": "MWEB yang belum dikonfirmasi", "name": "Nama", @@ -515,6 +516,7 @@ "pin_number": "Nomor PIN", "placeholder_contacts": "Kontak Anda akan ditampilkan di sini", "placeholder_transactions": "Transaksi Anda akan ditampilkan di sini", + "please_choose_one": "Pilih satu", "please_fill_totp": "Harap isi kode 8 digit yang ada di perangkat Anda yang lain", "please_make_selection": "Silahkan membuat pilihan di bawah ini untuk membuat atau memulihkan dompet Anda.", "please_reference_document": "Silakan referensikan dokumen di bawah ini untuk informasi lebih lanjut.", diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index 4e9972f3f..0ec8de33a 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -25,31 +25,31 @@ "address_book": "Rubrica indirizzi", "address_book_menu": "Rubrica indirizzi", "address_detected": "Indirizzo rilevato", - "address_from_domain": "Questo indirizzo è da ${domain} in poi Unstoppable Domains", - "address_from_yat": "Questo indirizzo è da ${emoji} in poi Yat", - "address_label": "Address label", + "address_from_domain": "Questo indirizzo è da ${domain} su Unstoppable Domains", + "address_from_yat": "Questo indirizzo è da ${emoji} su Yat", + "address_label": "Etichetta indirizzo", "address_remove_contact": "Rimuovi contatto", "address_remove_content": "Sei sicuro di voler eliminare il contatto selezionato?", "addresses": "Indirizzi", "advanced_settings": "Impostazioni avanzate", - "aggressive": "Fervente", - "agree": "d'accordo", + "aggressive": "Aggressivo", + "agree": "Conferma", "agree_and_continue": "Accetta e continua", "agree_to": "Creando un account accetti il ​​", "alert_notice": "Avviso", "all": "TUTTO", "all_coins": "Tutte le monete", - "all_trades": "Svi obrti", - "all_transactions": "Sve transakcije", + "all_trades": "Tutti gli scambi", + "all_transactions": "Tutte le transazioni", "alphabetical": "Alfabetico", "already_have_account": "Hai già un account?", - "always": "sempre", - "amount": "Ammontare: ", + "always": "Sempre", + "amount": "Importo: ", "amount_is_below_minimum_limit": "Il saldo dopo le commissioni sarebbe inferiore all'importo minimo necessario per lo scambio (${min})", - "amount_is_estimate": "L'ammontare da ricevere è una stima", - "amount_is_guaranteed": "L'ammontare da ricevere è fisso", + "amount_is_estimate": "L'importo da ricevere è una stima", + "amount_is_guaranteed": "L'importo da ricevere è fisso", "and": "e", - "anonpay_description": "Genera ${type}. Il destinatario può ${method} con qualsiasi criptovaluta supportata e riceverai fondi in questo portafoglio.", + "anonpay_description": "Genera ${type}. Il destinatario può ${method} con qualsiasi criptovaluta supportata, e riceverai fondi in questo portafoglio.", "apk_update": "Aggiornamento APK", "approve": "Approvare", "arrive_in_this_address": "${currency} ${tag}arriverà a questo indirizzo", @@ -61,11 +61,11 @@ "auth_store_incorrect_password": "PIN non corretto", "authenticated": "Autenticato", "authentication": "Autenticazione", - "auto_generate_addresses": "Auto Genera indirizzi", + "auto_generate_addresses": "Genera automaticamente indirizzi", "auto_generate_subaddresses": "Genera automaticamente sottindirizzi", "automatic": "Automatico", "available_balance": "Saldo Disponibile", - "available_balance_description": "Il saldo disponibile è il saldo totale meno i fondi congelati. I fondi congelati sono fondi che sono stati inviati ma non sono ancora stati confermati.", + "available_balance_description": "I “Saldo Disponibile” o “Saldo Confermato” sono fondi che possono essere spesi immediatamente. Se i fondi appaiono nel saldo sottostante ma non nel saldo soprastante, allora aspetta un paio di minuti per i fondi in arrivo per ottenere maggiori conferme di rete. Dopo aver ottenuto più conferme, saranno spendibili.", "avg_savings": "Risparmio medio", "awaitDAppProcessing": "Attendi gentilmente che la dApp termini l'elaborazione.", "awaiting_payment_confirmation": "In attesa di conferma del pagamento", @@ -73,38 +73,38 @@ "backup": "Backup", "backup_file": "Backup file", "backup_password": "Backup password", - "balance": "Bilancia", - "balance_page": "Pagina di equilibrio", - "bill_amount": "Importo della fattura", + "balance": "Saldo", + "balance_page": "Pagina di saldo", + "bill_amount": "Importo della ricevuta", "billing_address_info": "Se ti viene richiesto un indirizzo di fatturazione, fornisci il tuo indirizzo di spedizione", "biometric_auth_reason": "Scansiona la tua impronta per autenticarti", - "bitcoin_dark_theme": "Tema oscuro di Bitcoin", - "bitcoin_light_theme": "Tema luce Bitcoin", + "bitcoin_dark_theme": "Tema scuro Bitcoin", + "bitcoin_light_theme": "Tema chiaro Bitcoin", "bitcoin_payments_require_1_confirmation": "I pagamenti in bitcoin richiedono 1 conferma, che può richiedere 20 minuti o più. Grazie per la vostra pazienza! Riceverai un'e-mail quando il pagamento sarà confermato.", "block_height": "Altezza del blocco", "block_remaining": "1 blocco rimanente", "Blocks_remaining": "${status} Blocchi Rimanenti", "bluetooth": "Bluetooth", - "bright_theme": "Colorato", + "bright_theme": "Chiaro", "bump_fee": "Commissione per bump", - "buy": "Comprare", + "buy": "Compra", "buy_alert_content": "Attualmente supportiamo solo l'acquisto di Bitcoin, Ethereum, Litecoin e Monero. Crea o passa al tuo portafoglio Bitcoin, Ethereum, Litecoin o Monero.", "buy_bitcoin": "Acquista Bitcoin", "buy_now": "Acquista ora", "buy_provider_unavailable": "Provider attualmente non disponibile.", "buy_with": "Acquista con", "by_cake_pay": "da Cake Pay", - "cake_2fa_preset": "Torta 2FA Preset", - "cake_dark_theme": "Tema oscuro della torta", - "cake_pay_account_note": "Iscriviti con solo un indirizzo email per vedere e acquistare le carte. Alcune sono anche disponibili con uno sconto!", + "cake_2fa_preset": "Preset Cake 2FA", + "cake_dark_theme": "Tema scuro Cake", + "cake_pay_account_note": "Iscriviti solamente con un indirizzo email per vedere e acquistare le carte. Alcune sono anche disponibili con uno sconto!", "cake_pay_learn_more": "Acquista e riscatta istantaneamente carte regalo nell'app!\nScorri da sinistra a destra per saperne di più.", - "cake_pay_save_order": "La carta deve essere inviata alla tua e-mail entro 1 giorno lavorativo \n Salva il tuo ID ordine:", - "cake_pay_subtitle": "Acquista carte prepagate in tutto il mondo e carte regalo", - "cake_pay_web_cards_subtitle": "Acquista carte prepagate e carte regalo in tutto il mondo", + "cake_pay_save_order": "La carta deve essere inviata alla tua e-mail entro 1 giorno lavorativo \n Salva l'ID del tuo ordine:", + "cake_pay_subtitle": "Acquista carte prepagate e carte regalo internazionali", + "cake_pay_web_cards_subtitle": "Acquista carte prepagate e carte regalo internazionali", "cake_pay_web_cards_title": "Carte Web Cake Pay", "cake_seeds_save_disclaimer": "Si prega di salvare queste parole in un posto sicuro! Avrai bisogno di queste parole per ripristinare il portafoglio su un nuovo dispositivo.", "cake_wallet": "Cake Wallet", - "cakepay_confirm_no_vpn": "Conferma che non sto usando un proxy o una VPN", + "cakepay_confirm_no_vpn": "Confermo che non sto usando una proxy o una VPN", "cakepay_confirm_purchase": "Conferma l'acquisto", "cakepay_confirm_terms_agreed": "Accetto i termini e le condizioni presentati qui:", "cakepay_confirm_voided_refund": "Capisco che i tentativi di rimborso da un paese limitato annullano qualsiasi rimborso", @@ -118,18 +118,18 @@ "cards": "Carte", "chains": "Catene", "change": "Cambia", - "change_backup_password_alert": "I precedenti file di backup non potranno essere importati con la nuova password di backup. La nuova password di backup verrà usata soltanto per i nuovi file di backup. Sei sicuro di voler cambiare la tua password di backup?", + "change_backup_password_alert": "I tuoi file di backup precedenti non potranno essere importati con la nuova password di backup. La nuova password di backup verrà usata soltanto per i nuovi file di backup. Sei sicuro di voler cambiare la tua password di backup?", "change_currency": "Cambia Valuta", "change_current_node": "Sei sicuro di voler cambiare il nodo corrente con ${node}?", "change_current_node_title": "Cambia nodo corrente", - "change_exchange_provider": "Provider di swap di cambiamento", + "change_exchange_provider": "Cambia Swap Provider", "change_language": "Cambia lingua", "change_language_to": "Cambiare lingua in ${language}?", "change_password": "Cambia password", - "change_rep": "Cambia rappresentante", - "change_rep_message": "Sei sicuro di voler cambiare rappresentante?", + "change_rep": "Cambia Rappresentante", + "change_rep_message": "Sei sicuro di voler cambiare rappresentanti?", "change_rep_successful": "Rappresentante modificato con successo", - "change_selected_exchanges": "Modificare gli scambi selezionati", + "change_selected_exchanges": "Modificare gli Exchange selezionati", "change_wallet_alert_content": "Sei sicuro di voler cambiare il portafoglio attuale con ${wallet_name}?", "change_wallet_alert_title": "Cambia portafoglio attuale", "choose_a_payment_method": "Scegli un metodo di pagamento", @@ -140,33 +140,32 @@ "choose_derivation": "Scegli la derivazione del portafoglio", "choose_from_available_options": "Scegli tra le opzioni disponibili:", "choose_one": "Scegline uno", - "choose_relay": "Scegli un relè da utilizzare", - "choose_wallet_currency": "Gentilmente scegli la moneta del portafoglio:", + "choose_relay": "Scegli un relay da utilizzare", + "choose_wallet_currency": "Scegli la valuta del portafoglio:", "choose_wallet_group": "Scegli il gruppo del portafoglio", "clear": "Pulisci", - "clearnet_link": "Collegamento Clearnet", - "close": "Chiudere", - "coin_control": "Controllo monete (opzionale)", - "cold_or_recover_wallet": "Aggiungi un portafoglio di sola lettura da Cupcake o un portafoglio freddo o recupera un portafoglio di carta", + "clearnet_link": "Link Clearnet", + "close": "Chiudi", + "coin_control": "Controllo valute (opzionale)", + "cold_or_recover_wallet": "Aggiungi un portafoglio di sola lettura da Cupcake o un cold wallet o recupera un portafoglio di carta", "color_theme": "Colore tema", "commit_transaction_amount_fee": "Invia transazione\nAmmontare: ${amount}\nCommissione: ${fee}", "confirm": "Conferma", "confirm_delete_template": "Questa azione cancellerà questo modello. Desideri continuare?", "confirm_delete_wallet": "Questa azione cancellerà questo portafoglio. Desideri continuare?", - "confirm_fee_deduction": "Conferma la detrazione delle commissioni", - "confirm_fee_deduction_content": "Accetti di detrarre la commissione dall'output?", + "confirm_fee_deduction": "Conferma detrazione delle commissioni", + "confirm_fee_deduction_content": "Accetti la detrazione della commissione dall'output?", "confirm_passphrase": "Conferma passphrase", "confirm_sending": "Conferma l'invio", - "confirm_silent_payments_switch_node": "Il tuo nodo corrente non supporta i pagamenti silenziosi \\ ncake Wallet passerà a un nodo compatibile, solo per la scansione", + "confirm_silent_payments_switch_node": "Il tuo nodo corrente non supporta Silent Payments\\n\\nCake Wallet passerà a un nodo compatibile durante la scansione.", "confirmations": "Conferme", - "confirmed": "Saldo confermato", + "confirmed": "Saldo Confermato", "confirmed_tx": "Confermato", - "congratulation": "Congratulazioni!", "congratulations": "Congratulazioni!", "connect_an_existing_yat": "Collegare un Yat esistente", "connect_yats": "Connetti Yats", - "connect_your_hardware_wallet": "Collega il tuo portafoglio hardware con Bluetooth o USB", - "connect_your_hardware_wallet_ios": "Collega il tuo portafoglio hardware con Bluetooth", + "connect_your_hardware_wallet": "Collega il tuo portafoglio hardware tramite Bluetooth o USB", + "connect_your_hardware_wallet_ios": "Collega il tuo portafoglio hardware tramite Bluetooth", "connection_sync": "Connessione e sincronizzazione", "connectWalletPrompt": "Collega il tuo portafoglio con WalletConnect per effettuare transazioni", "contact": "Contatta", @@ -176,38 +175,38 @@ "contact_name_exists": "Esiste già un contatto con quel nome. Scegli un nome diverso.", "contact_support": "Contatta l'assistenza", "continue_text": "Continua", - "contract_warning": "Questo indirizzo del contratto è stato contrassegnato come potenzialmente fraudolento. Si prega di elaborare con cautela.", - "contractName": "Nome del contratto", - "contractSymbol": "Simbolo del contratto", + "contract_warning": "Questo indirizzo del contratto è stato contrassegnato come potenzialmente fraudolento. Si prega di procedere con cautela.", + "contractName": "Nome Contratto", + "contractSymbol": "Simbolo del Contratto", "copied_key_to_clipboard": " ${key} copiata negli Appunti", "copied_to_clipboard": "Copiato negli Appunti", "copy": "Copia", "copy_address": "Copia Indirizzo", "copy_id": "Copia ID", "copyWalletConnectLink": "Copia il collegamento WalletConnect dalla dApp e incollalo qui", - "corrupted_seed_notice": "I file per questo portafoglio sono corrotti e non sono in grado di essere aperti. Visualizza la frase del seme, salvala e ripristina il portafoglio.\n\nSe il valore è vuoto, il seme non è stato in grado di essere recuperato correttamente.", + "corrupted_seed_notice": "I file per questo portafoglio sono corrotti e non è possibile aprirli. Visualizza la frase del seme, salvala e ripristina il portafoglio.\n\nSe il valore è vuoto, non è stato possibile recuperare correttamente il seme.", "countries": "Paesi", "create_account": "Crea account", "create_backup": "Crea backup", "create_donation_link": "Crea un link per la donazione", - "create_invoice": "Crea fattura", - "create_new": "Genera nuovo Portafoglio", + "create_invoice": "Crea ricevuta", + "create_new": "Crea nuovo Portafoglio", "create_new_account": "Crea nuovo account", "create_new_seed": "Crea nuovo seme", "creating_new_wallet": "Creazione nuovo portafoglio", "creating_new_wallet_error": "Errore: ${description}", "creation_date": "Data di creazione", - "custom": "personalizzato", - "custom_drag": "Custom (Hold and Drag)", + "custom": "Personalizza", + "custom_drag": "Personalizza (Tieni e Trascina)", "custom_redeem_amount": "Importo di riscatto personalizzato", "custom_value": "Valore personalizzato", "dark_theme": "Scuro", "debit_card": "Carta di debito", - "debit_card_terms": "L'archiviazione e l'utilizzo del numero della carta di pagamento (e delle credenziali corrispondenti al numero della carta di pagamento) in questo portafoglio digitale sono soggetti ai Termini e condizioni del contratto applicabile con il titolare della carta con l'emittente della carta di pagamento, come in vigore da tempo al tempo.", + "debit_card_terms": "L'archiviazione e l'utilizzo del numero della carta di pagamento (e delle credenziali corrispondenti al numero della carta di pagamento) in questo portafoglio digitale sono soggetti ai Termini e condizioni del contratto applicabile con il titolare della carta con l'emittente della carta di pagamento, come in vigore di tanto in tanto.", "decimal_places_error": "Troppe cifre decimali", "decimals_cannot_be_zero": "Il decimale token non può essere zero.", "default_buy_provider": "Provider di acquisto predefinito", - "default_sell_provider": "Fornitore di vendita predefinito", + "default_sell_provider": "Provider di vendita predefinito", "delete": "Elimina", "delete_account": "Elimina account", "delete_wallet": "Elimina portafoglio", @@ -219,46 +218,46 @@ "description": "Descrizione", "destination_tag": "Tag destinazione:", "dfx_option_description": "Acquista Crypto con EUR & CHF. Per i clienti al dettaglio e aziendali in Europa", - "didnt_get_code": "Non ricevi il codice?", + "didnt_get_code": "Non hai ricevuto il codice?", "digit_pin": "-cifre PIN", "digital_and_physical_card": "carta di debito prepagata digitale e fisica", - "disable": "disattivare", - "disable_bulletin": "Disabilita Bollettino dello stato del servizio", + "disable": "Disabilita", + "disable_bulletin": "Disabilita bollettino dello stato del servizio", "disable_buy": "Disabilita l'azione di acquisto", "disable_cake_2fa": "Disabilita Cake 2FA", "disable_exchange": "Disabilita scambio", - "disable_fee_api_warning": "Disattivando questo, i tassi delle commissioni potrebbero essere inaccurati in alcuni casi, quindi potresti finire in eccesso o sostenere le commissioni per le transazioni", + "disable_fee_api_warning": "Disattivando quest'opzione, i tassi delle commissioni potrebbero essere inaccurati in alcuni casi, quindi potresti finire per pagare troppo o troppo poco le commissioni per le tue transazioni", "disable_fiat": "Disabilita fiat", "disable_sell": "Disabilita l'azione di vendita", - "disable_trade_option": "Disabilita l'opzione commerciale", + "disable_trade_option": "Disabilita l'opzione di scambio", "disableBatteryOptimization": "Disabilita l'ottimizzazione della batteria", - "disableBatteryOptimizationDescription": "Vuoi disabilitare l'ottimizzazione della batteria per far funzionare la sincronizzazione in background più libera e senza intoppi?", + "disableBatteryOptimizationDescription": "Vuoi disabilitare l'ottimizzazione della batteria per migliorare la sincronizzazione in background?", "disabled": "Disabilitato", "discount": "Risparmia ${value}%", "display_settings": "Impostazioni di visualizzazione", "displayable": "Visualizzabile", "do_not_have_enough_gas_asset": "Non hai abbastanza ${currency} per effettuare una transazione con le attuali condizioni della rete blockchain. Hai bisogno di più ${currency} per pagare le commissioni della rete blockchain, anche se stai inviando una risorsa diversa.", "do_not_send": "Non inviare", - "do_not_share_warning_text": "Non condividerli con nessun altro, incluso il supporto.\n\nI tuoi fondi possono e saranno rubati!", + "do_not_share_warning_text": "Non condividerli con nessun altro, incluso il supporto.\n\nI tuoi fondi possono essere e saranno rubati!", "do_not_show_me": "Non mostrarmelo di nuovo", - "domain_looks_up": "Ricerche di domini", - "donation_link_details": "Dettagli del collegamento alla donazione", + "domain_looks_up": "Cerca domini", + "donation_link_details": "Dettagli del link di donazione", "e_sign_consent": "Consenso alla firma elettronica", "edit": "Modifica", "edit_backup_password": "Modifica Password Backup", - "edit_node": "Modifica nodo", - "edit_token": "Modifica token", + "edit_node": "Modifica Nodo", + "edit_token": "Modifica Token", "electrum_address_disclaimer": "Generiamo nuovi indirizzi ogni volta che ne utilizzi uno, ma gli indirizzi precedenti continuano a funzionare", "email_address": "Indirizzo e-mail", - "enable": "Abilitare", - "enable_mempool_api": "API di Mempool per commissioni e date accurate", - "enable_replace_by_fee": "Abilita sostituzione per fee", - "enable_silent_payments_scanning": "Inizia a scansionare i pagamenti silenziosi, fino a raggiungere la punta", + "enable": "Abilita", + "enable_mempool_api": "API Mempool per commissioni e date accurate", + "enable_replace_by_fee": "Abilita Replace-By-Fee", + "enable_silent_payments_scanning": "Inizia a scansionare le transazioni inviate al tuo indirizzo Silent Payments", "enabled": "Abilitato", "enter_amount": "Inserisci importo", "enter_backup_password": "Inserisci la password di backup qui", "enter_code": "Inserisci codice", - "enter_seed_phrase": "Inserisci la tua frase di semi", + "enter_seed_phrase": "Inserisci la tua frase del seme", "enter_totp_code": "Inserisci il codice TOTP.", "enter_wallet_password": "Immettere la password del portafoglio", "enter_your_note": "Inserisci la tua nota…", @@ -268,22 +267,22 @@ "enterWalletConnectURI": "Inserisci l'URI di WalletConnect", "error": "Errore", "error_dialog_content": "Oops, abbiamo ricevuto qualche errore.\n\nSi prega di inviare il rapporto di errore al nostro team di supporto per migliorare l'applicazione.", - "error_text_account_name": "Il nome del conto può contenere solo lettere, numeri\ne deve avere una lunghezza compresa tra 1 e 15 caratteri", - "error_text_address": "L'indirizzo del Portafoglio deve corrispondere alla tipologia\ndi criptovaluta", - "error_text_amount": "L'ammontare può contenere solo numeri", - "error_text_contact_name": "Il nome del Contatto non può contenere i simboli ` , ' \" \ne deve avere una lunghezza compresa tra 1 e 32 caratteri", + "error_text_account_name": "Il nome dell'account può contenere solo lettere, numeri\ne deve avere una lunghezza compresa tra 1 e 15 caratteri", + "error_text_address": "L'indirizzo del portafoglio deve corrispondere alla tipologia\ndi criptovaluta", + "error_text_amount": "L'importo può contenere solo numeri", + "error_text_contact_name": "Il nome del contatto non può contenere i simboli ` , ' \" \ne deve avere una lunghezza compresa tra 1 e 32 caratteri", "error_text_crypto_currency": "Il numero delle cifre decimali\ndeve essere inferiore o uguale a 12", - "error_text_fiat": "L'ammontare non può eccedere il saldo dispoinibile.\nIl numero di cifre decimali deve essere inferiore o uguale a 2", - "error_text_input_above_maximum_limit": "L'ammontare è superiore al massimo", - "error_text_input_below_minimum_limit": "L'ammontare è inferiore al minimo", - "error_text_keys": "Le chiavi del portafoglio possono contenere solo 64 caratteri in hex", + "error_text_fiat": "L'importo non può eccedere il saldo disponibile.\nIl numero di cifre decimali deve essere inferiore o uguale a 2", + "error_text_input_above_maximum_limit": "L'importo è superiore al massimo", + "error_text_input_below_minimum_limit": "L'importo è inferiore al minimo", + "error_text_keys": "Le chiavi del portafoglio possono contenere solo 64 caratteri esadecimali (hex)", "error_text_limits_loading_failed": "Lo scambio per ${provider} non è stato creato. Caricamento dei limiti fallito", - "error_text_maximum_limit": "Lo scambio per ${provider} non è stato creato. L'ammontare è superiore al massimo: ${max} ${currency}", - "error_text_minimal_limit": "Lo scambio per ${provider} non è stato creato. L'ammontare è inferiore al minimo: ${min} ${currency}", - "error_text_node_address": "Gentilmente inserisci un indirizzo iPv4", + "error_text_maximum_limit": "Lo scambio per ${provider} non è stato creato. L'importo è superiore al massimo: ${max} ${currency}", + "error_text_minimal_limit": "Lo scambio per ${provider} non è stato creato. L'importo è inferiore al minimo: ${min} ${currency}", + "error_text_node_address": "Gentilmente inserisci un indirizzo IPv4", "error_text_node_port": "La porta del nodo può contenere solo numeri compresi tra 0 e 65535", "error_text_node_proxy_address": "Inserisci :, ad esempio 127.0.0.1:9050", - "error_text_payment_id": "L'ID del pagamento può contenere solo da 16 a 64 caratteri in esadecimale", + "error_text_payment_id": "L'ID del pagamento può contenere solo da 16 a 64 caratteri esadecimali (hex)", "error_text_subaddress_name": "Il nome del sottoindirizzo non può contenere i simboli ` , ' \" \ne deve avere una lunghezza compresa tra 1 e 20 caratteri", "error_text_template": "Il nome del modello e l'indirizzo non possono contenere i simboli ` , ' \" \ne devono avere una lunghezza compresa tra 1 e 106 caratteri", "error_text_wallet_name": "Il nome del portafoglio può contenere solo lettere, numeri, _ - simboli\ne deve avere una lunghezza compresa tra 1 e 33 caratteri", @@ -293,25 +292,25 @@ "estimated": "Stimato", "estimated_new_fee": "Nuova commissione stimata", "estimated_receive_amount": "Importo di ricezione stimato", - "etherscan_history": "Storia Etherscan", + "etherscan_history": "Cronologia Etherscan", "event": "Evento", "events": "Eventi", "exchange": "Scambio", - "exchange_incorrect_current_wallet_for_xmr": "Se vuoi scambiare XMR dal tuo portafoglio di torta Monero Balance, si prega di passare prima al portafoglio Monero.", + "exchange_incorrect_current_wallet_for_xmr": "Se vuoi scambiare XMR dal tuo portafoglio Cake Wallet, devi prima passare al portafoglio Monero.", "exchange_new_template": "Nuovo modello", "exchange_provider_unsupported": "${providerName} non è più supportato!", - "exchange_result_confirm": "Cliccando su Conferma, invierai ${fetchingLabel} ${from} dal tuo portafoglio chiamato ${walletName} all'indirizzo mostrato qui in basso. O puoi inviare dal tuo portafoglio esterno all'indirizzo/codice QR mostrato in basso.\n\nGentilmente clicca su Conferma per continuare o torna indietro per cambiare l'ammontare.", - "exchange_result_description": "Devi inviare un minimo di ${fetchingLabel} ${from} all'indirizzo mostrato nella pagina seguente. Se invii un ammontare inferiore a ${fetchingLabel} ${from} la conversione potrebbe non andare a buon fine e l'indirizzo potrebbe non essere rimborsato.", - "exchange_result_write_down_ID": "*Gentilmente fai una copia o trascrivi il tuo ID mostrato in alto.", - "exchange_result_write_down_trade_id": "Per favore fai una copia o trascrivi l'ID dello scambio per continuare.", - "exchange_sync_alert_content": "Gentilmente aspetta che il tuo portafoglio sia sincronizzato", - "expired": "Scaduta", + "exchange_result_confirm": "Cliccando su Conferma, invierai ${fetchingLabel} ${from} dal tuo portafoglio chiamato ${walletName} all'indirizzo mostrato qui sotto. Oppure puoi inviare dal tuo portafoglio esterno all'indirizzo/codice QR mostrato in basso.\n\nClicca su Conferma per continuare, o torna indietro per cambiare l'importo.", + "exchange_result_description": "Devi inviare un minimo di ${fetchingLabel} ${from} all'indirizzo mostrato nella pagina seguente. Se invii un importo inferiore a ${fetchingLabel} ${from} la conversione potrebbe non andare a buon fine, e l'indirizzo potrebbe non essere rimborsato.", + "exchange_result_write_down_ID": "*Copia o trascrivi il tuo ID mostrato in alto.", + "exchange_result_write_down_trade_id": "Copia o trascrivi l'ID dello scambio per continuare.", + "exchange_sync_alert_content": "Gentilmente aspetta che il tuo portafoglio venga sincronizzato", + "expired": "Scaduto", "expires": "Scade", "expiresOn": "Scade il", "expiry_and_validity": "Scadenza e validità", "export_backup": "Esporta backup", - "export_logs": "Registri di esportazione", - "export_outputs": "Output di esportazione", + "export_logs": "Esporta log", + "export_outputs": "Esporta output", "extra_id": "Extra ID:", "extracted_address_content": "Invierai i tuoi fondi a\n${recipient_name}", "failed_authentication": "Autenticazione fallita. ${state_error}", @@ -321,94 +320,94 @@ "fee_rate": "Tasso di commissione", "fetching": "Recupero", "fiat_api": "Fiat API", - "fiat_balance": "Equilibrio fiat", + "fiat_balance": "Saldo fiat", "field_required": "Questo campo è obbligatorio", "fill_code": "Compila il codice di verifica fornito alla tua email", - "filter_by": "Filtrirati po", + "filter_by": "Filtra per", "first_wallet_text": "Portafoglio fantastico per Monero, Bitcoin, Ethereum, Litecoin, e Haven", "fixed_pair_not_supported": "Questa coppia fissa non è supportata con i servizi di swap selezionati", "fixed_rate": "Tasso fisso", - "fixed_rate_alert": "Potrai inserire l'ammontare da ricevere quando il tasso è fisso. Vuoi cambiare alla modalità tasso fisso?", + "fixed_rate_alert": "Potrai inserire l'importo da ricevere quando il tasso è fisso. Vuoi cambiare alla modalità tasso fisso?", "forgot_password": "Password dimenticata", - "freeze": "Congelare", + "freeze": "Congela", "frequently_asked_questions": "Domande frequenti", "frozen": "Congelato", - "frozen_balance": "Equilibrio congelato", + "frozen_balance": "Saldo Congelato", "full_balance": "Saldo Completo", - "gas_exceeds_allowance": "Il gas richiesto dalla transazione supera l'indennità.", + "gas_exceeds_allowance": "Il Gas richiesto dalla transazione supera il limite consentito.", "generate_name": "Genera nome", "generating_gift_card": "Generazione carta regalo", "get_a": "Prendi un ", "get_card_note": "che puoi ricaricare con le valute digitali. Non sono necessarie informazioni aggiuntive!", "get_your_yat": "Ottieni il tuo Yat", "gift_card_amount": "Importo del buono regalo", - "gift_card_balance_note": "Le carte regalo con un saldo residuo appariranno qui", + "gift_card_balance_note": "Le carte regalo con saldo residuo appariranno qui", "gift_card_is_generated": "Il buono regalo è stato generato", "gift_card_number": "Numero del buono regalo", "gift_card_redeemed_note": "Le carte regalo che hai riscattato appariranno qui", "gift_cards": "Carte regalo", - "gift_cards_unavailable": "Le carte regalo sono disponibili per l'acquisto solo tramite Monero, Bitcoin e Litecoin in questo momento", + "gift_cards_unavailable": "Le carte regalo sono attualmente disponibili per l'acquisto solo tramite Monero, Bitcoin e Litecoin", "got_it": "Ho capito", "gross_balance": "Saldo lordo", - "group_by_type": "Gruppo per tipo", - "haven_app": "Haven by Cake Wallet", + "group_by_type": "Raggruppa per tipo", + "haven_app": "Haven di Cake Wallet", "haven_app_wallet_text": "Portafoglio fantastico per Haven", "help": "aiuto", "hidden_addresses": "Indirizzi nascosti", "hidden_balance": "Saldo Nascosto", - "hide": "Nascondere", + "hide": "Nascondi", "hide_details": "Nascondi dettagli", "high_contrast_theme": "Tema ad alto contrasto", "home_screen_settings": "Impostazioni della schermata iniziale", "how_to_use": "Come usare", "how_to_use_card": "Come usare questa carta", "id": "ID: ", - "if_you_dont_see_your_device": "Se non vedi il tuo dispositivo sopra, assicurati che il tuo libro mastro sia sveglio e sbloccato!", - "ignor": "Ignorare", - "import": "Importare", + "if_you_dont_see_your_device": "Se non vedi il tuo dispositivo sopra, assicurati che il tuo Ledger sia attivo e sbloccato!", + "ignor": "Ignora", + "import": "Importa", "importNFTs": "Importa NFT", "in_store": "In negozio", "incoming": "In arrivo", "incorrect_seed": "Il testo inserito non è valido.", - "incorrect_seed_option": "Errato. Per favore riprova", + "incorrect_seed_option": "Errato. Si prega di riprovare", "incorrect_seed_option_back": "Errato. Assicurati che il tuo seme venga salvato correttamente e riprova.", "inputs": "Input", "insufficient_funds_for_tx": "Fondi insufficienti per eseguire correttamente la transazione.", - "insufficient_lamport_for_tx": "Non hai abbastanza SOL per coprire la transazione e la sua quota di transazione. Si prega di aggiungere più SOL al tuo portafoglio o ridurre l'importo SOL che stai inviando.", - "insufficient_lamports": "Non hai abbastanza SOL per coprire la transazione e la sua quota di transazione. Hai bisogno di almeno ${solValueNeeded} sol. Si prega di aggiungere più SOL al tuo portafoglio o ridurre l'importo SOL che stai inviando", - "insufficientFundsForRentError": "Non hai abbastanza SOL per coprire la tassa di transazione e l'affitto per il conto. Si prega di aggiungere più SOL al tuo portafoglio o ridurre l'importo SOL che stai inviando", - "introducing_cake_pay": "Presentazione di Cake Pay!", + "insufficient_lamport_for_tx": "Non hai abbastanza SOL per coprire la transazione e la sua quota di transazione. Aggiungi più SOL al tuo portafoglio, o riduci l'importo di SOL che stai inviando.", + "insufficient_lamports": "Non hai abbastanza SOL per coprire la transazione e la sua quota di transazione. Hai bisogno di almeno ${solValueNeeded} SOL. Aggiungi più SOL al tuo portafoglio, o riduci l'importo di SOL che stai inviando", + "insufficientFundsForRentError": "Non hai abbastanza SOL per coprire la tassa di transazione e l'affitto per il conto. Aggiungi più SOL al tuo portafoglio, o riduci l'importo di SOL che stai inviando", + "introducing_cake_pay": "Vi presentiamo Cake Pay!", "invalid_input": "Inserimento non valido", "invalid_password": "Password non valida", - "invoice_details": "Dettagli della fattura", + "invoice_details": "Dettagli della ricevuta", "is_percentage": "è", - "keys": "Tasti", + "keys": "Chiavi", "last_30_days": "Ultimi 30 giorni", - "learn_more": "Impara di più", - "ledger_connection_error": "Impossibile connettersi al libro mastro. Per favore riprova.", - "ledger_error_device_locked": "Il libro mastro è bloccato", + "learn_more": "Scopri di più", + "ledger_connection_error": "Impossibile connettersi al Ledger. Si prega di riprovare.", + "ledger_error_device_locked": "Il Ledger è bloccato", "ledger_error_tx_rejected_by_user": "Transazione rifiutata sul dispositivo", - "ledger_error_wrong_app": "Assicurati di aprire l'app giusta sul libro mastro", - "ledger_please_enable_bluetooth": "Si prega di consentire al Bluetooth di rilevare il libro mastro", - "legacy": "Eredità", - "light_theme": "Bianco", + "ledger_error_wrong_app": "Assicurati di aver aperto l'app giusta sul Ledger", + "ledger_please_enable_bluetooth": "Abilita il Bluetooth per rilevare il tuo Ledger", + "legacy": "Legacy", + "light_theme": "Chiaro", "litecoin_enable_mweb_sync": "Abilita la scansione MWeb", "litecoin_mweb": "MWeb", "litecoin_mweb_always_scan": "Imposta MWeb per scansionare sempre", "litecoin_mweb_description": "MWeb è un nuovo protocollo che porta transazioni più veloci, più economiche e più private a Litecoin", - "litecoin_mweb_dismiss": "Congedare", + "litecoin_mweb_dismiss": "Chiudi", "litecoin_mweb_display_card": "Mostra la scheda MWeb", - "litecoin_mweb_enable": "Abilita mWeb", + "litecoin_mweb_enable": "Abilita MWeb", "litecoin_mweb_enable_later": "È possibile scegliere di abilitare nuovamente MWeb nelle impostazioni di visualizzazione.", - "litecoin_mweb_logs": "Registri mWeb", + "litecoin_mweb_logs": "Registri MWeb", "litecoin_mweb_node": "Nodo MWeb", - "litecoin_mweb_pegin": "Piolo in", - "litecoin_mweb_pegout": "PEG OUT", + "litecoin_mweb_pegin": "Peg In", + "litecoin_mweb_pegout": "Peg Out", "litecoin_mweb_scanning": "Scansione MWeb", "litecoin_mweb_settings": "Impostazioni MWeb", - "litecoin_mweb_warning": "L'uso di MWeb inizialmente scaricherà ~ 600 MB di dati e potrebbe richiedere fino a 30 minuti a seconda della velocità di rete. Questi dati iniziali scaricheranno solo una volta e saranno disponibili per tutti i portafogli Litecoin", + "litecoin_mweb_warning": "L'uso di MWeb inizialmente scaricherà ~600 MB di dati, e potrebbe richiedere fino a 30 minuti a seconda della velocità di rete. Questi dati iniziali verranno scaricati solo una volta, e saranno disponibili per tutti i portafogli Litecoin", "litecoin_what_is_mweb": "Cos'è MWeb?", - "live_fee_rates": "Tariffe delle commissioni dal vivo tramite API", + "live_fee_rates": "Tariffe delle commissioni in tempo reale tramite API", "load_more": "Carica di più", "loading_your_wallet": "Caricamento portafoglio", "login": "Accedi", @@ -431,35 +430,36 @@ "min_value": "Min: ${value} ${currency}", "minutes_to_pin_code": "${minute} minuti", "mm": "mm", - "modify_2fa": "Modifica Torta 2FA", + "modify_2fa": "Modifica Cake 2FA", "monero_com": "Monero.com by Cake Wallet", "monero_com_wallet_text": "Portafoglio fantastico per Monero", - "monero_dark_theme": "Tema scuro di Monero", - "monero_light_theme": "Tema leggero Monero", + "monero_dark_theme": "Tema scuro Monero", + "monero_light_theme": "Tema chiaro Monero", "moonpay_alert_text": "Il valore dell'importo deve essere maggiore o uguale a ${minAmount} ${fiatCurrency}", "more_options": "Altre opzioni", + "multiple_addresses_detected": "Più indirizzi rilevati", "mweb_confirmed": "MWeb confermato", "mweb_unconfirmed": "MWeb non confermato", "name": "Nome", "nano_current_rep": "Rappresentante attuale", - "nano_gpt_thanks_message": "Grazie per aver usato il nanogpt! Ricorda di tornare al browser dopo il completamento della transazione!", + "nano_gpt_thanks_message": "Grazie per aver usato nanogpt! Ricorda di tornare al browser dopo il completamento della transazione!", "nano_pick_new_rep": "Scegli un nuovo rappresentante", - "nanogpt_subtitle": "Tutti i modelli più recenti (GPT-4, Claude). Abbonamento nno, paga con cripto.", + "nanogpt_subtitle": "Tutti i modelli più recenti (GPT-4, Claude). Nessun abbonamento, paga con cripto.", "narrow": "Stretto", - "new_first_wallet_text": "Mantenere la tua criptovaluta è un pezzo di torta", + "new_first_wallet_text": "Mantenere la tua criptovaluta è un gioco da ragazzi", "new_node_testing": "Test novo nodo", "new_subaddress_create": "Crea", "new_subaddress_label_name": "Nome etichetta", "new_subaddress_title": "Nuovo indirizzo", "new_template": "Nuovo modello", - "new_wallet": "Nuovo Portafoglio", + "new_wallet": "Nuovo portafoglio", "newConnection": "Nuova connessione", "no_cards_found": "Nessuna carta trovata", "no_id_needed": "Nessun ID necessario!", "no_id_required": "Nessun ID richiesto. Ricarica e spendi ovunque", - "no_relay_on_domain": "Non esiste un inoltro per il dominio dell'utente oppure l'inoltro non è disponibile. Scegli un relè da utilizzare.", - "no_relays": "Nessun relè", - "no_relays_message": "Abbiamo trovato un record Nostr NIP-05 per questo utente, ma non contiene alcun relè. Si prega di indicare al destinatario di aggiungere inoltri al proprio record Nostr.", + "no_relay_on_domain": "Non esiste un inoltro per il dominio dell'utente oppure l'inoltro non è disponibile. Scegli un relay da utilizzare.", + "no_relays": "Nessun relay", + "no_relays_message": "Abbiamo trovato un record Nostr NIP-05 per questo utente, ma non contiene alcun relay. Indica al destinatario di aggiungere relay al proprio record Nostr.", "node_address": "Indirizzo Nodo", "node_connection_failed": "Connessione fallita", "node_connection_successful": "Connessione avvenuta con successo", @@ -470,16 +470,16 @@ "nodes": "Nodi", "nodes_list_reset_to_default_message": "Sei sicuro di voler ripristinare le impostazioni predefinite?", "none_of_selected_providers_can_exchange": "Nessuno dei provider selezionati può fare questo scambio", - "noNFTYet": "Nessun NFT ancora", + "noNFTYet": "Ancora nessun NFT", "normal": "Normale", "note_optional": "Nota (opzionale)", "note_tap_to_change": "Nota (clicca per cambiare)", "nullURIError": "L'URI è nullo", - "offer_expires_in": "Offerta termina tra: ", + "offer_expires_in": "L'offerta termina tra: ", "offline": "Offline", "ok": "OK", - "old_fee": "Vecchia tassa", - "onion_link": "Collegamento a cipolla", + "old_fee": "Vecchia commissione", + "onion_link": "Link Onion", "online": "in linea", "onramper_option_description": "Acquista rapidamente la criptovaluta con molti metodi di pagamento. Disponibile nella maggior parte dei paesi. Gli spread e le commissioni variano.", "open_gift_card": "Apri carta regalo", @@ -494,18 +494,18 @@ "order_id": "ID ordine", "order_physical_card": "Ordine carta fisica", "other_settings": "Altre impostazioni", - "outdated_electrum_wallet_description": "I nuovi portafogli Bitcoin creati in Cake ora hanno un seme di 24 parole. È obbligatorio creare un nuovo portafoglio Bitcoin e trasferire tutti i fondi nel nuovo portafoglio di 24 parole e smettere di usare portafogli con un seme di 12 parole. Ti preghiamo di farlo immediatamente per proteggere i tuoi fondi.", + "outdated_electrum_wallet_description": "I nuovi portafogli Bitcoin creati su Cake Wallet ora hanno un seme di 24 parole. È obbligatorio creare un nuovo portafoglio Bitcoin e trasferire tutti i fondi nel nuovo portafoglio di 24 parole e smettere di usare portafogli con un seme di 12 parole. Ti preghiamo di farlo immediatamente per proteggere i tuoi fondi.", "outdated_electrum_wallet_receive_warning": "Se questo portafoglio ha un seme di 12 parole ed è stato creato in Cake, NON depositare Bitcoin in questo portafoglio. Qualsiasi BTC trasferito su questo portafoglio potrebbe andare perso. Crea un nuovo portafoglio di 24 parole (tocca il menu in alto a destra, seleziona Portafogli, scegli Crea nuovo portafoglio, quindi seleziona Bitcoin) e sposta IMMEDIATAMENTE lì il tuo BTC. I nuovi portafogli BTC (24 parole) di Cake sono sicuri", "outgoing": "In uscita", "outputs": "Output", - "overshot": "Overs -shot", + "overshot": "Overshot", "overwrite_amount": "Sovrascrivi quantità", "pairingInvalidEvent": "Associazione evento non valido", "passphrase": "Passphrase (opzionale)", - "passphrases_doesnt_match": "Le passphrasi non corrispondono, riprova", + "passphrases_doesnt_match": "Le passphrase non corrispondono, riprova", "password": "Password", "paste": "Incolla", - "pause_wallet_creation": "La possibilità di creare Haven Wallet è attualmente sospesa.", + "pause_wallet_creation": "La possibilità di creare Wallet Haven è attualmente sospesa.", "payment_id": "ID Pagamento: ", "payment_was_received": "Il tuo pagamento è stato ricevuto.", "pending": " (non confermati)", @@ -515,9 +515,10 @@ "pin_number": "Numero PIN", "placeholder_contacts": "I tuoi contatti saranno mostrati qui", "placeholder_transactions": "Le tue transazioni saranno mostrate qui", - "please_fill_totp": "Inserisci il codice di 8 cifre presente sull'altro tuo dispositivo", + "please_choose_one": "Scegli uno", + "please_fill_totp": "Inserisci il codice di 8 cifre presente sul tuo altro dispositivo", "please_make_selection": "Gentilmente seleziona se vuoi generare o recuperare il tuo portafoglio.", - "please_reference_document": "Si prega di fare riferimento ai documenti di seguito per ulteriori informazioni.", + "please_reference_document": "Si prega di fare riferimento ai documenti seguenti per ulteriori informazioni.", "please_select": "Gentilmente seleziona:", "please_select_backup_file": "Gentilmente seleziona il file di backup e inserisci la password di backup.", "please_try_to_connect_to_another_node": "Gentilmente prova a connetterti ad un altro nodo", @@ -534,34 +535,34 @@ "privacy_policy": "Informativa sulla privacy", "privacy_settings": "Impostazioni privacy", "private_key": "Chiave privata", - "proceed_after_one_minute": "Se lo schermo non procede dopo 1 minuto, controlla la tua email.", + "proceed_after_one_minute": "Se la schermata non procede dopo 1 minuto, controlla la tua email.", "proceed_on_device": "Procedi sul tuo dispositivo", "proceed_on_device_description": "Segui le istruzioni richieste sul portafoglio hardware", "profile": "Profilo", "provider_error": "${provider} errore", "public_key": "Chiave pubblica", "purchase_gift_card": "Acquista carta regalo", - "purple_dark_theme": "Tema oscuro viola", + "purple_dark_theme": "Tema scuro viola", "qr_fullscreen": "Tocca per aprire il codice QR a schermo intero", - "qr_payment_amount": "Questo codice QR contiene l'ammontare del pagamento. Vuoi sovrascrivere il varlore attuale?", + "qr_payment_amount": "Questo codice QR contiene l'importo del pagamento. Vuoi sovrascrivere il valore attuale?", "quantity": "Quantità", "question_to_disable_2fa": "Sei sicuro di voler disabilitare Cake 2FA? Non sarà più necessario un codice 2FA per accedere al portafoglio e ad alcune funzioni.", - "receivable_balance": "Bilanciamento creditizio", + "receivable_balance": "Importo ricevibile", "receive": "Ricevi", - "receive_amount": "Ammontare", + "receive_amount": "Importo", "received": "Ricevuto", "recipient_address": "Indirizzo di destinazione", "reconnect": "Riconnetti", "reconnect_alert_text": "Sei sicuro di volerti riconnettere?", "reconnect_your_hardware_wallet": "Ricollega il tuo portafoglio hardware", "reconnection": "Riconnessione", - "red_dark_theme": "Red Dark Theme", - "red_light_theme": "Tema della luce rossa", - "redeemed": "Redento", + "red_dark_theme": "Tema rosso scuro", + "red_light_theme": "Tema rosso chiaro", + "redeemed": "Riscattato", "refund_address": "Indirizzo di rimborso", - "reject": "Rifiutare", + "reject": "Rifiuta", "remaining": "rimanente", - "remove": "Remuovi", + "remove": "Rimuovi", "remove_node": "Rimuovi nodo", "remove_node_message": "Sei sicuro di voler rimuovere il nodo selezionato?", "rename": "Rinomina", @@ -569,15 +570,15 @@ "rep_warning_sub": "Il tuo rappresentante non sembra essere in regola. Tocca qui per selezionarne uno nuovo", "repeat_wallet_password": "Ripeti la password del portafoglio", "repeated_password_is_incorrect": "La password ripetuta non è corretta. Si prega di ripetere di nuovo la password del portafoglio.", - "require_for_adding_contacts": "Richiesto per l'aggiunta di contatti", + "require_for_adding_contacts": "Richiedi per l'aggiunta di contatti", "require_for_all_security_and_backup_settings": "Richiedi per tutte le impostazioni di sicurezza e backup", - "require_for_assessing_wallet": "Richiesto per l'accesso al portafoglio", - "require_for_creating_new_wallets": "Richiesto per la creazione di nuovi portafogli", - "require_for_exchanges_to_external_wallets": "Richiede scambi con portafogli esterni", + "require_for_assessing_wallet": "Richiedi per l'accesso al portafoglio", + "require_for_creating_new_wallets": "Richiedi per la creazione di nuovi portafogli", + "require_for_exchanges_to_external_wallets": "Richiedi per scambi con portafogli esterni", "require_for_exchanges_to_internal_wallets": "Richiedi per gli scambi ai portafogli interni", "require_for_sends_to_contacts": "Richiedi per gli invii ai contatti", - "require_for_sends_to_internal_wallets": "Richiesto per invii a portafogli interni", - "require_for_sends_to_non_contacts": "Richiesto per invii a non contatti", + "require_for_sends_to_internal_wallets": "Richiedi per invii a portafogli interni", + "require_for_sends_to_non_contacts": "Richiedi per invii a non contatti", "require_pin_after": "Richiedi PIN dopo", "rescan": "Scansiona di nuovo", "resend_code": "Per favore, invialo nuovamente", @@ -589,13 +590,13 @@ "restore_bitcoin_description_from_seed": "Recupera il tuo portafoglio da una combinazione di 12 parole", "restore_bitcoin_title_from_keys": "Recupera da WIF", "restore_description_from_backup": "Puoi recuperare l'app Cake Wallet per intero dal tuo file di backup", - "restore_description_from_hardware_wallet": "Ripristina da un portafoglio hardware di libro mastro", + "restore_description_from_hardware_wallet": "Ripristina da un portafoglio hardware Ledger", "restore_description_from_keys": "Recupera il tuo portafoglio da una sequenza di caratteri generati dalle tue chiavi private", "restore_description_from_seed": "Recupera il tuo portafoglio da una combinazione di 25 o 13 parole", "restore_description_from_seed_keys": "Recupera il tuo portafoglio dal seme/chiavi che hai salvato in un posto sicuro", - "restore_existing_wallet": "Ripristina il portafoglio esistente", - "restore_from_date_or_blockheight": "Gentilmente inserisci la data di un paio di giorni prima che hai creato questo portafoglio. Oppure inserisci l'altezza del blocco se la conosci", - "restore_from_seed_placeholder": "Gentilmente inserisci o incolla il tuo seme qui", + "restore_existing_wallet": "Ripristina un portafoglio esistente", + "restore_from_date_or_blockheight": "Inserisci la data un paio di giorni prima della creazione di questo portafoglio. Oppure inserisci l'altezza del blocco, se la conosci", + "restore_from_seed_placeholder": "Inserisci o incolla il tuo seme qui", "restore_new_seed": "Nuovo seme", "restore_next": "Prossimo", "restore_recover": "Recupera", @@ -610,11 +611,11 @@ "restore_view_key_private": "Chiave di Visualizzazione (privata)", "restore_wallet": "Recupera Portafoglio", "restore_wallet_name": "Nome Portafoglio", - "restore_wallet_restore_description": "Descrizione recupero Portafoglio", + "restore_wallet_restore_description": "Descrizione recupero portafoglio", "robinhood_option_description": "Acquista e trasferisci istantaneamente utilizzando la carta di debito, il conto bancario o il saldo di Robinhood. Solo USA.", "router_no_route": "Nessun percorso definito per ${name}", "save": "Salva", - "save_backup_password": "Gentilmente assicurati di aver salvato la password del tuo backup. Senza questa non sarai in grado di importare i tuoi file di backup.", + "save_backup_password": "Assicurati di aver salvato la password del tuo backup. Senza questa non sarai in grado di importare i tuoi file di backup.", "save_backup_password_alert": "Salva password Backup", "save_to_downloads": "Salva in Download", "saved_the_trade_id": "Ho salvato l'ID dello scambio", @@ -636,30 +637,30 @@ "seed_alert_yes": "Sì, l'ho fatto", "seed_choose": "Scegli la lingua del seme", "seed_display_path": "Menu -> Sicurezza e backup -> Mostra chiave/Semi", - "seed_hex_form": "Seme di portafoglio (forma esadecimale)", - "seed_key": "Chiave di semi", - "seed_language": "Linguaggio di semi", + "seed_hex_form": "Seme del portafoglio (formato esadecimale (hex))", + "seed_key": "Chiave del seme", + "seed_language": "Lingua del seme", "seed_language_chinese": "Cinese", "seed_language_chinese_traditional": "Cinese tradizionale)", - "seed_language_czech": "ceco", + "seed_language_czech": "Ceco", "seed_language_dutch": "Olandese", "seed_language_english": "Inglese", "seed_language_french": "Francese", "seed_language_german": "Tedesco", "seed_language_italian": "Italiano", "seed_language_japanese": "Giapponese", - "seed_language_korean": "coreano", + "seed_language_korean": "Coreano", "seed_language_next": "Prossimo", "seed_language_portuguese": "Portoghese", "seed_language_russian": "Russo", "seed_language_spanish": "Spagnolo", - "seed_phrase_length": "Lunghezza della frase seed", + "seed_phrase_length": "Lunghezza della frase del seme", "seed_position_question_one": "Qual è il", - "seed_position_question_two": "Parola della tua frase di semi?", + "seed_position_question_two": "Parola della tua frase del seme?", "seed_reminder": "Gentilmente trascrivi le parole. Ti tornerà utile in caso perdessi o ripristinassi il tuo telefono", "seed_share": "Condividi seme", "seed_title": "Seme", - "seed_verified": "Semi verificato", + "seed_verified": "Seme verificato", "seed_verified_subtext": "Puoi usare il tuo seme salvato in seguito per ripristinare questo portafoglio in caso di corruzione o perdere il dispositivo. \n\n Puoi visualizzare di nuovo questo seme dal", "seedtype": "Seedtype", "seedtype_alert_content": "La condivisione di semi con altri portafogli è possibile solo con Bip39 SeedType.", @@ -668,21 +669,21 @@ "seedtype_polyseed": "Polyseed (16 parole)", "seedtype_wownero": "Wownero (14 parole)", "select_backup_file": "Seleziona file di backup", - "select_buy_provider_notice": "Seleziona un fornitore di acquisto sopra. È possibile saltare questa schermata impostando il provider di acquisto predefinito nelle impostazioni dell'app.", + "select_buy_provider_notice": "Seleziona un provider di acquisto sopra. È possibile saltare questa schermata impostando il provider di acquisto predefinito nelle impostazioni dell'app.", "select_destination": "Seleziona la destinazione per il file di backup.", - "select_hw_account_below": "Seleziona quale account ripristina di seguito:", - "select_sell_provider_notice": "Seleziona un fornitore di vendita sopra. Puoi saltare questa schermata impostando il tuo fornitore di vendita predefinito nelle impostazioni dell'app.", + "select_hw_account_below": "Seleziona quale account ripristinare:", + "select_sell_provider_notice": "Seleziona un provider di vendita sopra. Puoi saltare questa schermata impostando il tuo provider di vendita predefinito nelle impostazioni dell'app.", "select_your_country": "Seleziona il tuo paese", - "sell": "Vendere", + "sell": "Vendi", "sell_alert_content": "Al momento supportiamo solo la vendita di Bitcoin, Ethereum e Litecoin. Crea o passa al tuo portafoglio Bitcoin, Ethereum o Litecoin.", "sell_monero_com_alert_content": "La vendita di Monero non è ancora supportata", "send": "Invia", "send_address": "${cryptoCurrency} indirizzo", - "send_amount": "Ammontare:", - "send_change_to_you": "Cambiamento, a te:", + "send_amount": "Importo:", + "send_change_to_you": "Modifica, a te:", "send_creating_transaction": "Creazione della transazione", - "send_error_currency": "L'ammontare può contenere solo numeri", - "send_error_minimum_value": "L'ammontare minimo è 0.01", + "send_error_currency": "L'importo può contenere solo numeri", + "send_error_minimum_value": "L'importo minimo è 0.01", "send_estimated_fee": "Commissione stimata:", "send_fee": "Commissione:", "send_name": "Nome", @@ -698,8 +699,8 @@ "send_your_wallet": "Il tuo portafoglio", "sending": "Invio", "sent": "Inviato", - "service_health_disabled": "Il Bollettino sanitario di servizio è disabilitato", - "service_health_disabled_message": "Questa è la pagina del Bollettino sanitario del servizio, è possibile abilitare questa pagina in Impostazioni -> Privacy", + "service_health_disabled": "Il Bollettino dello stato del servizio è disabilitato", + "service_health_disabled_message": "Questa è la pagina del Bollettino dello stato del servizio, è possibile abilitare questa pagina in Impostazioni -> Privacy", "set_a_pin": "Imposta un pin", "set_up_a_wallet": "Imposta un portafoglio", "settings": "Impostazioni", @@ -708,7 +709,7 @@ "settings_can_be_changed_later": "Queste impostazioni possono essere modificate in seguito nelle impostazioni dell'app", "settings_change_language": "Cambia lingua", "settings_change_pin": "Cambia PIN", - "settings_currency": "Moneta", + "settings_currency": "Valuta", "settings_current_node": "Nodo attuale", "settings_dark_mode": "Tema scuro", "settings_display_balance": "Mostra saldo", @@ -726,25 +727,25 @@ "settings_trades": "Scambi", "settings_transactions": "Transazioni", "settings_wallets": "Portafogli", - "setup_2fa": "Imposta la torta 2FA", + "setup_2fa": "Imposta Cake 2FA", "setup_2fa_text": "Cake 2FA funziona utilizzando TOTP come secondo fattore di autenticazione.\n\nIl TOTP di Cake 2FA richiede il supporto SHA-512 e 8 cifre; ciò fornisce una maggiore sicurezza. Maggiori informazioni e app supportate sono disponibili nella guida.", "setup_pin": "Imposta PIN", "setup_successful": "Il tuo PIN è stato impostato con successo!", "setup_totp_recommended": "Imposta TOTP", - "setup_warning_2fa_text": "Dovrai ripristinare il tuo portafoglio dal seme mnemonico.\n\nIl supporto di Cake non sarà in grado di assisterti se perdi l'accesso ai tuoi seed 2FA o mnemonici.\nCake 2FA è una seconda autenticazione per determinate azioni nel portafoglio. Prima di utilizzare Cake 2FA, ti consigliamo di leggere la guida.NON è sicuro come la conservazione a freddo.\n\nSe perdi l'accesso alla tua app 2FA o alle chiavi TOTP, perderai l'accesso a questo portafoglio. ", + "setup_warning_2fa_text": "Cake 2FA è un secondo fattore di autenticazione per determinate azioni nel portafoglio. NON è sicuro quanto il cold storage.\n\nSe perdi l'accesso alla tua app 2FA o chiavi TOTP, NON POTRAI ACCEDERE a questo portafoglio. Dovrai recuperare il portafoglio dal seme mnemonico.\n\nIl supporto di Cakenon potrà assisterti se perdi l'accesso alla tua 2FA, o semi mnemonici.\nPrima di usare Cake 2FA ti consigliamo di leggere la guida.", "setup_your_debit_card": "Configura la tua carta di debito", - "share": "Condividere", + "share": "Condividi", "share_address": "Condividi indirizzo", - "shared_seed_wallet_groups": "Gruppi di portafoglio di semi condivisi", - "show": "Spettacolo", + "shared_seed_wallet_groups": "Gruppi di portafogli di semi condivisi", + "show": "Mostra", "show_address_book_popup": "Mostra popup della rubrica", - "show_balance": "Lunga stampa per mostrare l'equilibrio", - "show_balance_toast": "A lungo pressa per nascondere o mostrare l'equilibrio", + "show_balance": "Tieni premuto per mostrare l'importo", + "show_balance_toast": "Tieni premuto per nascondere o mostrare l'importo", "show_details": "Mostra dettagli", "show_keys": "Mostra seme/chiavi", "show_market_place": "Mostra mercato", "show_seed": "Mostra seme", - "sign_message": "Messaggio di firma", + "sign_message": "Firma messaggio", "sign_up": "Registrati", "sign_verify_message": "Firmare / verificare", "sign_verify_message_sub": "Firma o verifica un messaggio utilizzando la chiave privata", @@ -753,23 +754,23 @@ "signature_invalid_error": "La firma non è valida per il messaggio dato", "signTransaction": "Firma la transazione", "signup_for_card_accept_terms": "Registrati per la carta e accetta i termini.", - "silent_payment": "Pagamento silenzioso", - "silent_payments": "Pagamenti silenziosi", - "silent_payments_always_scan": "Impostare i pagamenti silenziosi che scansionano sempre", + "silent_payment": "Silent Payment", + "silent_payments": "Silent Payments", + "silent_payments_always_scan": "Impostare la scansione perpetua di Silent Payments", "silent_payments_disclaimer": "I nuovi indirizzi non sono nuove identità. È un riutilizzo di un'identità esistente con un'etichetta diversa.", - "silent_payments_display_card": "Mostra la carta di pagamenti silenziosi", + "silent_payments_display_card": "Mostra la carta di Silent Payments", "silent_payments_scan_from_date": "Scansionare dalla data", - "silent_payments_scan_from_date_or_blockheight": "Inserisci l'altezza del blocco che si desidera iniziare la scansione per i pagamenti silenziosi in arrivo o, utilizza invece la data. Puoi scegliere se il portafoglio continua a scansionare ogni blocco o controlla solo l'altezza specificata.", + "silent_payments_scan_from_date_or_blockheight": "Inserisci l'altezza del blocco da cui si desidera iniziare la scansione per i pagamenti Silent Payments in arrivo, o utilizza la data. Puoi scegliere se il portafoglio continua a scansionare ogni blocco o controlla solo l'altezza specificata.", "silent_payments_scan_from_height": "Scansione dall'altezza del blocco", - "silent_payments_scanned_tip": "Scansionato per dare la mancia! (${tip})", - "silent_payments_scanning": "Scansione di pagamenti silenziosi", - "silent_payments_settings": "Impostazioni di pagamenti silenziosi", + "silent_payments_scanned_tip": "Scansionato alla punta! (${tip})", + "silent_payments_scanning": "Scansione Silent Payments", + "silent_payments_settings": "Impostazioni Silent Payments", "single_seed_wallets_group": "Portafogli singoli", "slidable": "Scorrevole", - "solana_create_associated_token_account_exception": "Errore Creazione di account token associato per l'indirizzo dei ricevimenti.", + "solana_create_associated_token_account_exception": "Errore nella creazione di un account token associato per l'indirizzo destinatario.", "solana_no_associated_token_account_exception": "Non esiste un account token associato per questo indirizzo.", - "solana_sign_native_transaction_rent_exception": "La transazione non può essere completata. Sol insufficiente lasciato in affitto dopo la transazione. Si prega di ricaricare il saldo SOL o ridurre la quantità di sol che stai inviando.", - "solana_sign_spl_token_transaction_rent_exception": "La transazione non può essere completata. Sol insufficiente lasciato in affitto dopo la transazione. Si prega di ricaricare il tuo equilibrio sol.", + "solana_sign_native_transaction_rent_exception": "La transazione non può essere completata. SOL insufficienti per l'affitto dopo la transazione. Si prega di ricaricare il saldo SOL, o ridurre la quantità di SOL che stai inviando.", + "solana_sign_spl_token_transaction_rent_exception": "La transazione non può essere completata. SOL insufficienti per l'affitto dopo la transazione. Si prega di ricaricare il tuo saldo SOL.", "sort_by": "Ordina per", "spend_key_private": "Chiave di spesa (privata)", "spend_key_public": "Chiave di spesa (pubblica)", @@ -780,31 +781,31 @@ "submit_request": "invia una richiesta", "successful": "Riuscito", "support_description_guides": "Documentazione e supporto per problemi comuni", - "support_description_live_chat": "Gratuito e veloce! I rappresentanti di supporto qualificati sono disponibili per assistere", - "support_description_other_links": "Unisciti alle nostre comunità o raggiungici i nostri partner attraverso altri metodi", - "support_title_guides": "Documenti del portafoglio per torta", - "support_title_live_chat": "Supporto dal vivo", + "support_description_live_chat": "Gratuito e veloce! I rappresentanti di supporto qualificati sono disponibili per assistervi", + "support_description_other_links": "Unisciti alle nostre comunità, o contatta i nostri partner attraverso altri metodi", + "support_title_guides": "Documentazione Cake Wallet", + "support_title_live_chat": "Supporto in tempo reale", "support_title_other_links": "Altri collegamenti di supporto", "swap": "Scambio", - "sweeping_wallet": "Portafoglio ampio", - "sweeping_wallet_alert": "Questo non dovrebbe richiedere molto tempo. NON LASCIARE QUESTA SCHERMATA O I FONDI SPAZZATI POTREBBERO ANDARE PERSI", + "sweeping_wallet": "Svuota portafoglio", + "sweeping_wallet_alert": "Questo non dovrebbe richiedere molto tempo. NON LASCIARE QUESTA SCHERMATA O I FONDI DA TRASFERIRE POTREBBERO ANDARE PERSI", "switchToETHWallet": "Passa a un portafoglio Ethereum e riprova", "switchToEVMCompatibleWallet": "Passa a un portafoglio compatibile con EVM e riprova (Ethereum, Polygon)", "symbol": "Simbolo", "sync_all_wallets": "Sincronizza tutti i portafogli", - "sync_status_attempting_scan": "Tentando la scansione", + "sync_status_attempting_scan": "TENTATIVO DI SCANSIONE", "sync_status_attempting_sync": "TENTATIVO DI SINCRONIZZAZIONE", "sync_status_connected": "CONNESSO", "sync_status_connecting": "CONNESSIONE", "sync_status_failed_connect": "DISCONNESSO", "sync_status_not_connected": "NON CONNESSO", - "sync_status_starting_scan": "Avvia scansione (da ${height})", - "sync_status_starting_sync": "INIZIO SINC", + "sync_status_starting_scan": "AVVIO SCANSIONE (da ${height})", + "sync_status_starting_sync": "INIZIO SINCRONIZZAZIONE", "sync_status_syncronized": "SINCRONIZZATO", "sync_status_syncronizing": "SINCRONIZZAZIONE", - "sync_status_timed_out": "FUORI TEMPO", - "sync_status_unsupported": "Nodo non supportato", - "syncing_wallet_alert_content": "Il saldo e l'elenco delle transazioni potrebbero non essere completi fino a quando non viene visualizzato \"SYNCHRONIZED\" in alto. Clicca/tocca per saperne di più.", + "sync_status_timed_out": "TIMED OUT", + "sync_status_unsupported": "NODO NON SUPPORTATO", + "syncing_wallet_alert_content": "Il saldo e l'elenco delle transazioni potrebbero non essere completi fin quando non viene visualizzato \"SINCRONIZZATO\" in alto. Clicca/tocca per saperne di più.", "syncing_wallet_alert_title": "Il tuo portafoglio si sta sincronizzando", "template": "Modello", "template_name": "Nome modello", @@ -827,7 +828,7 @@ "total": "Totale", "total_saving": "Risparmio totale", "totp_2fa_failure": "Codice non corretto. Prova un codice diverso o genera una nuova chiave segreta. Utilizza un'app 2FA compatibile che supporti codici a 8 cifre e SHA512.", - "totp_2fa_success": "Successo! Cake 2FA abilitato per questo portafoglio. Ricordati di salvare il tuo seme mnemonico nel caso in cui perdi l'accesso al portafoglio.", + "totp_2fa_success": "Successo! Cake 2FA abilitato per questo portafoglio. Ricordati di salvare il tuo seme mnemonico nel caso tu perda l'accesso al portafoglio.", "totp_auth_url": "URL DI AUT. TOTP", "totp_code": "Codice TOTP", "totp_secret_code": "TOTP codice segreto", @@ -848,7 +849,7 @@ "trade_is_powered_by": "Questo scambio è fornito da ${provider}", "trade_not_created": "Scambio non creato", "trade_not_found": "Scambio non trovato.", - "trade_state_btc_sent": "Btc inviati", + "trade_state_btc_sent": "BTC inviati", "trade_state_complete": "Completato", "trade_state_confirming": "Conferma", "trade_state_created": "Creato", @@ -864,48 +865,48 @@ "trade_state_unpaid": "Non pagato", "trades": "Scambi", "transaction_cost": "Costo delle transazioni", - "transaction_details_amount": "Ammontare", + "transaction_details_amount": "Importo", "transaction_details_copied": "${title} copiati negli Appunti", "transaction_details_date": "Data", "transaction_details_fee": "Commissione", "transaction_details_height": "Altezza", "transaction_details_recipient_address": "Indirizzi dei destinatari", - "transaction_details_source_address": "Indirizzo di partenza", + "transaction_details_source_address": "Indirizzo mittente", "transaction_details_title": "Dettagli Transazione", "transaction_details_transaction_id": "ID Transazione", "transaction_key": "Chiave Transazione", - "transaction_priority_fast": "Alta", - "transaction_priority_fastest": "Massima", - "transaction_priority_medium": "Media", + "transaction_priority_fast": "Veloce", + "transaction_priority_fastest": "Più veloce", + "transaction_priority_medium": "Medio", "transaction_priority_regular": "Regolare", - "transaction_priority_slow": "Bassa", + "transaction_priority_slow": "Lento", "transaction_sent": "Transazione inviata!", - "transaction_sent_notice": "Se lo schermo non procede dopo 1 minuto, controlla un block explorer e la tua email.", + "transaction_sent_notice": "Se la schermata non procede dopo 1 minuto, controlla un block explorer e la tua email.", "transactions": "Transazioni", "transactions_by_date": "Transazioni per data", - "trongrid_history": "Storia del trongride", - "trusted": "di fiducia", + "trongrid_history": "Cronologia TronGrid", + "trusted": "Fidato", "tx_commit_exception_no_dust_on_change": "La transazione viene respinta con questo importo. Con queste monete è possibile inviare ${min} senza modifiche o ${max} che restituisce il cambiamento.", "tx_commit_failed": "Commit di transazione non riuscita. Si prega di contattare il supporto.", - "tx_commit_failed_no_peers": "La transazione non è riuscita a trasmettere, riprovare in un secondo o giù di lì", + "tx_commit_failed_no_peers": "Errore nella trasmissione della transazione, si prega di provare nuovamente", "tx_invalid_input": "Stai usando il tipo di input sbagliato per questo tipo di pagamento", - "tx_no_dust_exception": "La transazione viene respinta inviando un importo troppo piccolo. Per favore, prova ad aumentare l'importo.", - "tx_not_enough_inputs_exception": "Input non sufficienti disponibili. Seleziona di più sotto il controllo delle monete", - "tx_rejected_bip68_final": "La transazione ha input non confermati e non è stata sostituita per tassa.", - "tx_rejected_dust_change": "Transazione respinta dalle regole di rete, quantità bassa variazione (polvere). Prova a inviare tutto o ridurre l'importo.", - "tx_rejected_dust_output": "Transazione respinta dalle regole di rete, bassa quantità di output (polvere). Si prega di aumentare l'importo.", - "tx_rejected_dust_output_send_all": "Transazione respinta dalle regole di rete, bassa quantità di output (polvere). Si prega di controllare il saldo delle monete selezionate sotto controllo delle monete.", - "tx_rejected_vout_negative": "Non abbastanza saldo per pagare le commissioni di questa transazione. Si prega di controllare il saldo delle monete sotto controllo delle monete.", + "tx_no_dust_exception": "La transazione viene respinta inviando un importo troppo piccolo. Prova ad aumentare l'importo.", + "tx_not_enough_inputs_exception": "Non sono disponibili abbastanza input. Selezionane di più in Controllo monete", + "tx_rejected_bip68_final": "La transazione ha input non confermati e non è stato effettuato il replace-by-fee.", + "tx_rejected_dust_change": "Transazione respinta dalle regole di rete, bassa quantità di cambio (dust). Prova a inviare tutto o ridurre l'importo.", + "tx_rejected_dust_output": "Transazione respinta dalle regole di rete, bassa quantità di output (dust). Si prega di aumentare l'importo.", + "tx_rejected_dust_output_send_all": "Transazione respinta dalle regole di rete, bassa quantità di output (dust). Si prega di controllare il saldo delle monete selezionate sotto controllo delle monete.", + "tx_rejected_vout_negative": "Il saldo disponibile non è sufficiente per pagare le commissioni di questa transazione. Si prega di controllare il saldo delle monete sotto Controllo monete.", "tx_wrong_balance_exception": "Non hai abbastanza ${currency} per inviare questo importo.", "tx_wrong_balance_with_amount_exception": "Non hai abbastanza ${currency} per inviare la quantità totale di ${amount}", - "tx_zero_fee_exception": "Impossibile inviare transazioni con 0 tassa. Prova ad aumentare la tariffa o controlla la connessione per le ultime stime.", + "tx_zero_fee_exception": "Impossibile inviare transazioni con 0 commissioni. Prova ad aumentare le commissioni, o controlla la connessione per le ultime stime.", "unavailable_balance": "Saldo non disponibile", - "unavailable_balance_description": "Saldo non disponibile: questo totale include i fondi bloccati nelle transazioni in sospeso e quelli che hai congelato attivamente nelle impostazioni di controllo delle monete. I saldi bloccati diventeranno disponibili una volta completate le rispettive transazioni, mentre i saldi congelati rimarranno inaccessibili per le transazioni finché non deciderai di sbloccarli.", + "unavailable_balance_description": "Saldo non disponibile: questo totale include i fondi bloccati nelle transazioni in sospeso e quelli che hai congelato attivamente nelle impostazioni di Controllo monete. I saldi bloccati diventeranno disponibili una volta completate le rispettive transazioni, mentre i saldi congelati rimarranno inaccessibili per le transazioni finché non deciderai di sbloccarli.", "unconfirmed": "Saldo non confermato", "understand": "Capisco", - "unlock": "Sbloccare", + "unlock": "Sblocca", "unmatched_currencies": "La valuta del tuo portafoglio attuale non corrisponde a quella del QR scansionato", - "unspent_change": "Modifica", + "unspent_change": "Resto", "unspent_coins_details_title": "Dettagli sulle monete non spese", "unspent_coins_title": "Monete non spese", "unsupported_asset": "Non supportiamo questa azione per questa risorsa. Crea o passa a un portafoglio di un tipo di asset supportato.", @@ -927,23 +928,23 @@ "verify_with_2fa": "Verifica con Cake 2FA", "version": "Versione ${currentVersion}", "view_all": "Visualizza tutto", - "view_in_block_explorer": "View in Block Explorer", + "view_in_block_explorer": "Visualizza su Block Explorer", "view_key_private": "Chiave di visualizzazione (privata)", "view_key_public": "Chiave di visualizzazione (pubblica)", - "view_transaction_on": "View Transaction on ", + "view_transaction_on": "Visualizza transazione su ", "voting_weight": "Peso di voto", "waitFewSecondForTxUpdate": "Attendi qualche secondo affinché la transazione venga riflessa nella cronologia delle transazioni", "waiting_payment_confirmation": "In attesa di conferma del pagamento", "wallet": "Portafoglio", "wallet_group": "Gruppo di portafoglio", "wallet_group_description_existing_seed": "Hai scelto di utilizzare un seme esistente per questo portafoglio. Puoi verificare di nuovo il seme se devi confermarlo o scriverlo.", - "wallet_group_description_four": "Per creare un portafoglio con un seme completamente nuovo.", - "wallet_group_description_one": "Nel portafoglio di torte, puoi creare un", + "wallet_group_description_four": "per creare un portafoglio con un seme completamente nuovo.", + "wallet_group_description_one": "Su Cake Wallet, puoi creare un", "wallet_group_description_open_wallet": "Altrimenti, puoi continuare ad aprire il portafoglio", "wallet_group_description_three": "Per vedere la schermata di portafogli e/o gruppi di portafogli disponibili. O scegli", "wallet_group_description_two": "Selezionando un portafoglio esistente con cui condividere un seme. Ogni gruppo di portafoglio può contenere un singolo portafoglio di ciascun tipo di valuta. \n\n È possibile selezionare", "wallet_group_description_view_seed": "Puoi sempre visualizzare di nuovo questo seme sotto", - "wallet_group_empty_state_text_one": "Sembra che tu non abbia alcun gruppo di portafoglio compatibile !\n\n TAP", + "wallet_group_empty_state_text_one": "Sembra che tu non abbia alcun gruppo di portafoglio compatibile!\n\nPremi", "wallet_group_empty_state_text_two": "Di seguito per crearne uno nuovo.", "wallet_keys": "Seme Portafoglio /chiavi", "wallet_list_create_new_wallet": "Crea Nuovo Portafoglio", @@ -959,43 +960,43 @@ "wallet_list_wallet_name": "Nome del portafoglio", "wallet_menu": "Menù", "wallet_name": "Nome del Portafoglio", - "wallet_name_exists": "Il portafoglio con quel nome è già esistito", + "wallet_name_exists": "Un portafoglio con quel nome già esiste", "wallet_password_is_empty": "La password del portafoglio è vuota. La password del portafoglio non dovrebbe essere vuota", "wallet_recovery_height": "Altezza di recupero", "wallet_restoration_store_incorrect_seed_length": "Lunghezza seme non corretta", "wallet_seed": "Seme Portafoglio", - "wallet_seed_legacy": "Seme di portafoglio legacy", + "wallet_seed_legacy": "Seme portafoglio legacy", "wallet_store_monero_wallet": "Portafoglio Monero", - "walletConnect": "PortafoglioConnetti", + "walletConnect": "WalletConnect", "wallets": "Portafogli", - "warning": "Avvertimento", + "warning": "Attenzione", "welcome": "Benvenuto", - "welcome_subtitle_new_wallet": "Se vuoi ricominciare da capo, tocca Crea un nuovo portafoglio di seguito e sarai alle gare.", - "welcome_subtitle_restore_wallet": "Se hai un portafoglio esistente che vuoi portare nella torta, scegli semplicemente il ripristino del portafoglio esistente e ti guideremo attraverso il processo.", + "welcome_subtitle_new_wallet": "Se vuoi ricominciare da capo, premi Crea un nuovo portafoglio qui sotto.", + "welcome_subtitle_restore_wallet": "Se hai un portafoglio esistente che vuoi importare in Cake Wallet, scegli semplicemente il ripristino del portafoglio esistente e ti guideremo attraverso il processo.", "welcome_to_cakepay": "Benvenuto in Cake Pay!", - "what_is_silent_payments": "Che cos'è i pagamenti silenziosi?", + "what_is_silent_payments": "Che cos'è Silent Payments?", "widgets_address": "Indirizzo", "widgets_or": "o", "widgets_restore_from_blockheight": "Recupera da altezza blocco", "widgets_restore_from_date": "Recupera da data", "widgets_seed": "Seme", "wouoldLikeToConnect": "vorrei connettermi", - "write_down_backup_password": "Gentilmente trascrivi la password del backup, che è usata per importare i tuoi file di backup.", - "xlm_extra_info": "Gentilmente ricorda di indicare il Memo ID quando invii la transazione XLM per lo scambio", + "write_down_backup_password": "Trascrivi la password del backup, che è usata per importare i tuoi file di backup.", + "xlm_extra_info": "Ricorda di indicare il Memo ID quando invii la transazione XLM per lo scambio", "xmr_available_balance": "Saldo Disponibile", "xmr_full_balance": "Saldo Totale", "xmr_hidden": "Nascosto", - "xmr_to_error": "XMR.TO errore", - "xmr_to_error_description": "Ammontare invalido. Il limite massimo è 8 cifre dopo il punto decimale", - "xrp_extra_info": "Gentilmente ricorda di indicare il Tag di Destinazione quando invii una transazione XRP per lo scambio", + "xmr_to_error": "Errore XMR.TO", + "xmr_to_error_description": "Importo invalido. Il limite massimo è 8 cifre dopo il punto decimale", + "xrp_extra_info": "Ricorda di indicare il Tag di Destinazione quando invii una transazione XRP per lo scambio", "yat": "Yat", "yat_address": "Indirizzo Yat", "yat_alert_content": "Gli utenti di Cake Wallet possono ora inviare e ricevere tutte le loro valute preferite con un nome utente unico basato su emoji.", "yat_alert_title": "Invia e ricevi criptovalute più facilmente con Yat", - "yat_error": "Yat errore", + "yat_error": "Errore Yat", "yat_error_content": "Nessun indirizzo collegato a questo Yat. Prova un altro Yat", - "yat_popup_content": "Ora puoi inviare e ricevere criptovalute in Cake Wallet con il tuo Yat, un breve nome utente basato su emoji. Gestisci Yats in qualsiasi momento nella schermata delle impostazioni", - "yat_popup_title": "L'indirizzo del tuo portafoglio può essere emoji.", + "yat_popup_content": "Ora puoi inviare e ricevere criptovalute in Cake Wallet con il tuo Yat, un breve nome utente basato su emoji. Gestisci gli Yat in qualsiasi momento nella schermata delle impostazioni", + "yat_popup_title": "L'indirizzo del tuo portafoglio può essere composto da emoji.", "yesterday": "Ieri", "you_now_have_debit_card": "Ora hai una carta di debito", "you_pay": "Tu paghi", diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index 759319dcd..e4b16ec85 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -175,7 +175,7 @@ "contact_name_exists": "その名前の連絡先はすでに存在します。別の名前を選択してください。", "contact_support": "サポートに連絡する", "continue_text": "持続する", - "contract_warning": "この契約住所は、潜在的に不正としてフラグが立てられています。注意して処理してください。", + "contract_warning": "この契約住所は、潜在的に不正としてフラグが立てられています。注意して進めてください。", "contractName": "契約名", "contractSymbol": "契約記号", "copied_key_to_clipboard": "コピー済み ${key} クリップボードへ", @@ -438,6 +438,7 @@ "monero_light_theme": "モネロ ライト テーマ", "moonpay_alert_text": "金額の値は以上でなければなりません ${minAmount} ${fiatCurrency}", "more_options": "その他のオプション", + "multiple_addresses_detected": "複数のアドレスが検出されました", "mweb_confirmed": "確認されたMWEB", "mweb_unconfirmed": "未確認のMWEB", "name": "名前", @@ -514,6 +515,7 @@ "pin_number": "PIN番号", "placeholder_contacts": "連絡先はここに表示されます", "placeholder_transactions": "あなたの取引はここに表示されます", + "please_choose_one": "選択してください", "please_fill_totp": "他のデバイスにある 8 桁のコードを入力してください", "please_make_selection": "以下を選択してください ウォレットを作成または回復する.", "please_reference_document": "詳細については、以下のドキュメントを参照してください。", diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index 3bf10d786..056a091c2 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -175,7 +175,7 @@ "contact_name_exists": "해당 이름을 가진 연락처가 이미 존재합니다. 다른 이름을 선택하세요.", "contact_support": "지원팀에 문의", "continue_text": "잇다", - "contract_warning": "이 계약 주소는 잠재적으로 사기성으로 표시되었습니다. 주의해서 처리하십시오.", + "contract_warning": "이 계약 주소는 잠재적으로 사기성으로 표시되었습니다. 주의해서 계속 진행하십시오.", "contractName": "계약명", "contractSymbol": "계약 기호", "copied_key_to_clipboard": "복사 ${key} 클립 보드로", @@ -437,6 +437,7 @@ "monero_light_theme": "모네로 라이트 테마", "moonpay_alert_text": "금액은 다음보다 크거나 같아야합니다 ${minAmount} ${fiatCurrency}", "more_options": "추가 옵션", + "multiple_addresses_detected": "여러 주소가 감지되었습니다", "mweb_confirmed": "확인 mweb", "mweb_unconfirmed": "확인되지 않은 mweb", "name": "이름", @@ -513,6 +514,7 @@ "pin_number": "PIN 번호", "placeholder_contacts": "연락처가 여기에 표시됩니다", "placeholder_transactions": "거래가 여기에 표시됩니다", + "please_choose_one": "하나를 선택하십시오", "please_fill_totp": "다른 기기에 있는 8자리 코드를 입력하세요.", "please_make_selection": "아래에서 선택하십시오 지갑 만들기 또는 복구.", "please_reference_document": "자세한 내용은 아래 문서를 참조하십시오.", diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb index 6dad99f36..a4a17760c 100644 --- a/res/values/strings_my.arb +++ b/res/values/strings_my.arb @@ -175,7 +175,7 @@ "contact_name_exists": "ထိုအမည်နှင့် အဆက်အသွယ်တစ်ခု ရှိနှင့်ပြီးဖြစ်သည်။ အခြားအမည်တစ်ခုကို ရွေးပါ။", "contact_support": "ပံ့ပိုးကူညီမှုထံ ဆက်သွယ်ပါ။", "continue_text": "ဆက်လက်", - "contract_warning": "ဒီစာချုပ်လိပ်စာအလားအလာအလားအလာအလားအလာအလံများကိုအလံလွှင့်တင်ခဲ့သည်။ ကျေးဇူးပြုပြီးသတိဖြင့်လုပ်ငန်းစဉ်။", + "contract_warning": "ဒီစာချုပ်လိပ်စာအလားအလာအလားအလာအလားအလာအလံများကိုအလံလွှင့်တင်ခဲ့သည်။ ကျေးဇူးပြု. သတိဖြင့်ဆက်လက်လုပ်ဆောင်ပါ။", "contractName": "စာချုပ်အမည်", "contractSymbol": "စာချုပ်သင်္ကေတ", "copied_key_to_clipboard": "${key} ကို Clipboard သို့ ကူးယူထားသည်။", @@ -437,6 +437,7 @@ "monero_light_theme": "Monero Light အပြင်အဆင်", "moonpay_alert_text": "ပမာဏ၏တန်ဖိုးသည် ${minAmount} ${fiatCurrency} နှင့် ပိုနေရမည်", "more_options": "နောက်ထပ် ရွေးချယ်စရာများ", + "multiple_addresses_detected": "အများအပြားလိပ်စာများရှာဖွေတွေ့ရှိ", "mweb_confirmed": "အတည်ပြုလိုက် mweb", "mweb_unconfirmed": "အတည်မပြုနိုင်သော mweb", "name": "နာမည်", @@ -513,6 +514,7 @@ "pin_number": "လျှို့ဝှက်နံပါတ်", "placeholder_contacts": "သင့်အဆက်အသွယ်များကို ဤနေရာတွင် ပြသပါမည်။", "placeholder_transactions": "သင်၏ ငွေပေးငွေယူများကို ဤနေရာတွင် ပြသပါမည်။", + "please_choose_one": "ကျေးဇူးပြု. ရွေးပါ", "please_fill_totp": "သင့်အခြားစက်တွင်ရှိသော ဂဏန်း ၈ လုံးကုဒ်ကို ကျေးဇူးပြု၍ ဖြည့်ပါ။", "please_make_selection": "သင့်ပိုက်ဆံအိတ်ကို ဖန်တီးရန် သို့မဟုတ် ပြန်လည်ရယူရန် အောက်တွင် ရွေးချယ်မှုတစ်ခု ပြုလုပ်ပါ။", "please_reference_document": "နောက်ထပ်အချက်အလက်များအတွက် အောက်ပါစာရွက်စာတမ်းများကို ကိုးကားပါ။", diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 7ef0dd6ca..e950a75bd 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -175,7 +175,7 @@ "contact_name_exists": "Er bestaat al een contact met die naam. Kies een andere naam.", "contact_support": "Contact opnemen met ondersteuning", "continue_text": "Doorgaan met", - "contract_warning": "Dit contractadres is gemarkeerd als mogelijk frauduleus. Verwerk met voorzichtigheid.", + "contract_warning": "Dit contractadres is gemarkeerd als mogelijk frauduleus. Ga voorzichtig te werk.", "contractName": "Contractnaam", "contractSymbol": "Contractsymbool", "copied_key_to_clipboard": "Gekopieerd ${key} naar het klembord", @@ -437,6 +437,7 @@ "monero_light_theme": "Monero Light-thema", "moonpay_alert_text": "Waarde van het bedrag moet meer of gelijk zijn aan ${minAmount} ${fiatCurrency}", "more_options": "Meer opties", + "multiple_addresses_detected": "Meerdere adressen gedetecteerd", "mweb_confirmed": "Bevestigde MWEB", "mweb_unconfirmed": "Onbevestigde MWEB", "name": "Naam", @@ -513,6 +514,7 @@ "pin_number": "PIN-nummer", "placeholder_contacts": "Je contacten worden hier weergegeven", "placeholder_transactions": "Uw transacties worden hier weergegeven", + "please_choose_one": "Kies er een", "please_fill_totp": "Vul de 8-cijferige code in die op uw andere apparaat aanwezig is", "please_make_selection": "Maak hieronder uw keuze tot maak of herstel je portemonnee.", "please_reference_document": "Raadpleeg de onderstaande documenten voor meer informatie.", diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 3ee50dc1a..e4ac7286d 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -437,6 +437,7 @@ "monero_light_theme": "Lekki motyw Monero", "moonpay_alert_text": "Wartość kwoty musi być większa lub równa ${minAmount} ${fiatCurrency}", "more_options": "Więcej opcji", + "multiple_addresses_detected": "Wykryto wiele adresów", "mweb_confirmed": "Potwierdził MWEB", "mweb_unconfirmed": "Niepotwierdzone MWEB", "name": "Nazwa", @@ -513,6 +514,7 @@ "pin_number": "Numer PIN", "placeholder_contacts": "Twoje kontakty zostaną wyświetlone tutaj", "placeholder_transactions": "Twoje transakcje zostaną wyświetlone tutaj", + "please_choose_one": "Wybierz jeden", "please_fill_totp": "Wpisz 8-cyfrowy kod znajdujący się na drugim urządzeniu", "please_make_selection": "Wybierz poniżej, aby utworzyć lub przywrócić swój portfel.", "please_reference_document": "Proszę odwołać się do poniższych dokumentów, aby uzyskać więcej informacji.", diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 4356b64bd..5e0c246bd 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -175,7 +175,7 @@ "contact_name_exists": "Um contato com esse nome já existe. Escolha um nome diferente.", "contact_support": "Contatar Suporte", "continue_text": "Continuar", - "contract_warning": "Este endereço do contrato foi sinalizado como potencialmente fraudulento. Por favor, processe com cautela.", + "contract_warning": "Este endereço do contrato foi sinalizado como potencialmente fraudulento. Por favor, continue com cautela.", "contractName": "Nome do contrato", "contractSymbol": "Símbolo do Contrato", "copied_key_to_clipboard": "${key} copiada para a área de transferência", @@ -438,6 +438,7 @@ "monero_light_theme": "Monero Light Theme", "moonpay_alert_text": "O valor do montante deve ser maior ou igual a ${minAmount} ${fiatCurrency}", "more_options": "Mais opções", + "multiple_addresses_detected": "Vários endereços detectados", "mweb_confirmed": "MWEB confirmado", "mweb_unconfirmed": "MWEB não confirmado", "name": "Nome", @@ -515,6 +516,7 @@ "pin_number": "Número PIN", "placeholder_contacts": "Seus contatos serão exibidos aqui", "placeholder_transactions": "Suas transações serão exibidas aqui", + "please_choose_one": "Escolha um", "please_fill_totp": "Por favor, preencha o código de 8 dígitos presente em seu outro dispositivo", "please_make_selection": "Escolha se quer criar uma carteira nova ou restaurar uma antiga.", "please_reference_document": "Por favor, consulte os documentos abaixo para mais informações.", diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index d354a758a..f09ca70e2 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -175,7 +175,7 @@ "contact_name_exists": "Контакт с таким именем уже существует. Пожалуйста, выберите другое имя.", "contact_support": "Связаться со службой поддержки", "continue_text": "Продолжить", - "contract_warning": "Этот адрес контракта был отмечен как потенциально мошеннический. Пожалуйста, обработайтесь с осторожностью.", + "contract_warning": "Этот адрес контракта был отмечен как потенциально мошеннический. Пожалуйста, продолжайте с осторожностью.", "contractName": "Название контракта", "contractSymbol": "Символ контракта", "copied_key_to_clipboard": "Скопировано ${key} в буфер обмена", @@ -437,6 +437,7 @@ "monero_light_theme": "Светлая тема Monero", "moonpay_alert_text": "Сумма должна быть больше или равна ${minAmount} ${fiatCurrency}", "more_options": "Дополнительные параметры", + "multiple_addresses_detected": "Обнаружено несколько адресов", "mweb_confirmed": "Подтверждено MWEB", "mweb_unconfirmed": "Неподтвержденная MWEB", "name": "Имя", @@ -514,6 +515,7 @@ "pin_number": "ПИН-код", "placeholder_contacts": "Ваши контакты будут отображаться здесь", "placeholder_transactions": "Ваши транзакции будут отображаться здесь", + "please_choose_one": "Пожалуйста, выберите один", "please_fill_totp": "Пожалуйста, введите 8-значный код на другом устройстве", "please_make_selection": "Выберите способ создания кошелька: создать новый или восстановить ваш существующий.", "please_reference_document": "Пожалуйста, обратитесь к документам ниже для получения дополнительной информации.", diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index 8bf0efeb8..5206db0bf 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -437,6 +437,7 @@ "monero_light_theme": "ธีมแสง Monero", "moonpay_alert_text": "มูลค่าของจำนวนต้องมากกว่าหรือเท่ากับ ${minAmount} ${fiatCurrency}", "more_options": "ตัวเลือกเพิ่มเติม", + "multiple_addresses_detected": "ตรวจพบหลายที่อยู่", "mweb_confirmed": "MWEB ยืนยันแล้ว", "mweb_unconfirmed": "mweb ที่ไม่ได้รับการยืนยัน", "name": "ชื่อ", @@ -513,6 +514,7 @@ "pin_number": "หมายเลข PIN", "placeholder_contacts": "รายชื่อผู้ติดต่อของคุณจะปรากฏที่นี่", "placeholder_transactions": "ธุรกรรมของคุณจะปรากฏที่นี่", + "please_choose_one": "โปรดเลือกหนึ่ง", "please_fill_totp": "กรุณากรอกรหัส 8 หลักที่อยู่ในอุปกรณ์อื่นของคุณ", "please_make_selection": "โปรดเลือกตามด้านล่างเพื่อสร้างหรือกู้กระเป๋าของคุณ", "please_reference_document": "โปรดอ้างอิงเอกสารด้านล่างสำหรับข้อมูลเพิ่มเติม", diff --git a/res/values/strings_tl.arb b/res/values/strings_tl.arb index e4b8e87b5..4befe732a 100644 --- a/res/values/strings_tl.arb +++ b/res/values/strings_tl.arb @@ -175,7 +175,7 @@ "contact_name_exists": "Ang isang pakikipag -ugnay sa pangalang iyon ay mayroon na. Mangyaring pumili ng ibang pangalan.", "contact_support": "Makipag-ugnay sa Suporta", "continue_text": "Magpatuloy", - "contract_warning": "Ang address ng kontrata na ito ay na -flag bilang potensyal na mapanlinlang. Mangyaring iproseso nang may pag -iingat.", + "contract_warning": "Ang address ng kontrata na ito ay na -flag bilang potensyal na mapanlinlang. Mangyaring magpatuloy sa pag -iingat.", "contractName": "Pangalan ng Kontrata", "contractSymbol": "Simbolo ng Kontrata", "copied_key_to_clipboard": "Kinopya ang ${key} sa Clipboard", @@ -437,6 +437,7 @@ "monero_light_theme": "Monero Light Theme", "moonpay_alert_text": "Ang halaga ay dapat na higit pa o katumbas ng ${minAmount} ${fiatCurrency}", "more_options": "Higit pang mga Pagpipilian", + "multiple_addresses_detected": "Maramihang mga address na napansin", "mweb_confirmed": "Nakumpirma na MWeb", "mweb_unconfirmed": "Hindi nakumpirma si Mweb", "name": "Pangalan", @@ -513,6 +514,7 @@ "pin_number": "Numero ng PIN", "placeholder_contacts": "Ang iyong mga contact ay ipapakita dito", "placeholder_transactions": "Ang iyong mga transaksyon ay ipapakita dito", + "please_choose_one": "Mangyaring pumili ng isa", "please_fill_totp": "Mangyaring punan ang 8-digit na code na naroroon sa iyong iba pang device", "please_make_selection": "Mangyaring gumawa ng isang pagpipilian sa ibaba upang lumikha o mabawi ang iyong wallet.", "please_reference_document": "Mangyaring sumangguni sa mga dokumento sa ibaba para sa karagdagang impormasyon.", diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb index 38e16b0e9..efb00c98f 100644 --- a/res/values/strings_tr.arb +++ b/res/values/strings_tr.arb @@ -175,7 +175,7 @@ "contact_name_exists": "Bu isimde bir kişi zaten mevcut. Lütfen farklı bir ad seçin.", "contact_support": "Destek ile İletişime Geç", "continue_text": "Devam et", - "contract_warning": "Bu sözleşme adresi potansiyel olarak hileli olarak işaretlenmiştir. Lütfen dikkatle işleyin.", + "contract_warning": "Bu sözleşme adresi potansiyel olarak hileli olarak işaretlenmiştir. Lütfen dikkatle devam edin.", "contractName": "Sözleşme Adı", "contractSymbol": "Sözleşme Sembolü", "copied_key_to_clipboard": "${key} panoya kopyalandı", @@ -437,6 +437,7 @@ "monero_light_theme": "Monero Hafif Tema", "moonpay_alert_text": "Tutar ${minAmount} ${fiatCurrency} miktarına eşit veya daha fazla olmalıdır", "more_options": "Daha Fazla Seçenek", + "multiple_addresses_detected": "Birden çok adres tespit edildi", "mweb_confirmed": "Onaylanmış mweb", "mweb_unconfirmed": "Doğrulanmamış mweb", "name": "İsim", @@ -513,6 +514,7 @@ "pin_number": "PIN kodu", "placeholder_contacts": "Kişilerin burada görüntülenecek", "placeholder_transactions": "İşlemlerin burada görüntülenecek", + "please_choose_one": "Lütfen bir tane seçin", "please_fill_totp": "Lütfen diğer cihazınızda bulunan 8 haneli kodu girin", "please_make_selection": "Cüzdan oluşturmak veya geri döndürmek için aşağıdan seçim yap.", "please_reference_document": "Daha fazla bilgi için lütfen aşağıdaki belgelere bakınız.", diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 4493634a8..c670b174a 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -175,7 +175,7 @@ "contact_name_exists": "Контакт із такою назвою вже існує. Виберіть інше ім'я.", "contact_support": "Звернутися до служби підтримки", "continue_text": "Продовжити", - "contract_warning": "Ця адреса контракту була позначена як потенційно шахрайська. Будь ласка, обробляйте обережно.", + "contract_warning": "Ця адреса контракту була позначена як потенційно шахрайська. Будь ласка, продовжуйте обережно.", "contractName": "Назва контракту", "contractSymbol": "Контракт символ", "copied_key_to_clipboard": "Скопійовано ${key} в буфер обміну", @@ -437,6 +437,7 @@ "monero_light_theme": "Легка тема Monero", "moonpay_alert_text": "Значення суми має бути більшим або дорівнювати ${minAmount} ${fiatCurrency}", "more_options": "Більше параметрів", + "multiple_addresses_detected": "Виявлено кілька адрес", "mweb_confirmed": "Підтвердив Mweb", "mweb_unconfirmed": "Неперевірений MWEB", "name": "Ім'я", @@ -513,6 +514,7 @@ "pin_number": "PIN-код", "placeholder_contacts": "Тут будуть показані ваші контакти", "placeholder_transactions": "Тут відображатимуться ваші транзакції", + "please_choose_one": "Будь ласка, виберіть один", "please_fill_totp": "Будь ласка, введіть 8-значний код, наявний на вашому іншому пристрої", "please_make_selection": "Оберіть спосіб створення гаманця: створити новий чи відновити ваш існуючий.", "please_reference_document": "Для отримання додаткової інформації зверніться до документів нижче.", diff --git a/res/values/strings_ur.arb b/res/values/strings_ur.arb index d03dd2785..8a12b50dc 100644 --- a/res/values/strings_ur.arb +++ b/res/values/strings_ur.arb @@ -175,7 +175,7 @@ "contact_name_exists": " ۔ﮟﯾﺮﮐ ﺐﺨﺘﻨﻣ ﻡﺎﻧ ﻒﻠﺘﺨﻣ ﮏﯾﺍ ﻡﺮﮐ ﮦﺍﺮﺑ ۔ﮯﮨ ﺩﻮﺟﻮﻣ ﮯﺳ ﮯﻠﮩﭘ ﮧﻄﺑﺍﺭ ﮏﯾﺍ ﮫﺗﺎﺳ ﮯﮐ ﻡﺎﻧ ﺱﺍ", "contact_support": "سپورٹ سے رابطہ کریں۔", "continue_text": "جاری رہے", - "contract_warning": "اس معاہدے کے پتے کو ممکنہ طور پر جعلی قرار دیا گیا ہے۔ براہ کرم احتیاط کے ساتھ کارروائی کریں۔", + "contract_warning": "اس معاہدے کے پتے کو ممکنہ طور پر جعلی قرار دیا گیا ہے۔ براہ کرم احتیاط کے ساتھ آگے بڑھیں۔", "contractName": "ﻡﺎﻧ ﺎﮐ ﮦﺪﮨﺎﻌﻣ", "contractSymbol": "ﺖﻣﻼﻋ ﯽﮐ ﮦﺪﮨﺎﻌﻣ", "copied_key_to_clipboard": "${key} کو کلپ بورڈ پر کاپی کیا گیا۔", @@ -437,6 +437,7 @@ "monero_light_theme": "مونیرو لائٹ تھیم", "moonpay_alert_text": "رقم کی قدر ${minAmount} ${fiatCurrency} کے برابر یا زیادہ ہونی چاہیے۔", "more_options": "مزید زرائے", + "multiple_addresses_detected": "متعدد پتے کا پتہ چلا", "mweb_confirmed": "تصدیق شدہ MWEB", "mweb_unconfirmed": "غیر مصدقہ MWEB", "name": "ﻡﺎﻧ", @@ -515,6 +516,7 @@ "pin_number": "پن نمبر", "placeholder_contacts": "آپ کے رابطے یہاں دکھائے جائیں گے۔", "placeholder_transactions": "آپ کے لین دین یہاں دکھائے جائیں گے۔", + "please_choose_one": "براہ کرم ایک کا انتخاب کریں", "please_fill_totp": "براہ کرم اپنے دوسرے آلے پر موجود 8 ہندسوں کا کوڈ پُر کریں۔", "please_make_selection": "اپنا بٹوہ بنانے یا بازیافت کرنے کے لیے براہ کرم ذیل میں ایک انتخاب کریں۔", "please_reference_document": "مزید معلومات کے لیے براہ کرم نیچے دی گئی دستاویزات کا حوالہ دیں۔", diff --git a/res/values/strings_vi.arb b/res/values/strings_vi.arb index 2d5ce9770..637e10a76 100644 --- a/res/values/strings_vi.arb +++ b/res/values/strings_vi.arb @@ -174,7 +174,7 @@ "contact_name_exists": "Một liên hệ với cái tên đó đã tồn tại. Vui lòng chọn một tên khác.", "contact_support": "Liên hệ Hỗ trợ", "continue_text": "Tiếp tục", - "contract_warning": "Địa chỉ hợp đồng này đã được gắn cờ là có khả năng lừa đảo. Vui lòng xử lý một cách thận trọng.", + "contract_warning": "Địa chỉ hợp đồng này đã được gắn cờ là có khả năng lừa đảo. Hãy tiến hành thận trọng.", "contractName": "Tên Hợp đồng", "contractSymbol": "Ký hiệu Hợp đồng", "copied_key_to_clipboard": "Đã sao chép ${key} vào khay nhớ tạm", @@ -436,6 +436,7 @@ "monero_light_theme": "Chủ đề sáng Monero", "moonpay_alert_text": "Giá trị số tiền phải lớn hơn hoặc bằng ${minAmount} ${fiatCurrency}", "more_options": "Thêm tùy chọn", + "multiple_addresses_detected": "Nhiều địa chỉ được phát hiện", "mweb_confirmed": "Xác nhận MWEB", "mweb_unconfirmed": "MWEB chưa được xác nhận", "name": "Tên", @@ -512,6 +513,7 @@ "pin_number": "Số PIN", "placeholder_contacts": "Danh bạ của bạn sẽ được hiển thị ở đây", "placeholder_transactions": "Giao dịch của bạn sẽ được hiển thị ở đây", + "please_choose_one": "Vui lòng chọn một", "please_fill_totp": "Vui lòng điền mã 8 chữ số trên thiết bị khác của bạn", "please_make_selection": "Vui lòng chọn một tùy chọn dưới đây để tạo hoặc khôi phục ví của bạn.", "please_reference_document": "Vui lòng tham khảo các tài liệu dưới đây để biết thêm thông tin.", diff --git a/res/values/strings_yo.arb b/res/values/strings_yo.arb index b837e6a89..ca2f6ade0 100644 --- a/res/values/strings_yo.arb +++ b/res/values/strings_yo.arb @@ -175,7 +175,7 @@ "contact_name_exists": "Olubasọrọ pẹlu orukọ yẹn ti wa tẹlẹ. Jọwọ yan orukọ ti o yatọ.", "contact_support": "Bá ìranlọ́wọ́ sọ̀rọ̀", "continue_text": "Tẹ̀síwájú", - "contract_warning": "Adirẹsi adehun adehun yii ti samisi bi arekereke. Jọwọ ṣe ilana pẹlu iṣọra.", + "contract_warning": "Adirẹsi adehun adehun yii ti samisi bi arekereke. Jọwọ tẹsiwaju pẹlu iṣọra.", "contractName": "Orukọ adehun", "contractSymbol": "Aami adehun", "copied_key_to_clipboard": "Ti ṣeda ${key} sí àtẹ àkọsílẹ̀", @@ -438,6 +438,7 @@ "monero_light_theme": "Monero Light Akori", "moonpay_alert_text": "Iye owó kò gbọ́dọ̀ kéré ju ${minAmount} ${fiatCurrency}", "more_options": "Ìyàn àfikún", + "multiple_addresses_detected": "Awọn adirẹsi ọpọ rii", "mweb_confirmed": "Jẹrisi Mweb", "mweb_unconfirmed": "Ajopo Mweb", "name": "Oruko", @@ -514,6 +515,7 @@ "pin_number": "Òǹkà ìdánimọ̀ àdáni", "placeholder_contacts": "A máa fihàn àwọn olùbásọ̀rọ̀ yín ḿbí", "placeholder_transactions": "A máa fihàn àwọn àránṣẹ́ yín ḿbí", + "please_choose_one": "Jọwọ yan ọkan", "please_fill_totp": "Jọwọ bọ ti ẹrọ ti o wọle ni 8-digits ti o wa ni eto miiran re", "please_make_selection": "Ẹ jọ̀wọ́, yàn dá àpamọ́wọ́ yín tàbí dá àpamọ́wọ́ yín padà n’ísàlẹ̀.", "please_reference_document": "Ẹ jọ̀wọ́ fi àwọn àkọsílẹ̀ l’ábẹ́ túbọ̀ mọ ìsọfúnni.", diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 466acf985..d272b08b2 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -175,7 +175,7 @@ "contact_name_exists": "已存在具有该名称的联系人。请选择不同的名称。", "contact_support": "联系支持", "continue_text": "继续", - "contract_warning": "该合同地址已被标记为潜在的欺诈性。请谨慎处理。", + "contract_warning": "该合同地址已被标记为潜在的欺诈性。请谨慎行事。", "contractName": "合约名称", "contractSymbol": "合约符号", "copied_key_to_clipboard": "复制 ${key} 到剪贴板", @@ -437,6 +437,7 @@ "monero_light_theme": "门罗币浅色主题", "moonpay_alert_text": "金额的价值必须大于或等于 ${minAmount} ${fiatCurrency}", "more_options": "更多选项", + "multiple_addresses_detected": "检测到的多个地址", "mweb_confirmed": "确认的MWEB", "mweb_unconfirmed": "未经证实的MWEB", "name": "姓名", @@ -513,6 +514,7 @@ "pin_number": "PIN 码", "placeholder_contacts": "您的联系人将显示在这里", "placeholder_transactions": "您的交易将显示在这里", + "please_choose_one": "请选择一个", "please_fill_totp": "请填写您其他设备上的 8 位代码", "please_make_selection": "请在下面进行选择 创建或恢复您的钱包.", "please_reference_document": "请参考以下文档以获取更多信息。", diff --git a/scripts/android/app_env.sh b/scripts/android/app_env.sh index 6b34a9bb1..8b1d46264 100644 --- a/scripts/android/app_env.sh +++ b/scripts/android/app_env.sh @@ -15,15 +15,15 @@ TYPES=($MONERO_COM $CAKEWALLET $HAVEN) APP_ANDROID_TYPE=$1 MONERO_COM_NAME="Monero.com" -MONERO_COM_VERSION="1.20.0" -MONERO_COM_BUILD_NUMBER=113 +MONERO_COM_VERSION="1.20.2" +MONERO_COM_BUILD_NUMBER=114 MONERO_COM_BUNDLE_ID="com.monero.app" MONERO_COM_PACKAGE="com.monero.app" MONERO_COM_SCHEME="monero.com" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="4.23.0" -CAKEWALLET_BUILD_NUMBER=246 +CAKEWALLET_VERSION="4.23.2" +CAKEWALLET_BUILD_NUMBER=247 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 304b95b5b..c6d3778f3 100644 --- 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.20.1" -MONERO_COM_BUILD_NUMBER=111 +MONERO_COM_VERSION="1.20.2" +MONERO_COM_BUILD_NUMBER=112 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="4.23.1" -CAKEWALLET_BUILD_NUMBER=295 +CAKEWALLET_VERSION="4.23.2" +CAKEWALLET_BUILD_NUMBER=298 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" HAVEN_NAME="Haven" diff --git a/scripts/linux/app_env.sh b/scripts/linux/app_env.sh index f049933bf..325d2b335 100755 --- a/scripts/linux/app_env.sh +++ b/scripts/linux/app_env.sh @@ -14,8 +14,8 @@ if [ -n "$1" ]; then fi CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="1.13.0" -CAKEWALLET_BUILD_NUMBER=46 +CAKEWALLET_VERSION="1.13.2" +CAKEWALLET_BUILD_NUMBER=47 if ! [[ " ${TYPES[*]} " =~ " ${APP_LINUX_TYPE} " ]]; then echo "Wrong app type." diff --git a/scripts/macos/app_env.sh b/scripts/macos/app_env.sh index e54a7bfe0..f554d4d01 100755 --- a/scripts/macos/app_env.sh +++ b/scripts/macos/app_env.sh @@ -16,13 +16,13 @@ if [ -n "$1" ]; then fi MONERO_COM_NAME="Monero.com" -MONERO_COM_VERSION="1.10.0" -MONERO_COM_BUILD_NUMBER=43 +MONERO_COM_VERSION="1.10.2" +MONERO_COM_BUILD_NUMBER=44 MONERO_COM_BUNDLE_ID="com.cakewallet.monero" CAKEWALLET_NAME="Cake Wallet" -CAKEWALLET_VERSION="1.16.0" -CAKEWALLET_BUILD_NUMBER=104 +CAKEWALLET_VERSION="1.16.2" +CAKEWALLET_BUILD_NUMBER=105 CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" if ! [[ " ${TYPES[*]} " =~ " ${APP_MACOS_TYPE} " ]]; then diff --git a/scripts/windows/build_exe_installer.iss b/scripts/windows/build_exe_installer.iss index 40c2a8af5..b2dd60130 100644 --- a/scripts/windows/build_exe_installer.iss +++ b/scripts/windows/build_exe_installer.iss @@ -1,5 +1,5 @@ #define MyAppName "Cake Wallet" -#define MyAppVersion "0.4.0" +#define MyAppVersion "0.4.2" #define MyAppPublisher "Cake Labs LLC" #define MyAppURL "https://cakewallet.com/" #define MyAppExeName "CakeWallet.exe" diff --git a/tool/configure.dart b/tool/configure.dart index 7fb72d5e4..214288078 100644 --- a/tool/configure.dart +++ b/tool/configure.dart @@ -872,6 +872,7 @@ import 'package:cw_evm/evm_chain_wallet.dart'; import 'package:cw_ethereum/ethereum_client.dart'; import 'package:cw_ethereum/ethereum_wallet.dart'; import 'package:cw_ethereum/ethereum_wallet_service.dart'; +import 'package:cw_ethereum/default_ethereum_erc20_tokens.dart'; import 'package:eth_sig_util/util/utils.dart'; @@ -922,6 +923,7 @@ abstract class Ethereum { void setLedgerConnection(WalletBase wallet, ledger.LedgerConnection connection); Future> getHardwareWalletAccounts(LedgerViewModel ledgerVM, {int index = 0, int limit = 5}); + List getDefaultTokenContractAddresses(); } """; @@ -977,6 +979,7 @@ import 'package:cw_evm/evm_chain_wallet.dart'; import 'package:cw_polygon/polygon_client.dart'; import 'package:cw_polygon/polygon_wallet.dart'; import 'package:cw_polygon/polygon_wallet_service.dart'; +import 'package:cw_polygon/default_polygon_erc20_tokens.dart'; import 'package:eth_sig_util/util/utils.dart'; @@ -1027,6 +1030,7 @@ abstract class Polygon { void setLedgerConnection(WalletBase wallet, ledger.LedgerConnection connection); Future> getHardwareWalletAccounts(LedgerViewModel ledgerVM, {int index = 0, int limit = 5}); + List getDefaultTokenContractAddresses(); } """; @@ -1269,6 +1273,7 @@ import 'package:cw_solana/solana_wallet_service.dart'; import 'package:cw_solana/solana_transaction_info.dart'; import 'package:cw_solana/solana_transaction_credentials.dart'; import 'package:cw_solana/solana_wallet_creation_credentials.dart'; +import 'package:cw_solana/default_spl_tokens.dart'; """; const solanaCwPart = "part 'cw_solana.dart';"; const solanaContent = """ @@ -1310,6 +1315,7 @@ abstract class Solana { String getTokenAddress(CryptoCurrency asset); List? getValidationLength(CryptoCurrency type); double? getEstimateFees(WalletBase wallet); + List getDefaultTokenContractAddresses(); } """; @@ -1355,6 +1361,7 @@ import 'package:cw_tron/tron_client.dart'; import 'package:cw_tron/tron_token.dart'; import 'package:cw_tron/tron_wallet.dart'; import 'package:cw_tron/tron_wallet_service.dart'; +import 'package:cw_tron/default_tron_tokens.dart'; """; const tronCwPart = "part 'cw_tron.dart';"; @@ -1386,6 +1393,7 @@ abstract class Tron { String? getTronTRC20EstimatedFee(WalletBase wallet); void updateTronGridUsageState(WalletBase wallet, bool isEnabled); + List getDefaultTokenContractAddresses(); } """;