Merge remote-tracking branch 'origin/main' into electrum-sp-refactors

This commit is contained in:
Rafael Saes 2025-04-18 19:37:53 -03:00
commit d6bf2f3f48
57 changed files with 445 additions and 364 deletions

View file

@ -11,3 +11,4 @@ Please include a summary of the changes and which issue is fixed / feature is ad
- [ ] Format code - [ ] Format code
- [ ] Look for code duplication - [ ] Look for code duplication
- [ ] Clear naming for variables and methods - [ ] Clear naming for variables and methods
- [ ] Manual tests in accessibility mode (TalkBack on Android) passed

View file

@ -19,15 +19,15 @@ Future<void> backupWalletFiles(String name) async {
final newKeysFilePath = backupFileName(keysFile.path); final newKeysFilePath = backupFileName(keysFile.path);
final newAddressListFilePath = backupFileName(addressListFile.path); final newAddressListFilePath = backupFileName(addressListFile.path);
if (cacheFile.existsSync()) { if (cacheFile.existsSync() && !File(newCacheFilePath).existsSync()) {
await cacheFile.copy(newCacheFilePath); await cacheFile.copy(newCacheFilePath);
} }
if (keysFile.existsSync()) { if (keysFile.existsSync() && !File(newKeysFilePath).existsSync()) {
await keysFile.copy(newKeysFilePath); await keysFile.copy(newKeysFilePath);
} }
if (addressListFile.existsSync()) { if (addressListFile.existsSync() && !File(newAddressListFilePath).existsSync()) {
await addressListFile.copy(newAddressListFilePath); await addressListFile.copy(newAddressListFilePath);
} }
} }
@ -83,10 +83,13 @@ Future<bool> backupWalletFilesExists(String name) async {
Future<void> removeCache(String name) async { Future<void> removeCache(String name) async {
final path = await pathForWallet(name: name, type: WalletType.monero); final path = await pathForWallet(name: name, type: WalletType.monero);
final cacheFile = File(path); final cacheFile = File(path);
final backgroundCacheFile = File(path + ".background");
if (cacheFile.existsSync()) { if (cacheFile.existsSync()) {
cacheFile.deleteSync(); cacheFile.deleteSync();
} }
if (backgroundCacheFile.existsSync()) {
backgroundCacheFile.deleteSync();
}
} }
Future<void> restoreOrResetWalletFiles(String name) async { Future<void> restoreOrResetWalletFiles(String name) async {
@ -94,7 +97,8 @@ Future<void> restoreOrResetWalletFiles(String name) async {
if (backupsExists) { if (backupsExists) {
await removeCache(name); await removeCache(name);
// TODO(mrcyjanek): is this needed?
// If we remove cache then wallet should be restored from .keys file.
await restoreWalletFiles(name); await restoreWalletFiles(name);
} }
} }

View file

@ -222,7 +222,7 @@ abstract class DecredWalletBase extends WalletBase<DecredBalance, DecredTransact
Future<bool> checkSync() async { Future<bool> checkSync() async {
final syncStatusJSON = await _libwallet.syncStatus(walletInfo.name); final syncStatusJSON = await _libwallet.syncStatus(walletInfo.name);
final decoded = json.decode(syncStatusJSON); final decoded = json.decode(syncStatusJSON.isEmpty ? "{}" : syncStatusJSON);
final syncStatusCode = decoded["syncstatuscode"] ?? 0; final syncStatusCode = decoded["syncstatuscode"] ?? 0;
// final syncStatusStr = decoded["syncstatus"] ?? ""; // final syncStatusStr = decoded["syncstatus"] ?? "";

View file

@ -254,8 +254,9 @@ class SolanaWalletClient {
final receiver = message.accountKeys[instruction.accounts[1]].address; final receiver = message.accountKeys[instruction.accounts[1]].address;
String? tokenSymbol = splTokenSymbol; String? tokenSymbol = splTokenSymbol;
if (tokenSymbol == null && mintAddress != null) { if (tokenSymbol == null && mintAddress != null) {
final token = await fetchSPLTokenInfo(mintAddress); final token = await getTokenInfo(mintAddress);
tokenSymbol = token?.symbol; tokenSymbol = token?.symbol;
} }
@ -288,9 +289,9 @@ class SolanaWalletClient {
int? splTokenDecimal, int? splTokenDecimal,
Commitment? commitment, Commitment? commitment,
SolAddress? walletAddress, SolAddress? walletAddress,
required void Function(List<SolanaTransactionModel>) onUpdate,
}) async { }) async {
List<SolanaTransactionModel> transactions = []; List<SolanaTransactionModel> transactions = [];
try { try {
final signatures = await _provider!.request( final signatures = await _provider!.request(
SolanaRequestGetSignaturesForAddress( SolanaRequestGetSignaturesForAddress(
@ -299,10 +300,11 @@ class SolanaWalletClient {
), ),
); );
final List<VersionedTransactionResponse?> transactionDetails = []; // The maximum concurrent batch size.
const int batchSize = 10;
for (int i = 0; i < signatures.length; i += 20) { for (int i = 0; i < signatures.length; i += batchSize) {
final batch = signatures.skip(i).take(20).toList(); // Get the next 20 signatures final batch = signatures.skip(i).take(batchSize).toList();
final batchResponses = await Future.wait(batch.map((signature) async { final batchResponses = await Future.wait(batch.map((signature) async {
try { try {
@ -314,30 +316,31 @@ class SolanaWalletClient {
), ),
); );
} catch (e) { } catch (e) {
printV("Error fetching transaction: $e"); // printV("Error fetching transaction: $e");
return null; return null;
} }
})); }));
transactionDetails.addAll(batchResponses.whereType<VersionedTransactionResponse>()); final versionedBatchResponses = batchResponses.whereType<VersionedTransactionResponse>();
// to avoid reaching the node RPS limit final parsedTransactionsFutures = versionedBatchResponses.map((tx) => parseTransaction(
if (i + 20 < signatures.length) { txResponse: tx,
splTokenSymbol: splTokenSymbol,
walletAddress: walletAddress?.address ?? address.address,
));
final parsedTransactions = await Future.wait(parsedTransactionsFutures);
transactions.addAll(parsedTransactions.whereType<SolanaTransactionModel>().toList());
// Calling the callback after each batch is processed, therefore passing the current list of transactions.
onUpdate(List<SolanaTransactionModel>.from(transactions));
if (i + batchSize < signatures.length) {
await Future.delayed(const Duration(milliseconds: 500)); await Future.delayed(const Duration(milliseconds: 500));
} }
} }
for (final tx in transactionDetails) {
final parsedTx = await parseTransaction(
txResponse: tx,
splTokenSymbol: splTokenSymbol,
walletAddress: walletAddress?.address ?? address.address,
);
if (parsedTx != null) {
transactions.add(parsedTx);
}
}
return transactions; return transactions;
} catch (err, s) { } catch (err, s) {
printV('Error fetching transactions: $err \n$s'); printV('Error fetching transactions: $err \n$s');
@ -350,6 +353,7 @@ class SolanaWalletClient {
required String splTokenSymbol, required String splTokenSymbol,
required int splTokenDecimal, required int splTokenDecimal,
required SolanaPrivateKey privateKey, required SolanaPrivateKey privateKey,
required void Function(List<SolanaTransactionModel>) onUpdate,
}) async { }) async {
ProgramDerivedAddress? associatedTokenAccount; ProgramDerivedAddress? associatedTokenAccount;
final ownerWalletAddress = privateKey.publicKey().toAddress(); final ownerWalletAddress = privateKey.publicKey().toAddress();
@ -373,11 +377,26 @@ class SolanaWalletClient {
splTokenSymbol: splTokenSymbol, splTokenSymbol: splTokenSymbol,
splTokenDecimal: splTokenDecimal, splTokenDecimal: splTokenDecimal,
walletAddress: ownerWalletAddress, walletAddress: ownerWalletAddress,
onUpdate: onUpdate,
); );
return tokenTransactions; return tokenTransactions;
} }
final Map<String, SPLToken?> tokenInfoCache = {};
Future<SPLToken?> getTokenInfo(String mintAddress) async {
if (tokenInfoCache.containsKey(mintAddress)) {
return tokenInfoCache[mintAddress];
} else {
final token = await fetchSPLTokenInfo(mintAddress);
if (token != null) {
tokenInfoCache[mintAddress] = token;
}
return token;
}
}
Future<SPLToken?> fetchSPLTokenInfo(String mintAddress) async { Future<SPLToken?> fetchSPLTokenInfo(String mintAddress) async {
final programAddress = final programAddress =
MetaplexTokenMetaDataProgramUtils.findMetadataPda(mint: SolAddress(mintAddress)); MetaplexTokenMetaDataProgramUtils.findMetadataPda(mint: SolAddress(mintAddress));
@ -747,9 +766,7 @@ class SolanaWalletClient {
} catch (e) { } catch (e) {
associatedRecipientAccount = null; associatedRecipientAccount = null;
throw SolanaCreateAssociatedTokenAccountException( throw SolanaCreateAssociatedTokenAccountException(e.toString());
'Error fetching recipient associated token account: ${e.toString()}',
);
} }
if (associatedRecipientAccount == null) { if (associatedRecipientAccount == null) {

View file

@ -166,10 +166,10 @@ abstract class SolanaWalletBase extends WalletBase<SolanaBalance, SolanaTransact
try { try {
final keypairBytes = Base58Decoder.decode(privateKey!); final keypairBytes = Base58Decoder.decode(privateKey!);
return SolanaPrivateKey.fromSeed(keypairBytes); return SolanaPrivateKey.fromBytes(keypairBytes);
} catch (_) { } catch (_) {
final privateKeyBytes = HEX.decode(privateKey!); final privateKeyBytes = HEX.decode(privateKey!);
return SolanaPrivateKey.fromBytes(privateKeyBytes); return SolanaPrivateKey.fromSeed(privateKeyBytes);
} }
} }
@ -291,9 +291,14 @@ abstract class SolanaWalletBase extends WalletBase<SolanaBalance, SolanaTransact
@override @override
Future<Map<String, SolanaTransactionInfo>> fetchTransactions() async => {}; Future<Map<String, SolanaTransactionInfo>> fetchTransactions() async => {};
void updateTransactions(List<SolanaTransactionModel> updatedTx) {
_addTransactionsToTransactionHistory(updatedTx);
}
/// Fetches the native SOL transactions linked to the wallet Public Key /// Fetches the native SOL transactions linked to the wallet Public Key
Future<void> _updateNativeSOLTransactions() async { Future<void> _updateNativeSOLTransactions() async {
final transactions = await _client.fetchTransactions(_solanaPublicKey.toAddress()); final transactions =
await _client.fetchTransactions(_solanaPublicKey.toAddress(), onUpdate: updateTransactions);
await _addTransactionsToTransactionHistory(transactions); await _addTransactionsToTransactionHistory(transactions);
} }
@ -312,6 +317,7 @@ abstract class SolanaWalletBase extends WalletBase<SolanaBalance, SolanaTransact
splTokenSymbol: token.symbol, splTokenSymbol: token.symbol,
splTokenDecimal: token.decimal, splTokenDecimal: token.decimal,
privateKey: _solanaPrivateKey, privateKey: _solanaPrivateKey,
onUpdate: updateTransactions,
); );
// splTokenTransactions.addAll(tokenTxs); // splTokenTransactions.addAll(tokenTxs);

View file

@ -11,7 +11,6 @@ import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/store/settings_store.dart';
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
import 'package:cw_core/crypto_currency.dart'; import 'package:cw_core/crypto_currency.dart';
import 'package:cw_core/currency.dart';
import 'package:cw_core/utils/print_verbose.dart'; import 'package:cw_core/utils/print_verbose.dart';
import 'package:cw_core/wallet_base.dart'; import 'package:cw_core/wallet_base.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -242,7 +241,7 @@ class OnRamperBuyProvider extends BuyProvider {
if (await canLaunchUrl(uri)) { if (await canLaunchUrl(uri)) {
await launchUrl(uri, mode: LaunchMode.externalApplication); await launchUrl(uri, mode: LaunchMode.externalApplication);
} else { } else {
throw Exception('Could not launch URL'); throw Exception('Could not launch URL ${uri.toString()}');
} }
} }
@ -276,7 +275,7 @@ class OnRamperBuyProvider extends BuyProvider {
if (currency.tag != null) return '_' + _tagToNetwork(currency.tag!); if (currency.tag != null) return '_' + _tagToNetwork(currency.tag!);
return '_' + (currency.fullName?.replaceAll(' ', '') ?? currency.title);; return '_' + (currency.fullName?.replaceAll(' ', '') ?? currency.title);
} }
String? normalizePaymentMethod(PaymentType paymentType) { String? normalizePaymentMethod(PaymentType paymentType) {

9
lib/core/utilities.dart Normal file
View file

@ -0,0 +1,9 @@
extension EnhancedList<T> on Iterable<T> {
T? firstWhereOrNull(bool Function(T element) test) {
try {
return firstWhere(test);
} catch (e) {
return null;
}
}
}

View file

@ -15,7 +15,6 @@ import 'package:cake_wallet/core/backup_service_v3.dart';
import 'package:cake_wallet/core/new_wallet_arguments.dart'; import 'package:cake_wallet/core/new_wallet_arguments.dart';
import 'package:cake_wallet/buy/robinhood/robinhood_buy_provider.dart'; import 'package:cake_wallet/buy/robinhood/robinhood_buy_provider.dart';
import 'package:cake_wallet/core/auth_service.dart'; import 'package:cake_wallet/core/auth_service.dart';
import 'package:cake_wallet/core/backup_service.dart';
import 'package:cake_wallet/core/key_service.dart'; import 'package:cake_wallet/core/key_service.dart';
import 'package:cake_wallet/core/new_wallet_type_arguments.dart'; import 'package:cake_wallet/core/new_wallet_type_arguments.dart';
import 'package:cake_wallet/core/secure_storage.dart'; import 'package:cake_wallet/core/secure_storage.dart';
@ -1238,8 +1237,7 @@ Future<void> setup({
); );
}); });
getIt.registerFactoryParam<PreSeedPage, int, void>( getIt.registerFactory<PreSeedPage>(() => PreSeedPage());
(seedPhraseLength, _) => PreSeedPage(seedPhraseLength));
getIt.registerFactoryParam<TransactionSuccessPage, String, void>( getIt.registerFactoryParam<TransactionSuccessPage, String, void>(
(content, _) => TransactionSuccessPage(content: content)); (content, _) => TransactionSuccessPage(content: content));

View file

