Skip to content

Commit 52c798f

Browse files
committed
(feat) Added again support for chain stream V2
1 parent 0e6a4ca commit 52c798f

File tree

16 files changed

+1045
-129
lines changed

16 files changed

+1045
-129
lines changed

buf.gen.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@ inputs:
2424
# tag: v1.13.0
2525
# subdir: proto
2626
- git_repo: https://github.com/InjectiveLabs/injective-core
27-
branch: feat/update_chain_stream_for_exchange_v2
27+
branch: feat/add_exchange_v1_compatibility_to_chain_stream
2828
subdir: proto
2929
- directory: proto

examples/chain_client/7_ChainStream.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,29 +31,29 @@ async def main() -> None:
3131
inj_usdt_market = "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe"
3232
inj_usdt_perp_market = "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6"
3333

34-
bank_balances_filter = composer.chain_stream_bank_balances_filter(
34+
bank_balances_filter = composer.chain_stream_bank_balances_v2_filter(
3535
accounts=["inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r"]
3636
)
37-
subaccount_deposits_filter = composer.chain_stream_subaccount_deposits_filter(subaccount_ids=[subaccount_id])
38-
spot_trades_filter = composer.chain_stream_trades_filter(subaccount_ids=["*"], market_ids=[inj_usdt_market])
39-
derivative_trades_filter = composer.chain_stream_trades_filter(
37+
subaccount_deposits_filter = composer.chain_stream_subaccount_deposits_v2_filter(subaccount_ids=[subaccount_id])
38+
spot_trades_filter = composer.chain_stream_trades_v2_filter(subaccount_ids=["*"], market_ids=[inj_usdt_market])
39+
derivative_trades_filter = composer.chain_stream_trades_v2_filter(
4040
subaccount_ids=["*"], market_ids=[inj_usdt_perp_market]
4141
)
42-
spot_orders_filter = composer.chain_stream_orders_filter(
42+
spot_orders_filter = composer.chain_stream_orders_v2_filter(
4343
subaccount_ids=[subaccount_id], market_ids=[inj_usdt_market]
4444
)
45-
derivative_orders_filter = composer.chain_stream_orders_filter(
45+
derivative_orders_filter = composer.chain_stream_orders_v2_filter(
4646
subaccount_ids=[subaccount_id], market_ids=[inj_usdt_perp_market]
4747
)
48-
spot_orderbooks_filter = composer.chain_stream_orderbooks_filter(market_ids=[inj_usdt_market])
49-
derivative_orderbooks_filter = composer.chain_stream_orderbooks_filter(market_ids=[inj_usdt_perp_market])
50-
positions_filter = composer.chain_stream_positions_filter(
48+
spot_orderbooks_filter = composer.chain_stream_orderbooks_v2_filter(market_ids=[inj_usdt_market])
49+
derivative_orderbooks_filter = composer.chain_stream_orderbooks_v2_filter(market_ids=[inj_usdt_perp_market])
50+
positions_filter = composer.chain_stream_positions_v2_filter(
5151
subaccount_ids=[subaccount_id], market_ids=[inj_usdt_perp_market]
5252
)
53-
oracle_price_filter = composer.chain_stream_oracle_price_filter(symbols=["INJ", "USDT"])
53+
oracle_price_filter = composer.chain_stream_oracle_price_v2_filter(symbols=["INJ", "USDT"])
5454

5555
task = asyncio.get_event_loop().create_task(
56-
client.listen_chain_stream_updates(
56+
client.listen_chain_stream_v2_updates(
5757
callback=chain_stream_event_processor,
5858
on_end_callback=stream_closed_processor,
5959
on_status_callback=stream_error_processor,

pyinjective/async_client.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
tendermint_pb2 as ibc_tendermint,
5757
)
5858
from pyinjective.proto.injective.stream.v1beta1 import query_pb2 as chain_stream_query
59+
from pyinjective.proto.injective.stream.v2 import query_pb2 as chain_stream_v2_query
5960
from pyinjective.proto.injective.types.v1beta1 import account_pb2
6061
from pyinjective.utils.logger import LoggerProvider
6162

@@ -2481,6 +2482,11 @@ async def listen_chain_stream_updates(
24812482
positions_filter: Optional[chain_stream_query.PositionsFilter] = None,
24822483
oracle_price_filter: Optional[chain_stream_query.OraclePriceFilter] = None,
24832484
):
2485+
"""
2486+
This method is deprecated and will be removed soon. Please use `listen_chain_stream_v2_updates` instead
2487+
"""
2488+
warn("This method is deprecated. Use listen_chain_stream_v2_updates instead", DeprecationWarning, stacklevel=2)
2489+
24842490
return await self.chain_stream_api.stream(
24852491
callback=callback,
24862492
on_end_callback=on_end_callback,
@@ -2497,6 +2503,38 @@ async def listen_chain_stream_updates(
24972503
oracle_price_filter=oracle_price_filter,
24982504
)
24992505

2506+
async def listen_chain_stream_v2_updates(
2507+
self,
2508+
callback: Callable,
2509+
on_end_callback: Optional[Callable] = None,
2510+
on_status_callback: Optional[Callable] = None,
2511+
bank_balances_filter: Optional[chain_stream_v2_query.BankBalancesFilter] = None,
2512+
subaccount_deposits_filter: Optional[chain_stream_v2_query.SubaccountDepositsFilter] = None,
2513+
spot_trades_filter: Optional[chain_stream_v2_query.TradesFilter] = None,
2514+
derivative_trades_filter: Optional[chain_stream_v2_query.TradesFilter] = None,
2515+
spot_orders_filter: Optional[chain_stream_v2_query.OrdersFilter] = None,
2516+
derivative_orders_filter: Optional[chain_stream_v2_query.OrdersFilter] = None,
2517+
spot_orderbooks_filter: Optional[chain_stream_v2_query.OrderbookFilter] = None,
2518+
derivative_orderbooks_filter: Optional[chain_stream_v2_query.OrderbookFilter] = None,
2519+
positions_filter: Optional[chain_stream_v2_query.PositionsFilter] = None,
2520+
oracle_price_filter: Optional[chain_stream_v2_query.OraclePriceFilter] = None,
2521+
):
2522+
return await self.chain_stream_api.stream_v2(
2523+
callback=callback,
2524+
on_end_callback=on_end_callback,
2525+
on_status_callback=on_status_callback,
2526+
bank_balances_filter=bank_balances_filter,
2527+
subaccount_deposits_filter=subaccount_deposits_filter,
2528+
spot_trades_filter=spot_trades_filter,
2529+
derivative_trades_filter=derivative_trades_filter,
2530+
spot_orders_filter=spot_orders_filter,
2531+
derivative_orders_filter=derivative_orders_filter,
2532+
spot_orderbooks_filter=spot_orderbooks_filter,
2533+
derivative_orderbooks_filter=derivative_orderbooks_filter,
2534+
positions_filter=positions_filter,
2535+
oracle_price_filter=oracle_price_filter,
2536+
)
2537+
25002538
# region IBC Transfer module
25012539
async def fetch_denom_trace(self, hash: str) -> Dict[str, Any]:
25022540
return await self.ibc_transfer_api.fetch_denom_trace(hash=hash)

pyinjective/client/chain/grpc_stream/chain_grpc_chain_stream.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,17 @@
44

55
from pyinjective.core.network import CookieAssistant
66
from pyinjective.proto.injective.stream.v1beta1 import query_pb2 as chain_stream_pb, query_pb2_grpc as chain_stream_grpc
7+
from pyinjective.proto.injective.stream.v2 import (
8+
query_pb2 as chain_stream_v2_pb,
9+
query_pb2_grpc as chain_stream_v2_grpc,
10+
)
711
from pyinjective.utils.grpc_api_stream_assistant import GrpcApiStreamAssistant
812

913

1014
class ChainGrpcChainStream:
1115
def __init__(self, channel: Channel, cookie_assistant: CookieAssistant):
1216
self._stub = chain_stream_grpc.StreamStub(channel)
17+
self._stub_v2 = chain_stream_v2_grpc.StreamStub(channel)
1318
self._assistant = GrpcApiStreamAssistant(cookie_assistant=cookie_assistant)
1419

1520
async def stream(
@@ -48,3 +53,40 @@ async def stream(
4853
on_end_callback=on_end_callback,
4954
on_status_callback=on_status_callback,
5055
)
56+
57+
async def stream_v2(
58+
self,
59+
callback: Callable,
60+
on_end_callback: Optional[Callable] = None,
61+
on_status_callback: Optional[Callable] = None,
62+
bank_balances_filter: Optional[chain_stream_v2_pb.BankBalancesFilter] = None,
63+
subaccount_deposits_filter: Optional[chain_stream_v2_pb.SubaccountDepositsFilter] = None,
64+
spot_trades_filter: Optional[chain_stream_v2_pb.TradesFilter] = None,
65+
derivative_trades_filter: Optional[chain_stream_v2_pb.TradesFilter] = None,
66+
spot_orders_filter: Optional[chain_stream_v2_pb.OrdersFilter] = None,
67+
derivative_orders_filter: Optional[chain_stream_v2_pb.OrdersFilter] = None,
68+
spot_orderbooks_filter: Optional[chain_stream_v2_pb.OrderbookFilter] = None,
69+
derivative_orderbooks_filter: Optional[chain_stream_v2_pb.OrderbookFilter] = None,
70+
positions_filter: Optional[chain_stream_v2_pb.PositionsFilter] = None,
71+
oracle_price_filter: Optional[chain_stream_v2_pb.OraclePriceFilter] = None,
72+
):
73+
request = chain_stream_v2_pb.StreamRequest(
74+
bank_balances_filter=bank_balances_filter,
75+
subaccount_deposits_filter=subaccount_deposits_filter,
76+
spot_trades_filter=spot_trades_filter,
77+
derivative_trades_filter=derivative_trades_filter,
78+
spot_orders_filter=spot_orders_filter,
79+
derivative_orders_filter=derivative_orders_filter,
80+
spot_orderbooks_filter=spot_orderbooks_filter,
81+
derivative_orderbooks_filter=derivative_orderbooks_filter,
82+
positions_filter=positions_filter,
83+
oracle_price_filter=oracle_price_filter,
84+
)
85+
86+
await self._assistant.listen_stream(
87+
call=self._stub_v2.StreamV2,
88+
request=request,
89+
callback=callback,
90+
on_end_callback=on_end_callback,
91+
on_status_callback=on_status_callback,
92+
)

pyinjective/composer.py

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
tx_pb2 as injective_permissions_tx_pb,
4747
)
4848
from pyinjective.proto.injective.stream.v1beta1 import query_pb2 as chain_stream_query
49+
from pyinjective.proto.injective.stream.v2 import query_pb2 as chain_stream_v2_query
4950
from pyinjective.proto.injective.tokenfactory.v1beta1 import tx_pb2 as token_factory_tx_pb
5051
from pyinjective.proto.injective.wasmx.v1 import tx_pb2 as wasmx_tx_pb
5152
from pyinjective.utils.denom import Denom
@@ -2703,13 +2704,30 @@ def MsgVote(
27032704
def chain_stream_bank_balances_filter(
27042705
self, accounts: Optional[List[str]] = None
27052706
) -> chain_stream_query.BankBalancesFilter:
2707+
"""
2708+
This method is deprecated and will be removed soon. Please use `chain_stream_bank_balances_v2_filter` instead
2709+
"""
2710+
warn(
2711+
"This method is deprecated. Use chain_stream_bank_balances_v2_filter instead",
2712+
DeprecationWarning,
2713+
stacklevel=2,
2714+
)
27062715
accounts = accounts or ["*"]
27072716
return chain_stream_query.BankBalancesFilter(accounts=accounts)
27082717

27092718
def chain_stream_subaccount_deposits_filter(
27102719
self,
27112720
subaccount_ids: Optional[List[str]] = None,
27122721
) -> chain_stream_query.SubaccountDepositsFilter:
2722+
"""
2723+
This method is deprecated and will be removed soon.
2724+
Please use `chain_stream_subaccount_deposits_v2_filter` instead
2725+
"""
2726+
warn(
2727+
"This method is deprecated. Use chain_stream_subaccount_deposits_v2_filter instead",
2728+
DeprecationWarning,
2729+
stacklevel=2,
2730+
)
27132731
subaccount_ids = subaccount_ids or ["*"]
27142732
return chain_stream_query.SubaccountDepositsFilter(subaccount_ids=subaccount_ids)
27152733

@@ -2718,6 +2736,11 @@ def chain_stream_trades_filter(
27182736
subaccount_ids: Optional[List[str]] = None,
27192737
market_ids: Optional[List[str]] = None,
27202738
) -> chain_stream_query.TradesFilter:
2739+
"""
2740+
This method is deprecated and will be removed soon. Please use `chain_stream_trades_v2_filter` instead
2741+
"""
2742+
warn("This method is deprecated. Use chain_stream_trades_v2_filter instead", DeprecationWarning, stacklevel=2)
2743+
27212744
subaccount_ids = subaccount_ids or ["*"]
27222745
market_ids = market_ids or ["*"]
27232746
return chain_stream_query.TradesFilter(subaccount_ids=subaccount_ids, market_ids=market_ids)
@@ -2727,6 +2750,11 @@ def chain_stream_orders_filter(
27272750
subaccount_ids: Optional[List[str]] = None,
27282751
market_ids: Optional[List[str]] = None,
27292752
) -> chain_stream_query.OrdersFilter:
2753+
"""
2754+
This method is deprecated and will be removed soon. Please use `chain_stream_orders_v2_filter` instead
2755+
"""
2756+
warn("This method is deprecated. Use chain_stream_orders_v2_filter instead", DeprecationWarning, stacklevel=2)
2757+
27302758
subaccount_ids = subaccount_ids or ["*"]
27312759
market_ids = market_ids or ["*"]
27322760
return chain_stream_query.OrdersFilter(subaccount_ids=subaccount_ids, market_ids=market_ids)
@@ -2735,6 +2763,13 @@ def chain_stream_orderbooks_filter(
27352763
self,
27362764
market_ids: Optional[List[str]] = None,
27372765
) -> chain_stream_query.OrderbookFilter:
2766+
"""
2767+
This method is deprecated and will be removed soon. Please use `chain_stream_orderbooks_v2_filter` instead
2768+
"""
2769+
warn(
2770+
"This method is deprecated. Use chain_stream_orderbooks_v2_filter instead", DeprecationWarning, stacklevel=2
2771+
)
2772+
27382773
market_ids = market_ids or ["*"]
27392774
return chain_stream_query.OrderbookFilter(market_ids=market_ids)
27402775

@@ -2743,6 +2778,13 @@ def chain_stream_positions_filter(
27432778
subaccount_ids: Optional[List[str]] = None,
27442779
market_ids: Optional[List[str]] = None,
27452780
) -> chain_stream_query.PositionsFilter:
2781+
"""
2782+
This method is deprecated and will be removed soon. Please use `chain_stream_positions_v2_filter` instead
2783+
"""
2784+
warn(
2785+
"This method is deprecated. Use chain_stream_positions_v2_filter instead", DeprecationWarning, stacklevel=2
2786+
)
2787+
27462788
subaccount_ids = subaccount_ids or ["*"]
27472789
market_ids = market_ids or ["*"]
27482790
return chain_stream_query.PositionsFilter(subaccount_ids=subaccount_ids, market_ids=market_ids)
@@ -2751,9 +2793,72 @@ def chain_stream_oracle_price_filter(
27512793
self,
27522794
symbols: Optional[List[str]] = None,
27532795
) -> chain_stream_query.PositionsFilter:
2796+
"""
2797+
This method is deprecated and will be removed soon. Please use `chain_stream_oracle_price_v2_filter` instead
2798+
"""
2799+
warn(
2800+
"This method is deprecated. Use chain_stream_oracle_price_v2_filter instead",
2801+
DeprecationWarning,
2802+
stacklevel=2,
2803+
)
2804+
27542805
symbols = symbols or ["*"]
27552806
return chain_stream_query.OraclePriceFilter(symbol=symbols)
27562807

2808+
def chain_stream_bank_balances_v2_filter(
2809+
self, accounts: Optional[List[str]] = None
2810+
) -> chain_stream_v2_query.BankBalancesFilter:
2811+
accounts = accounts or ["*"]
2812+
return chain_stream_v2_query.BankBalancesFilter(accounts=accounts)
2813+
2814+
def chain_stream_subaccount_deposits_v2_filter(
2815+
self,
2816+
subaccount_ids: Optional[List[str]] = None,
2817+
) -> chain_stream_v2_query.SubaccountDepositsFilter:
2818+
subaccount_ids = subaccount_ids or ["*"]
2819+
return chain_stream_v2_query.SubaccountDepositsFilter(subaccount_ids=subaccount_ids)
2820+
2821+
def chain_stream_trades_v2_filter(
2822+
self,
2823+
subaccount_ids: Optional[List[str]] = None,
2824+
market_ids: Optional[List[str]] = None,
2825+
) -> chain_stream_v2_query.TradesFilter:
2826+
subaccount_ids = subaccount_ids or ["*"]
2827+
market_ids = market_ids or ["*"]
2828+
return chain_stream_v2_query.TradesFilter(subaccount_ids=subaccount_ids, market_ids=market_ids)
2829+
2830+
def chain_stream_orders_v2_filter(
2831+
self,
2832+
subaccount_ids: Optional[List[str]] = None,
2833+
market_ids: Optional[List[str]] = None,
2834+
) -> chain_stream_v2_query.OrdersFilter:
2835+
subaccount_ids = subaccount_ids or ["*"]
2836+
market_ids = market_ids or ["*"]
2837+
return chain_stream_v2_query.OrdersFilter(subaccount_ids=subaccount_ids, market_ids=market_ids)
2838+
2839+
def chain_stream_orderbooks_v2_filter(
2840+
self,
2841+
market_ids: Optional[List[str]] = None,
2842+
) -> chain_stream_v2_query.OrderbookFilter:
2843+
market_ids = market_ids or ["*"]
2844+
return chain_stream_v2_query.OrderbookFilter(market_ids=market_ids)
2845+
2846+
def chain_stream_positions_v2_filter(
2847+
self,
2848+
subaccount_ids: Optional[List[str]] = None,
2849+
market_ids: Optional[List[str]] = None,
2850+
) -> chain_stream_v2_query.PositionsFilter:
2851+
subaccount_ids = subaccount_ids or ["*"]
2852+
market_ids = market_ids or ["*"]
2853+
return chain_stream_v2_query.PositionsFilter(subaccount_ids=subaccount_ids, market_ids=market_ids)
2854+
2855+
def chain_stream_oracle_price_v2_filter(
2856+
self,
2857+
symbols: Optional[List[str]] = None,
2858+
) -> chain_stream_v2_query.PositionsFilter:
2859+
symbols = symbols or ["*"]
2860+
return chain_stream_v2_query.OraclePriceFilter(symbol=symbols)
2861+
27572862
# endregion
27582863

27592864
# ------------------------------------------------

0 commit comments

Comments
 (0)