avantis-trader-sdk 0.4.0__py3-none-any.whl → 0.7.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -137,6 +137,12 @@ class TraderClient:
137
137
  if self.has_signer() and "from" not in kwargs:
138
138
  kwargs["from"] = self.get_signer().get_ethereum_address()
139
139
 
140
+ if "chainId" not in kwargs:
141
+ kwargs["chainId"] = self.chain_id
142
+
143
+ if "nonce" not in kwargs:
144
+ kwargs["nonce"] = await self.get_transaction_count(kwargs["from"])
145
+
140
146
  transaction = await contract.functions[function_name](*args).build_transaction(
141
147
  kwargs
142
148
  )
@@ -144,9 +150,8 @@ class TraderClient:
144
150
  if not self.has_signer():
145
151
  return transaction
146
152
 
147
- signed_txn = await self.sign_transaction(transaction)
148
- tx_hash = await self.send_and_get_transaction_hash(signed_txn)
149
- return tx_hash
153
+ receipt = await self.sign_and_get_receipt(transaction)
154
+ return receipt
150
155
 
151
156
  def set_signer(self, signer: BaseSigner):
152
157
  """
@@ -284,7 +289,8 @@ class TraderClient:
284
289
  """
285
290
  if address is None:
286
291
  address = self.get_signer().get_ethereum_address()
287
- return await self.async_web3.eth.get_balance(address)
292
+ balance = await self.async_web3.eth.get_balance(address)
293
+ return balance / 10**18
288
294
 
289
295
  async def get_usdc_balance(self, address=None):
290
296
  """
@@ -1,12 +1,14 @@
1
1
  MAINNET_ADDRESSES = {
2
2
  "TradingStorage": "0x8a311D7048c35985aa31C131B9A13e03a5f7422d",
3
- "PairStorage": "0x92Ed158d5e423CFdc9eed5Bd7328FFF7CeD6fF94",
3
+ "PairStorage": "0x5db3772136e5557EFE028Db05EE95C84D76faEC4",
4
4
  "PairInfos": "0x81F22d0Cc22977c91bEfE648C9fddf1f2bd977e5",
5
5
  "PriceAggregator": "0x64e2625621970F8cfA17B294670d61CB883dA511",
6
6
  "USDC": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
7
7
  "Trading": "0x5FF292d70bA9cD9e7CCb313782811b3D7120535f",
8
- "Multicall": "0x06B145b672dc04BBA9821e2172728FEEa0D12Ec5",
8
+ "Multicall": "0xD4693314460d6fb598C1124aeC40C03e2Aa0A8a4",
9
9
  "Referral": "0xA96f577821933d127B491D0F91202405B0dbB1bd",
10
10
  }
11
11
 
12
+ AVANTIS_SOCKET_API = "https://socket-api.avantisfi.com/v1/data"
13
+
12
14
  CONTRACT_ADDRESSES = MAINNET_ADDRESSES
@@ -1,9 +1,12 @@
1
1
  import json
2
2
  import websockets
3
- from pathlib import Path
4
- from ..types import PriceFeedResponse, PriceFeedUpdatesResponse
5
- from typing import List
3
+ from ..types import PriceFeedResponse, PriceFeedUpdatesResponse, PairInfoFeed
4
+ from typing import List, Callable
6
5
  import requests
6
+ from pydantic import ValidationError
7
+ from ..config import AVANTIS_SOCKET_API
8
+ import asyncio
9
+ from concurrent.futures import ThreadPoolExecutor
7
10
 
8
11
 
9
12
  class FeedClient:
@@ -17,6 +20,7 @@ class FeedClient:
17
20
  on_error=None,
18
21
  on_close=None,
19
22
  hermes_url="https://hermes.pyth.network/v2/updates/price/latest",
23
+ pair_fetcher: Callable = None,
20
24
  ):
21
25
  """
22
26
  Constructor for the FeedClient class.
@@ -42,6 +46,7 @@ class FeedClient:
42
46
  self._connected = False
43
47
  self._on_error = on_error
44
48
  self._on_close = on_close
49
+ self.pair_fetcher = pair_fetcher or self.default_pair_fetcher
45
50
  self._load_pair_feeds()
46
51
 
47
52
  async def listen_for_price_updates(self):
@@ -95,14 +100,65 @@ class FeedClient:
95
100
  else:
96
101
  raise e
97
102
 
