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
22 changes: 1 addition & 21 deletions bittensor/core/metagraph.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
MetagraphInfoPool,
MetagraphInfoParams,
)

from bittensor.utils import determine_chain_endpoint_and_network
from bittensor.utils.btlogging import logging
from bittensor.utils.registration import torch, use_torch
from bittensor.utils.weight_utils import (
Expand Down Expand Up @@ -143,26 +143,6 @@ def latest_block_path(dir_path: str) -> str:
return latest_file_full_path


def determine_chain_endpoint_and_network(network: str) -> tuple[str, str]:
"""
Determine the chain endpoint and network name from the passed arg

Args:
network: The network name (e.g. 'finney', 'test') or
chain endpoint (e.g. wss://entrypoint-finney.opentensor.ai:443)

Returns:
(network name, chain endpoint)
"""
pathless_network = network[:-1] if network.endswith("/") else network
if pathless_network in settings.NETWORK_MAP:
return pathless_network, settings.NETWORK_MAP[pathless_network]
elif pathless_network in settings.REVERSE_NETWORK_MAP:
return settings.REVERSE_NETWORK_MAP[pathless_network], pathless_network
else:
return "unknown", network


class MetagraphMixin(ABC):
"""
The metagraph class is a core component of the Bittensor network, representing the neural graph that forms the
Expand Down
40 changes: 3 additions & 37 deletions bittensor/core/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from bittensor.core import settings
from bittensor.core.config import Config
from bittensor.core.chain_data import NeuronInfo, NeuronInfoLite
from bittensor.utils import determine_chain_endpoint_and_network


class SubtensorMixin(ABC):
Expand Down Expand Up @@ -95,8 +96,8 @@ def setup_config(network: Optional[str], config: "Config"):
if check:
network = config_network

evaluated_network, evaluated_endpoint = (
SubtensorMixin.determine_chain_endpoint_and_network(network)
evaluated_network, evaluated_endpoint = determine_chain_endpoint_and_network(
network
)

return networking.get_formatted_ws_endpoint_url(
Expand Down Expand Up @@ -166,41 +167,6 @@ def add_args(cls, parser: "argparse.ArgumentParser", prefix: Optional[str] = Non
# re-parsing arguments.
pass

@staticmethod
def determine_chain_endpoint_and_network(
network: str,
) -> tuple[Optional[str], Optional[str]]:
"""Determines the chain endpoint and network from the passed network or chain_endpoint.

Arguments:
network (str): The network flag. The choices are: ``finney`` (main network), ``archive`` (archive network
+300 blocks), ``local`` (local running network), ``test`` (test network).

Returns:
tuple[Optional[str], Optional[str]]: The network and chain endpoint flag. If passed, overrides the
``network`` argument.
"""

if network is None:
return None, None
if network in settings.NETWORKS:
return network, settings.NETWORK_MAP[network]

substrings_map = {
"entrypoint-finney.opentensor.ai": ("finney", settings.FINNEY_ENTRYPOINT),
"test.finney.opentensor.ai": ("test", settings.FINNEY_TEST_ENTRYPOINT),
"archive.chain.opentensor.ai": ("archive", settings.ARCHIVE_ENTRYPOINT),
"subvortex": ("subvortex", settings.SUBVORTEX_ENTRYPOINT),
"127.0.0.1": ("local", settings.LOCAL_ENTRYPOINT),
"localhost": ("local", settings.LOCAL_ENTRYPOINT),
}

for substring, result in substrings_map.items():
if substring in network:
return result

return "unknown", network


class AxonServeCallParams:
def __init__(
Expand Down
36 changes: 36 additions & 0 deletions bittensor/utils/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from bittensor_wallet.errors import KeyFileError, PasswordError
from scalecodec import ss58_decode, is_valid_ss58_address as _is_valid_ss58_address

from bittensor.core import settings
from bittensor.core.settings import SS58_FORMAT
from bittensor.utils.btlogging import logging
from .registration import torch, use_torch
Expand Down Expand Up @@ -410,3 +411,38 @@ def unlock_key(wallet: "Wallet", unlock_type="coldkey") -> "UnlockStatus":
except KeyFileError:
err_msg = f"{unlock_type.capitalize()} keyfile is corrupt, non-writable, or non-readable, or non-existent."
return UnlockStatus(False, err_msg)


def determine_chain_endpoint_and_network(
network: str,
) -> tuple[Optional[str], Optional[str]]:
"""Determines the chain endpoint and network from the passed network or chain_endpoint.

Arguments:
network (str): The network flag. The choices are: ``finney`` (main network), ``archive`` (archive network
+300 blocks), ``local`` (local running network), ``test`` (test network).

Returns:
tuple[Optional[str], Optional[str]]: The network and chain endpoint flag. If passed, overrides the
``network`` argument.
"""

if network is None:
return None, None
if network in settings.NETWORKS:
return network, settings.NETWORK_MAP[network]

substrings_map = {
"entrypoint-finney.opentensor.ai": ("finney", settings.FINNEY_ENTRYPOINT),
"test.finney.opentensor.ai": ("test", settings.FINNEY_TEST_ENTRYPOINT),
"archive.chain.opentensor.ai": ("archive", settings.ARCHIVE_ENTRYPOINT),
"subvortex": ("subvortex", settings.SUBVORTEX_ENTRYPOINT),
"127.0.0.1": ("local", network),
"localhost": ("local", network),
}

for substring, result in substrings_map.items():
if substring in network and validate_chain_endpoint(network):
return result

return "unknown", network
17 changes: 11 additions & 6 deletions tests/unit_tests/test_subtensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,12 @@
from bittensor.core.settings import version_as_int
from bittensor.core.subtensor import Subtensor
from bittensor.core.types import AxonServeCallParams
from bittensor.utils import Certificate, u16_normalized_float, u64_normalized_float
from bittensor.utils import (
Certificate,
u16_normalized_float,
u64_normalized_float,
determine_chain_endpoint_and_network,
)
from bittensor.utils.balance import Balance

U16_MAX = 65535
Expand Down Expand Up @@ -269,8 +274,10 @@ def mock_add_argument(*args, **kwargs):
"archive",
settings.ARCHIVE_ENTRYPOINT,
),
("127.0.0.1", "local", settings.LOCAL_ENTRYPOINT),
("localhost", "local", settings.LOCAL_ENTRYPOINT),
("127.0.0.1", "local", "127.0.0.1"),
("localhost", "local", "localhost"),
("ws://127.0.0.1:9945", "local", "ws://127.0.0.1:9945"),
("ws://localhost:9945", "local", "ws://localhost:9945"),
# Edge cases
(None, None, None),
("unknown", "unknown", "unknown"),
Expand All @@ -280,9 +287,7 @@ def test_determine_chain_endpoint_and_network(
network, expected_network, expected_endpoint
):
# Act
result_network, result_endpoint = Subtensor.determine_chain_endpoint_and_network(
network
)
result_network, result_endpoint = determine_chain_endpoint_and_network(network)

# Assert
assert result_network == expected_network
Expand Down