MinDelegateTake

Storage Plain v195 → v411

Minimum allowed delegate take rate.

Explore chain
Queried by: validatorsdelegatorsdevelopersanalytics

The Big Picture

Validators can't charge below this rate. This prevents a race to bottom where validators undercut each other to zero, making validation unsustainable. Ensures all validators have minimum compensation for their work.

Why This Matters

Want to attract delegators with 0% take? You can't go that low. The minimum ensures validators are compensated and can sustain operations.

Example Scenario

Query MinDelegateTake() returns 500 (5%). All validators must charge at least 5% take. Setting lower will fail.

Common Questions

Why have a minimum?
Prevents unsustainable validator operations. Running a validator costs money - hardware, bandwidth, monitoring. Zero take would attract delegators but bankrupt validators.
Does this hurt delegators?
Slightly higher fees, but ensures validators remain operational. A collapsed validator benefits no one.

Use Cases

  • Check minimum required take when becoming a delegate
  • Build UI sliders with correct min bounds
  • Understand validator compensation floors
  • Research delegation market dynamics
  • Analyze validator economics

From Chain Metadata

ITEM ( min_delegate_take )

Purpose & Usage

Purpose

Floor on delegate fees to prevent race to bottom - ensures validator sustainability.

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

min_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 MinDelegateTake storage (no keys - plain value)
const result = await api.query.SubtensorModule.MinDelegateTake.getValue();
console.log("MinDelegateTake:", 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