Queried by: validatorsminerssubnet ownersdevelopersanalytics
The Big Picture
Tempo determines how often a subnet 'ticks' - running Yuma Consensus and distributing emissions. A tempo of 100 blocks means every ~100 blocks (~20 minutes), the subnet evaluates all weights, calculates scores, and pays out rewards. Faster tempo = more frequent updates but higher compute cost.
Why This Matters
When does your next payout arrive? How often should you update weights? Tempo answers these questions. It's the heartbeat of each subnet - the rhythm of evaluation and reward.
Example Scenario
Query Tempo(netuid=1) returns 100. Every 100 blocks (~200 seconds at 2s/block), subnet 1 runs consensus and distributes emissions. Weight updates matter once per tempo.
Common Questions
- What's a typical tempo?
- Common values range from 50-360 blocks (100 seconds to 12 minutes). Root network (netuid 0) often has a longer tempo than application subnets.
- Can subnet owners change tempo?
- Yes, subnet owners can adjust tempo within protocol limits. This is a key hyperparameter for tuning subnet economics.
- Does tempo affect earnings?
- The emission rate per tempo is adjusted so total emissions over time stay constant. Faster tempo means smaller but more frequent payouts; slower tempo means larger but less frequent payouts.
- How does tempo relate to weight updates?
- Weights are evaluated at each tempo. Updating weights multiple times per tempo is wasteful - only the state at tempo boundary matters for that epoch's consensus.
Use Cases
- Calculate expected emission timing
- Optimize weight update frequency
- Plan validator operations around tempo
- Compare subnet activity levels
- Build epoch countdown timers
Purpose & Usage
Purpose
Control emission frequency - how often the subnet runs consensus and distributes rewards.
Common Query Patterns
- Query by netuid for a specific subnet
- Compare tempo across subnets
- Plan operations around emission timing
Query Keys
| # | Name | Type | Description |
|---|---|---|---|
| 1 | key1 | u16 | key1 (u16) |
Stored Value
value (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 Tempo storage
const key1 = 0;
const result = await api.query
[stringCamelCase("SubtensorModule")]
[stringCamelCase("Tempo")](
key1
);
console.log("Tempo:", result.toHuman());Runtime Info
View Source- Pallet
- SubtensorModule
- Storage Kind
- Map
- First Version
- v101
- Current Version
- v393