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
This commit is contained in:
David Adegoke 2024-07-23 01:20:55 +01:00 committed by GitHub
parent 1b109ac702
commit 5c9f176d18
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
38 changed files with 174 additions and 122 deletions

View file

@ -8,36 +8,6 @@ PODS:
- Flutter - Flutter
- ReachabilitySwift - ReachabilitySwift
- CryptoSwift (1.8.2) - CryptoSwift (1.8.2)
- cw_haven (0.0.1):
- cw_haven/Boost (= 0.0.1)
- cw_haven/Haven (= 0.0.1)
- cw_haven/OpenSSL (= 0.0.1)
- cw_haven/Sodium (= 0.0.1)
- cw_shared_external
- Flutter
- cw_haven/Boost (0.0.1):
- cw_shared_external
- Flutter
- cw_haven/Haven (0.0.1):
- cw_shared_external
- Flutter
- cw_haven/OpenSSL (0.0.1):
- cw_shared_external
- Flutter
- cw_haven/Sodium (0.0.1):
- cw_shared_external
- Flutter
- cw_shared_external (0.0.1):
- cw_shared_external/Boost (= 0.0.1)
- cw_shared_external/OpenSSL (= 0.0.1)
- cw_shared_external/Sodium (= 0.0.1)
- Flutter
- cw_shared_external/Boost (0.0.1):
- Flutter
- cw_shared_external/OpenSSL (0.0.1):
- Flutter
- cw_shared_external/Sodium (0.0.1):
- Flutter
- device_display_brightness (0.0.1): - device_display_brightness (0.0.1):
- Flutter - Flutter
- device_info_plus (0.0.1): - device_info_plus (0.0.1):
@ -145,8 +115,6 @@ DEPENDENCIES:
- barcode_scan2 (from `.symlinks/plugins/barcode_scan2/ios`) - barcode_scan2 (from `.symlinks/plugins/barcode_scan2/ios`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
- CryptoSwift - CryptoSwift
- cw_haven (from `.symlinks/plugins/cw_haven/ios`)
- cw_shared_external (from `.symlinks/plugins/cw_shared_external/ios`)
- device_display_brightness (from `.symlinks/plugins/device_display_brightness/ios`) - device_display_brightness (from `.symlinks/plugins/device_display_brightness/ios`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- devicelocale (from `.symlinks/plugins/devicelocale/ios`) - devicelocale (from `.symlinks/plugins/devicelocale/ios`)
@ -194,10 +162,6 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/barcode_scan2/ios" :path: ".symlinks/plugins/barcode_scan2/ios"
connectivity_plus: connectivity_plus:
:path: ".symlinks/plugins/connectivity_plus/ios" :path: ".symlinks/plugins/connectivity_plus/ios"
cw_haven:
:path: ".symlinks/plugins/cw_haven/ios"
cw_shared_external:
:path: ".symlinks/plugins/cw_shared_external/ios"
device_display_brightness: device_display_brightness:
:path: ".symlinks/plugins/device_display_brightness/ios" :path: ".symlinks/plugins/device_display_brightness/ios"
device_info_plus: device_info_plus:
@ -252,8 +216,6 @@ SPEC CHECKSUMS:
BigInt: f668a80089607f521586bbe29513d708491ef2f7 BigInt: f668a80089607f521586bbe29513d708491ef2f7
connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d
CryptoSwift: c63a805d8bb5e5538e88af4e44bb537776af11ea CryptoSwift: c63a805d8bb5e5538e88af4e44bb537776af11ea
cw_haven: b3e54e1fbe7b8e6fda57a93206bc38f8e89b898a
cw_shared_external: 2972d872b8917603478117c9957dfca611845a92
device_display_brightness: 1510e72c567a1f6ce6ffe393dcd9afd1426034f7 device_display_brightness: 1510e72c567a1f6ce6ffe393dcd9afd1426034f7
device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6 device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6
devicelocale: b22617f40038496deffba44747101255cee005b0 devicelocale: b22617f40038496deffba44747101255cee005b0

View file

@ -391,7 +391,14 @@ Future<void> ios_migrate_trades_list(Box<Trade> tradeSource) async {
} }
return Trade( return Trade(
id: tradeId, provider: provider!, from: from, to: to, createdAt: date, amount: ''); id: tradeId,
provider: provider!,
from: from,
to: to,
createdAt: date,
amount: '',
receiveAmount: '',
);
}); });
await tradeSource.addAll(trades); await tradeSource.addAll(trades);
await prefs.setBool('ios_migration_trade_list_completed', true); await prefs.setBool('ios_migration_trade_list_completed', true);

View file

