Transactions

remove-proxy

Revoke one proxy delegation.

View as Markdown

The (delegate, proxy_type, delay) triple must match the original add_proxy exactly — a mismatch fails with NotFound rather than removing a different delegation. The proxy deposit reserved at add time is returned to the signer. Validate and Weights grants are revoked by the hotkey that granted them. Check current delegations with btcli query proxies.

SignerOriginPalletWraps
coldkeysigned account (pallet role may apply)ProxyProxy.remove_proxy

Parameters

ParameterTypeRequiredDescription
delegate_ss58stringyesDelegate whose authorization to revoke.
proxy_typestringnoType the delegation was granted with (must match exactly).
delayintegernoDelay the delegation was granted with (must match exactly).

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 remove-proxy \
  --delegate <ss58|name> --dry-run
btcli tx remove-proxy \
  --delegate <ss58|name> -w my_coldkey

Python

import bittensor as bt
from bittensor.wallet import Wallet

wallet = Wallet(name="my_coldkey", hotkey="my_hotkey")
intent = bt.RemoveProxy(delegate_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("remove_proxy", {...}, wallet)

On-chain implementation

Proxy.remove_proxy — pallets/proxy/src/lib.rs#L304:

#[pallet::call_index(2)]
#[pallet::weight(T::WeightInfo::remove_proxy(T::MaxProxies::get()))]
pub fn remove_proxy(
    origin: OriginFor<T>,
    delegate: AccountIdLookupOf<T>,
    proxy_type: T::ProxyType,
    delay: BlockNumberFor<T>,
) -> DispatchResult {
    let who = ensure_signed(origin)?;
    let delegate = T::Lookup::lookup(delegate)?;
    Self::remove_proxy_delegate(&who, delegate, proxy_type, delay)
}

Delegates to remove_proxy_delegate.

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