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
- ReachabilitySwift
- 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):
- Flutter
- device_info_plus (0.0.1):
@ -145,8 +115,6 @@ DEPENDENCIES:
- barcode_scan2 (from `.symlinks/plugins/barcode_scan2/ios`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
- 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_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- devicelocale (from `.symlinks/plugins/devicelocale/ios`)
@ -194,10 +162,6 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/barcode_scan2/ios"
connectivity_plus:
: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:
:path: ".symlinks/plugins/device_display_brightness/ios"
device_info_plus:
@ -252,8 +216,6 @@ SPEC CHECKSUMS:
BigInt: f668a80089607f521586bbe29513d708491ef2f7
connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d
CryptoSwift: c63a805d8bb5e5538e88af4e44bb537776af11ea
cw_haven: b3e54e1fbe7b8e6fda57a93206bc38f8e89b898a
cw_shared_external: 2972d872b8917603478117c9957dfca611845a92
device_display_brightness: 1510e72c567a1f6ce6ffe393dcd9afd1426034f7
device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6
devicelocale: b22617f40038496deffba44747101255cee005b0

View file

@ -391,7 +391,14 @@ Future<void> ios_migrate_trades_list(Box<Trade> tradeSource) async {
}
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 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 extraId = responseJSON['payinExtraId'] as String?;
final payoutAddress = responseJSON['payoutAddress'] as String;
final fromAmount = responseJSON['fromAmount']?.toString();
final toAmount = responseJSON['toAmount']?.toString();
return Trade(
id: id,
from: request.fromCurrency,
to: request.toCurrency,
provider: description,
inputAddress: inputAddress,
refundAddress: refundAddress,
extraId: extraId,
createdAt: DateTime.now(),
amount: responseJSON['fromAmount']?.toString() ?? request.fromAmount,
state: TradeState.created,
payoutAddress: payoutAddress,
isSendAll: isSendAll);
id: id,
from: request.fromCurrency,
to: request.toCurrency,
provider: description,
inputAddress: inputAddress,
refundAddress: refundAddress,
extraId: extraId,
createdAt: DateTime.now(),
amount: fromAmount ?? request.fromAmount,
receiveAmount: toAmount ?? request.toAmount,
state: TradeState.created,
payoutAddress: payoutAddress,
isSendAll: isSendAll,
);
}
@override

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -147,8 +147,13 @@ abstract class ExchangeTradeViewModelBase with Store {
items.clear();
if (trade.provider != ExchangeProviderDescription.thorChain)
items.add(ExchangeTradeItem(
title: "${trade.provider.title} ${S.current.id}", data: '${trade.id}', isCopied: true));
items.add(
ExchangeTradeItem(
title: "${trade.provider.title} ${S.current.id}",
data: '${trade.id}',
isCopied: true,
),
);
if (trade.extraId != null) {
final title = trade.from == CryptoCurrency.xrp
@ -161,15 +166,26 @@ abstract class ExchangeTradeViewModelBase with Store {
}
items.addAll([
ExchangeTradeItem(title: S.current.amount, data: '${trade.amount}', isCopied: true),
ExchangeTradeItem(
title: S.current.send_to_this_address('${tradesStore.trade!.from}', tagFrom) + ':',
data: trade.inputAddress ?? '',
isCopied: true),
title: S.current.amount,
data: '${trade.amount} ${trade.from}',
isCopied: true,
),
ExchangeTradeItem(
title: S.current.arrive_in_this_address('${tradesStore.trade!.to}', tagTo) + ':',
data: trade.payoutAddress ?? '',
isCopied: true),
title: S.current.estimated_receive_amount +':',
data: '${tradesStore.trade?.receiveAmount} ${trade.to}',
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;
try {
final result = await Future.wait(selectedProviders
.where((element) => providersForCurrentPair().contains(provider))
.map((provider) => provider
.fetchLimits(
from: from,
to: to,
isFixedRateMode: isFixedRateMode,
)
.onError((error, stackTrace) => Limits(max: 0.0, min: double.maxFinite))
.timeout(
Duration(seconds: 7),
onTimeout: () => Limits(max: 0.0, min: double.maxFinite),
)));
final result = await Future.wait(
selectedProviders.where((provider) => providersForCurrentPair().contains(provider)).map(
(provider) => provider
.fetchLimits(
from: from,
to: to,
isFixedRateMode: isFixedRateMode,
)
.onError((error, stackTrace) => Limits(max: 0.0, min: double.maxFinite))
.timeout(
Duration(seconds: 7),
onTimeout: () => Limits(max: 0.0, min: double.maxFinite),
),
),
);
result.forEach((tempLimits) {
if (lowestMin != null && (tempLimits.min ?? -1) < lowestMin!) {
@ -506,17 +508,24 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
}
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;
_bestRate = providerRate;
await changeDepositAmount(amount: depositAmount);
final request = TradeRequest(
fromCurrency: depositCurrency,
toCurrency: receiveCurrency,
fromAmount: depositAmount.replaceAll(',', '.'),
toAmount: receiveAmount.replaceAll(',', '.'),
refundAddress: depositAddress,
toAddress: receiveAddress,
isFixedRate: isFixedRateMode);
fromCurrency: depositCurrency,
toCurrency: receiveCurrency,
fromAmount: depositAmount.replaceAll(',', '.'),
toAmount: receiveAmount.replaceAll(',', '.'),
refundAddress: depositAddress,
toAddress: receiveAddress,
isFixedRate: isFixedRateMode,
);
var amount = isFixedRateMode ? receiveAmount : depositAmount;
amount = amount.replaceAll(',', '.');

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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