103
+ async def default_pair_fetcher(self) -> List[dict]:
104
+ """
105
+ Default pair fetcher that retrieves data from the Avantis API.
106
+ Returns:
107
+ A list of validated trading pairs.
108
+ Raises:
109
+ ValueError if API response is invalid.
110
+ """
111
+ if not AVANTIS_SOCKET_API:
112
+ raise ValueError("AVANTIS_SOCKET_API is not set")
113
+ try:
114
+ response = requests.get(AVANTIS_SOCKET_API)
115
+ response.raise_for_status()
116
+
117
+ result = response.json()
118
+ pairs = result["data"]["pairInfos"].values()
119
+
120
+ return pairs
121
+ except (requests.RequestException, ValidationError) as e:
122
+ print(f"Error fetching pair feeds: {e}")
123
+ return []
124
+
98
125
  def _load_pair_feeds(self):
99
126
  """
100
- Loads the pair feeds from the json file.
127
+ Loads the pair feeds dynamically using the provided pair_fetcher function.
101
128
  """
102
- feed_path = Path(__file__).parent / "feedIds.json"
103
- with open(feed_path) as feed_file:
104
- self.pair_feeds = json.load(feed_file)
105
- self.feed_pairs = {v["id"]: k for k, v in self.pair_feeds.items()}
129
+
130
+ try:
131
+ try:
132
+ asyncio.get_running_loop()
133
+ except RuntimeError:
134
+ asyncio.set_event_loop(asyncio.new_event_loop())
135
+
136
+ with ThreadPoolExecutor() as executor:
137
+ future = executor.submit(lambda: asyncio.run(self.pair_fetcher()))
138
+ pairs = future.result()
139
+
140
+ if not pairs:
141
+ raise ValueError("Fetched pair feed data is empty or invalid.")
142
+
143
+ if isinstance(pairs, dict):
144
+ pairs = list(pairs.values())
145
+ else:
146
+ pairs = list(pairs)
147
+
148
+ if hasattr(pairs[0], "model_dump_json"):
149
+ pairs = [json.loads(pair.model_dump_json()) for pair in pairs]
150
+
151
+ validated_pairs = [PairInfoFeed.model_validate(pair) for pair in pairs]
152
+
153
+ self.pair_feeds = {
154
+ f"{pair.from_}/{pair.to}": {"id": pair.feed.feed_id}
155
+ for pair in validated_pairs
156
+ }
157
+ self.feed_pairs = {
158
+ pair.feed.feed_id: f"{pair.from_}/{pair.to}" for pair in validated_pairs
159
+ }
160
+ except Exception as e:
161
+ print(f"Failed to load pair feeds: {e}")
106
162
 
107
163
  def get_pair_from_feed_id(self, feed_id):
