Circuits Overview
Platus has four Noir circuits, compiled to ACIR and proved with Barretenberg UltraHonk. Three of them form a recursion pipeline that collapses a whole batch into one EVM-verifiable proof; the fourth is the spend itself.
| Circuit | Role |
|---|---|
action | The 2-in/2-out spend. One proof per Action; emits one Poseidon2 digest. |
recursive_2_leaf | Layer 0→1: verifies two Action proofs, offloads their SHA-256 digests, folds. |
recursive_2_inner | Layer ≥1: verifies two children (leaf or inner), folds. |
finalize | Wraps the recursion root into an EVM-format proof for on-chain verification. |
How a batch collapses
- Layer 0 → 1 (
recursive_2_leaf): verifies two Action proofs against the pinned Action VK, computes each Action's SHA-256 per-action digest (offloaded from the client), and folds the two viasha256_node. - Layer ≥ 1 (
recursive_2_inner): verifies two children (each a leaf or inner proof) and folds. Odd nodes promote unchanged; an odd Action at layer 0 is paired with itself. finalize: verifies the root and emits the four fields the contract checks.
The fold output is the publicsDigest — a SHA-256 binary tree over all per-action digests, which the contract independently reconstructs from calldata and the proof attests to. See Aggregation.