Skip to main content
stateset-stark generates witness-level cryptographic proofs that a private amount satisfies a compliance policy, without revealing the amount. It’s built on Winterfell, using STARKs — transparent (no trusted setup) and post-quantum secure.

Why this exists

Compliance rules usually need the value they’re checking. If an order amount is encrypted, an auditor asking “did every order stay under the AML threshold?” normally has to be given the amounts. A STARK proof answers the question instead of disclosing the data: the prover demonstrates the constraint held, the verifier checks the proof, and nobody sees the amount.

Supported policies

aml.threshold is strict and order_total.cap is not. A value exactly equal to the bound passes the cap and fails the threshold — pick deliberately.

Characteristics

The default fast profile is 82-bit security, below the 128-bit level often assumed by default. Use the secure profile for anything where a proof is externally relied upon. Figures above are order-of-magnitude guidance — reproduce with cargo bench --bench stark_bench.

Generate a proof

Verify a proof

Verification needs only the proof bytes and the public inputs — no access to the prover, and no access to the amount.

Submit to the sequencer

Use get_public_inputs_validated rather than assembling inputs yourself. It returns the canonical form the sequencer will verify against — inputs that differ even in ordering produce a proof that fails verification.

Crates

Bindings: WebAssembly, Node.js (@stateset/ves-stark), Python (ves_stark), and C FFI via Zig.
Published on crates.io.

Where proofs end up

A generated proof is submitted to the sequencer, which anchors its hash and the policy hash on Set L2 alongside the batch commitment. A third party then verifies it independently — see Compliance proofs.
Last modified on August 29, 2026