Skip to content

Commit 21d4ff3

Browse files
feat: Use Pylon client in validator to fetch neurons and commitments
Validator now uses Pylon client to fetch neurons and commitments. Impacts: validator Issue: COM-803
1 parent 9d117a3 commit 21d4ff3

File tree

8 files changed

+118
-208
lines changed

8 files changed

+118
-208
lines changed

validator/app/src/compute_horde_validator/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -653,7 +653,7 @@ def wrapped(*args, **kwargs):
653653
},
654654
"root": {
655655
"handlers": ["console"],
656-
"level": "DEBUG",
656+
"level": env.str("ROOT_LOGGER_LEVEL", "DEBUG"),
657657
},
658658
"loggers": {
659659
"django": {

validator/app/src/compute_horde_validator/validator/allowance/tests/mockchain.py

Lines changed: 69 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import datetime
22
from contextlib import contextmanager
3+
from ipaddress import IPv4Address
34
from unittest import mock
45
from unittest.mock import patch
56

@@ -9,6 +10,7 @@
910
from compute_horde.test_wallet import get_test_validator_wallet
1011
from compute_horde_core.executor_class import ExecutorClass
1112
from pydantic import BaseModel
13+
from pylon.v1 import AxonInfo, AxonProtocol, Neuron, Stakes
1214
from turbobt.subtensor.runtime.subnet_info import SubnetHyperparams
1315

1416
from 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+
279338
def 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)

validator/app/src/compute_horde_validator/validator/allowance/tests/test_precaching_supertensor.py

Lines changed: 0 additions & 110 deletions
This file was deleted.

validator/app/src/compute_horde_validator/validator/allowance/utils/blocks.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
from collections.abc import Callable
33
from typing import Any, cast
44

5-
import turbobt
65
from celery.utils.log import get_task_logger
76
from compute_horde_core.executor_class import ExecutorClass
87
from django.db import IntegrityError, transaction
98
from django.db.models import Case, Exists, Max, Min, OuterRef, Q, Sum, When
9+
from pylon.v1 import Neuron
1010

1111
from compute_horde_validator.validator.dynamic_config import get_config
1212
from compute_horde_validator.validator.locks import Lock, LockType
@@ -109,7 +109,7 @@ def get_stake_share(
109109
return validator.effective_stake / total_stake_sum
110110

111111

112-
def save_neurons(neurons: list[turbobt.Neuron], block: int):
112+
def save_neurons(neurons: list[Neuron], block: int):
113113
NeuronModel.objects.bulk_create(
114114
[
115115
NeuronModel(

0 commit comments

Comments
 (0)