|
| 1 | +import grpc |
| 2 | +import pytest |
| 3 | + |
| 4 | +from pyinjective.client.chain.grpc.chain_grpc_token_factory_api import ChainGrpcTokenFactoryApi |
| 5 | +from pyinjective.core.network import Network |
| 6 | +from pyinjective.proto.cosmos.base.v1beta1 import coin_pb2 as coin_pb |
| 7 | +from pyinjective.proto.injective.tokenfactory.v1beta1 import ( |
| 8 | + authorityMetadata_pb2 as token_factory_authority_metadata_pb, |
| 9 | + genesis_pb2 as token_factory_genesis_pb, |
| 10 | + params_pb2 as token_factory_params_pb, |
| 11 | + query_pb2 as token_factory_query_pb, |
| 12 | +) |
| 13 | +from tests.client.chain.grpc.configurable_token_factory_query_servicer import ConfigurableTokenFactoryQueryServicer |
| 14 | + |
| 15 | + |
| 16 | +@pytest.fixture |
| 17 | +def token_factory_query_servicer(): |
| 18 | + return ConfigurableTokenFactoryQueryServicer() |
| 19 | + |
| 20 | + |
| 21 | +class TestChainGrpcTokenFactoryApi: |
| 22 | + @pytest.mark.asyncio |
| 23 | + async def test_fetch_module_params( |
| 24 | + self, |
| 25 | + token_factory_query_servicer, |
| 26 | + ): |
| 27 | + coin = coin_pb.Coin(denom="inj", amount="988987297011197594664") |
| 28 | + params = token_factory_params_pb.Params( |
| 29 | + denom_creation_fee=[coin], |
| 30 | + ) |
| 31 | + token_factory_query_servicer.params_responses.append(token_factory_query_pb.QueryParamsResponse(params=params)) |
| 32 | + |
| 33 | + network = Network.devnet() |
| 34 | + channel = grpc.aio.insecure_channel(network.grpc_endpoint) |
| 35 | + |
| 36 | + api = ChainGrpcTokenFactoryApi(channel=channel, metadata_provider=lambda: self._dummy_metadata_provider()) |
| 37 | + api._query_stub = token_factory_query_servicer |
| 38 | + |
| 39 | + module_params = await api.fetch_module_params() |
| 40 | + expected_params = { |
| 41 | + "params": { |
| 42 | + "denomCreationFee": [ |
| 43 | + {"denom": coin.denom, "amount": coin.amount}, |
| 44 | + ], |
| 45 | + } |
| 46 | + } |
| 47 | + |
| 48 | + assert module_params == expected_params |
| 49 | + |
| 50 | + @pytest.mark.asyncio |
| 51 | + async def test_fetch_denom_authority_metadata( |
| 52 | + self, |
| 53 | + token_factory_query_servicer, |
| 54 | + ): |
| 55 | + authority_metadata = token_factory_authority_metadata_pb.DenomAuthorityMetadata( |
| 56 | + admin="inj1ady3s7whq30l4fx8sj3x6muv5mx4dfdlcpv8n7", |
| 57 | + ) |
| 58 | + token_factory_query_servicer.denom_authority_metadata_responses.append( |
| 59 | + token_factory_query_pb.QueryDenomAuthorityMetadataResponse( |
| 60 | + authority_metadata=authority_metadata, |
| 61 | + ) |
| 62 | + ) |
| 63 | + |
| 64 | + network = Network.devnet() |
| 65 | + channel = grpc.aio.insecure_channel(network.grpc_endpoint) |
| 66 | + |
| 67 | + api = ChainGrpcTokenFactoryApi(channel=channel, metadata_provider=lambda: self._dummy_metadata_provider()) |
| 68 | + api._query_stub = token_factory_query_servicer |
| 69 | + |
| 70 | + metadata = await api.fetch_denom_authority_metadata( |
| 71 | + creator=authority_metadata.admin, |
| 72 | + sub_denom="inj", |
| 73 | + ) |
| 74 | + expected_metadata = { |
| 75 | + "authorityMetadata": { |
| 76 | + "admin": authority_metadata.admin, |
| 77 | + }, |
| 78 | + } |
| 79 | + |
| 80 | + assert metadata == expected_metadata |
| 81 | + |
| 82 | + @pytest.mark.asyncio |
| 83 | + async def test_fetch_denoms_from_creator( |
| 84 | + self, |
| 85 | + token_factory_query_servicer, |
| 86 | + ): |
| 87 | + denom = "factory/inj17vytdwqczqz72j65saukplrktd4gyfme5agf6c/weth" |
| 88 | + token_factory_query_servicer.denoms_from_creator_responses.append( |
| 89 | + token_factory_query_pb.QueryDenomsFromCreatorResponse(denoms=[denom]) |
| 90 | + ) |
| 91 | + |
| 92 | + network = Network.devnet() |
| 93 | + channel = grpc.aio.insecure_channel(network.grpc_endpoint) |
| 94 | + |
| 95 | + api = ChainGrpcTokenFactoryApi(channel=channel, metadata_provider=lambda: self._dummy_metadata_provider()) |
| 96 | + api._query_stub = token_factory_query_servicer |
| 97 | + |
| 98 | + denoms = await api.fetch_denoms_from_creator(creator="inj1ady3s7whq30l4fx8sj3x6muv5mx4dfdlcpv8n7") |
| 99 | + expected_denoms = {"denoms": [denom]} |
| 100 | + |
| 101 | + assert denoms == expected_denoms |
| 102 | + |
| 103 | + @pytest.mark.asyncio |
| 104 | + async def test_fetch_tokenfactory_module_state( |
| 105 | + self, |
| 106 | + token_factory_query_servicer, |
| 107 | + ): |
| 108 | + coin = coin_pb.Coin(denom="inj", amount="988987297011197594664") |
| 109 | + params = token_factory_params_pb.Params( |
| 110 | + denom_creation_fee=[coin], |
| 111 | + ) |
| 112 | + authority_metadata = token_factory_authority_metadata_pb.DenomAuthorityMetadata( |
| 113 | + admin="inj1apmvarl2xyv6kecx2ukkeymddw3we4zkygjyc0", |
| 114 | + ) |
| 115 | + genesis_denom = token_factory_genesis_pb.GenesisDenom( |
| 116 | + denom="factory/inj1apmvarl2xyv6kecx2ukkeymddw3we4zkygjyc0/ninja", |
| 117 | + authority_metadata=authority_metadata, |
| 118 | + name="Dog Wif Nunchucks", |
| 119 | + symbol="NINJA", |
| 120 | + ) |
| 121 | + state = token_factory_genesis_pb.GenesisState( |
| 122 | + params=params, |
| 123 | + factory_denoms=[genesis_denom], |
| 124 | + ) |
| 125 | + token_factory_query_servicer.tokenfactory_module_state_responses.append( |
| 126 | + token_factory_query_pb.QueryModuleStateResponse(state=state) |
| 127 | + ) |
| 128 | + |
| 129 | + network = Network.devnet() |
| 130 | + channel = grpc.aio.insecure_channel(network.grpc_endpoint) |
| 131 | + |
| 132 | + api = ChainGrpcTokenFactoryApi(channel=channel, metadata_provider=lambda: self._dummy_metadata_provider()) |
| 133 | + api._query_stub = token_factory_query_servicer |
| 134 | + |
| 135 | + state = await api.fetch_tokenfactory_module_state() |
| 136 | + expected_state = { |
| 137 | + "state": { |
| 138 | + "params": { |
| 139 | + "denomCreationFee": [ |
| 140 | + {"denom": coin.denom, "amount": coin.amount}, |
| 141 | + ], |
| 142 | + }, |
| 143 | + "factoryDenoms": [ |
| 144 | + { |
| 145 | + "denom": genesis_denom.denom, |
| 146 | + "authorityMetadata": { |
| 147 | + "admin": authority_metadata.admin, |
| 148 | + }, |
| 149 | + "name": genesis_denom.name, |
| 150 | + "symbol": genesis_denom.symbol, |
| 151 | + } |
| 152 | + ], |
| 153 | + } |
| 154 | + } |
| 155 | + |
| 156 | + assert state == expected_state |
| 157 | + |
| 158 | + async def _dummy_metadata_provider(self): |
| 159 | + return None |
0 commit comments