AlphaDividendsPerSubnet

Storage Map Event-driven v233 → v411

Alpha dividends per hotkey per subnet at the last tempo firing.

Explore chain
Queried by: validatorsdelegatorsanalytics

The Big Picture

Validators earn dividends for their consensus work. AlphaDividendsPerSubnet records how much each validator earned (in alpha) at the last epoch. Delegators share in these dividends proportional to their stake, minus the validator's take.

Why This Matters

How much did this validator earn? AlphaDividendsPerSubnet shows their alpha earnings. This directly affects delegator returns - more dividends = more to share.

Example Scenario

Query AlphaDividendsPerSubnet(netuid=1, hotkey=validator_X) returns 100000000000 (100B alpha units). This validator earned 100B alpha in dividends at the last epoch.

Common Questions

How does this become delegator earnings?
Validator keeps their 'take' percentage. Remaining dividends go to delegators proportional to stake. Your earnings = (dividends × (1 - take)) × (your stake / total validator stake).
Why alpha instead of TAO?
Dividends are distributed in the subnet's native unit (alpha). Alpha can be converted to TAO via the AMM when unstaking.

Use Cases

  • Check validator dividend earnings on a subnet
  • Compare validator performance by dividends
  • Calculate delegator returns from validator earnings
  • Build validator profitability dashboards
  • Research dividend distribution patterns

From Chain Metadata

DMAP ( netuid, hotkey ) --> u64 | Last alpha dividend this hotkey got on tempo.

Purpose & Usage

Purpose

Track dividend allocation at epoch - how much each validator earned in alpha terms.

Common Query Patterns

  • Query by netuid-hotkey
  • Calculate validator earnings
  • Build dividend leaderboards

Query Keys

#NameTypeDescription
1
netuid netuid
u16 netuid (u16, hashed key component)
2
hotkey hotkey
AccountId hotkey (AccountId, hashed key component) (hex -> SS58)

Stored Value

u64 (u64)

Decoding the value

AlphaBalance (u64)

Bare u64 RAO-like alpha amount (NOT a SafeFloat / FixedU128 wrapper). Direct integer.

Common bug
Indexers who built generic .bits extractors for the V2 storage family wrongly apply them here and get undefined. This is plain u64.
value as bigint

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 AlphaDividendsPerSubnet storage
const netuid = 1;
const hotkey = "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY";

const result = await api.query.SubtensorModule.AlphaDividendsPerSubnet.getValue(netuid, hotkey);
console.log("AlphaDividendsPerSubnet:", result);

Version History

v233 block 4,920,350 Added
v235–v237 · runtime versions skipped on chain (never deployed)
v238 block 4,936,550 Internal re-bind
v266–v272 · runtime versions skipped on chain (never deployed)
v273 block 5,659,032 Internal re-bind
v275–v275 · runtime versions skipped on chain (never deployed)
v276 block 5,781,672 Internal re-bind
v278–v289 · runtime versions skipped on chain (never deployed)
v290 block 5,947,548 Internal re-bind
v307–v314 · runtime versions skipped on chain (never deployed)
v315 block 6,414,634 Internal re-bind
v316–v319 · runtime versions skipped on chain (never deployed)
v320 block 6,523,566 Internal re-bind
v327–v333 · runtime versions skipped on chain (never deployed)
v334 block 6,811,690 Internal re-bind
v353–v360 · runtime versions skipped on chain (never deployed)
v361 block 7,063,679 Internal re-bind
v386–v390 · runtime versions skipped on chain (never deployed)
v391 block 7,782,857 Internal re-bind
v394–v400 · runtime versions skipped on chain (never deployed)
v401 block 8,036,576 Internal re-bind Current

Runtime Info

View Source
Pallet
SubtensorModule
Storage Kind
Map
First Version
v233
Current Version
v411
Update Pattern
overwritten-at-event (subnet tempo fires for `netuid`)
Population
sparse-by-value (~36,154 entries)