diff --git a/cw_tron/lib/tron_client.dart b/cw_tron/lib/tron_client.dart index 8eca02af64..2d0c3cb456 100644 --- a/cw_tron/lib/tron_client.dart +++ b/cw_tron/lib/tron_client.dart @@ -25,6 +25,11 @@ class TronClient { int get chainId => 1000; + int retryCount = 0; + static const int MAX_RETRIES = 3; + + Future switchNodes() async {} + Future> fetchTransactions(String address, {String? contractAddress}) async { try { @@ -50,9 +55,14 @@ class TronClient { return (jsonResponse['data'] as List).map((e) { return TronTransactionModel.fromJson(e as Map); }).toList(); + } else { + if (retryCount > MAX_RETRIES) { + retryCount++; + await switchNodes(); + return fetchTransactions(address, contractAddress: contractAddress); + } + return []; } - - return []; } catch (e, s) { log('Error getting tx: ${e.toString()}\n ${s.toString()}'); return []; @@ -83,8 +93,13 @@ class TronClient { return (jsonResponse['data'] as List).map((e) { return TronTRC20TransactionModel.fromJson(e as Map); }).toList(); + } else { + if (retryCount < MAX_RETRIES) { + retryCount++; + await switchNodes(); + return fetchTrc20ExcludedTransactions(address); + } } - return []; } catch (e, s) { log('Error getting trc20 tx: ${e.toString()}\n ${s.toString()}'); diff --git a/lib/anonpay/anonpay_api.dart b/lib/anonpay/anonpay_api.dart index acab662d14..7efcd26051 100644 --- a/lib/anonpay/anonpay_api.dart +++ b/lib/anonpay/anonpay_api.dart @@ -6,6 +6,7 @@ import 'package:cake_wallet/anonpay/anonpay_status_response.dart'; import 'package:cake_wallet/core/fiat_conversion_service.dart'; import 'package:cake_wallet/entities/fiat_currency.dart'; import 'package:cake_wallet/exchange/limits.dart'; +import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart'; import 'package:cw_core/wallet_base.dart'; import 'package:http/http.dart'; import 'package:cw_core/crypto_currency.dart'; @@ -130,6 +131,7 @@ class AnonPayApi { Future fetchLimits({ FiatCurrency? fiatCurrency, required CryptoCurrency cryptoCurrency, + required FiatConversionStore fiatConversionStore, }) async { double fiatRate = 0.0; if (fiatCurrency != null) { @@ -137,6 +139,7 @@ class AnonPayApi { crypto: cryptoCurrency, fiat: fiatCurrency, torOnly: useTorOnly, + fiatConversionStore: fiatConversionStore, ); } diff --git a/lib/core/fiat_conversion_service.dart b/lib/core/fiat_conversion_service.dart index 8a37175b45..49c87446b0 100644 --- a/lib/core/fiat_conversion_service.dart +++ b/lib/core/fiat_conversion_service.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart'; import 'package:cw_core/crypto_currency.dart'; import 'package:cake_wallet/entities/fiat_currency.dart'; import 'dart:convert'; @@ -22,46 +23,51 @@ Future _fetchPrice(Map args) async { }; num price = 0.0; + late final Uri uri; + if (torOnly) { + uri = Uri.http(_fiatApiOnionAuthority, _fiatApiPath, queryParams); + } else { + uri = Uri.https(_fiatApiClearNetAuthority, _fiatApiPath, queryParams); + } - try { - late final Uri uri; - if (torOnly) { - uri = Uri.http(_fiatApiOnionAuthority, _fiatApiPath, queryParams); - } else { - uri = Uri.https(_fiatApiClearNetAuthority, _fiatApiPath, queryParams); - } - - final response = await get(uri); - - if (response.statusCode != 200) { - return 0.0; - } + final response = await get(uri); - final responseJSON = json.decode(response.body) as Map; - final results = responseJSON['results'] as Map; + if (response.statusCode != 200) { + throw Exception('Fiat conversion service unavailable: ${response.statusCode}'); + } - if (results.isNotEmpty) { - price = results.values.first as num; - } + final responseJSON = json.decode(response.body) as Map; + final results = responseJSON['results'] as Map; - return price.toDouble(); - } catch (e) { - return price.toDouble(); + if (results.isNotEmpty) { + price = results.values.first as num; } + + return price.toDouble(); } -Future _fetchPriceAsync(CryptoCurrency crypto, FiatCurrency fiat, bool torOnly) async => - compute(_fetchPrice, { +Future _fetchPriceAsync(CryptoCurrency crypto, FiatCurrency fiat, bool torOnly, + FiatConversionStore fiatConversionStore) async { + try { + final price = await compute(_fetchPrice, { 'fiat': fiat.toString(), 'crypto': crypto.toString(), 'torOnly': torOnly, }); + fiatConversionStore.unavailable = false; + return price; + } catch (e) { + fiatConversionStore.unavailable = true; + return 0.0; + } +} class FiatConversionService { static Future fetchPrice({ required CryptoCurrency crypto, required FiatCurrency fiat, required bool torOnly, + required FiatConversionStore fiatConversionStore, }) async => - await _fetchPriceAsync(crypto, fiat, torOnly); + await _fetchPriceAsync(crypto, fiat, torOnly, fiatConversionStore); } diff --git a/lib/di.dart b/lib/di.dart index b20b4062f4..2f3660e261 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -488,7 +488,7 @@ Future setup({ getIt.registerFactory(() => BalanceViewModel( appStore: getIt.get(), settingsStore: getIt.get(), - fiatConvertationStore: getIt.get())); + fiatConversionStore: getIt.get())); getIt.registerFactory(() => DashboardViewModel( balanceViewModel: getIt.get(), @@ -703,6 +703,7 @@ Future setup({ _anonpayInvoiceInfoSource, getIt.get(), pageOption, + getIt.get(), ); }); diff --git a/lib/main.dart b/lib/main.dart index 7e5f24b607..90a7d8a662 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -214,7 +214,6 @@ Future initializeAppConfigs({bool loadWallet = true}) async { tradesSource: trades, ordersSource: orders, unspentCoinsInfoSource: unspentCoinsInfoSource, - // fiatConvertationService: fiatConvertationService, templates: templates, exchangeTemplates: exchangeTemplates, transactionDescriptions: transactionDescriptions, @@ -234,7 +233,6 @@ Future initialSetup( required Box contactSource, required Box tradesSource, required Box ordersSource, - // required FiatConvertationService fiatConvertationService, required Box