From 6aaa8d4690164751855036a8014ab2fcdcbb3abf Mon Sep 17 00:00:00 2001 From: mrmr1993 Date: Wed, 3 Apr 2024 16:27:01 +0100 Subject: [PATCH 1/3] Fixup lookup gate with range-check table --- src/lib/crypto/proof-systems | 2 +- .../pickles/test/optional_custom_gates/dune | 2 +- .../lookup_range_check.ml | 105 ++++++++++++++++++ 3 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 src/lib/pickles/test/optional_custom_gates/lookup_range_check.ml diff --git a/src/lib/crypto/proof-systems b/src/lib/crypto/proof-systems index ea3f1c9e28f1..63a32fca8667 160000 --- a/src/lib/crypto/proof-systems +++ b/src/lib/crypto/proof-systems @@ -1 +1 @@ -Subproject commit ea3f1c9e28f1ea3a066684149c7f924634143125 +Subproject commit 63a32fca86678da41e35bcf78356dfee7e3bb51d diff --git a/src/lib/pickles/test/optional_custom_gates/dune b/src/lib/pickles/test/optional_custom_gates/dune index 7468be84b1bc..d78ed1bac0fe 100644 --- a/src/lib/pickles/test/optional_custom_gates/dune +++ b/src/lib/pickles/test/optional_custom_gates/dune @@ -1,5 +1,5 @@ (tests - (names test_fix_domains pickles_test_optional_custom_gates) + (names test_fix_domains pickles_test_optional_custom_gates lookup_range_check) (libraries ;; opam libraries alcotest diff --git a/src/lib/pickles/test/optional_custom_gates/lookup_range_check.ml b/src/lib/pickles/test/optional_custom_gates/lookup_range_check.ml new file mode 100644 index 000000000000..26194fa88459 --- /dev/null +++ b/src/lib/pickles/test/optional_custom_gates/lookup_range_check.ml @@ -0,0 +1,105 @@ +open Core_kernel +open Pickles_types +open Pickles.Impls.Step + +let () = Pickles.Backend.Tick.Keypair.set_urs_info [] + +let () = Pickles.Backend.Tock.Keypair.set_urs_info [] + +let add_constraint c = assert_ { basic = c; annotation = None } + +let add_plonk_constraint c = + add_constraint + (Kimchi_backend_common.Plonk_constraint_system.Plonk_constraint.T c) + +let fresh_int i = exists Field.typ ~compute:(fun () -> Field.Constant.of_int i) + +let range_check0 () = + add_plonk_constraint + (RangeCheck0 + { v0 = fresh_int 0 + ; v0p0 = fresh_int 0 + ; v0p1 = fresh_int 0 + ; v0p2 = fresh_int 0 + ; v0p3 = fresh_int 0 + ; v0p4 = fresh_int 0 + ; v0p5 = fresh_int 0 + ; v0c0 = fresh_int 0 + ; v0c1 = fresh_int 0 + ; v0c2 = fresh_int 0 + ; v0c3 = fresh_int 0 + ; v0c4 = fresh_int 0 + ; v0c5 = fresh_int 0 + ; v0c6 = fresh_int 0 + ; v0c7 = fresh_int 0 + ; (* Coefficients *) + compact = Field.Constant.zero + } ) + +let range_check_in_lookup_gate () = + add_plonk_constraint + (Lookup + { w0 = (* Range check table *) fresh_int 1 + ; w1 = fresh_int 1 + ; w2 = fresh_int 0 + ; w3 = fresh_int 2 + ; w4 = fresh_int 0 + ; w5 = fresh_int ((1 lsl 12) - 1) + ; w6 = fresh_int 0 + } ) + +let constraint_constants = + { Snark_keys_header.Constraint_constants.sub_windows_per_window = 0 + ; ledger_depth = 0 + ; work_delay = 0 + ; block_window_duration_ms = 0 + ; transaction_capacity = Log_2 0 + ; pending_coinbase_depth = 0 + ; coinbase_amount = Unsigned.UInt64.of_int 0 + ; supercharged_coinbase_factor = 0 + ; account_creation_fee = Unsigned.UInt64.of_int 0 + ; fork = None + } + +let test_range_check_lookup () = + let _tag, _cache_handle, (module Proof), Pickles.Provers.[ prove ] = + Pickles.compile ~public_input:(Pickles.Inductive_rule.Input Typ.unit) + ~auxiliary_typ:Typ.unit + ~branches:(module Nat.N1) + ~max_proofs_verified:(module Nat.N0) + ~name:"lookup range-check" + ~constraint_constants (* TODO(mrmr1993): This was misguided.. Delete. *) + ~choices:(fun ~self:_ -> + [ { identifier = "main" + ; prevs = [] + ; main = + (fun _ -> + range_check0 () ; + range_check_in_lookup_gate () ; + { previous_proof_statements = [] + ; public_output = () + ; auxiliary_output = () + } ) + ; feature_flags = + Plonk_types.Features. + { none_bool with range_check0 = true; lookup = true } + } + ] ) + () + in + let public_input, (), proof = + Async.Thread_safe.block_on_async_exn (fun () -> prove ()) + in + Or_error.ok_exn + (Async.Thread_safe.block_on_async_exn (fun () -> + Proof.verify [ (public_input, proof) ] ) ) + +let () = + let open Alcotest in + run "Test range-check in lookup gate" + [ ( "range check in lookup gate" + , [ ( "prove range-check lookup in lookup gate" + , `Quick + , test_range_check_lookup ) + ] ) + ] From 9652edc24827697f7cd8beffaf13b23c15f4fefd Mon Sep 17 00:00:00 2001 From: Gregor Date: Thu, 4 Apr 2024 12:35:15 +0200 Subject: [PATCH 2/3] submodules to latest --- src/lib/crypto/proof-systems | 2 +- src/lib/snarky | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/crypto/proof-systems b/src/lib/crypto/proof-systems index 63a32fca8667..a3b3d7fe3425 160000 --- a/src/lib/crypto/proof-systems +++ b/src/lib/crypto/proof-systems @@ -1 +1 @@ -Subproject commit 63a32fca86678da41e35bcf78356dfee7e3bb51d +Subproject commit a3b3d7fe3425f0ff722a09a49cde69f4210c085e diff --git a/src/lib/snarky b/src/lib/snarky index a79b9549eac1..44e86744ac24 160000 --- a/src/lib/snarky +++ b/src/lib/snarky @@ -1 +1 @@ -Subproject commit a79b9549eac135ac9cbcb47d8d5ca8b3b542ab59 +Subproject commit 44e86744ac24037d2e76d715af1739e72fac6421 From c116e19f664097623fa753701bc7aa95a2faeb28 Mon Sep 17 00:00:00 2001 From: Gregor Date: Fri, 5 Apr 2024 08:38:03 +0200 Subject: [PATCH 3/3] update snarky_test digest and fix logic of printing mismatches --- src/lib/crypto/snarky_tests/snarky_tests.ml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/crypto/snarky_tests/snarky_tests.ml b/src/lib/crypto/snarky_tests/snarky_tests.ml index d948f1e1234b..a068e7b74374 100644 --- a/src/lib/crypto/snarky_tests/snarky_tests.ml +++ b/src/lib/crypto/snarky_tests/snarky_tests.ml @@ -606,9 +606,9 @@ module Protocol_circuits = struct Genesis_constants.(Proof_level.Full, Constraint_constants.compiled) let print_hash print expected digest : unit = - if print then Format.printf "expected:\n%s\n\n" expected ; - Format.printf "obtained:\n%s\n" digest ; - () + if print then ( + Format.printf "expected:\n%s\n" expected ; + Format.printf "obtained:\n%s\n" digest ) let blockchain () : unit = let expected = "0e1896d5c5840089da3304799c01efd8" in @@ -627,7 +627,7 @@ module Protocol_circuits = struct let transaction () : unit = let expected1 = "b8879f677f622a1d86648030701f43e1" in - let expected2 = "c9251dbcc565e8e18d15ca96d7908925" in + let expected2 = "6955d1ff31efa774b69a6b932ce9f165" in let digest = Transaction_snark.constraint_system_digests ~constraint_constants () in @@ -643,10 +643,10 @@ module Protocol_circuits = struct let digest2 = Core.Md5.to_hex hash2 in let check = String.(digest1 = expected1) in - print_hash check expected1 digest1 ; + print_hash (not check) expected1 digest1 ; assert check ; let check = String.(digest2 = expected2) in - print_hash check expected2 digest2 ; + print_hash (not check) expected2 digest2 ; assert check ; ()