@ -1,3 +1,5 @@
import 'dart:math';
import 'package:cake_wallet/entities/hash_wallet_identifier.dart'; import 'package:cake_wallet/entities/hash_wallet_identifier.dart';
import 'package:cake_wallet/entities/wallet_group.dart'; import 'package:cake_wallet/entities/wallet_group.dart';
import 'package:cw_core/wallet_base.dart'; import 'package:cw_core/wallet_base.dart';
@ -33,7 +35,11 @@ class WalletManager {
} }
// Fallback to old logic // Fallback to old logic
return walletInfo.parentAddress ?? walletInfo.address; final address = walletInfo.parentAddress ?? walletInfo.address;
if (address.isEmpty) {
return Random().nextInt(100000).toString();
}
return address;
} }
WalletGroup _getOrCreateGroup(String groupKey) { WalletGroup _getOrCreateGroup(String groupKey) {

View file

@ -7,6 +7,7 @@ class TradeState extends EnumerableItem<String> with Serializable<String> {
bool operator ==(Object other) => other is TradeState && other.raw == raw; bool operator ==(Object other) => other is TradeState && other.raw == raw;
static const pending = TradeState(raw: 'pending', title: 'Pending'); static const pending = TradeState(raw: 'pending', title: 'Pending');
static const awaiting = TradeState(raw: 'awaiting', title: 'Awaiting');
static const confirming = TradeState(raw: 'confirming', title: 'Confirming'); static const confirming = TradeState(raw: 'confirming', title: 'Confirming');
static const trading = TradeState(raw: 'trading', title: 'Trading'); static const trading = TradeState(raw: 'trading', title: 'Trading');
static const traded = TradeState(raw: 'traded', title: 'Traded'); static const traded = TradeState(raw: 'traded', title: 'Traded');
@ -134,6 +135,8 @@ class TradeState extends EnumerableItem<String> with Serializable<String> {
return success; return success;
case 'expired': case 'expired':
return expired; return expired;
case 'awaiting':
return awaiting;
default: default:
throw Exception('Unexpected token: $raw in TradeState deserialize'); throw Exception('Unexpected token: $raw in TradeState deserialize');
} }

View file

@ -9,7 +9,6 @@ import 'package:cake_wallet/di.dart';
import 'package:cake_wallet/entities/contact_record.dart'; import 'package:cake_wallet/entities/contact_record.dart';
import 'package:cake_wallet/entities/qr_view_data.dart'; import 'package:cake_wallet/entities/qr_view_data.dart';
import 'package:cake_wallet/entities/wallet_edit_page_arguments.dart'; import 'package:cake_wallet/entities/wallet_edit_page_arguments.dart';
import 'package:cake_wallet/entities/wallet_nft_response.dart';
import 'package:cake_wallet/exchange/trade.dart'; import 'package:cake_wallet/exchange/trade.dart';
import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/routes.dart';
@ -141,7 +140,6 @@ import 'package:cw_core/wallet_type.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:cake_wallet/src/screens/cake_pay/cake_pay.dart';
import 'src/screens/buy/buy_sell_page.dart'; import 'src/screens/buy/buy_sell_page.dart';
import 'src/screens/dashboard/pages/nft_import_page.dart'; import 'src/screens/dashboard/pages/nft_import_page.dart';
@ -620,13 +618,10 @@ Route<dynamic> createRoute(RouteSettings settings) {
return MaterialPageRoute<void>(builder: (_) => getIt.get<FaqPage>()); return MaterialPageRoute<void>(builder: (_) => getIt.get<FaqPage>());
case Routes.preSeedPage: case Routes.preSeedPage:
return MaterialPageRoute<void>( return MaterialPageRoute<void>(builder: (_) => getIt.get<PreSeedPage>());
builder: (_) => getIt.get<PreSeedPage>(param1: settings.arguments as int));
case Routes.walletGroupExistingSeedDescriptionPage: case Routes.walletGroupExistingSeedDescriptionPage:
return MaterialPageRoute<void>( return MaterialPageRoute<void>(builder: (_) => WalletGroupExistingSeedDescriptionPage());
builder: (_) => WalletGroupExistingSeedDescriptionPage(
seedPhraseWordsLength: settings.arguments as int));
case Routes.transactionSuccessPage: case Routes.transactionSuccessPage:
return MaterialPageRoute<void>( return MaterialPageRoute<void>(

View file

@ -3,10 +3,9 @@ import 'package:cake_wallet/core/execution_state.dart';
import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart';
import 'package:cake_wallet/src/widgets/trail_button.dart';
import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/palette.dart';
import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
import 'package:cake_wallet/utils/clipboard_util.dart'; import 'package:cake_wallet/utils/clipboard_util.dart';
import 'package:cake_wallet/utils/exception_handler.dart'; import 'package:cake_wallet/utils/exception_handler.dart';
import 'package:cake_wallet/utils/share_util.dart'; import 'package:cake_wallet/utils/share_util.dart';
@ -76,7 +75,9 @@ class BackupPage extends BasePage {
Navigator.of(context).pushNamed(Routes.editBackupPassword), Navigator.of(context).pushNamed(Routes.editBackupPassword),
text: S.of(context).change_password, text: S.of(context).change_password,
color: Theme.of(context).cardColor, color: Theme.of(context).cardColor,
textColor: Colors.white, textColor: Theme.of(context)
.extension<CakeTextTheme>()!
.buttonTextColor,
), ),
SizedBox(height: 10), SizedBox(height: 10),
Observer( Observer(

View file

@ -1,123 +1,178 @@
import 'package:cake_wallet/src/widgets/alert_background.dart';
import 'package:cake_wallet/src/widgets/alert_close_button.dart';
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
import 'package:cake_wallet/src/screens/dashboard/widgets/filter_tile.dart'; import 'package:cake_wallet/src/screens/dashboard/widgets/filter_tile.dart';
import 'package:cake_wallet/src/widgets/section_divider.dart'; import 'package:cake_wallet/src/widgets/section_divider.dart';
import 'package:cake_wallet/src/widgets/standard_checkbox.dart'; import 'package:cake_wallet/src/widgets/standard_checkbox.dart';
import 'package:cake_wallet/themes/extensions/menu_theme.dart'; import 'package:cake_wallet/themes/extensions/menu_theme.dart';
import 'package:cake_wallet/view_model/dashboard/dropdown_filter_item.dart'; import 'package:cake_wallet/utils/responsive_layout_util.dart';
import 'package:cake_wallet/view_model/dashboard/dropdown_filter_item_widget.dart';
import 'package:cake_wallet/view_model/dashboard/filter_item.dart'; import 'package:cake_wallet/view_model/dashboard/filter_item.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:cake_wallet/src/widgets/picker_wrapper_widget.dart';
import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/generated/i18n.dart';
import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:flutter_mobx/flutter_mobx.dart';
//import 'package:date_range_picker/date_range_picker.dart' as date_rage_picker;
import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart'; import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
class FilterWidget extends StatelessWidget { class FilterWidget extends StatefulWidget {
FilterWidget({required this.filterItems}); const FilterWidget({required this.filterItems, this.onClose, Key? key}) : super(key: key);
final Map<String, List<FilterItem>> filterItems; final Map<String, List<FilterItem>> filterItems;
final Function()? onClose;
@override
_FilterWidgetState createState() => _FilterWidgetState();
}
class _FilterWidgetState extends State<FilterWidget> {
final ScrollController _scrollController = ScrollController();
@override
void dispose() {
_scrollController.dispose();
super.dispose();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
const sectionDivider = const HorizontalSectionDivider(); return AlertBackground(
return PickerWrapperWidget( child: Column(
children: [ children: [
Padding( const Expanded(child: SizedBox()),
padding: EdgeInsets.only(left: 24, right: 24, top: 24), Expanded(
child: ClipRRect( flex: responsiveLayoutUtil.shouldRenderTabletUI ? 16 : 8,
borderRadius: BorderRadius.all(Radius.circular(24)), child: LayoutBuilder(
child: Container( builder: (context, constraints) {
color: Theme.of(context).extension<CakeMenuTheme>()!.backgroundColor, double availableHeight = constraints.maxHeight;
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ return _buildFilterContent(context, availableHeight);
Padding( },
padding: EdgeInsets.all(24.0), ),
child: Text( ),
S.of(context).filter_by, Expanded(
style: TextStyle( child: AlertCloseButton(
color: key: const ValueKey('filter_wrapper_close_button_key'),
Theme.of(context).extension<TransactionTradeTheme>()!.detailsTitlesColor, isPositioned: false,
fontSize: 16, onTap: widget.onClose,
fontFamily: 'Lato', ),
decoration: TextDecoration.none, ),
), const SizedBox(height: 24),
), ],
), ),
sectionDivider, );
ListView.separated( }
padding: EdgeInsets.zero,
shrinkWrap: true, Widget _buildFilterContent(BuildContext context, double availableHeight) {
physics: const NeverScrollableScrollPhysics(), const sectionDivider = HorizontalSectionDivider();
itemCount: filterItems.length,
separatorBuilder: (context, _) => sectionDivider, const double totalHeaderHeight = 73;
itemBuilder: (_, index1) { const double filterTileMinHeight = 40;
final title = filterItems.keys.elementAt(index1); double availableHeightForItems = availableHeight - totalHeaderHeight;
final section = filterItems.values.elementAt(index1);
return Column( return Center(
crossAxisAlignment: CrossAxisAlignment.start, child: Column(
children: <Widget>[ mainAxisSize: MainAxisSize.min,
Padding( children: [
padding: EdgeInsets.only(top: 20, left: 24, right: 24), Padding(
child: Text( padding: const EdgeInsets.only(left: 24, right: 24, top: 24),
title, child: ClipRRect(
style: TextStyle( borderRadius: BorderRadius.circular(24),
color: Theme.of(context).extension<CakeTextTheme>()!.titleColor, child: Container(
fontSize: 16, color: Theme.of(context).extension<CakeMenuTheme>()!.backgroundColor,
fontFamily: 'Lato', child: Column(
fontWeight: FontWeight.bold, crossAxisAlignment: CrossAxisAlignment.start,
decoration: TextDecoration.none), children: [
), Padding(
padding: const EdgeInsets.all(24.0),
child: Text(
S.of(context).filter_by,
style: TextStyle(
color: Theme.of(context)
.extension<TransactionTradeTheme>()!
.detailsTitlesColor,
fontSize: 16,
fontFamily: 'Lato',
decoration: TextDecoration.none,
), ),
ListView.builder( ),
padding: EdgeInsets.symmetric(horizontal: 28.0), ),
shrinkWrap: true, sectionDivider,
physics: const NeverScrollableScrollPhysics(), ListView.separated(
padding: EdgeInsets.zero,
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount: widget.filterItems.length,
separatorBuilder: (context, _) => sectionDivider,
itemBuilder: (_, index1) {
final title = widget.filterItems.keys.elementAt(index1);
final section = widget.filterItems.values.elementAt(index1);
final double itemHeight =
availableHeightForItems / widget.filterItems.length;
final isSectionScrollable =
(itemHeight < (section.length * filterTileMinHeight));
final Widget sectionListView = ListView.builder(
controller: isSectionScrollable ? _scrollController : null,
padding: const EdgeInsets.symmetric(horizontal: 28.0),
shrinkWrap: isSectionScrollable ? false : true,
physics: isSectionScrollable
? const BouncingScrollPhysics()
: const NeverScrollableScrollPhysics(),
itemCount: section.length, itemCount: section.length,
itemBuilder: (_, index2) { itemBuilder: (_, index2) {
final item = section[index2]; final item = section[index2];
if (item is DropdownFilterItem) {
return Padding(
padding: EdgeInsets.fromLTRB(8, 0, 8, 16),
child: Container(
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
width: 1.0,
color: Theme.of(context).extension<CakeTextTheme>()!.secondaryTextColor),
),
),
child: DropdownFilterList(
items: item.items,
caption: item.caption,
selectedItem: item.selectedItem,
onItemSelected: item.onItemSelected,
),
),
);
}
final content = Observer( final content = Observer(
builder: (_) => StandardCheckbox( builder: (_) => StandardCheckbox(
value: item.value(), value: item.value(),
caption: item.caption, caption: item.caption,
gradientBackground: true, gradientBackground: true,
borderColor: Theme.of(context).dividerColor, borderColor: Theme.of(context).dividerColor,
iconColor: Colors.white, iconColor: Colors.white,
onChanged: (value) => item.onChanged(), onChanged: (value) => item.onChanged(),
)); ),
return FilterTile(child: content); );
return FilterTile(
child: content,
);
}, },
) );
],
); return Column(
}, crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.only(top: 20, left: 24, right: 24),
child: Text(
title,
style: TextStyle(
color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
fontSize: 16,
fontFamily: 'Lato',
fontWeight: FontWeight.bold,
decoration: TextDecoration.none,
),
),
),
Container(
height: isSectionScrollable ? itemHeight - totalHeaderHeight : null,
child: isSectionScrollable
? Scrollbar(
controller: _scrollController,
thumbVisibility: true,
child: sectionListView,
)
: sectionListView,
),
],
);
},
),
],
), ),
]), ),
), ),
), ),
) ],
], ),
); );
} }
} }

View file

