The submit loop
The submit loop callssubmit_latest_weights on a fixed interval through
run_epoch_loop (src/platform_network/cli_app/main.py:825-831,
bittensor/validator_loop.py:10-18). The loop runs the callback, then sleeps
the interval, then repeats (bittensor/validator_loop.py:13-18).
Cadence
| Cadence | Default | Source |
|---|---|---|
| Validator submit interval | 360 s | config/validator.example.yaml:19, src/platform_network/config/settings.py:45 |
| Master epoch interval | 360 s | config/master.example.yaml:14, src/platform_network/config/settings.py:28 |
| Weights freshness ceiling | 720 s | config/validator.example.yaml:22, src/platform_network/config/settings.py:48 |
weights_interval_seconds) and the master epoch
interval (epoch_interval_seconds) share the same default of 360 seconds. The
supervisor’s compute-only weights task also runs on the master’s
epoch_interval_seconds (src/platform_network/supervisor/weights.py:89-101).
What happens each tick
Fetch the latest vector
The validator fetches the master’s vector from
GET /v1/weights/latest
(validator/weights_client.py:18-30).Validate the payload
The runner rejects the payload if any check fails
(
validator/normal_runner.py:93-107):- the payload
netuiddoes not match the configured netuid - the payload has expired (
expires_atis in the past) - the payload is stale (older than
weights_freshness_seconds) - the
uidsvector is empty - the
weightsvector is empty uidsandweightslengths differ
Submit on-chain
If the payload passes, the validator calls
set_weights with the hotkey
wallet (validator/normal_runner.py:84,
bittensor/weight_setter.py:27-44). The call uses
wait_for_inclusion=False and wait_for_finalization=False
(bittensor/weight_setter.py:39-40).Freshness ceiling
The freshness check comparesnow - computed_at against
weights_freshness_seconds, which defaults to 720 seconds
(validator/normal_runner.py:99, src/platform_network/config/settings.py:48).
A vector older than this ceiling is skipped, so the validator never submits a
stale vector even if a fetch succeeds.
If submission is not configured
If the weights client, weight setter, or netuid is not configured,submit_latest_weights logs a warning and returns without submitting
(validator/normal_runner.py:64-71).
Next steps
The submitter
The submit-only on-chain process.
Configuration
Tune the cadence and freshness values.