MaxDelegateTake

Storage Plain v195 → v411

Maximum allowed delegate take rate.

Explore chain
Queried by: validatorsdelegatorsdevelopersanalytics

The Big Picture

The protocol limits validator commissions. MaxDelegateTake prevents validators from charging unreasonable fees. This protects the delegation market - without caps, validators could charge 99% leaving almost nothing for delegators.

Why This Matters

Starting a validator? Your take rate can't exceed this maximum. Protects delegators from predatory fees and ensures competitive delegation market.

Example Scenario

Query MaxDelegateTake() returns 1800 (18%). No validator can charge more than 18% take. Attempting to set higher will fail.

Common Questions

Can this change?
It's a protocol parameter. Changes would require governance approval as it affects all validators and delegators.
Why 18% (or whatever the current value)?
Balances validator compensation with delegator returns. Low enough to attract delegators, high enough to compensate validator operations.

Use Cases

  • Check maximum allowed take when becoming a delegate
  • Build UI sliders with correct max bounds
  • Verify validator take rates are within protocol limits
  • Compare take rate headroom for validators
  • Research delegation economics

From Chain Metadata

ITEM ( default_delegate_take )

Purpose & Usage

Purpose

Cap on how much delegates can charge - protects delegators from excessive fees.

Common Query Patterns

  • Single value query
  • Verify take rate is within bounds
  • Build take rate pickers with correct limits

Notes

  • Value is in basis points

Stored Value

default_delegate_take (u16)

Code Examples

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);

// Query MaxDelegateTake storage (no keys - plain value)
const result = await api.query.SubtensorModule.MaxDelegateTake.getValue();
console.log("MaxDelegateTake:", result);

Version History

v195 block 3,791,350 Added
v220–v232 · runtime versions skipped on chain (never deployed)
v233 block 4,920,350 Internal re-bind
v278–v289 · runtime versions skipped on chain (never deployed)
v290 block 5,947,548 Internal re-bind Current

Runtime Info

View Source
Pallet
SubtensorModule
Storage Kind
Plain
First Version
v195
Current Version
v411