Skip to main content

End-to-end architecture

For the complete documentation index, see llms.txt

Your device computes a Midnight transaction privately and proves it correct; only then does the network verify it publicly. Private data participates in the computation but never reaches the chain. What crosses the boundary is the public record of execution, plus zero-knowledge proofs that it is correct.

This page connects the whole journey in one diagram. Each stage links to a page that covers it in depth.

The complete flow

* The updated private state persists on the device only after the transaction succeeds.

What each layer can and cannot see

LayerCan seeCannot see
Chain observer (anyone)Contract address, which circuit the transaction invoked, public transcripts, ledger operation arguments, disclosed values, commitments, nullifiers, block timingWitness return values (unless disclosed into a public position), private state, internal computation, the value inserted into a Compact MerkleTree (guessable if low entropy), which commitment a given nullifier spends
Node (validator)Same as a chain observer, plus mempool timingSame as a chain observer
IndexerEverything on chain (it indexes public data)Private state, witness values; it cannot open commitments
Indexer, with your viewing keyYour own shielded transaction history (decrypt-only access; the indexer operator learns it too)Other users' shielded data; a viewing key cannot spend or sign
Proof serverEverything in the proof request, including witness values. It is a trust boundary: run your own; with wallet-delegated proving, the proving step moves to whatever proof server the wallet usesNothing; it sees the full request

Go deeper into each stage