Skip to content

Commit 65e6e99

Browse files
author
abel
committed
(feat) Added support for all distribution module queries. Added also new example scripts for all queries and unit tests
1 parent e02f0c7 commit 65e6e99

14 files changed

+739
-0
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import asyncio
2+
3+
from pyinjective.async_client import AsyncClient
4+
from pyinjective.core.network import Network
5+
6+
7+
async def main() -> None:
8+
network = Network.testnet()
9+
client = AsyncClient(network)
10+
validator_address = "injvaloper1jue5dpr9lerjn6wlwtrywxrsenrf28ru89z99z"
11+
distribution_info = await client.fetch_validator_distribution_info(validator_address=validator_address)
12+
print(distribution_info)
13+
14+
15+
if __name__ == "__main__":
16+
asyncio.get_event_loop().run_until_complete(main())
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import asyncio
2+
3+
from pyinjective.async_client import AsyncClient
4+
from pyinjective.core.network import Network
5+
6+
7+
async def main() -> None:
8+
network = Network.testnet()
9+
client = AsyncClient(network)
10+
validator_address = "injvaloper1jue5dpr9lerjn6wlwtrywxrsenrf28ru89z99z"
11+
rewards = await client.fetch_validator_outstanding_rewards(validator_address=validator_address)
12+
print(rewards)
13+
14+
15+
if __name__ == "__main__":
16+
asyncio.get_event_loop().run_until_complete(main())
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import asyncio
2+
3+
from pyinjective.async_client import AsyncClient
4+
from pyinjective.core.network import Network
5+
6+
7+
async def main() -> None:
8+
network = Network.testnet()
9+
client = AsyncClient(network)
10+
validator_address = "injvaloper1jue5dpr9lerjn6wlwtrywxrsenrf28ru89z99z"
11+
commission = await client.fetch_validator_commission(validator_address=validator_address)
12+
print(commission)
13+
14+
15+
if __name__ == "__main__":
16+
asyncio.get_event_loop().run_until_complete(main())
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import asyncio
2+
3+
from pyinjective.async_client import AsyncClient
4+
from pyinjective.client.model.pagination import PaginationOption
5+
from pyinjective.core.network import Network
6+
7+
8+
async def main() -> None:
9+
# select network: local, testnet, mainnet
10+
network = Network.testnet()
11+
client = AsyncClient(network)
12+
limit = 2
13+
pagination = PaginationOption(limit=limit)
14+
validator_address = "injvaloper1jue5dpr9lerjn6wlwtrywxrsenrf28ru89z99z"
15+
contracts = await client.fetch_validator_slashes(validator_address=validator_address, pagination=pagination)
16+
print(contracts)
17+
18+
19+
if __name__ == "__main__":
20+
asyncio.get_event_loop().run_until_complete(main())
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import asyncio
2+
3+
from pyinjective.async_client import AsyncClient
4+
from pyinjective.core.network import Network
5+
6+
7+
async def main() -> None:
8+
network = Network.testnet()
9+
client = AsyncClient(network)
10+
delegator_address = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r"
11+
validator_address = "injvaloper156t3yxd4udv0h9gwagfcmwnmm3quy0nph7tyh5"
12+
rewards = await client.fetch_delegation_rewards(
13+
delegator_address=delegator_address, validator_address=validator_address
14+
)
15+
print(rewards)
16+
17+
18+
if __name__ == "__main__":
19+
asyncio.get_event_loop().run_until_complete(main())
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import asyncio
2+
3+
from pyinjective.async_client import AsyncClient
4+
from pyinjective.core.network import Network
5+
6+
7+
async def main() -> None:
8+
network = Network.testnet()
9+
client = AsyncClient(network)
10+
delegator_address = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r"
11+
rewards = await client.fetch_delegation_total_rewards(
12+
delegator_address=delegator_address,
13+
)
14+
print(rewards)
15+
16+
17+
if __name__ == "__main__":
18+
asyncio.get_event_loop().run_until_complete(main())
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import asyncio
2+
3+
from pyinjective.async_client import AsyncClient
4+
from pyinjective.core.network import Network
5+
6+
7+
async def main() -> None:
8+
network = Network.testnet()
9+
client = AsyncClient(network)
10+
delegator_address = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r"
11+
validators = await client.fetch_delegator_validators(
12+
delegator_address=delegator_address,
13+
)
14+
print(validators)
15+
16+
17+
if __name__ == "__main__":
18+
asyncio.get_event_loop().run_until_complete(main())
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import asyncio
2+
3+
from pyinjective.async_client import AsyncClient
4+
from pyinjective.core.network import Network
5+
6+
7+
async def main() -> None:
8+
network = Network.testnet()
9+
client = AsyncClient(network)
10+
delegator_address = "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r"
11+
withdraw_address = await client.fetch_delegator_withdraw_address(
12+
delegator_address=delegator_address,
13+
)
14+
print(withdraw_address)
15+
16+
17+
if __name__ == "__main__":
18+
asyncio.get_event_loop().run_until_complete(main())
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import asyncio
2+
3+
from pyinjective.async_client import AsyncClient
4+
from pyinjective.core.network import Network
5+
6+
7+
async def main() -> None:
8+
network = Network.testnet()
9+
client = AsyncClient(network)
10+
community_pool = await client.fetch_community_pool()
11+
print(community_pool)
12+
13+
14+
if __name__ == "__main__":
15+
asyncio.get_event_loop().run_until_complete(main())

