The Big Picture
Subnets have limited slots (MaxAllowedUids). When full, new registrations must replace existing neurons. PruningScore determines who gets replaced - the lowest score gets pruned. This creates constant competition: perform or lose your slot. It's network Darwinism in action.
Why This Matters
Your registration isn't permanent. If your PruningScore drops too low, someone else can take your slot. This score tells you how safe you are - and who else might be vulnerable.
Example Scenario
Query PruningScores(netuid=1, uid=47) returns 0.15 (normalized). Compare to others on the subnet. If you're in the bottom 10%, you're at risk when new registrations arrive. Score of 0.001 = imminent danger.
Common Questions
- What's a safe pruning score?
- Relative to others on the subnet. Being in the top 50% is generally safe. Bottom 10% is danger zone.
- How do I improve my pruning score?
- Pruning score is derived from your performance metrics (incentive/dividends). Better performance = higher score = safer.
- What about immunity period?
- New neurons have an immunity period during which they can't be pruned. Check ImmunityPeriod and BlockAtRegistration to see if you're still protected.
- Can I see who might be pruned?
- Iterate PruningScores for all UIDs and sort ascending. The lowest scores are next to go.
Use Cases
- Check if your neuron is at risk of being pruned
- Monitor competition - who might lose their slot
- Build alerts for low pruning scores
- Analyze subnet health and competition dynamics
- Plan registration timing based on weak slots
Purpose & Usage
Purpose
Track neurons at risk of deregistration - lower scores mean higher pruning risk.
Common Query Patterns
- Query by netuid-uid for a specific neuron
- Iterate all to find neurons at risk
- Monitor score changes to predict pruning
Query Keys
| # | Name | Type | Description |
|---|---|---|---|
| 1 | key1 | u16 | key1 (u16) |
Stored Value
value (Vec<u16>)
Relationships
Modified By
Related Events
Code Examples
import { ApiPromise, WsProvider } from "@polkadot/api";
import { stringCamelCase } from "@polkadot/util";
const provider = new WsProvider("wss://entrypoint-finney.opentensor.ai:443");
const api = await ApiPromise.create({ provider });
// Query PruningScores storage
const key1 = 0;
const result = await api.query
[stringCamelCase("SubtensorModule")]
[stringCamelCase("PruningScores")](
key1
);
console.log("PruningScores:", result.toHuman());On-Chain Activity
100K–1M estimated writes
#37 most written storage item
Modified by both user extrinsics and runtime hooks
As of block 7,429,232
Runtime Info
View Source- Pallet
- SubtensorModule
- Storage Kind
- Map
- First Version
- v101
- Current Version
- v393