@ -194,20 +194,24 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
final refundAddress = responseJSON['refundAddress'] as String; final refundAddress = responseJSON['refundAddress'] as String;
final extraId = responseJSON['payinExtraId'] as String?; final extraId = responseJSON['payinExtraId'] as String?;
final payoutAddress = responseJSON['payoutAddress'] as String; final payoutAddress = responseJSON['payoutAddress'] as String;
final fromAmount = responseJSON['fromAmount']?.toString();
final toAmount = responseJSON['toAmount']?.toString();
return Trade( return Trade(
id: id, id: id,
from: request.fromCurrency, from: request.fromCurrency,
to: request.toCurrency, to: request.toCurrency,
provider: description, provider: description,
inputAddress: inputAddress, inputAddress: inputAddress,
refundAddress: refundAddress, refundAddress: refundAddress,
extraId: extraId, extraId: extraId,
createdAt: DateTime.now(), createdAt: DateTime.now(),
amount: responseJSON['fromAmount']?.toString() ?? request.fromAmount, amount: fromAmount ?? request.fromAmount,
state: TradeState.created, receiveAmount: toAmount ?? request.toAmount,
payoutAddress: payoutAddress, state: TradeState.created,
isSendAll: isSendAll); payoutAddress: payoutAddress,
isSendAll: isSendAll,
);
} }
@override @override

View file

@ -172,20 +172,23 @@ class ExolixExchangeProvider extends ExchangeProvider {
final extraId = responseJSON['depositExtraId'] as String?; final extraId = responseJSON['depositExtraId'] as String?;
final payoutAddress = responseJSON['withdrawalAddress'] as String; final payoutAddress = responseJSON['withdrawalAddress'] as String;
final amount = responseJSON['amount'].toString(); final amount = responseJSON['amount'].toString();
final receiveAmount = responseJSON['amountTo']?.toString();
return Trade( return Trade(
id: id, id: id,
from: request.fromCurrency, from: request.fromCurrency,
to: request.toCurrency, to: request.toCurrency,
provider: description, provider: description,
inputAddress: inputAddress, inputAddress: inputAddress,
refundAddress: refundAddress, refundAddress: refundAddress,
extraId: extraId, extraId: extraId,
createdAt: DateTime.now(), createdAt: DateTime.now(),
amount: amount, amount: amount,
state: TradeState.created, receiveAmount:receiveAmount ?? request.toAmount,
payoutAddress: payoutAddress, state: TradeState.created,
isSendAll: isSendAll); payoutAddress: payoutAddress,
isSendAll: isSendAll,
);
} }
@override @override

View file

