diff --git a/cw_core/lib/currencies_with_memo.dart b/cw_core/lib/currencies_with_memo.dart new file mode 100644 index 000000000..e12a14b31 --- /dev/null +++ b/cw_core/lib/currencies_with_memo.dart @@ -0,0 +1,13 @@ +import 'package:cw_core/crypto_currency.dart'; + +enum MemoLabelType { destinationTag, memo } + +const Map _currenciesRequiringMemo = { + CryptoCurrency.xrp: MemoLabelType.destinationTag, + CryptoCurrency.xlm: MemoLabelType.memo, + CryptoCurrency.ton: MemoLabelType.memo, + CryptoCurrency.eos: MemoLabelType.memo, + CryptoCurrency.hbar: MemoLabelType.memo, +}; + +MemoLabelType? memoLabelTypeFor(CryptoCurrency currency) => _currenciesRequiringMemo[currency]; diff --git a/cw_core/lib/db/sqlite.dart b/cw_core/lib/db/sqlite.dart index 311344a96..593b1b14f 100644 --- a/cw_core/lib/db/sqlite.dart +++ b/cw_core/lib/db/sqlite.dart @@ -41,7 +41,7 @@ Future initDb({String? pathOverride}) async { } } await db?.close(); - db = await openDatabase(dbFile.path, version: 6, + db = await openDatabase(dbFile.path, version: 7, onUpgrade: (Database db, int oldVersion, int newVersion) async { printV("migrating: $oldVersion, $newVersion"); if (oldVersion <= 1) { @@ -96,6 +96,14 @@ CREATE TABLE IF NOT EXISTS BalanceCardStyleSettings ( if (oldVersion <= 5) { await _createTradeTable(db); } + if (oldVersion <= 6) { + await _addColumnIfNotExists( + db, + table: 'Trade', + column: 'toAddressExtraId', + definition: 'TEXT', + ); + } }, onCreate: (Database db, int version) async { await db.execute( @@ -234,6 +242,7 @@ CREATE TABLE IF NOT EXISTS Trade ( refundAddress TEXT, walletId TEXT, payoutAddress TEXT, + toAddressExtraId TEXT, password TEXT, providerId TEXT, providerName TEXT, diff --git a/lib/exchange/provider/chainflip_exchange_provider.dart b/lib/exchange/provider/chainflip_exchange_provider.dart index 2d8acf8a2..e82fa6d4a 100644 --- a/lib/exchange/provider/chainflip_exchange_provider.dart +++ b/lib/exchange/provider/chainflip_exchange_provider.dart @@ -51,6 +51,9 @@ class ChainflipExchangeProvider extends ExchangeProvider { @override bool get supportsFixedRate => false; + @override + bool get supportsMemoOrDestinationTag => false; + @override ExchangeProviderDescription get description => ExchangeProviderDescription.chainflip; diff --git a/lib/exchange/provider/changenow_exchange_provider.dart b/lib/exchange/provider/changenow_exchange_provider.dart index d32a7d27d..15913b29e 100644 --- a/lib/exchange/provider/changenow_exchange_provider.dart +++ b/lib/exchange/provider/changenow_exchange_provider.dart @@ -189,6 +189,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider { if (!isFixedRateMode) 'fromAmount': request.fromAmount, if (isFixedRateMode) 'toAmount': request.toAmount, 'address': request.toAddress, + if (request.toAddressExtraId.isNotEmpty) 'extraId': request.toAddressExtraId, 'flow': _getFlow(isFixedRateMode), 'type': type, 'refundAddress': request.refundAddress, @@ -248,6 +249,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider { state: TradeState.created, payoutAddress: payoutAddress, isSendAll: isSendAll, + toAddressExtraId: request.toAddressExtraId, ); } diff --git a/lib/exchange/provider/exchange_provider.dart b/lib/exchange/provider/exchange_provider.dart index 55f422a9e..cdcfe3a55 100644 --- a/lib/exchange/provider/exchange_provider.dart +++ b/lib/exchange/provider/exchange_provider.dart @@ -19,6 +19,8 @@ abstract class ExchangeProvider { bool get supportsOnionAddress => false; + bool get supportsMemoOrDestinationTag => true; + @override String toString() => title; diff --git a/lib/exchange/provider/exolix_exchange_provider.dart b/lib/exchange/provider/exolix_exchange_provider.dart index fe0191594..6cd5fea71 100644 --- a/lib/exchange/provider/exolix_exchange_provider.dart +++ b/lib/exchange/provider/exolix_exchange_provider.dart @@ -198,6 +198,8 @@ class ExolixExchangeProvider extends ExchangeProvider { 'networkFrom': _networkFor(request.fromCurrency), 'networkTo': _networkFor(request.toCurrency), 'withdrawalAddress': await _normalizeAddress(request.toAddress), + if (request.toAddressExtraId.isNotEmpty) + 'withdrawalExtraId': request.toAddressExtraId, 'refundAddress': await _normalizeAddress(request.refundAddress), 'rateType': _getRateType(isFixedRateMode), 'apiToken': apiKey, @@ -315,6 +317,7 @@ class ExolixExchangeProvider extends ExchangeProvider { state: TradeState.created, payoutAddress: payoutAddress, isSendAll: isSendAll, + toAddressExtraId: request.toAddressExtraId, ); } diff --git a/lib/exchange/provider/jupiter_exchange_provider.dart b/lib/exchange/provider/jupiter_exchange_provider.dart index 6fc47e97b..9fa954ed1 100644 --- a/lib/exchange/provider/jupiter_exchange_provider.dart +++ b/lib/exchange/provider/jupiter_exchange_provider.dart @@ -41,6 +41,9 @@ class JupiterExchangeProvider extends ExchangeProvider { @override bool get supportsFixedRate => false; // Jupiter doesn't support fixed rate + @override + bool get supportsMemoOrDestinationTag => false; + @override ExchangeProviderDescription get description => ExchangeProviderDescription.jupiter; diff --git a/lib/exchange/provider/letsexchange_exchange_provider.dart b/lib/exchange/provider/letsexchange_exchange_provider.dart index 8e5f4970a..14012f1e5 100644 --- a/lib/exchange/provider/letsexchange_exchange_provider.dart +++ b/lib/exchange/provider/letsexchange_exchange_provider.dart @@ -174,7 +174,7 @@ class LetsExchangeExchangeProvider extends ExchangeProvider { if (!isFixedRateMode) 'deposit_amount': request.fromAmount.toString(), 'withdrawal': withdrawalAddress, if (isFixedRateMode) 'withdrawal_amount': request.toAmount.toString(), - 'withdrawal_extra_id': '', + 'withdrawal_extra_id': request.toAddressExtraId, 'return': returnAddress, 'rate_id': rateId, if (networkFrom != null) 'network_from': networkFrom, @@ -302,6 +302,7 @@ class LetsExchangeExchangeProvider extends ExchangeProvider { expiredAt: expiredAt, extraId: extraId, isSendAll: isSendAll, + toAddressExtraId: request.toAddressExtraId, ); } catch (e, s) { ExchangeProviderLogger.logError( diff --git a/lib/exchange/provider/near_Intents_exchange_provider.dart b/lib/exchange/provider/near_Intents_exchange_provider.dart index 544bd3f30..dbe6ebdcf 100644 --- a/lib/exchange/provider/near_Intents_exchange_provider.dart +++ b/lib/exchange/provider/near_Intents_exchange_provider.dart @@ -88,6 +88,9 @@ class NearIntentsExchangeProvider extends ExchangeProvider { @override bool get supportsFixedRate => true; + @override + bool get supportsMemoOrDestinationTag => false; + @override ExchangeProviderDescription get description => ExchangeProviderDescription.nearIntents; diff --git a/lib/exchange/provider/sideshift_exchange_provider.dart b/lib/exchange/provider/sideshift_exchange_provider.dart index 2a49c0bc5..e1c18ccb7 100644 --- a/lib/exchange/provider/sideshift_exchange_provider.dart +++ b/lib/exchange/provider/sideshift_exchange_provider.dart @@ -216,6 +216,7 @@ class SideShiftExchangeProvider extends ExchangeProvider { final body = { 'affiliateId': affiliateId, 'settleAddress': request.toAddress, + if (request.toAddressExtraId.isNotEmpty) 'settleMemo': request.toAddressExtraId, 'refundAddress': request.refundAddress, }; @@ -336,6 +337,7 @@ class SideShiftExchangeProvider extends ExchangeProvider { createdAt: DateTime.now(), isSendAll: isSendAll, extraId: depositMemo, + toAddressExtraId: request.toAddressExtraId, ); } diff --git a/lib/exchange/provider/simpleswap_exchange_provider.dart b/lib/exchange/provider/simpleswap_exchange_provider.dart index 85ee57cad..de59f3e85 100644 --- a/lib/exchange/provider/simpleswap_exchange_provider.dart +++ b/lib/exchange/provider/simpleswap_exchange_provider.dart @@ -180,7 +180,8 @@ class SimpleSwapExchangeProvider extends ExchangeProvider { "amount": request.fromAmount, "fixed": isFixedRateMode, "user_refund_address": _normalizeAddress(request.refundAddress), - "address_to": _normalizeAddress(request.toAddress) + "address_to": _normalizeAddress(request.toAddress), + if (request.toAddressExtraId.isNotEmpty) "extra_id_to": request.toAddressExtraId, }; final uri = Uri.https(apiAuthority, createExchangePath, params); @@ -289,6 +290,7 @@ class SimpleSwapExchangeProvider extends ExchangeProvider { payoutAddress: payoutAddress, createdAt: DateTime.now(), isSendAll: isSendAll, + toAddressExtraId: request.toAddressExtraId, ); } diff --git a/lib/exchange/provider/stealth_ex_exchange_provider.dart b/lib/exchange/provider/stealth_ex_exchange_provider.dart index 22c4be96c..a6064715a 100644 --- a/lib/exchange/provider/stealth_ex_exchange_provider.dart +++ b/lib/exchange/provider/stealth_ex_exchange_provider.dart @@ -186,6 +186,7 @@ class StealthExExchangeProvider extends ExchangeProvider { 'amount': isFixedRateMode ? double.parse(request.toAmount) : double.parse(request.fromAmount), 'address': _normalizeAddress(request.toAddress), + if (request.toAddressExtraId.isNotEmpty) 'extra_id': request.toAddressExtraId, 'refund_address': _normalizeAddress(request.refundAddress), 'additional_fee_percent': _additionalFeePercent, }; @@ -299,6 +300,7 @@ class StealthExExchangeProvider extends ExchangeProvider { expiredAt: expiredAt, extraId: extraId, isSendAll: isSendAll, + toAddressExtraId: request.toAddressExtraId, ); } catch (e, s) { ExchangeProviderLogger.logError( diff --git a/lib/exchange/provider/swapsxyz_exchange_provider.dart b/lib/exchange/provider/swapsxyz_exchange_provider.dart index 0d9d8728a..6eb1b161f 100644 --- a/lib/exchange/provider/swapsxyz_exchange_provider.dart +++ b/lib/exchange/provider/swapsxyz_exchange_provider.dart @@ -54,6 +54,9 @@ class SwapsXyzExchangeProvider extends ExchangeProvider { @override bool get supportsFixedRate => false; + @override + bool get supportsMemoOrDestinationTag => false; + @override ExchangeProviderDescription get description => ExchangeProviderDescription.swapsXyz; diff --git a/lib/exchange/provider/swaptrade_exchange_provider.dart b/lib/exchange/provider/swaptrade_exchange_provider.dart index 912334462..847f6a422 100644 --- a/lib/exchange/provider/swaptrade_exchange_provider.dart +++ b/lib/exchange/provider/swaptrade_exchange_provider.dart @@ -37,6 +37,9 @@ class SwapTradeExchangeProvider extends ExchangeProvider { @override bool get supportsFixedRate => false; + @override + bool get supportsMemoOrDestinationTag => false; + @override ExchangeProviderDescription get description => ExchangeProviderDescription.swapTrade; diff --git a/lib/exchange/provider/thorchain_exchange.provider.dart b/lib/exchange/provider/thorchain_exchange.provider.dart index aacf04b3f..1d05a4fa9 100644 --- a/lib/exchange/provider/thorchain_exchange.provider.dart +++ b/lib/exchange/provider/thorchain_exchange.provider.dart @@ -36,6 +36,9 @@ class ThorChainExchangeProvider extends ExchangeProvider { @override bool get supportsFixedRate => false; + @override + bool get supportsMemoOrDestinationTag => false; + @override ExchangeProviderDescription get description => ExchangeProviderDescription.thorChain; diff --git a/lib/exchange/provider/trocador_exchange_provider.dart b/lib/exchange/provider/trocador_exchange_provider.dart index 99e8b05a7..a9d977dd6 100644 --- a/lib/exchange/provider/trocador_exchange_provider.dart +++ b/lib/exchange/provider/trocador_exchange_provider.dart @@ -235,6 +235,7 @@ class TrocadorExchangeProvider extends ExchangeProvider { if (!isFixedRateMode) 'amount_from': request.fromAmount, if (isFixedRateMode) 'amount_to': request.toAmount, 'address': request.toAddress, + if (request.toAddressExtraId.isNotEmpty) 'address_memo': request.toAddressExtraId, 'refund': request.refundAddress, 'refund_memo': '0', }; @@ -392,6 +393,7 @@ class TrocadorExchangeProvider extends ExchangeProvider { payoutAddress: payoutAddress, isSendAll: isSendAll, extraId: addressProviderMemo, + toAddressExtraId: request.toAddressExtraId, ); } diff --git a/lib/exchange/provider/xoswap_exchange_provider.dart b/lib/exchange/provider/xoswap_exchange_provider.dart index 35ede0bf8..0c8dff7c8 100644 --- a/lib/exchange/provider/xoswap_exchange_provider.dart +++ b/lib/exchange/provider/xoswap_exchange_provider.dart @@ -321,6 +321,7 @@ class XOSwapExchangeProvider extends ExchangeProvider { 'fromAddress': request.refundAddress, 'toAmount': request.toAmount, 'toAddress': request.toAddress, + if (request.toAddressExtraId.isNotEmpty) 'toAddressTag': request.toAddressExtraId, 'pairId': pairId, }; @@ -424,6 +425,7 @@ class XOSwapExchangeProvider extends ExchangeProvider { payoutAddress: payoutAddress, extraId: extraId, isSendAll: isSendAll, + toAddressExtraId: request.toAddressExtraId, ); } catch (e, s) { ExchangeProviderLogger.logError( diff --git a/lib/exchange/trade.dart b/lib/exchange/trade.dart index b6052c2f5..42968a4f3 100644 --- a/lib/exchange/trade.dart +++ b/lib/exchange/trade.dart @@ -27,6 +27,7 @@ class Trade { this.refundAddress, this.walletId, this.payoutAddress, + this.toAddressExtraId, this.password, this.providerId, this.providerName, @@ -86,6 +87,9 @@ class Trade { String? refundAddress; String? walletId; String? payoutAddress; + + // holds the receive address memo or destination tag that was passed for this trade + String? toAddressExtraId; String? password; String? providerId; String? providerName; @@ -221,6 +225,7 @@ class Trade { 'refundAddress': refundAddress, 'walletId': walletId, 'payoutAddress': payoutAddress, + 'toAddressExtraId': toAddressExtraId, 'password': password, 'providerId': providerId, 'providerName': providerName, @@ -264,6 +269,7 @@ class Trade { refundAddress: row['refundAddress'] as String?, walletId: row['walletId'] as String?, payoutAddress: row['payoutAddress'] as String?, + toAddressExtraId: row['toAddressExtraId'] as String?, password: row['password'] as String?, providerId: row['providerId'] as String?, providerName: row['providerName'] as String?, diff --git a/lib/exchange/trade_request.dart b/lib/exchange/trade_request.dart index 826bd8733..833e4b126 100644 --- a/lib/exchange/trade_request.dart +++ b/lib/exchange/trade_request.dart @@ -8,6 +8,7 @@ class TradeRequest { required this.refundAddress, required this.fromAmount, this.toAmount = '', + this.toAddressExtraId = '', this.isFixedRate = false}); final CryptoCurrency fromCurrency; @@ -16,5 +17,6 @@ class TradeRequest { final String refundAddress; final String fromAmount; final String toAmount; + final String toAddressExtraId; final bool isFixedRate; } diff --git a/lib/new-ui/pages/swap_page.dart b/lib/new-ui/pages/swap_page.dart index 642929414..30f0d155d 100644 --- a/lib/new-ui/pages/swap_page.dart +++ b/lib/new-ui/pages/swap_page.dart @@ -12,6 +12,7 @@ import 'package:cake_wallet/new-ui/widgets/keyboard_hide_overlay.dart'; import 'package:cake_wallet/new-ui/widgets/modern_button.dart'; import 'package:cake_wallet/new-ui/widgets/receive_page/receive_top_bar.dart'; import 'package:cake_wallet/new-ui/widgets/send_page/fiat_amount_bar.dart'; +import 'package:cake_wallet/new-ui/widgets/send_page/send_memo_input.dart'; import 'package:cake_wallet/new-ui/widgets/send_page/send_syncing_indicator.dart'; import 'package:cake_wallet/new-ui/widgets/swap_page/provider_selector_page.dart'; import 'package:cake_wallet/new-ui/widgets/swap_page/refund_address_modal.dart'; @@ -37,6 +38,7 @@ import 'package:cake_wallet/view_model/exchange/exchange_trade_view_model.dart'; import 'package:cake_wallet/view_model/exchange/exchange_view_model.dart'; import 'package:cake_wallet/view_model/wallet_switcher_view_model.dart'; import 'package:cw_core/crypto_currency.dart'; +import 'package:cw_core/currencies_with_memo.dart'; import 'package:cw_core/currency.dart'; import 'package:cw_core/sync_status.dart'; import 'package:cw_core/utils/print_verbose.dart'; @@ -837,12 +839,43 @@ class SwapAmountBoxState extends State { final amountController = TextEditingController(); final fiatAmountController = TextEditingController(); final amountFocusNode = FocusNode(); + final memoController = TextEditingController(); + ReactionDisposer? _memoReactionDisposer; + VoidCallback? _memoListener; @override void initState() { _selectedCurrency = widget.initialCurrency; super.initState(); + + if (widget.isReceiverCard) { + memoController.text = widget.exchangeViewModel.receiveAddressExtraId; + + _memoListener = () { + if (widget.exchangeViewModel.receiveAddressExtraId != memoController.text) { + widget.exchangeViewModel.receiveAddressExtraId = memoController.text; + } + }; + memoController.addListener(_memoListener!); + + _memoReactionDisposer = + reaction((_) => widget.exchangeViewModel.receiveAddressExtraId, (String value) { + if (memoController.text != value) { + memoController.text = value; + } + }); + } + } + + @override + void dispose() { + if (_memoListener != null) { + memoController.removeListener(_memoListener!); + } + _memoReactionDisposer?.call(); + memoController.dispose(); + super.dispose(); } late Currency _selectedCurrency; @@ -1128,7 +1161,29 @@ class SwapAmountBoxState extends State { ], ); }, - ) + ), + if (widget.isReceiverCard) + Observer(builder: (_) { + final selected = widget.exchangeViewModel.receiveCurrency; + final labelType = memoLabelTypeFor(selected); + if (labelType == null) return const SizedBox.shrink(); + + final isDestinationTag = labelType == MemoLabelType.destinationTag; + final hint = isDestinationTag + ? S.of(context).destination_tag_optional + : S.of(context).memo_optional; + final disclaimer = isDestinationTag + ? S.of(context).destination_tag_swap_disclaimer + : S.of(context).memo_swap_disclaimer; + + return NewSendMemoInput( + memoController: memoController, + maxMemoLength: isDestinationTag ? 20 : 256, + memoLength: memoController.text.length, + hintText: hint, + disclaimerText: disclaimer, + ); + }), ], ), ), diff --git a/lib/new-ui/widgets/send_page/send_memo_input.dart b/lib/new-ui/widgets/send_page/send_memo_input.dart index dd5e21682..ccc990d70 100644 --- a/lib/new-ui/widgets/send_page/send_memo_input.dart +++ b/lib/new-ui/widgets/send_page/send_memo_input.dart @@ -8,11 +8,15 @@ class NewSendMemoInput extends StatelessWidget { {super.key, required this.memoController, required this.maxMemoLength, - required this.memoLength}); + required this.memoLength, + this.hintText, + this.disclaimerText}); final TextEditingController memoController; final int maxMemoLength; final int memoLength; + final String? hintText; + final String? disclaimerText; @override Widget build(BuildContext context) { @@ -30,8 +34,8 @@ class NewSendMemoInput extends StatelessWidget { child: TextField( maxLength: maxMemoLength, controller: memoController, - decoration: - InputDecoration(hintText: S.of(context).memo_optional, counterText: ""), + decoration: InputDecoration( + hintText: hintText ?? S.of(context).memo_optional, counterText: ""), ), ), SizedBox(width: 12), @@ -52,9 +56,12 @@ class NewSendMemoInput extends StatelessWidget { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text(S.of(context).memo_disclaimer, - style: TextStyle( - fontSize: 12, color: Theme.of(context).colorScheme.onSurfaceVariant)), + Expanded( + child: Text(disclaimerText ?? S.of(context).memo_disclaimer, + style: TextStyle( + fontSize: 12, + color: Theme.of(context).colorScheme.onSurfaceVariant)), + ), Text("${memoController.text.length} / ${maxMemoLength}", style: TextStyle(fontSize: 12, color: Theme.of(context).colorScheme.primary)) ], diff --git a/lib/new-ui/widgets/swap_page/swap_confirm_sheet.dart b/lib/new-ui/widgets/swap_page/swap_confirm_sheet.dart index 43db8c20b..9ccfb1453 100644 --- a/lib/new-ui/widgets/swap_page/swap_confirm_sheet.dart +++ b/lib/new-ui/widgets/swap_page/swap_confirm_sheet.dart @@ -14,6 +14,7 @@ import 'package:cake_wallet/src/widgets/new_list_row/new_list_section.dart'; import 'package:cake_wallet/view_model/exchange/exchange_trade_view_model.dart'; import 'package:cake_wallet/view_model/exchange/exchange_view_model.dart'; import 'package:cake_wallet/view_model/send/send_view_model_state.dart'; +import 'package:cw_core/currencies_with_memo.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; @@ -191,7 +192,19 @@ class SwapTransactionDetails extends StatelessWidget { showArrow: false, trailingText: exchangeViewModel.receiveAddressDisplayName ?? middleTruncate( - exchangeTradeViewModel.trade.payoutAddress ?? "", 8, 8)) + exchangeTradeViewModel.trade.payoutAddress ?? "", 8, 8)), + if ((exchangeTradeViewModel.trade.toAddressExtraId ?? '').isNotEmpty) + ListItemRegularRow( + keyValue: "receive memo", + showArrow: false, + label: memoLabelTypeFor(exchangeViewModel.receiveCurrency) == + MemoLabelType.destinationTag + ? S.of(context).destination_tag + : S.of(context).memo, + trailingText: middleTruncate( + exchangeTradeViewModel.trade.toAddressExtraId ?? "", 8, 8), + copyableText: exchangeTradeViewModel.trade.toAddressExtraId, + ), ], "${S.of(context).swap_id} (${S.of(context).tap_to_copy})": [ ListItemRegularRow( diff --git a/lib/view_model/exchange/exchange_view_model.dart b/lib/view_model/exchange/exchange_view_model.dart index 9811a999e..108c78ff3 100644 --- a/lib/view_model/exchange/exchange_view_model.dart +++ b/lib/view_model/exchange/exchange_view_model.dart @@ -57,6 +57,7 @@ import 'package:cake_wallet/view_model/send/fees_view_model.dart'; import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_list_view_model.dart'; import 'package:cw_core/crypto_amount_format.dart'; import 'package:cw_core/crypto_currency.dart'; +import 'package:cw_core/currencies_with_memo.dart'; import 'package:cw_core/erc20_token.dart'; import 'package:cw_core/spl_token.dart'; import 'package:cw_core/sync_status.dart'; @@ -124,12 +125,7 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with _useTorOnly = _settingsStore.exchangeStatus == ExchangeApiMode.torOnly; _setProviders(); const excludeDepositCurrencies = [CryptoCurrency.btt]; - const excludeReceiveCurrencies = [ - CryptoCurrency.xlm, - CryptoCurrency.xrp, - CryptoCurrency.bnb, - CryptoCurrency.btt - ]; + const excludeReceiveCurrencies = [CryptoCurrency.btt]; _initialPairBasedOnWallet(); unspentCoinsListViewModel.initialSetup().then((_) { @@ -391,6 +387,9 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with @observable String receiveAddress; + @observable + String receiveAddressExtraId = ''; + @observable String? receiveAddressDisplayName; @@ -436,13 +435,18 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with @computed Future> get receiveWallets async { - WalletType? type; - type = cryptoCurrencyOrTokenToWalletType(receiveCurrency); - if (type == null) { - type = cryptoCurrencyOrTokenToWalletType(CryptoCurrency.fromString(receiveCurrency.tag ?? "")); - } + try { + WalletType? type; + type = cryptoCurrencyOrTokenToWalletType(receiveCurrency); + if (type == null) { + type = + cryptoCurrencyOrTokenToWalletType(CryptoCurrency.fromString(receiveCurrency.tag ?? "")); + } - return await WalletInfo.selectList("type = ?", [type!.index]); + return await WalletInfo.selectList("type = ?", [type!.index]); + } catch (e) { + return []; + } } Future> addressesForAccountsWallet(WalletInfo wallet) async { @@ -761,6 +765,9 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with currency == receiveCurrency)) { receiveAddress = ""; } + if (currency != receiveCurrency) { + receiveAddressExtraId = ""; + } receiveCurrency = currency; isFixedRateMode = false; @@ -884,6 +891,9 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with (provider.description == ExchangeProviderDescription.swapsXyz || provider.description == ExchangeProviderDescription.nearIntents); + bool _excludeProviderForReceiveExtraId(ExchangeProvider provider) => + memoLabelTypeFor(receiveCurrency) != null && !provider.supportsMemoOrDestinationTag; + Future calculateBestRate() async { if (depositCurrency == receiveCurrency) { bestRate = 0.0; @@ -895,6 +905,7 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with final validProvidersForAmount = _tradeAvailableProviders.where((provider) { if (_excludeProviderForSwapAll(provider)) return false; + if (_excludeProviderForReceiveExtraId(provider)) return false; final limits = _providerLimits[provider]; @@ -972,6 +983,7 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with try { final futures = selectedProviders .where((provider) => providerList.contains(provider)) + .where((provider) => !_excludeProviderForReceiveExtraId(provider)) .map((provider) async { final limits = await provider .fetchLimits( @@ -1050,6 +1062,13 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with } } + if (forcedProvider != null && _excludeProviderForReceiveExtraId(forcedProvider!)) { + tradeState = TradeIsCreatedFailure( + title: S.current.trade_not_created, + error: S.current.none_of_selected_providers_can_exchange); + return; + } + Map providers; if (forcedProvider != null) { providers = {forcedProviderRate: forcedProvider!}; @@ -1138,6 +1157,10 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with if (isFixedRateMode && provider.supportsFixedRate == false) { continue; } + + if (_excludeProviderForReceiveExtraId(provider)) { + continue; + } // Skip Swaps.xyz when sending from external if (isSendFromExternal && @@ -1160,6 +1183,7 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with toAmount: _receiveAmount.replaceAll(',', '.'), refundAddress: depositAddress, toAddress: receiveAddress, + toAddressExtraId: receiveAddressExtraId.trim(), isFixedRate: isFixedRateMode, ); @@ -1260,6 +1284,7 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with depositCurrency == wallet.currency ? wallet.walletAddresses.addressForExchange : ''; receiveAddress = receiveCurrency == wallet.currency ? wallet.walletAddresses.addressForExchange : ''; + receiveAddressExtraId = ''; isDepositAddressEnabled = !(depositCurrency == wallet.currency); isFixedRateMode = false; _onPairChange(); diff --git a/lib/view_model/trade_details_view_model.dart b/lib/view_model/trade_details_view_model.dart index 54f7615e1..c2639fc04 100644 --- a/lib/view_model/trade_details_view_model.dart +++ b/lib/view_model/trade_details_view_model.dart @@ -26,6 +26,7 @@ import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.d import 'package:cake_wallet/store/app_store.dart'; import 'package:cake_wallet/utils/date_formatter.dart'; import 'package:cake_wallet/utils/show_bar.dart'; +import 'package:cw_core/currencies_with_memo.dart'; import 'package:cw_core/utils/print_verbose.dart'; import 'package:flutter/services.dart'; import 'package:mobx/mobx.dart'; @@ -182,6 +183,18 @@ abstract class TradeDetailsViewModelBase with Store { )); } + final destinationMemo = trade.toAddressExtraId; + final destinationCurrency = trade.to; + if (destinationMemo != null && + destinationMemo.isNotEmpty && + destinationCurrency != null) { + final isDestinationTag = + memoLabelTypeFor(destinationCurrency) == MemoLabelType.destinationTag; + items.add(StandartListItem( + title: isDestinationTag ? S.current.destination_tag : S.current.memo, + value: destinationMemo)); + } + items.add(StandartListItem( title: S.current.trade_details_provider, value: trade.provider.toString())); diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb index 8077e97f4..d779be350 100644 --- a/res/values/strings_ar.arb +++ b/res/values/strings_ar.arb @@ -308,6 +308,8 @@ "descending": "تنازلي", "description": "الوصف", "destination_tag": "وسم الوجهة:", + "destination_tag_optional": "علامة الوجهة (اختياري)", + "destination_tag_swap_disclaimer": "مطلوب من قبل المتلقي لإيداع أموالك. العلامة المفقودة أو الخاطئة تعني فقدان الأموال.", "deuro_about_deuro": "حول dEURO", "deuro_collect_interest": "تحصيل", "deuro_reinvest_interest": "إعادة الاستثمار", @@ -616,6 +618,7 @@ "memo": "مذكرة", "memo_disclaimer": "ستكون هذه المذكرة مرئية للمستلم", "memo_optional": "مذكرة (اختيارية)", + "memo_swap_disclaimer": "مطلوب من قبل المتلقي لإيداع أموالك. المذكرة المفقودة أو الخاطئة تعني فقدان الأموال.", "message": "رسالة", "message_verified": "تم التحقق من الرسالة بنجاح", "messages": "الرسائل", @@ -1374,4 +1377,4 @@ "zcash_card_missing_funds": "هل أموالك مفقودة؟", "zcash_card_scan": "مسح", "zcash_card_warning": "لا تُغلق التطبيق حتى يكتمل الإجراء، لأنك إن فعلت ذلك فستحتاج هذه العملية إلى البدء من جديد من البداية." -} +} \ No newline at end of file diff --git a/res/values/strings_bg.arb b/res/values/strings_bg.arb index 9fb31cff8..b10eb9822 100644 --- a/res/values/strings_bg.arb +++ b/res/values/strings_bg.arb @@ -308,6 +308,8 @@ "descending": "Низходящо", "description": "Описание", "destination_tag": "Таг на получателя:", + "destination_tag_optional": "Етикет за дестинация (по избор)", + "destination_tag_swap_disclaimer": "Изисква се от получателя, за да кредитира вашите средства. Липсващ или грешен етикет означава загубени средства.", "deuro_about_deuro": "Относно dEURO", "deuro_collect_interest": "Събери", "deuro_reinvest_interest": "Реинвестирай", @@ -616,6 +618,7 @@ "memo": "Мемо", "memo_disclaimer": "Това поле „memo“ ще бъде видимо за получателя", "memo_optional": "Мемо (по избор)", + "memo_swap_disclaimer": "Изисква се от получателя, за да кредитира вашите средства. Липсваща или грешна бележка означава загуба на средства.", "message": "Съобщение", "message_verified": "Съобщението беше успешно потвърдено", "messages": "Съобщения", @@ -1374,4 +1377,4 @@ "zcash_card_missing_funds": "Липсват средства?", "zcash_card_scan": "Сканирай", "zcash_card_warning": "Не затваряйте приложението, докато процедурата не приключи. Ако го направите, процесът ще трябва да започне отначало." -} +} \ No newline at end of file diff --git a/res/values/strings_cs.arb b/res/values/strings_cs.arb index b8eaafbc9..461977785 100644 --- a/res/values/strings_cs.arb +++ b/res/values/strings_cs.arb @@ -308,6 +308,8 @@ "descending": "Sestupně", "description": "Popis", "destination_tag": "Cílový tag:", + "destination_tag_optional": "Cílová značka (volitelné)", + "destination_tag_swap_disclaimer": "Požadováno příjemcem k připsání vašich prostředků. Chybějící nebo nesprávný štítek znamená ztracené prostředky.", "deuro_about_deuro": "O dEURO", "deuro_collect_interest": "Vybrat", "deuro_reinvest_interest": "Reinvestovat", @@ -616,6 +618,7 @@ "memo": "Memo", "memo_disclaimer": "Tato poznámka bude viditelná příjemci", "memo_optional": "Memo (volitelné)", + "memo_swap_disclaimer": "Požadováno příjemcem k připsání vašich prostředků. Chybějící nebo nesprávný záznam znamená ztracené finanční prostředky.", "message": "Zpráva", "message_verified": "Zpráva byla úspěšně ověřena", "messages": "Zprávy", @@ -1374,4 +1377,4 @@ "zcash_card_missing_funds": "Chybějící prostředky?", "zcash_card_scan": "Skenovat", "zcash_card_warning": "Nezavírejte aplikaci, dokud se postup nedokončí. Pokud tak učiníte, bude nutné tento proces spustit znovu od začátku." -} +} \ No newline at end of file diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index cf20f6db4..c8a562a3c 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -308,6 +308,8 @@ "descending": "Absteigend", "description": "Beschreibung", "destination_tag": "Ziel-Tag:", + "destination_tag_optional": "Ziel-Tag (optional)", + "destination_tag_swap_disclaimer": "Wird vom Empfänger benötigt, um Ihr Geld gutzuschreiben. Fehlendes oder falsches Etikett bedeutet verlorenes Geld.", "deuro_about_deuro": "Über dEURO", "deuro_collect_interest": "Einziehen", "deuro_reinvest_interest": "Reinvestieren", @@ -616,6 +618,7 @@ "memo": "Memo", "memo_disclaimer": "Dieses Memo wird für den Empfänger sichtbar sein", "memo_optional": "Memo (optional)", + "memo_swap_disclaimer": "Wird vom Empfänger benötigt, um Ihr Geld gutzuschreiben. Ein fehlendes oder falsches Memo bedeutet verlorenes Geld.", "message": "Nachricht", "message_verified": "Die Nachricht wurde erfolgreich verifiziert", "messages": "Nachrichten", @@ -1378,4 +1381,4 @@ "zcash_card_missing_funds": "Fehlende Gelder?", "zcash_card_scan": "Scannen", "zcash_card_warning": "Schließen Sie die App nicht, bis der Vorgang abgeschlossen ist. Andernfalls muss der Vorgang von Grund auf neu gestartet werden." -} +} \ No newline at end of file diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index a4a497972..deb88f4c1 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -310,6 +310,8 @@ "descending": "Descending", "description": "Description", "destination_tag": "Destination tag:", + "destination_tag_optional": "Destination tag (optional)", + "destination_tag_swap_disclaimer": "Required by the receiver to credit your funds. Missing or wrong tag means lost funds.", "deuro_about_deuro": "About dEURO", "deuro_collect_interest": "Collect", "deuro_reinvest_interest": "Reinvest", @@ -620,6 +622,7 @@ "memo": "Memo", "memo_disclaimer": "This memo will be visible to the receiver", "memo_optional": "Memo (optional)", + "memo_swap_disclaimer": "Required by the receiver to credit your funds. Missing or wrong memo means lost funds.", "message": "Message", "message_verified": "The message was successfully verified", "messages": "Messages", diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 9c9fe3d81..7c972bd0b 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -308,6 +308,8 @@ "descending": "Descendente", "description": "Descripción", "destination_tag": "Etiqueta de destino:", + "destination_tag_optional": "Etiqueta de destino (opcional)", + "destination_tag_swap_disclaimer": "Requerido por el receptor para acreditar sus fondos. La etiqueta faltante o incorrecta significa fondos perdidos.", "deuro_about_deuro": "Acerca de dEURO", "deuro_collect_interest": "Cobrar", "deuro_reinvest_interest": "Reinvertir", @@ -616,6 +618,7 @@ "memo": "Memo", "memo_disclaimer": "Este memo será visible para el destinatario", "memo_optional": "Memo (opcional)", + "memo_swap_disclaimer": "Requerido por el receptor para acreditar sus fondos. Una nota faltante o incorrecta significa fondos perdidos.", "message": "Mensaje", "message_verified": "El mensaje se verificó correctamente", "messages": "Mensajes", @@ -1376,4 +1379,4 @@ "zcash_card_missing_funds": "¿Faltan fondos?", "zcash_card_scan": "Escanear", "zcash_card_warning": "No cierre la aplicación hasta que se complete el procedimiento; si lo hace, este proceso deberá reiniciarse desde cero." -} +} \ No newline at end of file diff --git a/res/values/strings_fa.arb b/res/values/strings_fa.arb index 167c4fa57..937d906a5 100644 --- a/res/values/strings_fa.arb +++ b/res/values/strings_fa.arb @@ -306,6 +306,8 @@ "descending": "نزولی", "description": "توضیحات", "destination_tag": "برچسب مقصد:", + "destination_tag_optional": "برچسب مقصد (اختیاری)", + "destination_tag_swap_disclaimer": "توسط گیرنده برای اعتبار وجوه شما مورد نیاز است. برچسب گم شده یا اشتباه به معنای از دست رفتن وجوه است.", "deuro_about_deuro": "درباره dEURO", "deuro_collect_interest": "دریافت", "deuro_reinvest_interest": "سرمایه‌گذاری مجدد", @@ -614,6 +616,7 @@ "memo": "یادداشت", "memo_disclaimer": "این یادداشت برای گیرنده قابل مشاهده خواهد بود", "memo_optional": "یادداشت (اختیاری)", + "memo_swap_disclaimer": "توسط گیرنده برای اعتبار وجوه شما مورد نیاز است. یادداشت گم شده یا اشتباه به معنای از دست رفتن وجوه است.", "message": "پیام", "message_verified": "پیام با موفقیت تأیید شد", "messages": "پیام‌ها", @@ -1371,4 +1374,4 @@ "zcash_card_missing_funds": "موجودی گم شده؟", "zcash_card_scan": "اسکن", "zcash_card_warning": "تا زمانی که این فرایند کامل نشده است، برنامه را نبندید؛ در غیر این صورت، این فرایند باید از ابتدا دوباره شروع شود." -} +} \ No newline at end of file diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 7fb51b38d..ecfb6ad42 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -308,6 +308,8 @@ "descending": "Décroissant", "description": "Description", "destination_tag": "Tag de destination :", + "destination_tag_optional": "Balise de destination (facultatif)", + "destination_tag_swap_disclaimer": "Requis par le destinataire pour créditer vos fonds. Une étiquette manquante ou erronée signifie une perte de fonds.", "deuro_about_deuro": "À propos de dEURO", "deuro_collect_interest": "Collecter", "deuro_reinvest_interest": "Réinvestir", @@ -616,6 +618,7 @@ "memo": "Mémo", "memo_disclaimer": "Ce mémo sera visible par le destinataire", "memo_optional": "Mémo (facultatif)", + "memo_swap_disclaimer": "Requis par le destinataire pour créditer vos fonds. Un mémo manquant ou erroné signifie une perte de fonds.", "message": "Message", "message_verified": "Le message a été vérifié avec succès", "messages": "Messages", @@ -1374,4 +1377,4 @@ "zcash_card_missing_funds": "Fonds manquants ?", "zcash_card_scan": "Scanner", "zcash_card_warning": "Ne fermez pas l'application tant que la procédure n'est pas terminée. Si vous le faites, ce processus devra redémarrer depuis le début." -} +} \ No newline at end of file diff --git a/res/values/strings_gn.arb b/res/values/strings_gn.arb index e17fd2748..36418cfaa 100644 --- a/res/values/strings_gn.arb +++ b/res/values/strings_gn.arb @@ -249,6 +249,8 @@ "descending": "Oguejy", "description": "Ñemombe’u", "destination_tag": "Teramoĩha hag̃ua:", + "destination_tag_optional": "Etiqueta destino rehegua (opcional) .", + "destination_tag_swap_disclaimer": "Ojeruréva receptor oacredita haguã nde fondo. Etiqueta ofaltáva térã ojavýva he'ise fondo okañýva.", "dfx_option_description": "Ejogua cripto EUR ha CHF reheve. Oipurukuaa hag̃ua ñemuhára michĩ ha mba’apohaguasu Europape.", "did_you_back_up_seeds": "¿Rejapo raʼe backup opaite nde raʼỹi rehegua?", "didnt_get_code": "¿Nererejapýi kódigo?", @@ -479,6 +481,7 @@ "memo": "Mandu’a", "memo_disclaimer": "Ko memo ojehecháta ohupytývape", "memo_optional": "Memo (opcional)", + "memo_swap_disclaimer": "Ojeruréva receptor oacredita haguã nde fondo. Memo ofaltáva térã ojavýva he'ise fondo okañýva.", "message": "Marandu", "message_verified": "Pe marandu ojehechajey porã", "methods": "Mba’éichapa", @@ -1113,4 +1116,4 @@ "zcash_card_missing_funds": "¿Nde fondo okañy?", "zcash_card_scan": "Escanear", "zcash_card_warning": "Ani remboty pe app pe procedimiento opa hag̃ua, rejapo ramo upéicha ko proceso tekotevẽta oñepyrũ jey cero guive." -} +} \ No newline at end of file diff --git a/res/values/strings_ha.arb b/res/values/strings_ha.arb index c0a4d5150..e966ac2ef 100644 --- a/res/values/strings_ha.arb +++ b/res/values/strings_ha.arb @@ -308,6 +308,8 @@ "descending": "Mai saukowa", "description": "Bayanin", "destination_tag": "Alamar makoma:", + "destination_tag_optional": "Alamar wuri (na zaɓi)", + "destination_tag_swap_disclaimer": "Mai karɓa ya buƙaci ya ba da kuɗin ku. Bacewa ko kuskuren tag yana nufin asarar kuɗi.", "deuro_about_deuro": "Game da dEURO", "deuro_collect_interest": "Karɓa", "deuro_reinvest_interest": "Sake saka", @@ -616,6 +618,7 @@ "memo": "Memo", "memo_disclaimer": "Wannan memo zai kasance a bayyane ga mai karɓa", "memo_optional": "Memo (na zaɓi)", + "memo_swap_disclaimer": "Mai karɓa ya buƙaci ya ba da kuɗin ku. Memo na ɓace ko kuskure yana nufin asarar kuɗi.", "message": "Saƙo", "message_verified": "An tabbatar da saƙon cikin nasara", "messages": "Saƙonni", @@ -1377,4 +1380,4 @@ "zcash_card_missing_funds": "Kuɗi sun ɓace?", "zcash_card_scan": "Duba", "zcash_card_warning": "Kada ku rufe manhajar har sai an kammala aikin; idan kun yi haka, wannan tsari zai buƙaci a sake farawa daga farko." -} +} \ No newline at end of file diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index a1ce0c33b..67fd75d52 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -308,6 +308,8 @@ "descending": "अवरोही", "description": "विवरण", "destination_tag": "गंतव्य टैग:", + "destination_tag_optional": "गंतव्य टैग (वैकल्पिक)", + "destination_tag_swap_disclaimer": "प्राप्तकर्ता द्वारा आपके फंड को क्रेडिट करना आवश्यक है। गुम या गलत टैग का अर्थ है खोया हुआ धन।", "deuro_about_deuro": "dEURO के बारे में", "deuro_collect_interest": "एकत्र करें", "deuro_reinvest_interest": "पुनर्निवेश करें", @@ -616,6 +618,7 @@ "memo": "मेमो", "memo_disclaimer": "यह मेमो प्राप्तकर्ता को दिखाई देगा", "memo_optional": "मेमो (वैकल्पिक)", + "memo_swap_disclaimer": "प्राप्तकर्ता द्वारा आपके फंड को क्रेडिट करना आवश्यक है। मेमो के गुम या गलत होने का अर्थ है धन की हानि।", "message": "संदेश", "message_verified": "संदेश सफलतापूर्वक सत्यापित हो गया", "messages": "संदेश", @@ -733,8 +736,8 @@ "payjoin_unavailable_sheet_title": "Payjoin उपलब्ध क्यों नहीं है?", "payment_id": "भुगतान आईडी: ", "payment_made_easy": "भुगतान करना आसान", - "Payment_was_received": "आपका भुगतान प्राप्त हो गया था।", "payment_was_received": "आपका भुगतान प्राप्त हो गया।", + "Payment_was_received": "आपका भुगतान प्राप्त हो गया था।", "payments": "भुगतान", "pending": " (लंबित)", "percentageOf": "${amount} का", @@ -1376,4 +1379,4 @@ "zcash_card_missing_funds": "फंड गायब हैं?", "zcash_card_scan": "स्कैन", "zcash_card_warning": "प्रक्रिया पूरी होने तक ऐप बंद न करें। यदि आप ऐसा करते हैं, तो यह प्रक्रिया शुरू से फिर से शुरू करनी होगी।" -} +} \ No newline at end of file diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index a8e281b3f..6b4491117 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -308,6 +308,8 @@ "descending": "Silazno", "description": "Opis", "destination_tag": "Odredišna oznaka:", + "destination_tag_optional": "Oznaka odredišta (nije obavezno)", + "destination_tag_swap_disclaimer": "Primatelj zahtijeva da kreditira vaša sredstva. Nedostatak ili pogrešna oznaka znači gubitak sredstava.", "deuro_about_deuro": "O dEURO-u", "deuro_collect_interest": "Preuzmi", "deuro_reinvest_interest": "Reinvestiraj", @@ -616,6 +618,7 @@ "memo": "Memo", "memo_disclaimer": "Ova će bilješka biti vidljiva primatelju", "memo_optional": "Memo (nije obavezno)", + "memo_swap_disclaimer": "Primatelj zahtijeva da kreditira vaša sredstva. Nedostatak ili pogrešan dopis znači gubitak sredstava.", "message": "Poruka", "message_verified": "Poruka je uspješno verificirana", "messages": "Poruke", @@ -1374,4 +1377,4 @@ "zcash_card_missing_funds": "Nedostaju sredstva?", "zcash_card_scan": "Skeniraj", "zcash_card_warning": "Ne zatvarajte aplikaciju dok se postupak ne dovrši; ako to učinite, postupak će se morati ponovno pokrenuti ispočetka." -} +} \ No newline at end of file diff --git a/res/values/strings_hy.arb b/res/values/strings_hy.arb index c003dc3bb..211829818 100644 --- a/res/values/strings_hy.arb +++ b/res/values/strings_hy.arb @@ -308,6 +308,8 @@ "descending": "Նվազման կարգով", "description": "Նկարագրություն", "destination_tag": "Նշանակման թեգը:", + "destination_tag_optional": "Նպատակակետի պիտակ (ըստ ցանկության)", + "destination_tag_swap_disclaimer": "Ստացողի կողմից պահանջվում է ձեր միջոցները վարկավորելու համար: Բացակայող կամ սխալ պիտակ նշանակում է կորցրած միջոցներ:", "deuro_about_deuro": "dEURO-ի մասին", "deuro_collect_interest": "Հավաքել", "deuro_reinvest_interest": "Վերաներդնել", @@ -616,6 +618,7 @@ "memo": "Մեմո", "memo_disclaimer": "Այս հուշագիրը տեսանելի կլինի ստացողին", "memo_optional": "Մեմո (ըստ ցանկության)", + "memo_swap_disclaimer": "Ստացողի կողմից պահանջվում է ձեր միջոցները վարկավորելու համար: Հուշագրի բացակայությունը կամ սխալը նշանակում է կորցրած միջոցներ:", "message": "Հաղորդագրություն", "message_verified": "Հաղորդագրությունը հաջողությամբ ստուգվեց", "messages": "Հաղորդագրություններ", @@ -1372,4 +1375,4 @@ "zcash_card_missing_funds": "Միջոցները բացակա՞յում են", "zcash_card_scan": "Սկանավորել", "zcash_card_warning": "Մի փակեք հավելվածը մինչև ընթացակարգի ավարտը, քանի որ հակառակ դեպքում այս գործընթացը պետք է վերագործարկվի զրոյից։" -} +} \ No newline at end of file diff --git a/res/values/strings_id.arb b/res/values/strings_id.arb index b89942b19..7dff8cb87 100644 --- a/res/values/strings_id.arb +++ b/res/values/strings_id.arb @@ -308,6 +308,8 @@ "descending": "Menurun", "description": "Deskripsi", "destination_tag": "Tag tujuan:", + "destination_tag_optional": "Tag tujuan (opsional)", + "destination_tag_swap_disclaimer": "Diperlukan oleh penerima untuk mengkreditkan dana Anda. Tag yang hilang atau salah berarti dana hilang.", "deuro_about_deuro": "Tentang dEURO", "deuro_collect_interest": "Kumpulkan", "deuro_reinvest_interest": "Investasikan kembali", @@ -616,6 +618,7 @@ "memo": "Memo", "memo_disclaimer": "Memo ini akan terlihat oleh penerima", "memo_optional": "Memo (opsional)", + "memo_swap_disclaimer": "Diperlukan oleh penerima untuk mengkreditkan dana Anda. Memo yang hilang atau salah berarti dana hilang.", "message": "Pesan", "message_verified": "Pesan berhasil diverifikasi", "messages": "Pesan", @@ -1377,4 +1380,4 @@ "zcash_card_missing_funds": "Dana hilang?", "zcash_card_scan": "Pindai", "zcash_card_warning": "Jangan tutup aplikasi sampai prosedur selesai. Jika Anda melakukannya, proses ini harus dimulai ulang dari awal." -} +} \ No newline at end of file diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index b90718c40..30cc74790 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -308,6 +308,8 @@ "descending": "Decrescente", "description": "Descrizione", "destination_tag": "Tag di destinazione:", + "destination_tag_optional": "Tag di destinazione (facoltativo)", + "destination_tag_swap_disclaimer": "Richiesto dal destinatario per accreditare i tuoi fondi. Tag mancante o sbagliato significa perdita di fondi.", "deuro_about_deuro": "Informazioni su dEURO", "deuro_collect_interest": "Raccogli", "deuro_reinvest_interest": "Reinvesti", @@ -616,6 +618,7 @@ "memo": "Memo", "memo_disclaimer": "Questo memo sarà visibile al destinatario", "memo_optional": "Memo (facoltativo)", + "memo_swap_disclaimer": "Richiesto dal destinatario per accreditare i tuoi fondi. Una nota mancante o errata significa perdita di fondi.", "message": "Messaggio", "message_verified": "Il messaggio è stato verificato con successo", "messages": "Messaggi", @@ -1376,4 +1379,4 @@ "zcash_card_missing_funds": "Fondi mancanti?", "zcash_card_scan": "Scansiona", "zcash_card_warning": "Non chiudere l'app finché la procedura non è completata, altrimenti sarà necessario riavviare il processo da zero." -} +} \ No newline at end of file diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index 0db5a0617..aefc4fa70 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -308,6 +308,8 @@ "descending": "降順", "description": "説明", "destination_tag": "宛先タグ:", + "destination_tag_optional": "宛先タグ (オプション)", + "destination_tag_swap_disclaimer": "受取人があなたの資金を入金するために必要とします。タグが欠落しているか間違っていると、資金が失われます。", "deuro_about_deuro": "dEUROについて", "deuro_collect_interest": "受け取る", "deuro_reinvest_interest": "再投資", @@ -617,6 +619,7 @@ "memo": "メモ", "memo_disclaimer": "このメモは受取人に表示されます", "memo_optional": "メモ(任意)", + "memo_swap_disclaimer": "受取人があなたの資金を入金するために必要とします。メモの紛失または間違ったメモは資金の損失を意味します。", "message": "メッセージ", "message_verified": "メッセージは正常に検証されました", "messages": "メッセージ", @@ -1374,4 +1377,4 @@ "zcash_card_missing_funds": "資金が見当たりませんか?", "zcash_card_scan": "スキャン", "zcash_card_warning": "手順が完了するまでアプリを閉じないでください。閉じると、このプロセスを最初からやり直す必要があります。" -} +} \ No newline at end of file diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index 2cbfd964e..5f762a9f1 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -308,6 +308,8 @@ "descending": "내림차순", "description": "설명", "destination_tag": "목적지 태그:", + "destination_tag_optional": "대상 태그(선택사항)", + "destination_tag_swap_disclaimer": "귀하의 자금을 입금하기 위해 수신자가 필요합니다. 태그가 없거나 잘못된 경우 자금 손실이 발생합니다.", "deuro_about_deuro": "dEURO 소개", "deuro_collect_interest": "수령", "deuro_reinvest_interest": "재투자", @@ -616,6 +618,7 @@ "memo": "메모", "memo_disclaimer": "이 메모는 수신자에게 표시됩니다.", "memo_optional": "메모(선택)", + "memo_swap_disclaimer": "귀하의 자금을 입금하기 위해 수신자가 필요합니다. 누락되거나 잘못된 메모는 자금 손실을 의미합니다.", "message": "메시지", "message_verified": "메시지가 성공적으로 검증되었습니다", "messages": "메시지", @@ -1374,4 +1377,4 @@ "zcash_card_missing_funds": "자금이 사라졌나요?", "zcash_card_scan": "스캔", "zcash_card_warning": "절차가 완료될 때까지 앱을 닫지 마십시오. 닫으면 이 과정을 처음부터 다시 시작해야 합니다." -} +} \ No newline at end of file diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb index 288f3dc9f..a5a7cf60e 100644 --- a/res/values/strings_my.arb +++ b/res/values/strings_my.arb @@ -308,6 +308,8 @@ "descending": "အနိမ့်မှအမြင့်သို့", "description": "ဖော်ပြချက်", "destination_tag": "ဦးတည်ရာ Tag:", + "destination_tag_optional": "ဦးတည်ရာတဂ် (ချန်လှပ်ထားနိုင်သည်)", + "destination_tag_swap_disclaimer": "သင့်ရန်ပုံငွေများကို အကြွေးတင်ရန်အတွက် လက်ခံသူမှ လိုအပ်ပါသည်။ ပျောက်ဆုံးနေသော သို့မဟုတ် မှားယွင်းသော tag ဆိုသည်မှာ ဆုံးရှုံးသွားသော ရန်ပုံငွေများကို ဆိုလိုသည်။", "deuro_about_deuro": "dEURO အကြောင်း", "deuro_collect_interest": "ရယူ", "deuro_reinvest_interest": "ပြန်လည်ရင်းနှီးမြှုပ်နှံရန်", @@ -616,6 +618,7 @@ "memo": "မှတ်စု", "memo_disclaimer": "ဤ memo ကို လက်ခံသူက မြင်နိုင်ပါမည်။", "memo_optional": "Memo (ရွေးချယ်နိုင်သည်)", + "memo_swap_disclaimer": "သင့်ရန်ပုံငွေများကို အကြွေးတင်ရန်အတွက် လက်ခံသူမှ လိုအပ်ပါသည်။ မှတ်စုတို ပျောက်ဆုံးခြင်း သို့မဟုတ် မှားယွင်းခြင်းဆိုသည်မှာ ဆုံးရှုံးသွားသော ရန်ပုံငွေများကို ဆိုလိုသည်။", "message": "မက်ဆေ့ချ်", "message_verified": "မက်ဆေ့ချ်ကို အောင်မြင်စွာ အတည်ပြုပြီးပါပြီ", "messages": "မက်ဆေ့ချ်များ", @@ -1373,4 +1376,4 @@ "zcash_card_missing_funds": "ငွေကြေး ပျောက်ဆုံးနေပါသလား?", "zcash_card_scan": "စကင်", "zcash_card_warning": "လုပ်ငန်းစဉ် ပြီးဆုံးသည်အထိ အက်ပ်ကို မပိတ်ပါနှင့်။ ပိတ်လိုက်ပါက ဤလုပ်ငန်းစဉ်ကို အစမှ ပြန်လည်စတင်ရမည်ဖြစ်သည်။" -} +} \ No newline at end of file diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index 12d1bb54b..8acc1558b 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -306,6 +306,8 @@ "descending": "Aflopend", "description": "Beschrijving", "destination_tag": "Bestemmingstag:", + "destination_tag_optional": "Bestemmingstag (optioneel)", + "destination_tag_swap_disclaimer": "Vereist door de ontvanger om uw geld te crediteren. Ontbrekende of verkeerde tag betekent verloren geld.", "deuro_about_deuro": "Over dEURO", "deuro_collect_interest": "Verzamelen", "deuro_reinvest_interest": "Herinvesteren", @@ -613,6 +615,7 @@ "memo": "Memo", "memo_disclaimer": "Deze memo is zichtbaar voor de ontvanger", "memo_optional": "Memo (optioneel)", + "memo_swap_disclaimer": "Vereist door de ontvanger om uw geld te crediteren. Ontbrekende of verkeerde memo betekent verloren geld.", "message": "Bericht", "message_verified": "Het bericht is succesvol geverifieerd", "messages": "Berichten", @@ -1371,4 +1374,4 @@ "zcash_card_missing_funds": "Fondsen ontbreken?", "zcash_card_scan": "Scannen", "zcash_card_warning": "Sluit de app niet voordat de procedure is voltooid. Als je dit wel doet, moet dit proces helemaal opnieuw worden gestart." -} +} \ No newline at end of file diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 5389b181d..e4f72081c 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -308,6 +308,8 @@ "descending": "Malejąco", "description": "Opis", "destination_tag": "Tag docelowy:", + "destination_tag_optional": "Znacznik miejsca docelowego (opcjonalnie)", + "destination_tag_swap_disclaimer": "Wymagane przez odbiorcę w celu uznania Twoich środków. Brakujący lub błędny tag oznacza utratę środków.", "deuro_about_deuro": "O dEURO", "deuro_collect_interest": "Odbierz", "deuro_reinvest_interest": "Reinwestuj", @@ -615,6 +617,7 @@ "memo": "Memo", "memo_disclaimer": "To memo będzie widoczne dla odbiorcy", "memo_optional": "Memo (opcjonalne)", + "memo_swap_disclaimer": "Wymagane przez odbiorcę w celu uznania Twoich środków. Brakująca lub błędna notatka oznacza utratę środków.", "message": "Wiadomość", "message_verified": "Wiadomość została pomyślnie zweryfikowana", "messages": "Wiadomości", @@ -1372,4 +1375,4 @@ "zcash_card_missing_funds": "Brakuje środków?", "zcash_card_scan": "Skanuj", "zcash_card_warning": "Nie zamykaj aplikacji do czasu zakończenia procedury. Jeśli to zrobisz, proces będzie musiał rozpocząć się od nowa." -} +} \ No newline at end of file diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 118cd47db..fd938d123 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -308,6 +308,8 @@ "descending": "Descendente", "description": "Descrição", "destination_tag": "Tag de destino:", + "destination_tag_optional": "Tag de destino (opcional)", + "destination_tag_swap_disclaimer": "Exigido pelo destinatário para creditar seus fundos. Etiqueta ausente ou errada significa perda de fundos.", "deuro_about_deuro": "Sobre dEURO", "deuro_collect_interest": "Coletar", "deuro_reinvest_interest": "Reinvestir", @@ -617,6 +619,7 @@ "memo": "Memo", "memo_disclaimer": "Este memo ficará visível para o destinatário", "memo_optional": "Memo (opcional)", + "memo_swap_disclaimer": "Exigido pelo destinatário para creditar seus fundos. Memorando ausente ou errado significa perda de fundos.", "message": "Mensagem", "message_verified": "A mensagem foi verificada com sucesso", "messages": "Mensagens", @@ -1376,4 +1379,4 @@ "zcash_card_missing_funds": "Fundos em falta?", "zcash_card_scan": "Escanear", "zcash_card_warning": "Não feche o aplicativo até que o procedimento seja concluído; se você fizer isso, esse processo precisará ser reiniciado do zero." -} +} \ No newline at end of file diff --git a/res/values/strings_pt_BR.arb b/res/values/strings_pt_BR.arb index 2f5e17e30..1e178453e 100644 --- a/res/values/strings_pt_BR.arb +++ b/res/values/strings_pt_BR.arb @@ -306,6 +306,8 @@ "descending": "Decrescente", "description": "Descrição", "destination_tag": "Tag de destino:", + "destination_tag_optional": "Tag de destino (opcional)", + "destination_tag_swap_disclaimer": "Exigido pelo destinatário para creditar seus fundos. Etiqueta ausente ou errada significa perda de fundos.", "deuro_about_deuro": "Sobre dEURO", "deuro_collect_interest": "Coletar", "deuro_reinvest_interest": "Reinvestir", @@ -612,6 +614,7 @@ "memo": "Memo", "memo_disclaimer": "Este memo será visível para o destinatário", "memo_optional": "Memo (opcional)", + "memo_swap_disclaimer": "Exigido pelo destinatário para creditar seus fundos. Memorando ausente ou errado significa perda de fundos.", "message": "Mensagem", "message_verified": "A mensagem foi verificada com sucesso", "messages": "Mensagens", @@ -1368,4 +1371,4 @@ "zcash_card_missing_funds": "Fundos ausentes?", "zcash_card_scan": "Escanear", "zcash_card_warning": "Não feche o app até que o procedimento seja concluído; caso contrário, este processo precisará ser reiniciado do zero." -} +} \ No newline at end of file diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 828e899bb..cd85cdfb8 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -308,6 +308,8 @@ "descending": "По убыванию", "description": "Описание", "destination_tag": "Тег назначения:", + "destination_tag_optional": "Тег назначения (необязательно)", + "destination_tag_swap_disclaimer": "Требуется получателю для зачисления ваших средств. Отсутствие или неправильный тег означает потерю средств.", "deuro_about_deuro": "О dEURO", "deuro_collect_interest": "Собрать", "deuro_reinvest_interest": "Реинвестировать", @@ -616,6 +618,7 @@ "memo": "Мемо", "memo_disclaimer": "Это примечание будет видно получателю", "memo_optional": "Мемо (необязательно)", + "memo_swap_disclaimer": "Требуется получателю для зачисления ваших средств. Отсутствие или неправильная памятка означает потерю средств.", "message": "Сообщение", "message_verified": "Сообщение было успешно проверено", "messages": "Сообщения", @@ -1374,4 +1377,4 @@ "zcash_card_missing_funds": "Не хватает средств?", "zcash_card_scan": "Сканировать", "zcash_card_warning": "Не закрывайте приложение до завершения процедуры. Если вы это сделаете, процесс придется перезапустить с нуля." -} +} \ No newline at end of file diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index f0abd0399..e2b41f44b 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -308,6 +308,8 @@ "descending": "จากมากไปน้อย", "description": "คำอธิบาย", "destination_tag": "แท็กปลายทาง:", + "destination_tag_optional": "แท็กปลายทาง (ไม่บังคับ)", + "destination_tag_swap_disclaimer": "ผู้รับต้องการให้เครดิตเงินของคุณ แท็กที่หายไปหรือผิดหมายถึงสูญเสียเงิน", "deuro_about_deuro": "เกี่ยวกับ dEURO", "deuro_collect_interest": "รับ", "deuro_reinvest_interest": "ลงทุนซ้ำ", @@ -616,6 +618,7 @@ "memo": "บันทึก", "memo_disclaimer": "บันทึกนี้จะมองเห็นได้โดยผู้รับ", "memo_optional": "บันทึก (ไม่บังคับ)", + "memo_swap_disclaimer": "ผู้รับต้องการให้เครดิตเงินของคุณ บันทึกที่หายไปหรือผิดหมายถึงสูญเสียเงิน", "message": "ข้อความ", "message_verified": "ตรวจสอบข้อความสำเร็จแล้ว", "messages": "ข้อความ", @@ -1373,4 +1376,4 @@ "zcash_card_missing_funds": "ยอดเงินหายไป?", "zcash_card_scan": "สแกน", "zcash_card_warning": "อย่าปิดแอปจนกว่าขั้นตอนจะเสร็จสิ้น หากคุณปิดแอป กระบวนการนี้จะต้องเริ่มใหม่ตั้งแต่ต้น" -} +} \ No newline at end of file diff --git a/res/values/strings_tl.arb b/res/values/strings_tl.arb index 71a87c25a..98d6d91d0 100644 --- a/res/values/strings_tl.arb +++ b/res/values/strings_tl.arb @@ -308,6 +308,8 @@ "descending": "Pababa", "description": "Paglalarawan", "destination_tag": "Destination tag:", + "destination_tag_optional": "Destination tag (opsyonal)", + "destination_tag_swap_disclaimer": "Kinakailangan ng tatanggap na ikredito ang iyong mga pondo. Ang nawawala o maling tag ay nangangahulugan ng mga nawalang pondo.", "deuro_about_deuro": "Tungkol sa dEURO", "deuro_collect_interest": "Kolektahin", "deuro_reinvest_interest": "Muling i-invest", @@ -616,6 +618,7 @@ "memo": "Memo", "memo_disclaimer": "Makikita ng tatanggap ang memo na ito", "memo_optional": "Memo (opsyonal)", + "memo_swap_disclaimer": "Kinakailangan ng tatanggap na ikredito ang iyong mga pondo. Ang nawawala o maling memo ay nangangahulugan ng nawalang pondo.", "message": "Mensahe", "message_verified": "Matagumpay na na-verify ang mensahe", "messages": "Mga Mensahe", @@ -1373,4 +1376,4 @@ "zcash_card_missing_funds": "Nawawalang pondo?", "zcash_card_scan": "I-scan", "zcash_card_warning": "Huwag isara ang app hanggang sa makumpleto ang proseso; kung gagawin mo ito, kakailanganing magsimula muli mula sa simula." -} +} \ No newline at end of file diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb index 346b35d0d..1f2a1219d 100644 --- a/res/values/strings_tr.arb +++ b/res/values/strings_tr.arb @@ -308,6 +308,8 @@ "descending": "Azalan", "description": "Açıklama", "destination_tag": "Hedef etiketi:", + "destination_tag_optional": "Hedef etiketi (isteğe bağlı)", + "destination_tag_swap_disclaimer": "Alıcının paranızı yatırması için gereklidir. Eksik veya yanlış etiket, para kaybı anlamına gelir.", "deuro_about_deuro": "dEURO hakkında", "deuro_collect_interest": "Topla", "deuro_reinvest_interest": "Yeniden yatır", @@ -616,6 +618,7 @@ "memo": "Not", "memo_disclaimer": "Bu memo alıcı tarafından görülebilecektir", "memo_optional": "Memo (isteğe bağlı)", + "memo_swap_disclaimer": "Alıcının paranızı yatırması için gereklidir. Eksik veya yanlış not, para kaybı anlamına gelir.", "message": "Mesaj", "message_verified": "Mesaj başarıyla doğrulandı", "messages": "Mesajlar", @@ -1373,4 +1376,4 @@ "zcash_card_missing_funds": "Bakiye eksik mi?", "zcash_card_scan": "Tara", "zcash_card_warning": "İşlem tamamlanana kadar uygulamayı kapatmayın; aksi takdirde bu işlemin baştan yeniden başlatılması gerekecektir." -} +} \ No newline at end of file diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 769221508..63ed3b1e7 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -308,6 +308,8 @@ "descending": "За спаданням", "description": "Опис", "destination_tag": "Тег призначення:", + "destination_tag_optional": "Тег призначення (необов’язково)", + "destination_tag_swap_disclaimer": "Потрібний одержувачу для зарахування ваших коштів. Відсутній або неправильний тег означає втрату коштів.", "deuro_about_deuro": "Про dEURO", "deuro_collect_interest": "Зібрати", "deuro_reinvest_interest": "Реінвестувати", @@ -616,6 +618,7 @@ "memo": "Мемо", "memo_disclaimer": "Ця примітка буде видима одержувачу", "memo_optional": "Мемо (необов'язково)", + "memo_swap_disclaimer": "Потрібний одержувачу для зарахування ваших коштів. Відсутня або неправильна нотатка означає втрату коштів.", "message": "Повідомлення", "message_verified": "Повідомлення було успішно перевірено", "messages": "Повідомлення", @@ -1374,4 +1377,4 @@ "zcash_card_missing_funds": "Зникли кошти?", "zcash_card_scan": "Сканувати", "zcash_card_warning": "Не закривайте застосунок, доки процедура не завершиться. Якщо ви це зробите, цей процес потрібно буде перезапустити з нуля." -} +} \ No newline at end of file diff --git a/res/values/strings_ur.arb b/res/values/strings_ur.arb index 9285c8e7e..b43075057 100644 --- a/res/values/strings_ur.arb +++ b/res/values/strings_ur.arb @@ -308,6 +308,8 @@ "descending": "نزولی", "description": "تفصیل", "destination_tag": "ڈیسٹینیشن ٹیگ:", + "destination_tag_optional": "منزل کا ٹیگ (اختیاری)", + "destination_tag_swap_disclaimer": "وصول کنندہ کے ذریعہ آپ کے فنڈز کو کریڈٹ کرنے کی ضرورت ہے۔ گمشدہ یا غلط ٹیگ کا مطلب ہے کھوئے ہوئے فنڈز۔", "deuro_about_deuro": "dEURO کے بارے میں", "deuro_collect_interest": "وصول کریں", "deuro_reinvest_interest": "دوبارہ سرمایہ کاری کریں", @@ -616,6 +618,7 @@ "memo": "میمو", "memo_disclaimer": "یہ میمو وصول کنندہ کو نظر آئے گا۔", "memo_optional": "میمو (اختیاری)", + "memo_swap_disclaimer": "وصول کنندہ کے ذریعہ آپ کے فنڈز کو کریڈٹ کرنے کی ضرورت ہے۔ گمشدہ یا غلط میمو کا مطلب ہے کھوئے ہوئے فنڈز۔", "message": "پیغام", "message_verified": "پیغام کی کامیابی سے تصدیق ہو گئی", "messages": "پیغامات", @@ -1375,4 +1378,4 @@ "zcash_card_missing_funds": "فنڈز غائب ہیں؟", "zcash_card_scan": "اسکین کریں", "zcash_card_warning": "طریقہ کار مکمل ہونے تک ایپ بند نہ کریں۔ اگر آپ ایسا کریں گے تو یہ عمل شروع سے دوبارہ شروع کرنا پڑے گا۔" -} +} \ No newline at end of file diff --git a/res/values/strings_vi.arb b/res/values/strings_vi.arb index 5ce21b68c..f53e3a8a2 100644 --- a/res/values/strings_vi.arb +++ b/res/values/strings_vi.arb @@ -307,6 +307,8 @@ "descending": "Giảm dần", "description": "Mô tả", "destination_tag": "Thẻ đích:", + "destination_tag_optional": "Thẻ đích (tùy chọn)", + "destination_tag_swap_disclaimer": "Người nhận yêu cầu ghi có tiền của bạn. Thẻ bị thiếu hoặc sai có nghĩa là tiền bị mất.", "deuro_about_deuro": "Giới thiệu về dEURO", "deuro_collect_interest": "Thu", "deuro_reinvest_interest": "Tái đầu tư", @@ -615,6 +617,7 @@ "memo": "Ghi chú", "memo_disclaimer": "Ghi chú này sẽ hiển thị cho người nhận", "memo_optional": "Ghi chú (tùy chọn)", + "memo_swap_disclaimer": "Người nhận yêu cầu ghi có tiền của bạn. Bản ghi nhớ bị thiếu hoặc sai có nghĩa là tiền bị mất.", "message": "Tin nhắn", "message_verified": "Tin nhắn đã được xác minh thành công", "messages": "Tin nhắn", @@ -1370,4 +1373,4 @@ "zcash_card_missing_funds": "Thiếu tiền?", "zcash_card_scan": "Quét", "zcash_card_warning": "Không đóng ứng dụng cho đến khi quy trình hoàn tất; nếu bạn làm vậy, quy trình này sẽ phải bắt đầu lại từ đầu." -} +} \ No newline at end of file diff --git a/res/values/strings_yo.arb b/res/values/strings_yo.arb index 29ebbe6c4..2039dd57a 100644 --- a/res/values/strings_yo.arb +++ b/res/values/strings_yo.arb @@ -308,6 +308,8 @@ "descending": "Sísọ̀kalẹ̀", "description": "Apejuwe", "destination_tag": "Ami ìbùdó:", + "destination_tag_optional": "Aami ibi-afẹde (aṣayan)", + "destination_tag_swap_disclaimer": "Ti beere lọwọ olugba lati gbese awọn owo rẹ. Sonu tabi ti ko tọ tag tumo si sọnu owo.", "deuro_about_deuro": "Nipa dEURO", "deuro_collect_interest": "Gba", "deuro_reinvest_interest": "Tun fi èrè padà sí i", @@ -617,6 +619,7 @@ "memo": "Àkọsílẹ̀", "memo_disclaimer": "Akọsilẹ yii yoo han si olugba", "memo_optional": "Akọsilẹ (aṣayan)", + "memo_swap_disclaimer": "Ti beere lọwọ olugba lati gbese awọn owo rẹ. Pipadanu tabi akọsilẹ aṣiṣe tumọ si awọn owo ti o sọnu.", "message": "Ifiranṣẹ", "message_verified": "A ti jẹrisi ifiranṣẹ naa ni aṣeyọri", "messages": "Awọn ifiranṣẹ", @@ -1374,4 +1377,4 @@ "zcash_card_missing_funds": "Ṣe owó rẹ sọnù?", "zcash_card_scan": "Ṣàwárí", "zcash_card_warning": "Maṣe pa ohun elo naa titi ilana naa yoo fi pari; bí o bá ṣe bẹ́ẹ̀, ilana yìí yóò ní láti tún bẹ̀rẹ̀ láti ìbẹ̀rẹ̀." -} +} \ No newline at end of file diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 766d79737..1691da606 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -308,6 +308,8 @@ "descending": "降序", "description": "描述", "destination_tag": "目标标签:", + "destination_tag_optional": "目的地标签(可选)", + "destination_tag_swap_disclaimer": "收款人要求存入您的资金。标签丢失或错误意味着资金损失。", "deuro_about_deuro": "关于 dEURO", "deuro_collect_interest": "领取", "deuro_reinvest_interest": "再投资", @@ -616,6 +618,7 @@ "memo": "备注", "memo_disclaimer": "此备注将对接收方可见", "memo_optional": "备注(可选)", + "memo_swap_disclaimer": "收款人要求存入您的资金。备忘录丢失或错误意味着资金损失。", "message": "消息", "message_verified": "消息已成功验证", "messages": "消息", @@ -1373,4 +1376,4 @@ "zcash_card_missing_funds": "资金不见了?", "zcash_card_scan": "扫描", "zcash_card_warning": "在该过程完成之前请勿关闭应用程序,否则该过程将需要从头重新开始。" -} +} \ No newline at end of file diff --git a/res/values/strings_zh_tw.arb b/res/values/strings_zh_tw.arb index c85a7b648..dd920063c 100644 --- a/res/values/strings_zh_tw.arb +++ b/res/values/strings_zh_tw.arb @@ -259,6 +259,8 @@ "descending": "降序", "description": "描述", "destination_tag": "目的地標籤:", + "destination_tag_optional": "目的地標籤(可選)", + "destination_tag_swap_disclaimer": "收款人要求存入您的資金。標籤丟失或錯誤意味著資金損失。", "deuro_about_deuro": "關於 dEURO", "deuro_collect_interest": "領取", "deuro_reinvest_interest": "再投資", @@ -523,6 +525,7 @@ "max_amount": "最大: ${value}", "max_value": "最大值:${value} ${currency}", "memo": "備註", + "memo_swap_disclaimer": "收款人要求存入您的資金。備忘錄丟失或錯誤意味著資金損失。", "message": "訊息", "message_verified": "訊息已成功驗證", "messages": "訊息", @@ -1177,4 +1180,4 @@ "youCanGoBackToYourDapp": "您現在可以返回您的 dApp", "your": "您的", "yy": "YY" -} +} \ No newline at end of file