diff --git a/docs/guides/proxies.mdx b/docs/guides/proxies.mdx index 4b95c39e73..4572676091 100644 --- a/docs/guides/proxies.mdx +++ b/docs/guides/proxies.mdx @@ -54,7 +54,7 @@ Prefer the narrowest type that covers the job: **SmallTransfer** is the same but caps each transfer below 0.5 TAO (0.5 alpha for stake transfers). * **Staking** — stake add / remove / move / swap / unstake-all and their - limit variants, plus [`set_root_claim_type`](/code/pallets/subtensor/src/macros/dispatches.rs#L1937-L1951). Its allowlist does *not* + limit variants, plus [`set_root_claim_type`](/code/pallets/subtensor/src/macros/dispatches.rs#L1937-L1951) and [`claim_root`](/code/pallets/subtensor/src/macros/dispatches.rs#L1910-L1926). Its allowlist does *not* include [`Utility.batch_all`](/code/pallets/utility/src/lib.rs#L314-L362), so batched staking through a Staking proxy fails with `CallFiltered` — use NonTransfer for batched staking. * **Registration** — neuron registration ([`burned_register`](/code/pallets/subtensor/src/macros/dispatches.rs#L826-L832), [`register`](/code/pallets/subtensor/src/macros/dispatches.rs#L804-L814), diff --git a/runtime/src/proxy_filters/mod.rs b/runtime/src/proxy_filters/mod.rs index d0a356770d..070afe9b1d 100644 --- a/runtime/src/proxy_filters/mod.rs +++ b/runtime/src/proxy_filters/mod.rs @@ -30,8 +30,12 @@ type AdminAll = (SubnetManagementCalls, RootConfigCalls, OwnerKeyCalls); /// `Transfer`: liquid value movement. type TransferAllowed = (BalanceTransferCalls, StakeTransferCalls); -/// `Staking`: stake position management plus root-claim mode selection. -type StakingAllowed = (StakeManagementCalls, RootClaimTypeCalls); +/// `Staking`: stake position management and root-claim mode selection, plus +/// claiming the root dividends those positions accrue. Granting a staking +/// proxy is an explicit signal of trust that the proxy manages the coldkey's +/// stake, and `claim_root` can only restake the payout on root for that same +/// coldkey. +type StakingAllowed = (StakeManagementCalls, RootClaimTypeCalls, RootClaimCalls); /// `Registration`: acquire a slot (POW or by burn). type RegistrationAllowed = (PowRegistrationCalls, BurnedRegistrationCalls); @@ -475,6 +479,7 @@ mod tests { "SubtensorModule::add_collateral", "SubtensorModule::add_stake", "SubtensorModule::add_stake_limit", + "SubtensorModule::claim_root", "SubtensorModule::remove_stake", "SubtensorModule::remove_stake_limit", "SubtensorModule::remove_stake_full_limit",