CW-674: Enhance Exchange Flow - Add estimated receive amount and amount currency to Confirm Sending Details Page (#1547)

* fix: Improve exchange flow by adding a timeout to the call to fetch rate from providers * fix: Adjust time limit for fetching rate to 7 seconds and add timelimit to fetching limits * fix: Make fetch limits a Future.wait * feat: Add currency for amount and estimated receive amount to confirm sending page for exchange * fix: Remove unneeded code * fix: Modify receive amount to reflect value coming from the individual exchange providers if available and ensure receiveAmount is calculated based on selected exchange provider's rate

David Adegoke committed Jul 23, 2024 at 01:20 UTC 5c9f176d18be17c4922c38c907fc5ab6e1f3f25e
38 files changed +174 -122
ios/Podfile.lock
-38
@@ -8,36 +8,6 @@ PODS:
8 - Flutter
9 - ReachabilitySwift
10 - CryptoSwift (1.8.2)
11 - - cw_haven (0.0.1):
12 - - cw_haven/Boost (= 0.0.1)
13 - - cw_haven/Haven (= 0.0.1)
14 - - cw_haven/OpenSSL (= 0.0.1)
15 - - cw_haven/Sodium (= 0.0.1)
16 - - cw_shared_external
17 - - Flutter
18 - - cw_haven/Boost (0.0.1):
19 - - cw_shared_external
20 - - Flutter
21 - - cw_haven/Haven (0.0.1):
22 - - cw_shared_external
23 - - Flutter
24 - - cw_haven/OpenSSL (0.0.1):
25 - - cw_shared_external
26 - - Flutter
27 - - cw_haven/Sodium (0.0.1):
28 - - cw_shared_external
29 - - Flutter
30 - - cw_shared_external (0.0.1):
31 - - cw_shared_external/Boost (= 0.0.1)
32 - - cw_shared_external/OpenSSL (= 0.0.1)
33 - - cw_shared_external/Sodium (= 0.0.1)
34 - - Flutter
35 - - cw_shared_external/Boost (0.0.1):
36 - - Flutter
37 - - cw_shared_external/OpenSSL (0.0.1):
38 - - Flutter
39 - - cw_shared_external/Sodium (0.0.1):
40 - - Flutter
11 - device_display_brightness (0.0.1):
12 - Flutter
13 - device_info_plus (0.0.1):
@@ -145,8 +115,6 @@ DEPENDENCIES:
115 - barcode_scan2 (from `.symlinks/plugins/barcode_scan2/ios`)
116 - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
117 - CryptoSwift
148 - - cw_haven (from `.symlinks/plugins/cw_haven/ios`)
149 - - cw_shared_external (from `.symlinks/plugins/cw_shared_external/ios`)
118 - device_display_brightness (from `.symlinks/plugins/device_display_brightness/ios`)
119 - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
120 - devicelocale (from `.symlinks/plugins/devicelocale/ios`)
@@ -194,10 +162,6 @@ EXTERNAL SOURCES:
162 :path: ".symlinks/plugins/barcode_scan2/ios"
163 connectivity_plus:
164 :path: ".symlinks/plugins/connectivity_plus/ios"
197 - cw_haven:
198 - :path: ".symlinks/plugins/cw_haven/ios"
199 - cw_shared_external:
200 - :path: ".symlinks/plugins/cw_shared_external/ios"
165 device_display_brightness:
166 :path: ".symlinks/plugins/device_display_brightness/ios"
167 device_info_plus:
@@ -252,8 +216,6 @@ SPEC CHECKSUMS:
216 BigInt: f668a80089607f521586bbe29513d708491ef2f7
217 connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d
218 CryptoSwift: c63a805d8bb5e5538e88af4e44bb537776af11ea
255 - cw_haven: b3e54e1fbe7b8e6fda57a93206bc38f8e89b898a
256 - cw_shared_external: 2972d872b8917603478117c9957dfca611845a92
219 device_display_brightness: 1510e72c567a1f6ce6ffe393dcd9afd1426034f7
220 device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6
221 devicelocale: b22617f40038496deffba44747101255cee005b0
lib/entities/fs_migration.dart
+8 -1
@@ -391,7 +391,14 @@ Future<void> ios_migrate_trades_list(Box<Trade> tradeSource) async {
391 }
392
393 return Trade(
394 - id: tradeId, provider: provider!, from: from, to: to, createdAt: date, amount: '');
394 + id: tradeId,
395 + provider: provider!,
396 + from: from,
397 + to: to,
398 + createdAt: date,
399 + amount: '',
400 + receiveAmount: '',
401 + );
402 });
403 await tradeSource.addAll(trades);
404 await prefs.setBool('ios_migration_trade_list_completed', true);
lib/exchange/provider/changenow_exchange_provider.dart
+16 -12
@@ -194,20 +194,24 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
194 final refundAddress = responseJSON['refundAddress'] as String;
195 final extraId = responseJSON['payinExtraId'] as String?;
196 final payoutAddress = responseJSON['payoutAddress'] as String;
197 + final fromAmount = responseJSON['fromAmount']?.toString();
198 + final toAmount = responseJSON['toAmount']?.toString();
199
200 return Trade(
199 - id: id,
200 - from: request.fromCurrency,
201 - to: request.toCurrency,
202 - provider: description,
203 - inputAddress: inputAddress,
204 - refundAddress: refundAddress,
205 - extraId: extraId,
206 - createdAt: DateTime.now(),
207 - amount: responseJSON['fromAmount']?.toString() ?? request.fromAmount,
208 - state: TradeState.created,
209 - payoutAddress: payoutAddress,
210 - isSendAll: isSendAll);
201 + id: id,
202 + from: request.fromCurrency,
203 + to: request.toCurrency,
204 + provider: description,
205 + inputAddress: inputAddress,
206 + refundAddress: refundAddress,
207 + extraId: extraId,
208 + createdAt: DateTime.now(),
209 + amount: fromAmount ?? request.fromAmount,
210 + receiveAmount: toAmount ?? request.toAmount,
211 + state: TradeState.created,
212 + payoutAddress: payoutAddress,
213 + isSendAll: isSendAll,
214 + );
215 }
216
217 @override
lib/exchange/provider/exolix_exchange_provider.dart
+15 -12
@@ -172,20 +172,23 @@ class ExolixExchangeProvider extends ExchangeProvider {
172 final extraId = responseJSON['depositExtraId'] as String?;
173 final payoutAddress = responseJSON['withdrawalAddress'] as String;
174 final amount = responseJSON['amount'].toString();
175 + final receiveAmount = responseJSON['amountTo']?.toString();
176
177 return Trade(
177 - id: id,
178 - from: request.fromCurrency,
179 - to: request.toCurrency,
180 - provider: description,
181 - inputAddress: inputAddress,
182 - refundAddress: refundAddress,
183 - extraId: extraId,
184 - createdAt: DateTime.now(),
185 - amount: amount,
186 - state: TradeState.created,
187 - payoutAddress: payoutAddress,
188 - isSendAll: isSendAll);
178 + id: id,
179 + from: request.fromCurrency,
180 + to: request.toCurrency,
181 + provider: description,
182 + inputAddress: inputAddress,
183 + refundAddress: refundAddress,
184 + extraId: extraId,
185 + createdAt: DateTime.now(),
186 + amount: amount,
187 + receiveAmount:receiveAmount ?? request.toAmount,
188 + state: TradeState.created,
189 + payoutAddress: payoutAddress,
190 + isSendAll: isSendAll,
191 + );
192 }
193
194 @override
lib/exchange/provider/quantex_exchange_provider.dart
+2
@@ -162,11 +162,13 @@ class QuantexExchangeProvider extends ExchangeProvider {
162 throw Exception('Unexpected http status: ${response.statusCode}');
163
164 final responseData = responseBody['data'] as Map<String, dynamic>;
165 + final receiveAmount = responseData["amount_receive"]?.toString();
166
167 return Trade(
168 id: responseData["order_id"] as String,
169 inputAddress: responseData["server_address"] as String,
170 amount: request.fromAmount,
171 + receiveAmount: receiveAmount ?? request.toAmount,
172 from: request.fromCurrency,
173 to: request.toCurrency,
174 provider: description,
lib/exchange/provider/sideshift_exchange_provider.dart
+1
@@ -213,6 +213,7 @@ class SideShiftExchangeProvider extends ExchangeProvider {
213 refundAddress: settleAddress,
214 state: TradeState.created,
215 amount: depositAmount ?? request.fromAmount,
216 + receiveAmount: request.toAmount,
217 payoutAddress: settleAddress,
218 createdAt: DateTime.now(),
219 isSendAll: isSendAll,
lib/exchange/provider/simpleswap_exchange_provider.dart
+2
@@ -153,6 +153,7 @@ class SimpleSwapExchangeProvider extends ExchangeProvider {
153 final payoutAddress = responseJSON['address_to'] as String;
154 final settleAddress = responseJSON['user_refund_address'] as String;
155 final extraId = responseJSON['extra_id_from'] as String?;
156 + final receiveAmount = responseJSON['amount_to'] as String?;
157
158 return Trade(
159 id: id,
@@ -164,6 +165,7 @@ class SimpleSwapExchangeProvider extends ExchangeProvider {
165 extraId: extraId,
166 state: TradeState.created,
167 amount: request.fromAmount,
168 + receiveAmount: receiveAmount ?? request.toAmount,
169 payoutAddress: payoutAddress,
170 createdAt: DateTime.now(),
171 isSendAll: isSendAll,
lib/exchange/provider/thorchain_exchange.provider.dart
+20 -13
@@ -40,7 +40,7 @@ class ThorChainExchangeProvider extends ExchangeProvider {
40 static const _txInfoPath = '/thorchain/tx/status/';
41 static const _affiliateName = 'cakewallet';
42 static const _affiliateBps = '175';
43 - static const _nameLookUpPath= 'v2/thorname/lookup/';
43 + static const _nameLookUpPath = 'v2/thorname/lookup/';
44
45 final Box<Trade> tradesStore;
46
@@ -137,19 +137,27 @@ class ThorChainExchangeProvider extends ExchangeProvider {
137
138 final inputAddress = responseJSON['inbound_address'] as String?;
139 final memo = responseJSON['memo'] as String?;
140 + final directAmountOutResponse = responseJSON['expected_amount_out'] as String?;
141 +
142 + String? receiveAmount;
143 + if (directAmountOutResponse != null) {
144 + receiveAmount = _thorChainAmountToDouble(directAmountOutResponse).toString();
145 + }
146
147 return Trade(
142 - id: '',
143 - from: request.fromCurrency,
144 - to: request.toCurrency,
145 - provider: description,
146 - inputAddress: inputAddress,
147 - createdAt: DateTime.now(),
148 - amount: request.fromAmount,
149 - state: TradeState.notFound,
150 - payoutAddress: request.toAddress,
151 - memo: memo,
152 - isSendAll: isSendAll);
148 + id: '',
149 + from: request.fromCurrency,
150 + to: request.toCurrency,
151 + provider: description,
152 + inputAddress: inputAddress,
153 + createdAt: DateTime.now(),
154 + amount: request.fromAmount,
155 + receiveAmount: receiveAmount ?? request.toAmount,
156 + state: TradeState.notFound,
157 + payoutAddress: request.toAddress,
158 + memo: memo,
159 + isSendAll: isSendAll,
160 + );
161 }
162
163 @override
@@ -234,7 +242,6 @@ class ThorChainExchangeProvider extends ExchangeProvider {
242 return chainToAddressMap;
243 }
244
237 -
245 Future<Map<String, dynamic>> _getSwapQuote(Map<String, String> params) async {
246 Uri uri = Uri.https(_baseNodeURL, _quotePath, params);
247
lib/exchange/provider/trocador_exchange_provider.dart
+18 -14
@@ -224,22 +224,26 @@ class TrocadorExchangeProvider extends ExchangeProvider {
224 final password = responseJSON['password'] as String;
225 final providerId = responseJSON['id_provider'] as String;
226 final providerName = responseJSON['provider'] as String;
227 + final amount = responseJSON['amount_from']?.toString();
228 + final receiveAmount = responseJSON['amount_to']?.toString();
229
230 return Trade(
229 - id: id,
230 - from: request.fromCurrency,
231 - to: request.toCurrency,
232 - provider: description,
233 - inputAddress: inputAddress,
234 - refundAddress: refundAddress,
235 - state: TradeState.deserialize(raw: status),
236 - password: password,
237 - providerId: providerId,
238 - providerName: providerName,
239 - createdAt: DateTime.tryParse(date)?.toLocal(),
240 - amount: responseJSON['amount_from']?.toString() ?? request.fromAmount,
241 - payoutAddress: payoutAddress,
242 - isSendAll: isSendAll);
231 + id: id,
232 + from: request.fromCurrency,
233 + to: request.toCurrency,
234 + provider: description,
235 + inputAddress: inputAddress,
236 + refundAddress: refundAddress,
237 + state: TradeState.deserialize(raw: status),
238 + password: password,
239 + providerId: providerId,
240 + providerName: providerName,
241 + createdAt: DateTime.tryParse(date)?.toLocal(),
242 + amount: amount ?? request.fromAmount,
243 + receiveAmount: receiveAmount ?? request.toAmount,
244 + payoutAddress: payoutAddress,
245 + isSendAll: isSendAll,
246 + );
247 }
248
249 @override
lib/exchange/trade.dart
+11 -2
@@ -13,6 +13,7 @@ class Trade extends HiveObject {
13 CryptoCurrency? from,
14 CryptoCurrency? to,
15 TradeState? state,
16 + this.receiveAmount,
17 this.createdAt,
18 this.expiredAt,
19 this.inputAddress,
@@ -122,6 +123,9 @@ class Trade extends HiveObject {
123 @HiveField(22)
124 String? router;
125
126 + @HiveField(23, defaultValue: '')
127 + String? receiveAmount;
128 +
129 static Trade fromMap(Map<String, Object?> map) {
130 return Trade(
131 id: map['id'] as String,
@@ -131,6 +135,7 @@ class Trade extends HiveObject {
135 createdAt:
136 map['date'] != null ? DateTime.fromMillisecondsSinceEpoch(map['date'] as int) : null,
137 amount: map['amount'] as String,
138 + receiveAmount: map['receive_amount'] as String?,
139 walletId: map['wallet_id'] as String,
140 fromWalletAddress: map['from_wallet_address'] as String?,
141 memo: map['memo'] as String?,
@@ -149,6 +154,7 @@ class Trade extends HiveObject {
154 'output': to.serialize(),
155 'date': createdAt != null ? createdAt!.millisecondsSinceEpoch : null,
156 'amount': amount,
157 + 'receive_amount': receiveAmount,
158 'wallet_id': walletId,
159 'from_wallet_address': fromWalletAddress,
160 'memo': memo,
@@ -179,6 +185,7 @@ class TradeAdapter extends TypeAdapter<Trade> {
185 return Trade(
186 id: fields[0] == null ? '' : fields[0] as String,
187 amount: fields[7] == null ? '' : fields[7] as String,
188 + receiveAmount: fields[23] as String?,
189 createdAt: fields[5] as DateTime?,
190 expiredAt: fields[6] as DateTime?,
191 inputAddress: fields[8] as String?,
@@ -206,7 +213,7 @@ class TradeAdapter extends TypeAdapter<Trade> {
213 @override
214 void write(BinaryWriter writer, Trade obj) {
215 writer
209 - ..writeByte(23)
216 + ..writeByte(24)
217 ..writeByte(0)
218 ..write(obj.id)
219 ..writeByte(1)
@@ -252,7 +259,9 @@ class TradeAdapter extends TypeAdapter<Trade> {
259 ..writeByte(21)
260 ..write(obj.isSendAll)
261 ..writeByte(22)
255 - ..write(obj.router);
262 + ..write(obj.router)
263 + ..writeByte(23)
264 + ..write(obj.receiveAmount);
265 }
266
267 @override
lib/view_model/exchange/exchange_trade_view_model.dart
+25 -9
@@ -147,8 +147,13 @@ abstract class ExchangeTradeViewModelBase with Store {
147 items.clear();
148
149 if (trade.provider != ExchangeProviderDescription.thorChain)
150 - items.add(ExchangeTradeItem(
151 - title: "${trade.provider.title} ${S.current.id}", data: '${trade.id}', isCopied: true));
150 + items.add(
151 + ExchangeTradeItem(
152 + title: "${trade.provider.title} ${S.current.id}",
153 + data: '${trade.id}',
154 + isCopied: true,
155 + ),
156 + );
157
158 if (trade.extraId != null) {
159 final title = trade.from == CryptoCurrency.xrp
@@ -161,15 +166,26 @@ abstract class ExchangeTradeViewModelBase with Store {
166 }
167
168 items.addAll([
164 - ExchangeTradeItem(title: S.current.amount, data: '${trade.amount}', isCopied: true),
169 ExchangeTradeItem(
166 - title: S.current.send_to_this_address('${tradesStore.trade!.from}', tagFrom) + ':',
167 - data: trade.inputAddress ?? '',
168 - isCopied: true),
170 + title: S.current.amount,
171 + data: '${trade.amount} ${trade.from}',
172 + isCopied: true,
173 + ),
174 ExchangeTradeItem(
170 - title: S.current.arrive_in_this_address('${tradesStore.trade!.to}', tagTo) + ':',
171 - data: trade.payoutAddress ?? '',
172 - isCopied: true),
175 + title: S.current.estimated_receive_amount +':',
176 + data: '${tradesStore.trade?.receiveAmount} ${trade.to}',
177 + isCopied: true,
178 + ),
179 + ExchangeTradeItem(
180 + title: S.current.send_to_this_address('${tradesStore.trade!.from}', tagFrom) + ':',
181 + data: trade.inputAddress ?? '',
182 + isCopied: true,
183 + ),
184 + ExchangeTradeItem(
185 + title: S.current.arrive_in_this_address('${tradesStore.trade!.to}', tagTo) + ':',
186 + data: trade.payoutAddress ?? '',
187 + isCopied: true,
188 + ),
189 ]);
190 }
191
lib/view_model/exchange/exchange_view_model.dart
+30 -21
@@ -450,19 +450,21 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
450 double? highestMax = 0.0;
451
452 try {
453 - final result = await Future.wait(selectedProviders
454 - .where((element) => providersForCurrentPair().contains(provider))
455 - .map((provider) => provider
456 - .fetchLimits(
457 - from: from,
458 - to: to,
459 - isFixedRateMode: isFixedRateMode,
460 - )
461 - .onError((error, stackTrace) => Limits(max: 0.0, min: double.maxFinite))
462 - .timeout(
463 - Duration(seconds: 7),
464 - onTimeout: () => Limits(max: 0.0, min: double.maxFinite),
465 - )));
453 + final result = await Future.wait(
454 + selectedProviders.where((provider) => providersForCurrentPair().contains(provider)).map(
455 + (provider) => provider
456 + .fetchLimits(
457 + from: from,
458 + to: to,
459 + isFixedRateMode: isFixedRateMode,
460 + )
461 + .onError((error, stackTrace) => Limits(max: 0.0, min: double.maxFinite))
462 + .timeout(
463 + Duration(seconds: 7),
464 + onTimeout: () => Limits(max: 0.0, min: double.maxFinite),
465 + ),
466 + ),
467 + );
468
469 result.forEach((tempLimits) {
470 if (lowestMin != null && (tempLimits.min ?? -1) < lowestMin!) {
@@ -506,17 +508,24 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
508 }
509
510 try {
509 - for (var provider in _sortedAvailableProviders.values) {
511 + for (var i = 0; i < _sortedAvailableProviders.values.length; i++) {
512 + final provider = _sortedAvailableProviders.values.toList()[i];
513 + final providerRate = _sortedAvailableProviders.keys.toList()[i];
514 +
515 if (!(await provider.checkIsAvailable())) continue;
516
517 + _bestRate = providerRate;
518 + await changeDepositAmount(amount: depositAmount);
519 +
520 final request = TradeRequest(
513 - fromCurrency: depositCurrency,
514 - toCurrency: receiveCurrency,
515 - fromAmount: depositAmount.replaceAll(',', '.'),
516 - toAmount: receiveAmount.replaceAll(',', '.'),
517 - refundAddress: depositAddress,
518 - toAddress: receiveAddress,
519 - isFixedRate: isFixedRateMode);
521 + fromCurrency: depositCurrency,
522 + toCurrency: receiveCurrency,
523 + fromAmount: depositAmount.replaceAll(',', '.'),
524 + toAmount: receiveAmount.replaceAll(',', '.'),
525 + refundAddress: depositAddress,
526 + toAddress: receiveAddress,
527 + isFixedRate: isFixedRateMode,
528 + );
529
530 var amount = isFixedRateMode ? receiveAmount : depositAmount;
531 amount = amount.replaceAll(',', '.');
res/values/strings_ar.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "ﺔﻠﻣﺎﻌﻤﻟﺍ ﻊﻴﻗﻮﺗ ءﺎﻨﺛﺃ ﺄﻄﺧ ﺙﺪﺣ",
268 "estimated": "مُقدَّر",
269 "estimated_new_fee": "رسوم جديدة مقدرة",
270 + "estimated_receive_amount": "مقدرة المبلغ الاستقبال",
271 "etherscan_history": "Etherscan تاريخ",
272 "event": "ﺙﺪﺣ",
273 "events": "ﺙﺍﺪﺣﻷﺍ",
res/values/strings_bg.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "Възникна грешка при подписване на транзакция",
268 "estimated": "Изчислено",
269 "estimated_new_fee": "Прогнозна нова такса",
270 + "estimated_receive_amount": "Прогнозна сума за получаване",
271 "etherscan_history": "История на Etherscan",
272 "event": "Събитие",
273 "events": "събития",
res/values/strings_cs.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "Při podepisování transakce došlo k chybě",
268 "estimated": "Odhadováno",
269 "estimated_new_fee": "Odhadovaný nový poplatek",
270 + "estimated_receive_amount": "Odhadovaná částka přijímání",
271 "etherscan_history": "Historie Etherscanu",
272 "event": "událost",
273 "events": "Události",
res/values/strings_de.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "Beim Signieren der Transaktion ist ein Fehler aufgetreten",
268 "estimated": "Geschätzt",
269 "estimated_new_fee": "Geschätzte neue Gebühr",
270 + "estimated_receive_amount": "Geschätzter Empfangsbetrag",
271 "etherscan_history": "Etherscan-Geschichte",
272 "event": "Ereignis",
273 "events": "Veranstaltungen",
res/values/strings_en.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "An error has occured while signing transaction",
268 "estimated": "Estimated",
269 "estimated_new_fee": "Estimated new fee",
270 + "estimated_receive_amount": "Estimated receive amount",
271 "etherscan_history": "Etherscan history",
272 "event": "Event",
273 "events": "Events",
res/values/strings_es.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "Se ha producido un error al firmar la transacción.",
268 "estimated": "Estimado",
269 "estimated_new_fee": "Nueva tarifa estimada",
270 + "estimated_receive_amount": "Cantidad de recepción estimada",
271 "etherscan_history": "historia de etherscan",
272 "event": "Evento",
273 "events": "Eventos",
res/values/strings_fr.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "Une erreur s'est produite lors de la signature de la transaction",
268 "estimated": "Estimé",
269 "estimated_new_fee": "De nouveaux frais estimés",
270 + "estimated_receive_amount": "Recevoir estimé le montant",
271 "etherscan_history": "Historique Etherscan",
272 "event": "Événement",
273 "events": "Événements",
res/values/strings_ha.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "An sami kuskure yayin sanya hannu kan ciniki",
268 "estimated": "Kiyasta",
269 "estimated_new_fee": "An kiyasta sabon kudin",
270 + "estimated_receive_amount": "Kiyasta samun adadin",
271 "etherscan_history": "Etherscan tarihin kowane zamani",
272 "event": "Lamarin",
273 "events": "Abubuwan da suka faru",
res/values/strings_hi.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "लेन-देन पर हस्ताक्षर करते समय एक त्रुटि उत्पन्न हुई है",
268 "estimated": "अनुमानित",
269 "estimated_new_fee": "अनुमानित नया शुल्क",
270 + "estimated_receive_amount": "अनुमानित राशि",
271 "etherscan_history": "इथरस्कैन इतिहास",
272 "event": "आयोजन",
273 "events": "आयोजन",
res/values/strings_hr.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "Došlo je do pogreške prilikom potpisivanja transakcije",
268 "estimated": "procijenjen",
269 "estimated_new_fee": "Procijenjena nova naknada",
270 + "estimated_receive_amount": "Procijenjeni iznos primanja",
271 "etherscan_history": "Etherscan povijest",
272 "event": "Događaj",
273 "events": "Događaji",
res/values/strings_id.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "Terjadi kesalahan saat menandatangani transaksi",
268 "estimated": "Diperkirakan",
269 "estimated_new_fee": "Perkiraan biaya baru",
270 + "estimated_receive_amount": "Diperkirakan jumlah menerima",
271 "etherscan_history": "Sejarah Etherscan",
272 "event": "Peristiwa",
273 "events": "Acara",
res/values/strings_it.arb
+1
@@ -268,6 +268,7 @@
268 "errorSigningTransaction": "Si è verificato un errore durante la firma della transazione",
269 "estimated": "Stimato",
270 "estimated_new_fee": "Nuova commissione stimata",
271 + "estimated_receive_amount": "Importo di ricezione stimato",
272 "etherscan_history": "Storia Etherscan",
273 "event": "Evento",
274 "events": "Eventi",
res/values/strings_ja.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "トランザクションの署名中にエラーが発生しました",
268 "estimated": "推定",
269 "estimated_new_fee": "推定新しい料金",
270 + "estimated_receive_amount": "推定受信金額",
271 "etherscan_history": "イーサスキャンの歴史",
272 "event": "イベント",
273 "events": "イベント",
res/values/strings_ko.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "거래에 서명하는 동안 오류가 발생했습니다.",
268 "estimated": "예상",
269 "estimated_new_fee": "예상 새로운 수수료",
270 + "estimated_receive_amount": "예상 수신 금액",
271 "etherscan_history": "이더스캔 역사",
272 "event": "이벤트",
273 "events": "이벤트",
res/values/strings_my.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "ငွေပေးငွေယူ လက်မှတ်ထိုးစဉ် အမှားအယွင်းတစ်ခု ဖြစ်ပေါ်ခဲ့သည်။",
268 "estimated": "ခန့်မှန်း",
269 "estimated_new_fee": "ခန့်မှန်းသစ်ခန့်မှန်း",
270 + "estimated_receive_amount": "ခန့်မှန်းရရှိသောပမာဏ",
271 "etherscan_history": "Etherscan သမိုင်း",
272 "event": "ပွဲ",
273 "events": "အဲ့ဒါနဲ့",
res/values/strings_nl.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "Er is een fout opgetreden tijdens het ondertekenen van de transactie",
268 "estimated": "Geschatte",
269 "estimated_new_fee": "Geschatte nieuwe vergoeding",
270 + "estimated_receive_amount": "Geschat ontvangen bedrag",
271 "etherscan_history": "Etherscan-geschiedenis",
272 "event": "Evenement",
273 "events": "Evenementen",
res/values/strings_pl.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "Wystąpił błąd podczas podpisywania transakcji",
268 "estimated": "Oszacowano",
269 "estimated_new_fee": "Szacowana nowa opłata",
270 + "estimated_receive_amount": "Szacowana kwota otrzymania",
271 "etherscan_history": "Historia Etherscanu",
272 "event": "Wydarzenie",
273 "events": "Wydarzenia",
res/values/strings_pt.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "Ocorreu um erro ao assinar a transação",
268 "estimated": "Estimado",
269 "estimated_new_fee": "Nova taxa estimada",
270 + "estimated_receive_amount": "Valor estimado de recebimento",
271 "etherscan_history": "história Etherscan",
272 "event": "Evento",
273 "events": "Eventos",
res/values/strings_ru.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "Произошла ошибка при подписании транзакции",
268 "estimated": "Примерно",
269 "estimated_new_fee": "Расчетная новая плата",
270 + "estimated_receive_amount": "Расчетная сумма получения",
271 "etherscan_history": "История Эфириума",
272 "event": "Событие",
273 "events": "События",
res/values/strings_th.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "เกิดข้อผิดพลาดขณะลงนามธุรกรรม",
268 "estimated": "ประมาณการ",
269 "estimated_new_fee": "ค่าธรรมเนียมใหม่โดยประมาณ",
270 + "estimated_receive_amount": "โดยประมาณว่าจำนวนเงินที่ได้รับ",
271 "etherscan_history": "ประวัติอีเธอร์สแกน",
272 "event": "เหตุการณ์",
273 "events": "กิจกรรม",
res/values/strings_tl.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "May naganap na error habang pinipirmahan ang transaksyon",
268 "estimated": "Tinatayang",
269 "estimated_new_fee": "Tinatayang bagong bayad",
270 + "estimated_receive_amount": "Tinatayang natanggap na halaga",
271 "etherscan_history": "Kasaysayan ng Etherscan",
272 "event": "Kaganapan",
273 "events": "Mga kaganapan",
res/values/strings_tr.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "İşlem imzalanırken bir hata oluştu",
268 "estimated": "Tahmini",
269 "estimated_new_fee": "Tahmini yeni ücret",
270 + "estimated_receive_amount": "Tahmini alma miktarı",
271 "etherscan_history": "Etherscan geçmişi",
272 "event": "Etkinlik",
273 "events": "Olaylar",
res/values/strings_uk.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "Під час підписання транзакції сталася помилка",
268 "estimated": "Приблизно ",
269 "estimated_new_fee": "Орієнтовна нова комісія",
270 + "estimated_receive_amount": "Орієнтовна сума отримує",
271 "etherscan_history": "Історія Etherscan",
272 "event": "Подія",
273 "events": "Події",
res/values/strings_ur.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "۔ﮯﮨ ﯽﺌﮔﺁ ﺶﯿﭘ ﯽﺑﺍﺮﺧ ﮏﯾﺍ ﺖﻗﻭ ﮯﺗﺮﮐ ﻂﺨﺘﺳﺩ ﺮﭘ ﻦﯾﺩ ﻦﯿﻟ",
268 "estimated": "تخمینہ لگایا",
269 "estimated_new_fee": "تخمینہ شدہ نئی فیس",
270 + "estimated_receive_amount": "تخمینہ وصول کی رقم",
271 "etherscan_history": "ﺦﯾﺭﺎﺗ ﯽﮐ ﻦﯿﮑﺳﺍ ﺮﮭﺘﯾﺍ",
272 "event": "ﺐﯾﺮﻘﺗ",
273 "events": "ﺕﺎﺒﯾﺮﻘﺗ",
res/values/strings_yo.arb
+1
@@ -268,6 +268,7 @@
268 "errorSigningTransaction": "Aṣiṣe kan ti waye lakoko ti o fowo si iṣowo",
269 "estimated": "Ó tó a fojú díwọ̀n",
270 "estimated_new_fee": "Ifoju tuntun owo tuntun",
271 + "estimated_receive_amount": "Ifoju gba iye",
272 "etherscan_history": "Etherscan itan",
273 "event": "Iṣẹlẹ",
274 "events": "Awọn iṣẹlẹ",
res/values/strings_zh.arb
+1
@@ -267,6 +267,7 @@
267 "errorSigningTransaction": "签署交易时发生错误",
268 "estimated": "估计值",
269 "estimated_new_fee": "估计新费用",
270 + "estimated_receive_amount": "估计接收金额",
271 "etherscan_history": "以太扫描历史",
272 "event": "事件",
273 "events": "活动",