@ -7,7 +7,6 @@ import 'package:cake_wallet/src/widgets/bottom_sheet/confirm_sending_bottom_shee
import 'package:cake_wallet/src/widgets/bottom_sheet/info_bottom_sheet_widget.dart'; import 'package:cake_wallet/src/widgets/bottom_sheet/info_bottom_sheet_widget.dart';
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart'; import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
import 'package:cake_wallet/themes/theme_base.dart'; import 'package:cake_wallet/themes/theme_base.dart';
import 'dart:ui';
import 'package:cake_wallet/utils/request_review_handler.dart'; import 'package:cake_wallet/utils/request_review_handler.dart';
import 'package:cake_wallet/utils/responsive_layout_util.dart'; import 'package:cake_wallet/utils/responsive_layout_util.dart';
import 'package:mobx/mobx.dart'; import 'package:mobx/mobx.dart';
@ -205,6 +204,7 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
); );
} }
BuildContext? dialogContext;
BuildContext? loadingBottomSheetContext; BuildContext? loadingBottomSheetContext;
void _setEffects() { void _setEffects() {
@ -213,7 +213,12 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
} }
_exchangeStateReaction = reaction((_) => this.widget.exchangeTradeViewModel.sendViewModel.state, _exchangeStateReaction = reaction((_) => this.widget.exchangeTradeViewModel.sendViewModel.state,
(ExecutionState state) { (ExecutionState state) async {
if (dialogContext != null && dialogContext?.mounted == true) {
Navigator.of(dialogContext!).pop();
}
if (state is! IsExecutingState && if (state is! IsExecutingState &&
loadingBottomSheetContext != null && loadingBottomSheetContext != null &&
loadingBottomSheetContext!.mounted) { loadingBottomSheetContext!.mounted) {
@ -237,6 +242,13 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
} }
if (state is IsExecutingState) { if (state is IsExecutingState) {
// wait a bit to avoid showing the loading dialog if transaction is failed
await Future.delayed(const Duration(milliseconds: 300));
final currentState = widget.exchangeTradeViewModel.sendViewModel.state;
if (currentState is ExecutedSuccessfullyState || currentState is FailureState) {
return;
}
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
if (context.mounted) { if (context.mounted) {
showModalBottomSheet<void>( showModalBottomSheet<void>(
@ -311,10 +323,12 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
actionButtonKey: ValueKey('send_page_sent_dialog_ok_button_key'), actionButtonKey: ValueKey('send_page_sent_dialog_ok_button_key'),
actionButton: () { actionButton: () {
Navigator.of(bottomSheetContext).pop(); Navigator.of(bottomSheetContext).pop();
Navigator.of(context).pushNamedAndRemoveUntil( if (context.mounted) {
Routes.dashboard, Navigator.of(context).pushNamedAndRemoveUntil(
(route) => false, Routes.dashboard,
); (route) => false,
);
}
RequestReviewHandler.requestReview(); RequestReviewHandler.requestReview();
}); });
}, },

View file

@ -104,11 +104,9 @@ class _WalletNameFormState extends State<WalletNameForm> {
if (state is ExecutedSuccessfullyState) { if (state is ExecutedSuccessfullyState) {
if (widget.isChildWallet) { if (widget.isChildWallet) {
Navigator.of(navigatorKey.currentContext ?? context).pushNamed( Navigator.of(navigatorKey.currentContext ?? context).pushNamed(
Routes.walletGroupExistingSeedDescriptionPage, Routes.walletGroupExistingSeedDescriptionPage);
arguments: _walletNewVM.seedPhraseWordsLength);
} else { } else {
Navigator.of(navigatorKey.currentContext ?? context) Navigator.of(navigatorKey.currentContext ?? context).pushNamed(Routes.preSeedPage);
.pushNamed(Routes.preSeedPage, arguments: _walletNewVM.seedPhraseWordsLength);
} }
} }

View file

@ -9,9 +9,7 @@ import 'package:cake_wallet/themes/theme_base.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class WalletGroupExistingSeedDescriptionPage extends BasePage { class WalletGroupExistingSeedDescriptionPage extends BasePage {
WalletGroupExistingSeedDescriptionPage({required this.seedPhraseWordsLength}); WalletGroupExistingSeedDescriptionPage();
final int seedPhraseWordsLength;
@override @override
String get title => S.current.wallet_group; String get title => S.current.wallet_group;
@ -69,8 +67,7 @@ class WalletGroupExistingSeedDescriptionPage extends BasePage {
child: PrimaryButton( child: PrimaryButton(
key: ValueKey( key: ValueKey(
'wallet_group_existing_seed_description_page_verify_seed_button_key'), 'wallet_group_existing_seed_description_page_verify_seed_button_key'),
onPressed: () => Navigator.pushNamed(context, Routes.preSeedPage, onPressed: () => Navigator.pushNamed(context, Routes.preSeedPage),
arguments: seedPhraseWordsLength),
text: S.current.verify_seed, text: S.current.verify_seed,
color: Theme.of(context).cardColor, color: Theme.of(context).cardColor,
textColor: currentTheme.type == ThemeType.dark textColor: currentTheme.type == ThemeType.dark

View file

@ -4,9 +4,7 @@ import 'package:cake_wallet/src/screens/Info_page.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
class PreSeedPage extends InfoPage { class PreSeedPage extends InfoPage {
PreSeedPage(this.seedPhraseLength); PreSeedPage();
final int seedPhraseLength;
@override @override
bool get onWillPop => false; bool get onWillPop => false;
@ -15,7 +13,7 @@ class PreSeedPage extends InfoPage {
String get pageTitle => S.current.pre_seed_title; String get pageTitle => S.current.pre_seed_title;
@override @override
String get pageDescription => S.current.pre_seed_description(seedPhraseLength.toString()); String get pageDescription => S.current.pre_seed_description;
@override @override
String get buttonText => S.current.pre_seed_button_text; String get buttonText => S.current.pre_seed_button_text;

View file

@ -7,6 +7,7 @@ class AlertCloseButton extends StatelessWidget {
this.image, this.image,
this.bottom, this.bottom,
this.onTap, this.onTap,
this.isPositioned = true,
super.key, super.key,
}); });
@ -14,6 +15,7 @@ class AlertCloseButton extends StatelessWidget {
final Image? image; final Image? image;
final double? bottom; final double? bottom;
final bool isPositioned;
final closeButton = Image.asset( final closeButton = Image.asset(
'assets/images/close.png', 'assets/images/close.png',
@ -22,24 +24,18 @@ class AlertCloseButton extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Positioned( final button = GestureDetector(
bottom: bottom ?? 60,
child: GestureDetector(
onTap: onTap ?? () => Navigator.of(context).pop(), onTap: onTap ?? () => Navigator.of(context).pop(),
child: Semantics( child: Semantics(
label: S.of(context).close, label: S.of(context).close,
button: true, button: true,
enabled: true, enabled: true,
child: Container( child: Container(
height: 42, height: 42,
width: 42, width: 42,
decoration: BoxDecoration(color: Colors.white, shape: BoxShape.circle), decoration: BoxDecoration(color: Colors.white, shape: BoxShape.circle),
child: Center( child: Center(child: image ?? closeButton))));
child: image ?? closeButton,
), return isPositioned ? Positioned(bottom: bottom ?? 60, child: button) : button;
),
),
),
);
} }
} }

View file

@ -104,7 +104,7 @@ class LoadingPrimaryButton extends StatelessWidget {
), ),
)), )),
child: isLoading child: isLoading
? CupertinoActivityIndicator(animating: true) ? CupertinoActivityIndicator(animating: true, color: textColor)
: Text(text, : Text(text,
style: TextStyle( style: TextStyle(
fontSize: 15.0, fontSize: 15.0,

View file

@ -3,6 +3,7 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:cake_wallet/bitcoin/bitcoin.dart'; import 'package:cake_wallet/bitcoin/bitcoin.dart';
import 'package:cake_wallet/core/utilities.dart';
import 'package:cake_wallet/decred/decred.dart'; import 'package:cake_wallet/decred/decred.dart';
import 'package:cake_wallet/bitcoin_cash/bitcoin_cash.dart'; import 'package:cake_wallet/bitcoin_cash/bitcoin_cash.dart';
import 'package:cake_wallet/core/secure_storage.dart'; import 'package:cake_wallet/core/secure_storage.dart';
@ -12,6 +13,7 @@ import 'package:cake_wallet/entities/auto_generate_subaddress_status.dart';
import 'package:cake_wallet/entities/balance_display_mode.dart'; import 'package:cake_wallet/entities/balance_display_mode.dart';
import 'package:cake_wallet/entities/cake_2fa_preset_options.dart'; import 'package:cake_wallet/entities/cake_2fa_preset_options.dart';
import 'package:cake_wallet/entities/country.dart'; import 'package:cake_wallet/entities/country.dart';
import 'package:cake_wallet/entities/default_settings_migration.dart';
import 'package:cake_wallet/entities/exchange_api_mode.dart'; import 'package:cake_wallet/entities/exchange_api_mode.dart';
import 'package:cake_wallet/entities/fiat_api_mode.dart'; import 'package:cake_wallet/entities/fiat_api_mode.dart';
import 'package:cake_wallet/entities/fiat_currency.dart'; import 'package:cake_wallet/entities/fiat_currency.dart';
@ -1023,7 +1025,6 @@ abstract class SettingsStoreBase with Store {
sharedPreferences.getInt(PreferencesKey.currentLitecoinElectrumSererIdKey); sharedPreferences.getInt(PreferencesKey.currentLitecoinElectrumSererIdKey);
final bitcoinCashElectrumServerId = final bitcoinCashElectrumServerId =
sharedPreferences.getInt(PreferencesKey.currentBitcoinCashNodeIdKey); sharedPreferences.getInt(PreferencesKey.currentBitcoinCashNodeIdKey);
final havenNodeId = sharedPreferences.getInt(PreferencesKey.currentHavenNodeIdKey);
final ethereumNodeId = sharedPreferences.getInt(PreferencesKey.currentEthereumNodeIdKey); final ethereumNodeId = sharedPreferences.getInt(PreferencesKey.currentEthereumNodeIdKey);
final polygonNodeId = sharedPreferences.getInt(PreferencesKey.currentPolygonNodeIdKey); final polygonNodeId = sharedPreferences.getInt(PreferencesKey.currentPolygonNodeIdKey);
final nanoNodeId = sharedPreferences.getInt(PreferencesKey.currentNanoNodeIdKey); final nanoNodeId = sharedPreferences.getInt(PreferencesKey.currentNanoNodeIdKey);
@ -1033,20 +1034,35 @@ abstract class SettingsStoreBase with Store {
final wowneroNodeId = sharedPreferences.getInt(PreferencesKey.currentWowneroNodeIdKey); final wowneroNodeId = sharedPreferences.getInt(PreferencesKey.currentWowneroNodeIdKey);
final zanoNodeId = sharedPreferences.getInt(PreferencesKey.currentZanoNodeIdKey); final zanoNodeId = sharedPreferences.getInt(PreferencesKey.currentZanoNodeIdKey);
final decredNodeId = sharedPreferences.getInt(PreferencesKey.currentDecredNodeIdKey); final decredNodeId = sharedPreferences.getInt(PreferencesKey.currentDecredNodeIdKey);
final moneroNode = nodeSource.get(nodeId);
final bitcoinElectrumServer = nodeSource.get(bitcoinElectrumServerId); /// get the selected node, if null, then use the default
final litecoinElectrumServer = nodeSource.get(litecoinElectrumServerId); final moneroNode = nodeSource.get(nodeId) ??
final havenNode = nodeSource.get(havenNodeId); nodeSource.values.firstWhereOrNull((e) => e.uriRaw == newCakeWalletMoneroUri);
final ethereumNode = nodeSource.get(ethereumNodeId); final bitcoinElectrumServer = nodeSource.get(bitcoinElectrumServerId) ??
final polygonNode = nodeSource.get(polygonNodeId); nodeSource.values.firstWhereOrNull((e) => e.uriRaw == newCakeWalletBitcoinUri);
final bitcoinCashElectrumServer = nodeSource.get(bitcoinCashElectrumServerId); final litecoinElectrumServer = nodeSource.get(litecoinElectrumServerId) ??
final nanoNode = nodeSource.get(nanoNodeId); nodeSource.values.firstWhereOrNull((e) => e.uriRaw == cakeWalletLitecoinElectrumUri);
final decredNode = nodeSource.get(decredNodeId); final ethereumNode = nodeSource.get(ethereumNodeId) ??
final nanoPowNode = powNodeSource.get(nanoPowNodeId); nodeSource.values.firstWhereOrNull((e) => e.uriRaw == ethereumDefaultNodeUri);
final solanaNode = nodeSource.get(solanaNodeId); final polygonNode = nodeSource.get(polygonNodeId) ??
final tronNode = nodeSource.get(tronNodeId); nodeSource.values.firstWhereOrNull((e) => e.uriRaw == polygonDefaultNodeUri);
final wowneroNode = nodeSource.get(wowneroNodeId); final bitcoinCashElectrumServer = nodeSource.get(bitcoinCashElectrumServerId) ??
final zanoNode = nodeSource.get(zanoNodeId); nodeSource.values.firstWhereOrNull((e) => e.uriRaw == cakeWalletBitcoinCashDefaultNodeUri);
final nanoNode = nodeSource.get(nanoNodeId) ??
nodeSource.values.firstWhereOrNull((e) => e.uriRaw == nanoDefaultNodeUri);
final decredNode = nodeSource.get(decredNodeId) ??
nodeSource.values.firstWhereOrNull((e) => e.uriRaw == decredDefaultUri);
final nanoPowNode = powNodeSource.get(nanoPowNodeId) ??
nodeSource.values.firstWhereOrNull((e) => e.uriRaw == nanoDefaultPowNodeUri);
final solanaNode = nodeSource.get(solanaNodeId) ??
nodeSource.values.firstWhereOrNull((e) => e.uriRaw == solanaDefaultNodeUri);
final tronNode = nodeSource.get(tronNodeId) ??
nodeSource.values.firstWhereOrNull((e) => e.uriRaw == tronDefaultNodeUri);
final wowneroNode = nodeSource.get(wowneroNodeId) ??
nodeSource.values.firstWhereOrNull((e) => e.uriRaw == wowneroDefaultNodeUri);
final zanoNode = nodeSource.get(zanoNodeId) ??
nodeSource.values.firstWhereOrNull((e) => e.uriRaw == zanoDefaultNodeUri);
final packageInfo = await PackageInfo.fromPlatform(); final packageInfo = await PackageInfo.fromPlatform();
final deviceName = await _getDeviceName() ?? ''; final deviceName = await _getDeviceName() ?? '';
final shouldShowYatPopup = sharedPreferences.getBool(PreferencesKey.shouldShowYatPopup) ?? true; final shouldShowYatPopup = sharedPreferences.getBool(PreferencesKey.shouldShowYatPopup) ?? true;
@ -1092,10 +1108,6 @@ abstract class SettingsStoreBase with Store {
nodes[WalletType.litecoin] = litecoinElectrumServer; nodes[WalletType.litecoin] = litecoinElectrumServer;
} }
if (havenNode != null) {
nodes[WalletType.haven] = havenNode;
}
if (ethereumNode != null) { if (ethereumNode != null) {
nodes[WalletType.ethereum] = ethereumNode; nodes[WalletType.ethereum] = ethereumNode;
} }
@ -1137,7 +1149,8 @@ abstract class SettingsStoreBase with Store {
} }
final savedSyncMode = SyncMode.all.firstWhere((element) { final savedSyncMode = SyncMode.all.firstWhere((element) {
return element.type.index == (sharedPreferences.getInt(PreferencesKey.syncModeKey) ?? 2); // default to 2 - daily sync return element.type.index ==
(sharedPreferences.getInt(PreferencesKey.syncModeKey) ?? 2); // default to 2 - daily sync
}); });
final savedSyncAll = sharedPreferences.getBool(PreferencesKey.syncAllKey) ?? true; final savedSyncAll = sharedPreferences.getBool(PreferencesKey.syncAllKey) ?? true;

View file

@ -107,20 +107,24 @@ abstract class AnonInvoicePageViewModelBase with Store {
return; return;
} }
} }
final result = await anonPayApi.createInvoice(AnonPayRequest( try {
cryptoCurrency: cryptoCurrency, final result = await anonPayApi.createInvoice(AnonPayRequest(
address: address, cryptoCurrency: cryptoCurrency,
amount: amount.isEmpty ? null : amount, address: address,
description: description, amount: amount.isEmpty ? null : amount,
email: receipientEmail, description: description,
name: receipientName, email: receipientEmail,
fiatEquivalent: name: receipientName,
selectedCurrency is FiatCurrency ? (selectedCurrency as FiatCurrency).raw : null, fiatEquivalent:
)); selectedCurrency is FiatCurrency ? (selectedCurrency as FiatCurrency).raw : null,
));
_anonpayInvoiceInfoSource.add(result); _anonpayInvoiceInfoSource.add(result);
state = ExecutedSuccessfullyState(payload: result); state = ExecutedSuccessfullyState(payload: result);
} catch (e) {
state = FailureState(e.toString());
}
} }
@action @action
@ -156,12 +160,16 @@ abstract class AnonInvoicePageViewModelBase with Store {
} }
Future<void> _fetchLimits() async { Future<void> _fetchLimits() async {
final limit = await anonPayApi.fetchLimits( try {
cryptoCurrency: cryptoCurrency, final limit = await anonPayApi.fetchLimits(
fiatCurrency: selectedCurrency is FiatCurrency ? selectedCurrency as FiatCurrency : null, cryptoCurrency: cryptoCurrency,
); fiatCurrency: selectedCurrency is FiatCurrency ? selectedCurrency as FiatCurrency : null,
minimum = limit.min; );
maximum = limit.max != null ? limit.max! / 4 : null; minimum = limit.min;
maximum = limit.max != null ? limit.max! / 4 : null;
} catch (e) {
state = FailureState(e.toString());
}
} }
@computed @computed

View file

@ -4,7 +4,6 @@ import 'dart:io' show Platform;
import 'package:cake_wallet/.secrets.g.dart' as secrets; import 'package:cake_wallet/.secrets.g.dart' as secrets;
import 'package:cake_wallet/bitcoin/bitcoin.dart'; import 'package:cake_wallet/bitcoin/bitcoin.dart';
import 'package:cake_wallet/core/background_sync.dart';
import 'package:cake_wallet/core/key_service.dart'; import 'package:cake_wallet/core/key_service.dart';
import 'package:cake_wallet/entities/auto_generate_subaddress_status.dart'; import 'package:cake_wallet/entities/auto_generate_subaddress_status.dart';
import 'package:cake_wallet/entities/balance_display_mode.dart'; import 'package:cake_wallet/entities/balance_display_mode.dart';
@ -276,10 +275,17 @@ abstract class DashboardViewModelBase with Store {
_transactionDisposer?.reaction.dispose(); _transactionDisposer?.reaction.dispose();
_transactionDisposer = reaction( _transactionDisposer = reaction(
(_) => (_) => appStore.wallet!.transactionHistory.transactions.length,
appStore.wallet!.transactionHistory.transactions.length * _transactionDisposerCallback,
appStore.wallet!.transactionHistory.transactions.values.first.confirmations, );
_transactionDisposerCallback);
if (hasSilentPayments) {
silentPaymentsScanningActive = bitcoin!.getScanningActive(wallet);
reaction((_) => wallet.syncStatus, (SyncStatus syncStatus) {
silentPaymentsScanningActive = bitcoin!.getScanningActive(wallet);
});
}
_checkMweb(); _checkMweb();
reaction((_) => settingsStore.mwebAlwaysScan, (bool value) => _checkMweb()); reaction((_) => settingsStore.mwebAlwaysScan, (bool value) => _checkMweb());
@ -814,10 +820,7 @@ abstract class DashboardViewModelBase with Store {
_transactionDisposer?.reaction.dispose(); _transactionDisposer?.reaction.dispose();
_transactionDisposer = reaction( _transactionDisposer = reaction((_) => appStore.wallet!.transactionHistory.transactions.length,
(_) =>
appStore.wallet!.transactionHistory.transactions.length *
appStore.wallet!.transactionHistory.transactions.values.first.confirmations,
_transactionDisposerCallback); _transactionDisposerCallback);
} }

View file

@ -137,7 +137,9 @@ abstract class LedgerViewModelBase with Store {
allowChangeWallet: true, allowChangeWallet: true,
isReconnect: true, isReconnect: true,
onConnectDevice: (context, ledgerVM) async { onConnectDevice: (context, ledgerVM) async {
Navigator.of(context).pop(); if (context.mounted) {
Navigator.of(context).pop();
}
}, },
), ),
); );

View file

@ -742,7 +742,7 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
} }
if (error is CreateAssociatedTokenAccountException) { if (error is CreateAssociatedTokenAccountException) {
return "${S.current.solana_create_associated_token_account_exception}\n\n${error.errorMessage}"; return "${S.current.solana_create_associated_token_account_exception} ${S.current.added_message_for_ata_error}\n\n${error.errorMessage}";
} }
if (error is SignSPLTokenTransactionRentException) { if (error is SignSPLTokenTransactionRentException) {

View file

@ -3,6 +3,7 @@ import 'package:cake_wallet/entities/wallet_group.dart';
import 'package:cake_wallet/entities/wallet_list_order_types.dart'; import 'package:cake_wallet/entities/wallet_list_order_types.dart';
import 'package:cake_wallet/entities/wallet_manager.dart'; import 'package:cake_wallet/entities/wallet_manager.dart';
import 'package:cake_wallet/reactions/bip39_wallet_utils.dart'; import 'package:cake_wallet/reactions/bip39_wallet_utils.dart';
import 'package:cw_core/utils/print_verbose.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:mobx/mobx.dart'; import 'package:mobx/mobx.dart';
import 'package:cake_wallet/store/app_store.dart'; import 'package:cake_wallet/store/app_store.dart';
@ -109,45 +110,7 @@ abstract class WalletListViewModelBase with Store {
continue; continue;
} }
// Identify wallets that should be moved to singleWalletsList using the filters: the type/derivation multiWalletGroups.add(group);
final excludedWallets = <WalletInfo>[];
for (var wallet in group.wallets) {
// Check for non-BIP39 wallet types
final isNonBIP39 = !isBIP39Wallet(wallet.type);
// Check for nano derivation type
final isNanoDerivation = wallet.type == WalletType.nano &&
wallet.derivationInfo?.derivationType == DerivationType.nano;
// Check for electrum derivation type
final isElectrumDerivation =
(wallet.type == WalletType.bitcoin || wallet.type == WalletType.litecoin) &&
wallet.derivationInfo?.derivationType == DerivationType.electrum;
if (isNonBIP39 || isNanoDerivation || isElectrumDerivation) {
excludedWallets.add(wallet);
}
}
// Add excluded wallets to singleWalletsList
for (var excludedWallet in excludedWallets) {
singleWalletsList.add(convertWalletInfoToWalletListItem(excludedWallet));
}
// Remove excluded wallets from the group's wallets to avoid duplication
group.wallets.removeWhere((wallet) {
return excludedWallets.any((excluded) => excluded.address == wallet.address);
});
// Check if the group has more than one wallet after the excluded wallets are removed.
if (group.wallets.length > 1) {
//Add the entire group to the multi wallet group list since its still a multi wallet
multiWalletGroups.add(group);
} else if (group.wallets.length == 1) {
// Add the group to the wallet left to the single wallets list
singleWalletsList.add(convertWalletInfoToWalletListItem(group.wallets.first));
}
} }
} }
@ -253,7 +216,6 @@ abstract class WalletListViewModelBase with Store {
await sortGroupByType(); await sortGroupByType();
break; break;
case FilterListOrderType.Custom: case FilterListOrderType.Custom:
default:
await reorderAccordingToWalletList(); await reorderAccordingToWalletList();
break; break;
} }

View file

