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