package tezos-plonk

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

Parameters

Signature

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.

module Scalar : Bls.Scalar_sig with type t = PP.PC.Scalar.t

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 = (Circuit.t * int) 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 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 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
OCaml

Innovation. Community. Security.