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": "活动",