Transactions

set-weights

Set validator weights, auto-selecting plaintext or commit-reveal.

View as Markdown

The one entry point validators need for scoring miners: it conforms the weights to the subnet's hyperparameters (max-weight clip, u16 quantization, minimum weight count) and submits via whichever path the subnet runs — a plain set_weights when commit-reveal is off, or a timelock-encrypted commit (auto-revealed by the chain at the drand reveal round) when it is on. Signed by the hotkey, which must be registered on the subnet. Before signing it preflights registration and the rate limit, so those failures are caught fast with the same error the chain would return; the rate-limit error says how many blocks to wait. The chain additionally enforces checks that are not preflighted: the hotkey must hold the minimum stake to set weights, must hold a validator permit to set non-self weights (the subnet owner is exempt), and version_key must not be older than the subnet's required version. Prefer this over commit_weights/reveal_weights unless you specifically need to force one path.

SignerPalletWraps
hotkeySubtensorModuleSubtensorModule.set_mechanism_weights, SubtensorModule.commit_timelocked_mechanism_weights

Parameters

ParameterTypeRequiredDescription
netuidintegeryesSubnet whose miners the weights score.
uidsarray of integernoMiner UIDs being weighted, as a list parallel to weights. Omit when weights is given as a uid-to-weight mapping.
weightsarray of numbernoRelative weight per miner: either a JSON object mapping uid to weight, or a list parallel to uids. Values are relative, not absolute; they are clipped to the subnet's max-weight limit, normalized, and quantized before submission.
mechidintegernoMechanism index within the subnet. 0 is the default (and for most subnets the only) mechanism.
version_keyintegernoWeights version key checked against the subnet's required version. Leave 0 unless the subnet owner requires a specific value.

Address parameters (--hotkey, --coldkey, --dest, ...) accept a raw ss58 address, an address-book or proxy-book name, or a local wallet/hotkey name.

CLI

Preview with --dry-run (shows fee, effects, and policy result without submitting), then submit:

btcli tx set-weights \
  --netuid <int> --dry-run
btcli tx set-weights \
  --netuid <int> -w my_coldkey

Python

import bittensor as sub
from bittensor.wallet import Wallet

wallet = Wallet(name="my_coldkey", hotkey="my_hotkey")
intent = sub.SetWeights(netuid=1)

async with sub.Client("finney") as client:
    plan = await client.plan(intent, wallet)   # fee, effects, policy — no submission
    result = await client.execute(intent, wallet)
    if not result.success:
        print(result.error.code, result.error.remediation)

Or build it by op name, as an agent would:

await client.execute_tool("set_weights", {...}, wallet)