ROADMAP
Three phases. One mesh.
QSDM ships in phases, with each phase deliverable and production-usable on its own. All three product
phases are shipped: Phase 1 delivers consensus and storage, Phase 2 adds submesh routing and the
ScyllaDB migration path, and Phase 3 brings 3D mesh validation with a live topology feed and
reorg-safe partition healing.
2D Mesh Launch
Stable 2D mesh, manual bootstrapping, Proof-of-Entanglement, ML-DSA-87, SQLite with Zstd.
- libp2p + GossipSub networking
- Optimized signing (memory pool, batch 10–100×)
- Operator dashboard, HTTPS via Caddy, UFW hardening
Shipped
Scalability & Optimization
Dynamic submeshes, priority routing, WASM contract SDK, ScyllaDB migration path.
- Fee + geotag submesh rules (loadable .toml profiles)
- WASM wallet and validator integration
- SQLite → ScyllaDB migrate with dry-run & stats
Shipped
3D Mesh & Self-Healing
3D mesh validation, quarantine auto-recovery, reputation, CUDA acceleration.
- NVIDIA-locked validators enforced end-to-end
- Topology WebSocket + live 3D viewer
- Reputation + reorg-safe partition heal
Shipped
After Phase 3: the in-repo arc continued with the
Major Update — a rebrand to plain QSDM, the native coin Cell (CELL),
a reference miner under
MINING_PROTOCOL.md,
and the attestation transparency surface with external CI and Prometheus
enforcement.
v2 NVIDIA-locked protocol (landed): every accepted
mining proof now carries an NVIDIA attestation (nvidia-cc-v1 or
nvidia-hmac-v1), miners enroll on-chain with a 10 CELL stake bond
(qsdm/enroll/v1), validators mint challenge nonces with a 60-second freshness window,
and forged / replayed / stale proofs are slashable via qsdm/slash/v1. The
reference miner client (pkg/mining/v2client) ships in-tree and is wired into
qsdmminer-console. Two concrete slashers are
active: the forged-attestation verifier
(pkg/mining/slashing/forgedattest) re-runs the nvidia-hmac-v1
acceptance flow against the enrollment registry and drains the offender's bond on
HMAC mismatch, GPU-UUID mismatch, challenge-bind mismatch, or deny-listed-GPU offences;
the double-mining verifier (pkg/mining/slashing/doublemining) drains
the bond of any operator caught signing two distinct, crypto-valid v2 proofs at the same
(epoch, height) (the encoder canonicalises pair order so the chain-side
replay protection treats (a, b) and (b, a) as the same offence).
And any successful slash that leaves the offender's stake below the 10 CELL enrollment
minimum now auto-revokes the record into the standard 7-day unbond
window with the gpu_uuid binding released for re-enrollment — closing the
"slash-to-zero, keep mining for free" loophole at the chain layer
(pkg/chain/SlashApplier.AutoRevokeMinStakeDust).
Slashing and enrollment are now fully observable: every applied,
rejected, auto-revoked, and swept transition emits both a Prometheus counter
(qsdm_slash_applied_total, qsdm_slash_rejected_total{reason},
qsdm_slash_auto_revoked_total{reason}, qsdm_enrollment_*) and a
structured MiningSlashEvent / EnrollmentEvent on the
chain.ChainEventPublisher bus, with point-in-time gauges
(qsdm_enrollment_active_count, qsdm_enrollment_bonded_dust,
qsdm_enrollment_pending_unbond_count) backed by an
EnrollmentStateProvider that walks the on-chain registry under one mutex
acquisition per scrape. The seam between pkg/chain and
pkg/monitoring is dependency-inverted (chain.MetricsRecorder),
so binaries that omit monitoring pay zero overhead and the historical import cycle
that kept slashing under-instrumented is closed.
All of this is now actually wired into the production binary:
cmd/qsdm/main.go calls internal/v2wiring.Wire(...) at boot,
which constructs the on-chain enrollment state, the EnrollmentApplier,
the production slash dispatcher + SlashApplier, the
stacked mempool admission gate
(slashing.AdmissionChecker > enrollment.AdmissionChecker
> operator’s POL/BFT base predicate), the full HTTP mining surface
(POST /api/v1/mining/{enroll,unenroll,slash} for writes,
GET /api/v1/mining/enrollment/{node_id},
GET /api/v1/mining/enrollments (paginated —
cursor/limit/phase, cursor-stable
under concurrent enrollment churn so dashboards never silently skip or
double-count records), and
GET /api/v1/mining/slash/{tx_id} for reads — the
per-record query carries phase + slashable
derived so slash submitters can confirm a target carries real stake before
posting evidence; the list endpoint reuses the exact same
EnrollmentRecordView shape so clients only learn one record
format; the slash-receipt endpoint is backed by a bounded in-memory
SlashReceiptStore that subscribes to the
SlashApplier.Publisher chain via composition, so every applied or
rejected slash leaves an auditable receipt without operators having to scrape logs
or Prometheus to back-correlate height ↔ tx_id),
and the four qsdm_enrollment_* Prometheus gauges in one ordered call —
backed by an integration suite that mirrors the production wiring shape (write →
applier → publisher → receipt store → HTTP read) and catches any drift
between main.go and the chain contracts before a regression reaches
mainnet. The lifecycle operations are also exposed through
qsdmcli: qsdmcli enroll, unenroll,
slash, enrollment-status, enrollments
(with --phase, --limit, --cursor, and
--all for full-walk dumps that follow next_cursor
until has_more is false), and slash-receipt
build canonical payloads through the same pkg/mining/{enrollment,slashing}
codecs the mempool admission gate validates against — one source of truth, no
parallel hand-rolled JSON. qsdmcli slash-helper closes the last
"users would have to write Go to do this" gap with three offline subcommands
(forged-attestation, double-mining, inspect)
that emit the canonical EvidenceBlob bytes the chain-side
forgedattest / doublemining decoders consume, run pre-flight
checks (proof version, NodeID binding, equal (Epoch, Height), distinct
canonical bytes) so a watcher-bot doesn't burn a tx fee on a guaranteed
verifier_failed, and canonicalise (proof_a, proof_b) ordering
so two slashers observing the same equivocation produce byte-identical evidence.
--print-cmd emits a copy-pasteable qsdmcli slash … snippet
to stderr (never stdout, so the bytes pipe stays clean). CLI tests cover envelope shape, base64 round-trip,
missing-flag rejection, hex-decode failure surfacing, HTTP path escaping,
multi-page --all walks, and 4xx propagation across all six subcommands,
plus 21 dedicated cases for slash-helper's happy paths, every pre-flight
rejection, encoder round-trip, and stdout/stderr stream-safety guarantees. Pre-this commit, every collaborator above was code
without a caller in any production binary; grep NewEnrollmentApplier
cmd/qsdm/main.go returned zero matches. The Tier-3 milestone is meaningful
now because the surface is alive in the binary, not just under go test.
Remaining deferred scope (Tensor-Core PoW kernel, swap-in real nvtrust bundle
framing for the now-shipped CC verifier, the freshness-cheat slasher pending
BFT-finality, and the qsdm/gov/v1 runtime tuning hook) is tracked in
MINING_PROTOCOL_V2.md §12.
Remaining mainnet gates are wall-clock events owned outside the repo (counsel, independent auditor,
incentivized testnet launch) and are tracked in
NEXT_STEPS.md.