Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 23 additions & 17 deletions bittensor/core/async_subtensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -2385,6 +2385,17 @@ async def get_liquidity_list(
logging.debug(f"Subnet {netuid} is not active.")
return None

positions_response = await self.query_map(
module="Swap",
name="Positions",
params=[netuid, wallet.coldkeypub.ss58_address],
block=block,
block_hash=block_hash,
reuse_block=reuse_block,
)
if len(positions_response.records) == 0:
return []

block_hash = await self.determine_block_hash(
block=block, block_hash=block_hash, reuse_block=reuse_block
)
Expand All @@ -2408,25 +2419,20 @@ async def get_liquidity_list(
params=[netuid],
block_hash=block_hash,
)

(
(fee_global_tao_query, fee_global_alpha_query, sqrt_price_query),
positions_response,
) = await asyncio.gather(
self.substrate.query_multi(
[
fee_global_tao_query_sk,
fee_global_alpha_query_sk,
sqrt_price_query_sk,
],
block_hash=block_hash,
),
self.query_map(
module="Swap",
name="Positions",
block=block,
params=[netuid, wallet.coldkeypub.ss58_address],
),
fee_global_tao_query,
fee_global_alpha_query,
sqrt_price_query,
) = await self.substrate.query_multi(
storage_keys=[
fee_global_tao_query_sk,
fee_global_alpha_query_sk,
sqrt_price_query_sk,
],
block_hash=block_hash,
)

# convert to floats
fee_global_tao = fixed_to_float(fee_global_tao_query[1])
fee_global_alpha = fixed_to_float(fee_global_alpha_query[1])
Expand Down
19 changes: 11 additions & 8 deletions bittensor/core/subtensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -1615,6 +1615,16 @@ def get_liquidity_list(
logging.debug(f"Subnet {netuid} is not active.")
return None

# Fetch positions
positions_response = self.query_map(
module="Swap",
name="Positions",
block=block,
params=[netuid, wallet.coldkeypub.ss58_address],
)
if len(positions_response.records) == 0:
return []

block_hash = self.determine_block_hash(block)

# Fetch global fees and current price
Expand All @@ -1638,7 +1648,7 @@ def get_liquidity_list(
)
fee_global_tao_query, fee_global_alpha_query, sqrt_price_query = (
self.substrate.query_multi(
[
storage_keys=[
fee_global_tao_query_sk,
fee_global_alpha_query_sk,
sqrt_price_query_sk,
Expand All @@ -1652,13 +1662,6 @@ def get_liquidity_list(
sqrt_price = fixed_to_float(sqrt_price_query[1])
current_tick = price_to_tick(sqrt_price**2)

# Fetch positions
positions_response = self.query_map(
module="Swap",
name="Positions",
block=block,
params=[netuid, wallet.coldkeypub.ss58_address],
)
positions_values: list[tuple[dict, int, int]] = []
positions_storage_keys: list[StorageKey] = []
for _, p in positions_response:
Expand Down
3 changes: 1 addition & 2 deletions tests/e2e_tests/test_liquidity.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@
from bittensor.utils.liquidity import LiquidityPosition


@pytest.mark.asyncio
async def test_liquidity(local_chain, subtensor, alice_wallet, bob_wallet):
def test_liquidity(subtensor, alice_wallet, bob_wallet):
"""
Tests the liquidity mechanism

Expand Down
6 changes: 4 additions & 2 deletions tests/unit_tests/test_async_subtensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -3662,7 +3662,7 @@ async def test_get_liquidity_list_happy_path(subtensor, fake_wallet, mocker):
],
]

fake_result = mocker.AsyncMock(autospec=list)
fake_result = mocker.AsyncMock(records=fake_positions, autospec=list)
fake_result.__aiter__.return_value = iter(fake_positions)

mocked_query_map = mocker.AsyncMock(return_value=fake_result)
Expand All @@ -3682,8 +3682,10 @@ async def test_get_liquidity_list_happy_path(subtensor, fake_wallet, mocker):
mocked_query_map.assert_awaited_once_with(
module="Swap",
name="Positions",
block=None,
params=[netuid, fake_wallet.coldkeypub.ss58_address],
block=None,
block_hash=None,
reuse_block=False,
)
assert len(result) == len(fake_positions)
assert all([isinstance(p, async_subtensor.LiquidityPosition) for p in result])
Expand Down
7 changes: 5 additions & 2 deletions tests/unit_tests/test_subtensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -3868,7 +3868,10 @@ def test_get_liquidity_list_happy_path(subtensor, fake_wallet, mocker):
),
],
]
mocked_query_map = mocker.MagicMock(return_value=fake_positions)
fake_result = mocker.MagicMock(records=fake_positions, autospec=list)
fake_result.__iter__.return_value = iter(fake_positions)

mocked_query_map = mocker.Mock(return_value=fake_result)
mocker.patch.object(subtensor, "query_map", new=mocked_query_map)

# Mock storage key creation
Expand Down Expand Up @@ -3913,8 +3916,8 @@ def test_get_liquidity_list_happy_path(subtensor, fake_wallet, mocker):
mocked_query_map.assert_called_once_with(
module="Swap",
name="Positions",
block=None,
params=[netuid, fake_wallet.coldkeypub.ss58_address],
block=None,
)
assert mock_query_multi.call_count == 2 # one for fees, one for ticks
assert len(result) == len(fake_positions)
Expand Down