diff --git a/src/lib/pickles/compile.ml b/src/lib/pickles/compile.ml index 5d89c61b2a0..96d9bb8e3ad 100644 --- a/src/lib/pickles/compile.ml +++ b/src/lib/pickles/compile.ml @@ -380,7 +380,8 @@ struct ~storables: { step_storable; step_vk_storable; wrap_storable; wrap_vk_storable } ~proof_cache ?disk_keys ?override_wrap_domain ?override_wrap_main - ?(num_chunks = 1) ~branches:(module Branches) ~max_proofs_verified ~name + ?(num_chunks = Plonk_checks.num_chunks_by_default) + ~branches:(module Branches) ~max_proofs_verified ~name ?constraint_constants ~public_input ~auxiliary_typ ~choices () -> let snark_keys_header kind constraint_system_hash = let constraint_constants : Snark_keys_header.Constraint_constants.t = @@ -877,8 +878,8 @@ struct ; num_chunks ; zk_rows = ( match num_chunks with - | 1 -> - 3 + | 1 (* cannot match with Plonk_checks.num_chunks_by_default *) -> + Plonk_checks.zk_rows_by_default | num_chunks -> let permuts = 7 in ((2 * (permuts + 1) * num_chunks) - 2 + permuts) / permuts ) @@ -932,8 +933,8 @@ module Side_loaded = struct ; branches = Verification_key.Max_branches.n ; feature_flags = Plonk_types.Features.to_full ~or_:Opt.Flag.( ||| ) feature_flags - ; num_chunks = 1 - ; zk_rows = 3 + ; num_chunks = Plonk_checks.num_chunks_by_default + ; zk_rows = Plonk_checks.zk_rows_by_default } module Proof = struct diff --git a/src/lib/pickles/pickles.ml b/src/lib/pickles/pickles.ml index 0b5d1552372..84e761ee16f 100644 --- a/src/lib/pickles/pickles.ml +++ b/src/lib/pickles/pickles.ml @@ -254,8 +254,8 @@ module Make_str (_ : Wire_types.Concrete) = struct ; branches = Verification_key.Max_branches.n ; feature_flags = Plonk_types.(Features.to_full ~or_:Opt.Flag.( ||| ) feature_flags) - ; num_chunks = 1 - ; zk_rows = 3 + ; num_chunks = Plonk_checks.num_chunks_by_default + ; zk_rows = Plonk_checks.zk_rows_by_default } module Proof = struct @@ -1834,8 +1834,8 @@ module Make_str (_ : Wire_types.Concrete) = struct Lazy.map wrap_vk ~f:(Promise.map ~f:Verification_key.index) ; wrap_domains ; step_domains - ; num_chunks = 1 - ; zk_rows = 3 + ; num_chunks = Plonk_checks.num_chunks_by_default + ; zk_rows = Plonk_checks.zk_rows_by_default } in Types_map.add_exn self data ; diff --git a/src/lib/pickles/plonk_checks/plonk_checks.ml b/src/lib/pickles/plonk_checks/plonk_checks.ml index 15062fe1cc2..30a63ab3656 100644 --- a/src/lib/pickles/plonk_checks/plonk_checks.ml +++ b/src/lib/pickles/plonk_checks/plonk_checks.ml @@ -5,6 +5,10 @@ module Scalars = Scalars module Domain = Domain module Opt = Opt +let num_chunks_by_default = 1 + +let zk_rows_by_default = 3 + type 'field plonk_domain = < vanishing_polynomial : 'field -> 'field ; shifts : 'field Plonk_types.Shifts.t @@ -248,7 +252,7 @@ let scalars_env (type boolean t) (module B : Bool_intf with type t = boolean) let next_term = ref omega_to_minus_2 in let omega_to_intermediate_powers = Array.init - Stdlib.(zk_rows - 3) + Stdlib.(zk_rows - zk_rows_by_default) ~f:(fun _ -> let term = !next_term in next_term := term * omega_to_minus_1 ; diff --git a/src/lib/pickles/plonk_checks/plonk_checks.mli b/src/lib/pickles/plonk_checks/plonk_checks.mli index 32a81a6d196..4687b72a062 100644 --- a/src/lib/pickles/plonk_checks/plonk_checks.mli +++ b/src/lib/pickles/plonk_checks/plonk_checks.mli @@ -1,5 +1,11 @@ open Pickles_types +(** The default number of chunks in a circuit is one (< 2^16 rows) *) +val num_chunks_by_default : int + +(** The number of rows required for zero knowledge in circuits with one single chunk *) +val zk_rows_by_default : int + type 'field plonk_domain = < vanishing_polynomial : 'field -> 'field ; shifts : 'field Pickles_types.Plonk_types.Shifts.t diff --git a/src/lib/pickles/proof.ml b/src/lib/pickles/proof.ml index 4e8eaee56f5..663ede9cf18 100644 --- a/src/lib/pickles/proof.ml +++ b/src/lib/pickles/proof.ml @@ -117,7 +117,10 @@ let dummy (type w h r) (_w : w Nat.t) (h : h Nat.t) let g0 = Tock.Curve.(to_affine_exn one) in let g len = Array.create ~len g0 in let tick_arr len = Array.init len ~f:(fun _ -> tick ()) in - let lengths = Commitment_lengths.default ~num_chunks:1 (* TODO *) in + let lengths = + Commitment_lengths.default + ~num_chunks:Plonk_checks.num_chunks_by_default (* TODO *) + in T { statement = { proof_state = diff --git a/src/lib/pickles/side_loaded_verification_key.ml b/src/lib/pickles/side_loaded_verification_key.ml index df697d54471..0b528a7e217 100644 --- a/src/lib/pickles/side_loaded_verification_key.ml +++ b/src/lib/pickles/side_loaded_verification_key.ml @@ -229,7 +229,7 @@ module Stable = struct } ) ; shifts = Common.tock_shifts ~log2_size ; lookup_index = None - ; zk_rows = 3 + ; zk_rows = Plonk_checks.zk_rows_by_default } ) in { Poly.max_proofs_verified diff --git a/src/lib/pickles/step.ml b/src/lib/pickles/step.ml index d10bf69ef20..07b3fd471fb 100644 --- a/src/lib/pickles/step.ml +++ b/src/lib/pickles/step.ml @@ -454,7 +454,7 @@ struct (module Env_bool) (module Env_field) ~domain:tock_domain ~srs_length_log2:Common.Max_degree.wrap_log2 - ~zk_rows:3 + ~zk_rows:Plonk_checks.zk_rows_by_default ~field_of_hex:(fun s -> Kimchi_pasta.Pasta.Bigint256.of_hex_string s |> Kimchi_pasta.Pasta.Fq.of_bigint ) diff --git a/src/lib/pickles/step_branch_data.ml b/src/lib/pickles/step_branch_data.ml index 3467b587781..bb68567c25c 100644 --- a/src/lib/pickles/step_branch_data.ml +++ b/src/lib/pickles/step_branch_data.ml @@ -193,8 +193,8 @@ let create ; num_chunks ; zk_rows = ( match num_chunks with - | 1 -> - 3 + | 1 (* cannot match with Plonk_checks.num_chunks_by_default *) -> + Plonk_checks.zk_rows_by_default | num_chunks -> let permuts = 7 in ((2 * (permuts + 1) * num_chunks) - 2 + permuts) / permuts ) diff --git a/src/lib/pickles/step_main.ml b/src/lib/pickles/step_main.ml index 3c0ff9f02b2..9964b7e02ae 100644 --- a/src/lib/pickles/step_main.ml +++ b/src/lib/pickles/step_main.ml @@ -351,7 +351,7 @@ let step_main : Req.Compute_prev_proof_parts previous_proof_statements ) in let dlog_plonk_index = - let num_chunks = (* TODO *) 1 in + let num_chunks = (* TODO *) Plonk_checks.num_chunks_by_default in exists ~request:(fun () -> Req.Wrap_index) (Plonk_verification_key_evals.typ diff --git a/src/lib/pickles/unfinalized.ml b/src/lib/pickles/unfinalized.ml index 97781eae3c7..677faf41181 100644 --- a/src/lib/pickles/unfinalized.ml +++ b/src/lib/pickles/unfinalized.ml @@ -69,7 +69,8 @@ module Constant = struct Plonk_checks.scalars_env (module Env_bool) (module Env_field) - ~srs_length_log2:Common.Max_degree.wrap_log2 ~zk_rows:3 + ~srs_length_log2:Common.Max_degree.wrap_log2 + ~zk_rows:Plonk_checks.zk_rows_by_default ~endo:Endo.Wrap_inner_curve.base ~mds:Tock_field_sponge.params.mds ~field_of_hex: (Core_kernel.Fn.compose Tock.Field.of_bigint (fun x -> diff --git a/src/lib/pickles/verification_key.ml b/src/lib/pickles/verification_key.ml index af1cab84c57..df556dd2a0e 100644 --- a/src/lib/pickles/verification_key.ml +++ b/src/lib/pickles/verification_key.ml @@ -197,7 +197,7 @@ module Stable = struct } ) ; shifts = Common.tock_shifts ~log2_size ; lookup_index = None - ; zk_rows = 3 + ; zk_rows = Plonk_checks.zk_rows_by_default } in { commitments = c; data = d; index = t } diff --git a/src/lib/pickles/verify.ml b/src/lib/pickles/verify.ml index 47d5e3eec06..1194f34ba1a 100644 --- a/src/lib/pickles/verify.ml +++ b/src/lib/pickles/verify.ml @@ -60,8 +60,8 @@ let verify_heterogenous (ts : Instance.t list) = Timer.start __LOC__ ; let non_chunking, expected_num_chunks = let expected_num_chunks = - Option.value_map ~default:1 chunking_data ~f:(fun x -> - x.Instance.num_chunks ) + Option.value_map ~default:Plonk_checks.num_chunks_by_default + chunking_data ~f:(fun x -> x.Instance.num_chunks ) in let exception Is_chunked in match @@ -117,8 +117,8 @@ let verify_heterogenous (ts : Instance.t list) = Timer.clock __LOC__ ; let deferred_values = let zk_rows = - Option.value_map ~default:3 chunking_data ~f:(fun x -> - x.Instance.zk_rows ) + Option.value_map ~default:Plonk_checks.zk_rows_by_default + chunking_data ~f:(fun x -> x.Instance.zk_rows ) in Wrap_deferred_values.expand_deferred ~evals ~zk_rows ~old_bulletproof_challenges ~proof_state diff --git a/src/lib/pickles/wrap_domains.ml b/src/lib/pickles/wrap_domains.ml index bd5c933a483..747460f2581 100644 --- a/src/lib/pickles/wrap_domains.ml +++ b/src/lib/pickles/wrap_domains.ml @@ -29,7 +29,9 @@ struct lazy (Promise.return (Vector.init num_choices ~f:(fun _ -> - let num_chunks = (* TODO *) 1 in + let num_chunks = + (* TODO *) Plonk_checks.num_chunks_by_default + in let g = Array.init num_chunks ~f:(fun _ -> Backend.Tock.Inner_curve.(to_affine_exn one) ) diff --git a/src/lib/pickles/wrap_proof.ml b/src/lib/pickles/wrap_proof.ml index 890b46fb693..4783b9c8132 100644 --- a/src/lib/pickles/wrap_proof.ml +++ b/src/lib/pickles/wrap_proof.ml @@ -38,7 +38,9 @@ let typ : (Checked.t, Constant.t) Typ.t = (module Impl) Inner_curve.typ Plonk_types.Features.Full.none ~bool:Boolean.typ ~dummy:Inner_curve.Params.one - ~commitment_lengths:(Commitment_lengths.default ~num_chunks:1) + ~commitment_lengths: + (Commitment_lengths.default + ~num_chunks:Plonk_checks.num_chunks_by_default ) ; Types.Step.Bulletproof.typ ~length:(Nat.to_int Tock.Rounds.n) ( Typ.transport Other_field.typ ~there:(fun x -> diff --git a/src/lib/pickles/wrap_verifier.ml b/src/lib/pickles/wrap_verifier.ml index 11b0ea1a4df..6f996c096d3 100644 --- a/src/lib/pickles/wrap_verifier.ml +++ b/src/lib/pickles/wrap_verifier.ml @@ -254,7 +254,9 @@ struct Boolean.Unsafe.of_cvar Field.(add (b1 :> t) (b2 :> t)) ) in let none_sum = - let num_chunks = (* TODO *) 1 in + let num_chunks = + (* TODO *) Plonk_checks.num_chunks_by_default + in Option.map is_none ~f:(fun (b : Boolean.var) -> Array.init num_chunks ~f:(fun _ -> Double.map Inner_curve.one ~f:(( * ) (b :> t)) ) ) @@ -1576,7 +1578,8 @@ struct Plonk_checks.scalars_env (module Env_bool) (module Env_field) - ~srs_length_log2:Common.Max_degree.wrap_log2 ~zk_rows:3 + ~srs_length_log2:Common.Max_degree.wrap_log2 + ~zk_rows:Plonk_checks.zk_rows_by_default ~endo:(Impl.Field.constant Endo.Wrap_inner_curve.base) ~mds:sponge_params.mds ~field_of_hex:(fun s ->