a16z/jolt

Enable making some inputs private

Opened this issue · 1 comments

The user experience of this could look something like this:

#[jolt::provable]
fn correct_factors(p: i32, #[private] a: i32, #[private] b: i32) -> bool {
    p == a * b
}

jolt::provable would treat all #[private] arguments as private inputs.

To enable this, Jolt verifier should be represented by a circuit, so that it could itself be verified by a SNARK (like Groth16, Plonk, GKR).

Note that excluding some inputs from the verification is also useful for succinctness. It is not blocked on ZK to be useful.

Example use case: I have a large JSON file of which verifier knows the hash (and is allowed to learn contents). I want to provably look up a value without transferring the whole file.

Example use case: Verifying computations using hint values for prover efficiency (e.g. multiplicative inverses). Having to send the hints to the verifier, or have verifier re-derive them defeats succinctness.