Transactions
set-subnet-emission-weights
Set slots of a subnet's emission weight vector (btcli `subnets emission`).
Dispatches AdminUtils.sudo_set_subnet_emission_weights for the named
slots. The signer must be the subnet's owner coldkey (root may also call
it). With renormalize the untouched owner/validator/miner slots are
rescaled so the vector still sums to one; without it the merged vector is
submitted as given. Root stakers are paid their baseline share of emission
(what they earn with the default validator share and the global TaoWeight)
off the top of the validator slot every block, whatever the subnet sets —
the pre-sign plan shows that share and what alpha validators are left
with, and lists every rule the chain would reject (including a validator
share at or below the baseline), so a bad vector is caught before signing.
Owners may change the vector once per week per subnet.
| Signer | Origin | Pallet | Wraps |
|---|---|---|---|
coldkey | subnet owner | AdminUtils | AdminUtils.sudo_set_subnet_emission_weights |
Verify
After inclusion, confirm the effect with the
subnet-emission-weights read:
btcli query subnet-emission-weights --netuid <integer> --jsonParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
netuid | integer | yes | Subnet to configure; the signer must be its owner. |
slots | array of ['integer', 'string'] | yes | Slots to set, by name or uid: 0 burn, 1 recycle, 2 owner, 3 validator, 4 miner. Omitted owner/validator/miner slots keep their current share; omitted burn/recycle are zero. |
values | array of ['integer', 'number', 'string'] | yes | New share for each slot, pairwise with slots: a 0..1 fraction (0.41), a percentage ("41%"), or raw u64 parts of 2^64-1. Rules: burn = recycle = 0; owner <= 33% (>= 18% on lease-created subnets); validator <= 50% and above root's baseline share of emission, which is paid off the top of the validator slot (see btcli subnets emission show); miner >= 33%; all five sum to exactly 1. |
renormalize | boolean | no | Keep the named slots as given and rescale the other owner/validator/miner slots proportionally so the vector sums to 1 (the miner slot absorbs rounding). Without it, the update is applied verbatim and must already sum to 1. |
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-subnet-emission-weights \
--netuid <int> \
--slots <a,b,c> \
--values <a,b,c> --dry-run
btcli tx set-subnet-emission-weights \
--netuid <int> \
--slots <a,b,c> \
--values <a,b,c> -w my_coldkeyPython
import bittensor as bt
from bittensor.wallet import Wallet
wallet = Wallet(name="my_coldkey", hotkey="my_hotkey")
intent = bt.SetSubnetEmissionWeights(netuid=1, slots=[...], values=[...])
sub = bt.Subtensor()
plan = sub.plan(intent, wallet) # fee, effects, policy — no submission
result = sub.execute(intent, wallet)
if not result.success:
print(result.error.code, result.error.remediation)(bt.Subtensor is also the async client — async with bt.Subtensor() as client:
— see The client.) Or build the intent by op name, as
an agent would:
result = sub.execute_tool("set_subnet_emission_weights", {...}, wallet)On-chain implementation
AdminUtils.sudo_set_subnet_emission_weights — pallets/admin-utils/src/lib.rs#L2695:
#[pallet::call_index(114)]
#[pallet::weight(<T as Config>::WeightInfo::sudo_set_subnet_emission_weights())]
pub fn sudo_set_subnet_emission_weights(
origin: OriginFor<T>,
netuid: NetUid,
uids: Vec<u16>,
values: Vec<u64>,
) -> DispatchResult {
let maybe_owner = pallet_subtensor::Pallet::<T>::ensure_sn_owner_or_root_with_limits(
origin,
netuid,
&[Hyperparameter::EmissionWeights.into()],
)?;
pallet_subtensor::Pallet::<T>::ensure_admin_window_open(netuid)?;
pallet_subtensor::Pallet::<T>::do_set_subnet_emission_weights(netuid, uids, values)?;
pallet_subtensor::Pallet::<T>::record_owner_rl(
maybe_owner,
netuid,
&[Hyperparameter::EmissionWeights.into()],
);
Ok(())
}Every file is browsable under /code exactly as built into the runtime, or as plain text under /code/raw/<path> (index: /code/index.json).