@ -52,38 +52,6 @@ abstract class WalletNewVMBase extends WalletCreationVM with Store {
bool get showLanguageSelector => bool get showLanguageSelector =>
newWalletArguments?.mnemonic == null && hasLanguageSelector; newWalletArguments?.mnemonic == null && hasLanguageSelector;
int get seedPhraseWordsLength {
switch (type) {
case WalletType.monero:
case WalletType.wownero:
return advancedPrivacySettingsViewModel.isPolySeed ? 16 : 25;
case WalletType.tron:
case WalletType.solana:
case WalletType.polygon:
case WalletType.ethereum:
case WalletType.bitcoinCash:
return advancedPrivacySettingsViewModel.seedPhraseLength.value;
case WalletType.bitcoin:
case WalletType.litecoin:
return seedSettingsViewModel.bitcoinSeedType == BitcoinSeedType.bip39
? advancedPrivacySettingsViewModel.seedPhraseLength.value
: 24;
case WalletType.nano:
case WalletType.banano:
return seedSettingsViewModel.nanoSeedType == NanoSeedType.bip39
? advancedPrivacySettingsViewModel.seedPhraseLength.value
: 24;
case WalletType.none:
return 24;
case WalletType.haven:
return 25;
case WalletType.zano:
return 26;
case WalletType.decred:
return 15;
}
}
bool get hasSeedType => bool get hasSeedType =>
newWalletArguments?.mnemonic == null && newWalletArguments?.mnemonic == null &&
[WalletType.monero, WalletType.wownero].contains(type); [WalletType.monero, WalletType.wownero].contains(type);

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "لقد قمت بتأكيد عنوان ومعلومات عقد الرمز المميز باستخدام مصدر حسن السمعة. يمكن أن تؤدي إضافة معلومات خبيثة أو غير صحيحة إلى خسارة الأموال.", "add_token_disclaimer_check": "لقد قمت بتأكيد عنوان ومعلومات عقد الرمز المميز باستخدام مصدر حسن السمعة. يمكن أن تؤدي إضافة معلومات خبيثة أو غير صحيحة إلى خسارة الأموال.",
"add_token_warning": "لا تقم بتحرير أو إضافة رموز وفقًا لتعليمات المحتالين.\nقم دائمًا بتأكيد عناوين الرموز مع مصادر حسنة السمعة!", "add_token_warning": "لا تقم بتحرير أو إضافة رموز وفقًا لتعليمات المحتالين.\nقم دائمًا بتأكيد عناوين الرموز مع مصادر حسنة السمعة!",
"add_value": "إضافة قيمة", "add_value": "إضافة قيمة",
"added_message_for_ata_error": "يرجى التأكد من أن لديك ما يكفي من توازن SOL لإكمال معاملتك.",
"address": " ﻥﺍﻮﻨﻋ", "address": " ﻥﺍﻮﻨﻋ",
"address_book": "دليل العناوين", "address_book": "دليل العناوين",
"address_book_menu": "دليل العناوين", "address_book_menu": "دليل العناوين",
@ -543,7 +544,7 @@
"potential_scam": "عملية احتيال محتملة", "potential_scam": "عملية احتيال محتملة",
"powered_by": "بدعم من ${title}", "powered_by": "بدعم من ${title}",
"pre_seed_button_text": "انا أفهم. أرني سييد الخاص بي", "pre_seed_button_text": "انا أفهم. أرني سييد الخاص بي",
"pre_seed_description": "في الصفحة التالية ستشاهد سلسلة من الكلمات ${words}. هذه هي سييد الفريدة والخاصة بك وهي الطريقة الوحيدة لاسترداد محفظتك في حالة فقدها أو عطلها. تقع على عاتقك مسؤولية تدوينها وتخزينها في مكان آمن خارج تطبيق Cake Wallet.", "pre_seed_description": "في الصفحة التالية ، سترى سلسلة من الكلمات. هذه هي البذور الفريدة والخاصة الخاصة بك وهي الطريقة الوحيدة لاستعادة محفظتك في حالة الخسارة أو العطل. تقع على عاتقك مسؤولية كتابتها وتخزينها في مكان آمن خارج تطبيق Cake Wallet.",
"pre_seed_title": "مهم", "pre_seed_title": "مهم",
"prepaid_cards": "البطاقات المدفوعة مسبقا", "prepaid_cards": "البطاقات المدفوعة مسبقا",
"prevent_screenshots": "منع لقطات الشاشة وتسجيل الشاشة", "prevent_screenshots": "منع لقطات الشاشة وتسجيل الشاشة",
@ -1033,4 +1034,4 @@
"you_will_receive_estimated_amount": "سوف تتلقى(ooded )", "you_will_receive_estimated_amount": "سوف تتلقى(ooded )",
"you_will_send": "تحويل من", "you_will_send": "تحويل من",
"yy": "YY" "yy": "YY"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "Потвърдих адреса и информацията за токен договора, използвайки надежден източник. Добавянето на злонамерена или неправилна информация може да доведе до загуба на средства.", "add_token_disclaimer_check": "Потвърдих адреса и информацията за токен договора, използвайки надежден източник. Добавянето на злонамерена или неправилна информация може да доведе до загуба на средства.",
"add_token_warning": "Не редактирайте и не добавяйте токени според инструкциите на измамниците.\nВинаги потвърждавайте адресите на токени с надеждни източници!", "add_token_warning": "Не редактирайте и не добавяйте токени според инструкциите на измамниците.\nВинаги потвърждавайте адресите на токени с надеждни източници!",
"add_value": "Добавяне на стойност", "add_value": "Добавяне на стойност",
"added_message_for_ata_error": "Моля, уверете се, че имате достатъчно баланс на SOL, за да завършите транзакцията си.",
"address": "Адрес", "address": "Адрес",
"address_book": "Адресна книга", "address_book": "Адресна книга",
"address_book_menu": "Адресна книга", "address_book_menu": "Адресна книга",
@ -543,7 +544,7 @@
"potential_scam": "Потенциална измама", "potential_scam": "Потенциална измама",
"powered_by": "Powered by ${title}", "powered_by": "Powered by ${title}",
"pre_seed_button_text": "Разбирам. Покажи seed", "pre_seed_button_text": "Разбирам. Покажи seed",
"pre_seed_description": "На следващата страница ще видите поредица от ${words} думи. Това е вашият таен личен seed и е единственият начин да възстановите портфейла си. Отговорността за съхранението му на сигурно място извън приложението на Cake Wallet е изцяло ВАША.", "pre_seed_description": "На следващата страница ще видите поредица от думи. Това е вашето уникално и частно семе и това е единственият начин да възстановите портфейла си в случай на загуба или неизправност. Ваша отговорност е да го запишете и да го съхранявате на безопасно място извън приложението за портфейл за торта.",
"pre_seed_title": "ВАЖНО", "pre_seed_title": "ВАЖНО",
"prepaid_cards": "Предплатени карти", "prepaid_cards": "Предплатени карти",
"prevent_screenshots": "Предотвратете екранни снимки и запис на екрана", "prevent_screenshots": "Предотвратете екранни снимки и запис на екрана",
@ -1033,4 +1034,4 @@
"you_will_receive_estimated_amount": "Ще получите(прогнозно )", "you_will_receive_estimated_amount": "Ще получите(прогнозно )",
"you_will_send": "Обръщане от", "you_will_send": "Обръщане от",
"yy": "гг" "yy": "гг"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "Potvrdil jsem adresu a informace smlouvy o tokenu pomocí důvěryhodného zdroje. Přidání škodlivých nebo nesprávných informací může vést ke ztrátě finančních prostředků.", "add_token_disclaimer_check": "Potvrdil jsem adresu a informace smlouvy o tokenu pomocí důvěryhodného zdroje. Přidání škodlivých nebo nesprávných informací může vést ke ztrátě finančních prostředků.",
"add_token_warning": "Neupravujte ani nepřidávejte tokeny podle pokynů podvodníků.\nVždy potvrďte adresy tokenů s renomovanými zdroji!", "add_token_warning": "Neupravujte ani nepřidávejte tokeny podle pokynů podvodníků.\nVždy potvrďte adresy tokenů s renomovanými zdroji!",
"add_value": "Přidat hodnotu", "add_value": "Přidat hodnotu",
"added_message_for_ata_error": "Laskavě se ujistěte, že máte dostatek rovnováhy SOL, abyste dokončili transakci.",
"address": "Adresa", "address": "Adresa",
"address_book": "Adresář", "address_book": "Adresář",
"address_book_menu": "Adresář", "address_book_menu": "Adresář",
@ -543,7 +544,7 @@
"potential_scam": "Potenciální podvod", "potential_scam": "Potenciální podvod",
"powered_by": "Zajišťuje ${title}", "powered_by": "Zajišťuje ${title}",
"pre_seed_button_text": "Rozumím. Ukaž mi můj seed.", "pre_seed_button_text": "Rozumím. Ukaž mi můj seed.",
"pre_seed_description": "Na následující stránce uvidíte sérii ${words} slov. Je to váš tzv. seed a je to JEDINÁ možnost, jak můžete později obnovit svou peněženku v případě ztráty nebo poruchy. Je VAŠÍ zodpovědností zapsat si ho a uložit si ho na bezpečném místě mimo aplikaci Cake Wallet.", "pre_seed_description": "Na další stránce uvidíte řadu slov. Toto je vaše jedinečné a soukromé semeno a je to jediný způsob, jak obnovit peněženku v případě ztráty nebo poruchy. Je vaší odpovědností zapisovat jej a uložit jej na bezpečném místě mimo aplikaci Cake Wallet.",
"pre_seed_title": "DŮLEŽITÉ", "pre_seed_title": "DŮLEŽITÉ",
"prepaid_cards": "Předplacené karty", "prepaid_cards": "Předplacené karty",
"prevent_screenshots": "Zabránit vytváření snímků obrazovky a nahrávání obrazovky", "prevent_screenshots": "Zabránit vytváření snímků obrazovky a nahrávání obrazovky",
@ -1033,4 +1034,4 @@
"you_will_receive_estimated_amount": "Obdržíte(odhadovaný )", "you_will_receive_estimated_amount": "Obdržíte(odhadovaný )",
"you_will_send": "Směnit z", "you_will_send": "Směnit z",
"yy": "YY" "yy": "YY"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "Ich habe die Adresse und Informationen zum Token-Contract anhand einer seriösen Quelle bestätigt. Das Hinzufügen böswilliger oder falscher Informationen kann zu einem Verlust von Geldern führen.", "add_token_disclaimer_check": "Ich habe die Adresse und Informationen zum Token-Contract anhand einer seriösen Quelle bestätigt. Das Hinzufügen böswilliger oder falscher Informationen kann zu einem Verlust von Geldern führen.",
"add_token_warning": "Bearbeiten oder fügen Sie Token nicht gemäß den Anweisungen von Betrügern hinzu.\nBestätigen Sie Token-Adressen immer mit seriösen Quellen!", "add_token_warning": "Bearbeiten oder fügen Sie Token nicht gemäß den Anweisungen von Betrügern hinzu.\nBestätigen Sie Token-Adressen immer mit seriösen Quellen!",
"add_value": "Wert hinzufügen", "add_value": "Wert hinzufügen",
"added_message_for_ata_error": "Bitte stellen Sie sicher, dass Sie über genügend SOL -Balance verfügen, um Ihre Transaktion abzuschließen.",
"address": "Adresse", "address": "Adresse",
"address_book": "Adressbuch", "address_book": "Adressbuch",
"address_book_menu": "Adressbuch", "address_book_menu": "Adressbuch",
@ -544,7 +545,7 @@
"potential_scam": "Potenzieller Betrug", "potential_scam": "Potenzieller Betrug",
"powered_by": "Ermöglicht durch ${title}", "powered_by": "Ermöglicht durch ${title}",
"pre_seed_button_text": "Verstanden. Zeig mir meinen Seed", "pre_seed_button_text": "Verstanden. Zeig mir meinen Seed",
"pre_seed_description": "Auf der nächsten Seite sehen Sie eine Reihe von ${words} Wörtern. Dies ist Ihr einzigartiger und privater Seed und der EINZIGE Weg, um Ihre Wallet im Falle eines Verlusts oder einer Fehlfunktion wiederherzustellen. Es liegt in IHRER Verantwortung, ihn aufzuschreiben und an einem sicheren Ort außerhalb der Cake Wallet-App aufzubewahren.", "pre_seed_description": "Auf der nächsten Seite sehen Sie eine Reihe von Wörtern. Dies ist Ihr einzigartiger und privater Samen und der einzige Weg, Ihre Brieftasche im Falle eines Verlusts oder einer Fehlfunktion zurückzugewinnen. Es liegt in Ihrer Verantwortung, es aufzuschreiben und an einem sicheren Ort außerhalb der Cake Wallet -App aufzubewahren.",
"pre_seed_title": "WICHTIG", "pre_seed_title": "WICHTIG",
"prepaid_cards": "Karten mit Guthaben", "prepaid_cards": "Karten mit Guthaben",
"prevent_screenshots": "Verhindern Sie Screenshots und Bildschirmaufzeichnungen", "prevent_screenshots": "Verhindern Sie Screenshots und Bildschirmaufzeichnungen",
@ -1036,4 +1037,4 @@
"you_will_receive_estimated_amount": "Sie erhalten(geschätzt )", "you_will_receive_estimated_amount": "Sie erhalten(geschätzt )",
"you_will_send": "Konvertieren von", "you_will_send": "Konvertieren von",
"yy": "YY" "yy": "YY"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "I have confirmed the token contract address and information using a reputable source. Adding malicious or incorrect information can result in a loss of funds.", "add_token_disclaimer_check": "I have confirmed the token contract address and information using a reputable source. Adding malicious or incorrect information can result in a loss of funds.",
"add_token_warning": "Do not edit or add tokens as instructed by scammers.\nAlways confirm token addresses with reputable sources!", "add_token_warning": "Do not edit or add tokens as instructed by scammers.\nAlways confirm token addresses with reputable sources!",
"add_value": "Add value", "add_value": "Add value",
"added_message_for_ata_error": "Kindly ensure you have enough SOL balance to complete your transaction.",
"address": "Address", "address": "Address",
"address_book": "Address Book", "address_book": "Address Book",
"address_book_menu": "Address book", "address_book_menu": "Address book",
@ -544,7 +545,7 @@
"potential_scam": "Potential Scam", "potential_scam": "Potential Scam",
"powered_by": "Powered by ${title}", "powered_by": "Powered by ${title}",
"pre_seed_button_text": "I understand. Show me my seed", "pre_seed_button_text": "I understand. Show me my seed",
"pre_seed_description": "On the next page you will see a series of ${words} words. This is your unique and private seed and it is the ONLY way to recover your wallet in case of loss or malfunction. It is YOUR responsibility to write it down and store it in a safe place outside of the Cake Wallet app.", "pre_seed_description": "On the next page you will see a series of words. This is your unique and private seed and it is the ONLY way to recover your wallet in case of loss or malfunction. It is YOUR responsibility to write it down and store it in a safe place outside of the Cake Wallet app.",
"pre_seed_title": "IMPORTANT", "pre_seed_title": "IMPORTANT",
"prepaid_cards": "Prepaid Cards", "prepaid_cards": "Prepaid Cards",
"prevent_screenshots": "Prevent screenshots and screen recording", "prevent_screenshots": "Prevent screenshots and screen recording",
@ -1034,4 +1035,4 @@
"you_will_receive_estimated_amount": "You will receive (estimated)", "you_will_receive_estimated_amount": "You will receive (estimated)",
"you_will_send": "Convert from", "you_will_send": "Convert from",
"yy": "YY" "yy": "YY"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "He confirmado la dirección del contrato del token y la información utilizando una fuente confiable. Agregar información maliciosa o incorrecta puede resultar en una pérdida de fondos.", "add_token_disclaimer_check": "He confirmado la dirección del contrato del token y la información utilizando una fuente confiable. Agregar información maliciosa o incorrecta puede resultar en una pérdida de fondos.",
"add_token_warning": "No edite ni agregue tokens según las instrucciones de los estafadores.\n¡Confirme siempre las direcciones de los tokens con fuentes acreditadas!", "add_token_warning": "No edite ni agregue tokens según las instrucciones de los estafadores.\n¡Confirme siempre las direcciones de los tokens con fuentes acreditadas!",
"add_value": "Añadir valor", "add_value": "Añadir valor",
"added_message_for_ata_error": "Asegúrese de tener suficiente equilibrio SOL para completar su transacción.",
"address": "Dirección", "address": "Dirección",
"address_book": "Libreta de direcciones", "address_book": "Libreta de direcciones",
"address_book_menu": "Libreta de direcciones", "address_book_menu": "Libreta de direcciones",
@ -544,7 +545,7 @@
"potential_scam": "Estafa potencial", "potential_scam": "Estafa potencial",
"powered_by": "Posible gracias a ${title}", "powered_by": "Posible gracias a ${title}",
"pre_seed_button_text": "Entiendo. Muéstrame mi semilla", "pre_seed_button_text": "Entiendo. Muéstrame mi semilla",
"pre_seed_description": "En la página siguiente verás una serie de ${words} palabras. Esta es su semilla única y privada y es la ÚNICA forma de recuperar tu billetera en caso de pérdida o mal funcionamiento. Es TU responsabilidad escribirla y guardarla en un lugar seguro fuera de la aplicación Cake Wallet.", "pre_seed_description": "En la página siguiente, verá una serie de palabras. Esta es su semilla única y privada y es la única forma de recuperar su billetera en caso de pérdida o mal funcionamiento. Es su responsabilidad escribirlo y almacenarlo en un lugar seguro fuera de la aplicación de billetera de pastel.",
"pre_seed_title": "IMPORTANTE", "pre_seed_title": "IMPORTANTE",
"prepaid_cards": "Tajetas prepagadas", "prepaid_cards": "Tajetas prepagadas",
"prevent_screenshots": "Evitar capturas de pantalla y grabación de pantalla", "prevent_screenshots": "Evitar capturas de pantalla y grabación de pantalla",
@ -1034,4 +1035,4 @@
"you_will_receive_estimated_amount": "Recibirá(estimado )", "you_will_receive_estimated_amount": "Recibirá(estimado )",
"you_will_send": "Convertir de", "you_will_send": "Convertir de",
"yy": "YY" "yy": "YY"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "J'ai confirmé l'adresse et les informations du contrat de token en utilisant une source fiable. L'ajout d'informations malveillantes ou incorrectes peut entraîner une perte de fonds.", "add_token_disclaimer_check": "J'ai confirmé l'adresse et les informations du contrat de token en utilisant une source fiable. L'ajout d'informations malveillantes ou incorrectes peut entraîner une perte de fonds.",
"add_token_warning": "Ne modifiez pas ou n'ajoutez pas de tokens comme pourraient vous le suggérer des escrocs.\nConfirmez toujours les adresses de token auprès de sources fiables !", "add_token_warning": "Ne modifiez pas ou n'ajoutez pas de tokens comme pourraient vous le suggérer des escrocs.\nConfirmez toujours les adresses de token auprès de sources fiables !",
"add_value": "Ajouter une valeur", "add_value": "Ajouter une valeur",
"added_message_for_ata_error": "Veuillez vous assurer d'avoir suffisamment de solde SOL pour terminer votre transaction.",
"address": "Adresse", "address": "Adresse",
"address_book": "Carnet d'Adresses", "address_book": "Carnet d'Adresses",
"address_book_menu": "Carnet d'Adresses", "address_book_menu": "Carnet d'Adresses",
@ -543,7 +544,7 @@
"potential_scam": "Arnaque potentielle", "potential_scam": "Arnaque potentielle",
"powered_by": "Proposé par ${title}", "powered_by": "Proposé par ${title}",
"pre_seed_button_text": "J'ai compris. Montrez moi ma phrase secrète (seed)", "pre_seed_button_text": "J'ai compris. Montrez moi ma phrase secrète (seed)",
"pre_seed_description": "Sur la page suivante vous allez voir une série de ${words} mots. Ils constituent votre phrase secrète (seed) unique et privée et sont le SEUL moyen de restaurer votre portefeuille (wallet) en cas de perte ou de dysfonctionnement. Il est de VOTRE responsabilité d'écrire cette série de mots et de la stocker dans un lieu sûr en dehors de l'application Cake Wallet.", "pre_seed_description": "À la page suivante, vous verrez une série de mots. Il s'agit de votre semence unique et privée et c'est le seul moyen de récupérer votre portefeuille en cas de perte ou de dysfonctionnement. Il est de votre responsabilité de l'écrire et de le stocker dans un endroit sûr à l'extérieur de l'application de portefeuille Cake.",
"pre_seed_title": "IMPORTANT", "pre_seed_title": "IMPORTANT",
"prepaid_cards": "Cartes prépayées", "prepaid_cards": "Cartes prépayées",
"prevent_screenshots": "Empêcher les captures d'écran et l'enregistrement d'écran", "prevent_screenshots": "Empêcher les captures d'écran et l'enregistrement d'écran",
@ -1033,4 +1034,4 @@
"you_will_receive_estimated_amount": "Vous recevrez ( estimé )", "you_will_receive_estimated_amount": "Vous recevrez ( estimé )",
"you_will_send": "Convertir depuis", "you_will_send": "Convertir depuis",
"yy": "AA" "yy": "AA"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "Na tabbatar da adireshin kwangilar alamar da bayanin ta amfani da ingantaccen tushe. Ƙara bayanan ƙeta ko kuskure na iya haifar da asarar kuɗi.", "add_token_disclaimer_check": "Na tabbatar da adireshin kwangilar alamar da bayanin ta amfani da ingantaccen tushe. Ƙara bayanan ƙeta ko kuskure na iya haifar da asarar kuɗi.",
"add_token_warning": "Kar a gyara ko ƙara alamu kamar yadda masu zamba suka umarta.\nKoyaushe tabbatar da adiresoshin alamar tare da sanannun tushe!", "add_token_warning": "Kar a gyara ko ƙara alamu kamar yadda masu zamba suka umarta.\nKoyaushe tabbatar da adiresoshin alamar tare da sanannun tushe!",
"add_value": "Ƙara ƙima", "add_value": "Ƙara ƙima",
"added_message_for_ata_error": "Da kyau tabbatar kana da isasshen so su daidaita don kammala ma'amalar ku.",
"address": "Adireshi", "address": "Adireshi",
"address_book": "Littafin adireshi", "address_book": "Littafin adireshi",
"address_book_menu": "Littafin adireshi", "address_book_menu": "Littafin adireshi",
@ -545,7 +546,7 @@
"potential_scam": "M zamba", "potential_scam": "M zamba",
"powered_by": "An ƙarfafa shi ta ${title}", "powered_by": "An ƙarfafa shi ta ${title}",
"pre_seed_button_text": "Ina fahimta. Nuna mini seed din nawa", "pre_seed_button_text": "Ina fahimta. Nuna mini seed din nawa",
"pre_seed_description": "A kan shafin nan za ku ga wata ƙungiya na ${words} kalmomi. Wannan shine tsarin daban-daban ku kuma na sirri kuma shine hanya ɗaya kadai don mai da purse dinku a cikin yanayin rasa ko rashin aiki. Yana da damar da kuke a cikin tabbatar da kuyi rubuta shi kuma kuyi ajiye shi a wuri na aminci wanda ya wuce wurin app na Cake Wallet.", "pre_seed_description": "A shafi na gaba za ku ga jerin kalmomi. Wannan shi ne zuriyarku na musamman da keɓaɓɓun iri kuma ita ce kadai hanyar da za a dawo da walat ɗinku idan an rasa ko rashin lalacewa ko kuma muguntar. Hakkin ku ne ka rubuta shi ƙasa kuma adana shi a cikin amintaccen wuri a waje da app din Wallet Ojef.",
"pre_seed_title": "MUHIMMANCI", "pre_seed_title": "MUHIMMANCI",
"prepaid_cards": "Katunan shirye-shirye", "prepaid_cards": "Katunan shirye-shirye",
"prevent_screenshots": "Fada lambobi da jarrabobi na kayan lambobi", "prevent_screenshots": "Fada lambobi da jarrabobi na kayan lambobi",
@ -1035,4 +1036,4 @@
"you_will_receive_estimated_amount": "Za ku (karɓi )", "you_will_receive_estimated_amount": "Za ku (karɓi )",
"you_will_send": "Maida daga", "you_will_send": "Maida daga",
"yy": "YY" "yy": "YY"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "मैंने एक प्रतिष्ठित स्रोत का उपयोग करके टोकन अनुबंध पते और जानकारी की पुष्टि की है। दुर्भावनापूर्ण या गलत जानकारी जोड़ने से धन की हानि हो सकती है।", "add_token_disclaimer_check": "मैंने एक प्रतिष्ठित स्रोत का उपयोग करके टोकन अनुबंध पते और जानकारी की पुष्टि की है। दुर्भावनापूर्ण या गलत जानकारी जोड़ने से धन की हानि हो सकती है।",
"add_token_warning": "स्कैमर्स के निर्देशानुसार टोकन संपादित या जोड़ें न करें।\nहमेशा प्रतिष्ठित स्रोतों से टोकन पते की पुष्टि करें!", "add_token_warning": "स्कैमर्स के निर्देशानुसार टोकन संपादित या जोड़ें न करें।\nहमेशा प्रतिष्ठित स्रोतों से टोकन पते की पुष्टि करें!",
"add_value": "मूल्य जोड़ें", "add_value": "मूल्य जोड़ें",
"added_message_for_ata_error": "कृपया सुनिश्चित करें कि आपके पास अपना लेनदेन पूरा करने के लिए पर्याप्त SOL बैलेंस है।",
"address": "पता", "address": "पता",
"address_book": "पता पुस्तिका", "address_book": "पता पुस्तिका",
"address_book_menu": "पता पुस्तिका", "address_book_menu": "पता पुस्तिका",
@ -544,7 +545,7 @@
"potential_scam": "संभावित घोटाला", "potential_scam": "संभावित घोटाला",
"powered_by": "द्वारा संचालित ${title}", "powered_by": "द्वारा संचालित ${title}",
"pre_seed_button_text": "मै समझता हुँ। मुझे अपना बीज दिखाओ", "pre_seed_button_text": "मै समझता हुँ। मुझे अपना बीज दिखाओ",
"pre_seed_description": "अगले पेज पर आपको ${words} शब्दों की एक श्रृंखला दिखाई देगी। यह आपका अद्वितीय और निजी बीज है और नुकसान या खराबी के मामले में अपने बटुए को पुनर्प्राप्त करने का एकमात्र तरीका है। यह आपकी जिम्मेदारी है कि इसे नीचे लिखें और इसे Cake Wallet ऐप के बाहर सुरक्षित स्थान पर संग्रहीत करें।", "pre_seed_description": "अगले पृष्ठ पर आपको शब्दों की एक श्रृंखला दिखाई देगी। यह आपका अनूठा और निजी बीज है और यह नुकसान या खराबी के मामले में अपने बटुए को पुनर्प्राप्त करने का एकमात्र तरीका है। यह आपकी जिम्मेदारी है कि आप इसे लिखें और इसे केक वॉलेट ऐप के बाहर एक सुरक्षित स्थान पर संग्रहीत करें।",
"pre_seed_title": "महत्वपूर्ण", "pre_seed_title": "महत्वपूर्ण",
"prepaid_cards": "पूर्वदत्त कार्ड", "prepaid_cards": "पूर्वदत्त कार्ड",
"prevent_screenshots": "स्क्रीनशॉट और स्क्रीन रिकॉर्डिंग रोकें", "prevent_screenshots": "स्क्रीनशॉट और स्क्रीन रिकॉर्डिंग रोकें",
@ -1035,4 +1036,4 @@
"you_will_receive_estimated_amount": "आपको#अनुमानित ( प्राप्त होगा)", "you_will_receive_estimated_amount": "आपको#अनुमानित ( प्राप्त होगा)",
"you_will_send": "से रूपांतरित करें", "you_will_send": "से रूपांतरित करें",
"yy": "वाईवाई" "yy": "वाईवाई"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "Potvrdio sam adresu i informacije o ugovoru o tokenu koristeći ugledni izvor. Dodavanje zlonamjernih ili netočnih informacija može dovesti do gubitka sredstava.", "add_token_disclaimer_check": "Potvrdio sam adresu i informacije o ugovoru o tokenu koristeći ugledni izvor. Dodavanje zlonamjernih ili netočnih informacija može dovesti do gubitka sredstava.",
"add_token_warning": "Nemojte uređivati niti dodavati tokene prema uputama prevaranata.\nUvijek potvrdite adrese tokena s uglednim izvorima!", "add_token_warning": "Nemojte uređivati niti dodavati tokene prema uputama prevaranata.\nUvijek potvrdite adrese tokena s uglednim izvorima!",
"add_value": "Dodaj vrijednost", "add_value": "Dodaj vrijednost",
"added_message_for_ata_error": "Ljubazno osigurajte da imate dovoljno salda SOL -a da dovršite svoju transakciju.",
"address": "Adresa", "address": "Adresa",
"address_book": "Imenik", "address_book": "Imenik",
"address_book_menu": "Imenik", "address_book_menu": "Imenik",
@ -543,7 +544,7 @@
"potential_scam": "Potencijalna prijevara", "potential_scam": "Potencijalna prijevara",
"powered_by": "Omogućio ${title}", "powered_by": "Omogućio ${title}",
"pre_seed_button_text": "Razumijem. Prikaži mi moj pristupni izraz", "pre_seed_button_text": "Razumijem. Prikaži mi moj pristupni izraz",
"pre_seed_description": "Na sljedećoj ćete stranici vidjeti niz ${words} riječi. Radi se o Vašem jedinstvenom i tajnom pristupnom izrazu koji je ujedno i JEDINI način na koji možete oporaviti svoj novčanik u slučaju gubitka ili kvara. VAŠA je odgovornost zapisati ga te pohraniti na sigurno mjesto izvan Cake Wallet aplikacije.", "pre_seed_description": "Na sljedećoj stranici vidjet ćete niz riječi. Ovo je vaše jedinstveno i privatno sjeme i to je jedini način da povratite novčanik u slučaju gubitka ili neispravnosti. Vaša je odgovornost zapisati je i pohraniti na sigurno mjesto izvan aplikacije za novčanik.",
"pre_seed_title": "VAŽNO", "pre_seed_title": "VAŽNO",
"prepaid_cards": "Unaprijed plaćene kartice", "prepaid_cards": "Unaprijed plaćene kartice",
"prevent_screenshots": "Spriječite snimke zaslona i snimanje zaslona", "prevent_screenshots": "Spriječite snimke zaslona i snimanje zaslona",
@ -1033,4 +1034,4 @@
"you_will_receive_estimated_amount": "Primit ćete(procijenjeno )", "you_will_receive_estimated_amount": "Primit ćete(procijenjeno )",
"you_will_send": "Razmijeni iz", "you_will_send": "Razmijeni iz",
"yy": "GG" "yy": "GG"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "Ես հաստատել եմ token-ի պայմանագրի հասցեն և տեղեկատվությունը վստահելի աղբյուրի օգտագործմամբ: Վնասակար կամ սխալ տեղեկատվության ավելացումը կարող է հանգեցնել միջոցների կորստի:", "add_token_disclaimer_check": "Ես հաստատել եմ token-ի պայմանագրի հասցեն և տեղեկատվությունը վստահելի աղբյուրի օգտագործմամբ: Վնասակար կամ սխալ տեղեկատվության ավելացումը կարող է հանգեցնել միջոցների կորստի:",
"add_token_warning": "Մի խմբագրեք կամ ավելացրեք token-ներ, ինչպես կոչ են անում խարդախները:\nՄիշտ հաստատեք Token-ների հասցեները վստահելի աղբյուրներով:", "add_token_warning": "Մի խմբագրեք կամ ավելացրեք token-ներ, ինչպես կոչ են անում խարդախները:\nՄիշտ հաստատեք Token-ների հասցեները վստահելի աղբյուրներով:",
"add_value": "Ավելացնել արժեք", "add_value": "Ավելացնել արժեք",
"added_message_for_ata_error": "Սիրով համոզվեք, որ ձեր գործարքը ավարտելու համար բավականաչափ SOL հավասարակշռություն ունեք:",
"address": "Հասցե", "address": "Հասցե",
"address_book": "Հասցեագիրք", "address_book": "Հասցեագիրք",
"address_book_menu": "Հասցեագիրք", "address_book_menu": "Հասցեագիրք",
@ -542,7 +543,7 @@
"potential_scam": "Հնարավոր խաբեություն", "potential_scam": "Հնարավոր խաբեություն",
"powered_by": "${title} կողմից ապահովված", "powered_by": "${title} կողմից ապահովված",
"pre_seed_button_text": "Ես հասկանում եմ։ Ցույց տվեք իմ սերմը", "pre_seed_button_text": "Ես հասկանում եմ։ Ցույց տվեք իմ սերմը",
"pre_seed_description": "Հաջորդ էջում դուք կտեսնեք ${words} բառերի շարք։ Սա ձեր յուրահատուկ և գաղտնի սերմն է, որը ձեր դրամապանակը վերականգնելու միակ միջոցն է կորուստի կամ սխալ գործարքի դեպքում։ Դուք պատասխանատու եք այն գրառել և ապահով վայրում պահել Cake Wallet հավելվածից դուրս", "pre_seed_description": "Հաջորդ էջում կտեսնեք մի շարք բառեր: Սա ձեր եզակի եւ մասնավոր սերմն է, եւ դա ձեր դրամապանակը վերականգնելու միակ միջոցն է կորստի կամ անսարքության դեպքում: Ձեր պարտականությունն է գրել այն եւ պահել այն անվտանգ վայրում, տորթի դրամապանակի հավելվածից դուրս:",
"pre_seed_title": "ԿԱՐԵՎՈՐ", "pre_seed_title": "ԿԱՐԵՎՈՐ",
"prepaid_cards": "Նախավճարային քարտեր", "prepaid_cards": "Նախավճարային քարտեր",
"prevent_screenshots": "Կանխել էկրանի պատկերները և տեսագրությունը", "prevent_screenshots": "Կանխել էկրանի պատկերները և տեսագրությունը",
@ -1031,4 +1032,4 @@
"you_will_receive_estimated_amount": "Դուք կստանաք ( գնահատված )", "you_will_receive_estimated_amount": "Դուք կստանաք ( գնահատված )",
"you_will_send": "Փոխանակեք", "you_will_send": "Փոխանակեք",
"yy": "ՏՏ" "yy": "ՏՏ"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "Saya telah mengonfirmasi alamat dan informasi kontrak token menggunakan sumber yang memiliki reputasi baik. Menambahkan informasi jahat atau salah dapat mengakibatkan hilangnya dana.", "add_token_disclaimer_check": "Saya telah mengonfirmasi alamat dan informasi kontrak token menggunakan sumber yang memiliki reputasi baik. Menambahkan informasi jahat atau salah dapat mengakibatkan hilangnya dana.",
"add_token_warning": "Jangan mengedit atau menambahkan token seperti yang diinstruksikan oleh penipu.\nSelalu konfirmasikan alamat token dengan sumber tepercaya!", "add_token_warning": "Jangan mengedit atau menambahkan token seperti yang diinstruksikan oleh penipu.\nSelalu konfirmasikan alamat token dengan sumber tepercaya!",
"add_value": "Tambahkan nilai", "add_value": "Tambahkan nilai",
"added_message_for_ata_error": "Mohon pastikan Anda memiliki saldo SOL yang cukup untuk menyelesaikan transaksi Anda.",
"address": "Alamat", "address": "Alamat",
"address_book": "Buku Alamat", "address_book": "Buku Alamat",
"address_book_menu": "Buku alamat", "address_book_menu": "Buku alamat",
@ -545,7 +546,7 @@
"potential_scam": "Penipuan potensial", "potential_scam": "Penipuan potensial",
"powered_by": "Didukung oleh ${title}", "powered_by": "Didukung oleh ${title}",
"pre_seed_button_text": "Saya mengerti. Tampilkan seed saya", "pre_seed_button_text": "Saya mengerti. Tampilkan seed saya",
"pre_seed_description": "Di halaman berikutnya Anda akan melihat serangkaian kata ${words}. Ini adalah seed unik dan pribadi Anda dan itu SATU-SATUNYA cara untuk mengembalikan dompet Anda jika hilang atau rusak. Ini adalah TANGGUNG JAWAB Anda untuk menuliskannya dan menyimpan di tempat yang aman di luar aplikasi Cake Wallet.", "pre_seed_description": "Di halaman berikutnya Anda akan melihat serangkaian kata. Ini adalah benih unik dan pribadi Anda dan ini adalah satu -satunya cara untuk memulihkan dompet Anda jika terjadi kehilangan atau kerusakan. Adalah tanggung jawab Anda untuk menuliskannya dan menyimpannya di tempat yang aman di luar aplikasi Cake Wallet.",
"pre_seed_title": "PENTING", "pre_seed_title": "PENTING",
"prepaid_cards": "Kartu prabayar", "prepaid_cards": "Kartu prabayar",
"prevent_screenshots": "Cegah tangkapan layar dan perekaman layar", "prevent_screenshots": "Cegah tangkapan layar dan perekaman layar",
@ -1036,4 +1037,4 @@
"you_will_receive_estimated_amount": "Anda akan menerima(estimasi )", "you_will_receive_estimated_amount": "Anda akan menerima(estimasi )",
"you_will_send": "Konversi dari", "you_will_send": "Konversi dari",
"yy": "YY" "yy": "YY"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "Ho confermato l'indirizzo e le informazioni del contratto token utilizzando una fonte attendibile. L'aggiunta di informazioni dannose o errate può comportare una perdita di fondi.", "add_token_disclaimer_check": "Ho confermato l'indirizzo e le informazioni del contratto token utilizzando una fonte attendibile. L'aggiunta di informazioni dannose o errate può comportare una perdita di fondi.",
"add_token_warning": "Non modificare o aggiungere token come indicato dai truffatori.\nConferma sempre gli indirizzi dei token con fonti attendibili!", "add_token_warning": "Non modificare o aggiungere token come indicato dai truffatori.\nConferma sempre gli indirizzi dei token con fonti attendibili!",
"add_value": "Aggiungi valore", "add_value": "Aggiungi valore",
"added_message_for_ata_error": "Si prega di assicurati di avere abbastanza equilibrio sol per completare la transazione.",
"address": "Indirizzo", "address": "Indirizzo",
"address_book": "Rubrica indirizzi", "address_book": "Rubrica indirizzi",
"address_book_menu": "Rubrica indirizzi", "address_book_menu": "Rubrica indirizzi",
@ -544,7 +545,7 @@
"potential_scam": "Potenziale truffa", "potential_scam": "Potenziale truffa",
"powered_by": "Sviluppato da ${title}", "powered_by": "Sviluppato da ${title}",
"pre_seed_button_text": "Ho capito. Mostrami il seme", "pre_seed_button_text": "Ho capito. Mostrami il seme",
"pre_seed_description": "Nella pagina seguente ti sarà mostrata una serie di parole ${words}. Questo è il tuo seme unico e privato ed è l'UNICO modo per recuperare il tuo portafoglio in caso di perdita o malfunzionamento. E' TUA responsabilità trascriverlo e conservarlo in un posto sicuro fuori dall'app Cake Wallet.", "pre_seed_description": "Nella pagina successiva vedrai una serie di parole. Questo è il tuo seme unico e privato ed è l'unico modo per recuperare il portafoglio in caso di perdita o malfunzionamento. È tua responsabilità scriverlo e archiviarlo in un posto sicuro al di fuori dell'app per il portafoglio Cake.",
"pre_seed_title": "IMPORTANTE", "pre_seed_title": "IMPORTANTE",
"prepaid_cards": "Carte prepagata", "prepaid_cards": "Carte prepagata",
"prevent_screenshots": "Impedisci screenshot e registrazione dello schermo", "prevent_screenshots": "Impedisci screenshot e registrazione dello schermo",
@ -1034,4 +1035,4 @@
"you_will_receive_estimated_amount": "Riceverai(stimato )", "you_will_receive_estimated_amount": "Riceverai(stimato )",
"you_will_send": "Conveti da", "you_will_send": "Conveti da",
"yy": "YY" "yy": "YY"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "信頼できる情報源を使用して、トークン コントラクトのアドレスと情報を確認しました。 悪意のある情報や不正確な情報を追加すると、資金が失われる可能性があります。", "add_token_disclaimer_check": "信頼できる情報源を使用して、トークン コントラクトのアドレスと情報を確認しました。 悪意のある情報や不正確な情報を追加すると、資金が失われる可能性があります。",
"add_token_warning": "詐欺師の指示に従ってトークンを編集または追加しないでください。\nトークン アドレスは常に信頼できる情報源で確認してください。", "add_token_warning": "詐欺師の指示に従ってトークンを編集または追加しないでください。\nトークン アドレスは常に信頼できる情報源で確認してください。",
"add_value": "付加価値", "add_value": "付加価値",
"added_message_for_ata_error": "トランザクションを完了するのに十分なソルバランスがあることを確認してください。",
"address": "住所", "address": "住所",
"address_book": "住所録", "address_book": "住所録",
"address_book_menu": "住所録", "address_book_menu": "住所録",
@ -544,7 +545,7 @@
"potential_scam": "潜在的な詐欺", "potential_scam": "潜在的な詐欺",
"powered_by": "搭載 ${title}", "powered_by": "搭載 ${title}",
"pre_seed_button_text": "わかります。 種を見せて", "pre_seed_button_text": "わかります。 種を見せて",
"pre_seed_description": "次のページでは、一連の${words}語が表示されます。 これはあなたのユニークでプライベートなシードであり、紛失や誤動作が発生した場合にウォレットを回復する唯一の方法です。 それを書き留めて、Cake Wallet アプリの外の安全な場所に保管するのはあなたの責任です。", "pre_seed_description": "次のページには、一連の単語が表示されます。これはあなたのユニークでプライベートな種であり、損失や誤動作の場合に財布を回復する唯一の方法です。それを書き留めて、ケーキウォレットアプリの外の安全な場所に保管するのはあなたの責任です。",
"pre_seed_title": "重要", "pre_seed_title": "重要",
"prepaid_cards": "プリペイドカード", "prepaid_cards": "プリペイドカード",
"prevent_screenshots": "スクリーンショットと画面録画を防止する", "prevent_screenshots": "スクリーンショットと画面録画を防止する",
@ -1034,4 +1035,4 @@
"you_will_receive_estimated_amount": "あなたは(推定)を受け取ります", "you_will_receive_estimated_amount": "あなたは(推定)を受け取ります",
"you_will_send": "から変換", "you_will_send": "から変換",
"yy": "YY" "yy": "YY"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "신뢰할 수 있는 출처를 통해 토큰 컨트랙트 주소와 정보를 확인했습니다. 악의적이거나 잘못된 정보를 추가하면 자금 손실이 발생할 수 있습니다.", "add_token_disclaimer_check": "신뢰할 수 있는 출처를 통해 토큰 컨트랙트 주소와 정보를 확인했습니다. 악의적이거나 잘못된 정보를 추가하면 자금 손실이 발생할 수 있습니다.",
"add_token_warning": "사기꾼의 지시에 따라 토큰을 편집하거나 추가하지 마십시오.\n항상 신뢰할 수 있는 출처를 통해 토큰 주소를 확인하세요!", "add_token_warning": "사기꾼의 지시에 따라 토큰을 편집하거나 추가하지 마십시오.\n항상 신뢰할 수 있는 출처를 통해 토큰 주소를 확인하세요!",
"add_value": "값 추가", "add_value": "값 추가",
"added_message_for_ata_error": "거래를 완료하기에 충분한 SOL 잔액이 있는지 확인하십시오.",
"address": "주소", "address": "주소",
"address_book": "주소록", "address_book": "주소록",
"address_book_menu": "주소록", "address_book_menu": "주소록",
@ -543,7 +544,7 @@
"potential_scam": "잠재적 사기", "potential_scam": "잠재적 사기",
"powered_by": "에 의해 구동 ${title}", "powered_by": "에 의해 구동 ${title}",
"pre_seed_button_text": "이해 했어요. 내 씨앗을 보여줘", "pre_seed_button_text": "이해 했어요. 내 씨앗을 보여줘",
"pre_seed_description": "다음 페이지에서 ${words} 개의 단어를 볼 수 있습니다. 이것은 귀하의 고유하고 개인적인 시드이며 분실 또는 오작동시 지갑을 복구하는 유일한 방법입니다. 기록해두고 Cake Wallet 앱 외부의 안전한 장소에 보관하는 것은 귀하의 책임입니다.", "pre_seed_description": "다음 페이지에는 일련의 단어가 표시됩니다. 이것은 독특하고 개인적인 씨앗이며 손실이나 오작동의 경우 지갑을 회수하는 유일한 방법입니다. 케이크 지갑 앱 외부의 안전한 장소에 그것을 적어두고 보관하는 것은 귀하의 책임입니다.",
"pre_seed_title": "중대한", "pre_seed_title": "중대한",
"prepaid_cards": "선불 카드", "prepaid_cards": "선불 카드",
"prevent_screenshots": "스크린샷 및 화면 녹화 방지", "prevent_screenshots": "스크린샷 및 화면 녹화 방지",
@ -1034,4 +1035,4 @@
"you_will_send": "다음에서 변환", "you_will_send": "다음에서 변환",
"YY": "YY", "YY": "YY",
"yy": "YY" "yy": "YY"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "ဂုဏ်သိက္ခာရှိသော အရင်းအမြစ်ကို အသုံးပြု၍ တိုကင်စာချုပ်လိပ်စာနှင့် အချက်အလက်ကို ကျွန်ုပ်အတည်ပြုပြီးဖြစ်သည်။ အန္တရာယ်ရှိသော သို့မဟုတ် မမှန်ကန်သော အချက်အလက်များကို ထည့်သွင်းခြင်းသည် ရန်ပုံငွေများ ဆုံးရှုံးသွားနိုင်သည်။", "add_token_disclaimer_check": "ဂုဏ်သိက္ခာရှိသော အရင်းအမြစ်ကို အသုံးပြု၍ တိုကင်စာချုပ်လိပ်စာနှင့် အချက်အလက်ကို ကျွန်ုပ်အတည်ပြုပြီးဖြစ်သည်။ အန္တရာယ်ရှိသော သို့မဟုတ် မမှန်ကန်သော အချက်အလက်များကို ထည့်သွင်းခြင်းသည် ရန်ပုံငွေများ ဆုံးရှုံးသွားနိုင်သည်။",
"add_token_warning": "လိမ်လည်သူများ ညွှန်ကြားထားသည့်အတိုင်း တိုကင်များကို တည်းဖြတ်ခြင်း သို့မဟုတ် မထည့်ပါနှင့်။\nဂုဏ်သိက္ခာရှိသော အရင်းအမြစ်များဖြင့် အမြဲတမ်း တိုကင်လိပ်စာများကို အတည်ပြုပါ။", "add_token_warning": "လိမ်လည်သူများ ညွှန်ကြားထားသည့်အတိုင်း တိုကင်များကို တည်းဖြတ်ခြင်း သို့မဟုတ် မထည့်ပါနှင့်။\nဂုဏ်သိက္ခာရှိသော အရင်းအမြစ်များဖြင့် အမြဲတမ်း တိုကင်လိပ်စာများကို အတည်ပြုပါ။",
"add_value": "တန်ဖိုးထည့်ပါ။", "add_value": "တန်ဖိုးထည့်ပါ။",
"added_message_for_ata_error": "ကြင်နာစွာသင့်ငွေပေးငွေယူကိုဖြည့်စွက်ရန်သင်အလုံအလောက် sol မျှတမှုရှိသည်။",
"address": "လိပ်စာ", "address": "လိပ်စာ",
"address_book": "လိပ်စာစာအုပ်", "address_book": "လိပ်စာစာအုပ်",
"address_book_menu": "လိပ်စာစာအုပ်", "address_book_menu": "လိပ်စာစာအုပ်",
@ -543,7 +544,7 @@
"potential_scam": "အလားအလာရှိသောလိမ်လည်မှု", "potential_scam": "အလားအလာရှိသောလိမ်လည်မှု",
"powered_by": "${title} မှ ပံ့ပိုးပေးသည်", "powered_by": "${title} မှ ပံ့ပိုးပေးသည်",
"pre_seed_button_text": "ကျွန်တော်နားလည်ပါတယ်။ ငါ့အမျိုးအနွယ်ကို ပြလော့", "pre_seed_button_text": "ကျွန်တော်နားလည်ပါတယ်။ ငါ့အမျိုးအနွယ်ကို ပြလော့",
"pre_seed_description": "နောက်စာမျက်နှာတွင် ${words} စကားလုံးများ အတွဲလိုက်ကို တွေ့ရပါမည်။ ၎င်းသည် သင်၏ထူးခြားပြီး သီးသန့်မျိုးစေ့ဖြစ်ပြီး ပျောက်ဆုံးခြင်း သို့မဟုတ် ချွတ်ယွင်းမှုရှိပါက သင့်ပိုက်ဆံအိတ်ကို ပြန်လည်ရယူရန် တစ်ခုတည်းသောနည်းလမ်းဖြစ်သည်။ ၎င်းကို Cake Wallet အက်ပ်၏အပြင်ဘက်တွင် လုံခြုံသောနေရာတွင် သိမ်းဆည်းရန်မှာ သင်၏တာဝန်ဖြစ်သည်။", "pre_seed_description": "နောက်စာမျက်နှာမှာစကားလုံးတစ်လုံးကိုတွေ့ရလိမ့်မယ်။ ၎င်းသည်သင်၏ထူးခြားသည့်နှင့်ပုဂ္ဂလိကမျိုးစေ့ဖြစ်ပြီးဆုံးရှုံးမှုသို့မဟုတ်ချွတ်ယွင်းမှုကိစ္စတွင်သင်၏ပိုက်ဆံအိတ်ကိုပြန်လည်ရယူရန်တစ်ခုတည်းသောနည်းလမ်းဖြစ်သည်။ ၎င်းကိုရေးရန်နှင့်၎င်းကို Cake Wallet App အပြင်ဘက်တွင်လုံခြုံသောနေရာ၌သိမ်းဆည်းရန်သင်၏တာ 0 န်ဖြစ်သည်။",
"pre_seed_title": "အရေးကြီးသည်။", "pre_seed_title": "အရေးကြီးသည်။",
"prepaid_cards": "ကြိုတင်ငွေဖြည့်ကဒ်များ", "prepaid_cards": "ကြိုတင်ငွေဖြည့်ကဒ်များ",
"prevent_screenshots": "ဖန်သားပြင်ဓာတ်ပုံများနှင့် မျက်နှာပြင်ရိုက်ကူးခြင်းကို တားဆီးပါ။", "prevent_screenshots": "ဖန်သားပြင်ဓာတ်ပုံများနှင့် မျက်နှာပြင်ရိုက်ကူးခြင်းကို တားဆီးပါ။",
@ -1033,4 +1034,4 @@
"you_will_receive_estimated_amount": "သင် ( ခန့်မှန်းခြေ ) လက်ခံရရှိလိမ့်မည်", "you_will_receive_estimated_amount": "သင် ( ခန့်မှန်းခြေ ) လက်ခံရရှိလိမ့်မည်",
"you_will_send": "မှပြောင်းပါ။", "you_will_send": "မှပြောင်းပါ။",
"yy": "YY" "yy": "YY"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "Ik heb het adres en de informatie van het tokencontract bevestigd met behulp van een betrouwbare bron. Het toevoegen van kwaadaardige of onjuiste informatie kan leiden tot verlies van geld.", "add_token_disclaimer_check": "Ik heb het adres en de informatie van het tokencontract bevestigd met behulp van een betrouwbare bron. Het toevoegen van kwaadaardige of onjuiste informatie kan leiden tot verlies van geld.",
"add_token_warning": "Bewerk of voeg geen tokens toe volgens de instructies van oplichters.\nBevestig tokenadressen altijd met betrouwbare bronnen!", "add_token_warning": "Bewerk of voeg geen tokens toe volgens de instructies van oplichters.\nBevestig tokenadressen altijd met betrouwbare bronnen!",
"add_value": "Waarde toevoegen", "add_value": "Waarde toevoegen",
"added_message_for_ata_error": "Zorg ervoor dat u voldoende SOL -balans hebt om uw transactie te voltooien.",
"address": "Adres", "address": "Adres",
"address_book": "Adresboek", "address_book": "Adresboek",
"address_book_menu": "Adresboek", "address_book_menu": "Adresboek",
@ -543,7 +544,7 @@
"potential_scam": "Potentiële zwendel", "potential_scam": "Potentiële zwendel",
"powered_by": "Aangedreven door ${title}", "powered_by": "Aangedreven door ${title}",
"pre_seed_button_text": "Ik begrijp het. Laat me mijn zaad zien", "pre_seed_button_text": "Ik begrijp het. Laat me mijn zaad zien",
"pre_seed_description": "Op de volgende pagina ziet u een reeks van ${words} woorden. Dit is uw unieke en persoonlijke zaadje en het is de ENIGE manier om uw portemonnee te herstellen in geval van verlies of storing. Het is JOUW verantwoordelijkheid om het op te schrijven en op een veilige plaats op te slaan buiten de Cake Wallet app.", "pre_seed_description": "Op de volgende pagina ziet u een reeks woorden. Dit is uw unieke en privézaad en het is de enige manier om uw portemonnee te herstellen in geval van verlies of storing. Het is uw verantwoordelijkheid om het op te schrijven en op te slaan op een veilige plek buiten de cake -portemonnee -app.",
"pre_seed_title": "BELANGRIJK", "pre_seed_title": "BELANGRIJK",
"prepaid_cards": "Prepaid-kaarten", "prepaid_cards": "Prepaid-kaarten",
"prevent_screenshots": "Voorkom screenshots en schermopname", "prevent_screenshots": "Voorkom screenshots en schermopname",
@ -1034,4 +1035,4 @@
"you_will_receive_estimated_amount": "U ontvangt(geschat )", "you_will_receive_estimated_amount": "U ontvangt(geschat )",
"you_will_send": "Converteren van", "you_will_send": "Converteren van",
"yy": "JJ" "yy": "JJ"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "Potwierdziłem adres kontraktu tokena i informacje, korzystając z renomowanego źródła. Dodanie złośliwych lub niepoprawnych informacji może spowodować utratę środków.", "add_token_disclaimer_check": "Potwierdziłem adres kontraktu tokena i informacje, korzystając z renomowanego źródła. Dodanie złośliwych lub niepoprawnych informacji może spowodować utratę środków.",
"add_token_warning": "Nie edytuj ani nie dodawaj tokenów zgodnie z instrukcjami oszustów.\nZawsze potwierdzaj adresy tokenów z renomowanymi źródłami!", "add_token_warning": "Nie edytuj ani nie dodawaj tokenów zgodnie z instrukcjami oszustów.\nZawsze potwierdzaj adresy tokenów z renomowanymi źródłami!",
"add_value": "Dodaj wartość", "add_value": "Dodaj wartość",
"added_message_for_ata_error": "Upewnij się, że masz wystarczającą saldo SOL, aby ukończyć transakcję.",
"address": "Adres", "address": "Adres",
"address_book": "Kontakty", "address_book": "Kontakty",
"address_book_menu": "Kontakty", "address_book_menu": "Kontakty",
@ -543,7 +544,7 @@
"potential_scam": "Potencjalne oszustwo", "potential_scam": "Potencjalne oszustwo",
"powered_by": "Obsługiwane przez ${title}", "powered_by": "Obsługiwane przez ${title}",
"pre_seed_button_text": "Rozumiem. Pokaż mi moją fraze seed", "pre_seed_button_text": "Rozumiem. Pokaż mi moją fraze seed",
"pre_seed_description": "Na następnej stronie zobaczysz serię ${words} słów. To jest Twoja unikalna i prywatna fraza seed i jest to JEDYNY sposób na odzyskanie portfela w przypadku utraty lub awarii telefonu. Twoim obowiązkiem jest zapisanie go i przechowywanie w bezpiecznym miejscu (np. na kartce w sejfie).", "pre_seed_description": "Na następnej stronie zobaczysz serię słów. To jest twoje wyjątkowe i prywatne ziarno i jest to jedyny sposób na odzyskanie portfela w przypadku utraty lub awarii. Twoim obowiązkiem jest zapisanie go i przechowywanie w bezpiecznym miejscu poza aplikacją do portfela ciasta.",
"pre_seed_title": "WAŻNE", "pre_seed_title": "WAŻNE",
"prepaid_cards": "Karty przedpłacone", "prepaid_cards": "Karty przedpłacone",
"prevent_screenshots": "Zapobiegaj zrzutom ekranu i nagrywaniu ekranu", "prevent_screenshots": "Zapobiegaj zrzutom ekranu i nagrywaniu ekranu",
@ -1033,4 +1034,4 @@
"you_will_receive_estimated_amount": "Otrzymasz(oszacowane )", "you_will_receive_estimated_amount": "Otrzymasz(oszacowane )",
"you_will_send": "Konwertuj z", "you_will_send": "Konwertuj z",
"yy": "RR" "yy": "RR"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "Confirmei o endereço e as informações do contrato de token usando uma fonte confiável. Adicionar informações maliciosas ou incorretas pode resultar em perda de fundos.", "add_token_disclaimer_check": "Confirmei o endereço e as informações do contrato de token usando uma fonte confiável. Adicionar informações maliciosas ou incorretas pode resultar em perda de fundos.",
"add_token_warning": "Não edite ou adicione tokens de acordo com as instruções dos golpistas.\nSempre confirme os endereços de token com fontes confiáveis!", "add_token_warning": "Não edite ou adicione tokens de acordo com as instruções dos golpistas.\nSempre confirme os endereços de token com fontes confiáveis!",
"add_value": "Adicionar valor", "add_value": "Adicionar valor",
"added_message_for_ata_error": "Por favor, certifique -se de ter um equilíbrio SOL suficiente para concluir sua transação.",
"address": "Endereço", "address": "Endereço",
"address_book": "Livro de endereços", "address_book": "Livro de endereços",
"address_book_menu": "Livro de endereços", "address_book_menu": "Livro de endereços",
@ -545,7 +546,7 @@
"potential_scam": "Golpe potencial", "potential_scam": "Golpe potencial",
"powered_by": "Troca realizada por ${title}", "powered_by": "Troca realizada por ${title}",
"pre_seed_button_text": "Compreendo. Me mostre minha semente", "pre_seed_button_text": "Compreendo. Me mostre minha semente",
"pre_seed_description": "Na próxima página, você verá uma série de ${words} palavras. Esta é a sua semente única e privada e é a ÚNICA maneira de recuperar sua carteira em caso de perda ou mau funcionamento. É SUA responsabilidade anotá-lo e armazená-lo em um local seguro fora do aplicativo Cake Wallet.", "pre_seed_description": "Na próxima página, você verá uma série de palavras. Esta é a sua semente única e privada e é a única maneira de recuperar sua carteira em caso de perda ou mau funcionamento. É sua responsabilidade anotar e armazená -lo em um local seguro fora do aplicativo de carteira de bolo.",
"pre_seed_title": "IMPORTANTE", "pre_seed_title": "IMPORTANTE",
"prepaid_cards": "Cartões pré-pagos", "prepaid_cards": "Cartões pré-pagos",
"prevent_screenshots": "Evite capturas de tela e gravação de tela", "prevent_screenshots": "Evite capturas de tela e gravação de tela",
@ -1039,4 +1040,4 @@
"you_will_receive_estimated_amount": "Você receberá(estimado )", "you_will_receive_estimated_amount": "Você receberá(estimado )",
"you_will_send": "Converter de", "you_will_send": "Converter de",
"yy": "aa" "yy": "aa"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "Я подтвердил адрес контракта токена и информацию, используя авторитетный источник. Добавление вредоносной или неверной информации может привести к потере средств.", "add_token_disclaimer_check": "Я подтвердил адрес контракта токена и информацию, используя авторитетный источник. Добавление вредоносной или неверной информации может привести к потере средств.",
"add_token_warning": "Не редактируйте и не добавляйте токены по указанию мошенников.\nВсегда подтверждайте адреса токенов из авторитетных источников!", "add_token_warning": "Не редактируйте и не добавляйте токены по указанию мошенников.\nВсегда подтверждайте адреса токенов из авторитетных источников!",
"add_value": "Добавить значение", "add_value": "Добавить значение",
"added_message_for_ata_error": "Пожалуйста, убедитесь, что у вас достаточно баланса Sol, чтобы завершить вашу транзакцию.",
"address": "Адрес", "address": "Адрес",
"address_book": "Адресная книга", "address_book": "Адресная книга",
"address_book_menu": "Адресная книга", "address_book_menu": "Адресная книга",
@ -544,7 +545,7 @@
"potential_scam": "Потенциальная афера", "potential_scam": "Потенциальная афера",
"powered_by": "Используя ${title}", "powered_by": "Используя ${title}",
"pre_seed_button_text": "Понятно. Покажите мнемоническую фразу", "pre_seed_button_text": "Понятно. Покажите мнемоническую фразу",
"pre_seed_description": "На следующей странице вы увидите серию из ${words} слов. Это ваша уникальная и личная мнемоническая фраза, и это ЕДИНСТВЕННЫЙ способ восстановить свой кошелек в случае потери или неисправности. ВАМ необходимо записать ее и хранить в надежном месте вне приложения Cake Wallet.", "pre_seed_description": "На следующей странице вы увидите серию слов. Это ваше уникальное и частное семя, и это единственный способ восстановить ваш кошелек в случае потери или неисправности. Вы несете ответственность за то, чтобы записать его и хранить в безопасном месте за пределами приложения кошелька для торта.",
"pre_seed_title": "ВАЖНО", "pre_seed_title": "ВАЖНО",
"prepaid_cards": "Предоплаченные карты", "prepaid_cards": "Предоплаченные карты",
"prevent_screenshots": "Предотвратить скриншоты и запись экрана", "prevent_screenshots": "Предотвратить скриншоты и запись экрана",
@ -1034,4 +1035,4 @@
"you_will_receive_estimated_amount": "Вы получите(Оценку )", "you_will_receive_estimated_amount": "Вы получите(Оценку )",
"you_will_send": "Конвертировать из", "you_will_send": "Конвертировать из",
"yy": "ГГ" "yy": "ГГ"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "ฉันได้ยืนยันที่อยู่และข้อมูลของสัญญาโทเค็นโดยใช้แหล่งข้อมูลที่เชื่อถือได้ การเพิ่มข้อมูลที่เป็นอันตรายหรือไม่ถูกต้องอาจทำให้สูญเสียเงินได้", "add_token_disclaimer_check": "ฉันได้ยืนยันที่อยู่และข้อมูลของสัญญาโทเค็นโดยใช้แหล่งข้อมูลที่เชื่อถือได้ การเพิ่มข้อมูลที่เป็นอันตรายหรือไม่ถูกต้องอาจทำให้สูญเสียเงินได้",
"add_token_warning": "ห้ามแก้ไขหรือเพิ่มโทเค็นตามคำแนะนำของนักต้มตุ๋น\nยืนยันที่อยู่โทเค็นกับแหล่งที่มาที่เชื่อถือได้เสมอ!", "add_token_warning": "ห้ามแก้ไขหรือเพิ่มโทเค็นตามคำแนะนำของนักต้มตุ๋น\nยืนยันที่อยู่โทเค็นกับแหล่งที่มาที่เชื่อถือได้เสมอ!",
"add_value": "เพิ่มมูลค่า", "add_value": "เพิ่มมูลค่า",
"added_message_for_ata_error": "กรุณาตรวจสอบให้แน่ใจว่าคุณมียอดคงเหลือโซลเพียงพอที่จะทำธุรกรรมให้เสร็จสมบูรณ์",
"address": "ที่อยู่", "address": "ที่อยู่",
"address_book": "สมุดที่อยู่", "address_book": "สมุดที่อยู่",
"address_book_menu": "สมุดที่อยู่", "address_book_menu": "สมุดที่อยู่",
@ -543,7 +544,7 @@
"potential_scam": "การหลอกลวงที่มีศักยภาพ", "potential_scam": "การหลอกลวงที่มีศักยภาพ",
"powered_by": "พัฒนาขึ้นโดย ${title}", "powered_by": "พัฒนาขึ้นโดย ${title}",
"pre_seed_button_text": "ฉันเข้าใจ แสดง seed ของฉัน", "pre_seed_button_text": "ฉันเข้าใจ แสดง seed ของฉัน",
"pre_seed_description": "บนหน้าถัดไปคุณจะเห็นชุดของคำ ${words} คำ นี่คือ seed ของคุณที่ไม่ซ้ำใดๆ และเป็นความลับเพียงของคุณ และนี่คือเพียงวิธีเดียวที่จะกู้กระเป๋าของคุณในกรณีที่สูญหายหรือมีปัญหา มันเป็นความรับผิดชอบของคุณเพื่อเขียนมันลงบนกระดาษและจัดเก็บไว้ในที่ปลอดภัยนอกแอป Cake Wallet", "pre_seed_description": "ในหน้าถัดไปคุณจะเห็นชุดคำ นี่คือเมล็ดพันธุ์ที่ไม่เหมือนใครและเป็นส่วนตัวของคุณและเป็นวิธีเดียวที่จะกู้คืนกระเป๋าเงินของคุณในกรณีที่สูญเสียหรือทำงานผิดปกติ มันเป็นความรับผิดชอบของคุณที่จะเขียนลงและเก็บไว้ในที่ปลอดภัยนอกแอพเค้กกระเป๋าเงิน",
"pre_seed_title": "สำคัญ", "pre_seed_title": "สำคัญ",
"prepaid_cards": "บัตรเติมเงิน", "prepaid_cards": "บัตรเติมเงิน",
"prevent_screenshots": "ป้องกันภาพหน้าจอและการบันทึกหน้าจอ", "prevent_screenshots": "ป้องกันภาพหน้าจอและการบันทึกหน้าจอ",
@ -1033,4 +1034,4 @@
"you_will_receive_estimated_amount": "คุณจะได้รับ(โดยประมาณ )", "you_will_receive_estimated_amount": "คุณจะได้รับ(โดยประมาณ )",
"you_will_send": "แปลงจาก", "you_will_send": "แปลงจาก",
"yy": "ปี" "yy": "ปี"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "Kinumpirma ko ang address ng kontrata ng token at impormasyon gamit ang isang kagalang-galang na mapagkukunan. Ang pagdaragdag ng nakakahamak o hindi tamang impormasyon ay maaaring magresulta sa pagkawala ng mga pondo.", "add_token_disclaimer_check": "Kinumpirma ko ang address ng kontrata ng token at impormasyon gamit ang isang kagalang-galang na mapagkukunan. Ang pagdaragdag ng nakakahamak o hindi tamang impormasyon ay maaaring magresulta sa pagkawala ng mga pondo.",
"add_token_warning": "Huwag i-edit o magdagdag ng mga token tulad ng itinuro ng mga scammers.\nLaging kumpirmahin ang mga token address na may mga kagalang-galang na mapagkukunan!", "add_token_warning": "Huwag i-edit o magdagdag ng mga token tulad ng itinuro ng mga scammers.\nLaging kumpirmahin ang mga token address na may mga kagalang-galang na mapagkukunan!",
"add_value": "Magdagdag ng halaga", "add_value": "Magdagdag ng halaga",
"added_message_for_ata_error": "Mabuting tiyakin na mayroon kang sapat na balanse ng sol upang makumpleto ang iyong transaksyon.",
"address": "Address", "address": "Address",
"address_book": "Address Book", "address_book": "Address Book",
"address_book_menu": "Address book", "address_book_menu": "Address book",
@ -543,7 +544,7 @@
"potential_scam": "Potensyal na scam", "potential_scam": "Potensyal na scam",
"powered_by": "Pinapagana ng ${title}", "powered_by": "Pinapagana ng ${title}",
"pre_seed_button_text": "Naiintindihan ko. Ipakita sa akin ang aking binhi", "pre_seed_button_text": "Naiintindihan ko. Ipakita sa akin ang aking binhi",
"pre_seed_description": "Sa susunod na pahina makikita mo ang isang serye ng mga ${words} na mga salita. Ito ang iyong natatangi at pribadong binhi at ito ang tanging paraan upang mabawi ang iyong pitaka kung sakaling mawala o madepektong paggawa. Responsibilidad mong isulat ito at itago ito sa isang ligtas na lugar sa labas ng cake wallet app.", "pre_seed_description": "Sa susunod na pahina makikita mo ang isang serye ng mga salita. Ito ang iyong natatangi at pribadong binhi at ito ang tanging paraan upang mabawi ang iyong pitaka kung sakaling mawala o madepektong paggawa. Responsibilidad mong isulat ito at itago ito sa isang ligtas na lugar sa labas ng cake wallet app.",
"pre_seed_title": "Mahalaga", "pre_seed_title": "Mahalaga",
"prepaid_cards": "Mga Prepaid Card", "prepaid_cards": "Mga Prepaid Card",
"prevent_screenshots": "Maiwasan ang mga screenshot at pag -record ng screen", "prevent_screenshots": "Maiwasan ang mga screenshot at pag -record ng screen",
@ -1033,4 +1034,4 @@
"you_will_receive_estimated_amount": "Makakatanggap ka ng(tinantyang)", "you_will_receive_estimated_amount": "Makakatanggap ka ng(tinantyang)",
"you_will_send": "I-convert mula sa", "you_will_send": "I-convert mula sa",
"yy": "YY" "yy": "YY"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "Belirteç sözleşmesi adresini ve bilgilerini saygın bir kaynak kullanarak onayladım. Kötü amaçlı veya yanlış bilgilerin eklenmesi para kaybına neden olabilir.", "add_token_disclaimer_check": "Belirteç sözleşmesi adresini ve bilgilerini saygın bir kaynak kullanarak onayladım. Kötü amaçlı veya yanlış bilgilerin eklenmesi para kaybına neden olabilir.",
"add_token_warning": "Dolandırıcıların talimatına göre jetonları düzenlemeyin veya eklemeyin.\nBelirteç adreslerini her zaman saygın kaynaklarla onaylayın!", "add_token_warning": "Dolandırıcıların talimatına göre jetonları düzenlemeyin veya eklemeyin.\nBelirteç adreslerini her zaman saygın kaynaklarla onaylayın!",
"add_value": "Değer ekle", "add_value": "Değer ekle",
"added_message_for_ata_error": "Lütfen işleminizi tamamlamak için yeterli SOL bakiyesine sahip olduğunuzdan emin olun.",
"address": "Adres", "address": "Adres",
"address_book": "Adres Defteri", "address_book": "Adres Defteri",
"address_book_menu": "Adres defteri", "address_book_menu": "Adres defteri",
@ -543,7 +544,7 @@
"potential_scam": "Potansiyel aldatmaca", "potential_scam": "Potansiyel aldatmaca",
"powered_by": "${title} tarafından desteklenmektedir", "powered_by": "${title} tarafından desteklenmektedir",
"pre_seed_button_text": "Anladım. Bana tohumumu göster.", "pre_seed_button_text": "Anladım. Bana tohumumu göster.",
"pre_seed_description": "Bir sonraki sayfada ${words} kelime göreceksin. Bu senin benzersiz ve özel tohumundur, kaybetmen veya silinmesi durumunda cüzdanını kurtarmanın TEK YOLUDUR. Bunu yazmak ve Cake Wallet uygulaması dışında güvenli bir yerde saklamak tamamen SENİN sorumluluğunda.", "pre_seed_description": "Bir sonraki sayfada bir dizi kelime göreceksiniz. Bu sizin eşsiz ve özel tohumunuzdur ve kayıp veya arıza durumunda cüzdanınızı kurtarmanın tek yolu budur. Yazmak ve kek cüzdan uygulamasının dışında güvenli bir yerde saklamak sizin sorumluluğunuzdadır.",
"pre_seed_title": "UYARI", "pre_seed_title": "UYARI",
"prepaid_cards": "Ön ödemeli kartlar", "prepaid_cards": "Ön ödemeli kartlar",
"prevent_screenshots": "Ekran görüntülerini ve ekran kaydını önleyin", "prevent_screenshots": "Ekran görüntülerini ve ekran kaydını önleyin",
@ -1033,4 +1034,4 @@
"you_will_receive_estimated_amount": "(Tahmini ) alacaksınız", "you_will_receive_estimated_amount": "(Tahmini ) alacaksınız",
"you_will_send": "Biçiminden dönüştür:", "you_will_send": "Biçiminden dönüştür:",
"yy": "YY" "yy": "YY"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "Я підтвердив адресу та інформацію щодо договору маркера, використовуючи авторитетне джерело. Додавання зловмисної або невірної інформації може призвести до втрати коштів.", "add_token_disclaimer_check": "Я підтвердив адресу та інформацію щодо договору маркера, використовуючи авторитетне джерело. Додавання зловмисної або невірної інформації може призвести до втрати коштів.",
"add_token_warning": "Не редагуйте та не додавайте токени за вказівками шахраїв.\nЗавжди підтверджуйте адреси токенів у авторитетних джерелах!", "add_token_warning": "Не редагуйте та не додавайте токени за вказівками шахраїв.\nЗавжди підтверджуйте адреси токенів у авторитетних джерелах!",
"add_value": "Додати значення", "add_value": "Додати значення",
"added_message_for_ata_error": "Будь ласка, переконайтеся, що у вас є достатньо балансу SOL, щоб завершити свою транзакцію.",
"address": "Адреса", "address": "Адреса",
"address_book": "Адресна книга", "address_book": "Адресна книга",
"address_book_menu": "Адресна книга", "address_book_menu": "Адресна книга",
@ -543,7 +544,7 @@
"potential_scam": "Потенційна афера", "potential_scam": "Потенційна афера",
"powered_by": "Використовуючи ${title}", "powered_by": "Використовуючи ${title}",
"pre_seed_button_text": "Зрозуміло. Покажіть мнемонічну фразу", "pre_seed_button_text": "Зрозуміло. Покажіть мнемонічну фразу",
"pre_seed_description": "На наступній сторінці ви побачите серію з ${words} слів. Це ваша унікальна та приватна мнемонічна фраза, і це ЄДИНИЙ спосіб відновити ваш гаманець на випадок втрати або несправності. ВАМ необхідно записати її та зберігати в безпечному місці поза програмою Cake Wallet.", "pre_seed_description": "На наступній сторінці ви побачите ряд слів. Це ваше унікальне та приватне насіння, і це єдиний спосіб відновити гаманець у разі втрати або несправності. Ви несете відповідальність записати його та зберігати в безпечному місці поза додатком для гаманця тортів.",
"pre_seed_title": "ВАЖЛИВО", "pre_seed_title": "ВАЖЛИВО",
"prepaid_cards": "Передплачені картки", "prepaid_cards": "Передплачені картки",
"prevent_screenshots": "Запобігати знімкам екрана та запису екрана", "prevent_screenshots": "Запобігати знімкам екрана та запису екрана",
@ -1034,4 +1035,4 @@
"you_will_receive_estimated_amount": "Ви отримаєте(оцінюється )", "you_will_receive_estimated_amount": "Ви отримаєте(оцінюється )",
"you_will_send": "Конвертувати з", "you_will_send": "Конвертувати з",
"yy": "YY" "yy": "YY"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "میں نے ایک معتبر ذریعہ کا استعمال کرتے ہوئے ٹوکن کنٹریکٹ ایڈریس اور معلومات کی تصدیق کی ہے۔ بدنیتی پر مبنی یا غلط معلومات شامل کرنے کے نتیجے میں فنڈز ضائع ہو سکتے ہیں۔", "add_token_disclaimer_check": "میں نے ایک معتبر ذریعہ کا استعمال کرتے ہوئے ٹوکن کنٹریکٹ ایڈریس اور معلومات کی تصدیق کی ہے۔ بدنیتی پر مبنی یا غلط معلومات شامل کرنے کے نتیجے میں فنڈز ضائع ہو سکتے ہیں۔",
"add_token_warning": "سکیمرز کی ہدایت کے مطابق ٹوکن میں ترمیم یا اضافہ نہ کریں۔\nہمیشہ معتبر ذرائع سے ٹوکن پتوں کی تصدیق کریں!", "add_token_warning": "سکیمرز کی ہدایت کے مطابق ٹوکن میں ترمیم یا اضافہ نہ کریں۔\nہمیشہ معتبر ذرائع سے ٹوکن پتوں کی تصدیق کریں!",
"add_value": "قدر شامل کریں۔", "add_value": "قدر شامل کریں۔",
"added_message_for_ata_error": "برائے مہربانی اس بات کو یقینی بنائیں کہ آپ کے لین دین کو مکمل کرنے کے ل enough آپ کے پاس کافی SOL توازن موجود ہے۔",
"address": "ﮧﺘﭘ", "address": "ﮧﺘﭘ",
"address_book": "ایڈریس بک", "address_book": "ایڈریس بک",
"address_book_menu": "ایڈریس بک", "address_book_menu": "ایڈریس بک",
@ -545,7 +546,7 @@
"potential_scam": "ممکنہ گھوٹالہ", "potential_scam": "ممکنہ گھوٹالہ",
"powered_by": "${title} کے ذریعے تقویت یافتہ", "powered_by": "${title} کے ذریعے تقویت یافتہ",
"pre_seed_button_text": "میں سمجھتا ہوں۔ مجھے میرا بیج دکھاؤ", "pre_seed_button_text": "میں سمجھتا ہوں۔ مجھے میرا بیج دکھاؤ",
"pre_seed_description": "اگلے صفحے پر آپ کو ${words} الفاظ کا ایک سلسلہ نظر آئے گا۔ یہ آپ کا انوکھا اور نجی بیج ہے اور یہ آپ کے بٹوے کو ضائع یا خرابی کی صورت میں بازیافت کرنے کا واحد طریقہ ہے۔ اسے لکھنا اور اسے کیک والیٹ ایپ سے باہر کسی محفوظ جگہ پر اسٹور کرنا آپ کی ذمہ داری ہے۔", "pre_seed_description": "اگلے صفحے پر آپ کو الفاظ کا ایک سلسلہ نظر آئے گا۔ یہ آپ کا انوکھا اور نجی بیج ہے اور نقصان یا خرابی کی صورت میں اپنے بٹوے کی بازیابی کا واحد راستہ ہے۔ آپ کی ذمہ داری ہے کہ وہ اسے لکھیں اور اسے کیک پرس ایپ کے باہر کسی محفوظ جگہ پر محفوظ کریں۔",
"pre_seed_title": "اہم", "pre_seed_title": "اہم",
"prepaid_cards": "پری پیڈ کارڈز", "prepaid_cards": "پری پیڈ کارڈز",
"prevent_screenshots": "اسکرین شاٹس اور اسکرین ریکارڈنگ کو روکیں۔", "prevent_screenshots": "اسکرین شاٹس اور اسکرین ریکارڈنگ کو روکیں۔",
@ -1035,4 +1036,4 @@
"you_will_receive_estimated_amount": "آپ(تخمینہ ) وصول کریں گے", "you_will_receive_estimated_amount": "آپ(تخمینہ ) وصول کریں گے",
"you_will_send": "سے تبدیل کریں۔", "you_will_send": "سے تبدیل کریں۔",
"yy": "YY" "yy": "YY"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "Tôi đã xác nhận địa chỉ hợp đồng token và thông tin bằng nguồn đáng tin cậy. Thêm thông tin sai hoặc độc hại có thể dẫn đến mất tiền.", "add_token_disclaimer_check": "Tôi đã xác nhận địa chỉ hợp đồng token và thông tin bằng nguồn đáng tin cậy. Thêm thông tin sai hoặc độc hại có thể dẫn đến mất tiền.",
"add_token_warning": "Không chỉnh sửa hoặc thêm token theo yêu cầu của kẻ lừa đảo.\nLuôn xác nhận địa chỉ token từ các nguồn đáng tin cậy!", "add_token_warning": "Không chỉnh sửa hoặc thêm token theo yêu cầu của kẻ lừa đảo.\nLuôn xác nhận địa chỉ token từ các nguồn đáng tin cậy!",
"add_value": "Thêm giá trị", "add_value": "Thêm giá trị",
"added_message_for_ata_error": "Vui lòng đảm bảo bạn có đủ số dư SOL để hoàn thành giao dịch của mình.",
"address": "Địa chỉ", "address": "Địa chỉ",
"address_book": "Sổ địa chỉ", "address_book": "Sổ địa chỉ",
"address_book_menu": "Sổ địa chỉ", "address_book_menu": "Sổ địa chỉ",
@ -541,7 +542,7 @@
"potential_scam": "Lừa đảo tiềm năng", "potential_scam": "Lừa đảo tiềm năng",
"powered_by": "Được cung cấp bởi ${title}", "powered_by": "Được cung cấp bởi ${title}",
"pre_seed_button_text": "Tôi hiểu. Hiển thị hạt giống của tôi", "pre_seed_button_text": "Tôi hiểu. Hiển thị hạt giống của tôi",
"pre_seed_description": "Trên trang tiếp theo, bạn sẽ thấy một chuỗi ${words} từ. Đây là hạt giống riêng tư và duy nhất của bạn và là CÁCH DUY NHẤT để khôi phục ví của bạn trong trường hợp mất hoặc hỏng hóc. Đây là TRÁCH NHIỆM của bạn để ghi lại và lưu trữ nó ở một nơi an toàn ngoài ứng dụng Cake Wallet.", "pre_seed_description": "Trên trang tiếp theo, bạn sẽ thấy một loạt các từ. Đây là hạt giống độc đáo và riêng tư của bạn và đó là cách duy nhất để phục hồi ví của bạn trong trường hợp mất hoặc trục trặc. Bạn có trách nhiệm viết nó ra và lưu trữ nó ở một nơi an toàn bên ngoài ứng dụng ví Cake.",
"pre_seed_title": "QUAN TRỌNG", "pre_seed_title": "QUAN TRỌNG",
"prepaid_cards": "Thẻ trả trước", "prepaid_cards": "Thẻ trả trước",
"prevent_screenshots": "Ngăn chặn ảnh chụp màn hình và ghi hình màn hình", "prevent_screenshots": "Ngăn chặn ảnh chụp màn hình và ghi hình màn hình",
@ -1030,4 +1031,4 @@
"you_will_receive_estimated_amount": "Bạn sẽ nhận được(ước tính )", "you_will_receive_estimated_amount": "Bạn sẽ nhận được(ước tính )",
"you_will_send": "Chuyển đổi từ", "you_will_send": "Chuyển đổi từ",
"yy": "YY" "yy": "YY"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "Mo ti jẹrisi adirẹsi adehun ami ati alaye nipa lilo orisun olokiki kan. Fifi irira tabi alaye ti ko tọ le ja si isonu ti owo.", "add_token_disclaimer_check": "Mo ti jẹrisi adirẹsi adehun ami ati alaye nipa lilo orisun olokiki kan. Fifi irira tabi alaye ti ko tọ le ja si isonu ti owo.",
"add_token_warning": "Ma ṣe ṣatunkọ tabi ṣafikun awọn ami bi a ti fun ni aṣẹ nipasẹ awọn scammers.\nNigbagbogbo jẹrisi awọn adirẹsi ami pẹlu awọn orisun olokiki!", "add_token_warning": "Ma ṣe ṣatunkọ tabi ṣafikun awọn ami bi a ti fun ni aṣẹ nipasẹ awọn scammers.\nNigbagbogbo jẹrisi awọn adirẹsi ami pẹlu awọn orisun olokiki!",
"add_value": "Fikún owó", "add_value": "Fikún owó",
"added_message_for_ata_error": "Daradara rii daju pe o ni iwọntunwọnsi Sol Sol lati pari iṣowo rẹ.",
"address": "Adirẹsi", "address": "Adirẹsi",
"address_book": "Ìwé Àdírẹ́sì", "address_book": "Ìwé Àdírẹ́sì",
"address_book_menu": "Ìwé Àdírẹ́sì", "address_book_menu": "Ìwé Àdírẹ́sì",
@ -544,7 +545,7 @@
"potential_scam": "Egan ti o ni agbara", "potential_scam": "Egan ti o ni agbara",
"powered_by": "Láti ọwọ́ ${title}", "powered_by": "Láti ọwọ́ ${title}",
"pre_seed_button_text": "Mo ti gbọ́. O fi hóró mi hàn mi", "pre_seed_button_text": "Mo ti gbọ́. O fi hóró mi hàn mi",
"pre_seed_description": "Ẹ máa wo àwọn ọ̀rọ̀ ${words} lórí ojú tó ń bọ̀. Èyí ni hóró aládàáni yín tó kì í jọra. Ẹ lè fi í nìkan dá àpamọ́wọ́ yín padà sípò tí àṣìṣe tàbí ìbàjẹ́ bá ṣẹlẹ̀. Hóró yín ni ẹ gbọ́dọ̀ kọ sílẹ̀ àti pamọ́ síbí tó kò léwu níta Cake Wallet.", "pre_seed_description": "Ni oju-iwe ti o tẹle iwọ yoo rii lẹsẹsẹ awọn ọrọ. Eyi jẹ irugbin alailẹgbẹ ati ti ikọkọ ati pe o jẹ ọna nikan lati bọsi apamọwọ rẹ ni ọran ti pipadanu tabi aisise. O jẹ ojuṣe rẹ lati kọ ọ silẹ ki o tọju rẹ ni aye ailewu ti ita ti app Fifun akara naa.",
"pre_seed_title": "Ó TI ṢE PÀTÀKÌ", "pre_seed_title": "Ó TI ṢE PÀTÀKÌ",
"prepaid_cards": "Awọn kaadi ti a ti sanwo", "prepaid_cards": "Awọn kaadi ti a ti sanwo",
"prevent_screenshots": "Pese asapọ ti awọn ẹrọ eto aṣa", "prevent_screenshots": "Pese asapọ ti awọn ẹrọ eto aṣa",
@ -1034,4 +1035,4 @@
"you_will_receive_estimated_amount": "Iwọ yoo gba ( excimated )", "you_will_receive_estimated_amount": "Iwọ yoo gba ( excimated )",
"you_will_send": "Ṣe pàṣípààrọ̀ láti", "you_will_send": "Ṣe pàṣípààrọ̀ láti",
"yy": "Ọd" "yy": "Ọd"
} }

