Architecture
ZUL is three layers of software: the node (a Rust sequencer that is the chain), the L1 programs on Solana (settlement, bridge vaults, DA log), and the web stack (TypeScript SDK, indexer, explorer, bridge UI).
wallet + TS SDK explorer (Next.js) indexer worker
\ | /
v v v
+-----------------------------------------------------------+
| ZUL node (Rust, single sequencer) |
| JSON-RPC server (Solana RPC subset + WebSocket) |
| mempool -> SVM executor -> block producer |
| account store (redb) + state SMT (blake3) |
| shielded pool builtin (Groth16 verify, Poseidon notes) |
| bridge watcher (L1 deposits) | batcher (L1 posting) |
+-----------------------------------------------------------+
| state roots + DA batches ^ deposits
v |
+-----------------------------------------------------------+
| Solana L1 |
| settlement program | bridge vaults | DA log |
+-----------------------------------------------------------+The node
The node is a Rust workspace organized by role. Every component below is a workspace member with its own test suite:
| COMPONENT | ROLE |
|---|---|
| primitives | Block and genesis types, hashing, configuration. |
| store | Accounts in a redb key-value store, block storage, the blockhash queue (last 150 hashes), and the state SMT with incremental updates for touched accounts. |
| executor | The SVM integration: a transaction batch processor wired to the account store, sysvar maintenance, preloaded builtin and BPF programs. |
| privacy | The shielded pool builtin: instruction parsing, Groth16 verification, Poseidon hashing, the depth-26 commitment tree, the nullifier set, and pool vaults. |
| rpc | HTTP + WebSocket JSON-RPC, a working subset of the Solana RPC surface. See JSON-RPC API. |
| bridge | The L1 deposit watcher (deposit events → L2 mint transactions) and the batcher that posts state roots and DA chunks. |
| node | The sequencer binary: config, genesis, the block production loop, the built-in faucet, shutdown. |
The L1 programs
Two Anchor programs on Solana receive everything the chain commits to: the settlement program stores batch records and verifies withdrawal claims against posted state roots, and the DA log program is a noop whose instruction data carries zstd-compressed batch chunks. Bridge vault instructions live with settlement. Details in Settlement batches and Data availability.
The web stack
A TypeScript SDK wraps a standard Solana connection pointed at the L2 RPC and adds the bridge and shielded clients. A dedicated indexerwalks blocks into Postgres for the explorer. Because the RPC speaks Solana's protocol, existing Solana tooling works against ZUL largely unchanged.