Skip to main content
Validators on the subnet run one thing: a submit-only on-chain submitter. It fetches the master’s final, normalized weight vector over HTTP and submits it to Bittensor with the validator hotkey. It runs no challenge orchestration — all challenge services live on the master node. Source: README.md:153-156; docs/architecture.md:53-55.

Source repository

The submit-only submitter, the weights client, and the validator settings.

What the submitter does

The submitter is a minimal process on the validator node. Every weights_interval_seconds it reads /v1/weights/latest from the master, submits the fetched vector on-chain, and keeps retrying if the master is unavailable. Source: docs/architecture.md:53-55; deploy/swarm/submitter/run_submitter.py:1-16. It deliberately does not run the challenge reconcile loop or open the control-plane database — those belong to the master, not the submitter. Source: deploy/swarm/submitter/run_submitter.py:8-17.

The submit loop

Each iteration inlines three operations: fetch the latest master vector, validate the payload, then call set_weights.
payload = await runner.weights_client.fetch_latest()
failure = runner._validate_weights_payload(payload)
if failure is not None:
    return
result = runner.weight_setter.set_weights(payload.uids, payload.weights)
Source: deploy/swarm/submitter/run_submitter.py:112-144. The weights client is pointed at the resolved weights URL, with the configured timeout and retry count. Source: deploy/swarm/submitter/run_submitter.py:161-169; src/platform_network/config/settings.py:42-52.

Configuration

SettingDefaultSource
netuid100src/platform_network/config/settings.py:12
validator.registry_urlhttps://chain.platform.networksrc/platform_network/config/settings.py:42
validator.weights_interval_seconds360src/platform_network/config/settings.py:45
validator.weights_timeout_seconds15.0src/platform_network/config/settings.py:46
validator.weights_retries3src/platform_network/config/settings.py:47
validator.weights_freshness_seconds720src/platform_network/config/settings.py:48
The effective weights URL is weights_url when set, otherwise the registry_url. Source: src/platform_network/config/settings.py:50-52. The reference submitter config points weights_url at https://chain.platform.network, the public master endpoint. Source: deploy/swarm/submitter/submitter.yaml:42-43.

Identity and safety

At startup the submitter logs its target and the public validator hotkey SS58 address so an operator can confirm the submitting identity. It never logs the private key or any secret. A SIGTERM/SIGINT cancels at the next sleep point, so an in-flight set_weights completes fully and the stop never leaves a half-submitted state. Source: deploy/swarm/submitter/run_submitter.py:30-33, deploy/swarm/submitter/run_submitter.py:65-86, deploy/swarm/submitter/run_submitter.py:192-203.

Installation

The submitter is a single systemd-managed service on the validator node. It needs only the validator hotkey. Source: README.md:398-409.
The vector the submitter posts is produced entirely by the master — see the Weights pipeline for how it is computed, and the Weights API for the response schema.

Architecture overview

Where the validator sits in the subnet.

Master node

The node that computes and serves the vector.

Sources

Citations reference the base repository pinned at SHA e33109bfa4f5054928c3b4d429be9cf35d36b166 (see SOURCES.md).