View file

@ -21,6 +21,7 @@
"add_token_disclaimer_check": "我已使用信誉良好的来源确认了代币合约地址和信息。 添加恶意或不正确的信息可能会导致资金损失。", "add_token_disclaimer_check": "我已使用信誉良好的来源确认了代币合约地址和信息。 添加恶意或不正确的信息可能会导致资金损失。",
"add_token_warning": "请勿按照诈骗者的指示编辑或添加令牌。\n始终通过信誉良好的来源确认代币地址", "add_token_warning": "请勿按照诈骗者的指示编辑或添加令牌。\n始终通过信誉良好的来源确认代币地址",
"add_value": "增加价值", "add_value": "增加价值",
"added_message_for_ata_error": "请确保您有足够的SOL余额来完成交易。",
"address": "地址", "address": "地址",
"address_book": "地址簿", "address_book": "地址簿",
"address_book_menu": "地址簿", "address_book_menu": "地址簿",
@ -543,7 +544,7 @@
"potential_scam": "潜在骗局", "potential_scam": "潜在骗局",
"powered_by": "Powered by ${title}", "powered_by": "Powered by ${title}",
"pre_seed_button_text": "我明白。 查看种子", "pre_seed_button_text": "我明白。 查看种子",
"pre_seed_description": "在下一页上,您将看到${words}个文字。 这是您独有的种子,是丟失或出现故障时恢复钱包的唯一方法。 您有必须将其写下并储存在Cake Wallet应用程序以外的安全地方。", "pre_seed_description": "在下一页上,您将看到一系列单词。这是您独特的私人种子,这是在损失或故障时恢复钱包的唯一方法。将其写下来并将其存储在蛋糕钱包应用程序外的安全地方是您的责任。",
"pre_seed_title": "重要", "pre_seed_title": "重要",
"prepaid_cards": "预付费卡", "prepaid_cards": "预付费卡",
"prevent_screenshots": "防止截屏和录屏", "prevent_screenshots": "防止截屏和录屏",
@ -1033,4 +1034,4 @@
"you_will_receive_estimated_amount": "您将收到(估计的)", "you_will_receive_estimated_amount": "您将收到(估计的)",
"you_will_send": "转换自", "you_will_send": "转换自",
"yy": "YY" "yy": "YY"
} }