pyinjective/async_client.py

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from pyinjective.client.chain.grpc.chain_grpc_auth_api import ChainGrpcAuthApi
1313
from pyinjective.client.chain.grpc.chain_grpc_authz_api import ChainGrpcAuthZApi
1414
from pyinjective.client.chain.grpc.chain_grpc_bank_api import ChainGrpcBankApi
15+
from pyinjective.client.chain.grpc.chain_grpc_distribution_api import ChainGrpcDistributionApi
1516
from pyinjective.client.chain.grpc.chain_grpc_token_factory_api import ChainGrpcTokenFactoryApi
1617
from pyinjective.client.chain.grpc.chain_grpc_wasm_api import ChainGrpcWasmApi
1718
from pyinjective.client.chain.grpc_stream.chain_grpc_chain_stream import ChainGrpcChainStream
@@ -178,6 +179,12 @@ def __init__(
178179
metadata_query_provider=self._chain_cookie_metadata_requestor
179180
),
180181
)
182+
self.distribution_api = ChainGrpcDistributionApi(
183+
channel=self.chain_channel,
184+
metadata_provider=lambda: self.network.chain_metadata(
185+
metadata_query_provider=self._chain_cookie_metadata_requestor
186+
),
187+
)
181188
self.token_factory_api = ChainGrpcTokenFactoryApi(
182189
channel=self.chain_channel,
183190
metadata_provider=lambda: self.network.chain_metadata(
@@ -572,6 +579,66 @@ async def fetch_send_enabled(
572579
) -> Dict[str, Any]:
573580
return await self.bank_api.fetch_send_enabled(denoms=denoms, pagination=pagination)
574581

582+
async def fetch_validator_distribution_info(self, validator_address: str) -> Dict[str, Any]:
583+
return await self.distribution_api.fetch_validator_distribution_info(validator_address=validator_address)
584+
585+
async def fetch_validator_outstanding_rewards(self, validator_address: str) -> Dict[str, Any]:
586+
return await self.distribution_api.fetch_validator_outstanding_rewards(validator_address=validator_address)
587+
588+
async def fetch_validator_commission(self, validator_address: str) -> Dict[str, Any]:
589+
return await self.distribution_api.fetch_validator_commission(validator_address=validator_address)
590+
591+
async def fetch_validator_slashes(
592+
self,
593+
validator_address: str,
594+
starting_height: Optional[int] = None,
595+
ending_height: Optional[int] = None,
596+
pagination: Optional[PaginationOption] = None,
597+
) -> Dict[str, Any]:
598+
return await self.distribution_api.fetch_validator_slashes(
599+
validator_address=validator_address,
600+
starting_height=starting_height,
601+
ending_height=ending_height,
602+
pagination=pagination,
603+
)
604+
605+
async def fetch_delegation_rewards(
606+
self,
607+
delegator_address: str,
608+
validator_address: str,
609+
) -> Dict[str, Any]:
610+
return await self.distribution_api.fetch_delegation_rewards(
611+
delegator_address=delegator_address,
612+
validator_address=validator_address,
613+
)
614+
615+
async def fetch_delegation_total_rewards(
616+
self,
617+
delegator_address: str,
618+
) -> Dict[str, Any]:
619+
return await self.distribution_api.fetch_delegation_total_rewards(
620+
delegator_address=delegator_address,
621+
)
622+
623+
async def fetch_delegator_validators(
624+
self,
625+
delegator_address: str,
626+
) -> Dict[str, Any]:
627+
return await self.distribution_api.fetch_delegator_validators(
628+
delegator_address=delegator_address,
629+
)
630+
631+
async def fetch_delegator_withdraw_address(
632+
self,
633+
delegator_address: str,
634+
) -> Dict[str, Any]:
635+
return await self.distribution_api.fetch_delegator_withdraw_address(
636+
delegator_address=delegator_address,
637+
)
638+
639+
async def fetch_community_pool(self) -> Dict[str, Any]:
640+
return await self.distribution_api.fetch_community_pool()
641+
575642
# Injective Exchange client methods
576643

577644
# Auction RPC

0 commit comments

Comments
 (0)