Skip to content

Commit cc6beec

Browse files
Merge pull request #358 from InjectiveLabs/release/v_1_8_0
Release/v1.8.0
2 parents 0e92559 + f206f58 commit cc6beec

20 files changed

+459
-32673
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
## [1.8.0] - 2024-11-14
6+
### Changed
7+
- The markets initialization in AsyncClient has been modified to get markets information from the chain endpoints instead of the Indexer endpoints
8+
9+
### Removed
10+
- Removed the legacy deprecated markets and tokens initialization using the denoms INI files in the SDK. Removed also the INI files from the SDK
11+
512
## [1.7.2] - 2024-11-13
613
### Fixed
714
- Fixed link to official `ofac.json` file

pyinjective/async_client.py

Lines changed: 72 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,8 @@ def __init__(
157157
self._initialize_timeout_height_sync_task()
158158

159159
self._tokens_and_markets_initialization_lock = asyncio.Lock()
160-
self._tokens_by_denom: Optional[Dict[str, Token]] = None
161-
self._tokens_by_symbol: Optional[Dict[str, Token]] = None
160+
self._tokens_by_denom = dict()
161+
self._tokens_by_symbol = dict()
162162
self._spot_markets: Optional[Dict[str, SpotMarket]] = None
163163
self._derivative_markets: Optional[Dict[str, DerivativeMarket]] = None
164164
self._binary_option_markets: Optional[Dict[str, BinaryOptionMarket]] = None
@@ -3291,87 +3291,81 @@ async def _initialize_tokens_and_markets(self):
32913291
derivative_markets = dict()
32923292
binary_option_markets = dict()
32933293
tokens_by_symbol, tokens_by_denom = await self._tokens_from_official_lists(network=self.network)
3294-
markets_info = (await self.fetch_spot_markets(market_statuses=["active"]))["markets"]
3295-
valid_markets = (
3296-
market_info
3297-
for market_info in markets_info
3298-
if len(market_info.get("baseTokenMeta", {}).get("symbol", "")) > 0
3299-
and len(market_info.get("quoteTokenMeta", {}).get("symbol", "")) > 0
3300-
)
3301-
3302-
for market_info in valid_markets:
3303-
base_token = self._token_representation(
3304-
token_meta=market_info["baseTokenMeta"],
3305-
denom=market_info["baseDenom"],
3306-
tokens_by_denom=tokens_by_denom,
3307-
tokens_by_symbol=tokens_by_symbol,
3308-
)
3309-
quote_token = self._token_representation(
3310-
token_meta=market_info["quoteTokenMeta"],
3311-
denom=market_info["quoteDenom"],
3312-
tokens_by_denom=tokens_by_denom,
3313-
tokens_by_symbol=tokens_by_symbol,
3314-
)
3294+
self._tokens_by_denom.update(tokens_by_denom)
3295+
self._tokens_by_symbol.update(tokens_by_symbol)
3296+
3297+
markets_info = (await self.fetch_chain_spot_markets(status="Active"))["markets"]
3298+
for market_info in markets_info:
3299+
base_token = self._tokens_by_denom.get(market_info["baseDenom"])
3300+
quote_token = self._tokens_by_denom.get(market_info["quoteDenom"])
33153301

33163302
market = SpotMarket(
33173303
id=market_info["marketId"],
3318-
status=market_info["marketStatus"],
3304+
status=market_info["status"],
33193305
ticker=market_info["ticker"],
33203306
base_token=base_token,
33213307
quote_token=quote_token,
3322-
maker_fee_rate=Decimal(market_info["makerFeeRate"]),
3323-
taker_fee_rate=Decimal(market_info["takerFeeRate"]),
3324-
service_provider_fee=Decimal(market_info["serviceProviderFee"]),
3325-
min_price_tick_size=Decimal(market_info["minPriceTickSize"]),
3326-
min_quantity_tick_size=Decimal(market_info["minQuantityTickSize"]),
3327-
min_notional=Decimal(market_info["minNotional"]),
3308+
maker_fee_rate=Token.convert_value_from_extended_decimal_format(Decimal(market_info["makerFeeRate"])),
3309+
taker_fee_rate=Token.convert_value_from_extended_decimal_format(Decimal(market_info["takerFeeRate"])),
3310+
service_provider_fee=Token.convert_value_from_extended_decimal_format(
3311+
Decimal(market_info["relayerFeeShareRate"])
3312+
),
3313+
min_price_tick_size=Token.convert_value_from_extended_decimal_format(
3314+
Decimal(market_info["minPriceTickSize"])
3315+
),
3316+
min_quantity_tick_size=Token.convert_value_from_extended_decimal_format(
3317+
Decimal(market_info["minQuantityTickSize"])
3318+
),
3319+
min_notional=Token.convert_value_from_extended_decimal_format(Decimal(market_info["minNotional"])),
33283320
)
33293321

33303322
spot_markets[market.id] = market
33313323

3332-
markets_info = (await self.fetch_derivative_markets(market_statuses=["active"]))["markets"]
3333-
valid_markets = (
3334-
market_info
3335-
for market_info in markets_info
3336-
if len(market_info.get("quoteTokenMeta", {}).get("symbol", "")) > 0
3337-
)
3338-
3339-
for market_info in valid_markets:
3340-
quote_token = self._token_representation(
3341-
token_meta=market_info["quoteTokenMeta"],
3342-
denom=market_info["quoteDenom"],
3343-
tokens_by_denom=tokens_by_denom,
3344-
tokens_by_symbol=tokens_by_symbol,
3345-
)
3346-
3347-
market = DerivativeMarket(
3348-
id=market_info["marketId"],
3349-
status=market_info["marketStatus"],
3350-
ticker=market_info["ticker"],
3351-
oracle_base=market_info["oracleBase"],
3352-
oracle_quote=market_info["oracleQuote"],
3353-
oracle_type=market_info["oracleType"],
3354-
oracle_scale_factor=market_info["oracleScaleFactor"],
3355-
initial_margin_ratio=Decimal(market_info["initialMarginRatio"]),
3356-
maintenance_margin_ratio=Decimal(market_info["maintenanceMarginRatio"]),
3324+
markets_info = (await self.fetch_chain_derivative_markets(status="Active", with_mid_price_and_tob=False))[
3325+
"markets"
3326+
]
3327+
for market_info in markets_info:
3328+
market = market_info["market"]
3329+
quote_token = self._tokens_by_denom.get(market["quoteDenom"])
3330+
3331+
derivative_market = DerivativeMarket(
3332+
id=market["marketId"],
3333+
status=market["status"],
3334+
ticker=market["ticker"],
3335+
oracle_base=market["oracleBase"],
3336+
oracle_quote=market["oracleQuote"],
3337+
oracle_type=market["oracleType"],
3338+
oracle_scale_factor=market["oracleScaleFactor"],
3339+
initial_margin_ratio=Token.convert_value_from_extended_decimal_format(
3340+
Decimal(market["initialMarginRatio"])
3341+
),
3342+
maintenance_margin_ratio=Token.convert_value_from_extended_decimal_format(
3343+
Decimal(market["maintenanceMarginRatio"])
3344+
),
33573345
quote_token=quote_token,
3358-
maker_fee_rate=Decimal(market_info["makerFeeRate"]),
3359-
taker_fee_rate=Decimal(market_info["takerFeeRate"]),
3360-
service_provider_fee=Decimal(market_info["serviceProviderFee"]),
3361-
min_price_tick_size=Decimal(market_info["minPriceTickSize"]),
3362-
min_quantity_tick_size=Decimal(market_info["minQuantityTickSize"]),
3363-
min_notional=Decimal(market_info["minNotional"]),
3346+
maker_fee_rate=Token.convert_value_from_extended_decimal_format(Decimal(market["makerFeeRate"])),
3347+
taker_fee_rate=Token.convert_value_from_extended_decimal_format(Decimal(market["takerFeeRate"])),
3348+
service_provider_fee=Token.convert_value_from_extended_decimal_format(
3349+
Decimal(market["relayerFeeShareRate"])
3350+
),
3351+
min_price_tick_size=Token.convert_value_from_extended_decimal_format(
3352+
Decimal(market["minPriceTickSize"])
3353+
),
3354+
min_quantity_tick_size=Token.convert_value_from_extended_decimal_format(
3355+
Decimal(market["minQuantityTickSize"])
3356+
),
3357+
min_notional=Token.convert_value_from_extended_decimal_format(Decimal(market["minNotional"])),
33643358
)
33653359

3366-
derivative_markets[market.id] = market
3360+
derivative_markets[derivative_market.id] = derivative_market
33673361

3368-
markets_info = (await self.fetch_binary_options_markets(market_status="active"))["markets"]
3362+
markets_info = (await self.fetch_chain_binary_options_markets(status="Active"))["markets"]
33693363
for market_info in markets_info:
3370-
quote_token = tokens_by_denom.get(market_info["quoteDenom"], None)
3364+
quote_token = self._tokens_by_denom.get(market_info["quoteDenom"])
33713365

33723366
market = BinaryOptionMarket(
33733367
id=market_info["marketId"],
3374-
status=market_info["marketStatus"],
3368+
status=market_info["status"],
33753369
ticker=market_info["ticker"],
33763370
oracle_symbol=market_info["oracleSymbol"],
33773371
oracle_provider=market_info["oracleProvider"],
@@ -3380,21 +3374,25 @@ async def _initialize_tokens_and_markets(self):
33803374
expiration_timestamp=market_info["expirationTimestamp"],
33813375
settlement_timestamp=market_info["settlementTimestamp"],
33823376
quote_token=quote_token,
3383-
maker_fee_rate=Decimal(market_info["makerFeeRate"]),
3384-
taker_fee_rate=Decimal(market_info["takerFeeRate"]),
3385-
service_provider_fee=Decimal(market_info["serviceProviderFee"]),
3386-
min_price_tick_size=Decimal(market_info["minPriceTickSize"]),
3387-
min_quantity_tick_size=Decimal(market_info["minQuantityTickSize"]),
3388-
min_notional=Decimal(market_info["minNotional"]),
3377+
maker_fee_rate=Token.convert_value_from_extended_decimal_format(Decimal(market_info["makerFeeRate"])),
3378+
taker_fee_rate=Token.convert_value_from_extended_decimal_format(Decimal(market_info["takerFeeRate"])),
3379+
service_provider_fee=Token.convert_value_from_extended_decimal_format(
3380+
Decimal(market_info["relayerFeeShareRate"])
3381+
),
3382+
min_price_tick_size=Token.convert_value_from_extended_decimal_format(
3383+
Decimal(market_info["minPriceTickSize"])
3384+
),
3385+
min_quantity_tick_size=Token.convert_value_from_extended_decimal_format(
3386+
Decimal(market_info["minQuantityTickSize"])
3387+
),
3388+
min_notional=Token.convert_value_from_extended_decimal_format(Decimal(market_info["minNotional"])),
33893389
settlement_price=None
33903390
if market_info["settlementPrice"] == ""
3391-
else Decimal(market_info["settlementPrice"]),
3391+
else Token.convert_value_from_extended_decimal_format(Decimal(market_info["settlementPrice"])),
33923392
)
33933393

33943394
binary_option_markets[market.id] = market
33953395

3396-
self._tokens_by_denom = tokens_by_denom
3397-
self._tokens_by_symbol = tokens_by_symbol
33983396
self._spot_markets = spot_markets
33993397
self._derivative_markets = derivative_markets
34003398
self._binary_option_markets = binary_option_markets

pyinjective/composer.py

Lines changed: 5 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
import json
2-
from configparser import ConfigParser
32
from decimal import Decimal
43
from time import time
54
from typing import Any, Dict, List, Optional
65
from warnings import warn
76

87
from google.protobuf import any_pb2, json_format, timestamp_pb2
98

10-
from pyinjective import constant
119
from pyinjective.constant import ADDITIONAL_CHAIN_FORMAT_DECIMALS, INJ_DECIMALS, INJ_DENOM
1210
from pyinjective.core.market import BinaryOptionMarket, DerivativeMarket, SpotMarket
1311
from pyinjective.core.token import Token
@@ -137,17 +135,11 @@ def __init__(
137135
138136
"""
139137
self.network = network
140-
self.spot_markets = dict()
141-
self.derivative_markets = dict()
142-
self.binary_option_markets = dict()
143-
self.tokens = dict()
144-
if spot_markets is None or derivative_markets is None or binary_option_markets is None or tokens is None:
145-
self._initialize_markets_and_tokens_from_files()
146-
else:
147-
self.spot_markets = spot_markets
148-
self.derivative_markets = derivative_markets
149-
self.binary_option_markets = binary_option_markets
150-
self.tokens = tokens
138+
self.spot_markets = spot_markets or dict()
139+
self.derivative_markets = derivative_markets or dict()
140+
self.binary_option_markets = binary_option_markets or dict()
141+
self.tokens = tokens or dict()
142+
151143
self._ofac_checker = OfacChecker()
152144

153145
def Coin(self, amount: int, denom: str):
@@ -2556,91 +2548,6 @@ def unpack_transaction_messages(transaction_data: Dict[str, Any]) -> List[Dict[s
25562548

25572549
return msgs
25582550

2559-
def _initialize_markets_and_tokens_from_files(self):
2560-
config: ConfigParser = constant.CONFIGS[self.network]
2561-
spot_markets = dict()
2562-
derivative_markets = dict()
2563-
tokens = dict()
2564-
2565-
for section_name, configuration_section in config.items():
2566-
if section_name.startswith("0x"):
2567-
description = configuration_section["description"]
2568-
2569-
quote_token = Token(
2570-
name="",
2571-
symbol="",
2572-
denom="",
2573-
address="",
2574-
decimals=int(configuration_section["quote"]),
2575-
logo="",
2576-
updated=-1,
2577-
)
2578-
2579-
if "Spot" in description:
2580-
base_token = Token(
2581-
name="",
2582-
symbol="",
2583-
denom="",
2584-
address="",
2585-
decimals=int(configuration_section["base"]),
2586-
logo="",
2587-
updated=-1,
2588-
)
2589-
2590-
market = SpotMarket(
2591-
id=section_name,
2592-
status="",
2593-
ticker=description,
2594-
base_token=base_token,
2595-
quote_token=quote_token,
2596-
maker_fee_rate=None,
2597-
taker_fee_rate=None,
2598-
service_provider_fee=None,
2599-
min_price_tick_size=Decimal(str(configuration_section["min_price_tick_size"])),
2600-
min_quantity_tick_size=Decimal(str(configuration_section["min_quantity_tick_size"])),
2601-
min_notional=Decimal(str(configuration_section.get("min_notional", "0"))),
2602-
)
2603-
spot_markets[market.id] = market
2604-
else:
2605-
market = DerivativeMarket(
2606-
id=section_name,
2607-
status="",
2608-
ticker=description,
2609-
oracle_base="",
2610-
oracle_quote="",
2611-
oracle_type="",
2612-
oracle_scale_factor=1,
2613-
initial_margin_ratio=None,
2614-
maintenance_margin_ratio=None,
2615-
quote_token=quote_token,
2616-
maker_fee_rate=None,
2617-
taker_fee_rate=None,
2618-
service_provider_fee=None,
2619-
min_price_tick_size=Decimal(str(configuration_section["min_price_tick_size"])),
2620-
min_quantity_tick_size=Decimal(str(configuration_section["min_quantity_tick_size"])),
2621-
min_notional=Decimal(str(configuration_section.get("min_notional", "0"))),
2622-
)
2623-
2624-
derivative_markets[market.id] = market
2625-
2626-
elif section_name != "DEFAULT":
2627-
token = Token(
2628-
name=section_name,
2629-
symbol=section_name,
2630-
denom=configuration_section["peggy_denom"],
2631-
address="",
2632-
decimals=int(configuration_section["decimals"]),
2633-
logo="",
2634-
updated=-1,
2635-
)
2636-
2637-
tokens[token.symbol] = token
2638-
2639-
self.tokens = tokens
2640-
self.spot_markets = spot_markets
2641-
self.derivative_markets = derivative_markets
2642-
self.binary_option_markets = dict()
2643-
26442551
def _order_mask(self, is_conditional: bool, is_buy: bool, is_market_order: bool) -> int:
26452552
order_mask = 0
26462553

pyinjective/constant.py

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,7 @@
1-
import os
2-
from configparser import ConfigParser
3-
41
GAS_PRICE = 160_000_000
52
GAS_FEE_BUFFER_AMOUNT = 25_000
63
MAX_MEMO_CHARACTERS = 256
74
ADDITIONAL_CHAIN_FORMAT_DECIMALS = 18
85
TICKER_TOKENS_SEPARATOR = "/"
96
INJ_DENOM = "inj"
107
INJ_DECIMALS = 18
11-
12-
devnet_config = ConfigParser()
13-
devnet_config.read(os.path.join(os.path.dirname(__file__), "denoms_devnet.ini"))
14-
15-
testnet_config = ConfigParser()
16-
testnet_config.read(os.path.join(os.path.dirname(__file__), "denoms_testnet.ini"))
17-
18-
mainnet_config = ConfigParser()
19-
mainnet_config.read(os.path.join(os.path.dirname(__file__), "denoms_mainnet.ini"))
20-
21-
CONFIGS = {
22-
"devnet": devnet_config,
23-
"testnet": testnet_config,
24-
"mainnet": mainnet_config,
25-
}

pyinjective/core/token.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from dataclasses import dataclass
22
from decimal import Decimal
33

4+
from pyinjective.constant import ADDITIONAL_CHAIN_FORMAT_DECIMALS
5+
46

57
@dataclass(eq=True, frozen=True)
68
class Token:
@@ -12,5 +14,13 @@ class Token:
1214
logo: str
1315
updated: int
1416

17+
@staticmethod
18+
def convert_value_to_extended_decimal_format(value: Decimal) -> Decimal:
19+
return value * Decimal(f"1e{ADDITIONAL_CHAIN_FORMAT_DECIMALS}")
20+
21+
@staticmethod
22+
def convert_value_from_extended_decimal_format(value: Decimal) -> Decimal:
23+
return value / Decimal(f"1e{ADDITIONAL_CHAIN_FORMAT_DECIMALS}")
24+
1525
def chain_formatted_value(self, human_readable_value: Decimal) -> Decimal:
1626
return human_readable_value * Decimal(f"1e{self.decimals}")

0 commit comments

Comments
 (0)