package tezos-plonk

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

Parameters

Signature

module PP = PP
include Plonk.Main_protocol.S with type Scalar.t = PP.PC.Scalar.t with type circuit_verifier_input = PP.PC.Scalar.t array list
exception Rest_not_null of string

Raised by the prover when the provided inputs are not a satisfying assignment of the circuit.

exception Entry_not_in_table of string

Raised by the prover when the provided inputs are not a satisfying assignment of the circuit when using Plookup.

Prime field used by aPlonk

type scalar = Scalar.t
val scalar_t : scalar Repr.t
val scalar_encoding : scalar Data_encoding.t
type circuit_map = (Plonk.Circuit.t * int) Plonk.SMap.t

Before proving and verifying, circuits go through a pre-processing step called setup. The setup takes as input a circuit_map, which associates an identifier to a circuit and the number of statements that can be proved with that circuit. This produces a set of public_parameters which are bound to the circuits and can be reused.

type prover_public_parameters

Set of public_parameters needed by the prover. It's size is linear in the size of the circuits.

val prover_public_parameters_t : prover_public_parameters Repr.t
type verifier_public_parameters

Set of public_parameters needed by the verifier. It's size is constant w.r.t. the size of the circuits.

val verifier_public_parameters_t : verifier_public_parameters Repr.t
val verifier_public_parameters_encoding : verifier_public_parameters Data_encoding.t
type proof

Succinct proof for a collection of statements.

val proof_t : proof Repr.t
val proof_encoding : proof Data_encoding.t
type circuit_prover_input = {
  1. public : scalar array;
  2. witness : scalar array;
}

Prover inputs for one statement. Witness is the assignment of all wires of the circuit.

type prover_inputs = circuit_prover_input list Plonk.SMap.t

Map where each circuit identifier is bound to a list of circuit_prover_input for a list of statements.

type circuit_verifier_input = PP.PC.Scalar.t array list

The verifier input for one circuit and several statements

type verifier_inputs = circuit_verifier_input Plonk.SMap.t

Map where each circuit identifier is bound to the verifier inputs for this circuit.

val to_verifier_inputs : prover_inputs -> verifier_inputs

Conversion from prover_inputs to verifier_inputs.

val setup : zero_knowledge:bool -> circuit_map -> srs:(Bls12_381_polynomial.Srs.t * Bls12_381_polynomial.Srs.t) -> prover_public_parameters * verifier_public_parameters

setup ~zero_knowledge circuit_map ~srs pre-processes the circuit_map producing the public parameters. The SRSs of ZCash and Filecoin can be loaded from file using the Bls12_381_polynomial library. Activating zero_knowledge adds an overhead in proving time.

val update_prover_public_parameters : Stdlib.Bytes.t -> prover_public_parameters -> prover_public_parameters

Enrich the prover_public_parameters with extra application data to prevent replay attacks. The same data must be used for updating the prover and verifier public parameters.

val update_verifier_public_parameters : Stdlib.Bytes.t -> verifier_public_parameters -> verifier_public_parameters

Enrich the verifier_public_parameters with extra application data to prevent replay attacks. The same data must be used for updating the prover and verifier public parameters.

prove public_parameters ~inputs produces a proof for the collection of statements implied by inputs and the circuits used for generating public_parameters.

val verify : verifier_public_parameters -> inputs:verifier_inputs -> proof -> bool

verify public_parameters ~inputs proof checks the validity of the proof with regards to public_parameters and inputs.

module Internal_for_tests : sig ... end
module Perm : Plonk.Permutation_gate.S with module PP := PP
val get_gen_n_t : prover_public_parameters -> scalar * int * int
type prover_aux = {
  1. answers : scalar SMap.t SMap.t list;
  2. batch : scalar SMap.t list;
  3. alpha : scalar;
  4. beta : scalar;
  5. gamma : scalar;
  6. delta : scalar;
  7. x : scalar;
  8. r : scalar;
  9. cm_answers : scalar;
  10. cm_pi : scalar;
}
type verifier_aux = {
  1. alpha : scalar;
  2. beta : scalar;
  3. gamma : scalar;
  4. delta : scalar;
  5. x : scalar;
  6. r : scalar;
}
val prove_list : prover_public_parameters -> inputs:prover_inputs -> proof * prover_aux
val verify_list : verifier_public_parameters -> nb_proofs:int -> (proof * scalar SMap.t list * scalar * scalar) -> bool * verifier_aux
OCaml

Innovation. Community. Security.