11import datetime
22from contextlib import contextmanager
3+ from ipaddress import IPv4Address
34from unittest import mock
45from unittest .mock import patch
56
910from compute_horde .test_wallet import get_test_validator_wallet
1011from compute_horde_core .executor_class import ExecutorClass
1112from pydantic import BaseModel
13+ from pylon .v1 import AxonInfo , AxonProtocol , Neuron , Stakes
1214from turbobt .subtensor .runtime .subnet_info import SubnetHyperparams
1315
1416from compute_horde_validator .validator .allowance .types import MetagraphData , ValidatorModel
@@ -180,7 +182,37 @@ def manifest_responses(block_number) -> list[tuple[str, str | BaseModel, float]]
180182 ]
181183
182184
183- def _make_neuron (uid , key , stake , is_miner : bool , is_shielded ) -> turbobt .Neuron :
185+ def _make_neuron (uid , key , stake , is_miner : bool ) -> Neuron :
186+ if not is_miner :
187+ ip = IPv4Address ("0.0.0.0" )
188+ else :
189+ ip = IPv4Address (f"192.168.1.{ uid % 256 } " )
190+ return Neuron (
191+ uid = uid ,
192+ coldkey = key ,
193+ hotkey = key ,
194+ active = True ,
195+ axon_info = AxonInfo (
196+ ip = ip ,
197+ port = 8000 + uid if is_miner else 0 ,
198+ protocol = AxonProtocol .HTTP ,
199+ ),
200+ stake = stake ,
201+ rank = 0.0 ,
202+ emission = 0.0 ,
203+ incentive = 0.0 ,
204+ consensus = 0.0 ,
205+ trust = 0.0 ,
206+ validator_trust = 0.0 ,
207+ dividends = 0.0 ,
208+ last_update = 0 ,
209+ validator_permit = False ,
210+ pruning_score = 0 ,
211+ stakes = Stakes (alpha = 0.0 , tao = stake , total = stake ),
212+ )
213+
214+
215+ def _make_turbobt_neuron (uid , key , stake , is_miner : bool , is_shielded ) -> turbobt .Neuron :
184216 return turbobt .Neuron (
185217 subnet = mock .MagicMock (),
186218 uid = uid ,
@@ -230,18 +262,14 @@ def stake(block_number: int, ind: int, hotkey: str) -> float:
230262 return float (stake )
231263
232264
233- def list_validators (block_number : int , filter_ = True ) -> list [turbobt . Neuron ]:
265+ def list_validators (block_number : int , filter_ = True ) -> list [Neuron ]:
234266 assert block_number >= START_BLOCK
235267 return list (
236268 filter (
237269 (lambda n : n .stake >= 1000 ) if filter_ else lambda n : True ,
238270 [
239271 _make_neuron (
240- ind + NUM_MINERS ,
241- hotkey ,
242- stake = stake (block_number , ind , hotkey ),
243- is_miner = False ,
244- is_shielded = False ,
272+ ind + NUM_MINERS , hotkey , stake = stake (block_number , ind , hotkey ), is_miner = False
245273 )
246274 for ind , hotkey in VALIDATOR_HOTKEYS .items ()
247275 if (
@@ -254,7 +282,7 @@ def list_validators(block_number: int, filter_=True) -> list[turbobt.Neuron]:
254282 )
255283
256284
257- def list_neurons (block_number : int , with_shield : bool ) -> list [turbobt . Neuron ]:
285+ def list_neurons (block_number : int , with_shield : bool ) -> list [Neuron ]:
258286 assert block_number >= START_BLOCK
259287 return [
260288 * [
@@ -263,7 +291,6 @@ def list_neurons(block_number: int, with_shield: bool) -> list[turbobt.Neuron]:
263291 hotkey ,
264292 stake = float (ind ),
265293 is_miner = True ,
266- is_shielded = bool (ind % 2 ) if with_shield else False ,
267294 )
268295 for ind , hotkey in MINER_HOTKEYS .items ()
269296 if (
@@ -276,6 +303,38 @@ def list_neurons(block_number: int, with_shield: bool) -> list[turbobt.Neuron]:
276303 ]
277304
278305
306+ def list_turbobt_neurons (block_number : int , with_shield : bool ) -> list [turbobt .Neuron ]:
307+ assert block_number >= START_BLOCK
308+ validators = list_validators (block_number , filter_ = False )
309+ return [
310+ * [
311+ _make_turbobt_neuron (
312+ ind ,
313+ hotkey ,
314+ stake = float (ind ),
315+ is_miner = True ,
316+ is_shielded = bool (ind % 2 ) if with_shield else False ,
317+ )
318+ for ind , hotkey in MINER_HOTKEYS .items ()
319+ if (
320+ block_number < START_CHANGING_MANIFESTS_BLOCK
321+ or not hotkey .startswith ("deregging_miner_" )
322+ or block_number % 5
323+ )
324+ ],
325+ * [
326+ _make_turbobt_neuron (
327+ v .uid ,
328+ v .hotkey ,
329+ stake = v .stake ,
330+ is_miner = False ,
331+ is_shielded = False ,
332+ )
333+ for v in validators
334+ ],
335+ ]
336+
337+
279338def get_block_timestamp (block_number ):
280339 base_time = datetime .datetime (2024 , 1 , 1 , 12 , 0 , 0 , tzinfo = datetime .UTC )
281340 return base_time + datetime .timedelta (
@@ -300,7 +359,7 @@ def get_current_block(self):
300359 return self .block_number
301360
302361 def get_shielded_neurons (self ):
303- return list_neurons (block_number_ , with_shield = False )
362+ return list_turbobt_neurons (block_number_ , with_shield = False )
304363
305364 def list_neurons (self , block_number ):
306365 return list_neurons (block_number , with_shield = False )
0 commit comments