@ -162,11 +162,13 @@ class QuantexExchangeProvider extends ExchangeProvider {
throw Exception('Unexpected http status: ${response.statusCode}'); throw Exception('Unexpected http status: ${response.statusCode}');
final responseData = responseBody['data'] as Map<String, dynamic>; final responseData = responseBody['data'] as Map<String, dynamic>;
final receiveAmount = responseData["amount_receive"]?.toString();
return Trade( return Trade(
id: responseData["order_id"] as String, id: responseData["order_id"] as String,
inputAddress: responseData["server_address"] as String, inputAddress: responseData["server_address"] as String,
amount: request.fromAmount, amount: request.fromAmount,
receiveAmount: receiveAmount ?? request.toAmount,
from: request.fromCurrency, from: request.fromCurrency,
to: request.toCurrency, to: request.toCurrency,
provider: description, provider: description,

View file

@ -213,6 +213,7 @@ class SideShiftExchangeProvider extends ExchangeProvider {
refundAddress: settleAddress, refundAddress: settleAddress,
state: TradeState.created, state: TradeState.created,
amount: depositAmount ?? request.fromAmount, amount: depositAmount ?? request.fromAmount,
receiveAmount: request.toAmount,
payoutAddress: settleAddress, payoutAddress: settleAddress,
createdAt: DateTime.now(), createdAt: DateTime.now(),
isSendAll: isSendAll, isSendAll: isSendAll,

View file

@ -153,6 +153,7 @@ class SimpleSwapExchangeProvider extends ExchangeProvider {
final payoutAddress = responseJSON['address_to'] as String; final payoutAddress = responseJSON['address_to'] as String;
final settleAddress = responseJSON['user_refund_address'] as String; final settleAddress = responseJSON['user_refund_address'] as String;
final extraId = responseJSON['extra_id_from'] as String?; final extraId = responseJSON['extra_id_from'] as String?;
final receiveAmount = responseJSON['amount_to'] as String?;
return Trade( return Trade(
id: id, id: id,
@ -164,6 +165,7 @@ class SimpleSwapExchangeProvider extends ExchangeProvider {
extraId: extraId, extraId: extraId,
state: TradeState.created, state: TradeState.created,
amount: request.fromAmount, amount: request.fromAmount,
receiveAmount: receiveAmount ?? request.toAmount,
payoutAddress: payoutAddress, payoutAddress: payoutAddress,
createdAt: DateTime.now(), createdAt: DateTime.now(),
isSendAll: isSendAll, isSendAll: isSendAll,

View file

@ -40,7 +40,7 @@ class ThorChainExchangeProvider extends ExchangeProvider {
static const _txInfoPath = '/thorchain/tx/status/'; static const _txInfoPath = '/thorchain/tx/status/';
static const _affiliateName = 'cakewallet'; static const _affiliateName = 'cakewallet';
static const _affiliateBps = '175'; static const _affiliateBps = '175';
static const _nameLookUpPath= 'v2/thorname/lookup/'; static const _nameLookUpPath = 'v2/thorname/lookup/';
final Box<Trade> tradesStore; final Box<Trade> tradesStore;
@ -137,19 +137,27 @@ class ThorChainExchangeProvider extends ExchangeProvider {
final inputAddress = responseJSON['inbound_address'] as String?; final inputAddress = responseJSON['inbound_address'] as String?;
final memo = responseJSON['memo'] as String?; final memo = responseJSON['memo'] as String?;
final directAmountOutResponse = responseJSON['expected_amount_out'] as String?;
String? receiveAmount;
if (directAmountOutResponse != null) {
receiveAmount = _thorChainAmountToDouble(directAmountOutResponse).toString();
}
return Trade( return Trade(
id: '', id: '',
from: request.fromCurrency, from: request.fromCurrency,
to: request.toCurrency, to: request.toCurrency,
provider: description, provider: description,
inputAddress: inputAddress, inputAddress: inputAddress,
createdAt: DateTime.now(), createdAt: DateTime.now(),
amount: request.fromAmount, amount: request.fromAmount,
state: TradeState.notFound, receiveAmount: receiveAmount ?? request.toAmount,
payoutAddress: request.toAddress, state: TradeState.notFound,
memo: memo, payoutAddress: request.toAddress,
isSendAll: isSendAll); memo: memo,
isSendAll: isSendAll,
);
} }
@override @override
@ -234,7 +242,6 @@ class ThorChainExchangeProvider extends ExchangeProvider {
return chainToAddressMap; return chainToAddressMap;
} }
Future<Map<String, dynamic>> _getSwapQuote(Map<String, String> params) async { Future<Map<String, dynamic>> _getSwapQuote(Map<String, String> params) async {
Uri uri = Uri.https(_baseNodeURL, _quotePath, params); Uri uri = Uri.https(_baseNodeURL, _quotePath, params);

View file

@ -224,22 +224,26 @@ class TrocadorExchangeProvider extends ExchangeProvider {
final password = responseJSON['password'] as String; final password = responseJSON['password'] as String;
final providerId = responseJSON['id_provider'] as String; final providerId = responseJSON['id_provider'] as String;
final providerName = responseJSON['provider'] as String; final providerName = responseJSON['provider'] as String;
final amount = responseJSON['amount_from']?.toString();
final receiveAmount = responseJSON['amount_to']?.toString();
return Trade( return Trade(
id: id, id: id,
from: request.fromCurrency, from: request.fromCurrency,
to: request.toCurrency, to: request.toCurrency,
provider: description, provider: description,
inputAddress: inputAddress, inputAddress: inputAddress,
refundAddress: refundAddress, refundAddress: refundAddress,
state: TradeState.deserialize(raw: status), state: TradeState.deserialize(raw: status),
password: password, password: password,
providerId: providerId, providerId: providerId,
providerName: providerName, providerName: providerName,
createdAt: DateTime.tryParse(date)?.toLocal(), createdAt: DateTime.tryParse(date)?.toLocal(),
amount: responseJSON['amount_from']?.toString() ?? request.fromAmount, amount: amount ?? request.fromAmount,
payoutAddress: payoutAddress, receiveAmount: receiveAmount ?? request.toAmount,
isSendAll: isSendAll); payoutAddress: payoutAddress,
isSendAll: isSendAll,
);
} }
@override @override

View file

@ -13,6 +13,7 @@ class Trade extends HiveObject {
CryptoCurrency? from, CryptoCurrency? from,
CryptoCurrency? to, CryptoCurrency? to,
TradeState? state, TradeState? state,
this.receiveAmount,
this.createdAt, this.createdAt,
this.expiredAt, this.expiredAt,
this.inputAddress, this.inputAddress,
@ -122,6 +123,9 @@ class Trade extends HiveObject {
@HiveField(22) @HiveField(22)
String? router; String? router;
@HiveField(23, defaultValue: '')
String? receiveAmount;
static Trade fromMap(Map<String, Object?> map) { static Trade fromMap(Map<String, Object?> map) {
return Trade( return Trade(
id: map['id'] as String, id: map['id'] as String,
@ -131,6 +135,7 @@ class Trade extends HiveObject {
createdAt: createdAt:
map['date'] != null ? DateTime.fromMillisecondsSinceEpoch(map['date'] as int) : null, map['date'] != null ? DateTime.fromMillisecondsSinceEpoch(map['date'] as int) : null,
amount: map['amount'] as String, amount: map['amount'] as String,
receiveAmount: map['receive_amount'] as String?,
walletId: map['wallet_id'] as String, walletId: map['wallet_id'] as String,
fromWalletAddress: map['from_wallet_address'] as String?, fromWalletAddress: map['from_wallet_address'] as String?,
memo: map['memo'] as String?, memo: map['memo'] as String?,
@ -149,6 +154,7 @@ class Trade extends HiveObject {
'output': to.serialize(), 'output': to.serialize(),
'date': createdAt != null ? createdAt!.millisecondsSinceEpoch : null, 'date': createdAt != null ? createdAt!.millisecondsSinceEpoch : null,
'amount': amount, 'amount': amount,
'receive_amount': receiveAmount,
'wallet_id': walletId, 'wallet_id': walletId,
'from_wallet_address': fromWalletAddress, 'from_wallet_address': fromWalletAddress,
'memo': memo, 'memo': memo,
@ -179,6 +185,7 @@ class TradeAdapter extends TypeAdapter<Trade> {
return Trade( return Trade(
id: fields[0] == null ? '' : fields[0] as String, id: fields[0] == null ? '' : fields[0] as String,
amount: fields[7] == null ? '' : fields[7] as String, amount: fields[7] == null ? '' : fields[7] as String,
receiveAmount: fields[23] as String?,
createdAt: fields[5] as DateTime?, createdAt: fields[5] as DateTime?,
expiredAt: fields[6] as DateTime?, expiredAt: fields[6] as DateTime?,
inputAddress: fields[8] as String?, inputAddress: fields[8] as String?,
@ -206,7 +213,7 @@ class TradeAdapter extends TypeAdapter<Trade> {
@override @override
void write(BinaryWriter writer, Trade obj) { void write(BinaryWriter writer, Trade obj) {
writer writer
..writeByte(23) ..writeByte(24)
..writeByte(0) ..writeByte(0)
..write(obj.id) ..write(obj.id)
..writeByte(1) ..writeByte(1)
@ -252,7 +259,9 @@ class TradeAdapter extends TypeAdapter<Trade> {
..writeByte(21) ..writeByte(21)
..write(obj.isSendAll) ..write(obj.isSendAll)
..writeByte(22) ..writeByte(22)
..write(obj.router); ..write(obj.router)
..writeByte(23)
..write(obj.receiveAmount);
} }
@override @override

View file

@ -147,8 +147,13 @@ abstract class ExchangeTradeViewModelBase with Store {
items.clear(); items.clear();
if (trade.provider != ExchangeProviderDescription.thorChain) if (trade.provider != ExchangeProviderDescription.thorChain)
items.add(ExchangeTradeItem( items.add(
title: "${trade.provider.title} ${S.current.id}", data: '${trade.id}', isCopied: true)); ExchangeTradeItem(
title: "${trade.provider.title} ${S.current.id}",
data: '${trade.id}',
isCopied: true,
),
);
if (trade.extraId != null) { if (trade.extraId != null) {
final title = trade.from == CryptoCurrency.xrp final title = trade.from == CryptoCurrency.xrp
@ -161,15 +166,26 @@ abstract class ExchangeTradeViewModelBase with Store {
} }
items.addAll([ items.addAll([
ExchangeTradeItem(title: S.current.amount, data: '${trade.amount}', isCopied: true),
ExchangeTradeItem( ExchangeTradeItem(
title: S.current.send_to_this_address('${tradesStore.trade!.from}', tagFrom) + ':', title: S.current.amount,
data: trade.inputAddress ?? '', data: '${trade.amount} ${trade.from}',
isCopied: true), isCopied: true,
),
ExchangeTradeItem( ExchangeTradeItem(
title: S.current.arrive_in_this_address('${tradesStore.trade!.to}', tagTo) + ':', title: S.current.estimated_receive_amount +':',
data: trade.payoutAddress ?? '', data: '${tradesStore.trade?.receiveAmount} ${trade.to}',
isCopied: true), isCopied: true,
),
ExchangeTradeItem(
title: S.current.send_to_this_address('${tradesStore.trade!.from}', tagFrom) + ':',
data: trade.inputAddress ?? '',
isCopied: true,
),
ExchangeTradeItem(
title: S.current.arrive_in_this_address('${tradesStore.trade!.to}', tagTo) + ':',
data: trade.payoutAddress ?? '',
isCopied: true,
),
]); ]);
} }

View file

@ -450,19 +450,21 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
double? highestMax = 0.0; double? highestMax = 0.0;
try { try {
final result = await Future.wait(selectedProviders final result = await Future.wait(
.where((element) => providersForCurrentPair().contains(provider)) selectedProviders.where((provider) => providersForCurrentPair().contains(provider)).map(
.map((provider) => provider (provider) => provider
.fetchLimits( .fetchLimits(
from: from, from: from,
to: to, to: to,
isFixedRateMode: isFixedRateMode, isFixedRateMode: isFixedRateMode,
) )
.onError((error, stackTrace) => Limits(max: 0.0, min: double.maxFinite)) .onError((error, stackTrace) => Limits(max: 0.0, min: double.maxFinite))
.timeout( .timeout(
Duration(seconds: 7), Duration(seconds: 7),
onTimeout: () => Limits(max: 0.0, min: double.maxFinite), onTimeout: () => Limits(max: 0.0, min: double.maxFinite),
))); ),
),
);
result.forEach((tempLimits) { result.forEach((tempLimits) {
if (lowestMin != null && (tempLimits.min ?? -1) < lowestMin!) { if (lowestMin != null && (tempLimits.min ?? -1) < lowestMin!) {
@ -506,17 +508,24 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
} }
try { try {
for (var provider in _sortedAvailableProviders.values) { for (var i = 0; i < _sortedAvailableProviders.values.length; i++) {
final provider = _sortedAvailableProviders.values.toList()[i];
final providerRate = _sortedAvailableProviders.keys.toList()[i];
if (!(await provider.checkIsAvailable())) continue; if (!(await provider.checkIsAvailable())) continue;
_bestRate = providerRate;
await changeDepositAmount(amount: depositAmount);
final request = TradeRequest( final request = TradeRequest(
fromCurrency: depositCurrency, fromCurrency: depositCurrency,
toCurrency: receiveCurrency, toCurrency: receiveCurrency,
fromAmount: depositAmount.replaceAll(',', '.'), fromAmount: depositAmount.replaceAll(',', '.'),
toAmount: receiveAmount.replaceAll(',', '.'), toAmount: receiveAmount.replaceAll(',', '.'),
refundAddress: depositAddress, refundAddress: depositAddress,
toAddress: receiveAddress, toAddress: receiveAddress,
isFixedRate: isFixedRateMode); isFixedRate: isFixedRateMode,
);
var amount = isFixedRateMode ? receiveAmount : depositAmount; var amount = isFixedRateMode ? receiveAmount : depositAmount;
amount = amount.replaceAll(',', '.'); amount = amount.replaceAll(',', '.');

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "ﺔﻠﻣﺎﻌﻤﻟﺍ ﻊﻴﻗﻮﺗ ءﺎﻨﺛﺃ ﺄﻄﺧ ﺙﺪﺣ", "errorSigningTransaction": "ﺔﻠﻣﺎﻌﻤﻟﺍ ﻊﻴﻗﻮﺗ ءﺎﻨﺛﺃ ﺄﻄﺧ ﺙﺪﺣ",
"estimated": "مُقدَّر", "estimated": "مُقدَّر",
"estimated_new_fee": "رسوم جديدة مقدرة", "estimated_new_fee": "رسوم جديدة مقدرة",
"estimated_receive_amount": "مقدرة المبلغ الاستقبال",
"etherscan_history": "Etherscan تاريخ", "etherscan_history": "Etherscan تاريخ",
"event": "ﺙﺪﺣ", "event": "ﺙﺪﺣ",
"events": "ﺙﺍﺪﺣﻷﺍ", "events": "ﺙﺍﺪﺣﻷﺍ",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "Възникна грешка при подписване на транзакция", "errorSigningTransaction": "Възникна грешка при подписване на транзакция",
"estimated": "Изчислено", "estimated": "Изчислено",
"estimated_new_fee": "Прогнозна нова такса", "estimated_new_fee": "Прогнозна нова такса",
"estimated_receive_amount": "Прогнозна сума за получаване",
"etherscan_history": "История на Etherscan", "etherscan_history": "История на Etherscan",
"event": "Събитие", "event": "Събитие",
"events": "събития", "events": "събития",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "Při podepisování transakce došlo k chybě", "errorSigningTransaction": "Při podepisování transakce došlo k chybě",
"estimated": "Odhadováno", "estimated": "Odhadováno",
"estimated_new_fee": "Odhadovaný nový poplatek", "estimated_new_fee": "Odhadovaný nový poplatek",
"estimated_receive_amount": "Odhadovaná částka přijímání",
"etherscan_history": "Historie Etherscanu", "etherscan_history": "Historie Etherscanu",
"event": "událost", "event": "událost",
"events": "Události", "events": "Události",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "Beim Signieren der Transaktion ist ein Fehler aufgetreten", "errorSigningTransaction": "Beim Signieren der Transaktion ist ein Fehler aufgetreten",
"estimated": "Geschätzt", "estimated": "Geschätzt",
"estimated_new_fee": "Geschätzte neue Gebühr", "estimated_new_fee": "Geschätzte neue Gebühr",
"estimated_receive_amount": "Geschätzter Empfangsbetrag",
"etherscan_history": "Etherscan-Geschichte", "etherscan_history": "Etherscan-Geschichte",
"event": "Ereignis", "event": "Ereignis",
"events": "Veranstaltungen", "events": "Veranstaltungen",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "An error has occured while signing transaction", "errorSigningTransaction": "An error has occured while signing transaction",
"estimated": "Estimated", "estimated": "Estimated",
"estimated_new_fee": "Estimated new fee", "estimated_new_fee": "Estimated new fee",
"estimated_receive_amount": "Estimated receive amount",
"etherscan_history": "Etherscan history", "etherscan_history": "Etherscan history",
"event": "Event", "event": "Event",
"events": "Events", "events": "Events",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "Se ha producido un error al firmar la transacción.", "errorSigningTransaction": "Se ha producido un error al firmar la transacción.",
"estimated": "Estimado", "estimated": "Estimado",
"estimated_new_fee": "Nueva tarifa estimada", "estimated_new_fee": "Nueva tarifa estimada",
"estimated_receive_amount": "Cantidad de recepción estimada",
"etherscan_history": "historia de etherscan", "etherscan_history": "historia de etherscan",
"event": "Evento", "event": "Evento",
"events": "Eventos", "events": "Eventos",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "Une erreur s'est produite lors de la signature de la transaction", "errorSigningTransaction": "Une erreur s'est produite lors de la signature de la transaction",
"estimated": "Estimé", "estimated": "Estimé",
"estimated_new_fee": "De nouveaux frais estimés", "estimated_new_fee": "De nouveaux frais estimés",
"estimated_receive_amount": "Recevoir estimé le montant",
"etherscan_history": "Historique Etherscan", "etherscan_history": "Historique Etherscan",
"event": "Événement", "event": "Événement",
"events": "Événements", "events": "Événements",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "An sami kuskure yayin sanya hannu kan ciniki", "errorSigningTransaction": "An sami kuskure yayin sanya hannu kan ciniki",
"estimated": "Kiyasta", "estimated": "Kiyasta",
"estimated_new_fee": "An kiyasta sabon kudin", "estimated_new_fee": "An kiyasta sabon kudin",
"estimated_receive_amount": "Kiyasta samun adadin",
"etherscan_history": "Etherscan tarihin kowane zamani", "etherscan_history": "Etherscan tarihin kowane zamani",
"event": "Lamarin", "event": "Lamarin",
"events": "Abubuwan da suka faru", "events": "Abubuwan da suka faru",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "लेन-देन पर हस्ताक्षर करते समय एक त्रुटि उत्पन्न हुई है", "errorSigningTransaction": "लेन-देन पर हस्ताक्षर करते समय एक त्रुटि उत्पन्न हुई है",
"estimated": "अनुमानित", "estimated": "अनुमानित",
"estimated_new_fee": "अनुमानित नया शुल्क", "estimated_new_fee": "अनुमानित नया शुल्क",
"estimated_receive_amount": "अनुमानित राशि",
"etherscan_history": "इथरस्कैन इतिहास", "etherscan_history": "इथरस्कैन इतिहास",
"event": "आयोजन", "event": "आयोजन",
"events": "आयोजन", "events": "आयोजन",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "Došlo je do pogreške prilikom potpisivanja transakcije", "errorSigningTransaction": "Došlo je do pogreške prilikom potpisivanja transakcije",
"estimated": "procijenjen", "estimated": "procijenjen",
"estimated_new_fee": "Procijenjena nova naknada", "estimated_new_fee": "Procijenjena nova naknada",
"estimated_receive_amount": "Procijenjeni iznos primanja",
"etherscan_history": "Etherscan povijest", "etherscan_history": "Etherscan povijest",
"event": "Događaj", "event": "Događaj",
"events": "Događaji", "events": "Događaji",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "Terjadi kesalahan saat menandatangani transaksi", "errorSigningTransaction": "Terjadi kesalahan saat menandatangani transaksi",
"estimated": "Diperkirakan", "estimated": "Diperkirakan",
"estimated_new_fee": "Perkiraan biaya baru", "estimated_new_fee": "Perkiraan biaya baru",
"estimated_receive_amount": "Diperkirakan jumlah menerima",
"etherscan_history": "Sejarah Etherscan", "etherscan_history": "Sejarah Etherscan",
"event": "Peristiwa", "event": "Peristiwa",
"events": "Acara", "events": "Acara",

View file

@ -268,6 +268,7 @@
"errorSigningTransaction": "Si è verificato un errore durante la firma della transazione", "errorSigningTransaction": "Si è verificato un errore durante la firma della transazione",
"estimated": "Stimato", "estimated": "Stimato",
"estimated_new_fee": "Nuova commissione stimata", "estimated_new_fee": "Nuova commissione stimata",
"estimated_receive_amount": "Importo di ricezione stimato",
"etherscan_history": "Storia Etherscan", "etherscan_history": "Storia Etherscan",
"event": "Evento", "event": "Evento",
"events": "Eventi", "events": "Eventi",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "トランザクションの署名中にエラーが発生しました", "errorSigningTransaction": "トランザクションの署名中にエラーが発生しました",
"estimated": "推定", "estimated": "推定",
"estimated_new_fee": "推定新しい料金", "estimated_new_fee": "推定新しい料金",
"estimated_receive_amount": "推定受信金額",
"etherscan_history": "イーサスキャンの歴史", "etherscan_history": "イーサスキャンの歴史",
"event": "イベント", "event": "イベント",
"events": "イベント", "events": "イベント",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "거래에 서명하는 동안 오류가 발생했습니다.", "errorSigningTransaction": "거래에 서명하는 동안 오류가 발생했습니다.",
"estimated": "예상", "estimated": "예상",
"estimated_new_fee": "예상 새로운 수수료", "estimated_new_fee": "예상 새로운 수수료",
"estimated_receive_amount": "예상 수신 금액",
"etherscan_history": "이더스캔 역사", "etherscan_history": "이더스캔 역사",
"event": "이벤트", "event": "이벤트",
"events": "이벤트", "events": "이벤트",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "ငွေပေးငွေယူ လက်မှတ်ထိုးစဉ် အမှားအယွင်းတစ်ခု ဖြစ်ပေါ်ခဲ့သည်။", "errorSigningTransaction": "ငွေပေးငွေယူ လက်မှတ်ထိုးစဉ် အမှားအယွင်းတစ်ခု ဖြစ်ပေါ်ခဲ့သည်။",
"estimated": "ခန့်မှန်း", "estimated": "ခန့်မှန်း",
"estimated_new_fee": "ခန့်မှန်းသစ်ခန့်မှန်း", "estimated_new_fee": "ခန့်မှန်းသစ်ခန့်မှန်း",
"estimated_receive_amount": "ခန့်မှန်းရရှိသောပမာဏ",
"etherscan_history": "Etherscan သမိုင်း", "etherscan_history": "Etherscan သမိုင်း",
"event": "ပွဲ", "event": "ပွဲ",
"events": "အဲ့ဒါနဲ့", "events": "အဲ့ဒါနဲ့",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "Er is een fout opgetreden tijdens het ondertekenen van de transactie", "errorSigningTransaction": "Er is een fout opgetreden tijdens het ondertekenen van de transactie",
"estimated": "Geschatte", "estimated": "Geschatte",
"estimated_new_fee": "Geschatte nieuwe vergoeding", "estimated_new_fee": "Geschatte nieuwe vergoeding",
"estimated_receive_amount": "Geschat ontvangen bedrag",
"etherscan_history": "Etherscan-geschiedenis", "etherscan_history": "Etherscan-geschiedenis",
"event": "Evenement", "event": "Evenement",
"events": "Evenementen", "events": "Evenementen",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "Wystąpił błąd podczas podpisywania transakcji", "errorSigningTransaction": "Wystąpił błąd podczas podpisywania transakcji",
"estimated": "Oszacowano", "estimated": "Oszacowano",
"estimated_new_fee": "Szacowana nowa opłata", "estimated_new_fee": "Szacowana nowa opłata",
"estimated_receive_amount": "Szacowana kwota otrzymania",
"etherscan_history": "Historia Etherscanu", "etherscan_history": "Historia Etherscanu",
"event": "Wydarzenie", "event": "Wydarzenie",
"events": "Wydarzenia", "events": "Wydarzenia",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "Ocorreu um erro ao assinar a transação", "errorSigningTransaction": "Ocorreu um erro ao assinar a transação",
"estimated": "Estimado", "estimated": "Estimado",
"estimated_new_fee": "Nova taxa estimada", "estimated_new_fee": "Nova taxa estimada",
"estimated_receive_amount": "Valor estimado de recebimento",
"etherscan_history": "história Etherscan", "etherscan_history": "história Etherscan",
"event": "Evento", "event": "Evento",
"events": "Eventos", "events": "Eventos",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "Произошла ошибка при подписании транзакции", "errorSigningTransaction": "Произошла ошибка при подписании транзакции",
"estimated": "Примерно", "estimated": "Примерно",
"estimated_new_fee": "Расчетная новая плата", "estimated_new_fee": "Расчетная новая плата",
"estimated_receive_amount": "Расчетная сумма получения",
"etherscan_history": "История Эфириума", "etherscan_history": "История Эфириума",
"event": "Событие", "event": "Событие",
"events": "События", "events": "События",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "เกิดข้อผิดพลาดขณะลงนามธุรกรรม", "errorSigningTransaction": "เกิดข้อผิดพลาดขณะลงนามธุรกรรม",
"estimated": "ประมาณการ", "estimated": "ประมาณการ",
"estimated_new_fee": "ค่าธรรมเนียมใหม่โดยประมาณ", "estimated_new_fee": "ค่าธรรมเนียมใหม่โดยประมาณ",
"estimated_receive_amount": "โดยประมาณว่าจำนวนเงินที่ได้รับ",
"etherscan_history": "ประวัติอีเธอร์สแกน", "etherscan_history": "ประวัติอีเธอร์สแกน",
"event": "เหตุการณ์", "event": "เหตุการณ์",
"events": "กิจกรรม", "events": "กิจกรรม",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "May naganap na error habang pinipirmahan ang transaksyon", "errorSigningTransaction": "May naganap na error habang pinipirmahan ang transaksyon",
"estimated": "Tinatayang", "estimated": "Tinatayang",
"estimated_new_fee": "Tinatayang bagong bayad", "estimated_new_fee": "Tinatayang bagong bayad",
"estimated_receive_amount": "Tinatayang natanggap na halaga",
"etherscan_history": "Kasaysayan ng Etherscan", "etherscan_history": "Kasaysayan ng Etherscan",
"event": "Kaganapan", "event": "Kaganapan",
"events": "Mga kaganapan", "events": "Mga kaganapan",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "İşlem imzalanırken bir hata oluştu", "errorSigningTransaction": "İşlem imzalanırken bir hata oluştu",
"estimated": "Tahmini", "estimated": "Tahmini",
"estimated_new_fee": "Tahmini yeni ücret", "estimated_new_fee": "Tahmini yeni ücret",
"estimated_receive_amount": "Tahmini alma miktarı",
"etherscan_history": "Etherscan geçmişi", "etherscan_history": "Etherscan geçmişi",
"event": "Etkinlik", "event": "Etkinlik",
"events": "Olaylar", "events": "Olaylar",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "Під час підписання транзакції сталася помилка", "errorSigningTransaction": "Під час підписання транзакції сталася помилка",
"estimated": "Приблизно ", "estimated": "Приблизно ",
"estimated_new_fee": "Орієнтовна нова комісія", "estimated_new_fee": "Орієнтовна нова комісія",
"estimated_receive_amount": "Орієнтовна сума отримує",
"etherscan_history": "Історія Etherscan", "etherscan_history": "Історія Etherscan",
"event": "Подія", "event": "Подія",
"events": "Події", "events": "Події",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "۔ﮯﮨ ﯽﺌﮔﺁ ﺶﯿﭘ ﯽﺑﺍﺮﺧ ﮏﯾﺍ ﺖﻗﻭ ﮯﺗﺮﮐ ﻂﺨﺘﺳﺩ ﺮﭘ ﻦﯾﺩ ﻦﯿﻟ", "errorSigningTransaction": "۔ﮯﮨ ﯽﺌﮔﺁ ﺶﯿﭘ ﯽﺑﺍﺮﺧ ﮏﯾﺍ ﺖﻗﻭ ﮯﺗﺮﮐ ﻂﺨﺘﺳﺩ ﺮﭘ ﻦﯾﺩ ﻦﯿﻟ",
"estimated": "تخمینہ لگایا", "estimated": "تخمینہ لگایا",
"estimated_new_fee": "تخمینہ شدہ نئی فیس", "estimated_new_fee": "تخمینہ شدہ نئی فیس",
"estimated_receive_amount": "تخمینہ وصول کی رقم",
"etherscan_history": "ﺦﯾﺭﺎﺗ ﯽﮐ ﻦﯿﮑﺳﺍ ﺮﮭﺘﯾﺍ", "etherscan_history": "ﺦﯾﺭﺎﺗ ﯽﮐ ﻦﯿﮑﺳﺍ ﺮﮭﺘﯾﺍ",
"event": "ﺐﯾﺮﻘﺗ", "event": "ﺐﯾﺮﻘﺗ",
"events": "ﺕﺎﺒﯾﺮﻘﺗ", "events": "ﺕﺎﺒﯾﺮﻘﺗ",

View file

@ -268,6 +268,7 @@
"errorSigningTransaction": "Aṣiṣe kan ti waye lakoko ti o fowo si iṣowo", "errorSigningTransaction": "Aṣiṣe kan ti waye lakoko ti o fowo si iṣowo",
"estimated": "Ó tó a fojú díwọ̀n", "estimated": "Ó tó a fojú díwọ̀n",
"estimated_new_fee": "Ifoju tuntun owo tuntun", "estimated_new_fee": "Ifoju tuntun owo tuntun",
"estimated_receive_amount": "Ifoju gba iye",
"etherscan_history": "Etherscan itan", "etherscan_history": "Etherscan itan",
"event": "Iṣẹlẹ", "event": "Iṣẹlẹ",
"events": "Awọn iṣẹlẹ", "events": "Awọn iṣẹlẹ",

View file

@ -267,6 +267,7 @@
"errorSigningTransaction": "签署交易时发生错误", "errorSigningTransaction": "签署交易时发生错误",
"estimated": "估计值", "estimated": "估计值",
"estimated_new_fee": "估计新费用", "estimated_new_fee": "估计新费用",
"estimated_receive_amount": "估计接收金额",
"etherscan_history": "以太扫描历史", "etherscan_history": "以太扫描历史",
"event": "事件", "event": "事件",
"events": "活动", "events": "活动",