From b4e1f4419629416dc6475f137dc752af0c34a32f Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 7 Feb 2025 13:42:50 -0800 Subject: [PATCH 1/7] fix type annotation --- bittensor/core/extrinsics/serving.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bittensor/core/extrinsics/serving.py b/bittensor/core/extrinsics/serving.py index 9bdbecc2dc..c5e3f96ee5 100644 --- a/bittensor/core/extrinsics/serving.py +++ b/bittensor/core/extrinsics/serving.py @@ -283,7 +283,7 @@ def publish_metadata( def get_metadata( subtensor: "Subtensor", netuid: int, hotkey: str, block: Optional[int] = None -) -> str: +) -> bytes: """Fetches metadata from the blockchain for a given hotkey and netuid.""" commit_data = subtensor.substrate.query( module="Commitments", From d1c2f8bc6232a7275c83b378fa73917fab7949a4 Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 7 Feb 2025 13:43:19 -0800 Subject: [PATCH 2/7] add extra fields --- bittensor/core/chain_data/info_base.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bittensor/core/chain_data/info_base.py b/bittensor/core/chain_data/info_base.py index 1b17f068b3..2912bde68e 100644 --- a/bittensor/core/chain_data/info_base.py +++ b/bittensor/core/chain_data/info_base.py @@ -1,4 +1,4 @@ -from dataclasses import dataclass +from dataclasses import dataclass, fields from typing import Any, TypeVar from bittensor.core.errors import SubstrateRequestException @@ -13,7 +13,13 @@ class InfoBase: @classmethod def from_dict(cls, decoded: dict) -> T: try: - return cls._from_dict(decoded) + class_fields = {f.name for f in fields(cls)} + extra_keys = decoded.keys() - class_fields + instance = cls._from_dict( + {k: v for k, v in decoded.items() if k in class_fields} + ) + [setattr(instance, k, decoded[k]) for k in extra_keys] + return instance except KeyError as e: raise SubstrateRequestException( f"The {cls} structure is missing {e} from the chain.", From 66184af65ff15252668941fe8f21a81977c6da0f Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 7 Feb 2025 13:43:33 -0800 Subject: [PATCH 3/7] update `fixed_to_float` --- bittensor/utils/balance.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/bittensor/utils/balance.py b/bittensor/utils/balance.py index c49be249ed..29ce2faeaa 100644 --- a/bittensor/utils/balance.py +++ b/bittensor/utils/balance.py @@ -285,16 +285,18 @@ class FixedPoint(TypedDict): bits: int -def fixed_to_float(fixed: Union[FixedPoint, ScaleType]) -> float: - # Currently this is stored as a U64F64 +def fixed_to_float( + fixed: Union[FixedPoint, ScaleType], frac_bits: int = 64, total_bits: int = 128 +) -> float: + # By default, this is a U64F64 # which is 64 bits of integer and 64 bits of fractional - frac_bits = 64 data: int = fixed["bits"] - # Shift bits to extract integer part (assuming 64 bits for integer part) - integer_part = data >> frac_bits + # Logical and to get the fractional part; remaining is the integer part fractional_part = data & (2**frac_bits - 1) + # Shift to get the integer part from the remaining bits + integer_part = data >> (total_bits - frac_bits) frac_float = fractional_part / (2**frac_bits) From 5070480fb90d3823045dea5d984cb673109801c6 Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 7 Feb 2025 13:44:24 -0800 Subject: [PATCH 4/7] add field `MetagraphInfoEmissions.moving_price` --- bittensor/core/chain_data/metagraph_info.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bittensor/core/chain_data/metagraph_info.py b/bittensor/core/chain_data/metagraph_info.py index 580d0b7fa2..21fafa275c 100644 --- a/bittensor/core/chain_data/metagraph_info.py +++ b/bittensor/core/chain_data/metagraph_info.py @@ -7,7 +7,7 @@ from bittensor.core.chain_data.subnet_identity import SubnetIdentity from bittensor.core.chain_data.utils import decode_account_id from bittensor.utils import u64_normalized_float as u64tf, u16_normalized_float as u16tf -from bittensor.utils.balance import Balance +from bittensor.utils.balance import Balance, fixed_to_float # to balance with unit (just shortcut) @@ -68,6 +68,7 @@ class MetagraphInfo(InfoBase): pending_alpha_emission: Balance # pending alpha to be distributed pending_root_emission: Balance # pending tao for root divs to be distributed subnet_volume: Balance # volume of the subnet in TAO + moving_price: Balance # subnet moving price. # Hparams for epoch rho: int # subnet rho param @@ -168,6 +169,7 @@ def _from_dict(cls, decoded: dict) -> "MetagraphInfo": ) decoded["pending_root_emission"] = _tbwu(decoded["pending_root_emission"]) decoded["subnet_volume"] = _tbwu(decoded["subnet_volume"], _netuid) + decoded["moving_price"] = fixed_to_float(decoded.get("moving_price"), 32) # Hparams for epoch decoded["kappa"] = u16tf(decoded["kappa"]) @@ -233,6 +235,7 @@ class MetagraphInfoEmissions: tao_in_emission: float pending_alpha_emission: float pending_root_emission: float + moving_price: float @dataclass From b82b67f13600ecbb4c6db9a90a3c615fd0b75d73 Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 7 Feb 2025 13:52:14 -0800 Subject: [PATCH 5/7] update field `MetagraphInfoEmissions.moving_price` --- bittensor/core/chain_data/metagraph_info.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bittensor/core/chain_data/metagraph_info.py b/bittensor/core/chain_data/metagraph_info.py index 21fafa275c..2254142da2 100644 --- a/bittensor/core/chain_data/metagraph_info.py +++ b/bittensor/core/chain_data/metagraph_info.py @@ -169,7 +169,9 @@ def _from_dict(cls, decoded: dict) -> "MetagraphInfo": ) decoded["pending_root_emission"] = _tbwu(decoded["pending_root_emission"]) decoded["subnet_volume"] = _tbwu(decoded["subnet_volume"], _netuid) - decoded["moving_price"] = fixed_to_float(decoded.get("moving_price"), 32) + decoded["moving_price"] = Balance.from_tao( + fixed_to_float(decoded.get("moving_price"), 32) + ) # Hparams for epoch decoded["kappa"] = u16tf(decoded["kappa"]) From e71030b69eb3004b85b0ab05acbae89f4aaaa0c9 Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 7 Feb 2025 13:52:41 -0800 Subject: [PATCH 6/7] update `Metagraph.emissions` with `moving_price` --- bittensor/core/metagraph.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bittensor/core/metagraph.py b/bittensor/core/metagraph.py index accec5668d..b7c5681d6a 100644 --- a/bittensor/core/metagraph.py +++ b/bittensor/core/metagraph.py @@ -997,6 +997,7 @@ def _apply_metagraph_info_mixin(self, metagraph_info: "MetagraphInfo"): tao_in_emission=metagraph_info.tao_in_emission.tao, pending_alpha_emission=metagraph_info.pending_alpha_emission.tao, pending_root_emission=metagraph_info.pending_root_emission.tao, + moving_price=metagraph_info.moving_price.tao, ) From 3421afe8138fac6c0bf2eb7cbafe1130aa44b108 Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 7 Feb 2025 14:04:44 -0800 Subject: [PATCH 7/7] move `moving_price` to `Metagraph.pool` --- bittensor/core/chain_data/metagraph_info.py | 2 +- bittensor/core/metagraph.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bittensor/core/chain_data/metagraph_info.py b/bittensor/core/chain_data/metagraph_info.py index 2254142da2..67aabd7c57 100644 --- a/bittensor/core/chain_data/metagraph_info.py +++ b/bittensor/core/chain_data/metagraph_info.py @@ -237,7 +237,6 @@ class MetagraphInfoEmissions: tao_in_emission: float pending_alpha_emission: float pending_root_emission: float - moving_price: float @dataclass @@ -248,6 +247,7 @@ class MetagraphInfoPool: alpha_in: float tao_in: float subnet_volume: float + moving_price: float @dataclass diff --git a/bittensor/core/metagraph.py b/bittensor/core/metagraph.py index b7c5681d6a..a57a9e4507 100644 --- a/bittensor/core/metagraph.py +++ b/bittensor/core/metagraph.py @@ -989,6 +989,7 @@ def _apply_metagraph_info_mixin(self, metagraph_info: "MetagraphInfo"): alpha_in=metagraph_info.alpha_in.tao, tao_in=metagraph_info.tao_in.tao, subnet_volume=metagraph_info.subnet_volume.tao, + moving_price=metagraph_info.moving_price.tao, ) self.emissions = MetagraphInfoEmissions( alpha_out_emission=metagraph_info.alpha_out_emission.tao, @@ -997,7 +998,6 @@ def _apply_metagraph_info_mixin(self, metagraph_info: "MetagraphInfo"): tao_in_emission=metagraph_info.tao_in_emission.tao, pending_alpha_emission=metagraph_info.pending_alpha_emission.tao, pending_root_emission=metagraph_info.pending_root_emission.tao, - moving_price=metagraph_info.moving_price.tao, )