108
164
  """
@@ -1,4 +1,4 @@
1
- from ..types import PairInfo
1
+ from ..types import PairInfoWithData
2
2
 
3
3
 
4
4
  class PairsCache:
@@ -35,15 +35,31 @@ class PairsCache:
35
35
 
36
36
  calls = []
37
37
  for pair_index in range(pairs_count):
38
- call_data = PairStorage.encodeABI(fn_name="pairs", args=[pair_index])
39
- calls.append((PairStorage.address, call_data))
38
+ core_call_data = PairStorage.encodeABI(
39
+ fn_name="pairs", args=[pair_index]
40
+ )
41
+ pair_data_call_data = PairStorage.encodeABI(
42
+ fn_name="getPairData", args=[pair_index]
43
+ )
44
+ calls.extend(
45
+ [
46
+ (PairStorage.address, core_call_data),
47
+ (PairStorage.address, pair_data_call_data),
48
+ ]
49
+ )
40
50
 
41
51
  _, raw_data = await Multicall.functions.aggregate(calls).call()
42
52
 
43
53
  decoded_data = []
44
- for data in raw_data:
45
- decoded = self.client.utils["decoder"](PairStorage, "pairs", data)
46
- decoded_data.append(PairInfo(**decoded))
54
+ for i in range(0, len(raw_data), 2):
55
+ pair_info = self.client.utils["decoder"](
56
+ PairStorage, "pairs", raw_data[i]
57
+ )
58
+ pair_data = self.client.utils["decoder"](
59
+ PairStorage, "getPairData", raw_data[i + 1]
60
+ )
61
+ pair_info.update(pair_data)
62
+ decoded_data.append(PairInfoWithData(**pair_info))
47
63
 
48
64
  for index, pair_info in enumerate(decoded_data):
49
65
  if not pair_info.from_:
@@ -236,6 +236,8 @@ class TradeRPC:
236
236
  if trader is None:
237
237
  trader = self.client.get_signer().get_ethereum_address()
238
238
 
239
+ collateral_to_close = int(collateral_to_close * 10**6)
240
+
239
241
  execution_fee = await self.get_trade_execution_fee()
240
242
 
241
243
  transaction = await Trading.functions.closeTradeMarket(
@@ -308,7 +310,6 @@ class TradeRPC:
308
310
  trader = self.client.get_signer().get_ethereum_address()
309
311
 
310
312
  collateral_change = int(collateral_change * 10**6)
311
- fee_in_wei = 1 * 10**18
312
313
 
313
314
  feed_client = self.FeedClient()
314
315
 
@@ -328,8 +329,65 @@ class TradeRPC:
328
329
  {
329
330
  "from": trader,
330
331
  "chainId": self.client.chain_id,
331
- "value": fee_in_wei,
332
+ "value": 1,
333
+ "nonce": await self.client.get_transaction_count(trader),
334
+ }
335
+ )
336
+
337
+ return transaction
338
+
339
+ async def build_trade_tp_sl_update_tx(
340
+ self,
341
+ pair_index: int,
342
+ trade_index: int,
343
+ take_profit_price: float,
344
+ stop_loss_price: float,
345
+ trader: str = None,
346
+ ):
347
+ """
348
+ Builds a transaction to update the stop loss and take profit of a trade.
349
+
350
+ Args:
351
+ pair_index: The pair index.
352
+ trade_index: The trade index.
353
+ take_profit_price: The take profit price.
354
+ stop_loss_price: The stop loss price. Pass 0 if you want to remove the stop loss.
355
+ trader (optional): The trader's wallet address.
356
+ Returns:
357
+ A transaction object.
358
+ """
359
+ Trading = self.client.contracts.get("Trading")
360
+
361
+ if take_profit_price == 0:
362
+ raise ValueError("Take profit price cannot be 0")
363
+
364
+ if trader is None:
365
+ trader = self.client.get_signer().get_ethereum_address()
366
+
367
+ feed_client = self.FeedClient()
368
+
369
+ pair_name = await self.client.pairs_cache.get_pair_name_from_index(pair_index)
370
+
371
+ price_data = await feed_client.get_latest_price_updates([pair_name])
372
+
373
+ price_update_data = "0x" + price_data.binary.data[0]
374
+
375
+ take_profit_price = int(take_profit_price * 10**10)
376
+ stop_loss_price = int(stop_loss_price * 10**10)
377
+
378
+ transaction = await Trading.functions.updateTpAndSl(
379
+ pair_index,
380
+ trade_index,
381
+ stop_loss_price,
382
+ take_profit_price,
383
+ [price_update_data],
384
+ ).build_transaction(
385
+ {
386
+ "from": trader,
387
+ "chainId": self.client.chain_id,
388
+ "value": 1,
332
389
  "nonce": await self.client.get_transaction_count(trader),
390
+ "gas": 1_000_000,
333
391
  }
334
392
  )
335
393
 
@@ -13,6 +13,22 @@ import re
13
13
 
14
14
 
15
15
  class PairInfoFeed(BaseModel):
16
+ max_open_deviation_percentage: float = Field(..., alias="maxOpenDeviationP")
17
+ max_close_deviation_percentage: float = Field(..., alias="maxCloseDeviationP")
18
+
19
+ feed_id: str = Field(..., alias="feedId")
20
+
21
+ @field_validator(
22
+ "max_open_deviation_percentage", "max_close_deviation_percentage", mode="before"
23
+ )
24
+ def convert_max_deviation(cls, v):
25
+ return v / 10**10
26
+
27
+ class Config:
28
+ populate_by_name = True
29
+
30
+
31
+ class PairInfoBackupFeed(BaseModel):
16
32
  max_deviation_percentage: float = Field(..., alias="maxDeviationP")
17
33
  feed_id: str = Field(..., alias="feedId")
18
34
 
@@ -20,27 +36,56 @@ class PairInfoFeed(BaseModel):
20
36
  def convert_max_deviation(cls, v):
21
37
  return v / 10**10
22
38
 
39
+ class Config:
40
+ populate_by_name = True
41
+
42
+
43
+ class PairInfoLeverages(BaseModel):
44
+ min_leverage: float = Field(..., alias="minLeverage")
45
+ max_leverage: float = Field(..., alias="maxLeverage")
46
+ pnl_min_leverage: float = Field(..., alias="pnlMinLeverage")
47
+ pnl_max_leverage: float = Field(..., alias="pnlMaxLeverage")
48
+
49
+ @field_validator(
50
+ "min_leverage",
51
+ "max_leverage",
52
+ "pnl_min_leverage",
53
+ "pnl_max_leverage",
54
+ mode="before",
55
+ )
56
+ def convert_max_deviation(cls, v):
57
+ return v / 10**10
58
+
59
+
60
+ class PairInfoValues(BaseModel):
61
+ max_gain_percentage: float = Field(..., alias="maxGainP")
62
+ max_sl_percentage: float = Field(..., alias="maxSlP")
63
+ max_long_oi_percentage: float = Field(..., alias="maxLongOiP")
64
+ max_short_oi_percentage: float = Field(..., alias="maxShortOiP")
65
+ group_open_interest_percentage: float = Field(
66
+ ..., alias="groupOpenInterestPecentage"
67
+ )
68
+ max_wallet_oi_percentage: float = Field(..., alias="maxWalletOI")
69
+ is_usdc_aligned: bool = Field(..., alias="isUSDCAligned")
70
+
23
71
 
24
72
  class PairInfo(BaseModel):
25
- from_: str = Field(..., alias="from")
26
- to: str
27
73
  feed: PairInfoFeed
28
- backup_feed: PairInfoFeed = Field(..., alias="backupFeed")
74
+ backup_feed: PairInfoBackupFeed = Field(..., alias="backupFeed")
29
75
  constant_spread_bps: float = Field(..., alias="spreadP")
76
+ constant_pnl_spread_bps: float = Field(..., alias="pnlSpreadP")
77
+ leverages: PairInfoLeverages = Field(..., alias="leverages")
30
78
  price_impact_parameter: float = Field(..., alias="priceImpactMultiplier")
31
79
  skew_impact_parameter: float = Field(..., alias="skewImpactMultiplier")
32
80
  group_index: int = Field(..., alias="groupIndex")
33
81
  fee_index: int = Field(..., alias="feeIndex")
34
- group_open_interest_percentage: float = Field(
35
- ..., alias="groupOpenInterestPecentage"
36
- )
37
- max_wallet_oi: float = Field(..., alias="maxWalletOI")
82
+ values: PairInfoValues = Field(..., alias="values")
38
83
 
39
84
  @field_validator("price_impact_parameter", "skew_impact_parameter", mode="before")
40
85
  def convert_to_float_10(cls, v):
41
86
  return v / 10**10
42
87
 
43
- @field_validator("constant_spread_bps", mode="before")
88
+ @field_validator("constant_spread_bps", "constant_pnl_spread_bps", mode="before")
44
89
  def convert_to_float_10_bps(cls, v):
45
90
  return v / 10**10 * 100
46
91
 
@@ -48,8 +93,39 @@ class PairInfo(BaseModel):
48
93
  populate_by_name = True
49
94
 
50
95
 
96
+ class PairData(BaseModel):
97
+ from_: str = Field(..., alias="from")
98
+ to: str
99
+ num_tiers: int = Field(..., alias="numTiers")
100
+ tier_thresholds: Dict[str, float] = Field(..., alias="tierThresholds")
101
+ tier_timers: Dict[str, float] = Field(..., alias="timer")
102
+
103
+ @field_validator("tier_thresholds", "tier_timers", mode="before")
104
+ def convert_tuple_to_dict(cls, v):
105
+ if isinstance(v, tuple):
106
+ return {str(i): j for i, j in enumerate(v)}
107
+ return v
108
+
109
+
110
+ class PairInfoWithData(PairInfo, PairData):
111
+ class Config:
112
+ populate_by_name = True
113
+ from_attributes = True
114
+
115
+
116
+ class PairInfoFeed(BaseModel):
117
+ from_: str = Field(..., alias="from")
118
+ to: str
119
+ feed: PairInfoFeed
120
+ backup_feed: PairInfoBackupFeed = Field(..., alias="backupFeed")
121
+
122
+ class Config:
123
+ populate_by_name = True
124
+
125
+
51
126
  class OpenInterest(BaseModel):
52
127
  long: Dict[str, float]
128
+
53
129
  short: Dict[str, float]
54
130
 
55
131
 
@@ -82,7 +158,7 @@ class DepthSingle(BaseModel):
82
158
  below: float
83
159
 
84
160
 
85
- class PairInfoExtended(PairInfo):
161
+ class PairInfoExtended(PairInfoWithData):
86
162
  asset_open_interest_limit: float
87
163
  asset_open_interest: Dict[str, float]
88
164
  asset_utilization: float
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: avantis-trader-sdk
3
- Version: 0.4.0
3
+ Version: 0.7.0
4
4
  Summary: SDK for interacting with Avantis trading contracts.
5
5
  Home-page: https://avantisfi.com/
6
6
  Author: Avantis Labs
@@ -1,7 +1,7 @@
1
- avantis_trader_sdk/__init__.py,sha256=XfcfMCSlyYvs5_uVHDGSOxLxOpaHLclcjsirqmcXLS4,139
2
- avantis_trader_sdk/client.py,sha256=QfljOKja32K89bl0_PTvcT0QrF2WX2yS3lIxNjU5mAA,11068
3
- avantis_trader_sdk/config.py,sha256=ieqm9dAcbdmarBp7UfIHQQYSDx5KlVZ6OmZvxjacPeE,585
4
- avantis_trader_sdk/types.py,sha256=6B4t21ohWiyB9yZEfTC7ckznzgFFIW93z_J2m6_azPU,11754
1
+ avantis_trader_sdk/__init__.py,sha256=QSySCM3stHw3scigwfo2rG29XXKDFGiklzq9ZPTbRww,910
2
+ avantis_trader_sdk/client.py,sha256=dYGrSH5m1QesyMXEGvoLQihBQTRm_nJF22t46JeZirk,11236
3
+ avantis_trader_sdk/config.py,sha256=jFLspHAWgLWVv5VdyS25aBtiQLLcHqJJ11jkT6ubSgY,652
4
+ avantis_trader_sdk/types.py,sha256=9PNDt4nhEDxDEGsN_bYC7MOHK0w9UYwI6BSwvpFVdxY,14254
5
5
  avantis_trader_sdk/utils.py,sha256=JE3hiDA8a9KHW08u0lVsuXi6Npl8GcuUdvrSkwohvDc,2909
6
6
  avantis_trader_sdk/abis/AggregatorV3Interface.json,sha256=0sTEMeK5PfVfJM0ZoLkWkxme_PgcOKoYhxz5cQNo728,26850
7
7
  avantis_trader_sdk/abis/Sanctions.json,sha256=2FFgtlHZEXTOYtFWNjPlV56b7WSiwuY92VR9Jkik1uc,4047
@@ -88,7 +88,7 @@ avantis_trader_sdk/abis/Multicall.t.sol/MulticallGroup.json,sha256=AZVoGuVs__JE-
88
88
  avantis_trader_sdk/abis/Multicall3.sol/Multicall3.json,sha256=7-38-beNTW3Jo9ZHvpgp8JzI5ylN6llcV_fzw9syF_s,176224
89
89
  avantis_trader_sdk/abis/Ownable.sol/Ownable.json,sha256=aBFacbduOM9MRjoTB71SNiMWIytBc2t0BRcU7u-GrNk,31008
90
90
  avantis_trader_sdk/abis/PairInfos.sol/PairInfos.json,sha256=i9sWFDHIDJAlwuC0M0Y9w7Z2rhOcWDGyKYUrobI2SdI,712989
91
- avantis_trader_sdk/abis/PairStorage.sol/PairStorage.json,sha256=4PhXTV7g9JMg8tBJRn5lxnn053_lkV8EzztHDlU-cE4,504985
91
+ avantis_trader_sdk/abis/PairStorage.sol/PairStorage.json,sha256=Lcrh8PfZusTQr_ZWpSU96PBEKebb0rQrMhzge6BsjoA,305493
92
92
  avantis_trader_sdk/abis/PausableUpgradeable.sol/PausableUpgradeable.json,sha256=_STYbJg_yX9kU7He-sQjkwVo8uHTs0jotpHoi-8DYWY,31799
93
93
  avantis_trader_sdk/abis/PositionMath.sol/PositionMath.json,sha256=WouZkR-00Avs16LvtMUdWitehNKKiuiQUWr4O0I6DJM,11823
94
94
  avantis_trader_sdk/abis/PriceAggregator.sol/PriceAggregator.json,sha256=_IhAyWO2pzFu-TJg0OJRxnF8s9xE_w9khrkq7R3ztdc,393087
@@ -195,16 +195,16 @@ avantis_trader_sdk/crypto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
195
195
  avantis_trader_sdk/crypto/spki.py,sha256=CNy7A8TTwBHiNSzIj7uqiHKAeLcn1Q9MbszW_2mdXgI,3080
196
196
  avantis_trader_sdk/feed/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
197
197
  avantis_trader_sdk/feed/feedIds.json,sha256=T77nww3eRiQt8rqZBDpdxA49USGyfI0dQBPnzo-H1dE,6697
198
- avantis_trader_sdk/feed/feed_client.py,sha256=fnATL8bCNzteZZolMgrycXHNK25_TI4Lg_Y4oVN9ep8,7423
198
+ avantis_trader_sdk/feed/feed_client.py,sha256=kzn3XSbYU68R18JUB2GUN70SuyuILyGVSd65onJLsPk,9473
199
199
  avantis_trader_sdk/rpc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
200
200
  avantis_trader_sdk/rpc/asset_parameters.py,sha256=OkGyfSmiCUl7fgJaUJFQekpQ8o2_JbbSwh1gWAXdZKY,19717
201
201
  avantis_trader_sdk/rpc/blended.py,sha256=UHgrPEvkJwQJRxTrVG03Ir8IjJRGenQFov1bJvbuGi4,2512
202
202
  avantis_trader_sdk/rpc/category_parameters.py,sha256=yw-6Ib1kS25JTmZQzH7Xyn1dehUqGYBoZM_bO7G4lEE,8181
203
203
  avantis_trader_sdk/rpc/fee_parameters.py,sha256=EhJY7I66MAP_sClVhSy6KBiicpeEip5EXrIlpfbVSDM,9369
204
- avantis_trader_sdk/rpc/pairs_cache.py,sha256=CxaZKNv38AW90oINcJdG7QVGfOVYEiTWSV_vtdQ570M,4066
204
+ avantis_trader_sdk/rpc/pairs_cache.py,sha256=gjdfdIr8BGhGDIBv-PZQnJZEKeDHSt1DJZVzecCN7yY,4689
205
205
  avantis_trader_sdk/rpc/rpc_helpers.py,sha256=d3dzwEaAUVo700qK7S-bBSVX3UtrOKbPEGPqgxHS5sk,292
206
206
  avantis_trader_sdk/rpc/snapshot.py,sha256=2EMtNqfeB37dr4EsuSMBm0CAYbwWMv9evML8MZocNFw,5494
207
- avantis_trader_sdk/rpc/trade.py,sha256=Zvtj2WbDv_uuR0l8SKQ99mL1BDv9vVAP_xOUy9VRIUU,11250
207
+ avantis_trader_sdk/rpc/trade.py,sha256=jq3bYWPZqAaFjDlbs42mhbQFb8dKiGLxGYyDAsqNv8Y,13154
208
208
  avantis_trader_sdk/rpc/trading_parameters.py,sha256=ZvEJ-kjrogENIhPsETRIp-FdVaIdd2mT2fyM84SuFJk,4702
209
209
  avantis_trader_sdk/signers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
210
210
  avantis_trader_sdk/signers/base.py,sha256=QaOu0CxFq60oR4LegCp1XwONMQx8ZShXyiLZvfcbCPM,260
@@ -212,7 +212,7 @@ avantis_trader_sdk/signers/kms_signer.py,sha256=lxK3f9KQsdCDAvOE1SHleKjI8zD_3PTv
212
212
  avantis_trader_sdk/signers/local_signer.py,sha256=kUx5vExiBfvFGmoMCFR6b7_4cXx2mvYOJNqZQDIEcG8,505
213
213
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
214
214
  tests/test_client.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
215
- avantis_trader_sdk-0.4.0.dist-info/METADATA,sha256=IViGMWDcSs2vZHlLbhA9bk72mpdqaUSBkX0oQK1eflI,4916
216
- avantis_trader_sdk-0.4.0.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
217
- avantis_trader_sdk-0.4.0.dist-info/top_level.txt,sha256=XffaQJ68SGT1KUz2HHXSGSEsmNy8-AGjgtO127xhzQA,25
218
- avantis_trader_sdk-0.4.0.dist-info/RECORD,,
215
+ avantis_trader_sdk-0.7.0.dist-info/METADATA,sha256=SWtPCpMJXC0pR7QNTT9PmxLGFB16WmH1QKnGo5ZSwOI,4916
216
+ avantis_trader_sdk-0.7.0.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
217
+ avantis_trader_sdk-0.7.0.dist-info/top_level.txt,sha256=XffaQJ68SGT1KUz2HHXSGSEsmNy8-AGjgtO127xhzQA,25
218
+ avantis_trader_sdk-0.7.0.dist-info/RECORD,,