Skip to content

Commit cc89852

Browse files
committed
(feat) Refactored markets and tokens initialization methods in AsyncClient to get markets from the chain. Removed logic in Composer to load markets and tokens from the denom INI files
1 parent 291fe99 commit cc89852

16 files changed

+463
-32732
lines changed

pyinjective/async_client.py

Lines changed: 56 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ def __init__(
9999
self._initialize_timeout_height_sync_task()
100100

101101
self._tokens_and_markets_initialization_lock = asyncio.Lock()
102-
self._tokens_by_denom: Optional[Dict[str, Token]] = None
103-
self._tokens_by_symbol: Optional[Dict[str, Token]] = None
102+
self._tokens_by_denom = dict()
103+
self._tokens_by_symbol = dict()
104104
self._spot_markets: Optional[Dict[str, SpotMarket]] = None
105105
self._derivative_markets: Optional[Dict[str, DerivativeMarket]] = None
106106
self._binary_option_markets: Optional[Dict[str, BinaryOptionMarket]] = None
@@ -2794,87 +2794,69 @@ async def _initialize_tokens_and_markets(self):
27942794
derivative_markets = dict()
27952795
binary_option_markets = dict()
27962796
tokens_by_symbol, tokens_by_denom = await self._tokens_from_official_lists(network=self.network)
2797-
markets_info = (await self.fetch_spot_markets(market_statuses=["active"]))["markets"]
2798-
valid_markets = (
2799-
market_info
2800-
for market_info in markets_info
2801-
if len(market_info.get("baseTokenMeta", {}).get("symbol", "")) > 0
2802-
and len(market_info.get("quoteTokenMeta", {}).get("symbol", "")) > 0
2803-
)
2804-
2805-
for market_info in valid_markets:
2806-
base_token = self._token_representation(
2807-
token_meta=market_info["baseTokenMeta"],
2808-
denom=market_info["baseDenom"],
2809-
tokens_by_denom=tokens_by_denom,
2810-
tokens_by_symbol=tokens_by_symbol,
2811-
)
2812-
quote_token = self._token_representation(
2813-
token_meta=market_info["quoteTokenMeta"],
2814-
denom=market_info["quoteDenom"],
2815-
tokens_by_denom=tokens_by_denom,
2816-
tokens_by_symbol=tokens_by_symbol,
2817-
)
2797+
self._tokens_by_denom.update(tokens_by_denom)
2798+
self._tokens_by_symbol.update(tokens_by_symbol)
2799+
2800+
markets_info = (await self.fetch_chain_spot_markets_v2(status="Active"))["markets"]
2801+
for market_info in markets_info:
2802+
base_token = self._tokens_by_denom.get(market_info["baseDenom"])
2803+
quote_token = self._tokens_by_denom.get(market_info["quoteDenom"])
28182804

28192805
market = SpotMarket(
28202806
id=market_info["marketId"],
2821-
status=market_info["marketStatus"],
2807+
status=market_info["status"],
28222808
ticker=market_info["ticker"],
28232809
base_token=base_token,
28242810
quote_token=quote_token,
2825-
maker_fee_rate=Decimal(market_info["makerFeeRate"]),
2826-
taker_fee_rate=Decimal(market_info["takerFeeRate"]),
2827-
service_provider_fee=Decimal(market_info["serviceProviderFee"]),
2828-
min_price_tick_size=Decimal(market_info["minPriceTickSize"]),
2829-
min_quantity_tick_size=Decimal(market_info["minQuantityTickSize"]),
2830-
min_notional=Decimal(market_info["minNotional"]),
2811+
maker_fee_rate=Token.convert_value_from_chain_format(Decimal(market_info["makerFeeRate"])),
2812+
taker_fee_rate=Token.convert_value_from_chain_format(Decimal(market_info["takerFeeRate"])),
2813+
service_provider_fee=Token.convert_value_from_chain_format(Decimal(market_info["relayerFeeShareRate"])),
2814+
min_price_tick_size=Token.convert_value_from_chain_format(Decimal(market_info["minPriceTickSize"])),
2815+
min_quantity_tick_size=Token.convert_value_from_chain_format(
2816+
Decimal(market_info["minQuantityTickSize"])
2817+
),
2818+
min_notional=Token.convert_value_from_chain_format(Decimal(market_info["minNotional"])),
28312819
)
28322820

28332821
spot_markets[market.id] = market
28342822

2835-
markets_info = (await self.fetch_derivative_markets(market_statuses=["active"]))["markets"]
2836-
valid_markets = (
2837-
market_info
2838-
for market_info in markets_info
2839-
if len(market_info.get("quoteTokenMeta", {}).get("symbol", "")) > 0
2840-
)
2841-
2842-
for market_info in valid_markets:
2843-
quote_token = self._token_representation(
2844-
token_meta=market_info["quoteTokenMeta"],
2845-
denom=market_info["quoteDenom"],
2846-
tokens_by_denom=tokens_by_denom,
2847-
tokens_by_symbol=tokens_by_symbol,
2848-
)
2849-
2850-
market = DerivativeMarket(
2851-
id=market_info["marketId"],
2852-
status=market_info["marketStatus"],
2853-
ticker=market_info["ticker"],
2854-
oracle_base=market_info["oracleBase"],
2855-
oracle_quote=market_info["oracleQuote"],
2856-
oracle_type=market_info["oracleType"],
2857-
oracle_scale_factor=market_info["oracleScaleFactor"],
2858-
initial_margin_ratio=Decimal(market_info["initialMarginRatio"]),
2859-
maintenance_margin_ratio=Decimal(market_info["maintenanceMarginRatio"]),
2823+
markets_info = (await self.fetch_chain_derivative_markets_v2(status="Active", with_mid_price_and_tob=False))[
2824+
"markets"
2825+
]
2826+
for market_info in markets_info:
2827+
market = market_info["market"]
2828+
quote_token = self._tokens_by_denom.get(market["quoteDenom"])
2829+
2830+
derivative_market = DerivativeMarket(
2831+
id=market["marketId"],
2832+
status=market["status"],
2833+
ticker=market["ticker"],
2834+
oracle_base=market["oracleBase"],
2835+
oracle_quote=market["oracleQuote"],
2836+
oracle_type=market["oracleType"],
2837+
oracle_scale_factor=market["oracleScaleFactor"],
2838+
initial_margin_ratio=Token.convert_value_from_chain_format(Decimal(market["initialMarginRatio"])),
2839+
maintenance_margin_ratio=Token.convert_value_from_chain_format(
2840+
Decimal(market["maintenanceMarginRatio"])
2841+
),
28602842
quote_token=quote_token,
2861-
maker_fee_rate=Decimal(market_info["makerFeeRate"]),
2862-
taker_fee_rate=Decimal(market_info["takerFeeRate"]),
2863-
service_provider_fee=Decimal(market_info["serviceProviderFee"]),
2864-
min_price_tick_size=Decimal(market_info["minPriceTickSize"]),
2865-
min_quantity_tick_size=Decimal(market_info["minQuantityTickSize"]),
2866-
min_notional=Decimal(market_info["minNotional"]),
2843+
maker_fee_rate=Token.convert_value_from_chain_format(Decimal(market["makerFeeRate"])),
2844+
taker_fee_rate=Token.convert_value_from_chain_format(Decimal(market["takerFeeRate"])),
2845+
service_provider_fee=Token.convert_value_from_chain_format(Decimal(market["relayerFeeShareRate"])),
2846+
min_price_tick_size=Token.convert_value_from_chain_format(Decimal(market["minPriceTickSize"])),
2847+
min_quantity_tick_size=Token.convert_value_from_chain_format(Decimal(market["minQuantityTickSize"])),
2848+
min_notional=Token.convert_value_from_chain_format(Decimal(market["minNotional"])),
28672849
)
28682850

2869-
derivative_markets[market.id] = market
2851+
derivative_markets[derivative_market.id] = derivative_market
28702852

2871-
markets_info = (await self.fetch_binary_options_markets(market_status="active"))["markets"]
2853+
markets_info = (await self.fetch_chain_binary_options_markets_v2(status="Active"))["markets"]
28722854
for market_info in markets_info:
2873-
quote_token = tokens_by_denom.get(market_info["quoteDenom"], None)
2855+
quote_token = self._tokens_by_denom.get(market_info["quoteDenom"])
28742856

28752857
market = BinaryOptionMarket(
28762858
id=market_info["marketId"],
2877-
status=market_info["marketStatus"],
2859+
status=market_info["status"],
28782860
ticker=market_info["ticker"],
28792861
oracle_symbol=market_info["oracleSymbol"],
28802862
oracle_provider=market_info["oracleProvider"],
@@ -2883,21 +2865,21 @@ async def _initialize_tokens_and_markets(self):
28832865
expiration_timestamp=market_info["expirationTimestamp"],
28842866
settlement_timestamp=market_info["settlementTimestamp"],
28852867
quote_token=quote_token,
2886-
maker_fee_rate=Decimal(market_info["makerFeeRate"]),
2887-
taker_fee_rate=Decimal(market_info["takerFeeRate"]),
2888-
service_provider_fee=Decimal(market_info["serviceProviderFee"]),
2889-
min_price_tick_size=Decimal(market_info["minPriceTickSize"]),
2890-
min_quantity_tick_size=Decimal(market_info["minQuantityTickSize"]),
2891-
min_notional=Decimal(market_info["minNotional"]),
2868+
maker_fee_rate=Token.convert_value_from_chain_format(Decimal(market_info["makerFeeRate"])),
2869+
taker_fee_rate=Token.convert_value_from_chain_format(Decimal(market_info["takerFeeRate"])),
2870+
service_provider_fee=Token.convert_value_from_chain_format(Decimal(market_info["relayerFeeShareRate"])),
2871+
min_price_tick_size=Token.convert_value_from_chain_format(Decimal(market_info["minPriceTickSize"])),
2872+
min_quantity_tick_size=Token.convert_value_from_chain_format(
2873+
Decimal(market_info["minQuantityTickSize"])
2874+
),
2875+
min_notional=Token.convert_value_from_chain_format(Decimal(market_info["minNotional"])),
28922876
settlement_price=None
28932877
if market_info["settlementPrice"] == ""
2894-
else Decimal(market_info["settlementPrice"]),
2878+
else Token.convert_value_from_chain_format(Decimal(market_info["settlementPrice"])),
28952879
)
28962880

28972881
binary_option_markets[market.id] = market
28982882

2899-
self._tokens_by_denom = tokens_by_denom
2900-
self._tokens_by_symbol = tokens_by_symbol
29012883
self._spot_markets = spot_markets
29022884
self._derivative_markets = derivative_markets
29032885
self._binary_option_markets = binary_option_markets

0 commit comments

Comments
 (0)