From 5ddb822b685540c4f076370f9fe1ec0cf0f5f62c Mon Sep 17 00:00:00 2001 From: Antonio Locascio Date: Tue, 28 Mar 2023 13:54:12 +0200 Subject: [PATCH 1/6] ZKRU: lazily compute setup --- .../test/helpers/dummy_zk_rollup.ml | 48 +++++++++++-------- .../integration/operations/test_zk_rollup.ml | 20 +++++--- .../validate/manager_operation_helpers.ml | 9 ++-- .../test/pbt/test_zk_rollup_encoding.ml | 2 +- .../test/unit/test_zk_rollup_storage.ml | 2 +- tezt/tests/zk_rollup.ml | 3 +- 6 files changed, 51 insertions(+), 33 deletions(-) diff --git a/src/proto_alpha/lib_protocol/test/helpers/dummy_zk_rollup.ml b/src/proto_alpha/lib_protocol/test/helpers/dummy_zk_rollup.ml index 9370811f6d5a..68d89f2c7ea9 100644 --- a/src/proto_alpha/lib_protocol/test/helpers/dummy_zk_rollup.ml +++ b/src/proto_alpha/lib_protocol/test/helpers/dummy_zk_rollup.ml @@ -342,7 +342,10 @@ end) : sig val circuits : [`Public | `Private | `Fee] Plonk.SMap.t (** Commitment to the circuits *) - val public_parameters : Plonk.Main_protocol.verifier_public_parameters + val lazy_pp : + (Plonk.Main_protocol.prover_public_parameters + * Plonk.Main_protocol.verifier_public_parameters) + lazy_t (** [craft_update state ~zk_rollup ?private_ops ?exit_validities public_ops] will apply first the [public_ops], then the [private_ops]. While doing so, @@ -365,7 +368,7 @@ end) : sig val private_ops : Zk_rollup.Operation.t list list - val update_data : Zk_rollup.Update.t + val lazy_update_data : Zk_rollup.Update.t lazy_t end end = struct open Protocol.Alpha_context @@ -374,9 +377,10 @@ end = struct module T = Types.P module VC = V (LibCircuit) - let srs = - let open Bls12_381_polynomial in - (Srs.generate_insecure 9 1, Srs.generate_insecure 1 1) + let lazy_srs = + lazy + (let open Bls12_381_polynomial in + (Srs.generate_insecure 9 1, Srs.generate_insecure 1 1)) let dummy_l1_dst = Hex.to_bytes_exn (`Hex "0002298c03ed7d454a101eb7022bc95f7e5f41ac78") @@ -438,11 +442,13 @@ end = struct let circuits = SMap.(add "op" `Public @@ add batch_name `Private @@ add "fee" `Fee empty) - let prover_pp, public_parameters = - Plonk.Main_protocol.setup - ~zero_knowledge:false - (SMap.map (fun (a, b, _) -> (a, b)) circuit_map) - ~srs + let lazy_pp = + lazy + (let srs = Lazy.force lazy_srs in + Plonk.Main_protocol.setup + ~zero_knowledge:false + (SMap.map (fun (a, b, _) -> (a, b)) circuit_map) + ~srs) let insert s x m = match SMap.find_opt s m with @@ -457,6 +463,7 @@ end = struct Zk_rollup.Operation.t list -> Zk_rollup.State.t * Zk_rollup.Update.t = fun s ~zk_rollup ?(private_ops = []) ?exit_validities pending -> + let prover_pp, public_parameters = Lazy.force lazy_pp in let s = of_proto_state s in let rev_inputs = SMap.empty in let exit_validities = @@ -616,15 +623,16 @@ end = struct @@ Stdlib.List.init Params.batch_size (fun i -> if i mod 2 = 0 then false_op else true_op) - let update_data = - snd - @@ craft_update - init_state - ~zk_rollup: - (Data_encoding.Binary.of_bytes_exn - Zk_rollup.Address.encoding - dummy_rollup_id) - ~private_ops - pending + let lazy_update_data = + lazy + (snd + @@ craft_update + init_state + ~zk_rollup: + (Data_encoding.Binary.of_bytes_exn + Zk_rollup.Address.encoding + dummy_rollup_id) + ~private_ops + pending) end end diff --git a/src/proto_alpha/lib_protocol/test/integration/operations/test_zk_rollup.ml b/src/proto_alpha/lib_protocol/test/integration/operations/test_zk_rollup.ml index ad1c56be5850..87c9deb1be18 100644 --- a/src/proto_alpha/lib_protocol/test/integration/operations/test_zk_rollup.ml +++ b/src/proto_alpha/lib_protocol/test/integration/operations/test_zk_rollup.ml @@ -78,6 +78,7 @@ let check_proto_error e t = check_proto_error_f (( = ) e) t (* Check that originating a ZKRU fails when the feature flag is disabled. *) let test_disable_feature_flag () = let open Lwt_result_syntax in + let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in let* b, contract = Context.init_with_constants1 { @@ -91,7 +92,7 @@ let test_disable_feature_flag () = Op.zk_rollup_origination (I i) contract - ~public_parameters:Operator.public_parameters + ~public_parameters ~circuits_info:(of_plonk_smap Operator.circuits) ~init_state:Operator.init_state ~nb_ops:1 @@ -122,6 +123,7 @@ let test_origination_fees () = let* ctxt, contracts = context_init 1 in let* constants = Context.get_constants (B ctxt) in let contract = Stdlib.List.hd contracts in + let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in let expected_size = (* TODO: create ZK constant *) let origination_size = constants.parametric.tx_rollup.origination_size in @@ -130,7 +132,7 @@ let test_origination_fees () = { static = { - public_parameters = Operator.public_parameters; + public_parameters; state_length = 1; circuits_info = of_plonk_smap Operator.circuits; nb_ops = 1; @@ -155,7 +157,7 @@ let test_origination_fees () = Op.zk_rollup_origination (B ctxt) contract - ~public_parameters:Operator.public_parameters + ~public_parameters ~circuits_info:(of_plonk_smap Operator.circuits) ~init_state:Operator.init_state ~nb_ops:1 @@ -174,11 +176,12 @@ let test_origination_negative_nb_ops () = let open Lwt_result_syntax in let* ctxt, contracts = context_init 1 in let contract = Stdlib.List.hd contracts in + let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in let* operation, _rollup = Op.zk_rollup_origination (B ctxt) contract - ~public_parameters:Operator.public_parameters + ~public_parameters ~circuits_info:(of_plonk_smap Operator.circuits) ~init_state:Operator.init_state ~nb_ops:(-1) @@ -198,11 +201,12 @@ let init_and_originate n = let open Lwt_result_syntax in let* ctxt, contracts = context_init n in let contract = Stdlib.List.hd contracts in + let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in let* operation, rollup = Op.zk_rollup_origination (B ctxt) contract - ~public_parameters:Operator.public_parameters + ~public_parameters ~circuits_info:(of_plonk_smap Operator.circuits) ~init_state:Operator.init_state ~nb_ops:1 @@ -218,11 +222,12 @@ let test_originate_two_rollups () = let open Lwt_result_syntax in let* ctxt, contracts, zk_rollup1 = init_and_originate 1 in let contract = Stdlib.List.hd contracts in + let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in let* operation, zk_rollup2 = Op.zk_rollup_origination (B ctxt) contract - ~public_parameters:Operator.public_parameters + ~public_parameters ~circuits_info:(of_plonk_smap Operator.circuits) ~init_state:Operator.init_state ~nb_ops:1 @@ -859,6 +864,7 @@ let test_update_public_in_private () = *) let test_update_for_another_rollup () = let open Lwt_result_syntax in + let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in let* b, contracts, zk_rollup1, pkh = init_with_pending 3 in let contract0 = Stdlib.List.hd contracts in let contract1 = Stdlib.List.nth contracts 1 in @@ -869,7 +875,7 @@ let test_update_for_another_rollup () = Op.zk_rollup_origination (I i) contract0 - ~public_parameters:Operator.public_parameters + ~public_parameters ~circuits_info:(of_plonk_smap Operator.circuits) ~init_state:Operator.init_state ~nb_ops:1 diff --git a/src/proto_alpha/lib_protocol/test/integration/validate/manager_operation_helpers.ml b/src/proto_alpha/lib_protocol/test/integration/validate/manager_operation_helpers.ml index 07b83b17f42d..105689d74937 100644 --- a/src/proto_alpha/lib_protocol/test/integration/validate/manager_operation_helpers.ml +++ b/src/proto_alpha/lib_protocol/test/integration/validate/manager_operation_helpers.ml @@ -350,12 +350,13 @@ end) let originate_zk_rollup block rollup_account = let open Lwt_result_syntax in let rollup_contract = contract_of rollup_account in + let _prover_pp, public_parameters = Lazy.force ZKOperator.lazy_pp in let* rollup_origination, zk_rollup = Op.zk_rollup_origination ~force_reveal:true (B block) rollup_contract - ~public_parameters:ZKOperator.public_parameters + ~public_parameters ~circuits_info: (Zk_rollup.Account.SMap.of_seq @@ Plonk.SMap.to_seq ZKOperator.circuits) ~init_state:ZKOperator.init_state @@ -942,6 +943,7 @@ let mk_dal_publish_slot_header (oinfos : operation_req) (infos : infos) = let mk_zk_rollup_origination (oinfos : operation_req) (infos : infos) = let open Lwt_result_syntax in + let _prover_pp, public_parameters = Lazy.force ZKOperator.lazy_pp in let* op, _ = Op.zk_rollup_origination ?fee:oinfos.fee @@ -951,7 +953,7 @@ let mk_zk_rollup_origination (oinfos : operation_req) (infos : infos) = ?force_reveal:oinfos.force_reveal (B infos.ctxt.block) (contract_of (get_source infos)) - ~public_parameters:ZKOperator.public_parameters + ~public_parameters ~circuits_info: (Zk_rollup.Account.SMap.of_seq @@ Plonk.SMap.to_seq ZKOperator.circuits) ~init_state:ZKOperator.init_state @@ -983,6 +985,7 @@ let mk_zk_rollup_publish (oinfos : operation_req) (infos : infos) = let mk_zk_rollup_update (oinfos : operation_req) (infos : infos) = let open Lwt_result_syntax in let* zk_rollup = zk_rollup_of infos.ctxt.zk_rollup in + let update = Lazy.force ZKOperator.Internal_for_tests.lazy_update_data in let* op = Op.zk_rollup_update ?fee:oinfos.fee @@ -993,7 +996,7 @@ let mk_zk_rollup_update (oinfos : operation_req) (infos : infos) = (B infos.ctxt.block) (contract_of (get_source infos)) ~zk_rollup - ~update:ZKOperator.Internal_for_tests.update_data + ~update in return op diff --git a/src/proto_alpha/lib_protocol/test/pbt/test_zk_rollup_encoding.ml b/src/proto_alpha/lib_protocol/test/pbt/test_zk_rollup_encoding.ml index 43c128678890..847494457908 100644 --- a/src/proto_alpha/lib_protocol/test/pbt/test_zk_rollup_encoding.ml +++ b/src/proto_alpha/lib_protocol/test/pbt/test_zk_rollup_encoding.ml @@ -64,7 +64,7 @@ let gen_zkr_account = let open Gen in let open Zk_rollup_account_repr in let* state = gen_l2_state in - let public_parameters = Operator.public_parameters in + let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in let circuits_info = SMap.of_seq (Plonk.SMap.to_seq Operator.circuits) in let* nb_ops = nat in let static = diff --git a/src/proto_alpha/lib_protocol/test/unit/test_zk_rollup_storage.ml b/src/proto_alpha/lib_protocol/test/unit/test_zk_rollup_storage.ml index ed9220147784..f42b9ebbec32 100644 --- a/src/proto_alpha/lib_protocol/test/unit/test_zk_rollup_storage.ml +++ b/src/proto_alpha/lib_protocol/test/unit/test_zk_rollup_storage.ml @@ -110,7 +110,7 @@ module Raw_context_tests = struct let open Lwt_result_syntax in let open Zk_rollup_account_repr in let* ctx, contract = initial_ctx () in - let public_parameters = Operator.public_parameters in + let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in let state = Operator.init_state in let state_length = Array.length state in let circuits_info = SMap.of_seq @@ Plonk.SMap.to_seq Operator.circuits in diff --git a/tezt/tests/zk_rollup.ml b/tezt/tests/zk_rollup.ml index c33a3acdf8e8..94546b4d068a 100644 --- a/tezt/tests/zk_rollup.ml +++ b/tezt/tests/zk_rollup.ml @@ -51,10 +51,11 @@ module MakeHelpers () = struct let () = let contents = + let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in Data_encoding.Binary.( to_string_exn Tezos_protocol_alpha.Environment.Plonk.public_parameters_encoding - Operator.public_parameters) + public_parameters) in write_file public_parameters_file ~contents -- GitLab From e79876dcf17b88d684cacabd9f63cfa29c3809b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Tue, 28 Mar 2023 16:09:04 +0200 Subject: [PATCH 2/6] Mumbai/ZKRU: lazily compute the setup --- .../test/helpers/dummy_zk_rollup.ml | 48 +++++++++++-------- .../integration/operations/test_zk_rollup.ml | 20 +++++--- .../validate/manager_operation_helpers.ml | 9 ++-- .../test/pbt/test_zk_rollup_encoding.ml | 2 +- .../test/unit/test_zk_rollup_storage.ml | 2 +- 5 files changed, 49 insertions(+), 32 deletions(-) diff --git a/src/proto_016_PtMumbai/lib_protocol/test/helpers/dummy_zk_rollup.ml b/src/proto_016_PtMumbai/lib_protocol/test/helpers/dummy_zk_rollup.ml index 71407dfdd7aa..5c81adad3bf1 100644 --- a/src/proto_016_PtMumbai/lib_protocol/test/helpers/dummy_zk_rollup.ml +++ b/src/proto_016_PtMumbai/lib_protocol/test/helpers/dummy_zk_rollup.ml @@ -342,7 +342,10 @@ end) : sig val circuits : [`Public | `Private | `Fee] Plonk.SMap.t (** Commitment to the circuits *) - val public_parameters : Plonk.Main_protocol.verifier_public_parameters + val lazy_pp : + (Plonk.Main_protocol.prover_public_parameters + * Plonk.Main_protocol.verifier_public_parameters) + lazy_t (** [craft_update state ~zk_rollup ?private_ops ?exit_validities public_ops] will apply first the [public_ops], then the [private_ops]. While doing so, @@ -365,7 +368,7 @@ end) : sig val private_ops : Zk_rollup.Operation.t list list - val update_data : Zk_rollup.Update.t + val lazy_update_data : Zk_rollup.Update.t lazy_t end end = struct open Protocol.Alpha_context @@ -374,9 +377,10 @@ end = struct module T = Types.P module VC = V (LibCircuit) - let srs = - let open Bls12_381_polynomial in - (Srs.generate_insecure 9 1, Srs.generate_insecure 1 1) + let lazy_srs = + lazy + (let open Bls12_381_polynomial in + (Srs.generate_insecure 9 1, Srs.generate_insecure 1 1)) let dummy_l1_dst = Hex.to_bytes_exn (`Hex "0002298c03ed7d454a101eb7022bc95f7e5f41ac78") @@ -438,11 +442,13 @@ end = struct let circuits = SMap.(add "op" `Public @@ add batch_name `Private @@ add "fee" `Fee empty) - let prover_pp, public_parameters = - Plonk.Main_protocol.setup - ~zero_knowledge:false - (SMap.map (fun (a, b, _) -> (a, b)) circuit_map) - ~srs + let lazy_pp = + lazy + (let srs = Lazy.force lazy_srs in + Plonk.Main_protocol.setup + ~zero_knowledge:false + (SMap.map (fun (a, b, _) -> (a, b)) circuit_map) + ~srs) let insert s x m = match SMap.find_opt s m with @@ -457,6 +463,7 @@ end = struct Zk_rollup.Operation.t list -> Zk_rollup.State.t * Zk_rollup.Update.t = fun s ~zk_rollup ?(private_ops = []) ?exit_validities pending -> + let prover_pp, public_parameters = Lazy.force lazy_pp in let s = of_proto_state s in let rev_inputs = SMap.empty in let exit_validities = @@ -616,15 +623,16 @@ end = struct @@ Stdlib.List.init Params.batch_size (fun i -> if i mod 2 = 0 then false_op else true_op) - let update_data = - snd - @@ craft_update - init_state - ~zk_rollup: - (Data_encoding.Binary.of_bytes_exn - Zk_rollup.Address.encoding - dummy_rollup_id) - ~private_ops - pending + let lazy_update_data = + lazy + (snd + @@ craft_update + init_state + ~zk_rollup: + (Data_encoding.Binary.of_bytes_exn + Zk_rollup.Address.encoding + dummy_rollup_id) + ~private_ops + pending) end end diff --git a/src/proto_016_PtMumbai/lib_protocol/test/integration/operations/test_zk_rollup.ml b/src/proto_016_PtMumbai/lib_protocol/test/integration/operations/test_zk_rollup.ml index 2c0f35f51a8a..50802251a711 100644 --- a/src/proto_016_PtMumbai/lib_protocol/test/integration/operations/test_zk_rollup.ml +++ b/src/proto_016_PtMumbai/lib_protocol/test/integration/operations/test_zk_rollup.ml @@ -78,6 +78,7 @@ let check_proto_error e t = check_proto_error_f (( = ) e) t (* Check that originating a ZKRU fails when the feature flag is disabled. *) let test_disable_feature_flag () = + let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in let* b, contract = Context.init_with_constants1 { @@ -91,7 +92,7 @@ let test_disable_feature_flag () = Op.zk_rollup_origination (I i) contract - ~public_parameters:Operator.public_parameters + ~public_parameters ~circuits_info:(of_plonk_smap Operator.circuits) ~init_state:Operator.init_state ~nb_ops:1 @@ -121,6 +122,7 @@ let test_origination_fees () = let* ctxt, contracts = context_init 1 in let* constants = Context.get_constants (B ctxt) in let contract = Stdlib.List.hd contracts in + let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in let expected_size = (* TODO: create ZK constant *) let origination_size = constants.parametric.tx_rollup.origination_size in @@ -129,7 +131,7 @@ let test_origination_fees () = { static = { - public_parameters = Operator.public_parameters; + public_parameters; state_length = 1; circuits_info = of_plonk_smap Operator.circuits; nb_ops = 1; @@ -154,7 +156,7 @@ let test_origination_fees () = Op.zk_rollup_origination (B ctxt) contract - ~public_parameters:Operator.public_parameters + ~public_parameters ~circuits_info:(of_plonk_smap Operator.circuits) ~init_state:Operator.init_state ~nb_ops:1 @@ -172,11 +174,12 @@ let test_origination_fees () = let test_origination_negative_nb_ops () = let* ctxt, contracts = context_init 1 in let contract = Stdlib.List.hd contracts in + let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in let* operation, _rollup = Op.zk_rollup_origination (B ctxt) contract - ~public_parameters:Operator.public_parameters + ~public_parameters ~circuits_info:(of_plonk_smap Operator.circuits) ~init_state:Operator.init_state ~nb_ops:(-1) @@ -195,11 +198,12 @@ let test_origination_negative_nb_ops () = let init_and_originate n = let* ctxt, contracts = context_init n in let contract = Stdlib.List.hd contracts in + let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in let* operation, rollup = Op.zk_rollup_origination (B ctxt) contract - ~public_parameters:Operator.public_parameters + ~public_parameters ~circuits_info:(of_plonk_smap Operator.circuits) ~init_state:Operator.init_state ~nb_ops:1 @@ -214,11 +218,12 @@ let no_ticket op = (op, None) let test_originate_two_rollups () = let* ctxt, contracts, zk_rollup1 = init_and_originate 1 in let contract = Stdlib.List.hd contracts in + let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in let* operation, zk_rollup2 = Op.zk_rollup_origination (B ctxt) contract - ~public_parameters:Operator.public_parameters + ~public_parameters ~circuits_info:(of_plonk_smap Operator.circuits) ~init_state:Operator.init_state ~nb_ops:1 @@ -846,6 +851,7 @@ let test_update_public_in_private () = the Protocol uses the actual [op] from the pending list as input. *) let test_update_for_another_rollup () = + let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in let* b, contracts, zk_rollup1, pkh = init_with_pending 3 in let contract0 = Stdlib.List.hd contracts in let contract1 = Stdlib.List.nth contracts 1 in @@ -856,7 +862,7 @@ let test_update_for_another_rollup () = Op.zk_rollup_origination (I i) contract0 - ~public_parameters:Operator.public_parameters + ~public_parameters ~circuits_info:(of_plonk_smap Operator.circuits) ~init_state:Operator.init_state ~nb_ops:1 diff --git a/src/proto_016_PtMumbai/lib_protocol/test/integration/validate/manager_operation_helpers.ml b/src/proto_016_PtMumbai/lib_protocol/test/integration/validate/manager_operation_helpers.ml index c3110e25dcc5..15cb183e891f 100644 --- a/src/proto_016_PtMumbai/lib_protocol/test/integration/validate/manager_operation_helpers.ml +++ b/src/proto_016_PtMumbai/lib_protocol/test/integration/validate/manager_operation_helpers.ml @@ -385,13 +385,14 @@ end) let originate_zk_rollup block rollup_account = let open Lwt_result_syntax in + let _prover_pp, public_parameters = Lazy.force ZKOperator.lazy_pp in let rollup_contract = contract_of rollup_account in let* rollup_origination, zk_rollup = Op.zk_rollup_origination ~force_reveal:true (B block) rollup_contract - ~public_parameters:ZKOperator.public_parameters + ~public_parameters ~circuits_info: (Zk_rollup.Account.SMap.of_seq @@ Plonk.SMap.to_seq ZKOperator.circuits) ~init_state:ZKOperator.init_state @@ -1163,6 +1164,7 @@ let mk_dal_publish_slot_header (oinfos : operation_req) (infos : infos) = let mk_zk_rollup_origination (oinfos : operation_req) (infos : infos) = let open Lwt_result_syntax in + let _prover_pp, public_parameters = Lazy.force ZKOperator.lazy_pp in let* op, _ = Op.zk_rollup_origination ?fee:oinfos.fee @@ -1172,7 +1174,7 @@ let mk_zk_rollup_origination (oinfos : operation_req) (infos : infos) = ?force_reveal:oinfos.force_reveal (B infos.ctxt.block) (contract_of (get_source infos)) - ~public_parameters:ZKOperator.public_parameters + ~public_parameters ~circuits_info: (Zk_rollup.Account.SMap.of_seq @@ Plonk.SMap.to_seq ZKOperator.circuits) ~init_state:ZKOperator.init_state @@ -1204,6 +1206,7 @@ let mk_zk_rollup_publish (oinfos : operation_req) (infos : infos) = let mk_zk_rollup_update (oinfos : operation_req) (infos : infos) = let open Lwt_result_syntax in let* zk_rollup = zk_rollup_of infos.ctxt.zk_rollup in + let update = Lazy.force ZKOperator.Internal_for_tests.lazy_update_data in let* op = Op.zk_rollup_update ?fee:oinfos.fee @@ -1214,7 +1217,7 @@ let mk_zk_rollup_update (oinfos : operation_req) (infos : infos) = (B infos.ctxt.block) (contract_of (get_source infos)) ~zk_rollup - ~update:ZKOperator.Internal_for_tests.update_data + ~update in return op diff --git a/src/proto_016_PtMumbai/lib_protocol/test/pbt/test_zk_rollup_encoding.ml b/src/proto_016_PtMumbai/lib_protocol/test/pbt/test_zk_rollup_encoding.ml index 83b089fb9a21..0c283d3f29bf 100644 --- a/src/proto_016_PtMumbai/lib_protocol/test/pbt/test_zk_rollup_encoding.ml +++ b/src/proto_016_PtMumbai/lib_protocol/test/pbt/test_zk_rollup_encoding.ml @@ -64,7 +64,7 @@ let gen_zkr_account = let open Gen in let open Zk_rollup_account_repr in let* state = gen_l2_state in - let public_parameters = Operator.public_parameters in + let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in let circuits_info = SMap.of_seq (Plonk.SMap.to_seq Operator.circuits) in let* nb_ops = nat in let static = diff --git a/src/proto_016_PtMumbai/lib_protocol/test/unit/test_zk_rollup_storage.ml b/src/proto_016_PtMumbai/lib_protocol/test/unit/test_zk_rollup_storage.ml index 3ebb43dcec11..98afba3634ab 100644 --- a/src/proto_016_PtMumbai/lib_protocol/test/unit/test_zk_rollup_storage.ml +++ b/src/proto_016_PtMumbai/lib_protocol/test/unit/test_zk_rollup_storage.ml @@ -110,7 +110,7 @@ module Raw_context_tests = struct let open Lwt_result_syntax in let open Zk_rollup_account_repr in let* ctx, contract = initial_ctx () in - let public_parameters = Operator.public_parameters in + let _prover_pp, public_parameters = Lazy.force Operator.lazy_pp in let state = Operator.init_state in let state_length = Array.length state in let circuits_info = SMap.of_seq @@ Plonk.SMap.to_seq Operator.circuits in -- GitLab From 12c0ee793e9a8370c1d0b59c1c27da8484546575 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Tue, 28 Mar 2023 16:29:38 +0200 Subject: [PATCH 3/6] Lima/ZKRU: lazily compute the setup --- .../test/helpers/dummy_zk_rollup.ml | 31 ++++++++++--------- .../integration/operations/test_zk_rollup.ml | 18 +++++++---- .../validate/manager_operation_helpers.ml | 6 ++-- .../test/pbt/test_zk_rollup_encoding.ml | 2 +- .../test/unit/test_zk_rollup_storage.ml | 2 +- 5 files changed, 35 insertions(+), 24 deletions(-) diff --git a/src/proto_015_PtLimaPt/lib_protocol/test/helpers/dummy_zk_rollup.ml b/src/proto_015_PtLimaPt/lib_protocol/test/helpers/dummy_zk_rollup.ml index 8a1b26a90098..4c151881554b 100644 --- a/src/proto_015_PtLimaPt/lib_protocol/test/helpers/dummy_zk_rollup.ml +++ b/src/proto_015_PtLimaPt/lib_protocol/test/helpers/dummy_zk_rollup.ml @@ -333,7 +333,7 @@ end) : sig val circuits : bool Plonk.SMap.t (** Commitment to the circuits *) - val public_parameters : Environment.Plonk.public_parameters + val lazy_public_parameters : Environment.Plonk.public_parameters lazy_t module Internal_for_tests : sig val true_op : Zk_rollup.Operation.t @@ -351,9 +351,10 @@ end = struct module T = Types.P module VC = V (LibCircuit) - let srs = - let open Bls12_381_polynomial in - (Srs.generate_insecure 8 1, Srs.generate_insecure 1 1) + let lazy_srs = + lazy + (let open Bls12_381_polynomial in + (Srs.generate_insecure 8 1, Srs.generate_insecure 1 1)) let dummy_l1_dst = Hex.to_bytes_exn (`Hex "0002298c03ed7d454a101eb7022bc95f7e5f41ac78") @@ -413,16 +414,18 @@ end = struct let circuits = SMap.(add "op" false @@ add batch_name true @@ add "fee" false empty) - let public_parameters = - let dummy_transcript = Bytes.empty in - let verifier_public_parameters = - snd - @@ Plonk.Main_protocol.setup - ~zero_knowledge:false - (SMap.map (fun (a, b, _) -> (a, b)) circuit_map) - ~srs - in - (verifier_public_parameters, dummy_transcript) + let lazy_public_parameters = + lazy + (let srs = Lazy.force lazy_srs in + let dummy_transcript = Bytes.empty in + let verifier_public_parameters = + snd + @@ Plonk.Main_protocol.setup + ~zero_knowledge:false + (SMap.map (fun (a, b, _) -> (a, b)) circuit_map) + ~srs + in + (verifier_public_parameters, dummy_transcript)) let _insert s x m = match SMap.find_opt s m with diff --git a/src/proto_015_PtLimaPt/lib_protocol/test/integration/operations/test_zk_rollup.ml b/src/proto_015_PtLimaPt/lib_protocol/test/integration/operations/test_zk_rollup.ml index f58bde6f5c94..a8c2407e8e0c 100644 --- a/src/proto_015_PtLimaPt/lib_protocol/test/integration/operations/test_zk_rollup.ml +++ b/src/proto_015_PtLimaPt/lib_protocol/test/integration/operations/test_zk_rollup.ml @@ -87,11 +87,12 @@ let test_disable_feature_flag () = } in let* i = Incremental.begin_construction b in + let public_parameters = Lazy.force Operator.lazy_public_parameters in let* op, _zk_rollup = Op.zk_rollup_origination (I i) contract - ~public_parameters:Operator.public_parameters + ~public_parameters ~circuits_info:(of_plonk_smap Operator.circuits) ~init_state:Operator.init_state ~nb_ops:1 @@ -124,12 +125,13 @@ let test_origination_fees () = let expected_size = (* TODO: create ZK constant *) let origination_size = constants.parametric.tx_rollup.origination_size in + let public_parameters = Lazy.force Operator.lazy_public_parameters in let init_account = Zk_rollup.Account. { static = { - public_parameters = Operator.public_parameters; + public_parameters; state_length = 1; circuits_info = of_plonk_smap Operator.circuits; nb_ops = 1; @@ -150,11 +152,12 @@ let test_origination_fees () = let expected_fees = Tez.mul_exn constants.parametric.cost_per_byte expected_size in + let public_parameters = Lazy.force Operator.lazy_public_parameters in let* operation, _rollup = Op.zk_rollup_origination (B ctxt) contract - ~public_parameters:Operator.public_parameters + ~public_parameters ~circuits_info:(of_plonk_smap Operator.circuits) ~init_state:Operator.init_state ~nb_ops:1 @@ -172,11 +175,12 @@ let test_origination_fees () = let test_origination_negative_nb_ops () = let* ctxt, contracts = context_init 1 in let contract = Stdlib.List.hd contracts in + let public_parameters = Lazy.force Operator.lazy_public_parameters in let* operation, _rollup = Op.zk_rollup_origination (B ctxt) contract - ~public_parameters:Operator.public_parameters + ~public_parameters ~circuits_info:(of_plonk_smap Operator.circuits) ~init_state:Operator.init_state ~nb_ops:(-1) @@ -195,11 +199,12 @@ let test_origination_negative_nb_ops () = let init_and_originate n = let* ctxt, contracts = context_init n in let contract = Stdlib.List.hd contracts in + let public_parameters = Lazy.force Operator.lazy_public_parameters in let* operation, rollup = Op.zk_rollup_origination (B ctxt) contract - ~public_parameters:Operator.public_parameters + ~public_parameters ~circuits_info:(of_plonk_smap Operator.circuits) ~init_state:Operator.init_state ~nb_ops:1 @@ -214,11 +219,12 @@ let no_ticket op = (op, None) let test_originate_two_rollups () = let* ctxt, contracts, zk_rollup1 = init_and_originate 1 in let contract = Stdlib.List.hd contracts in + let public_parameters = Lazy.force Operator.lazy_public_parameters in let* operation, zk_rollup2 = Op.zk_rollup_origination (B ctxt) contract - ~public_parameters:Operator.public_parameters + ~public_parameters ~circuits_info:(of_plonk_smap Operator.circuits) ~init_state:Operator.init_state ~nb_ops:1 diff --git a/src/proto_015_PtLimaPt/lib_protocol/test/integration/validate/manager_operation_helpers.ml b/src/proto_015_PtLimaPt/lib_protocol/test/integration/validate/manager_operation_helpers.ml index c3a847e25293..b99b33fe641a 100644 --- a/src/proto_015_PtLimaPt/lib_protocol/test/integration/validate/manager_operation_helpers.ml +++ b/src/proto_015_PtLimaPt/lib_protocol/test/integration/validate/manager_operation_helpers.ml @@ -389,12 +389,13 @@ end) let originate_zk_rollup block rollup_account = let open Lwt_result_syntax in let rollup_contract = contract_of rollup_account in + let public_parameters = Lazy.force ZKOperator.lazy_public_parameters in let* rollup_origination, zk_rollup = Op.zk_rollup_origination ~force_reveal:true (B block) rollup_contract - ~public_parameters:ZKOperator.public_parameters + ~public_parameters ~circuits_info: (Zk_rollup.Account.SMap.of_seq @@ Plonk.SMap.to_seq ZKOperator.circuits) ~init_state:ZKOperator.init_state @@ -1129,6 +1130,7 @@ let mk_sc_rollup_return_bond (oinfos : operation_req) (infos : infos) = let mk_zk_rollup_origination (oinfos : operation_req) (infos : infos) = let open Lwt_result_syntax in + let public_parameters = Lazy.force ZKOperator.lazy_public_parameters in let* op, _ = Op.zk_rollup_origination ?fee:oinfos.fee @@ -1138,7 +1140,7 @@ let mk_zk_rollup_origination (oinfos : operation_req) (infos : infos) = ?force_reveal:oinfos.force_reveal (B infos.ctxt.block) (contract_of (get_source infos)) - ~public_parameters:ZKOperator.public_parameters + ~public_parameters ~circuits_info: (Zk_rollup.Account.SMap.of_seq @@ Plonk.SMap.to_seq ZKOperator.circuits) ~init_state:ZKOperator.init_state diff --git a/src/proto_015_PtLimaPt/lib_protocol/test/pbt/test_zk_rollup_encoding.ml b/src/proto_015_PtLimaPt/lib_protocol/test/pbt/test_zk_rollup_encoding.ml index 143fe7479fd6..00e9f10cda14 100644 --- a/src/proto_015_PtLimaPt/lib_protocol/test/pbt/test_zk_rollup_encoding.ml +++ b/src/proto_015_PtLimaPt/lib_protocol/test/pbt/test_zk_rollup_encoding.ml @@ -64,7 +64,7 @@ let gen_zkr_account = let open Gen in let open Zk_rollup_account_repr in let* state = gen_l2_state in - let public_parameters = Operator.public_parameters in + let public_parameters = Lazy.force Operator.lazy_public_parameters in let circuits_info = SMap.of_seq (Plonk.SMap.to_seq Operator.circuits) in let* nb_ops = nat in let static = diff --git a/src/proto_015_PtLimaPt/lib_protocol/test/unit/test_zk_rollup_storage.ml b/src/proto_015_PtLimaPt/lib_protocol/test/unit/test_zk_rollup_storage.ml index 1a41a7945dd6..16db25eaaf24 100644 --- a/src/proto_015_PtLimaPt/lib_protocol/test/unit/test_zk_rollup_storage.ml +++ b/src/proto_015_PtLimaPt/lib_protocol/test/unit/test_zk_rollup_storage.ml @@ -110,7 +110,7 @@ module Raw_context_tests = struct let open Lwt_result_syntax in let open Zk_rollup_account_repr in let* ctx, contract = initial_ctx () in - let public_parameters = Operator.public_parameters in + let public_parameters = Lazy.force Operator.lazy_public_parameters in let state = Operator.init_state in let state_length = Array.length state in let circuits_info = SMap.of_seq @@ Plonk.SMap.to_seq Operator.circuits in -- GitLab From 5ad69af35c18d5a8a1d4d526bfa4094ea5ef1743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Tue, 28 Mar 2023 14:58:30 +0200 Subject: [PATCH 4/6] DAL/Test: Initialisation of the DAL is lazy --- src/lib_crypto_dal/test/test_dal_cryptobox.ml | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/lib_crypto_dal/test/test_dal_cryptobox.ml b/src/lib_crypto_dal/test/test_dal_cryptobox.ml index 2a9865227f8b..4d1d4fa16b6c 100644 --- a/src/lib_crypto_dal/test/test_dal_cryptobox.ml +++ b/src/lib_crypto_dal/test/test_dal_cryptobox.ml @@ -37,18 +37,20 @@ module Test = struct (* The set of parameters maximizing the SRS length, and which is in the codomain of [generate_parameters]. *) let max_parameters = - let max_parameters : Cryptobox.parameters = - { - slot_size = 1 lsl max_slot_size_log2; - page_size = 1 lsl max_page_size_log2; - redundancy_factor = 1 lsl max_redundancy_factor_log2; - number_of_shards = 1; - } - in - Cryptobox.Internal_for_tests.parameters_initialisation max_parameters + lazy + (let max_parameters : Cryptobox.parameters = + { + slot_size = 1 lsl max_slot_size_log2; + page_size = 1 lsl max_page_size_log2; + redundancy_factor = 1 lsl max_redundancy_factor_log2; + number_of_shards = 1; + } + in + Cryptobox.Internal_for_tests.parameters_initialisation max_parameters) (* Initializes the DAL parameters *) - let init () = Cryptobox.Internal_for_tests.load_parameters max_parameters + let init () = + Cryptobox.Internal_for_tests.load_parameters (Lazy.force max_parameters) type parameters = { slot_size : int; -- GitLab From ebc8df4dd4e88314bcc2fe53cfb75e3732e7d77c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Tue, 28 Mar 2023 14:57:22 +0200 Subject: [PATCH 5/6] Alpha/Test: Initialisation of the cryptobox is lazy --- .../lib_protocol/test/helpers/dal_helpers.ml | 5 ++++- .../lib_protocol/test/helpers/dal_helpers.mli | 2 +- .../lib_protocol/test/pbt/test_dal_slot_proof.ml | 1 + .../lib_protocol/test/unit/test_dal_slot_proof.ml | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/proto_016_PtMumbai/lib_protocol/test/helpers/dal_helpers.ml b/src/proto_016_PtMumbai/lib_protocol/test/helpers/dal_helpers.ml index 6cdf1159263e..21854f77ec1d 100644 --- a/src/proto_016_PtMumbai/lib_protocol/test/helpers/dal_helpers.ml +++ b/src/proto_016_PtMumbai/lib_protocol/test/helpers/dal_helpers.ml @@ -67,7 +67,7 @@ let derive_dal_parameters (reference : Cryptobox.parameters) ~redundancy_factor module Make (Parameters : sig val dal_parameters : Alpha_context.Constants.Parametric.dal - val cryptobox : Cryptobox.t + val cryptobox : Cryptobox.t Lazy.t end) = struct (* Some global constants. *) @@ -90,6 +90,7 @@ struct let dal_mk_polynomial_from_slot slot_data = let open Result_syntax in + let cryptobox = Lazy.force cryptobox in match Cryptobox.polynomial_from_slot cryptobox slot_data with | Ok p -> return p | Error (`Slot_wrong_size s) -> @@ -101,6 +102,7 @@ struct let dal_mk_prove_page polynomial page_id = let open Result_syntax in + let cryptobox = Lazy.force cryptobox in match Cryptobox.prove_page cryptobox polynomial page_id.P.page_index with | Ok p -> return p | Error `Page_index_out_of_range -> @@ -113,6 +115,7 @@ struct let open Result_syntax in let slot_data = Bytes.init params.slot_size fill_function in let* polynomial = dal_mk_polynomial_from_slot slot_data in + let cryptobox = Lazy.force cryptobox in let* commitment = match Cryptobox.commit cryptobox polynomial with | Ok cm -> return cm diff --git a/src/proto_016_PtMumbai/lib_protocol/test/helpers/dal_helpers.mli b/src/proto_016_PtMumbai/lib_protocol/test/helpers/dal_helpers.mli index 2c2eb26e448a..ca85a0160907 100644 --- a/src/proto_016_PtMumbai/lib_protocol/test/helpers/dal_helpers.mli +++ b/src/proto_016_PtMumbai/lib_protocol/test/helpers/dal_helpers.mli @@ -41,7 +41,7 @@ val derive_dal_parameters : module Make (P : sig val dal_parameters : Alpha_context.Constants.Parametric.dal - val cryptobox : Cryptobox.t + val cryptobox : Cryptobox.t Lazy.t end) : sig (** Some global constants. *) diff --git a/src/proto_016_PtMumbai/lib_protocol/test/pbt/test_dal_slot_proof.ml b/src/proto_016_PtMumbai/lib_protocol/test/pbt/test_dal_slot_proof.ml index e6f95f7e5bed..7f5b53a5f03c 100644 --- a/src/proto_016_PtMumbai/lib_protocol/test/pbt/test_dal_slot_proof.ml +++ b/src/proto_016_PtMumbai/lib_protocol/test/pbt/test_dal_slot_proof.ml @@ -44,6 +44,7 @@ struct include Parameters let cryptobox = + Lazy.from_fun @@ fun () -> WithExceptions.Result.get_ok ~loc:__LOC__ @@ Dal_helpers.mk_cryptobox Parameters.dal_parameters.cryptobox_parameters end) diff --git a/src/proto_016_PtMumbai/lib_protocol/test/unit/test_dal_slot_proof.ml b/src/proto_016_PtMumbai/lib_protocol/test/unit/test_dal_slot_proof.ml index ba16f47c31ca..dcb8f9a94dc2 100644 --- a/src/proto_016_PtMumbai/lib_protocol/test/unit/test_dal_slot_proof.ml +++ b/src/proto_016_PtMumbai/lib_protocol/test/unit/test_dal_slot_proof.ml @@ -46,6 +46,7 @@ struct include Parameters let cryptobox = + Lazy.from_fun @@ fun () -> WithExceptions.Result.get_ok ~loc:__LOC__ @@ Dal_helpers.mk_cryptobox Parameters.dal_parameters.cryptobox_parameters end) -- GitLab From 8360a57ec0e4c1b9c2c616eae7140bb78a379b04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Tue, 28 Mar 2023 14:57:46 +0200 Subject: [PATCH 6/6] Mumbai/Test: Initialisation of the cryptobox is lazy --- src/proto_alpha/lib_protocol/test/helpers/dal_helpers.ml | 5 ++++- src/proto_alpha/lib_protocol/test/helpers/dal_helpers.mli | 2 +- src/proto_alpha/lib_protocol/test/pbt/test_dal_slot_proof.ml | 4 +++- .../lib_protocol/test/unit/test_dal_slot_proof.ml | 1 + 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/proto_alpha/lib_protocol/test/helpers/dal_helpers.ml b/src/proto_alpha/lib_protocol/test/helpers/dal_helpers.ml index eb0c3c7dce64..9aec26826fca 100644 --- a/src/proto_alpha/lib_protocol/test/helpers/dal_helpers.ml +++ b/src/proto_alpha/lib_protocol/test/helpers/dal_helpers.ml @@ -68,7 +68,7 @@ let derive_dal_parameters (reference : Cryptobox.parameters) ~redundancy_factor module Make (Parameters : sig val dal_parameters : Alpha_context.Constants.Parametric.dal - val cryptobox : Cryptobox.t + val cryptobox : Cryptobox.t Lazy.t end) = struct (* Some global constants. *) @@ -91,6 +91,7 @@ struct let dal_mk_polynomial_from_slot slot_data = let open Result_syntax in + let cryptobox = Lazy.force cryptobox in match Cryptobox.polynomial_from_slot cryptobox slot_data with | Ok p -> return p | Error (`Slot_wrong_size s) -> @@ -109,6 +110,7 @@ struct let dal_mk_prove_page polynomial page_id = let open Result_syntax in + let cryptobox = Lazy.force cryptobox in match Cryptobox.prove_page cryptobox polynomial page_id.P.page_index with | Ok p -> return p | Error `Page_index_out_of_range -> @@ -121,6 +123,7 @@ struct let open Result_syntax in let slot_data = Bytes.init params.slot_size fill_function in let* polynomial = dal_mk_polynomial_from_slot slot_data in + let cryptobox = Lazy.force cryptobox in let* commitment = dal_commit cryptobox polynomial in return ( slot_data, diff --git a/src/proto_alpha/lib_protocol/test/helpers/dal_helpers.mli b/src/proto_alpha/lib_protocol/test/helpers/dal_helpers.mli index ce6d0ac9baff..1eef4b51ec66 100644 --- a/src/proto_alpha/lib_protocol/test/helpers/dal_helpers.mli +++ b/src/proto_alpha/lib_protocol/test/helpers/dal_helpers.mli @@ -41,7 +41,7 @@ val derive_dal_parameters : module Make (P : sig val dal_parameters : Alpha_context.Constants.Parametric.dal - val cryptobox : Cryptobox.t + val cryptobox : Cryptobox.t Lazy.t end) : sig (** Some global constants. *) diff --git a/src/proto_alpha/lib_protocol/test/pbt/test_dal_slot_proof.ml b/src/proto_alpha/lib_protocol/test/pbt/test_dal_slot_proof.ml index 4e8f8a12dea0..1e08fa7cbd83 100644 --- a/src/proto_alpha/lib_protocol/test/pbt/test_dal_slot_proof.ml +++ b/src/proto_alpha/lib_protocol/test/pbt/test_dal_slot_proof.ml @@ -44,6 +44,7 @@ struct include Parameters let cryptobox = + Lazy.from_fun @@ fun () -> WithExceptions.Result.get_ok ~loc:__LOC__ @@ Dal_helpers.mk_cryptobox Parameters.dal_parameters.cryptobox_parameters end @@ -78,7 +79,8 @@ struct (fun _i -> 'x') in let* polynomial = dal_mk_polynomial_from_slot slot_data in - let* commitment = dal_commit ARG.cryptobox polynomial in + let cryptobox = Lazy.force ARG.cryptobox in + let* commitment = dal_commit cryptobox polynomial in let add_slot level sindex (cell, cache, slots_info) skip_slot = let index = Option.value_f diff --git a/src/proto_alpha/lib_protocol/test/unit/test_dal_slot_proof.ml b/src/proto_alpha/lib_protocol/test/unit/test_dal_slot_proof.ml index 54d885c5d4de..deb8e113d4cc 100644 --- a/src/proto_alpha/lib_protocol/test/unit/test_dal_slot_proof.ml +++ b/src/proto_alpha/lib_protocol/test/unit/test_dal_slot_proof.ml @@ -46,6 +46,7 @@ struct include Parameters let cryptobox = + Lazy.from_fun @@ fun () -> WithExceptions.Result.get_ok ~loc:__LOC__ @@ Dal_helpers.mk_cryptobox Parameters.dal_parameters.cryptobox_parameters end) -- GitLab