View file

@ -15,14 +15,14 @@ APP_ANDROID_TYPE=$1
MONERO_COM_NAME="Monero.com" MONERO_COM_NAME="Monero.com"
MONERO_COM_VERSION="4.26.0" MONERO_COM_VERSION="4.26.0"
MONERO_COM_BUILD_NUMBER=119 MONERO_COM_BUILD_NUMBER=120
MONERO_COM_BUNDLE_ID="com.monero.app" MONERO_COM_BUNDLE_ID="com.monero.app"
MONERO_COM_PACKAGE="com.monero.app" MONERO_COM_PACKAGE="com.monero.app"
MONERO_COM_SCHEME="monero.com" MONERO_COM_SCHEME="monero.com"
CAKEWALLET_NAME="Cake Wallet" CAKEWALLET_NAME="Cake Wallet"
CAKEWALLET_VERSION="4.26.0" CAKEWALLET_VERSION="4.26.0"
CAKEWALLET_BUILD_NUMBER=257 CAKEWALLET_BUILD_NUMBER=258
CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet" CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet"
CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet" CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet"
CAKEWALLET_SCHEME="cakewallet" CAKEWALLET_SCHEME="cakewallet"

View file

@ -13,12 +13,12 @@ APP_IOS_TYPE=$1
MONERO_COM_NAME="Monero.com" MONERO_COM_NAME="Monero.com"
MONERO_COM_VERSION="4.26.0" MONERO_COM_VERSION="4.26.0"
MONERO_COM_BUILD_NUMBER=116 MONERO_COM_BUILD_NUMBER=117
MONERO_COM_BUNDLE_ID="com.cakewallet.monero" MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
CAKEWALLET_NAME="Cake Wallet" CAKEWALLET_NAME="Cake Wallet"
CAKEWALLET_VERSION="4.26.0" CAKEWALLET_VERSION="4.26.0"
CAKEWALLET_BUILD_NUMBER=311 CAKEWALLET_BUILD_NUMBER=312
CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"

View file

@ -17,12 +17,12 @@ fi
MONERO_COM_NAME="Monero.com" MONERO_COM_NAME="Monero.com"
MONERO_COM_VERSION="4.26.0" MONERO_COM_VERSION="4.26.0"
MONERO_COM_BUILD_NUMBER=48 MONERO_COM_BUILD_NUMBER=49
MONERO_COM_BUNDLE_ID="com.cakewallet.monero" MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
CAKEWALLET_NAME="Cake Wallet" CAKEWALLET_NAME="Cake Wallet"
CAKEWALLET_VERSION="4.26.0" CAKEWALLET_VERSION="4.26.0"
CAKEWALLET_BUILD_NUMBER=110 CAKEWALLET_BUILD_NUMBER=111
CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet" CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"
if ! [[ " ${TYPES[*]} " =~ " ${APP_MACOS_TYPE} " ]]; then if ! [[ " ${TYPES[*]} " =~ " ${APP_MACOS_TYPE} " ]]; then