Setting Weights
Setting weights is a crucial part of the Bittensor network’s consensus mechanism. With Fiber, it’s very easy, and works using just one function:
def set_node_weights( substrate_interface: SubstrateInterface, keypair: Keypair, node_ids: list[int], node_weights: list[float], netuid: int, validator_node_id: int, version_key: int = 0, wait_for_inclusion: bool = False, wait_for_finalization: bool = False, max_attempts: int = 1,) -> bool: node_ids_formatted, node_weights_formatted = _normalize_and_quantize_weights(node_ids, node_weights) rpc_call = substrate_interface.compose_call( call_module="SubtensorModule", call_function="set_weights", call_params={ "dests": node_ids_formatted, "weights": node_weights_formatted, "netuid": netuid, "version_key": version_key, }, )
extrinsic_to_send = substrate_interface.create_signed_extrinsic(call=rpc_call, keypair=keypair, era={"period": 5})
weights_can_be_set = False for attempt in range(1, max_attempts + 1): if not can_set_weights(substrate_interface, netuid, validator_node_id): logger.info(logger.info(f"Skipping attempt {attempt}/{max_attempts}. Too soon to set weights. Will wait 30 secs...")) time.sleep(30) continue else: weights_can_be_set = True break
if not weights_can_be_set: logger.error("No attempt to set weightsmade. Perhaps it is too soon to set weights!") return False
logger.info("Attempting to set weights...")
success, error_message = _send_extrinsic( substrate_interface=substrate_interface, extrinsic_to_send=extrinsic_to_send, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, )
if not wait_for_finalization and not wait_for_inclusion: logger.info("Not waiting for finalization or inclusion to set weights. Returning immediately.") return success
if success: if wait_for_finalization: logger.info("✅ Successfully set weights and finalized") elif wait_for_inclusion: logger.info("✅ Successfully set weights and included") else: logger.info("✅ Successfully set weights") else: logger.error(f"❌ Failed to set weights: {error_message}")
return success