Transactions

set-root-claim-threshold

Set the minimum TAO payout for a root dividend claim (root only).

View as Markdown

claim_root and claim_root_with_hotkey silently skip any per-validator basket redemption whose estimated payout falls below this threshold — the shares keep accruing and pay out once they clear it. The threshold exists so dust claims cannot grind the chain with tiny swaps; the default is 500,000 rao (0.0005 TAO) and the chain caps it at 10,000,000 rao (0.01 TAO).

Requires the chain sudo key: Executor wraps the built call in Sudo.sudo because origin is root, and when root is a multisig that Sudo.sudo call is what the multisig must dispatch. Verify the effect afterwards with the root_claim_threshold read.

SignerOriginPalletWraps
coldkeyroot (chain sudo)SubtensorModuleSubtensorModule.sudo_set_root_claim_threshold, Sudo.sudo

Verify

After inclusion, confirm the effect with the root-claim-threshold read:

btcli query root-claim-threshold --json

Parameters

ParameterTypeRequiredDescription
thresholdnumber | "all"yesMinimum claim payout in TAO; per-validator redemptions estimated below it are skipped and keep accruing. At most 0.01 TAO.

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-root-claim-threshold \
  --threshold <amount|all> --dry-run
btcli tx set-root-claim-threshold \
  --threshold <amount|all> -w my_coldkey

Python

import bittensor as bt
from bittensor.wallet import Wallet

wallet = Wallet(name="my_coldkey", hotkey="my_hotkey")
intent = bt.SetRootClaimThreshold(threshold=1.0)

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_root_claim_threshold", {...}, wallet)

On-chain implementation

SubtensorModule.sudo_set_root_claim_thresholdpallets/subtensor/src/macros/dispatches.rs#L2025:

#[pallet::call_index(124)]
#[pallet::weight(<T as crate::pallet::Config>::WeightInfo::sudo_set_root_claim_threshold())]
pub fn sudo_set_root_claim_threshold(
    origin: OriginFor<T>,
    netuid: NetUid,
    new_value: u64,
) -> DispatchResult {
    Self::ensure_subnet_owner_or_root(origin, netuid)?;

    // Claims only ever consult the ROOT entry; accepting other netuids would silently
    // store an inert value.
    ensure!(netuid.is_root(), Error::<T>::InvalidRootClaimThreshold);

    ensure!(
        new_value <= I96F32::from(MAX_ROOT_CLAIM_THRESHOLD),
        Error::<T>::InvalidRootClaimThreshold
    );

    RootClaimableThreshold::<T>::set(netuid, new_value.into());

    Ok(())
}

Delegates to ensure_subnet_owner_or_root.

Sudo.sudo is implemented by Substrate's pallet_sudo, outside this repository's pallets.

Every file is browsable under /code exactly as built into the runtime, or as plain text under /code/raw/<path> (index: /code/index.json).