From 29c8b638cd2d9067f7c5c5b230a0744b61459cf6 Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 16 Jun 2025 11:48:37 -0700 Subject: [PATCH 1/6] add `logo_url` to `SubnetIdentity` --- bittensor/core/chain_data/subnet_identity.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bittensor/core/chain_data/subnet_identity.py b/bittensor/core/chain_data/subnet_identity.py index 9c19b2f2e2..83e0866ea4 100644 --- a/bittensor/core/chain_data/subnet_identity.py +++ b/bittensor/core/chain_data/subnet_identity.py @@ -9,6 +9,7 @@ class SubnetIdentity: github_repo: str subnet_contact: str subnet_url: str + logo_url: str discord: str description: str additional: str @@ -21,6 +22,7 @@ def _from_dict(cls, decoded: dict) -> "SubnetIdentity": github_repo=decoded["github_repo"], subnet_contact=decoded["subnet_contact"], subnet_url=decoded["subnet_url"], + logo_url=decoded["logo_url"], discord=decoded["discord"], description=decoded["description"], additional=decoded["additional"], From 5a702106000be196b610f165c71e31fd352d6e44 Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 16 Jun 2025 11:48:56 -0700 Subject: [PATCH 2/6] update `set_subnet_identity_extrinsic`s --- bittensor/core/extrinsics/asyncex/registration.py | 3 +++ bittensor/core/extrinsics/registration.py | 3 +++ 2 files changed, 6 insertions(+) diff --git a/bittensor/core/extrinsics/asyncex/registration.py b/bittensor/core/extrinsics/asyncex/registration.py index 8758169869..eba6e9390b 100644 --- a/bittensor/core/extrinsics/asyncex/registration.py +++ b/bittensor/core/extrinsics/asyncex/registration.py @@ -470,6 +470,7 @@ async def set_subnet_identity_extrinsic( github_repo: str, subnet_contact: str, subnet_url: str, + logo_url: str, discord: str, description: str, additional: str, @@ -488,6 +489,7 @@ async def set_subnet_identity_extrinsic( github_repo (str): URL of the GitHub repository related to the subnet. subnet_contact (str): Subnet's contact information, e.g., email or contact link. subnet_url (str): The URL of the subnet's primary web portal. + logo_url (str): The URL of the logo's primary web portal. discord (str): Discord server or contact for the subnet. description (str): A textual description of the subnet. additional (str): Any additional metadata or information related to the subnet. @@ -516,6 +518,7 @@ async def set_subnet_identity_extrinsic( "github_repo": github_repo, "subnet_contact": subnet_contact, "subnet_url": subnet_url, + "logo_url": logo_url, "discord": discord, "description": description, "additional": additional, diff --git a/bittensor/core/extrinsics/registration.py b/bittensor/core/extrinsics/registration.py index 9acd2f0f8d..ddf5604544 100644 --- a/bittensor/core/extrinsics/registration.py +++ b/bittensor/core/extrinsics/registration.py @@ -462,6 +462,7 @@ def set_subnet_identity_extrinsic( github_repo: str, subnet_contact: str, subnet_url: str, + logo_url: str, discord: str, description: str, additional: str, @@ -480,6 +481,7 @@ def set_subnet_identity_extrinsic( github_repo (str): URL of the GitHub repository related to the subnet. subnet_contact (str): Subnet's contact information, e.g., email or contact link. subnet_url (str): The URL of the subnet's primary web portal. + logo_url (str): The URL of the logo's primary web portal. discord (str): Discord server or contact for the subnet. description (str): A textual description of the subnet. additional (str): Any additional metadata or information related to the subnet. @@ -508,6 +510,7 @@ def set_subnet_identity_extrinsic( "github_repo": github_repo, "subnet_contact": subnet_contact, "subnet_url": subnet_url, + "logo_url": logo_url, "discord": discord, "description": description, "additional": additional, From 7fae4f54bc8b61dbdd128930cc5157ad9df65464 Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 16 Jun 2025 11:49:11 -0700 Subject: [PATCH 3/6] update `DynamicInfo` --- bittensor/core/chain_data/dynamic_info.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bittensor/core/chain_data/dynamic_info.py b/bittensor/core/chain_data/dynamic_info.py index cde40a0b79..336e8093d3 100644 --- a/bittensor/core/chain_data/dynamic_info.py +++ b/bittensor/core/chain_data/dynamic_info.py @@ -90,6 +90,7 @@ def _from_dict(cls, decoded: dict) -> "DynamicInfo": decoded["subnet_identity"]["subnet_contact"] ).decode(), subnet_url=bytes(decoded["subnet_identity"]["subnet_url"]).decode(), + logo_url=bytes(decoded["subnet_identity"]["logo_url"]).decode(), discord=bytes(decoded["subnet_identity"]["discord"]).decode(), description=bytes(decoded["subnet_identity"]["description"]).decode(), additional=bytes(decoded["subnet_identity"]["additional"]).decode(), From c493c19069c71dc1764b1b95f803b73c107b99d1 Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 16 Jun 2025 11:49:39 -0700 Subject: [PATCH 4/6] update subtensor `set_subnet_identity` calls --- bittensor/core/async_subtensor.py | 1 + bittensor/core/subtensor.py | 1 + 2 files changed, 2 insertions(+) diff --git a/bittensor/core/async_subtensor.py b/bittensor/core/async_subtensor.py index 77ec7afd47..f732502c18 100644 --- a/bittensor/core/async_subtensor.py +++ b/bittensor/core/async_subtensor.py @@ -4149,6 +4149,7 @@ async def set_subnet_identity( github_repo=subnet_identity.github_repo, subnet_contact=subnet_identity.subnet_contact, subnet_url=subnet_identity.subnet_url, + logo_url=subnet_identity.logo_url, discord=subnet_identity.discord, description=subnet_identity.description, additional=subnet_identity.additional, diff --git a/bittensor/core/subtensor.py b/bittensor/core/subtensor.py index a612793f5a..b87f1f6de0 100644 --- a/bittensor/core/subtensor.py +++ b/bittensor/core/subtensor.py @@ -3386,6 +3386,7 @@ def set_subnet_identity( github_repo=subnet_identity.github_repo, subnet_contact=subnet_identity.subnet_contact, subnet_url=subnet_identity.subnet_url, + logo_url=subnet_identity.logo_url, discord=subnet_identity.discord, description=subnet_identity.description, additional=subnet_identity.additional, From 7c9951c0fb80da195e924c6edc6a26d0eecac36b Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 16 Jun 2025 11:49:49 -0700 Subject: [PATCH 5/6] fix e2e tests --- .../test_set_subnet_identity_extrinsic.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/tests/e2e_tests/test_set_subnet_identity_extrinsic.py b/tests/e2e_tests/test_set_subnet_identity_extrinsic.py index 11c8d76d7e..5622322818 100644 --- a/tests/e2e_tests/test_set_subnet_identity_extrinsic.py +++ b/tests/e2e_tests/test_set_subnet_identity_extrinsic.py @@ -18,23 +18,24 @@ async def test_set_subnet_identity_extrinsic_happy_pass(subtensor, alice_wallet) # Verify subnet created successfully assert subtensor.subnet_exists(netuid), "Subnet wasn't created successfully" - # make sure subnet_identity is empty + # Make sure subnet_identity is empty assert subtensor.subnet(netuid).subnet_identity is None, ( "Subnet identity should be None before set" ) - # prepare SubnetIdentity for subnet + # Prepare SubnetIdentity for subnet subnet_identity = SubnetIdentity( subnet_name="e2e test subnet", github_repo="e2e test repo", subnet_contact="e2e test contact", subnet_url="e2e test url", + logo_url="e2e test logo url", discord="e2e test discord", description="e2e test description", additional="e2e test additional", ) - # set SubnetIdentity to subnet + # Set SubnetIdentity to subnet assert ( subtensor.set_subnet_identity( wallet=alice_wallet, @@ -44,7 +45,7 @@ async def test_set_subnet_identity_extrinsic_happy_pass(subtensor, alice_wallet) is True ), "Set subnet identity failed" - # check SubnetIdentity of the subnet + # Check SubnetIdentity of the subnet assert subtensor.subnet(netuid).subnet_identity == subnet_identity @@ -69,7 +70,7 @@ async def test_set_subnet_identity_extrinsic_failed( "[magenta]Testing `set_subnet_identity_extrinsic` with failed result.[/magenta]" ) - netuid = 2 + netuid = subtensor.get_total_subnets() # 2 # Register a subnet, netuid 2 assert subtensor.register_subnet(alice_wallet), "Subnet wasn't created" @@ -77,23 +78,24 @@ async def test_set_subnet_identity_extrinsic_failed( # Verify subnet created successfully assert subtensor.subnet_exists(netuid), "Subnet wasn't created successfully" - # make sure subnet_identity is empty + # Make sure subnet_identity is empty assert subtensor.subnet(netuid).subnet_identity is None, ( "Subnet identity should be None before set" ) - # prepare SubnetIdentity for subnet + # Prepare SubnetIdentity for subnet subnet_identity = SubnetIdentity( subnet_name="e2e test subnet", github_repo="e2e test repo", subnet_contact="e2e test contact", subnet_url="e2e test url", + logo_url="e2e test logo url", discord="e2e test discord", description="e2e test description", additional="e2e test additional", ) - # set SubnetIdentity to subnet + # Set SubnetIdentity to subnet with wrong wallet assert ( subtensor.set_subnet_identity( wallet=bob_wallet, From b8f76fade417804a35394e7dd671e03ea5cc804e Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 16 Jun 2025 12:00:49 -0700 Subject: [PATCH 6/6] fix unit tests --- .../extrinsics/asyncex/test_registration.py | 6 ++++ .../extrinsics/test_registration.py | 34 +++++++++++-------- tests/unit_tests/test_async_subtensor.py | 1 + tests/unit_tests/test_subtensor.py | 1 + 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/tests/unit_tests/extrinsics/asyncex/test_registration.py b/tests/unit_tests/extrinsics/asyncex/test_registration.py index a9b3ac511f..d10c032cd7 100644 --- a/tests/unit_tests/extrinsics/asyncex/test_registration.py +++ b/tests/unit_tests/extrinsics/asyncex/test_registration.py @@ -431,6 +431,7 @@ async def test_set_subnet_identity_extrinsic_is_success(subtensor, fake_wallet, github_repo = "mock_github_repo" subnet_contact = "mock_subnet_contact" subnet_url = "mock_subnet_url" + logo_url = "mock_logo_url" discord = "mock_discord" description = "mock_description" additional = "mock_additional" @@ -452,6 +453,7 @@ async def test_set_subnet_identity_extrinsic_is_success(subtensor, fake_wallet, github_repo=github_repo, subnet_contact=subnet_contact, subnet_url=subnet_url, + logo_url=logo_url, discord=discord, description=description, additional=additional, @@ -468,6 +470,7 @@ async def test_set_subnet_identity_extrinsic_is_success(subtensor, fake_wallet, "github_repo": github_repo, "subnet_contact": subnet_contact, "subnet_url": subnet_url, + "logo_url": logo_url, "discord": discord, "description": description, "additional": additional, @@ -493,6 +496,7 @@ async def test_set_subnet_identity_extrinsic_is_failed(subtensor, fake_wallet, m github_repo = "mock_github_repo" subnet_contact = "mock_subnet_contact" subnet_url = "mock_subnet_url" + logo_url = "mock_logo_url" discord = "mock_discord" description = "mock_description" additional = "mock_additional" @@ -515,6 +519,7 @@ async def test_set_subnet_identity_extrinsic_is_failed(subtensor, fake_wallet, m github_repo=github_repo, subnet_contact=subnet_contact, subnet_url=subnet_url, + logo_url=logo_url, discord=discord, description=description, additional=additional, @@ -533,6 +538,7 @@ async def test_set_subnet_identity_extrinsic_is_failed(subtensor, fake_wallet, m "github_repo": github_repo, "subnet_contact": subnet_contact, "subnet_url": subnet_url, + "logo_url": logo_url, "discord": discord, "description": description, "additional": additional, diff --git a/tests/unit_tests/extrinsics/test_registration.py b/tests/unit_tests/extrinsics/test_registration.py index c45bfd6214..1dfda4e5c1 100644 --- a/tests/unit_tests/extrinsics/test_registration.py +++ b/tests/unit_tests/extrinsics/test_registration.py @@ -235,6 +235,7 @@ def test_set_subnet_identity_extrinsic_is_success(mock_subtensor, mock_wallet, m github_repo = "mock_github_repo" subnet_contact = "mock_subnet_contact" subnet_url = "mock_subnet_url" + logo_url = "mock_logo_url" discord = "mock_discord" description = "mock_description" additional = "mock_additional" @@ -253,6 +254,7 @@ def test_set_subnet_identity_extrinsic_is_success(mock_subtensor, mock_wallet, m github_repo=github_repo, subnet_contact=subnet_contact, subnet_url=subnet_url, + logo_url=logo_url, discord=discord, description=description, additional=additional, @@ -265,13 +267,14 @@ def test_set_subnet_identity_extrinsic_is_success(mock_subtensor, mock_wallet, m call_params={ "hotkey": mock_wallet.hotkey.ss58_address, "netuid": netuid, - "subnet_name": "mock_subnet_name", - "github_repo": "mock_github_repo", - "subnet_contact": "mock_subnet_contact", - "subnet_url": "mock_subnet_url", - "discord": "mock_discord", - "description": "mock_description", - "additional": "mock_additional", + "subnet_name": subnet_name, + "github_repo": github_repo, + "subnet_contact": subnet_contact, + "subnet_url": subnet_url, + "logo_url": logo_url, + "discord": discord, + "description": description, + "additional": additional, }, ) mocked_sign_and_send_extrinsic.assert_called_once_with( @@ -293,6 +296,7 @@ def test_set_subnet_identity_extrinsic_is_failed(mock_subtensor, mock_wallet, mo github_repo = "mock_github_repo" subnet_contact = "mock_subnet_contact" subnet_url = "mock_subnet_url" + logo_url = "mock_logo_url" discord = "mock_discord" description = "mock_description" additional = "mock_additional" @@ -315,6 +319,7 @@ def test_set_subnet_identity_extrinsic_is_failed(mock_subtensor, mock_wallet, mo github_repo=github_repo, subnet_contact=subnet_contact, subnet_url=subnet_url, + logo_url=logo_url, discord=discord, description=description, additional=additional, @@ -327,13 +332,14 @@ def test_set_subnet_identity_extrinsic_is_failed(mock_subtensor, mock_wallet, mo call_params={ "hotkey": mock_wallet.hotkey.ss58_address, "netuid": netuid, - "subnet_name": "mock_subnet_name", - "github_repo": "mock_github_repo", - "subnet_contact": "mock_subnet_contact", - "subnet_url": "mock_subnet_url", - "discord": "mock_discord", - "description": "mock_description", - "additional": "mock_additional", + "subnet_name": subnet_name, + "github_repo": github_repo, + "subnet_contact": subnet_contact, + "subnet_url": subnet_url, + "logo_url": logo_url, + "discord": discord, + "description": description, + "additional": additional, }, ) mocked_sign_and_send_extrinsic.assert_called_once_with( diff --git a/tests/unit_tests/test_async_subtensor.py b/tests/unit_tests/test_async_subtensor.py index a723f4ed83..12c6b6e123 100644 --- a/tests/unit_tests/test_async_subtensor.py +++ b/tests/unit_tests/test_async_subtensor.py @@ -3038,6 +3038,7 @@ async def test_set_subnet_identity(mocker, subtensor, fake_wallet): github_repo=fake_subnet_identity.github_repo, subnet_contact=fake_subnet_identity.subnet_contact, subnet_url=fake_subnet_identity.subnet_url, + logo_url=fake_subnet_identity.logo_url, discord=fake_subnet_identity.discord, description=fake_subnet_identity.description, additional=fake_subnet_identity.additional, diff --git a/tests/unit_tests/test_subtensor.py b/tests/unit_tests/test_subtensor.py index 11fa933425..bb73ec2f13 100644 --- a/tests/unit_tests/test_subtensor.py +++ b/tests/unit_tests/test_subtensor.py @@ -3209,6 +3209,7 @@ def test_set_subnet_identity(mocker, subtensor, fake_wallet): github_repo=fake_subnet_identity.github_repo, subnet_contact=fake_subnet_identity.subnet_contact, subnet_url=fake_subnet_identity.subnet_url, + logo_url=fake_subnet_identity.logo_url, discord=fake_subnet_identity.discord, description=fake_subnet_identity.description, additional=fake_subnet_identity.additional,