def rate(self, pair: str) -> Decimal: """ Finds a conversion rate for a given symbol, this can be direct or indirect prices as long as it can find a route to achieve this. :param pair: A trading pair, e.g. BTC-USDT :return A conversion rate """ return find_rate(self._known_rates, pair)
async def rate_async(cls, pair: str) -> Decimal: """ Finds a conversion rate in an async operation, it is a class method which can be used directly without having to start the RateOracle network. :param pair: A trading pair, e.g. BTC-USDT :return A conversion rate """ prices = await cls.get_prices() return find_rate(prices, pair)
async def global_rate(cls, token: str) -> Decimal: """ Finds a conversion rate of a given token to a global token :param token: A token symbol, e.g. BTC :return A conversion rate """ prices = await cls.get_prices() pair = token + "-" + cls.global_token return find_rate(prices, pair)
def test_find_rate(self): prices = {"HBOT-USDT": Decimal("100"), "AAVE-USDT": Decimal("50"), "USDT-GBP": Decimal("0.75")} rate = find_rate(prices, "HBOT-USDT") self.assertEqual(rate, Decimal("100")) rate = find_rate(prices, "ZBOT-USDT") self.assertEqual(rate, None) rate = find_rate(prices, "USDT-HBOT") self.assertEqual(rate, Decimal("0.01")) rate = find_rate(prices, "HBOT-AAVE") self.assertEqual(rate, Decimal("2")) rate = find_rate(prices, "AAVE-HBOT") self.assertEqual(rate, Decimal("0.5")) rate = find_rate(prices, "HBOT-GBP") self.assertEqual(rate, Decimal("75"))