For researchers
Submit work to the swarm
The Client workspace is for researchers and developers who send quantum simulation jobs. Workers around the world bid, compute, and prove — you track progress and pay from your client balance.
Quick path
- 01 · FundClaim Client faucet credits (10 test $WQC / day). This balance pays escrow — separate from Node rewards.
- 02 · Quote & submitOn Submit Task, set qubits, paste circuit JSON, pick an output mode, then submit when escrow looks right.
- 03 · Watch progressStatus updates on the submit page. History and spend live under Task History.
- 04 · Read the ledgerEvery lock, debit, and refund appears in the Ledger.
Using Submit Task
The form quotes escrow from qubit count, gate count, and security level before you send. Insufficient balance disables submit until you top up via the faucet.
| Field | What it does |
|---|---|
| Qubit count | Width of the circuit (UI range 1–32). Must match the largest qubit index in your JSON. |
| Security level | FRI proof tier: low / normal / high / ultra. Higher tiers cost more escrow and take longer. |
| Output mode | What result you want back — see modes below. Switching modes loads a matching sample circuit. |
| Circuit JSON | An array of gate objects. Gate count drives the quote. Invalid JSON is rejected before submit. |
| Shots / classical bits | Only for sample_counts. Shots is how many times to sample; classical bits size the bitstring register. |
| Observables JSON | Only for expectation. Named Pauli terms with coefficients (see the sample on the form). |
Output modes
- statevector_scalar
Full statevector / scalar readout for the simulated amplitudes. Good default for small circuits (Bell state sample uses H + CNOT).
- sample_counts
Measurement sampling. Add
MEASUREgates that mapqubit → cbit, set shots and classical bit count. - expectation
Observable expectation values. Provide an observables list (e.g. Pauli ZZ). Circuit itself is usually unitary; measurements are encoded in the observables, not MEASURE gates.
Circuit JSON
Circuits are a JSON array. Each gate is { "type": "…", "params": … }. Qubit indices are zero-based.
[
{"type": "H", "params": [0]},
{"type": "CNOT", "params": [0, 1]},
{"type": "MEASURE", "params": {"qubit": 0, "cbit": 0}},
{"type": "MEASURE", "params": {"qubit": 1, "cbit": 1}}
]Supported gates
- Single-qubit:
H X Y Z S T RX RY RZ - Two-qubit:
CNOT CZ - Three-qubit:
CCNOT - Measure:
MEASURE { qubit, cbit } - Also accepted in the IR:
RESET,IF(advanced / limited)
Rotation gates take [qubit, angle] style params; Pauli / Clifford take qubit indices only.
Not supported (yet)
- OpenQASM / Qiskit / Cirq import — paste WQC circuit JSON only (OpenQASM is deferred).
- Arbitrary custom gate matrices or opaque black-box unitaries.
- Noise models, mid-circuit feed-forward beyond the limited IF path, or classical control programs.
- Turning test $WQC into mainnet value — faucet credits are experimental only.
Escrow, status, and money
- On submit, escrow is locked from your client balance (testnet) or via L2 permit (mainnet).
- As slices complete, escrow is debited; unused remainder is refunded when the task settles.
- Task History shows Used / Returned per task; Ledger is the full passbook (lock, debit, refund, faucet).
- Status flow is roughly pending → dispatched → finalizing → completed (or failed). The submit page polls until a terminal status.
Hard limits
The orchestrator rejects submit payloads that break these rules. If Submit Task returns an error, match the message to a row below.
| Limit | Value | When it applies / typical reject reason |
|---|---|---|
| qubit_count | > 0 (UI 1–32) | Always. Must be ≥ every qubit index in the circuit. |
| security_level | low | normal | high | ultra | Always. Other values are rejected. |
| circuit | non-empty JSON array | Always. Empty circuits are rejected. |
| output_mode | statevector_scalar | sample_counts | expectation | Always. Anything else → unsupported output_mode. |
| classical_bit_count | 1–16 | sample_counts only. > 16 → classical_bit_count exceeds distribution limit 16. |
| shots | ≥ 1 | sample_counts only. |
| MEASURE / IF cbit | 0 … classical_bit_count−1 | sample_counts. Out-of-range cbit is rejected. |
| Terminal MEASURE count | ≥ 1 and ≤ 20 measured qubits | sample_counts requires terminal MEASURE; too many measured wires exceed the compact register (≤ 20). |
| Mid-circuit sample_counts qubit_count | ≤ 20 | If the circuit uses mid-circuit MEASURE / IF semantics, qubit_count > 20 is rejected (dense trajectory limit). |
| Terminal-only sample_counts qubit_count | May exceed 20 | Allowed when all MEASURE are terminal and slicing can shrink to ≤ 20 measured qubits. Still needs workers that can bid. |
| expectation + MEASURE | not allowed | expectation circuits must be unitary — MEASURE is rejected. |
| expectation observables | required, valid Paulis | Empty / invalid observables or labels wider than qubit_count are rejected. |
| OpenQASM / Qiskit / Cirq | not accepted | Paste WQC circuit JSON only (OpenQASM import is deferred). |
Source of truth: orchestrator ValidateSubmitRequest / MaxSampleCountsClassicalBits=16, MaxSampleCountsCompactQubits=20.
Practical guidance
- Larger qubit counts and higher security levels need more escrow and more worker RAM — start small (2–8 qubits,
normal) while learning. - Very wide or deep circuits may wait longer for a worker that can hold the slice, or fail if no node can bid — even when under the hard limits above.
- Faucet is once per UTC day per balance type (Client vs Node). Plan experiments around that if you burn through escrow quickly.
- Client and Node share one login but separate balances. Submitting jobs never spends Node reward funds.
Client vs Node
Client pays for work; Node earns by running the miner. Switch with the Client / Node toggle in the header anytime.
Looking to lend spare PC capacity instead? See the worker guide or start dash.