From 54b2a0c706f9cd4d25baed6ea67d96f981add83a Mon Sep 17 00:00:00 2001 From: eclipsevortex Date: Sat, 6 Sep 2025 07:55:00 -0400 Subject: [PATCH 01/10] Update the challenge --- subvortex/validator/neuron/src/challenge.py | 238 ++++++++++++++------ subvortex/validator/neuron/src/main.py | 3 +- 2 files changed, 172 insertions(+), 69 deletions(-) diff --git a/subvortex/validator/neuron/src/challenge.py b/subvortex/validator/neuron/src/challenge.py index bca2951d..18905f3a 100644 --- a/subvortex/validator/neuron/src/challenge.py +++ b/subvortex/validator/neuron/src/challenge.py @@ -14,18 +14,23 @@ # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. +import json import time import random import asyncio import traceback -import bittensor.core.chain_data as btccd +import websockets import bittensor.core.subtensor as btcs -import bittensor.core.settings as btcse import bittensor.utils.btlogging as btul from typing import Dict from collections import Counter +from websockets.exceptions import ( + ConnectionClosed, + InvalidURI, + InvalidHandshake, + WebSocketException, +) -from subvortex.core.constants import DEFAULT_PROCESS_TIME from subvortex.core.protocol import Synapse from subvortex.validator.neuron.src.miner import Miner from subvortex.validator.neuron.src.synapse import send_scope @@ -72,7 +77,40 @@ ] -def create_subtensor_challenge(subtensor: btcs.Subtensor): +def get_runtime_call_definition( + substrate: btcs.SubstrateInterface, api: str, method: str +): + try: + + metadata_v15_value = substrate.runtime.metadata_v15.value() + apis = {entry["name"]: entry for entry in metadata_v15_value["apis"]} + api_entry = apis[api] + methods = {entry["name"]: entry for entry in api_entry["methods"]} + return methods[method] + + except KeyError: + raise ValueError(f"Runtime API Call '{api}.{method}' not found in registry") + + +def encode(substrate: btcs.SubstrateInterface, runtime_call_def, params={}): + param_data = b"" + + for idx, param in enumerate(runtime_call_def["inputs"]): + param_type_string = f"scale_info::{param['ty']}" + if isinstance(params, list): + param_data += substrate._encode_scale(param_type_string, params[idx]) + else: + if param["name"] not in params: + raise ValueError(f"Runtime Call param '{param['name']}' is missing") + + param_data += substrate._encode_scale( + param_type_string, params[param["name"]] + ) + + return param_data + + +async def create_subtensor_challenge(subtensor: btcs.Subtensor): """ Create the challenge that the miner subtensor will have to execute """ @@ -88,6 +126,9 @@ def create_subtensor_challenge(subtensor: btcs.Subtensor): ) btul.logging.trace(f"Block chosen: {block}") + # Get the hash of the block + block_hash = subtensor.get_block_hash(block=block) + # Be sure we select a subnet that at least one neuron subnet_to_exclude = [] subnet_uid = None @@ -110,27 +151,46 @@ def create_subtensor_challenge(subtensor: btcs.Subtensor): neuron_uid = neuron.uid btul.logging.trace(f"Neuron chosen: {neuron_uid}") - # Select the property - properties = ( - MINER_PROPERTIES if neuron.axon_info.is_serving else VALIDATOR_PROPERTIES + # Get the runtime call definition + runtime_call_def = get_runtime_call_definition( + substrate=subtensor.substrate, + api="NeuronInfoRuntimeApi", + method="get_neuron_lite", + ) + + # Encode the parameters + params = encode( + substrate=subtensor.substrate, + runtime_call_def=runtime_call_def, + params=[subnet_uid, neuron_uid], + ) + params = params.hex() + + # Sent the request + response = subtensor.substrate.rpc_request( + method="state_call", + params=[f"NeuronInfoRuntimeApi_get_neuron_lite", params, block_hash], ) - property_index = random.randint(0, len(properties) - 1) - neuron_property = properties[property_index] - btul.logging.trace(f"Property chosen: {neuron_property}") - # Get the property value - neuron_value = getattr(neuron, neuron_property) + # Get the result + value = response.get("result") + + return ( + block_hash, + params, + value, + ) - return (block, subnet_uid, neuron_uid, neuron_property, neuron_value) except Exception as err: btul.logging.warning(f"Could not create the challenge: {err}") btul.logging.warning(traceback.format_exc()) - return None + + return None async def challenge_miner(self, miner: Miner): """ - Challenge the miner by pinging it + Challenge the miner by pinging it within 5 seconds """ verified = False reason = None @@ -151,6 +211,7 @@ async def challenge_miner(self, miner: Miner): reason = status_message return (verified, reason, None) + except Exception as ex: reason = "Unexpected exception" details = str(ex) @@ -158,11 +219,10 @@ async def challenge_miner(self, miner: Miner): return (verified, reason, details) -def challenge_subtensor(miner: Miner, challenge): +async def challenge_subtensor(miner: Miner, challenge): """ Challenge the subtensor by requesting the value of a property of a specific neuron in a specific subnet at a certain block """ - substrate = None verified = False reason = None details = None @@ -170,70 +230,114 @@ def challenge_subtensor(miner: Miner, challenge): try: # Get the details of the challenge - block, netuid, uid, neuron_property, expected_value = challenge + block_hash, params, value = challenge - # Attempt to connect to the subtensor - try: - # Create the substrate - substrate = btcs.SubstrateInterface( - ss58_format=btcse.SS58_FORMAT, - use_remote_preset=True, - type_registry=btcse.TYPE_REGISTRY, - url=f"ws://{miner.ip}:9944", - ) + # Set start time + start_time = time.time() - except Exception as ex: - reason = "Failed to connect to Subtensor node at the given IP." - return (verified, reason, str(ex), process_time) + ws = None + try: + ws = await websockets.connect(f"ws://{miner.ip}:9944") - # Set the socket timeout - substrate.ws.socket.settimeout(DEFAULT_PROCESS_TIME) + except asyncio.TimeoutError as ex: + return (verified, "WebSocket connection timed out", str(ex), process_time) - # Start the timer - start_time = time.time() + except (InvalidURI, OSError) as ex: + return ( + verified, + f"Invalid WebSocket URI ws://{miner.ip}:9944", + str(ex), + process_time, + ) + except InvalidHandshake as ex: + return (verified, "WebSocket handshake failed", str(ex), process_time) + + except WebSocketException as ex: + return (verified, "Websocket exception", str(ex), process_time) + + # Prepare data payload + data = json.dumps( + { + "id": "state_call0", + "jsonrpc": "2.0", + "method": "state_call", + "params": [ + "NeuronInfoRuntimeApi_get_neuron_lite", + params, + block_hash, + ], + } + ) - # Execute the challenge try: - # Get the block hash - block_hash = substrate.get_block_hash(block) - - # Get the neuron lite details - result = substrate.runtime_call( - "NeuronInfoRuntimeApi", "get_neuron_lite", [netuid, uid], block_hash + # Send request + await ws.send(data) + + except ConnectionClosed as ex: + return ( + verified, + "WebSocket closed before sending data", + str(ex), + process_time, ) - # Convert to a neuron entity - neuron = btccd.NeuronInfoLite.from_dict(result.value) - except KeyError as ex: - reason = "Invalid netuid or uid provided." - return (verified, reason, str(ex), process_time) - except ValueError as ex: - reason = "Invalid or unavailable block number." - return (verified, reason, str(ex), process_time) - except (Exception, BaseException) as ex: - reason = "Failed to retrieve neuron details." - return (verified, reason, str(ex), process_time) - - # Access the specified property try: - miner_value = getattr(neuron, neuron_property) - except AttributeError as ex: - reason = "Property not found in the neuron." - return (verified, reason, str(ex), process_time) + # Receive response + response = await ws.recv() + + except asyncio.TimeoutError as ex: + return (verified, "WebSocket receive timed out", str(ex), process_time) + + except ConnectionClosed as ex: + return ( + verified, + "WebSocket closed before receiving response", + str(ex), + process_time, + ) - # Compute the process time + # Calculate process time process_time = time.time() - start_time + # Load the response + try: + response = json.loads(response) + + except json.JSONDecodeError as ex: + return (verified, "Received malformed JSON response", str(ex), process_time) + + if "error" in response: + return ( + verified, + f"Error in response: {response['error'].get('message', 'Unknown error')}", + "", + process_time, + ) + + if "result" not in response: + return ( + verified, + f"Response does not contain a 'result' field", + "", + process_time, + ) + # Verify the challenge - verified = expected_value == miner_value + verified = response["result"] == value + + # Log total process time breakdown + total_time = time.time() - start_time + btul.logging.trace( + f"[{CHALLENGE_NAME}][{miner.uid}] Total challenge time: {total_time:.2f}s" + ) except Exception as ex: reason = "Unexpected exception" details = str(ex) finally: - if substrate: - substrate.close() + if ws: + await ws.close() return (verified, reason, details, process_time) @@ -266,7 +370,7 @@ async def handle_challenge(self, uid: int, challenge): # Challenge Subtensor - Process time + check the challenge btul.logging.debug(f"[{CHALLENGE_NAME}][{miner.uid}] Challenging subtensor") subtensor_verified, subtensor_reason, subtensor_details, subtensor_time = ( - challenge_subtensor(miner, challenge) + await challenge_subtensor(miner, challenge) ) if subtensor_verified: btul.logging.success(f"[{CHALLENGE_NAME}][{miner.uid}] Subtensor verified") @@ -303,12 +407,12 @@ async def challenge_data(self, block: int): btul.logging.debug(f"[{CHALLENGE_NAME}] Step starting") # Create the challenge - challenge = create_subtensor_challenge(self.subtensor) + challenge = await create_subtensor_challenge(self.subtensor) if not challenge: return btul.logging.debug( - f"[{CHALLENGE_NAME}] Challenge created - Block: {challenge[0]}, Netuid: {challenge[1]}, Uid: {challenge[2]}: Property: {challenge[3]}, Value: {challenge[4]}" + f"[{CHALLENGE_NAME}] Challenge created - Block: {challenge[0]}, Params: {challenge[1]}, Value: {challenge[2]}" ) # Select the miners @@ -332,8 +436,8 @@ async def challenge_data(self, block: int): for uid in uids: # Send the challenge to the miner tasks.append(asyncio.create_task(handle_challenge(self, uid, challenge))) - results = await asyncio.gather(*tasks) - reasons, details = zip(*results) + results = await asyncio.gather(*tasks) + reasons, details = zip(*results) btul.logging.info(f"[{CHALLENGE_NAME}] Starting evaluation") diff --git a/subvortex/validator/neuron/src/main.py b/subvortex/validator/neuron/src/main.py index 8c8eb561..95482a93 100644 --- a/subvortex/validator/neuron/src/main.py +++ b/subvortex/validator/neuron/src/main.py @@ -323,8 +323,7 @@ async def run(self): continue # Run multiple forwards. - coroutines = [forward(self)] - await asyncio.gather(*coroutines) + await forward(self) # Check if stop has been requested if self.should_exit.is_set(): From 306aa53eae053288f8b35b110364f41dfff0117f Mon Sep 17 00:00:00 2001 From: eclipsevortex Date: Sat, 6 Sep 2025 08:05:53 -0400 Subject: [PATCH 02/10] start proecss time at the right place --- subvortex/validator/neuron/src/challenge.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/subvortex/validator/neuron/src/challenge.py b/subvortex/validator/neuron/src/challenge.py index 18905f3a..5eccbfff 100644 --- a/subvortex/validator/neuron/src/challenge.py +++ b/subvortex/validator/neuron/src/challenge.py @@ -232,9 +232,6 @@ async def challenge_subtensor(miner: Miner, challenge): # Get the details of the challenge block_hash, params, value = challenge - # Set start time - start_time = time.time() - ws = None try: ws = await websockets.connect(f"ws://{miner.ip}:9944") @@ -254,6 +251,9 @@ async def challenge_subtensor(miner: Miner, challenge): except WebSocketException as ex: return (verified, "Websocket exception", str(ex), process_time) + + # Set start time + start_time = time.time() # Prepare data payload data = json.dumps( From 25cdd5a7dc5c931182f7b5cd0de8c04e143cd4ea Mon Sep 17 00:00:00 2001 From: eclipsevortex Date: Sat, 6 Sep 2025 08:32:27 -0400 Subject: [PATCH 03/10] increase timeout for miner --- subvortex/validator/neuron/src/challenge.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subvortex/validator/neuron/src/challenge.py b/subvortex/validator/neuron/src/challenge.py index 5eccbfff..c6039ecb 100644 --- a/subvortex/validator/neuron/src/challenge.py +++ b/subvortex/validator/neuron/src/challenge.py @@ -201,7 +201,7 @@ async def challenge_miner(self, miner: Miner): miner.axon, Synapse(), deserialize=False, - timeout=5, + timeout=10, ) status_code = response.dendrite.status_code From 6be8718487e1f1c9b261a8b020fe6272fba03cf2 Mon Sep 17 00:00:00 2001 From: eclipsevortex Date: Sat, 6 Sep 2025 09:55:21 -0400 Subject: [PATCH 04/10] implement some retry --- subvortex/validator/neuron/src/challenge.py | 207 +++++++++++--------- 1 file changed, 110 insertions(+), 97 deletions(-) diff --git a/subvortex/validator/neuron/src/challenge.py b/subvortex/validator/neuron/src/challenge.py index c6039ecb..e2dfc269 100644 --- a/subvortex/validator/neuron/src/challenge.py +++ b/subvortex/validator/neuron/src/challenge.py @@ -219,7 +219,7 @@ async def challenge_miner(self, miner: Miner): return (verified, reason, details) -async def challenge_subtensor(miner: Miner, challenge): +async def challenge_subtensor(miner: Miner, challenge, max_retries=3): """ Challenge the subtensor by requesting the value of a property of a specific neuron in a specific subnet at a certain block """ @@ -228,116 +228,129 @@ async def challenge_subtensor(miner: Miner, challenge): details = None process_time = None - try: - # Get the details of the challenge - block_hash, params, value = challenge - - ws = None + # Retry logic for geographic connectivity issues + for attempt in range(max_retries): try: - ws = await websockets.connect(f"ws://{miner.ip}:9944") - - except asyncio.TimeoutError as ex: - return (verified, "WebSocket connection timed out", str(ex), process_time) - - except (InvalidURI, OSError) as ex: - return ( - verified, - f"Invalid WebSocket URI ws://{miner.ip}:9944", - str(ex), - process_time, + # Get the details of the challenge + block_hash, params, value = challenge + + # Add small delay between retries + if attempt > 0: + await asyncio.sleep(attempt * 1.0) # 1s, 2s, 3s delays + btul.logging.debug(f"[{CHALLENGE_NAME}][{miner.uid}] Retry attempt {attempt + 1}/{max_retries}") + + ws = None + try: + # Increase connection timeout for international connections + ws = await websockets.connect( + f"ws://{miner.ip}:9944", + ping_timeout=None, # Disable ping timeout + ping_interval=None, # Disable ping + close_timeout=10, # 10s close timeout + open_timeout=15, # 15s connection timeout + additional_headers={ + "Connection": "keep-alive", + }, ) - except InvalidHandshake as ex: - return (verified, "WebSocket handshake failed", str(ex), process_time) - - except WebSocketException as ex: - return (verified, "Websocket exception", str(ex), process_time) - - # Set start time - start_time = time.time() - - # Prepare data payload - data = json.dumps( - { - "id": "state_call0", - "jsonrpc": "2.0", - "method": "state_call", - "params": [ - "NeuronInfoRuntimeApi_get_neuron_lite", - params, - block_hash, - ], - } - ) - try: - # Send request - await ws.send(data) - - except ConnectionClosed as ex: - return ( - verified, - "WebSocket closed before sending data", - str(ex), - process_time, + except InvalidURI as ex: + # Invalid URI - don't retry, fail immediately + reason = f"Invalid WebSocket URI ws://{miner.ip}:9944" + details = str(ex) + break + + except (asyncio.TimeoutError, OSError, InvalidHandshake, WebSocketException) as ex: + # These are connection errors - let retry logic handle them + raise ex + + + # Set start time + start_time = time.time() + + # Prepare data payload + data = json.dumps( + { + "id": "state_call0", + "jsonrpc": "2.0", + "method": "state_call", + "params": [ + "NeuronInfoRuntimeApi_get_neuron_lite", + params, + block_hash, + ], + } ) - try: - # Receive response - response = await ws.recv() - - except asyncio.TimeoutError as ex: - return (verified, "WebSocket receive timed out", str(ex), process_time) - - except ConnectionClosed as ex: - return ( - verified, - "WebSocket closed before receiving response", - str(ex), - process_time, - ) + try: + # Send request + await ws.send(data) - # Calculate process time - process_time = time.time() - start_time + except ConnectionClosed as ex: + # Connection error - let retry logic handle + raise ex - # Load the response - try: - response = json.loads(response) + try: + # Receive response with timeout for international connections + response = await asyncio.wait_for(ws.recv(), timeout=20.0) - except json.JSONDecodeError as ex: - return (verified, "Received malformed JSON response", str(ex), process_time) + except (asyncio.TimeoutError, ConnectionClosed) as ex: + # Connection error - let retry logic handle + raise ex - if "error" in response: - return ( - verified, - f"Error in response: {response['error'].get('message', 'Unknown error')}", - "", - process_time, - ) + # Calculate process time + process_time = time.time() - start_time - if "result" not in response: - return ( - verified, - f"Response does not contain a 'result' field", - "", - process_time, - ) + # Load the response + try: + response = json.loads(response) - # Verify the challenge - verified = response["result"] == value + except json.JSONDecodeError as ex: + reason = "Received malformed JSON response" + details = str(ex) + break - # Log total process time breakdown - total_time = time.time() - start_time - btul.logging.trace( - f"[{CHALLENGE_NAME}][{miner.uid}] Total challenge time: {total_time:.2f}s" - ) + if "error" in response: + reason = f"Error in response: {response['error'].get('message', 'Unknown error')}" + details = "" + break - except Exception as ex: - reason = "Unexpected exception" - details = str(ex) + if "result" not in response: + reason = "Response does not contain a 'result' field" + details = "" + break - finally: - if ws: - await ws.close() + # Verify the challenge + verified = response["result"] == value + + # Log total process time breakdown + total_time = time.time() - start_time + btul.logging.trace( + f"[{CHALLENGE_NAME}][{miner.uid}] Total challenge time: {total_time:.2f}s" + ) + + # Success - break retry loop + break + + except (ConnectionClosed, WebSocketException, asyncio.TimeoutError) as ex: + # These are retryable errors - continue to next attempt + reason = f"Connection error on attempt {attempt + 1}/{max_retries}" + details = str(ex) + btul.logging.debug(f"[{CHALLENGE_NAME}][{miner.uid}] {reason}: {details}") + + if attempt == max_retries - 1: # Last attempt + reason = "WebSocket connection failed after retries" + break + + except Exception as ex: + # Non-retryable error - break immediately + reason = "Unexpected exception" + details = str(ex) + break + + finally: + if ws: + await ws.close() + ws = None return (verified, reason, details, process_time) From 963386ef9654f0e00ffd43b9543c66e6cbf22f2d Mon Sep 17 00:00:00 2001 From: eclipsevortex Date: Sun, 7 Sep 2025 06:08:10 -0400 Subject: [PATCH 05/10] generate the right id --- subvortex/validator/neuron/src/challenge.py | 88 ++++++++++++++------- 1 file changed, 60 insertions(+), 28 deletions(-) diff --git a/subvortex/validator/neuron/src/challenge.py b/subvortex/validator/neuron/src/challenge.py index e2dfc269..69511257 100644 --- a/subvortex/validator/neuron/src/challenge.py +++ b/subvortex/validator/neuron/src/challenge.py @@ -18,10 +18,13 @@ import time import random import asyncio +import string import traceback import websockets import bittensor.core.subtensor as btcs import bittensor.utils.btlogging as btul +from itertools import cycle +from websockets.sync.client import connect, ClientConnection from typing import Dict from collections import Counter from websockets.exceptions import ( @@ -76,6 +79,19 @@ "last_update", ] +id_cycle = cycle(range(1, 999)) + +rng = random.Random() + + +def get_next_id() -> str: + """ + Generates a pseudo-random ID by returning the next int of a range from 1-998 prepended with + two random ascii characters. + """ + random_letters = "".join(rng.choices(string.ascii_letters, k=2)) + return f"{random_letters}{next(id_cycle)}" + def get_runtime_call_definition( substrate: btcs.SubstrateInterface, api: str, method: str @@ -219,7 +235,7 @@ async def challenge_miner(self, miner: Miner): return (verified, reason, details) -async def challenge_subtensor(miner: Miner, challenge, max_retries=3): +def challenge_subtensor(miner: Miner, challenge, max_retries=3): """ Challenge the subtensor by requesting the value of a property of a specific neuron in a specific subnet at a certain block """ @@ -229,48 +245,52 @@ async def challenge_subtensor(miner: Miner, challenge, max_retries=3): process_time = None # Retry logic for geographic connectivity issues + ws: ClientConnection = None for attempt in range(max_retries): try: # Get the details of the challenge block_hash, params, value = challenge - + # Add small delay between retries if attempt > 0: - await asyncio.sleep(attempt * 1.0) # 1s, 2s, 3s delays - btul.logging.debug(f"[{CHALLENGE_NAME}][{miner.uid}] Retry attempt {attempt + 1}/{max_retries}") + btul.logging.trace( + f"[{CHALLENGE_NAME}][{miner.uid}] Retry attempt {attempt + 1}/{max_retries}" + ) - ws = None try: # Increase connection timeout for international connections - ws = await websockets.connect( - f"ws://{miner.ip}:9944", - ping_timeout=None, # Disable ping timeout - ping_interval=None, # Disable ping - close_timeout=10, # 10s close timeout - open_timeout=15, # 15s connection timeout - additional_headers={ - "Connection": "keep-alive", - }, - ) + ws = ( + connect( + f"ws://{miner.ip}:9944", + max_size=2**32, + ) + if not ws or ws.close_code + else ws + ) except InvalidURI as ex: # Invalid URI - don't retry, fail immediately reason = f"Invalid WebSocket URI ws://{miner.ip}:9944" details = str(ex) break - - except (asyncio.TimeoutError, OSError, InvalidHandshake, WebSocketException) as ex: + + except ( + asyncio.TimeoutError, + OSError, + InvalidHandshake, + WebSocketException, + ) as ex: # These are connection errors - let retry logic handle them raise ex - # Set start time start_time = time.time() # Prepare data payload + item_id = get_next_id() data = json.dumps( { - "id": "state_call0", + "id": item_id, "jsonrpc": "2.0", "method": "state_call", "params": [ @@ -283,18 +303,30 @@ async def challenge_subtensor(miner: Miner, challenge, max_retries=3): try: # Send request - await ws.send(data) + ws.send(data) except ConnectionClosed as ex: # Connection error - let retry logic handle + btul.logging.trace( + f"[{CHALLENGE_NAME}][{miner.uid}] WebSocket closed during send: {ex}" + ) raise ex try: # Receive response with timeout for international connections - response = await asyncio.wait_for(ws.recv(), timeout=20.0) + response = ws.recv(decode=False, timeout=60.0) + + except asyncio.TimeoutError as ex: + btul.logging.trace( + f"[{CHALLENGE_NAME}][{miner.uid}] WebSocket receive timeout: {ex}" + ) + raise ex - except (asyncio.TimeoutError, ConnectionClosed) as ex: + except ConnectionClosed as ex: # Connection error - let retry logic handle + btul.logging.trace( + f"[{CHALLENGE_NAME}][{miner.uid}] WebSocket closed during receive: {ex}" + ) raise ex # Calculate process time @@ -327,7 +359,7 @@ async def challenge_subtensor(miner: Miner, challenge, max_retries=3): btul.logging.trace( f"[{CHALLENGE_NAME}][{miner.uid}] Total challenge time: {total_time:.2f}s" ) - + # Success - break retry loop break @@ -335,10 +367,10 @@ async def challenge_subtensor(miner: Miner, challenge, max_retries=3): # These are retryable errors - continue to next attempt reason = f"Connection error on attempt {attempt + 1}/{max_retries}" details = str(ex) - btul.logging.debug(f"[{CHALLENGE_NAME}][{miner.uid}] {reason}: {details}") - + btul.logging.trace(f"[{CHALLENGE_NAME}][{miner.uid}] {reason}: {details}") + if attempt == max_retries - 1: # Last attempt - reason = "WebSocket connection failed after retries" + reason = f"WebSocket connection failed after {max_retries} retries: {str(ex)}" break except Exception as ex: @@ -349,7 +381,7 @@ async def challenge_subtensor(miner: Miner, challenge, max_retries=3): finally: if ws: - await ws.close() + ws.close() ws = None return (verified, reason, details, process_time) @@ -383,7 +415,7 @@ async def handle_challenge(self, uid: int, challenge): # Challenge Subtensor - Process time + check the challenge btul.logging.debug(f"[{CHALLENGE_NAME}][{miner.uid}] Challenging subtensor") subtensor_verified, subtensor_reason, subtensor_details, subtensor_time = ( - await challenge_subtensor(miner, challenge) + challenge_subtensor(miner, challenge) ) if subtensor_verified: btul.logging.success(f"[{CHALLENGE_NAME}][{miner.uid}] Subtensor verified") From 341978eec62c70853cd525f2f1c250f0a8691a60 Mon Sep 17 00:00:00 2001 From: eclipsevortex Date: Sun, 7 Sep 2025 06:46:55 -0400 Subject: [PATCH 06/10] check response id --- subvortex/validator/neuron/src/challenge.py | 23 ++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/subvortex/validator/neuron/src/challenge.py b/subvortex/validator/neuron/src/challenge.py index 69511257..ca9d8a6d 100644 --- a/subvortex/validator/neuron/src/challenge.py +++ b/subvortex/validator/neuron/src/challenge.py @@ -217,7 +217,7 @@ async def challenge_miner(self, miner: Miner): miner.axon, Synapse(), deserialize=False, - timeout=10, + timeout=5, ) status_code = response.dendrite.status_code @@ -341,6 +341,11 @@ def challenge_subtensor(miner: Miner, challenge, max_retries=3): details = str(ex) break + if "id" not in response: + reason = "Response ID is missing" + details = "" + break + if "error" in response: reason = f"Error in response: {response['error'].get('message', 'Unknown error')}" details = "" @@ -351,6 +356,11 @@ def challenge_subtensor(miner: Miner, challenge, max_retries=3): details = "" break + if response['id'] != item_id: + reason = f"Response ID mismatch: expected '{item_id}', got '{response['id']}'" + details = "" + break + # Verify the challenge verified = response["result"] == value @@ -405,8 +415,11 @@ async def handle_challenge(self, uid: int, challenge): if miner_verified: btul.logging.success(f"[{CHALLENGE_NAME}][{miner.uid}] Miner verified") else: + message = ( + ", ".join(filter(None, [miner_reason, miner_details])) or "Unknown reason" + ) btul.logging.warning( - f"[{CHALLENGE_NAME}][{miner.uid}] Miner not verified - {miner_reason}" + f"[{CHALLENGE_NAME}][{miner.uid}] Miner not verified - {message}" ) # Challenge Subtensor if the miner is verified @@ -421,8 +434,12 @@ async def handle_challenge(self, uid: int, challenge): btul.logging.success(f"[{CHALLENGE_NAME}][{miner.uid}] Subtensor verified") process_time = subtensor_time else: + message = ( + ", ".join(filter(None, [subtensor_reason, subtensor_details])) + or "Unknown reason" + ) btul.logging.warning( - f"[{CHALLENGE_NAME}][{miner.uid}] Subtensor not verified - {subtensor_reason}" + f"[{CHALLENGE_NAME}][{miner.uid}] Subtensor not verified - {message}" ) # Flag the miner as verified or not From c35d13a66181ca86e0f2f109e3b19506812ea1d4 Mon Sep 17 00:00:00 2001 From: eclipsevortex Date: Mon, 8 Sep 2025 05:30:32 -0400 Subject: [PATCH 07/10] add the decoding --- VERSION | 2 +- subvortex/miner/metagraph/manifest.json | 6 +- subvortex/miner/metagraph/metadata.json | 6 +- subvortex/miner/metagraph/pyproject.toml | 2 +- subvortex/miner/neuron/manifest.json | 6 +- subvortex/miner/neuron/metadata.json | 6 +- subvortex/miner/neuron/pyproject.toml | 2 +- subvortex/miner/redis/manifest.json | 6 +- subvortex/miner/redis/metadata.json | 6 +- subvortex/miner/redis/version.py | 2 +- subvortex/miner/version.py | 2 +- subvortex/pyproject.toml | 2 +- subvortex/validator/metagraph/manifest.json | 6 +- subvortex/validator/metagraph/metadata.json | 6 +- subvortex/validator/metagraph/pyproject.toml | 2 +- subvortex/validator/neuron/manifest.json | 6 +- subvortex/validator/neuron/metadata.json | 6 +- subvortex/validator/neuron/pyproject.toml | 2 +- subvortex/validator/neuron/src/challenge.py | 117 ++++++++++++++++--- subvortex/validator/redis/manifest.json | 6 +- subvortex/validator/redis/metadata.json | 6 +- subvortex/validator/redis/version.py | 2 +- subvortex/validator/version.py | 2 +- 23 files changed, 150 insertions(+), 59 deletions(-) diff --git a/VERSION b/VERSION index 7148b0a9..f47c7cc7 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.9 +3.1.10-alpha.1 diff --git a/subvortex/miner/metagraph/manifest.json b/subvortex/miner/metagraph/manifest.json index cc41ad2b..67b07228 100644 --- a/subvortex/miner/metagraph/manifest.json +++ b/subvortex/miner/metagraph/manifest.json @@ -2,9 +2,9 @@ "id": "miner-metagraph", "name": "subvortex-miner-metagraph", "description": "SubVortex Miner Metagraph", - "version": "3.1.9", - "miner.version": "3.1.9", - "miner.metagraph.version": "3.1.9", + "version": "3.1.10-alpha.1", + "miner.version": "3.1.10-alpha.1", + "miner.metagraph.version": "3.1.10-alpha.1", "type": "python", "neuron": "miner", "component": "metagraph", diff --git a/subvortex/miner/metagraph/metadata.json b/subvortex/miner/metagraph/metadata.json index da1a078d..3c7a468d 100644 --- a/subvortex/miner/metagraph/metadata.json +++ b/subvortex/miner/metagraph/metadata.json @@ -1,9 +1,9 @@ { "id": "miner-metagraph", "name": "subvortex-miner-metagraph", - "version": "3.1.9", - "miner.version": "3.1.9", - "miner.metagraph.version": "3.1.9", + "version": "3.1.10-alpha.1", + "miner.version": "3.1.10-alpha.1", + "miner.metagraph.version": "3.1.10-alpha.1", "depends_on": [ "miner-redis" ] diff --git a/subvortex/miner/metagraph/pyproject.toml b/subvortex/miner/metagraph/pyproject.toml index 369f1f64..2cf9ee9f 100644 --- a/subvortex/miner/metagraph/pyproject.toml +++ b/subvortex/miner/metagraph/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "subvortex-miner-metagraph" -version = "3.1.9" +version = "3.1.10-alpha.1" description = "SubVortex Miner Metagraph" authors = [{ name = "Eclipse Vortex", email = "subvortex.bt@gmail.com" }] readme = "README.md" diff --git a/subvortex/miner/neuron/manifest.json b/subvortex/miner/neuron/manifest.json index 7dd57961..35abfc31 100644 --- a/subvortex/miner/neuron/manifest.json +++ b/subvortex/miner/neuron/manifest.json @@ -2,9 +2,9 @@ "id": "miner-neuron", "name": "subvortex-miner-neuron", "description": "SubVortex Miner Neuron", - "version": "3.1.9", - "miner.version": "3.1.9", - "miner.neuron.version": "3.1.9", + "version": "3.1.10-alpha.1", + "miner.version": "3.1.10-alpha.1", + "miner.neuron.version": "3.1.10-alpha.1", "type": "python", "neuron": "miner", "component": "neuron", diff --git a/subvortex/miner/neuron/metadata.json b/subvortex/miner/neuron/metadata.json index ebafdb53..8c7cd2c3 100644 --- a/subvortex/miner/neuron/metadata.json +++ b/subvortex/miner/neuron/metadata.json @@ -1,9 +1,9 @@ { "id": "miner-neuron", "name": "subvortex-miner-neuron", - "version": "3.1.9", - "miner.version": "3.1.9", - "miner.neuron.version": "3.1.9", + "version": "3.1.10-alpha.1", + "miner.version": "3.1.10-alpha.1", + "miner.neuron.version": "3.1.10-alpha.1", "depends_on": [ "miner-redis", "miner-metagraph" diff --git a/subvortex/miner/neuron/pyproject.toml b/subvortex/miner/neuron/pyproject.toml index fbe70160..e67a8fb4 100644 --- a/subvortex/miner/neuron/pyproject.toml +++ b/subvortex/miner/neuron/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "subvortex-miner-neuron" -version = "3.1.9" +version = "3.1.10-alpha.1" description = "SubVortex Miner Neuron" authors = [{ name = "Eclipse Vortex", email = "subvortex.bt@gmail.com" }] readme = "README.md" diff --git a/subvortex/miner/redis/manifest.json b/subvortex/miner/redis/manifest.json index ff116f9f..f27bcd99 100644 --- a/subvortex/miner/redis/manifest.json +++ b/subvortex/miner/redis/manifest.json @@ -2,9 +2,9 @@ "id": "miner-redis", "name": "subvortex-miner-redis", "description": "SubVortex Miner Redis", - "version": "3.1.9", - "miner.version": "3.1.9", - "miner.redis.version": "3.1.9", + "version": "3.1.10-alpha.1", + "miner.version": "3.1.10-alpha.1", + "miner.redis.version": "3.1.10-alpha.1", "type": "package", "neuron": "miner", "component": "redis", diff --git a/subvortex/miner/redis/metadata.json b/subvortex/miner/redis/metadata.json index 576eb4cc..13233749 100644 --- a/subvortex/miner/redis/metadata.json +++ b/subvortex/miner/redis/metadata.json @@ -1,9 +1,9 @@ { "id": "miner-redis", "name": "subvortex-miner-redis", - "version": "3.1.9", - "miner.version": "3.1.9", - "miner.redis.version": "3.1.9", + "version": "3.1.10-alpha.1", + "miner.version": "3.1.10-alpha.1", + "miner.redis.version": "3.1.10-alpha.1", "migration_type": "redis", "migration": "./migrations/versions", "depends_on": [] diff --git a/subvortex/miner/redis/version.py b/subvortex/miner/redis/version.py index fd53987b..4273c06a 100644 --- a/subvortex/miner/redis/version.py +++ b/subvortex/miner/redis/version.py @@ -1 +1 @@ -__version__ = "3.1.9" \ No newline at end of file +__version__ = "3.1.10-alpha.1" \ No newline at end of file diff --git a/subvortex/miner/version.py b/subvortex/miner/version.py index fd53987b..4273c06a 100644 --- a/subvortex/miner/version.py +++ b/subvortex/miner/version.py @@ -1 +1 @@ -__version__ = "3.1.9" \ No newline at end of file +__version__ = "3.1.10-alpha.1" \ No newline at end of file diff --git a/subvortex/pyproject.toml b/subvortex/pyproject.toml index 84b32fb1..52159ca5 100644 --- a/subvortex/pyproject.toml +++ b/subvortex/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "subvortex" -version = "3.1.9" +version = "3.1.10-alpha.1" description = "SubVortex" authors = [{ name = "Eclipse Vortex", email = "subvortex.bt@gmail.com" }] readme = "README.md" diff --git a/subvortex/validator/metagraph/manifest.json b/subvortex/validator/metagraph/manifest.json index da13eb76..24326260 100644 --- a/subvortex/validator/metagraph/manifest.json +++ b/subvortex/validator/metagraph/manifest.json @@ -2,9 +2,9 @@ "id": "validator-metagraph", "name": "subvortex-validator-metagraph", "description": "SubVortex Validator Metagraph", - "version": "3.1.9", - "validator.version": "3.1.9", - "validator.metagraph.version": "3.1.9", + "version": "3.1.10-alpha.1", + "validator.version": "3.1.10-alpha.1", + "validator.metagraph.version": "3.1.10-alpha.1", "type": "python", "neuron": "validator", "component": "metagraph", diff --git a/subvortex/validator/metagraph/metadata.json b/subvortex/validator/metagraph/metadata.json index 2479a65c..948a4d3c 100644 --- a/subvortex/validator/metagraph/metadata.json +++ b/subvortex/validator/metagraph/metadata.json @@ -1,9 +1,9 @@ { "id": "validator-metagraph", "name": "subvortex-validator-metagraph", - "version": "3.1.9", - "validator.version": "3.1.9", - "validator.metagraph.version": "3.1.9", + "version": "3.1.10-alpha.1", + "validator.version": "3.1.10-alpha.1", + "validator.metagraph.version": "3.1.10-alpha.1", "depends_on": [ "validator-redis" ] diff --git a/subvortex/validator/metagraph/pyproject.toml b/subvortex/validator/metagraph/pyproject.toml index d3598d72..10054d65 100644 --- a/subvortex/validator/metagraph/pyproject.toml +++ b/subvortex/validator/metagraph/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "subvortex-validator-metagraph" -version = "3.1.9" +version = "3.1.10-alpha.1" description = "SubVortex Validator Metagraph" authors = [{ name = "Eclipse Vortex", email = "subvortex.bt@gmail.com" }] readme = "README.md" diff --git a/subvortex/validator/neuron/manifest.json b/subvortex/validator/neuron/manifest.json index 5fe34fb3..d62e2578 100644 --- a/subvortex/validator/neuron/manifest.json +++ b/subvortex/validator/neuron/manifest.json @@ -2,9 +2,9 @@ "id": "validator-neuron", "name": "subvortex-validator-neuron", "description": "SubVortex Validator Neuron", - "version": "3.1.9", - "validator.version": "3.1.9", - "validator.neuron.version": "3.1.9", + "version": "3.1.10-alpha.1", + "validator.version": "3.1.10-alpha.1", + "validator.neuron.version": "3.1.10-alpha.1", "type": "python", "neuron": "validator", "component": "neuron", diff --git a/subvortex/validator/neuron/metadata.json b/subvortex/validator/neuron/metadata.json index e43e0d02..2290bd74 100644 --- a/subvortex/validator/neuron/metadata.json +++ b/subvortex/validator/neuron/metadata.json @@ -1,9 +1,9 @@ { "id": "validator-neuron", "name": "subvortex-validator-neuron", - "version": "3.1.9", - "validator.version": "3.1.9", - "validator.neuron.version": "3.1.9", + "version": "3.1.10-alpha.1", + "validator.version": "3.1.10-alpha.1", + "validator.neuron.version": "3.1.10-alpha.1", "depends_on": [ "validator-redis", "validator-metagraph" diff --git a/subvortex/validator/neuron/pyproject.toml b/subvortex/validator/neuron/pyproject.toml index b974e8ad..d6c4fcf0 100644 --- a/subvortex/validator/neuron/pyproject.toml +++ b/subvortex/validator/neuron/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "subvortex-validator-neuron" -version = "3.1.9" +version = "3.1.10-alpha.1" description = "SubVortex Validator Neuron" authors = [{ name = "Eclipse Vortex", email = "subvortex.bt@gmail.com" }] readme = "README.md" diff --git a/subvortex/validator/neuron/src/challenge.py b/subvortex/validator/neuron/src/challenge.py index ca9d8a6d..2e713fce 100644 --- a/subvortex/validator/neuron/src/challenge.py +++ b/subvortex/validator/neuron/src/challenge.py @@ -34,6 +34,9 @@ WebSocketException, ) +from async_substrate_interface.utils import hex_to_bytes +from async_substrate_interface.types import ScaleObj + from subvortex.core.protocol import Synapse from subvortex.validator.neuron.src.miner import Miner from subvortex.validator.neuron.src.synapse import send_scope @@ -126,6 +129,55 @@ def encode(substrate: btcs.SubstrateInterface, runtime_call_def, params={}): return param_data +def decode(substrate: btcs.SubstrateInterface, result): + """ + Decode the response from NeuronInfoRuntimeApi_get_neuron_lite call + Based on sync_substrate.py decoding patterns + """ + try: + # Convert hex result to bytes (similar to sync_substrate pattern) + result_bytes = hex_to_bytes(result) + + # Get the runtime metadata for the current subtensor version + metadata = substrate.runtime.metadata_v15.value() + + # Find the NeuronInfoRuntimeApi definition + apis = {entry["name"]: entry for entry in metadata["apis"]} + if "NeuronInfoRuntimeApi" not in apis: + raise ValueError("NeuronInfoRuntimeApi not found in runtime metadata") + + api_entry = apis["NeuronInfoRuntimeApi"] + + # Find the get_neuron_lite method + method_def = None + for method in api_entry["methods"]: + if method["name"] == "get_neuron_lite": + method_def = method + break + + if not method_def: + raise ValueError("get_neuron_lite method not found") + + # Get the output type from method definition + output_type_id = method_def["output"] + output_type_string = f"scale_info::{output_type_id}" + + # Decode using substrate's scale decoder (similar to sync_substrate._decode_scale) + decoded_obj = substrate.decode_scale(output_type_string, result_bytes) + + # Convert to dictionary format (similar to sync_substrate result processing) + if hasattr(decoded_obj, "value"): + result_dict = decoded_obj.value + else: + result_dict = decoded_obj + + return result_dict + + except Exception as e: + btul.logging.error(f"Failed to decode neuron response: {e}") + raise ValueError(f"Decoding failed: {str(e)}") + + async def create_subtensor_challenge(subtensor: btcs.Subtensor): """ Create the challenge that the miner subtensor will have to execute @@ -167,6 +219,16 @@ async def create_subtensor_challenge(subtensor: btcs.Subtensor): neuron_uid = neuron.uid btul.logging.trace(f"Neuron chosen: {neuron_uid}") + # Select the property + properties = ( + MINER_PROPERTIES if neuron.axon_info.is_serving else VALIDATOR_PROPERTIES + ) + + # Get the runtime call definition + property_index = random.randint(0, len(properties) - 1) + property_name = properties[property_index] + btul.logging.trace(f"Property chosen: {property_name}") + # Get the runtime call definition runtime_call_def = get_runtime_call_definition( substrate=subtensor.substrate, @@ -191,11 +253,24 @@ async def create_subtensor_challenge(subtensor: btcs.Subtensor): # Get the result value = response.get("result") - return ( - block_hash, - params, - value, - ) + # Decode the result + try: + result = decode(substrate=subtensor.substrate, result=response.get("result")) + except Exception as ex: + btul.logging.error(f"Failed to decode challenge creation result: {ex}") + return None + + # Get the property value + try: + property_value = result.get(property_name) + if property_value is None: + btul.logging.error(f"Property '{property_name}' not found in result. Available: {list(result.keys())}") + return None + except Exception as ex: + btul.logging.error(f"Failed to extract property '{property_name}': {ex}") + return None + + return (block_hash, params, value, property_name, property_value, result) except Exception as err: btul.logging.warning(f"Could not create the challenge: {err}") @@ -235,7 +310,9 @@ async def challenge_miner(self, miner: Miner): return (verified, reason, details) -def challenge_subtensor(miner: Miner, challenge, max_retries=3): +def challenge_subtensor( + miner: Miner, challenge, substrate: btcs.SubstrateInterface, max_retries=3 +): """ Challenge the subtensor by requesting the value of a property of a specific neuron in a specific subnet at a certain block """ @@ -249,7 +326,9 @@ def challenge_subtensor(miner: Miner, challenge, max_retries=3): for attempt in range(max_retries): try: # Get the details of the challenge - block_hash, params, value = challenge + block_hash, params, value, property_name, property_value, final_value = ( + challenge + ) # Add small delay between retries if attempt > 0: @@ -300,7 +379,7 @@ def challenge_subtensor(miner: Miner, challenge, max_retries=3): ], } ) - + try: # Send request ws.send(data) @@ -356,13 +435,19 @@ def challenge_subtensor(miner: Miner, challenge, max_retries=3): details = "" break - if response['id'] != item_id: + if response["id"] != item_id: reason = f"Response ID mismatch: expected '{item_id}', got '{response['id']}'" details = "" break + # Decode result + result = decode(substrate=substrate, result=response["result"]) + + # Get the property value + value = result.get(property_name) + # Verify the challenge - verified = response["result"] == value + verified = str(property_value) == str(value) # Log total process time breakdown total_time = time.time() - start_time @@ -397,7 +482,9 @@ def challenge_subtensor(miner: Miner, challenge, max_retries=3): return (verified, reason, details, process_time) -async def handle_challenge(self, uid: int, challenge): +async def handle_challenge( + self, uid: int, challenge, substrate: btcs.SubstrateInterface +): btul.logging.debug(f"[{CHALLENGE_NAME}][{uid}] Challenging...") # Get the miner @@ -428,7 +515,7 @@ async def handle_challenge(self, uid: int, challenge): # Challenge Subtensor - Process time + check the challenge btul.logging.debug(f"[{CHALLENGE_NAME}][{miner.uid}] Challenging subtensor") subtensor_verified, subtensor_reason, subtensor_details, subtensor_time = ( - challenge_subtensor(miner, challenge) + challenge_subtensor(miner, challenge, substrate) ) if subtensor_verified: btul.logging.success(f"[{CHALLENGE_NAME}][{miner.uid}] Subtensor verified") @@ -497,7 +584,11 @@ async def challenge_data(self, block: int): details = [] for uid in uids: # Send the challenge to the miner - tasks.append(asyncio.create_task(handle_challenge(self, uid, challenge))) + tasks.append( + asyncio.create_task( + handle_challenge(self, uid, challenge, self.subtensor.substrate) + ) + ) results = await asyncio.gather(*tasks) reasons, details = zip(*results) diff --git a/subvortex/validator/redis/manifest.json b/subvortex/validator/redis/manifest.json index 9f31f1cd..8e11de4a 100644 --- a/subvortex/validator/redis/manifest.json +++ b/subvortex/validator/redis/manifest.json @@ -2,9 +2,9 @@ "id": "validator-redis", "name": "subvortex-validator-redis", "description": "SubVortex Validator Redis", - "version": "3.1.9", - "validator.version": "3.1.9", - "validator.redis.version": "3.1.9", + "version": "3.1.10-alpha.1", + "validator.version": "3.1.10-alpha.1", + "validator.redis.version": "3.1.10-alpha.1", "type": "package", "neuron": "validator", "component": "redis", diff --git a/subvortex/validator/redis/metadata.json b/subvortex/validator/redis/metadata.json index bccb3aef..9a5d54b1 100644 --- a/subvortex/validator/redis/metadata.json +++ b/subvortex/validator/redis/metadata.json @@ -1,9 +1,9 @@ { "id": "validator-redis", "name": "subvortex-validator-redis", - "version": "3.1.9", - "validator.version": "3.1.9", - "validator.redis.version": "3.1.9", + "version": "3.1.10-alpha.1", + "validator.version": "3.1.10-alpha.1", + "validator.redis.version": "3.1.10-alpha.1", "migration_type": "redis", "migration": "./migrations/versions", "depends_on": [] diff --git a/subvortex/validator/redis/version.py b/subvortex/validator/redis/version.py index fd53987b..4273c06a 100644 --- a/subvortex/validator/redis/version.py +++ b/subvortex/validator/redis/version.py @@ -1 +1 @@ -__version__ = "3.1.9" \ No newline at end of file +__version__ = "3.1.10-alpha.1" \ No newline at end of file diff --git a/subvortex/validator/version.py b/subvortex/validator/version.py index fd53987b..4273c06a 100644 --- a/subvortex/validator/version.py +++ b/subvortex/validator/version.py @@ -1 +1 @@ -__version__ = "3.1.9" \ No newline at end of file +__version__ = "3.1.10-alpha.1" \ No newline at end of file From d7ed7469687eeafc19add30f38692d6a1913596d Mon Sep 17 00:00:00 2001 From: eclipsevortex Date: Mon, 8 Sep 2025 06:13:47 -0400 Subject: [PATCH 08/10] rollback version --- VERSION | 2 +- subvortex/miner/metagraph/manifest.json | 6 +++--- subvortex/miner/metagraph/metadata.json | 6 +++--- subvortex/miner/metagraph/pyproject.toml | 2 +- subvortex/miner/neuron/manifest.json | 6 +++--- subvortex/miner/neuron/metadata.json | 6 +++--- subvortex/miner/neuron/pyproject.toml | 2 +- subvortex/miner/redis/manifest.json | 6 +++--- subvortex/miner/redis/metadata.json | 6 +++--- subvortex/miner/redis/version.py | 2 +- subvortex/miner/version.py | 2 +- subvortex/pyproject.toml | 2 +- subvortex/validator/metagraph/manifest.json | 6 +++--- subvortex/validator/metagraph/metadata.json | 6 +++--- subvortex/validator/metagraph/pyproject.toml | 2 +- subvortex/validator/neuron/manifest.json | 6 +++--- subvortex/validator/neuron/metadata.json | 6 +++--- subvortex/validator/neuron/pyproject.toml | 2 +- subvortex/validator/redis/manifest.json | 6 +++--- subvortex/validator/redis/metadata.json | 6 +++--- subvortex/validator/redis/version.py | 2 +- subvortex/validator/version.py | 2 +- 22 files changed, 46 insertions(+), 46 deletions(-) diff --git a/VERSION b/VERSION index f47c7cc7..dc5ec24e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.10-alpha.1 +3.1.10-alpha.2 diff --git a/subvortex/miner/metagraph/manifest.json b/subvortex/miner/metagraph/manifest.json index 67b07228..442ca46e 100644 --- a/subvortex/miner/metagraph/manifest.json +++ b/subvortex/miner/metagraph/manifest.json @@ -2,9 +2,9 @@ "id": "miner-metagraph", "name": "subvortex-miner-metagraph", "description": "SubVortex Miner Metagraph", - "version": "3.1.10-alpha.1", - "miner.version": "3.1.10-alpha.1", - "miner.metagraph.version": "3.1.10-alpha.1", + "version": "3.1.10-alpha.2", + "miner.version": "3.1.10-alpha.2", + "miner.metagraph.version": "3.1.10-alpha.2", "type": "python", "neuron": "miner", "component": "metagraph", diff --git a/subvortex/miner/metagraph/metadata.json b/subvortex/miner/metagraph/metadata.json index 3c7a468d..c4288f78 100644 --- a/subvortex/miner/metagraph/metadata.json +++ b/subvortex/miner/metagraph/metadata.json @@ -1,9 +1,9 @@ { "id": "miner-metagraph", "name": "subvortex-miner-metagraph", - "version": "3.1.10-alpha.1", - "miner.version": "3.1.10-alpha.1", - "miner.metagraph.version": "3.1.10-alpha.1", + "version": "3.1.10-alpha.2", + "miner.version": "3.1.10-alpha.2", + "miner.metagraph.version": "3.1.10-alpha.2", "depends_on": [ "miner-redis" ] diff --git a/subvortex/miner/metagraph/pyproject.toml b/subvortex/miner/metagraph/pyproject.toml index 2cf9ee9f..f2f155cc 100644 --- a/subvortex/miner/metagraph/pyproject.toml +++ b/subvortex/miner/metagraph/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "subvortex-miner-metagraph" -version = "3.1.10-alpha.1" +version = "3.1.10-alpha.2" description = "SubVortex Miner Metagraph" authors = [{ name = "Eclipse Vortex", email = "subvortex.bt@gmail.com" }] readme = "README.md" diff --git a/subvortex/miner/neuron/manifest.json b/subvortex/miner/neuron/manifest.json index 35abfc31..443dd1cf 100644 --- a/subvortex/miner/neuron/manifest.json +++ b/subvortex/miner/neuron/manifest.json @@ -2,9 +2,9 @@ "id": "miner-neuron", "name": "subvortex-miner-neuron", "description": "SubVortex Miner Neuron", - "version": "3.1.10-alpha.1", - "miner.version": "3.1.10-alpha.1", - "miner.neuron.version": "3.1.10-alpha.1", + "version": "3.1.10-alpha.2", + "miner.version": "3.1.10-alpha.2", + "miner.neuron.version": "3.1.10-alpha.2", "type": "python", "neuron": "miner", "component": "neuron", diff --git a/subvortex/miner/neuron/metadata.json b/subvortex/miner/neuron/metadata.json index 8c7cd2c3..cc75c1a7 100644 --- a/subvortex/miner/neuron/metadata.json +++ b/subvortex/miner/neuron/metadata.json @@ -1,9 +1,9 @@ { "id": "miner-neuron", "name": "subvortex-miner-neuron", - "version": "3.1.10-alpha.1", - "miner.version": "3.1.10-alpha.1", - "miner.neuron.version": "3.1.10-alpha.1", + "version": "3.1.10-alpha.2", + "miner.version": "3.1.10-alpha.2", + "miner.neuron.version": "3.1.10-alpha.2", "depends_on": [ "miner-redis", "miner-metagraph" diff --git a/subvortex/miner/neuron/pyproject.toml b/subvortex/miner/neuron/pyproject.toml index e67a8fb4..5398cee1 100644 --- a/subvortex/miner/neuron/pyproject.toml +++ b/subvortex/miner/neuron/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "subvortex-miner-neuron" -version = "3.1.10-alpha.1" +version = "3.1.10-alpha.2" description = "SubVortex Miner Neuron" authors = [{ name = "Eclipse Vortex", email = "subvortex.bt@gmail.com" }] readme = "README.md" diff --git a/subvortex/miner/redis/manifest.json b/subvortex/miner/redis/manifest.json index f27bcd99..dd04072f 100644 --- a/subvortex/miner/redis/manifest.json +++ b/subvortex/miner/redis/manifest.json @@ -2,9 +2,9 @@ "id": "miner-redis", "name": "subvortex-miner-redis", "description": "SubVortex Miner Redis", - "version": "3.1.10-alpha.1", - "miner.version": "3.1.10-alpha.1", - "miner.redis.version": "3.1.10-alpha.1", + "version": "3.1.10-alpha.2", + "miner.version": "3.1.10-alpha.2", + "miner.redis.version": "3.1.10-alpha.2", "type": "package", "neuron": "miner", "component": "redis", diff --git a/subvortex/miner/redis/metadata.json b/subvortex/miner/redis/metadata.json index 13233749..7508b3b7 100644 --- a/subvortex/miner/redis/metadata.json +++ b/subvortex/miner/redis/metadata.json @@ -1,9 +1,9 @@ { "id": "miner-redis", "name": "subvortex-miner-redis", - "version": "3.1.10-alpha.1", - "miner.version": "3.1.10-alpha.1", - "miner.redis.version": "3.1.10-alpha.1", + "version": "3.1.10-alpha.2", + "miner.version": "3.1.10-alpha.2", + "miner.redis.version": "3.1.10-alpha.2", "migration_type": "redis", "migration": "./migrations/versions", "depends_on": [] diff --git a/subvortex/miner/redis/version.py b/subvortex/miner/redis/version.py index 4273c06a..bcc2ceb5 100644 --- a/subvortex/miner/redis/version.py +++ b/subvortex/miner/redis/version.py @@ -1 +1 @@ -__version__ = "3.1.10-alpha.1" \ No newline at end of file +__version__ = "3.1.10-alpha.2" \ No newline at end of file diff --git a/subvortex/miner/version.py b/subvortex/miner/version.py index 4273c06a..bcc2ceb5 100644 --- a/subvortex/miner/version.py +++ b/subvortex/miner/version.py @@ -1 +1 @@ -__version__ = "3.1.10-alpha.1" \ No newline at end of file +__version__ = "3.1.10-alpha.2" \ No newline at end of file diff --git a/subvortex/pyproject.toml b/subvortex/pyproject.toml index 52159ca5..10679091 100644 --- a/subvortex/pyproject.toml +++ b/subvortex/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "subvortex" -version = "3.1.10-alpha.1" +version = "3.1.10-alpha.2" description = "SubVortex" authors = [{ name = "Eclipse Vortex", email = "subvortex.bt@gmail.com" }] readme = "README.md" diff --git a/subvortex/validator/metagraph/manifest.json b/subvortex/validator/metagraph/manifest.json index 24326260..b97fb05a 100644 --- a/subvortex/validator/metagraph/manifest.json +++ b/subvortex/validator/metagraph/manifest.json @@ -2,9 +2,9 @@ "id": "validator-metagraph", "name": "subvortex-validator-metagraph", "description": "SubVortex Validator Metagraph", - "version": "3.1.10-alpha.1", - "validator.version": "3.1.10-alpha.1", - "validator.metagraph.version": "3.1.10-alpha.1", + "version": "3.1.10-alpha.2", + "validator.version": "3.1.10-alpha.2", + "validator.metagraph.version": "3.1.10-alpha.2", "type": "python", "neuron": "validator", "component": "metagraph", diff --git a/subvortex/validator/metagraph/metadata.json b/subvortex/validator/metagraph/metadata.json index 948a4d3c..621ea87f 100644 --- a/subvortex/validator/metagraph/metadata.json +++ b/subvortex/validator/metagraph/metadata.json @@ -1,9 +1,9 @@ { "id": "validator-metagraph", "name": "subvortex-validator-metagraph", - "version": "3.1.10-alpha.1", - "validator.version": "3.1.10-alpha.1", - "validator.metagraph.version": "3.1.10-alpha.1", + "version": "3.1.10-alpha.2", + "validator.version": "3.1.10-alpha.2", + "validator.metagraph.version": "3.1.10-alpha.2", "depends_on": [ "validator-redis" ] diff --git a/subvortex/validator/metagraph/pyproject.toml b/subvortex/validator/metagraph/pyproject.toml index 10054d65..3b4242a8 100644 --- a/subvortex/validator/metagraph/pyproject.toml +++ b/subvortex/validator/metagraph/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "subvortex-validator-metagraph" -version = "3.1.10-alpha.1" +version = "3.1.10-alpha.2" description = "SubVortex Validator Metagraph" authors = [{ name = "Eclipse Vortex", email = "subvortex.bt@gmail.com" }] readme = "README.md" diff --git a/subvortex/validator/neuron/manifest.json b/subvortex/validator/neuron/manifest.json index d62e2578..50dd6aee 100644 --- a/subvortex/validator/neuron/manifest.json +++ b/subvortex/validator/neuron/manifest.json @@ -2,9 +2,9 @@ "id": "validator-neuron", "name": "subvortex-validator-neuron", "description": "SubVortex Validator Neuron", - "version": "3.1.10-alpha.1", - "validator.version": "3.1.10-alpha.1", - "validator.neuron.version": "3.1.10-alpha.1", + "version": "3.1.10-alpha.2", + "validator.version": "3.1.10-alpha.2", + "validator.neuron.version": "3.1.10-alpha.2", "type": "python", "neuron": "validator", "component": "neuron", diff --git a/subvortex/validator/neuron/metadata.json b/subvortex/validator/neuron/metadata.json index 2290bd74..99d4063c 100644 --- a/subvortex/validator/neuron/metadata.json +++ b/subvortex/validator/neuron/metadata.json @@ -1,9 +1,9 @@ { "id": "validator-neuron", "name": "subvortex-validator-neuron", - "version": "3.1.10-alpha.1", - "validator.version": "3.1.10-alpha.1", - "validator.neuron.version": "3.1.10-alpha.1", + "version": "3.1.10-alpha.2", + "validator.version": "3.1.10-alpha.2", + "validator.neuron.version": "3.1.10-alpha.2", "depends_on": [ "validator-redis", "validator-metagraph" diff --git a/subvortex/validator/neuron/pyproject.toml b/subvortex/validator/neuron/pyproject.toml index d6c4fcf0..2c7b3a7f 100644 --- a/subvortex/validator/neuron/pyproject.toml +++ b/subvortex/validator/neuron/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "subvortex-validator-neuron" -version = "3.1.10-alpha.1" +version = "3.1.10-alpha.2" description = "SubVortex Validator Neuron" authors = [{ name = "Eclipse Vortex", email = "subvortex.bt@gmail.com" }] readme = "README.md" diff --git a/subvortex/validator/redis/manifest.json b/subvortex/validator/redis/manifest.json index 8e11de4a..cb4be11d 100644 --- a/subvortex/validator/redis/manifest.json +++ b/subvortex/validator/redis/manifest.json @@ -2,9 +2,9 @@ "id": "validator-redis", "name": "subvortex-validator-redis", "description": "SubVortex Validator Redis", - "version": "3.1.10-alpha.1", - "validator.version": "3.1.10-alpha.1", - "validator.redis.version": "3.1.10-alpha.1", + "version": "3.1.10-alpha.2", + "validator.version": "3.1.10-alpha.2", + "validator.redis.version": "3.1.10-alpha.2", "type": "package", "neuron": "validator", "component": "redis", diff --git a/subvortex/validator/redis/metadata.json b/subvortex/validator/redis/metadata.json index 9a5d54b1..f8e967ec 100644 --- a/subvortex/validator/redis/metadata.json +++ b/subvortex/validator/redis/metadata.json @@ -1,9 +1,9 @@ { "id": "validator-redis", "name": "subvortex-validator-redis", - "version": "3.1.10-alpha.1", - "validator.version": "3.1.10-alpha.1", - "validator.redis.version": "3.1.10-alpha.1", + "version": "3.1.10-alpha.2", + "validator.version": "3.1.10-alpha.2", + "validator.redis.version": "3.1.10-alpha.2", "migration_type": "redis", "migration": "./migrations/versions", "depends_on": [] diff --git a/subvortex/validator/redis/version.py b/subvortex/validator/redis/version.py index 4273c06a..bcc2ceb5 100644 --- a/subvortex/validator/redis/version.py +++ b/subvortex/validator/redis/version.py @@ -1 +1 @@ -__version__ = "3.1.10-alpha.1" \ No newline at end of file +__version__ = "3.1.10-alpha.2" \ No newline at end of file diff --git a/subvortex/validator/version.py b/subvortex/validator/version.py index 4273c06a..bcc2ceb5 100644 --- a/subvortex/validator/version.py +++ b/subvortex/validator/version.py @@ -1 +1 @@ -__version__ = "3.1.10-alpha.1" \ No newline at end of file +__version__ = "3.1.10-alpha.2" \ No newline at end of file From 476a39a8fcdaedc339135655d5f3896b9c8b5fae Mon Sep 17 00:00:00 2001 From: eclipsevortex Date: Mon, 8 Sep 2025 06:14:33 -0400 Subject: [PATCH 09/10] rollback version --- VERSION | 2 +- subvortex/miner/metagraph/manifest.json | 6 +++--- subvortex/miner/metagraph/metadata.json | 6 +++--- subvortex/miner/metagraph/pyproject.toml | 2 +- subvortex/miner/neuron/manifest.json | 6 +++--- subvortex/miner/neuron/metadata.json | 6 +++--- subvortex/miner/neuron/pyproject.toml | 2 +- subvortex/miner/redis/manifest.json | 6 +++--- subvortex/miner/redis/metadata.json | 6 +++--- subvortex/miner/redis/version.py | 2 +- subvortex/miner/version.py | 2 +- subvortex/pyproject.toml | 2 +- subvortex/validator/metagraph/manifest.json | 6 +++--- subvortex/validator/metagraph/metadata.json | 6 +++--- subvortex/validator/metagraph/pyproject.toml | 2 +- subvortex/validator/neuron/manifest.json | 6 +++--- subvortex/validator/neuron/metadata.json | 6 +++--- subvortex/validator/neuron/pyproject.toml | 2 +- subvortex/validator/redis/manifest.json | 6 +++--- subvortex/validator/redis/metadata.json | 6 +++--- subvortex/validator/redis/version.py | 2 +- subvortex/validator/version.py | 2 +- 22 files changed, 46 insertions(+), 46 deletions(-) diff --git a/VERSION b/VERSION index dc5ec24e..7148b0a9 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.1.10-alpha.2 +3.1.9 diff --git a/subvortex/miner/metagraph/manifest.json b/subvortex/miner/metagraph/manifest.json index 442ca46e..cc41ad2b 100644 --- a/subvortex/miner/metagraph/manifest.json +++ b/subvortex/miner/metagraph/manifest.json @@ -2,9 +2,9 @@ "id": "miner-metagraph", "name": "subvortex-miner-metagraph", "description": "SubVortex Miner Metagraph", - "version": "3.1.10-alpha.2", - "miner.version": "3.1.10-alpha.2", - "miner.metagraph.version": "3.1.10-alpha.2", + "version": "3.1.9", + "miner.version": "3.1.9", + "miner.metagraph.version": "3.1.9", "type": "python", "neuron": "miner", "component": "metagraph", diff --git a/subvortex/miner/metagraph/metadata.json b/subvortex/miner/metagraph/metadata.json index c4288f78..da1a078d 100644 --- a/subvortex/miner/metagraph/metadata.json +++ b/subvortex/miner/metagraph/metadata.json @@ -1,9 +1,9 @@ { "id": "miner-metagraph", "name": "subvortex-miner-metagraph", - "version": "3.1.10-alpha.2", - "miner.version": "3.1.10-alpha.2", - "miner.metagraph.version": "3.1.10-alpha.2", + "version": "3.1.9", + "miner.version": "3.1.9", + "miner.metagraph.version": "3.1.9", "depends_on": [ "miner-redis" ] diff --git a/subvortex/miner/metagraph/pyproject.toml b/subvortex/miner/metagraph/pyproject.toml index f2f155cc..369f1f64 100644 --- a/subvortex/miner/metagraph/pyproject.toml +++ b/subvortex/miner/metagraph/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "subvortex-miner-metagraph" -version = "3.1.10-alpha.2" +version = "3.1.9" description = "SubVortex Miner Metagraph" authors = [{ name = "Eclipse Vortex", email = "subvortex.bt@gmail.com" }] readme = "README.md" diff --git a/subvortex/miner/neuron/manifest.json b/subvortex/miner/neuron/manifest.json index 443dd1cf..7dd57961 100644 --- a/subvortex/miner/neuron/manifest.json +++ b/subvortex/miner/neuron/manifest.json @@ -2,9 +2,9 @@ "id": "miner-neuron", "name": "subvortex-miner-neuron", "description": "SubVortex Miner Neuron", - "version": "3.1.10-alpha.2", - "miner.version": "3.1.10-alpha.2", - "miner.neuron.version": "3.1.10-alpha.2", + "version": "3.1.9", + "miner.version": "3.1.9", + "miner.neuron.version": "3.1.9", "type": "python", "neuron": "miner", "component": "neuron", diff --git a/subvortex/miner/neuron/metadata.json b/subvortex/miner/neuron/metadata.json index cc75c1a7..ebafdb53 100644 --- a/subvortex/miner/neuron/metadata.json +++ b/subvortex/miner/neuron/metadata.json @@ -1,9 +1,9 @@ { "id": "miner-neuron", "name": "subvortex-miner-neuron", - "version": "3.1.10-alpha.2", - "miner.version": "3.1.10-alpha.2", - "miner.neuron.version": "3.1.10-alpha.2", + "version": "3.1.9", + "miner.version": "3.1.9", + "miner.neuron.version": "3.1.9", "depends_on": [ "miner-redis", "miner-metagraph" diff --git a/subvortex/miner/neuron/pyproject.toml b/subvortex/miner/neuron/pyproject.toml index 5398cee1..fbe70160 100644 --- a/subvortex/miner/neuron/pyproject.toml +++ b/subvortex/miner/neuron/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "subvortex-miner-neuron" -version = "3.1.10-alpha.2" +version = "3.1.9" description = "SubVortex Miner Neuron" authors = [{ name = "Eclipse Vortex", email = "subvortex.bt@gmail.com" }] readme = "README.md" diff --git a/subvortex/miner/redis/manifest.json b/subvortex/miner/redis/manifest.json index dd04072f..ff116f9f 100644 --- a/subvortex/miner/redis/manifest.json +++ b/subvortex/miner/redis/manifest.json @@ -2,9 +2,9 @@ "id": "miner-redis", "name": "subvortex-miner-redis", "description": "SubVortex Miner Redis", - "version": "3.1.10-alpha.2", - "miner.version": "3.1.10-alpha.2", - "miner.redis.version": "3.1.10-alpha.2", + "version": "3.1.9", + "miner.version": "3.1.9", + "miner.redis.version": "3.1.9", "type": "package", "neuron": "miner", "component": "redis", diff --git a/subvortex/miner/redis/metadata.json b/subvortex/miner/redis/metadata.json index 7508b3b7..576eb4cc 100644 --- a/subvortex/miner/redis/metadata.json +++ b/subvortex/miner/redis/metadata.json @@ -1,9 +1,9 @@ { "id": "miner-redis", "name": "subvortex-miner-redis", - "version": "3.1.10-alpha.2", - "miner.version": "3.1.10-alpha.2", - "miner.redis.version": "3.1.10-alpha.2", + "version": "3.1.9", + "miner.version": "3.1.9", + "miner.redis.version": "3.1.9", "migration_type": "redis", "migration": "./migrations/versions", "depends_on": [] diff --git a/subvortex/miner/redis/version.py b/subvortex/miner/redis/version.py index bcc2ceb5..fd53987b 100644 --- a/subvortex/miner/redis/version.py +++ b/subvortex/miner/redis/version.py @@ -1 +1 @@ -__version__ = "3.1.10-alpha.2" \ No newline at end of file +__version__ = "3.1.9" \ No newline at end of file diff --git a/subvortex/miner/version.py b/subvortex/miner/version.py index bcc2ceb5..fd53987b 100644 --- a/subvortex/miner/version.py +++ b/subvortex/miner/version.py @@ -1 +1 @@ -__version__ = "3.1.10-alpha.2" \ No newline at end of file +__version__ = "3.1.9" \ No newline at end of file diff --git a/subvortex/pyproject.toml b/subvortex/pyproject.toml index 10679091..84b32fb1 100644 --- a/subvortex/pyproject.toml +++ b/subvortex/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "subvortex" -version = "3.1.10-alpha.2" +version = "3.1.9" description = "SubVortex" authors = [{ name = "Eclipse Vortex", email = "subvortex.bt@gmail.com" }] readme = "README.md" diff --git a/subvortex/validator/metagraph/manifest.json b/subvortex/validator/metagraph/manifest.json index b97fb05a..da13eb76 100644 --- a/subvortex/validator/metagraph/manifest.json +++ b/subvortex/validator/metagraph/manifest.json @@ -2,9 +2,9 @@ "id": "validator-metagraph", "name": "subvortex-validator-metagraph", "description": "SubVortex Validator Metagraph", - "version": "3.1.10-alpha.2", - "validator.version": "3.1.10-alpha.2", - "validator.metagraph.version": "3.1.10-alpha.2", + "version": "3.1.9", + "validator.version": "3.1.9", + "validator.metagraph.version": "3.1.9", "type": "python", "neuron": "validator", "component": "metagraph", diff --git a/subvortex/validator/metagraph/metadata.json b/subvortex/validator/metagraph/metadata.json index 621ea87f..2479a65c 100644 --- a/subvortex/validator/metagraph/metadata.json +++ b/subvortex/validator/metagraph/metadata.json @@ -1,9 +1,9 @@ { "id": "validator-metagraph", "name": "subvortex-validator-metagraph", - "version": "3.1.10-alpha.2", - "validator.version": "3.1.10-alpha.2", - "validator.metagraph.version": "3.1.10-alpha.2", + "version": "3.1.9", + "validator.version": "3.1.9", + "validator.metagraph.version": "3.1.9", "depends_on": [ "validator-redis" ] diff --git a/subvortex/validator/metagraph/pyproject.toml b/subvortex/validator/metagraph/pyproject.toml index 3b4242a8..d3598d72 100644 --- a/subvortex/validator/metagraph/pyproject.toml +++ b/subvortex/validator/metagraph/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "subvortex-validator-metagraph" -version = "3.1.10-alpha.2" +version = "3.1.9" description = "SubVortex Validator Metagraph" authors = [{ name = "Eclipse Vortex", email = "subvortex.bt@gmail.com" }] readme = "README.md" diff --git a/subvortex/validator/neuron/manifest.json b/subvortex/validator/neuron/manifest.json index 50dd6aee..5fe34fb3 100644 --- a/subvortex/validator/neuron/manifest.json +++ b/subvortex/validator/neuron/manifest.json @@ -2,9 +2,9 @@ "id": "validator-neuron", "name": "subvortex-validator-neuron", "description": "SubVortex Validator Neuron", - "version": "3.1.10-alpha.2", - "validator.version": "3.1.10-alpha.2", - "validator.neuron.version": "3.1.10-alpha.2", + "version": "3.1.9", + "validator.version": "3.1.9", + "validator.neuron.version": "3.1.9", "type": "python", "neuron": "validator", "component": "neuron", diff --git a/subvortex/validator/neuron/metadata.json b/subvortex/validator/neuron/metadata.json index 99d4063c..e43e0d02 100644 --- a/subvortex/validator/neuron/metadata.json +++ b/subvortex/validator/neuron/metadata.json @@ -1,9 +1,9 @@ { "id": "validator-neuron", "name": "subvortex-validator-neuron", - "version": "3.1.10-alpha.2", - "validator.version": "3.1.10-alpha.2", - "validator.neuron.version": "3.1.10-alpha.2", + "version": "3.1.9", + "validator.version": "3.1.9", + "validator.neuron.version": "3.1.9", "depends_on": [ "validator-redis", "validator-metagraph" diff --git a/subvortex/validator/neuron/pyproject.toml b/subvortex/validator/neuron/pyproject.toml index 2c7b3a7f..b974e8ad 100644 --- a/subvortex/validator/neuron/pyproject.toml +++ b/subvortex/validator/neuron/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "subvortex-validator-neuron" -version = "3.1.10-alpha.2" +version = "3.1.9" description = "SubVortex Validator Neuron" authors = [{ name = "Eclipse Vortex", email = "subvortex.bt@gmail.com" }] readme = "README.md" diff --git a/subvortex/validator/redis/manifest.json b/subvortex/validator/redis/manifest.json index cb4be11d..9f31f1cd 100644 --- a/subvortex/validator/redis/manifest.json +++ b/subvortex/validator/redis/manifest.json @@ -2,9 +2,9 @@ "id": "validator-redis", "name": "subvortex-validator-redis", "description": "SubVortex Validator Redis", - "version": "3.1.10-alpha.2", - "validator.version": "3.1.10-alpha.2", - "validator.redis.version": "3.1.10-alpha.2", + "version": "3.1.9", + "validator.version": "3.1.9", + "validator.redis.version": "3.1.9", "type": "package", "neuron": "validator", "component": "redis", diff --git a/subvortex/validator/redis/metadata.json b/subvortex/validator/redis/metadata.json index f8e967ec..bccb3aef 100644 --- a/subvortex/validator/redis/metadata.json +++ b/subvortex/validator/redis/metadata.json @@ -1,9 +1,9 @@ { "id": "validator-redis", "name": "subvortex-validator-redis", - "version": "3.1.10-alpha.2", - "validator.version": "3.1.10-alpha.2", - "validator.redis.version": "3.1.10-alpha.2", + "version": "3.1.9", + "validator.version": "3.1.9", + "validator.redis.version": "3.1.9", "migration_type": "redis", "migration": "./migrations/versions", "depends_on": [] diff --git a/subvortex/validator/redis/version.py b/subvortex/validator/redis/version.py index bcc2ceb5..fd53987b 100644 --- a/subvortex/validator/redis/version.py +++ b/subvortex/validator/redis/version.py @@ -1 +1 @@ -__version__ = "3.1.10-alpha.2" \ No newline at end of file +__version__ = "3.1.9" \ No newline at end of file diff --git a/subvortex/validator/version.py b/subvortex/validator/version.py index bcc2ceb5..fd53987b 100644 --- a/subvortex/validator/version.py +++ b/subvortex/validator/version.py @@ -1 +1 @@ -__version__ = "3.1.10-alpha.2" \ No newline at end of file +__version__ = "3.1.9" \ No newline at end of file From ea678677b5733b6552c9d1e293778078eb024f5d Mon Sep 17 00:00:00 2001 From: eclipsevortex Date: Mon, 8 Sep 2025 06:20:19 -0400 Subject: [PATCH 10/10] simplify few things --- subvortex/validator/neuron/src/challenge.py | 28 +++++---------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/subvortex/validator/neuron/src/challenge.py b/subvortex/validator/neuron/src/challenge.py index 2e713fce..697a081f 100644 --- a/subvortex/validator/neuron/src/challenge.py +++ b/subvortex/validator/neuron/src/challenge.py @@ -250,27 +250,13 @@ async def create_subtensor_challenge(subtensor: btcs.Subtensor): params=[f"NeuronInfoRuntimeApi_get_neuron_lite", params, block_hash], ) - # Get the result - value = response.get("result") - # Decode the result - try: - result = decode(substrate=subtensor.substrate, result=response.get("result")) - except Exception as ex: - btul.logging.error(f"Failed to decode challenge creation result: {ex}") - return None + result = decode(substrate=subtensor.substrate, result=response.get("result")) # Get the property value - try: - property_value = result.get(property_name) - if property_value is None: - btul.logging.error(f"Property '{property_name}' not found in result. Available: {list(result.keys())}") - return None - except Exception as ex: - btul.logging.error(f"Failed to extract property '{property_name}': {ex}") - return None + propert_value = result.get(property_name) - return (block_hash, params, value, property_name, property_value, result) + return (block_hash, params, property_name, propert_value) except Exception as err: btul.logging.warning(f"Could not create the challenge: {err}") @@ -326,9 +312,7 @@ def challenge_subtensor( for attempt in range(max_retries): try: # Get the details of the challenge - block_hash, params, value, property_name, property_value, final_value = ( - challenge - ) + block_hash, params, property_name, property_value = challenge # Add small delay between retries if attempt > 0: @@ -379,7 +363,7 @@ def challenge_subtensor( ], } ) - + try: # Send request ws.send(data) @@ -561,7 +545,7 @@ async def challenge_data(self, block: int): return btul.logging.debug( - f"[{CHALLENGE_NAME}] Challenge created - Block: {challenge[0]}, Params: {challenge[1]}, Value: {challenge[2]}" + f"[{CHALLENGE_NAME}] Challenge created - Block: {challenge[0]}, Params: {challenge[1]}, Name: {challenge[2]}, Value: {challenge[3]}" ) # Select the miners