Transactions
claim-root-with-hotkey
Redeem accrued root dividends (basket shares) for one validator.
Redeems the signing coldkey's owed shares on the given validator only:
that basket pays out pro-rata (subnet alpha holdings are sold to TAO at
the current pool price) and the proceeds are staked back to root on the
same validator. Other validators' accrued yield is left untouched.
Claims whose estimated payout is below the chain's claim threshold
(see root_claim_threshold) are silently skipped and keep accruing.
Orphaned dust holdings in the basket (subnets outside the validator's
current weight vector, worth less than the same threshold) are
consolidated into the fund's root (TAO) slot as a side effect, so the
per-holding claim fee shrinks over time; curated positions are left to
compound. The transaction fee is charged by work actually done:
holdings redeemed pay full weight, holdings merely scanned pay a small
per-row cost.
Preview per-validator payouts with root_basket_owed_breakdown.
| Signer | Origin | Pallet | Wraps |
|---|---|---|---|
coldkey | signed account (pallet role may apply) | SubtensorModule | SubtensorModule.claim_root_with_hotkey |
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
hotkey_ss58 | string | yes | Validator whose accrued basket yield to claim. |
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 claim-root-with-hotkey \
--hotkey <ss58|name> --dry-run
btcli tx claim-root-with-hotkey \
--hotkey <ss58|name> -w my_coldkeyPython
import bittensor as bt
from bittensor.wallet import Wallet
wallet = Wallet(name="my_coldkey", hotkey="my_hotkey")
intent = bt.ClaimRootWithHotkey(hotkey_ss58="5F...")
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("claim_root_with_hotkey", {...}, wallet)On-chain implementation
SubtensorModule.claim_root_with_hotkey — pallets/subtensor/src/macros/dispatches.rs#L1958:
#[pallet::call_index(148)]
#[pallet::weight(
<T as crate::pallet::Config>::WeightInfo::claim_root(MAX_ROOT_CLAIM_WORK)
)]
pub fn claim_root_with_hotkey(
origin: OriginFor<T>,
hotkey: T::AccountId,
) -> DispatchResultWithPostInfo {
let coldkey: T::AccountId = ensure_signed(origin)?;
let outcome = Self::do_root_claim(coldkey.clone(), vec![hotkey])?;
Self::maybe_add_coldkey_index(&coldkey);
let weight = Self::root_claim_actual_weight(1, &outcome);
Ok((Some(weight), Pays::Yes).into())
}Delegates to do_root_claim, maybe_add_coldkey_index, root_claim_actual_weight.
Every file is browsable under /code exactly as built into the runtime, or as plain text under /code/raw/<path> (index: /code/index.json).