diff --git a/bittensor/core/metagraph.py b/bittensor/core/metagraph.py index 03690e0c09..be779cffa9 100644 --- a/bittensor/core/metagraph.py +++ b/bittensor/core/metagraph.py @@ -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 ( @@ -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 diff --git a/bittensor/core/types.py b/bittensor/core/types.py index 9563b00328..b114a140af 100644 --- a/bittensor/core/types.py +++ b/bittensor/core/types.py @@ -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): @@ -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( @@ -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__( diff --git a/bittensor/utils/__init__.py b/bittensor/utils/__init__.py index a84f6d6a81..5fef4cf172 100644 --- a/bittensor/utils/__init__.py +++ b/bittensor/utils/__init__.py @@ -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 @@ -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 diff --git a/tests/unit_tests/test_subtensor.py b/tests/unit_tests/test_subtensor.py index c11ac36956..43414ca534 100644 --- a/tests/unit_tests/test_subtensor.py +++ b/tests/unit_tests/test_subtensor.py @@ -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 @@ -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"), @@ -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