force_unreserve
Call v101 → current #5Unreserves balance from an account (root only).
View calls on chainCall Workflow
This diagram shows the call execution flow: starting with force_unreserve, passing through validation
(signature, nonce, mortality, fee payment), then pre-dispatch checks, followed by dispatch which emits events: Unreserved and modifies storage: Account, and finally post-dispatch where ExtrinsicSuccess is emitted and fees are settled.
Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.
Click items to navigate. Pan and zoom to explore.
Used by: validators
The Big Picture
Reserved balance is locked for specific purposes (deposits, holds). This root-only call can forcibly release reserves without the normal release conditions being met.
Use Cases
- Releasing stuck reserves
- Emergency recovery
- Fixing broken reserve states
From Chain Metadata
Unreserve some balance from a user by force. Can only be called by ROOT.
Input Parameters
| # | Name | Type | Description |
|---|---|---|---|
| 0 | who | MultiAddress AccountIdLookupOf<T> | who: Account address as a lookup source (typically resolves to AccountId) |
| 1 | amount | u64 T::Balance | amount: Balance in chain native currency (RAO for TAO; ÷10⁹) (RAO -> TAO (/ 10^9)) |
Permissions
Origin
Unknown
Required Role
Permission data inferred from metadata. May be incomplete.
Requirements
- Caller is root account
- Target account has reserved balance
Effects
Events Emitted
Storage Modified
Postconditions
- Reserved balance moved to free balance
- Unreserved event emitted
Side Effects
- May unreserve less than requested if insufficient reserved balance
Code Examples
// ----------------------------------------------------------------------
// HEADS UP: 1 arg below has a complex type with no usable default.
// Look for `undefined as any` and replace it with real value
// before running — the snippet compiles, but will fail at runtime as-is.
// ----------------------------------------------------------------------
import { createClient, Binary } from "polkadot-api";
import { getWsProvider } from "polkadot-api/ws";
import { sub } from "@polkadot-api/descriptors"; // generated by: npx papi add sub -w wss://entrypoint-finney.opentensor.ai:443
const client = createClient(getWsProvider("wss://entrypoint-finney.opentensor.ai:443"));
const api = client.getTypedApi(sub);
// Build force_unreserve call (typed, named args)
const who = undefined as any /* MultiAddress — replace with real value */;
const amount = 1_000_000_000n;
const tx = api.tx.Balances.force_unreserve({
who,
amount,
});Runtime Info
- Pallet Index
- 5
- Call Index
- 5
- First Version
- v101
- Current Version
- v411