Skip to main content

PhylaxSynapse

A Bittensor synapse is the request payload sent over dendrite to the miner axon. Phylax defines one synapse type, PhylaxSynapse.

Request Fields

These fields are populated by the validator and sent to the miner.
FieldTypeRequiredDescription
bundlebytesYesGzipped tar of the skill bundle
bundle_sha256hex stringYesSHA-256 of decompressed bundle
skill_typeenumYesOne of the six types
noncehex stringYes32 byte random nonce
probe_specobjectYesDerived probe values
roleenumYesprimary or auditor
t_min_sintYesFloor on submission latency
deadline_sintYesCeiling on submission latency
task_idstringYesTask identifier
inference_configobjectNoLLM proxy + allowed models, if configured
composition_depthintNoagent_composition only
canary_specobjectNorag_knowledge and declarative only
validator_uidintYesValidator UID dispatching the task

probe_spec

FieldTypeDescription
file_pathstringRequired canary file path
file_contentstringRequired canary file content
dns_hoststringRequired DNS lookup target
process_echostringRequired process spawn echo string
The miner must perform each event inside the sandbox and echo the values back in probe_evidence.

inference_config (optional)

FieldTypeDescription
proxy_urlstringForwarded LLM proxy URL
allowed_modelslist of stringsLLM models the miner may use
If empty, the miner uses the LLM configuration in their own .env. If non empty, the miner must respect the proxy and the allowed models for any llm_evidence they emit.

Response Fields

These are populated by the miner and returned to the validator.
FieldTypeRequiredDescription
sssaobjectYesThe Signed Skill Safety Attestation
trace_bundlebytesIf role == primary and runtime typeGzipped tar of trace JSONL files
sandbox_manifestobjectIf role == primary and runtime typeImage URI + digest + runtime config
probe_evidenceobjectYesEcho of derived probe values
latency_msintYesMiner self reported latency, primarily for telemetry

trace_bundle

A single gzipped tar. Per skill type the required files are:
TypeRequired files
rag_knowledge(none)
declarative(none)
executable_pythonfs.jsonl, network.jsonl, process.jsonl, secrets.jsonl
executable_scriptabove + taint.jsonl
mcp_serverabove + mcp_io.jsonl
agent_compositionabove + cascade.jsonl
Each file is gzip compressed inside the tar (double compression is fine, the validator handles both). The validator decompresses, normalises records, recomputes the SHA-256, and compares against the hash in sssa.evidence.trace_hashes.

sandbox_manifest

FieldTypeDescription
image_uristringFull registry URI
digeststringsha256:... digest
runtime_configobjectCapabilities, network mode, resource limits
The validator checks digest against the image_hash the miner declared at registration. Mismatch fails the synapse immediately.

Signed Messages

Every message between any two of (miner, validator, server) is signed by the sender’s hotkey and verified by the receiver.

Format

{
  "body": <message payload>,
  "signature": {
    "signer_hotkey": "<ss58>",
    "signed_at": <unix timestamp>,
    "signature": "<base64 sr25519 signature>"
  }
}
The signature covers canonical_json(body). Canonical JSON: keys sorted at every level, UTF-8 NFC, no whitespace.

Verification

The receiver:
  1. Extracts body, recomputes canonical_json(body)
  2. Looks up signer_hotkey on chain (for miner / validator) or against the pinned PHYLAX_SERVER_HOTKEY (for server messages)
  3. Verifies the sr25519 signature
  4. Checks signed_at is within ±300 seconds of the current time to prevent replay
Any failure means the message is dropped without processing.

Replay Protection

signed_at is the only thing in the signed payload that uniquely identifies the message in time. Combined with a receiver side nonce cache for some endpoints, this prevents both stale and duplicate messages. For HTTP endpoints that mutate state (registration, reputation submission, weight attestation), the body includes a unique request_id UUID that the receiver caches for 1 hour. A repeated request_id returns 409.

Dendrite Concurrency

The validator dispatches to many miners across many tasks at the same time. The default limits:
LimitValue
Max concurrent dendrite calls60 (12 tasks × 5 miners)
Per miner concurrent calls1
Per dendrite call timeoutQUERY_TIMEOUT (150 s)
Per dendrite call retries0
The miner axon serves one request at a time per validator hotkey by default. Miners can raise PHYLAX_PIPELINE_WORKERS to handle more concurrent dispatches if their hardware can keep up.

Backpressure

If a miner cannot accept a dispatch (currently serving the maximum concurrent dispatches), they return a 503 backpressure response. The validator marks this submission as missing for the round and does not penalise reputation. Persistent backpressure (more than 50% of dispatches over 100 rounds) lowers the miner in the candidate pool ranking through the failure rate filter, but does not directly penalise reputation.

What’s Next

SSSA Schema

The sssa payload returned in the synapse.

Sandbox Reruns

What the validator does with the sandbox_manifest after the round.

Probe Events

What probe_spec and probe_evidence carry.

Configuration Reference

Variables that affect synapse behaviour.