feat: Add memo support for swap (#3229)

* feat: Add memo support for swap * fix: Error on swap page select receiver bottomsheet when picking receiveing currency that's not a wallet type * feat: exclude providers that do not support memo when receive currency needs it, also show passed memo in confirmation and trade history sheets * fix: overflow for destination tag on swap confirmation * Update lib/view_model/exchange/exchange_view_model.dart [skip ci] * Update lib/exchange/provider/trocador_exchange_provider.dart [skip ci] --------- Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>

David Adegoke committed May 20, 2026 at 19:09 UTC 1d652c76aacd57fd4807252f5edfa63ae367c7f6
56 files changed +330 -55
cw_core/lib/currencies_with_memo.dart new
+13
@@ -0,0 +1,13 @@
1 +import 'package:cw_core/crypto_currency.dart';
2 +
3 +enum MemoLabelType { destinationTag, memo }
4 +
5 +const Map<CryptoCurrency, MemoLabelType> _currenciesRequiringMemo = {
6 + CryptoCurrency.xrp: MemoLabelType.destinationTag,
7 + CryptoCurrency.xlm: MemoLabelType.memo,
8 + CryptoCurrency.ton: MemoLabelType.memo,
9 + CryptoCurrency.eos: MemoLabelType.memo,
10 + CryptoCurrency.hbar: MemoLabelType.memo,
11 +};
12 +
13 +MemoLabelType? memoLabelTypeFor(CryptoCurrency currency) => _currenciesRequiringMemo[currency];
cw_core/lib/db/sqlite.dart
+10 -1
@@ -41,7 +41,7 @@ Future<void> initDb({String? pathOverride}) async {
41 }
42 }
43 await db?.close();
44 - db = await openDatabase(dbFile.path, version: 6,
44 + db = await openDatabase(dbFile.path, version: 7,
45 onUpgrade: (Database db, int oldVersion, int newVersion) async {
46 printV("migrating: $oldVersion, $newVersion");
47 if (oldVersion <= 1) {
@@ -96,6 +96,14 @@ CREATE TABLE IF NOT EXISTS BalanceCardStyleSettings (
96 if (oldVersion <= 5) {
97 await _createTradeTable(db);
98 }
99 + if (oldVersion <= 6) {
100 + await _addColumnIfNotExists(
101 + db,
102 + table: 'Trade',
103 + column: 'toAddressExtraId',
104 + definition: 'TEXT',
105 + );
106 + }
107 },
108 onCreate: (Database db, int version) async {
109 await db.execute(
@@ -234,6 +242,7 @@ CREATE TABLE IF NOT EXISTS Trade (
242 refundAddress TEXT,
243 walletId TEXT,
244 payoutAddress TEXT,
245 + toAddressExtraId TEXT,
246 password TEXT,
247 providerId TEXT,
248 providerName TEXT,
lib/exchange/provider/chainflip_exchange_provider.dart
+3
@@ -51,6 +51,9 @@ class ChainflipExchangeProvider extends ExchangeProvider {
51 @override
52 bool get supportsFixedRate => false;
53
54 + @override
55 + bool get supportsMemoOrDestinationTag => false;
56 +
57 @override
58 ExchangeProviderDescription get description =>
59 ExchangeProviderDescription.chainflip;
lib/exchange/provider/changenow_exchange_provider.dart
+2
@@ -189,6 +189,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
189 if (!isFixedRateMode) 'fromAmount': request.fromAmount,
190 if (isFixedRateMode) 'toAmount': request.toAmount,
191 'address': request.toAddress,
192 + if (request.toAddressExtraId.isNotEmpty) 'extraId': request.toAddressExtraId,
193 'flow': _getFlow(isFixedRateMode),
194 'type': type,
195 'refundAddress': request.refundAddress,
@@ -248,6 +249,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
249 state: TradeState.created,
250 payoutAddress: payoutAddress,
251 isSendAll: isSendAll,
252 + toAddressExtraId: request.toAddressExtraId,
253 );
254 }
255
lib/exchange/provider/exchange_provider.dart
+2
@@ -19,6 +19,8 @@ abstract class ExchangeProvider {
19
20 bool get supportsOnionAddress => false;
21
22 + bool get supportsMemoOrDestinationTag => true;
23 +
24 @override
25 String toString() => title;
26
lib/exchange/provider/exolix_exchange_provider.dart
+3
@@ -198,6 +198,8 @@ class ExolixExchangeProvider extends ExchangeProvider {
198 'networkFrom': _networkFor(request.fromCurrency),
199 'networkTo': _networkFor(request.toCurrency),
200 'withdrawalAddress': await _normalizeAddress(request.toAddress),
201 + if (request.toAddressExtraId.isNotEmpty)
202 + 'withdrawalExtraId': request.toAddressExtraId,
203 'refundAddress': await _normalizeAddress(request.refundAddress),
204 'rateType': _getRateType(isFixedRateMode),
205 'apiToken': apiKey,
@@ -315,6 +317,7 @@ class ExolixExchangeProvider extends ExchangeProvider {
317 state: TradeState.created,
318 payoutAddress: payoutAddress,
319 isSendAll: isSendAll,
320 + toAddressExtraId: request.toAddressExtraId,
321 );
322 }
323
lib/exchange/provider/jupiter_exchange_provider.dart
+3
@@ -41,6 +41,9 @@ class JupiterExchangeProvider extends ExchangeProvider {
41 @override
42 bool get supportsFixedRate => false; // Jupiter doesn't support fixed rate
43
44 + @override
45 + bool get supportsMemoOrDestinationTag => false;
46 +
47 @override
48 ExchangeProviderDescription get description => ExchangeProviderDescription.jupiter;
49
lib/exchange/provider/letsexchange_exchange_provider.dart
+2 -1
@@ -174,7 +174,7 @@ class LetsExchangeExchangeProvider extends ExchangeProvider {
174 if (!isFixedRateMode) 'deposit_amount': request.fromAmount.toString(),
175 'withdrawal': withdrawalAddress,
176 if (isFixedRateMode) 'withdrawal_amount': request.toAmount.toString(),
177 - 'withdrawal_extra_id': '',
177 + 'withdrawal_extra_id': request.toAddressExtraId,
178 'return': returnAddress,
179 'rate_id': rateId,
180 if (networkFrom != null) 'network_from': networkFrom,
@@ -302,6 +302,7 @@ class LetsExchangeExchangeProvider extends ExchangeProvider {
302 expiredAt: expiredAt,
303 extraId: extraId,
304 isSendAll: isSendAll,
305 + toAddressExtraId: request.toAddressExtraId,
306 );
307 } catch (e, s) {
308 ExchangeProviderLogger.logError(
lib/exchange/provider/near_Intents_exchange_provider.dart
+3
@@ -88,6 +88,9 @@ class NearIntentsExchangeProvider extends ExchangeProvider {
88 @override
89 bool get supportsFixedRate => true;
90
91 + @override
92 + bool get supportsMemoOrDestinationTag => false;
93 +
94 @override
95 ExchangeProviderDescription get description =>
96 ExchangeProviderDescription.nearIntents;
lib/exchange/provider/sideshift_exchange_provider.dart
+2
@@ -216,6 +216,7 @@ class SideShiftExchangeProvider extends ExchangeProvider {
216 final body = {
217 'affiliateId': affiliateId,
218 'settleAddress': request.toAddress,
219 + if (request.toAddressExtraId.isNotEmpty) 'settleMemo': request.toAddressExtraId,
220 'refundAddress': request.refundAddress,
221 };
222
@@ -336,6 +337,7 @@ class SideShiftExchangeProvider extends ExchangeProvider {
337 createdAt: DateTime.now(),
338 isSendAll: isSendAll,
339 extraId: depositMemo,
340 + toAddressExtraId: request.toAddressExtraId,
341 );
342 }
343
lib/exchange/provider/simpleswap_exchange_provider.dart
+3 -1
@@ -180,7 +180,8 @@ class SimpleSwapExchangeProvider extends ExchangeProvider {
180 "amount": request.fromAmount,
181 "fixed": isFixedRateMode,
182 "user_refund_address": _normalizeAddress(request.refundAddress),
183 - "address_to": _normalizeAddress(request.toAddress)
183 + "address_to": _normalizeAddress(request.toAddress),
184 + if (request.toAddressExtraId.isNotEmpty) "extra_id_to": request.toAddressExtraId,
185 };
186 final uri = Uri.https(apiAuthority, createExchangePath, params);
187
@@ -289,6 +290,7 @@ class SimpleSwapExchangeProvider extends ExchangeProvider {
290 payoutAddress: payoutAddress,
291 createdAt: DateTime.now(),
292 isSendAll: isSendAll,
293 + toAddressExtraId: request.toAddressExtraId,
294 );
295 }
296
lib/exchange/provider/stealth_ex_exchange_provider.dart
+2
@@ -186,6 +186,7 @@ class StealthExExchangeProvider extends ExchangeProvider {
186 'amount':
187 isFixedRateMode ? double.parse(request.toAmount) : double.parse(request.fromAmount),
188 'address': _normalizeAddress(request.toAddress),
189 + if (request.toAddressExtraId.isNotEmpty) 'extra_id': request.toAddressExtraId,
190 'refund_address': _normalizeAddress(request.refundAddress),
191 'additional_fee_percent': _additionalFeePercent,
192 };
@@ -299,6 +300,7 @@ class StealthExExchangeProvider extends ExchangeProvider {
300 expiredAt: expiredAt,
301 extraId: extraId,
302 isSendAll: isSendAll,
303 + toAddressExtraId: request.toAddressExtraId,
304 );
305 } catch (e, s) {
306 ExchangeProviderLogger.logError(
lib/exchange/provider/swapsxyz_exchange_provider.dart
+3
@@ -54,6 +54,9 @@ class SwapsXyzExchangeProvider extends ExchangeProvider {
54 @override
55 bool get supportsFixedRate => false;
56
57 + @override
58 + bool get supportsMemoOrDestinationTag => false;
59 +
60 @override
61 ExchangeProviderDescription get description =>
62 ExchangeProviderDescription.swapsXyz;
lib/exchange/provider/swaptrade_exchange_provider.dart
+3
@@ -37,6 +37,9 @@ class SwapTradeExchangeProvider extends ExchangeProvider {
37 @override
38 bool get supportsFixedRate => false;
39
40 + @override
41 + bool get supportsMemoOrDestinationTag => false;
42 +
43 @override
44 ExchangeProviderDescription get description => ExchangeProviderDescription.swapTrade;
45
lib/exchange/provider/thorchain_exchange.provider.dart
+3
@@ -36,6 +36,9 @@ class ThorChainExchangeProvider extends ExchangeProvider {
36 @override
37 bool get supportsFixedRate => false;
38
39 + @override
40 + bool get supportsMemoOrDestinationTag => false;
41 +
42 @override
43 ExchangeProviderDescription get description => ExchangeProviderDescription.thorChain;
44
lib/exchange/provider/trocador_exchange_provider.dart
+2
@@ -235,6 +235,7 @@ class TrocadorExchangeProvider extends ExchangeProvider {
235 if (!isFixedRateMode) 'amount_from': request.fromAmount,
236 if (isFixedRateMode) 'amount_to': request.toAmount,
237 'address': request.toAddress,
238 + if (request.toAddressExtraId.isNotEmpty) 'address_memo': request.toAddressExtraId,
239 'refund': request.refundAddress,
240 'refund_memo': '0',
241 };
@@ -392,6 +393,7 @@ class TrocadorExchangeProvider extends ExchangeProvider {
393 payoutAddress: payoutAddress,
394 isSendAll: isSendAll,
395 extraId: addressProviderMemo,
396 + toAddressExtraId: request.toAddressExtraId,
397 );
398 }
399
lib/exchange/provider/xoswap_exchange_provider.dart
+2
@@ -321,6 +321,7 @@ class XOSwapExchangeProvider extends ExchangeProvider {
321 'fromAddress': request.refundAddress,
322 'toAmount': request.toAmount,
323 'toAddress': request.toAddress,
324 + if (request.toAddressExtraId.isNotEmpty) 'toAddressTag': request.toAddressExtraId,
325 'pairId': pairId,
326 };
327
@@ -424,6 +425,7 @@ class XOSwapExchangeProvider extends ExchangeProvider {
425 payoutAddress: payoutAddress,
426 extraId: extraId,
427 isSendAll: isSendAll,
428 + toAddressExtraId: request.toAddressExtraId,
429 );
430 } catch (e, s) {
431 ExchangeProviderLogger.logError(
lib/exchange/trade.dart
+6
@@ -27,6 +27,7 @@ class Trade {
27 this.refundAddress,
28 this.walletId,
29 this.payoutAddress,
30 + this.toAddressExtraId,
31 this.password,
32 this.providerId,
33 this.providerName,
@@ -86,6 +87,9 @@ class Trade {
87 String? refundAddress;
88 String? walletId;
89 String? payoutAddress;
90 +
91 + // holds the receive address memo or destination tag that was passed for this trade
92 + String? toAddressExtraId;
93 String? password;
94 String? providerId;
95 String? providerName;
@@ -221,6 +225,7 @@ class Trade {
225 'refundAddress': refundAddress,
226 'walletId': walletId,
227 'payoutAddress': payoutAddress,
228 + 'toAddressExtraId': toAddressExtraId,
229 'password': password,
230 'providerId': providerId,
231 'providerName': providerName,
@@ -264,6 +269,7 @@ class Trade {
269 refundAddress: row['refundAddress'] as String?,
270 walletId: row['walletId'] as String?,
271 payoutAddress: row['payoutAddress'] as String?,
272 + toAddressExtraId: row['toAddressExtraId'] as String?,
273 password: row['password'] as String?,
274 providerId: row['providerId'] as String?,
275 providerName: row['providerName'] as String?,
lib/exchange/trade_request.dart
+2
@@ -8,6 +8,7 @@ class TradeRequest {
8 required this.refundAddress,
9 required this.fromAmount,
10 this.toAmount = '',
11 + this.toAddressExtraId = '',
12 this.isFixedRate = false});
13
14 final CryptoCurrency fromCurrency;
@@ -16,5 +17,6 @@ class TradeRequest {
17 final String refundAddress;
18 final String fromAmount;
19 final String toAmount;
20 + final String toAddressExtraId;
21 final bool isFixedRate;
22 }
lib/new-ui/pages/swap_page.dart
+56 -1
@@ -12,6 +12,7 @@ import 'package:cake_wallet/new-ui/widgets/keyboard_hide_overlay.dart';
12 import 'package:cake_wallet/new-ui/widgets/modern_button.dart';
13 import 'package:cake_wallet/new-ui/widgets/receive_page/receive_top_bar.dart';
14 import 'package:cake_wallet/new-ui/widgets/send_page/fiat_amount_bar.dart';
15 +import 'package:cake_wallet/new-ui/widgets/send_page/send_memo_input.dart';
16 import 'package:cake_wallet/new-ui/widgets/send_page/send_syncing_indicator.dart';
17 import 'package:cake_wallet/new-ui/widgets/swap_page/provider_selector_page.dart';
18 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';
38 import 'package:cake_wallet/view_model/exchange/exchange_view_model.dart';
39 import 'package:cake_wallet/view_model/wallet_switcher_view_model.dart';
40 import 'package:cw_core/crypto_currency.dart';
41 +import 'package:cw_core/currencies_with_memo.dart';
42 import 'package:cw_core/currency.dart';
43 import 'package:cw_core/sync_status.dart';
44 import 'package:cw_core/utils/print_verbose.dart';
@@ -837,12 +839,43 @@ class SwapAmountBoxState extends State<SwapAmountBox> {
839 final amountController = TextEditingController();
840 final fiatAmountController = TextEditingController();
841 final amountFocusNode = FocusNode();
842 + final memoController = TextEditingController();
843 + ReactionDisposer? _memoReactionDisposer;
844 + VoidCallback? _memoListener;
845
846 @override
847 void initState() {
848 _selectedCurrency = widget.initialCurrency;
849
850 super.initState();
851 +
852 + if (widget.isReceiverCard) {
853 + memoController.text = widget.exchangeViewModel.receiveAddressExtraId;
854 +
855 + _memoListener = () {
856 + if (widget.exchangeViewModel.receiveAddressExtraId != memoController.text) {
857 + widget.exchangeViewModel.receiveAddressExtraId = memoController.text;
858 + }
859 + };
860 + memoController.addListener(_memoListener!);
861 +
862 + _memoReactionDisposer =
863 + reaction((_) => widget.exchangeViewModel.receiveAddressExtraId, (String value) {
864 + if (memoController.text != value) {
865 + memoController.text = value;
866 + }
867 + });
868 + }
869 + }
870 +
871 + @override
872 + void dispose() {
873 + if (_memoListener != null) {
874 + memoController.removeListener(_memoListener!);
875 + }
876 + _memoReactionDisposer?.call();
877 + memoController.dispose();
878 + super.dispose();
879 }
880
881 late Currency _selectedCurrency;
@@ -1128,7 +1161,29 @@ class SwapAmountBoxState extends State<SwapAmountBox> {
1161 ],
1162 );
1163 },
1131 - )
1164 + ),
1165 + if (widget.isReceiverCard)
1166 + Observer(builder: (_) {
1167 + final selected = widget.exchangeViewModel.receiveCurrency;
1168 + final labelType = memoLabelTypeFor(selected);
1169 + if (labelType == null) return const SizedBox.shrink();
1170 +
1171 + final isDestinationTag = labelType == MemoLabelType.destinationTag;
1172 + final hint = isDestinationTag
1173 + ? S.of(context).destination_tag_optional
1174 + : S.of(context).memo_optional;
1175 + final disclaimer = isDestinationTag
1176 + ? S.of(context).destination_tag_swap_disclaimer
1177 + : S.of(context).memo_swap_disclaimer;
1178 +
1179 + return NewSendMemoInput(
1180 + memoController: memoController,
1181 + maxMemoLength: isDestinationTag ? 20 : 256,
1182 + memoLength: memoController.text.length,
1183 + hintText: hint,
1184 + disclaimerText: disclaimer,
1185 + );
1186 + }),
1187 ],
1188 ),
1189 ),
lib/new-ui/widgets/send_page/send_memo_input.dart
+13 -6
@@ -8,11 +8,15 @@ class NewSendMemoInput extends StatelessWidget {
8 {super.key,
9 required this.memoController,
10 required this.maxMemoLength,
11 - required this.memoLength});
11 + required this.memoLength,
12 + this.hintText,
13 + this.disclaimerText});
14
15 final TextEditingController memoController;
16 final int maxMemoLength;
17 final int memoLength;
18 + final String? hintText;
19 + final String? disclaimerText;
20
21 @override
22 Widget build(BuildContext context) {
@@ -30,8 +34,8 @@ class NewSendMemoInput extends StatelessWidget {
34 child: TextField(
35 maxLength: maxMemoLength,
36 controller: memoController,
33 - decoration:
34 - InputDecoration(hintText: S.of(context).memo_optional, counterText: ""),
37 + decoration: InputDecoration(
38 + hintText: hintText ?? S.of(context).memo_optional, counterText: ""),
39 ),
40 ),
41 SizedBox(width: 12),
@@ -52,9 +56,12 @@ class NewSendMemoInput extends StatelessWidget {
56 child: Row(
57 mainAxisAlignment: MainAxisAlignment.spaceBetween,
58 children: [
55 - Text(S.of(context).memo_disclaimer,
56 - style: TextStyle(
57 - fontSize: 12, color: Theme.of(context).colorScheme.onSurfaceVariant)),
59 + Expanded(
60 + child: Text(disclaimerText ?? S.of(context).memo_disclaimer,
61 + style: TextStyle(
62 + fontSize: 12,
63 + color: Theme.of(context).colorScheme.onSurfaceVariant)),
64 + ),
65 Text("${memoController.text.length} / ${maxMemoLength}",
66 style: TextStyle(fontSize: 12, color: Theme.of(context).colorScheme.primary))
67 ],
lib/new-ui/widgets/swap_page/swap_confirm_sheet.dart
+14 -1
@@ -14,6 +14,7 @@ import 'package:cake_wallet/src/widgets/new_list_row/new_list_section.dart';
14 import 'package:cake_wallet/view_model/exchange/exchange_trade_view_model.dart';
15 import 'package:cake_wallet/view_model/exchange/exchange_view_model.dart';
16 import 'package:cake_wallet/view_model/send/send_view_model_state.dart';
17 +import 'package:cw_core/currencies_with_memo.dart';
18 import 'package:flutter/material.dart';
19 import 'package:flutter/services.dart';
20 import 'package:flutter_mobx/flutter_mobx.dart';
@@ -191,7 +192,19 @@ class SwapTransactionDetails extends StatelessWidget {
192 showArrow: false,
193 trailingText: exchangeViewModel.receiveAddressDisplayName ??
194 middleTruncate(
194 - exchangeTradeViewModel.trade.payoutAddress ?? "", 8, 8))
195 + exchangeTradeViewModel.trade.payoutAddress ?? "", 8, 8)),
196 + if ((exchangeTradeViewModel.trade.toAddressExtraId ?? '').isNotEmpty)
197 + ListItemRegularRow(
198 + keyValue: "receive memo",
199 + showArrow: false,
200 + label: memoLabelTypeFor(exchangeViewModel.receiveCurrency) ==
201 + MemoLabelType.destinationTag
202 + ? S.of(context).destination_tag
203 + : S.of(context).memo,
204 + trailingText: middleTruncate(
205 + exchangeTradeViewModel.trade.toAddressExtraId ?? "", 8, 8),
206 + copyableText: exchangeTradeViewModel.trade.toAddressExtraId,
207 + ),
208 ],
209 "${S.of(context).swap_id} (${S.of(context).tap_to_copy})": [
210 ListItemRegularRow(
lib/view_model/exchange/exchange_view_model.dart
+37 -12
@@ -57,6 +57,7 @@ import 'package:cake_wallet/view_model/send/fees_view_model.dart';
57 import 'package:cake_wallet/view_model/unspent_coins/unspent_coins_list_view_model.dart';
58 import 'package:cw_core/crypto_amount_format.dart';
59 import 'package:cw_core/crypto_currency.dart';
60 +import 'package:cw_core/currencies_with_memo.dart';
61 import 'package:cw_core/erc20_token.dart';
62 import 'package:cw_core/spl_token.dart';
63 import 'package:cw_core/sync_status.dart';
@@ -124,12 +125,7 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
125 _useTorOnly = _settingsStore.exchangeStatus == ExchangeApiMode.torOnly;
126 _setProviders();
127 const excludeDepositCurrencies = [CryptoCurrency.btt];
127 - const excludeReceiveCurrencies = [
128 - CryptoCurrency.xlm,
129 - CryptoCurrency.xrp,
130 - CryptoCurrency.bnb,
131 - CryptoCurrency.btt
132 - ];
128 + const excludeReceiveCurrencies = [CryptoCurrency.btt];
129 _initialPairBasedOnWallet();
130
131 unspentCoinsListViewModel.initialSetup().then((_) {
@@ -391,6 +387,9 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
387 @observable
388 String receiveAddress;
389
390 + @observable
391 + String receiveAddressExtraId = '';
392 +
393 @observable
394 String? receiveAddressDisplayName;
395
@@ -436,13 +435,18 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
435
436 @computed
437 Future<List<WalletInfo>> get receiveWallets async {
439 - WalletType? type;
440 - type = cryptoCurrencyOrTokenToWalletType(receiveCurrency);
441 - if (type == null) {
442 - type = cryptoCurrencyOrTokenToWalletType(CryptoCurrency.fromString(receiveCurrency.tag ?? ""));
443 - }
438 + try {
439 + WalletType? type;
440 + type = cryptoCurrencyOrTokenToWalletType(receiveCurrency);
441 + if (type == null) {
442 + type =
443 + cryptoCurrencyOrTokenToWalletType(CryptoCurrency.fromString(receiveCurrency.tag ?? ""));
444 + }
445
445 - return await WalletInfo.selectList("type = ?", [type!.index]);
446 + return await WalletInfo.selectList("type = ?", [type!.index]);
447 + } catch (e) {
448 + return [];
449 + }
450 }
451
452 Future<List<WalletInfoAddressInfo>> addressesForAccountsWallet(WalletInfo wallet) async {
@@ -761,6 +765,9 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
765 currency == receiveCurrency)) {
766 receiveAddress = "";
767 }
768 + if (currency != receiveCurrency) {
769 + receiveAddressExtraId = "";
770 + }
771
772 receiveCurrency = currency;
773 isFixedRateMode = false;
@@ -884,6 +891,9 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
891 (provider.description == ExchangeProviderDescription.swapsXyz ||
892 provider.description == ExchangeProviderDescription.nearIntents);
893
894 + bool _excludeProviderForReceiveExtraId(ExchangeProvider provider) =>
895 + memoLabelTypeFor(receiveCurrency) != null && !provider.supportsMemoOrDestinationTag;
896 +
897 Future<void> calculateBestRate() async {
898 if (depositCurrency == receiveCurrency) {
899 bestRate = 0.0;
@@ -895,6 +905,7 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
905
906 final validProvidersForAmount = _tradeAvailableProviders.where((provider) {
907 if (_excludeProviderForSwapAll(provider)) return false;
908 + if (_excludeProviderForReceiveExtraId(provider)) return false;
909
910 final limits = _providerLimits[provider];
911
@@ -972,6 +983,7 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
983 try {
984 final futures = selectedProviders
985 .where((provider) => providerList.contains(provider))
986 + .where((provider) => !_excludeProviderForReceiveExtraId(provider))
987 .map((provider) async {
988 final limits = await provider
989 .fetchLimits(
@@ -1050,6 +1062,13 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
1062 }
1063 }
1064
1065 + if (forcedProvider != null && _excludeProviderForReceiveExtraId(forcedProvider!)) {
1066 + tradeState = TradeIsCreatedFailure(
1067 + title: S.current.trade_not_created,
1068 + error: S.current.none_of_selected_providers_can_exchange);
1069 + return;
1070 + }
1071 +
1072 Map<double, ExchangeProvider> providers;
1073 if (forcedProvider != null) {
1074 providers = {forcedProviderRate: forcedProvider!};
@@ -1138,6 +1157,10 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
1157 if (isFixedRateMode && provider.supportsFixedRate == false) {
1158 continue;
1159 }
1160 +
1161 + if (_excludeProviderForReceiveExtraId(provider)) {
1162 + continue;
1163 + }
1164
1165 // Skip Swaps.xyz when sending from external
1166 if (isSendFromExternal &&
@@ -1160,6 +1183,7 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
1183 toAmount: _receiveAmount.replaceAll(',', '.'),
1184 refundAddress: depositAddress,
1185 toAddress: receiveAddress,
1186 + toAddressExtraId: receiveAddressExtraId.trim(),
1187 isFixedRate: isFixedRateMode,
1188 );
1189
@@ -1260,6 +1284,7 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
1284 depositCurrency == wallet.currency ? wallet.walletAddresses.addressForExchange : '';
1285 receiveAddress =
1286 receiveCurrency == wallet.currency ? wallet.walletAddresses.addressForExchange : '';
1287 + receiveAddressExtraId = '';
1288 isDepositAddressEnabled = !(depositCurrency == wallet.currency);
1289 isFixedRateMode = false;
1290 _onPairChange();
lib/view_model/trade_details_view_model.dart
+13
@@ -26,6 +26,7 @@ import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.d
26 import 'package:cake_wallet/store/app_store.dart';
27 import 'package:cake_wallet/utils/date_formatter.dart';
28 import 'package:cake_wallet/utils/show_bar.dart';
29 +import 'package:cw_core/currencies_with_memo.dart';
30 import 'package:cw_core/utils/print_verbose.dart';
31 import 'package:flutter/services.dart';
32 import 'package:mobx/mobx.dart';
@@ -182,6 +183,18 @@ abstract class TradeDetailsViewModelBase with Store {
183 ));
184 }
185
186 + final destinationMemo = trade.toAddressExtraId;
187 + final destinationCurrency = trade.to;
188 + if (destinationMemo != null &&
189 + destinationMemo.isNotEmpty &&
190 + destinationCurrency != null) {
191 + final isDestinationTag =
192 + memoLabelTypeFor(destinationCurrency) == MemoLabelType.destinationTag;
193 + items.add(StandartListItem(
194 + title: isDestinationTag ? S.current.destination_tag : S.current.memo,
195 + value: destinationMemo));
196 + }
197 +
198 items.add(StandartListItem(
199 title: S.current.trade_details_provider, value: trade.provider.toString()));
200
res/values/strings_ar.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "تنازلي",
309 "description": "الوصف",
310 "destination_tag": "وسم الوجهة:",
311 + "destination_tag_optional": "علامة الوجهة (اختياري)",
312 + "destination_tag_swap_disclaimer": "مطلوب من قبل المتلقي لإيداع أموالك. العلامة المفقودة أو الخاطئة تعني فقدان الأموال.",
313 "deuro_about_deuro": "حول dEURO",
314 "deuro_collect_interest": "تحصيل",
315 "deuro_reinvest_interest": "إعادة الاستثمار",
@@ -616,6 +618,7 @@
618 "memo": "مذكرة",
619 "memo_disclaimer": "ستكون هذه المذكرة مرئية للمستلم",
620 "memo_optional": "مذكرة (اختيارية)",
621 + "memo_swap_disclaimer": "مطلوب من قبل المتلقي لإيداع أموالك. المذكرة المفقودة أو الخاطئة تعني فقدان الأموال.",
622 "message": "رسالة",
623 "message_verified": "تم التحقق من الرسالة بنجاح",
624 "messages": "الرسائل",
@@ -1374,4 +1377,4 @@
1377 "zcash_card_missing_funds": "هل أموالك مفقودة؟",
1378 "zcash_card_scan": "مسح",
1379 "zcash_card_warning": "لا تُغلق التطبيق حتى يكتمل الإجراء، لأنك إن فعلت ذلك فستحتاج هذه العملية إلى البدء من جديد من البداية."
1377 -}
1380 +}
\ No newline at end of file
res/values/strings_bg.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "Низходящо",
309 "description": "Описание",
310 "destination_tag": "Таг на получателя:",
311 + "destination_tag_optional": "Етикет за дестинация (по избор)",
312 + "destination_tag_swap_disclaimer": "Изисква се от получателя, за да кредитира вашите средства. Липсващ или грешен етикет означава загубени средства.",
313 "deuro_about_deuro": "Относно dEURO",
314 "deuro_collect_interest": "Събери",
315 "deuro_reinvest_interest": "Реинвестирай",
@@ -616,6 +618,7 @@
618 "memo": "Мемо",
619 "memo_disclaimer": "Това поле „memo“ ще бъде видимо за получателя",
620 "memo_optional": "Мемо (по избор)",
621 + "memo_swap_disclaimer": "Изисква се от получателя, за да кредитира вашите средства. Липсваща или грешна бележка означава загуба на средства.",
622 "message": "Съобщение",
623 "message_verified": "Съобщението беше успешно потвърдено",
624 "messages": "Съобщения",
@@ -1374,4 +1377,4 @@
1377 "zcash_card_missing_funds": "Липсват средства?",
1378 "zcash_card_scan": "Сканирай",
1379 "zcash_card_warning": "Не затваряйте приложението, докато процедурата не приключи. Ако го направите, процесът ще трябва да започне отначало."
1377 -}
1380 +}
\ No newline at end of file
res/values/strings_cs.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "Sestupně",
309 "description": "Popis",
310 "destination_tag": "Cílový tag:",
311 + "destination_tag_optional": "Cílová značka (volitelné)",
312 + "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.",
313 "deuro_about_deuro": "O dEURO",
314 "deuro_collect_interest": "Vybrat",
315 "deuro_reinvest_interest": "Reinvestovat",
@@ -616,6 +618,7 @@
618 "memo": "Memo",
619 "memo_disclaimer": "Tato poznámka bude viditelná příjemci",
620 "memo_optional": "Memo (volitelné)",
621 + "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.",
622 "message": "Zpráva",
623 "message_verified": "Zpráva byla úspěšně ověřena",
624 "messages": "Zprávy",
@@ -1374,4 +1377,4 @@
1377 "zcash_card_missing_funds": "Chybějící prostředky?",
1378 "zcash_card_scan": "Skenovat",
1379 "zcash_card_warning": "Nezavírejte aplikaci, dokud se postup nedokončí. Pokud tak učiníte, bude nutné tento proces spustit znovu od začátku."
1377 -}
1380 +}
\ No newline at end of file
res/values/strings_de.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "Absteigend",
309 "description": "Beschreibung",
310 "destination_tag": "Ziel-Tag:",
311 + "destination_tag_optional": "Ziel-Tag (optional)",
312 + "destination_tag_swap_disclaimer": "Wird vom Empfänger benötigt, um Ihr Geld gutzuschreiben. Fehlendes oder falsches Etikett bedeutet verlorenes Geld.",
313 "deuro_about_deuro": "Über dEURO",
314 "deuro_collect_interest": "Einziehen",
315 "deuro_reinvest_interest": "Reinvestieren",
@@ -616,6 +618,7 @@
618 "memo": "Memo",
619 "memo_disclaimer": "Dieses Memo wird für den Empfänger sichtbar sein",
620 "memo_optional": "Memo (optional)",
621 + "memo_swap_disclaimer": "Wird vom Empfänger benötigt, um Ihr Geld gutzuschreiben. Ein fehlendes oder falsches Memo bedeutet verlorenes Geld.",
622 "message": "Nachricht",
623 "message_verified": "Die Nachricht wurde erfolgreich verifiziert",
624 "messages": "Nachrichten",
@@ -1378,4 +1381,4 @@
1381 "zcash_card_missing_funds": "Fehlende Gelder?",
1382 "zcash_card_scan": "Scannen",
1383 "zcash_card_warning": "Schließen Sie die App nicht, bis der Vorgang abgeschlossen ist. Andernfalls muss der Vorgang von Grund auf neu gestartet werden."
1381 -}
1384 +}
\ No newline at end of file
res/values/strings_en.arb
+3
@@ -310,6 +310,8 @@
310 "descending": "Descending",
311 "description": "Description",
312 "destination_tag": "Destination tag:",
313 + "destination_tag_optional": "Destination tag (optional)",
314 + "destination_tag_swap_disclaimer": "Required by the receiver to credit your funds. Missing or wrong tag means lost funds.",
315 "deuro_about_deuro": "About dEURO",
316 "deuro_collect_interest": "Collect",
317 "deuro_reinvest_interest": "Reinvest",
@@ -620,6 +622,7 @@
622 "memo": "Memo",
623 "memo_disclaimer": "This memo will be visible to the receiver",
624 "memo_optional": "Memo (optional)",
625 + "memo_swap_disclaimer": "Required by the receiver to credit your funds. Missing or wrong memo means lost funds.",
626 "message": "Message",
627 "message_verified": "The message was successfully verified",
628 "messages": "Messages",
res/values/strings_es.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "Descendente",
309 "description": "Descripción",
310 "destination_tag": "Etiqueta de destino:",
311 + "destination_tag_optional": "Etiqueta de destino (opcional)",
312 + "destination_tag_swap_disclaimer": "Requerido por el receptor para acreditar sus fondos. La etiqueta faltante o incorrecta significa fondos perdidos.",
313 "deuro_about_deuro": "Acerca de dEURO",
314 "deuro_collect_interest": "Cobrar",
315 "deuro_reinvest_interest": "Reinvertir",
@@ -616,6 +618,7 @@
618 "memo": "Memo",
619 "memo_disclaimer": "Este memo será visible para el destinatario",
620 "memo_optional": "Memo (opcional)",
621 + "memo_swap_disclaimer": "Requerido por el receptor para acreditar sus fondos. Una nota faltante o incorrecta significa fondos perdidos.",
622 "message": "Mensaje",
623 "message_verified": "El mensaje se verificó correctamente",
624 "messages": "Mensajes",
@@ -1376,4 +1379,4 @@
1379 "zcash_card_missing_funds": "¿Faltan fondos?",
1380 "zcash_card_scan": "Escanear",
1381 "zcash_card_warning": "No cierre la aplicación hasta que se complete el procedimiento; si lo hace, este proceso deberá reiniciarse desde cero."
1379 -}
1382 +}
\ No newline at end of file
res/values/strings_fa.arb
+4 -1
@@ -306,6 +306,8 @@
306 "descending": "نزولی",
307 "description": "توضیحات",
308 "destination_tag": "برچسب مقصد:",
309 + "destination_tag_optional": "برچسب مقصد (اختیاری)",
310 + "destination_tag_swap_disclaimer": "توسط گیرنده برای اعتبار وجوه شما مورد نیاز است. برچسب گم شده یا اشتباه به معنای از دست رفتن وجوه است.",
311 "deuro_about_deuro": "درباره dEURO",
312 "deuro_collect_interest": "دریافت",
313 "deuro_reinvest_interest": "سرمایه‌گذاری مجدد",
@@ -614,6 +616,7 @@
616 "memo": "یادداشت",
617 "memo_disclaimer": "این یادداشت برای گیرنده قابل مشاهده خواهد بود",
618 "memo_optional": "یادداشت (اختیاری)",
619 + "memo_swap_disclaimer": "توسط گیرنده برای اعتبار وجوه شما مورد نیاز است. یادداشت گم شده یا اشتباه به معنای از دست رفتن وجوه است.",
620 "message": "پیام",
621 "message_verified": "پیام با موفقیت تأیید شد",
622 "messages": "پیام‌ها",
@@ -1371,4 +1374,4 @@
1374 "zcash_card_missing_funds": "موجودی گم شده؟",
1375 "zcash_card_scan": "اسکن",
1376 "zcash_card_warning": "تا زمانی که این فرایند کامل نشده است، برنامه را نبندید؛ در غیر این صورت، این فرایند باید از ابتدا دوباره شروع شود."
1374 -}
1377 +}
\ No newline at end of file
res/values/strings_fr.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "Décroissant",
309 "description": "Description",
310 "destination_tag": "Tag de destination :",
311 + "destination_tag_optional": "Balise de destination (facultatif)",
312 + "destination_tag_swap_disclaimer": "Requis par le destinataire pour créditer vos fonds. Une étiquette manquante ou erronée signifie une perte de fonds.",
313 "deuro_about_deuro": "À propos de dEURO",
314 "deuro_collect_interest": "Collecter",
315 "deuro_reinvest_interest": "Réinvestir",
@@ -616,6 +618,7 @@
618 "memo": "Mémo",
619 "memo_disclaimer": "Ce mémo sera visible par le destinataire",
620 "memo_optional": "Mémo (facultatif)",
621 + "memo_swap_disclaimer": "Requis par le destinataire pour créditer vos fonds. Un mémo manquant ou erroné signifie une perte de fonds.",
622 "message": "Message",
623 "message_verified": "Le message a été vérifié avec succès",
624 "messages": "Messages",
@@ -1374,4 +1377,4 @@
1377 "zcash_card_missing_funds": "Fonds manquants ?",
1378 "zcash_card_scan": "Scanner",
1379 "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."
1377 -}
1380 +}
\ No newline at end of file
res/values/strings_gn.arb
+4 -1
@@ -249,6 +249,8 @@
249 "descending": "Oguejy",
250 "description": "Ñemombe’u",
251 "destination_tag": "Teramoĩha hag̃ua:",
252 + "destination_tag_optional": "Etiqueta destino rehegua (opcional) .",
253 + "destination_tag_swap_disclaimer": "Ojeruréva receptor oacredita haguã nde fondo. Etiqueta ofaltáva térã ojavýva he'ise fondo okañýva.",
254 "dfx_option_description": "Ejogua cripto EUR ha CHF reheve. Oipurukuaa hag̃ua ñemuhára michĩ ha mba’apohaguasu Europape.",
255 "did_you_back_up_seeds": "¿Rejapo raʼe backup opaite nde raʼỹi rehegua?",
256 "didnt_get_code": "¿Nererejapýi kódigo?",
@@ -479,6 +481,7 @@
481 "memo": "Mandu’a",
482 "memo_disclaimer": "Ko memo ojehecháta ohupytývape",
483 "memo_optional": "Memo (opcional)",
484 + "memo_swap_disclaimer": "Ojeruréva receptor oacredita haguã nde fondo. Memo ofaltáva térã ojavýva he'ise fondo okañýva.",
485 "message": "Marandu",
486 "message_verified": "Pe marandu ojehechajey porã",
487 "methods": "Mba’éichapa",
@@ -1113,4 +1116,4 @@
1116 "zcash_card_missing_funds": "¿Nde fondo okañy?",
1117 "zcash_card_scan": "Escanear",
1118 "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."
1116 -}
1119 +}
\ No newline at end of file
res/values/strings_ha.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "Mai saukowa",
309 "description": "Bayanin",
310 "destination_tag": "Alamar makoma:",
311 + "destination_tag_optional": "Alamar wuri (na zaɓi)",
312 + "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.",
313 "deuro_about_deuro": "Game da dEURO",
314 "deuro_collect_interest": "Karɓa",
315 "deuro_reinvest_interest": "Sake saka",
@@ -616,6 +618,7 @@
618 "memo": "Memo",
619 "memo_disclaimer": "Wannan memo zai kasance a bayyane ga mai karɓa",
620 "memo_optional": "Memo (na zaɓi)",
621 + "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.",
622 "message": "Saƙo",
623 "message_verified": "An tabbatar da saƙon cikin nasara",
624 "messages": "Saƙonni",
@@ -1377,4 +1380,4 @@
1380 "zcash_card_missing_funds": "Kuɗi sun ɓace?",
1381 "zcash_card_scan": "Duba",
1382 "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."
1380 -}
1383 +}
\ No newline at end of file
res/values/strings_hi.arb
+5 -2
@@ -308,6 +308,8 @@
308 "descending": "अवरोही",
309 "description": "विवरण",
310 "destination_tag": "गंतव्य टैग:",
311 + "destination_tag_optional": "गंतव्य टैग (वैकल्पिक)",
312 + "destination_tag_swap_disclaimer": "प्राप्तकर्ता द्वारा आपके फंड को क्रेडिट करना आवश्यक है। गुम या गलत टैग का अर्थ है खोया हुआ धन।",
313 "deuro_about_deuro": "dEURO के बारे में",
314 "deuro_collect_interest": "एकत्र करें",
315 "deuro_reinvest_interest": "पुनर्निवेश करें",
@@ -616,6 +618,7 @@
618 "memo": "मेमो",
619 "memo_disclaimer": "यह मेमो प्राप्तकर्ता को दिखाई देगा",
620 "memo_optional": "मेमो (वैकल्पिक)",
621 + "memo_swap_disclaimer": "प्राप्तकर्ता द्वारा आपके फंड को क्रेडिट करना आवश्यक है। मेमो के गुम या गलत होने का अर्थ है धन की हानि।",
622 "message": "संदेश",
623 "message_verified": "संदेश सफलतापूर्वक सत्यापित हो गया",
624 "messages": "संदेश",
@@ -733,8 +736,8 @@
736 "payjoin_unavailable_sheet_title": "Payjoin उपलब्ध क्यों नहीं है?",
737 "payment_id": "भुगतान आईडी: ",
738 "payment_made_easy": "भुगतान करना आसान",
736 - "Payment_was_received": "आपका भुगतान प्राप्त हो गया था।",
739 "payment_was_received": "आपका भुगतान प्राप्त हो गया।",
740 + "Payment_was_received": "आपका भुगतान प्राप्त हो गया था।",
741 "payments": "भुगतान",
742 "pending": " (लंबित)",
743 "percentageOf": "${amount} का",
@@ -1376,4 +1379,4 @@
1379 "zcash_card_missing_funds": "फंड गायब हैं?",
1380 "zcash_card_scan": "स्कैन",
1381 "zcash_card_warning": "प्रक्रिया पूरी होने तक ऐप बंद न करें। यदि आप ऐसा करते हैं, तो यह प्रक्रिया शुरू से फिर से शुरू करनी होगी।"
1379 -}
1382 +}
\ No newline at end of file
res/values/strings_hr.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "Silazno",
309 "description": "Opis",
310 "destination_tag": "Odredišna oznaka:",
311 + "destination_tag_optional": "Oznaka odredišta (nije obavezno)",
312 + "destination_tag_swap_disclaimer": "Primatelj zahtijeva da kreditira vaša sredstva. Nedostatak ili pogrešna oznaka znači gubitak sredstava.",
313 "deuro_about_deuro": "O dEURO-u",
314 "deuro_collect_interest": "Preuzmi",
315 "deuro_reinvest_interest": "Reinvestiraj",
@@ -616,6 +618,7 @@
618 "memo": "Memo",
619 "memo_disclaimer": "Ova će bilješka biti vidljiva primatelju",
620 "memo_optional": "Memo (nije obavezno)",
621 + "memo_swap_disclaimer": "Primatelj zahtijeva da kreditira vaša sredstva. Nedostatak ili pogrešan dopis znači gubitak sredstava.",
622 "message": "Poruka",
623 "message_verified": "Poruka je uspješno verificirana",
624 "messages": "Poruke",
@@ -1374,4 +1377,4 @@
1377 "zcash_card_missing_funds": "Nedostaju sredstva?",
1378 "zcash_card_scan": "Skeniraj",
1379 "zcash_card_warning": "Ne zatvarajte aplikaciju dok se postupak ne dovrši; ako to učinite, postupak će se morati ponovno pokrenuti ispočetka."
1377 -}
1380 +}
\ No newline at end of file
res/values/strings_hy.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "Նվազման կարգով",
309 "description": "Նկարագրություն",
310 "destination_tag": "Նշանակման թեգը:",
311 + "destination_tag_optional": "Նպատակակետի պիտակ (ըստ ցանկության)",
312 + "destination_tag_swap_disclaimer": "Ստացողի կողմից պահանջվում է ձեր միջոցները վարկավորելու համար: Բացակայող կամ սխալ պիտակ նշանակում է կորցրած միջոցներ:",
313 "deuro_about_deuro": "dEURO-ի մասին",
314 "deuro_collect_interest": "Հավաքել",
315 "deuro_reinvest_interest": "Վերաներդնել",
@@ -616,6 +618,7 @@
618 "memo": "Մեմո",
619 "memo_disclaimer": "Այս հուշագիրը տեսանելի կլինի ստացողին",
620 "memo_optional": "Մեմո (ըստ ցանկության)",
621 + "memo_swap_disclaimer": "Ստացողի կողմից պահանջվում է ձեր միջոցները վարկավորելու համար: Հուշագրի բացակայությունը կամ սխալը նշանակում է կորցրած միջոցներ:",
622 "message": "Հաղորդագրություն",
623 "message_verified": "Հաղորդագրությունը հաջողությամբ ստուգվեց",
624 "messages": "Հաղորդագրություններ",
@@ -1372,4 +1375,4 @@
1375 "zcash_card_missing_funds": "Միջոցները բացակա՞յում են",
1376 "zcash_card_scan": "Սկանավորել",
1377 "zcash_card_warning": "Մի փակեք հավելվածը մինչև ընթացակարգի ավարտը, քանի որ հակառակ դեպքում այս գործընթացը պետք է վերագործարկվի զրոյից։"
1375 -}
1378 +}
\ No newline at end of file
res/values/strings_id.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "Menurun",
309 "description": "Deskripsi",
310 "destination_tag": "Tag tujuan:",
311 + "destination_tag_optional": "Tag tujuan (opsional)",
312 + "destination_tag_swap_disclaimer": "Diperlukan oleh penerima untuk mengkreditkan dana Anda. Tag yang hilang atau salah berarti dana hilang.",
313 "deuro_about_deuro": "Tentang dEURO",
314 "deuro_collect_interest": "Kumpulkan",
315 "deuro_reinvest_interest": "Investasikan kembali",
@@ -616,6 +618,7 @@
618 "memo": "Memo",
619 "memo_disclaimer": "Memo ini akan terlihat oleh penerima",
620 "memo_optional": "Memo (opsional)",
621 + "memo_swap_disclaimer": "Diperlukan oleh penerima untuk mengkreditkan dana Anda. Memo yang hilang atau salah berarti dana hilang.",
622 "message": "Pesan",
623 "message_verified": "Pesan berhasil diverifikasi",
624 "messages": "Pesan",
@@ -1377,4 +1380,4 @@
1380 "zcash_card_missing_funds": "Dana hilang?",
1381 "zcash_card_scan": "Pindai",
1382 "zcash_card_warning": "Jangan tutup aplikasi sampai prosedur selesai. Jika Anda melakukannya, proses ini harus dimulai ulang dari awal."
1380 -}
1383 +}
\ No newline at end of file
res/values/strings_it.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "Decrescente",
309 "description": "Descrizione",
310 "destination_tag": "Tag di destinazione:",
311 + "destination_tag_optional": "Tag di destinazione (facoltativo)",
312 + "destination_tag_swap_disclaimer": "Richiesto dal destinatario per accreditare i tuoi fondi. Tag mancante o sbagliato significa perdita di fondi.",
313 "deuro_about_deuro": "Informazioni su dEURO",
314 "deuro_collect_interest": "Raccogli",
315 "deuro_reinvest_interest": "Reinvesti",
@@ -616,6 +618,7 @@
618 "memo": "Memo",
619 "memo_disclaimer": "Questo memo sarà visibile al destinatario",
620 "memo_optional": "Memo (facoltativo)",
621 + "memo_swap_disclaimer": "Richiesto dal destinatario per accreditare i tuoi fondi. Una nota mancante o errata significa perdita di fondi.",
622 "message": "Messaggio",
623 "message_verified": "Il messaggio è stato verificato con successo",
624 "messages": "Messaggi",
@@ -1376,4 +1379,4 @@
1379 "zcash_card_missing_funds": "Fondi mancanti?",
1380 "zcash_card_scan": "Scansiona",
1381 "zcash_card_warning": "Non chiudere l'app finché la procedura non è completata, altrimenti sarà necessario riavviare il processo da zero."
1379 -}
1382 +}
\ No newline at end of file
res/values/strings_ja.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "降順",
309 "description": "説明",
310 "destination_tag": "宛先タグ:",
311 + "destination_tag_optional": "宛先タグ (オプション)",
312 + "destination_tag_swap_disclaimer": "受取人があなたの資金を入金するために必要とします。タグが欠落しているか間違っていると、資金が失われます。",
313 "deuro_about_deuro": "dEUROについて",
314 "deuro_collect_interest": "受け取る",
315 "deuro_reinvest_interest": "再投資",
@@ -617,6 +619,7 @@
619 "memo": "メモ",
620 "memo_disclaimer": "このメモは受取人に表示されます",
621 "memo_optional": "メモ(任意)",
622 + "memo_swap_disclaimer": "受取人があなたの資金を入金するために必要とします。メモの紛失または間違ったメモは資金の損失を意味します。",
623 "message": "メッセージ",
624 "message_verified": "メッセージは正常に検証されました",
625 "messages": "メッセージ",
@@ -1374,4 +1377,4 @@
1377 "zcash_card_missing_funds": "資金が見当たりませんか?",
1378 "zcash_card_scan": "スキャン",
1379 "zcash_card_warning": "手順が完了するまでアプリを閉じないでください。閉じると、このプロセスを最初からやり直す必要があります。"
1377 -}
1380 +}
\ No newline at end of file
res/values/strings_ko.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "내림차순",
309 "description": "설명",
310 "destination_tag": "목적지 태그:",
311 + "destination_tag_optional": "대상 태그(선택사항)",
312 + "destination_tag_swap_disclaimer": "귀하의 자금을 입금하기 위해 수신자가 필요합니다. 태그가 없거나 잘못된 경우 자금 손실이 발생합니다.",
313 "deuro_about_deuro": "dEURO 소개",
314 "deuro_collect_interest": "수령",
315 "deuro_reinvest_interest": "재투자",
@@ -616,6 +618,7 @@
618 "memo": "메모",
619 "memo_disclaimer": "이 메모는 수신자에게 표시됩니다.",
620 "memo_optional": "메모(선택)",
621 + "memo_swap_disclaimer": "귀하의 자금을 입금하기 위해 수신자가 필요합니다. 누락되거나 잘못된 메모는 자금 손실을 의미합니다.",
622 "message": "메시지",
623 "message_verified": "메시지가 성공적으로 검증되었습니다",
624 "messages": "메시지",
@@ -1374,4 +1377,4 @@
1377 "zcash_card_missing_funds": "자금이 사라졌나요?",
1378 "zcash_card_scan": "스캔",
1379 "zcash_card_warning": "절차가 완료될 때까지 앱을 닫지 마십시오. 닫으면 이 과정을 처음부터 다시 시작해야 합니다."
1377 -}
1380 +}
\ No newline at end of file
res/values/strings_my.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "အနိမ့်မှအမြင့်သို့",
309 "description": "ဖော်ပြချက်",
310 "destination_tag": "ဦးတည်ရာ Tag:",
311 + "destination_tag_optional": "ဦးတည်ရာတဂ် (ချန်လှပ်ထားနိုင်သည်)",
312 + "destination_tag_swap_disclaimer": "သင့်ရန်ပုံငွေများကို အကြွေးတင်ရန်အတွက် လက်ခံသူမှ လိုအပ်ပါသည်။ ပျောက်ဆုံးနေသော သို့မဟုတ် မှားယွင်းသော tag ဆိုသည်မှာ ဆုံးရှုံးသွားသော ရန်ပုံငွေများကို ဆိုလိုသည်။",
313 "deuro_about_deuro": "dEURO အကြောင်း",
314 "deuro_collect_interest": "ရယူ",
315 "deuro_reinvest_interest": "ပြန်လည်ရင်းနှီးမြှုပ်နှံရန်",
@@ -616,6 +618,7 @@
618 "memo": "မှတ်စု",
619 "memo_disclaimer": "ဤ memo ကို လက်ခံသူက မြင်နိုင်ပါမည်။",
620 "memo_optional": "Memo (ရွေးချယ်နိုင်သည်)",
621 + "memo_swap_disclaimer": "သင့်ရန်ပုံငွေများကို အကြွေးတင်ရန်အတွက် လက်ခံသူမှ လိုအပ်ပါသည်။ မှတ်စုတို ပျောက်ဆုံးခြင်း သို့မဟုတ် မှားယွင်းခြင်းဆိုသည်မှာ ဆုံးရှုံးသွားသော ရန်ပုံငွေများကို ဆိုလိုသည်။",
622 "message": "မက်ဆေ့ချ်",
623 "message_verified": "မက်ဆေ့ချ်ကို အောင်မြင်စွာ အတည်ပြုပြီးပါပြီ",
624 "messages": "မက်ဆေ့ချ်များ",
@@ -1373,4 +1376,4 @@
1376 "zcash_card_missing_funds": "ငွေကြေး ပျောက်ဆုံးနေပါသလား?",
1377 "zcash_card_scan": "စကင်",
1378 "zcash_card_warning": "လုပ်ငန်းစဉ် ပြီးဆုံးသည်အထိ အက်ပ်ကို မပိတ်ပါနှင့်။ ပိတ်လိုက်ပါက ဤလုပ်ငန်းစဉ်ကို အစမှ ပြန်လည်စတင်ရမည်ဖြစ်သည်။"
1376 -}
1379 +}
\ No newline at end of file
res/values/strings_nl.arb
+4 -1
@@ -306,6 +306,8 @@
306 "descending": "Aflopend",
307 "description": "Beschrijving",
308 "destination_tag": "Bestemmingstag:",
309 + "destination_tag_optional": "Bestemmingstag (optioneel)",
310 + "destination_tag_swap_disclaimer": "Vereist door de ontvanger om uw geld te crediteren. Ontbrekende of verkeerde tag betekent verloren geld.",
311 "deuro_about_deuro": "Over dEURO",
312 "deuro_collect_interest": "Verzamelen",
313 "deuro_reinvest_interest": "Herinvesteren",
@@ -613,6 +615,7 @@
615 "memo": "Memo",
616 "memo_disclaimer": "Deze memo is zichtbaar voor de ontvanger",
617 "memo_optional": "Memo (optioneel)",
618 + "memo_swap_disclaimer": "Vereist door de ontvanger om uw geld te crediteren. Ontbrekende of verkeerde memo betekent verloren geld.",
619 "message": "Bericht",
620 "message_verified": "Het bericht is succesvol geverifieerd",
621 "messages": "Berichten",
@@ -1371,4 +1374,4 @@
1374 "zcash_card_missing_funds": "Fondsen ontbreken?",
1375 "zcash_card_scan": "Scannen",
1376 "zcash_card_warning": "Sluit de app niet voordat de procedure is voltooid. Als je dit wel doet, moet dit proces helemaal opnieuw worden gestart."
1374 -}
1377 +}
\ No newline at end of file
res/values/strings_pl.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "Malejąco",
309 "description": "Opis",
310 "destination_tag": "Tag docelowy:",
311 + "destination_tag_optional": "Znacznik miejsca docelowego (opcjonalnie)",
312 + "destination_tag_swap_disclaimer": "Wymagane przez odbiorcę w celu uznania Twoich środków. Brakujący lub błędny tag oznacza utratę środków.",
313 "deuro_about_deuro": "O dEURO",
314 "deuro_collect_interest": "Odbierz",
315 "deuro_reinvest_interest": "Reinwestuj",
@@ -615,6 +617,7 @@
617 "memo": "Memo",
618 "memo_disclaimer": "To memo będzie widoczne dla odbiorcy",
619 "memo_optional": "Memo (opcjonalne)",
620 + "memo_swap_disclaimer": "Wymagane przez odbiorcę w celu uznania Twoich środków. Brakująca lub błędna notatka oznacza utratę środków.",
621 "message": "Wiadomość",
622 "message_verified": "Wiadomość została pomyślnie zweryfikowana",
623 "messages": "Wiadomości",
@@ -1372,4 +1375,4 @@
1375 "zcash_card_missing_funds": "Brakuje środków?",
1376 "zcash_card_scan": "Skanuj",
1377 "zcash_card_warning": "Nie zamykaj aplikacji do czasu zakończenia procedury. Jeśli to zrobisz, proces będzie musiał rozpocząć się od nowa."
1375 -}
1378 +}
\ No newline at end of file
res/values/strings_pt.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "Descendente",
309 "description": "Descrição",
310 "destination_tag": "Tag de destino:",
311 + "destination_tag_optional": "Tag de destino (opcional)",
312 + "destination_tag_swap_disclaimer": "Exigido pelo destinatário para creditar seus fundos. Etiqueta ausente ou errada significa perda de fundos.",
313 "deuro_about_deuro": "Sobre dEURO",
314 "deuro_collect_interest": "Coletar",
315 "deuro_reinvest_interest": "Reinvestir",
@@ -617,6 +619,7 @@
619 "memo": "Memo",
620 "memo_disclaimer": "Este memo ficará visível para o destinatário",
621 "memo_optional": "Memo (opcional)",
622 + "memo_swap_disclaimer": "Exigido pelo destinatário para creditar seus fundos. Memorando ausente ou errado significa perda de fundos.",
623 "message": "Mensagem",
624 "message_verified": "A mensagem foi verificada com sucesso",
625 "messages": "Mensagens",
@@ -1376,4 +1379,4 @@
1379 "zcash_card_missing_funds": "Fundos em falta?",
1380 "zcash_card_scan": "Escanear",
1381 "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."
1379 -}
1382 +}
\ No newline at end of file
res/values/strings_pt_BR.arb
+4 -1
@@ -306,6 +306,8 @@
306 "descending": "Decrescente",
307 "description": "Descrição",
308 "destination_tag": "Tag de destino:",
309 + "destination_tag_optional": "Tag de destino (opcional)",
310 + "destination_tag_swap_disclaimer": "Exigido pelo destinatário para creditar seus fundos. Etiqueta ausente ou errada significa perda de fundos.",
311 "deuro_about_deuro": "Sobre dEURO",
312 "deuro_collect_interest": "Coletar",
313 "deuro_reinvest_interest": "Reinvestir",
@@ -612,6 +614,7 @@
614 "memo": "Memo",
615 "memo_disclaimer": "Este memo será visível para o destinatário",
616 "memo_optional": "Memo (opcional)",
617 + "memo_swap_disclaimer": "Exigido pelo destinatário para creditar seus fundos. Memorando ausente ou errado significa perda de fundos.",
618 "message": "Mensagem",
619 "message_verified": "A mensagem foi verificada com sucesso",
620 "messages": "Mensagens",
@@ -1368,4 +1371,4 @@
1371 "zcash_card_missing_funds": "Fundos ausentes?",
1372 "zcash_card_scan": "Escanear",
1373 "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."
1371 -}
1374 +}
\ No newline at end of file
res/values/strings_ru.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "По убыванию",
309 "description": "Описание",
310 "destination_tag": "Тег назначения:",
311 + "destination_tag_optional": "Тег назначения (необязательно)",
312 + "destination_tag_swap_disclaimer": "Требуется получателю для зачисления ваших средств. Отсутствие или неправильный тег означает потерю средств.",
313 "deuro_about_deuro": "О dEURO",
314 "deuro_collect_interest": "Собрать",
315 "deuro_reinvest_interest": "Реинвестировать",
@@ -616,6 +618,7 @@
618 "memo": "Мемо",
619 "memo_disclaimer": "Это примечание будет видно получателю",
620 "memo_optional": "Мемо (необязательно)",
621 + "memo_swap_disclaimer": "Требуется получателю для зачисления ваших средств. Отсутствие или неправильная памятка означает потерю средств.",
622 "message": "Сообщение",
623 "message_verified": "Сообщение было успешно проверено",
624 "messages": "Сообщения",
@@ -1374,4 +1377,4 @@
1377 "zcash_card_missing_funds": "Не хватает средств?",
1378 "zcash_card_scan": "Сканировать",
1379 "zcash_card_warning": "Не закрывайте приложение до завершения процедуры. Если вы это сделаете, процесс придется перезапустить с нуля."
1377 -}
1380 +}
\ No newline at end of file
res/values/strings_th.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "จากมากไปน้อย",
309 "description": "คำอธิบาย",
310 "destination_tag": "แท็กปลายทาง:",
311 + "destination_tag_optional": "แท็กปลายทาง (ไม่บังคับ)",
312 + "destination_tag_swap_disclaimer": "ผู้รับต้องการให้เครดิตเงินของคุณ แท็กที่หายไปหรือผิดหมายถึงสูญเสียเงิน",
313 "deuro_about_deuro": "เกี่ยวกับ dEURO",
314 "deuro_collect_interest": "รับ",
315 "deuro_reinvest_interest": "ลงทุนซ้ำ",
@@ -616,6 +618,7 @@
618 "memo": "บันทึก",
619 "memo_disclaimer": "บันทึกนี้จะมองเห็นได้โดยผู้รับ",
620 "memo_optional": "บันทึก (ไม่บังคับ)",
621 + "memo_swap_disclaimer": "ผู้รับต้องการให้เครดิตเงินของคุณ บันทึกที่หายไปหรือผิดหมายถึงสูญเสียเงิน",
622 "message": "ข้อความ",
623 "message_verified": "ตรวจสอบข้อความสำเร็จแล้ว",
624 "messages": "ข้อความ",
@@ -1373,4 +1376,4 @@
1376 "zcash_card_missing_funds": "ยอดเงินหายไป?",
1377 "zcash_card_scan": "สแกน",
1378 "zcash_card_warning": "อย่าปิดแอปจนกว่าขั้นตอนจะเสร็จสิ้น หากคุณปิดแอป กระบวนการนี้จะต้องเริ่มใหม่ตั้งแต่ต้น"
1376 -}
1379 +}
\ No newline at end of file
res/values/strings_tl.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "Pababa",
309 "description": "Paglalarawan",
310 "destination_tag": "Destination tag:",
311 + "destination_tag_optional": "Destination tag (opsyonal)",
312 + "destination_tag_swap_disclaimer": "Kinakailangan ng tatanggap na ikredito ang iyong mga pondo. Ang nawawala o maling tag ay nangangahulugan ng mga nawalang pondo.",
313 "deuro_about_deuro": "Tungkol sa dEURO",
314 "deuro_collect_interest": "Kolektahin",
315 "deuro_reinvest_interest": "Muling i-invest",
@@ -616,6 +618,7 @@
618 "memo": "Memo",
619 "memo_disclaimer": "Makikita ng tatanggap ang memo na ito",
620 "memo_optional": "Memo (opsyonal)",
621 + "memo_swap_disclaimer": "Kinakailangan ng tatanggap na ikredito ang iyong mga pondo. Ang nawawala o maling memo ay nangangahulugan ng nawalang pondo.",
622 "message": "Mensahe",
623 "message_verified": "Matagumpay na na-verify ang mensahe",
624 "messages": "Mga Mensahe",
@@ -1373,4 +1376,4 @@
1376 "zcash_card_missing_funds": "Nawawalang pondo?",
1377 "zcash_card_scan": "I-scan",
1378 "zcash_card_warning": "Huwag isara ang app hanggang sa makumpleto ang proseso; kung gagawin mo ito, kakailanganing magsimula muli mula sa simula."
1376 -}
1379 +}
\ No newline at end of file
res/values/strings_tr.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "Azalan",
309 "description": "Açıklama",
310 "destination_tag": "Hedef etiketi:",
311 + "destination_tag_optional": "Hedef etiketi (isteğe bağlı)",
312 + "destination_tag_swap_disclaimer": "Alıcının paranızı yatırması için gereklidir. Eksik veya yanlış etiket, para kaybı anlamına gelir.",
313 "deuro_about_deuro": "dEURO hakkında",
314 "deuro_collect_interest": "Topla",
315 "deuro_reinvest_interest": "Yeniden yatır",
@@ -616,6 +618,7 @@
618 "memo": "Not",
619 "memo_disclaimer": "Bu memo alıcı tarafından görülebilecektir",
620 "memo_optional": "Memo (isteğe bağlı)",
621 + "memo_swap_disclaimer": "Alıcının paranızı yatırması için gereklidir. Eksik veya yanlış not, para kaybı anlamına gelir.",
622 "message": "Mesaj",
623 "message_verified": "Mesaj başarıyla doğrulandı",
624 "messages": "Mesajlar",
@@ -1373,4 +1376,4 @@
1376 "zcash_card_missing_funds": "Bakiye eksik mi?",
1377 "zcash_card_scan": "Tara",
1378 "zcash_card_warning": "İşlem tamamlanana kadar uygulamayı kapatmayın; aksi takdirde bu işlemin baştan yeniden başlatılması gerekecektir."
1376 -}
1379 +}
\ No newline at end of file
res/values/strings_uk.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "За спаданням",
309 "description": "Опис",
310 "destination_tag": "Тег призначення:",
311 + "destination_tag_optional": "Тег призначення (необов’язково)",
312 + "destination_tag_swap_disclaimer": "Потрібний одержувачу для зарахування ваших коштів. Відсутній або неправильний тег означає втрату коштів.",
313 "deuro_about_deuro": "Про dEURO",
314 "deuro_collect_interest": "Зібрати",
315 "deuro_reinvest_interest": "Реінвестувати",
@@ -616,6 +618,7 @@
618 "memo": "Мемо",
619 "memo_disclaimer": "Ця примітка буде видима одержувачу",
620 "memo_optional": "Мемо (необов'язково)",
621 + "memo_swap_disclaimer": "Потрібний одержувачу для зарахування ваших коштів. Відсутня або неправильна нотатка означає втрату коштів.",
622 "message": "Повідомлення",
623 "message_verified": "Повідомлення було успішно перевірено",
624 "messages": "Повідомлення",
@@ -1374,4 +1377,4 @@
1377 "zcash_card_missing_funds": "Зникли кошти?",
1378 "zcash_card_scan": "Сканувати",
1379 "zcash_card_warning": "Не закривайте застосунок, доки процедура не завершиться. Якщо ви це зробите, цей процес потрібно буде перезапустити з нуля."
1377 -}
1380 +}
\ No newline at end of file
res/values/strings_ur.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "نزولی",
309 "description": "تفصیل",
310 "destination_tag": "ڈیسٹینیشن ٹیگ:",
311 + "destination_tag_optional": "منزل کا ٹیگ (اختیاری)",
312 + "destination_tag_swap_disclaimer": "وصول کنندہ کے ذریعہ آپ کے فنڈز کو کریڈٹ کرنے کی ضرورت ہے۔ گمشدہ یا غلط ٹیگ کا مطلب ہے کھوئے ہوئے فنڈز۔",
313 "deuro_about_deuro": "dEURO کے بارے میں",
314 "deuro_collect_interest": "وصول کریں",
315 "deuro_reinvest_interest": "دوبارہ سرمایہ کاری کریں",
@@ -616,6 +618,7 @@
618 "memo": "میمو",
619 "memo_disclaimer": "یہ میمو وصول کنندہ کو نظر آئے گا۔",
620 "memo_optional": "میمو (اختیاری)",
621 + "memo_swap_disclaimer": "وصول کنندہ کے ذریعہ آپ کے فنڈز کو کریڈٹ کرنے کی ضرورت ہے۔ گمشدہ یا غلط میمو کا مطلب ہے کھوئے ہوئے فنڈز۔",
622 "message": "پیغام",
623 "message_verified": "پیغام کی کامیابی سے تصدیق ہو گئی",
624 "messages": "پیغامات",
@@ -1375,4 +1378,4 @@
1378 "zcash_card_missing_funds": "فنڈز غائب ہیں؟",
1379 "zcash_card_scan": "اسکین کریں",
1380 "zcash_card_warning": "طریقہ کار مکمل ہونے تک ایپ بند نہ کریں۔ اگر آپ ایسا کریں گے تو یہ عمل شروع سے دوبارہ شروع کرنا پڑے گا۔"
1378 -}
1381 +}
\ No newline at end of file
res/values/strings_vi.arb
+4 -1
@@ -307,6 +307,8 @@
307 "descending": "Giảm dần",
308 "description": "Mô tả",
309 "destination_tag": "Thẻ đích:",
310 + "destination_tag_optional": "Thẻ đích (tùy chọn)",
311 + "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.",
312 "deuro_about_deuro": "Giới thiệu về dEURO",
313 "deuro_collect_interest": "Thu",
314 "deuro_reinvest_interest": "Tái đầu tư",
@@ -615,6 +617,7 @@
617 "memo": "Ghi chú",
618 "memo_disclaimer": "Ghi chú này sẽ hiển thị cho người nhận",
619 "memo_optional": "Ghi chú (tùy chọn)",
620 + "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.",
621 "message": "Tin nhắn",
622 "message_verified": "Tin nhắn đã được xác minh thành công",
623 "messages": "Tin nhắn",
@@ -1370,4 +1373,4 @@
1373 "zcash_card_missing_funds": "Thiếu tiền?",
1374 "zcash_card_scan": "Quét",
1375 "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."
1373 -}
1376 +}
\ No newline at end of file
res/values/strings_yo.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "Sísọ̀kalẹ̀",
309 "description": "Apejuwe",
310 "destination_tag": "Ami ìbùdó:",
311 + "destination_tag_optional": "Aami ibi-afẹde (aṣayan)",
312 + "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.",
313 "deuro_about_deuro": "Nipa dEURO",
314 "deuro_collect_interest": "Gba",
315 "deuro_reinvest_interest": "Tun fi èrè padà sí i",
@@ -617,6 +619,7 @@
619 "memo": "Àkọsílẹ̀",
620 "memo_disclaimer": "Akọsilẹ yii yoo han si olugba",
621 "memo_optional": "Akọsilẹ (aṣayan)",
622 + "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.",
623 "message": "Ifiranṣẹ",
624 "message_verified": "A ti jẹrisi ifiranṣẹ naa ni aṣeyọri",
625 "messages": "Awọn ifiranṣẹ",
@@ -1374,4 +1377,4 @@
1377 "zcash_card_missing_funds": "Ṣe owó rẹ sọnù?",
1378 "zcash_card_scan": "Ṣàwárí",
1379 "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ẹ̀."
1377 -}
1380 +}
\ No newline at end of file
res/values/strings_zh.arb
+4 -1
@@ -308,6 +308,8 @@
308 "descending": "降序",
309 "description": "描述",
310 "destination_tag": "目标标签:",
311 + "destination_tag_optional": "目的地标签(可选)",
312 + "destination_tag_swap_disclaimer": "收款人要求存入您的资金。标签丢失或错误意味着资金损失。",
313 "deuro_about_deuro": "关于 dEURO",
314 "deuro_collect_interest": "领取",
315 "deuro_reinvest_interest": "再投资",
@@ -616,6 +618,7 @@
618 "memo": "备注",
619 "memo_disclaimer": "此备注将对接收方可见",
620 "memo_optional": "备注(可选)",
621 + "memo_swap_disclaimer": "收款人要求存入您的资金。备忘录丢失或错误意味着资金损失。",
622 "message": "消息",
623 "message_verified": "消息已成功验证",
624 "messages": "消息",
@@ -1373,4 +1376,4 @@
1376 "zcash_card_missing_funds": "资金不见了?",
1377 "zcash_card_scan": "扫描",
1378 "zcash_card_warning": "在该过程完成之前请勿关闭应用程序,否则该过程将需要从头重新开始。"
1376 -}
1379 +}
\ No newline at end of file
res/values/strings_zh_tw.arb
+4 -1
@@ -259,6 +259,8 @@
259 "descending": "降序",
260 "description": "描述",
261 "destination_tag": "目的地標籤:",
262 + "destination_tag_optional": "目的地標籤(可選)",
263 + "destination_tag_swap_disclaimer": "收款人要求存入您的資金。標籤丟失或錯誤意味著資金損失。",
264 "deuro_about_deuro": "關於 dEURO",
265 "deuro_collect_interest": "領取",
266 "deuro_reinvest_interest": "再投資",
@@ -523,6 +525,7 @@
525 "max_amount": "最大: ${value}",
526 "max_value": "最大值:${value} ${currency}",
527 "memo": "備註",
528 + "memo_swap_disclaimer": "收款人要求存入您的資金。備忘錄丟失或錯誤意味著資金損失。",
529 "message": "訊息",
530 "message_verified": "訊息已成功驗證",
531 "messages": "訊息",
@@ -1177,4 +1180,4 @@
1180 "youCanGoBackToYourDapp": "您現在可以返回您的 dApp",
1181 "your": "您的",
1182 "yy": "YY"
1180 -}
1183 +}
\ No newline at end of file