diff --git a/basicswap/basicswap.py b/basicswap/basicswap.py index c927565..f1d056a 100644 --- a/basicswap/basicswap.py +++ b/basicswap/basicswap.py @@ -11082,6 +11082,7 @@ class BasicSwap(BaseApp): ): self.log.debug(f"lookupFiatRates {coins_list}.") ensure(len(coins_list) > 0, "Must specify coin/s") + ensure(saved_ttl >= 0, "Invalid saved time") now: int = int(time.time()) oldest_time_valid: int = now - saved_ttl @@ -11132,7 +11133,7 @@ class BasicSwap(BaseApp): for coin_id in coins_list: if len(coin_ids) > 0: coin_ids += "," - exchange_name = self.getExchangeName(coin_id, rate_source) + exchange_name: str = self.getExchangeName(coin_id, rate_source) coin_ids += exchange_name exchange_name_map[exchange_name] = coin_id @@ -11156,25 +11157,37 @@ class BasicSwap(BaseApp): new_values[exchange_name_map[k]] = v[ticker_to] elif rate_source == "cryptocompare.com": ticker_to: str = fiatTicker(currency_to).upper() - for coin_id in need_coins: + api_key: str = get_api_key_setting( + self.settings, + "chart_api_key", + default_chart_api_key, + escape=True, + ) + if len(need_coins) == 1: coin_ticker: str = chainparams[coin_id]["ticker"] - - api_key: str = get_api_key_setting( - self.settings, - "chart_api_key", - default_chart_api_key, - escape=True, - ) url: str = ( f"https://min-api.cryptocompare.com/data/price?fsym={coin_ticker}&tsyms={ticker_to}" ) - if api_key != "": - url += f"&api_key={api_key}" - self.log.debug(f"lookupFiatRates: {url}") js = json.loads(self.readURL(url, timeout=10, headers=headers)) return_rates[int(coin_id)] = js[ticker_to] new_values[coin_id] = js[ticker_to] + else: + coin_ids: str = "" + for coin_id in coins_list: + if len(coin_ids) > 0: + coin_ids += "," + coin_ticker: str = chainparams[coin_id]["ticker"] + coin_ids += coin_ticker + exchange_name_map[coin_ticker] = coin_id + url: str = ( + f"https://min-api.cryptocompare.com/data/pricemulti?fsyms={coin_ids}&tsyms={ticker_to}" + ) + self.log.debug(f"lookupFiatRates: {url}") + js = json.loads(self.readURL(url, timeout=10, headers=headers)) + for k, v in js.items(): + return_rates[int(exchange_name_map[k])] = v[ticker_to] + new_values[exchange_name_map[k]] = v[ticker_to] else: raise ValueError(f"Unknown rate source {rate_source}") diff --git a/basicswap/js_server.py b/basicswap/js_server.py index 5d1dc52..db6f091 100644 --- a/basicswap/js_server.py +++ b/basicswap/js_server.py @@ -1055,6 +1055,7 @@ def js_coinprices(self, url_split, post_string, is_json) -> bytes: match_input_key: bool = toBool( get_data_entry_or(post_data, "match_input_key", "true") ) + ttl: int = int(get_data_entry_or(post_data, "ttl", 300)) coins = get_data_entry(post_data, "coins") coins_list = coins.split(",") @@ -1078,7 +1079,7 @@ def js_coinprices(self, url_split, post_string, is_json) -> bytes: input_id_map[coin_id] = coin coinprices = swap_client.lookupFiatRates( - coin_ids, currency_to=currency_to, rate_source=rate_source + coin_ids, currency_to=currency_to, rate_source=rate_source, saved_ttl=ttl ) rv = {}