From 55a216bd152e3d270044a890e3d45a928021879e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Tue, 25 Oct 2022 10:01:43 +0200 Subject: [PATCH 1/5] Dal: Rename parameter 'nb_pages' into 'pages_per_slot' --- src/lib_crypto_dal/cryptobox.ml | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/lib_crypto_dal/cryptobox.ml b/src/lib_crypto_dal/cryptobox.ml index a10c0345851f..5c799f461c0b 100644 --- a/src/lib_crypto_dal/cryptobox.ml +++ b/src/lib_crypto_dal/cryptobox.ml @@ -281,7 +281,7 @@ module Inner = struct (* Domain for the FFT on erasure encoded slots (as polynomials). *) shard_size : int; (* Length of a shard in terms of scalar elements. *) - nb_pages : int; + pages_per_slot : int; (* Number of slot pages. *) page_length : int; remaining_bytes : int; @@ -381,7 +381,7 @@ module Inner = struct domain_2k = make_domain (2 * k); domain_n = make_domain n; shard_size; - nb_pages = slot_size / page_size; + pages_per_slot = slot_size / page_size; page_length; remaining_bytes = page_size mod scalar_bytes_amount; evaluations_log; @@ -412,19 +412,19 @@ module Inner = struct else let offset = ref 0 in let res = Array.init t.k (fun _ -> Scalar.(copy zero)) in - for page = 0 to t.nb_pages - 1 do + for page = 0 to t.pages_per_slot - 1 do for elt = 0 to t.page_length - 1 do if !offset > t.slot_size then () else if elt = t.page_length - 1 then ( let dst = Bytes.create t.remaining_bytes in Bytes.blit slot !offset dst 0 t.remaining_bytes ; offset := !offset + t.remaining_bytes ; - res.((elt * t.nb_pages) + page) <- Scalar.of_bytes_exn dst) + res.((elt * t.pages_per_slot) + page) <- Scalar.of_bytes_exn dst) else let dst = Bytes.create scalar_bytes_amount in Bytes.blit slot !offset dst 0 scalar_bytes_amount ; offset := !offset + scalar_bytes_amount ; - res.((elt * t.nb_pages) + page) <- Scalar.of_bytes_exn dst + res.((elt * t.pages_per_slot) + page) <- Scalar.of_bytes_exn dst done done ; Ok res @@ -436,7 +436,7 @@ module Inner = struct let eval_coset t eval slot offset page = for elt = 0 to t.page_length - 1 do - let idx = (elt * t.nb_pages) + page in + let idx = (elt * t.pages_per_slot) + page in let coeff = Scalar.to_bytes (Array.get eval idx) in if elt = t.page_length - 1 then ( Bytes.blit coeff 0 slot !offset t.remaining_bytes ; @@ -452,7 +452,7 @@ module Inner = struct let eval = Evaluations.(evaluation_fft t.domain_k p |> to_array) in let slot = Bytes.init t.slot_size (fun _ -> '0') in let offset = ref 0 in - for page = 0 to t.nb_pages - 1 do + for page = 0 to t.pages_per_slot - 1 do eval_coset t eval slot offset page done ; slot @@ -803,7 +803,7 @@ module Inner = struct ]) let prove_page t p page_index = - if page_index < 0 || page_index >= t.nb_pages then + if page_index < 0 || page_index >= t.pages_per_slot then Error `Segment_index_out_of_range else let l = 1 lsl Z.(log2up (of_int t.page_length)) in @@ -813,10 +813,12 @@ module Inner = struct in Ok (commit t quotient) + let pages_per_slot t = t.pages_per_slot + (* Parses the [slot_page] to get the evaluations that it contains. The evaluation points are given by the [slot_page_index]. *) let verify_page t cm {index = slot_page_index; content = slot_page} proof = - if slot_page_index < 0 || slot_page_index >= t.nb_pages then + if slot_page_index < 0 || slot_page_index >= t.pages_per_slot then Error `Segment_index_out_of_range else let domain = Domains.build ~log:Z.(log2up (of_int t.page_length)) in -- GitLab From e5723d7c5c8948782df9d4f189fa805cfa8da8cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Tue, 25 Oct 2022 10:01:04 +0200 Subject: [PATCH 2/5] Dal: Export the number of pages per slot --- src/lib_crypto_dal/cryptobox.ml | 10 ++++++---- src/lib_crypto_dal/cryptobox_intf.ml | 11 +++++++---- src/lib_protocol_environment/sigs/v8.ml | 11 +++++++---- src/lib_protocol_environment/sigs/v8/dal.mli | 11 +++++++---- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/lib_crypto_dal/cryptobox.ml b/src/lib_crypto_dal/cryptobox.ml index 5c799f461c0b..5add41b8f48c 100644 --- a/src/lib_crypto_dal/cryptobox.ml +++ b/src/lib_crypto_dal/cryptobox.ml @@ -346,9 +346,13 @@ module Inner = struct (req "slot_size" int31) (req "number_of_shards" uint16)) + let pages_per_slot {slot_size; page_size; _} = slot_size / page_size + (* Error cases of this functions are not encapsulated into `tzresult` for modularity reasons. *) - let make {redundancy_factor; slot_size; page_size; number_of_shards} = + let make + ({redundancy_factor; slot_size; page_size; number_of_shards} as + parameters) = let open Result_syntax in let k = slot_as_polynomial_length ~slot_size in let n = redundancy_factor * k in @@ -381,7 +385,7 @@ module Inner = struct domain_2k = make_domain (2 * k); domain_n = make_domain n; shard_size; - pages_per_slot = slot_size / page_size; + pages_per_slot = pages_per_slot parameters; page_length; remaining_bytes = page_size mod scalar_bytes_amount; evaluations_log; @@ -813,8 +817,6 @@ module Inner = struct in Ok (commit t quotient) - let pages_per_slot t = t.pages_per_slot - (* Parses the [slot_page] to get the evaluations that it contains. The evaluation points are given by the [slot_page_index]. *) let verify_page t cm {index = slot_page_index; content = slot_page} proof = diff --git a/src/lib_crypto_dal/cryptobox_intf.ml b/src/lib_crypto_dal/cryptobox_intf.ml index 95c0f4fb266c..be90ae7dbc78 100644 --- a/src/lib_crypto_dal/cryptobox_intf.ml +++ b/src/lib_crypto_dal/cryptobox_intf.ml @@ -95,10 +95,13 @@ module type VERIFIER = sig (** An encoding for the proof of a page. *) val page_proof_encoding : page_proof Data_encoding.t - (** [verify_page t srs commitment page page_proof] returns [Ok - true] if the [proof] certifies that the [slot_page] is indeed - included in the slot committed with commitment - [commitment]. Returns [Ok false] otherwise. + (** [pages_per_slot t] returns the number of expected pages per slot. *) + val pages_per_slot : parameters -> int + + (** [verify_page t srs commitment page page_proof] returns [Ok true] + if the [proof] certifies that the [slot_page] is indeed included + in the slot committed with commitment [commitment]. Returns [Ok + false] otherwise. Fails if the index of the page is out of range. *) val verify_page : diff --git a/src/lib_protocol_environment/sigs/v8.ml b/src/lib_protocol_environment/sigs/v8.ml index 40ed1bd693f8..d2c8b9cb9a00 100644 --- a/src/lib_protocol_environment/sigs/v8.ml +++ b/src/lib_protocol_environment/sigs/v8.ml @@ -11961,10 +11961,13 @@ type page_proof (** An encoding for the proof of a page. *) val page_proof_encoding : page_proof Data_encoding.t -(** [verify_page t commitment page page_proof] returns [Ok - true] if the [proof] certifies that the [slot_page] is indeed - included in the slot committed with commitment - [commitment]. Returns [Ok false] otherwise. +(** [pages_per_slot t] returns the number of expected pages per slot. *) +val pages_per_slot : parameters -> int + +(** [verify_page t srs commitment page page_proof] returns [Ok true] + if the [proof] certifies that the [slot_page] is indeed included + in the slot committed with commitment [commitment]. Returns [Ok + false] otherwise. Fails if the index of the page is out of range. *) val verify_page : diff --git a/src/lib_protocol_environment/sigs/v8/dal.mli b/src/lib_protocol_environment/sigs/v8/dal.mli index a81d669d7c79..911704b38628 100644 --- a/src/lib_protocol_environment/sigs/v8/dal.mli +++ b/src/lib_protocol_environment/sigs/v8/dal.mli @@ -89,10 +89,13 @@ type page_proof (** An encoding for the proof of a page. *) val page_proof_encoding : page_proof Data_encoding.t -(** [verify_page t commitment page page_proof] returns [Ok - true] if the [proof] certifies that the [slot_page] is indeed - included in the slot committed with commitment - [commitment]. Returns [Ok false] otherwise. +(** [pages_per_slot t] returns the number of expected pages per slot. *) +val pages_per_slot : parameters -> int + +(** [verify_page t srs commitment page page_proof] returns [Ok true] + if the [proof] certifies that the [slot_page] is indeed included + in the slot committed with commitment [commitment]. Returns [Ok + false] otherwise. Fails if the index of the page is out of range. *) val verify_page : -- GitLab From 378972352909570a569ba289fb8a5bc31390623c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Tue, 25 Oct 2022 10:02:14 +0200 Subject: [PATCH 3/5] Dal: `verify_segment' now check the length of the page content --- src/lib_crypto_dal/cryptobox.ml | 71 ++++++++++--------- src/lib_crypto_dal/cryptobox_intf.ml | 6 +- .../environment_V7.ml | 11 ++- src/lib_protocol_environment/sigs/v8.ml | 8 +-- src/lib_protocol_environment/sigs/v8/dal.mli | 8 +-- src/proto_alpha/lib_protocol/dal_slot_repr.ml | 7 +- 6 files changed, 65 insertions(+), 46 deletions(-) diff --git a/src/lib_crypto_dal/cryptobox.ml b/src/lib_crypto_dal/cryptobox.ml index 5add41b8f48c..73200b2427ff 100644 --- a/src/lib_crypto_dal/cryptobox.ml +++ b/src/lib_crypto_dal/cryptobox.ml @@ -823,39 +823,44 @@ module Inner = struct if slot_page_index < 0 || slot_page_index >= t.pages_per_slot then Error `Segment_index_out_of_range else - let domain = Domains.build ~log:Z.(log2up (of_int t.page_length)) in - let slot_page_evaluations = - Array.init - (1 lsl Z.(log2up (of_int t.page_length))) - (function - | i when i < t.page_length - 1 -> - let dst = Bytes.create scalar_bytes_amount in - Bytes.blit - slot_page - (i * scalar_bytes_amount) - dst - 0 - scalar_bytes_amount ; - Scalar.of_bytes_exn dst - | i when i = t.page_length - 1 -> - let dst = Bytes.create t.remaining_bytes in - Bytes.blit - slot_page - (i * scalar_bytes_amount) - dst - 0 - t.remaining_bytes ; - Scalar.of_bytes_exn dst - | _ -> Scalar.(copy zero)) - in - Ok - (verify - t - cm - t.srs.kate_amortized_srs_g2_pages - domain - (Domains.get t.domain_k slot_page_index, slot_page_evaluations) - proof) + let expected_page_length = t.page_size in + let got_page_length = Bytes.length slot_page in + if expected_page_length <> got_page_length then + Error `Page_length_mismatch + else + let domain = Domains.build ~log:Z.(log2up (of_int t.page_length)) in + let slot_page_evaluations = + Array.init + (1 lsl Z.(log2up (of_int t.page_length))) + (function + | i when i < t.page_length - 1 -> + let dst = Bytes.create scalar_bytes_amount in + Bytes.blit + slot_page + (i * scalar_bytes_amount) + dst + 0 + scalar_bytes_amount ; + Scalar.of_bytes_exn dst + | i when i = t.page_length - 1 -> + let dst = Bytes.create t.remaining_bytes in + Bytes.blit + slot_page + (i * scalar_bytes_amount) + dst + 0 + t.remaining_bytes ; + Scalar.of_bytes_exn dst + | _ -> Scalar.(copy zero)) + in + Ok + (verify + t + cm + t.srs.kate_amortized_srs_g2_pages + domain + (Domains.get t.domain_k slot_page_index, slot_page_evaluations) + proof) end include Inner diff --git a/src/lib_crypto_dal/cryptobox_intf.ml b/src/lib_crypto_dal/cryptobox_intf.ml index be90ae7dbc78..d7bd0d814274 100644 --- a/src/lib_crypto_dal/cryptobox_intf.ml +++ b/src/lib_crypto_dal/cryptobox_intf.ml @@ -103,11 +103,13 @@ module type VERIFIER = sig in the slot committed with commitment [commitment]. Returns [Ok false] otherwise. - Fails if the index of the page is out of range. *) + Fails if the index of the page is out of range or if the page is + not of the expected length [page_size] given for the + initialisation of [t]. *) val verify_page : t -> commitment -> page -> page_proof -> - (bool, [> `Segment_index_out_of_range]) Result.t + (bool, [> `Segment_index_out_of_range | `Page_length_mismatch]) Result.t end diff --git a/src/lib_protocol_environment/environment_V7.ml b/src/lib_protocol_environment/environment_V7.ml index b77c5e9c06c7..4f6d306d9952 100644 --- a/src/lib_protocol_environment/environment_V7.ml +++ b/src/lib_protocol_environment/environment_V7.ml @@ -1398,5 +1398,14 @@ struct module Equality_witness = Environment_context.Equality_witness module Plonk = Tezos_protocol_environment_structs.V7.Plonk - module Dal = Tezos_crypto_dal.Cryptobox.Verifier + + module Dal = struct + include Tezos_crypto_dal.Cryptobox.Verifier + + let verify_page t sh page proof = + match verify_page t sh page proof with + | Error `Page_length_mismatch -> Ok false + | Error `Segment_index_out_of_range -> Error `Segment_index_out_of_range + | Ok r -> Ok r + end end diff --git a/src/lib_protocol_environment/sigs/v8.ml b/src/lib_protocol_environment/sigs/v8.ml index d2c8b9cb9a00..04e45ef17d3a 100644 --- a/src/lib_protocol_environment/sigs/v8.ml +++ b/src/lib_protocol_environment/sigs/v8.ml @@ -11969,15 +11969,15 @@ val pages_per_slot : parameters -> int in the slot committed with commitment [commitment]. Returns [Ok false] otherwise. - Fails if the index of the page is out of range. *) + Fails if the index of the page is out of range or if the page is + not of the expected length [page_size] given for the + initialisation of [t]. *) val verify_page : t -> commitment -> page -> page_proof -> - ( bool, - [> `Degree_exceeds_srs_length of string | `Segment_index_out_of_range] ) - Result.t + (bool, [> `Segment_index_out_of_range | `Page_length_mismatch]) Result.t end # 136 "v8.in.ml" diff --git a/src/lib_protocol_environment/sigs/v8/dal.mli b/src/lib_protocol_environment/sigs/v8/dal.mli index 911704b38628..b8a7d918e6aa 100644 --- a/src/lib_protocol_environment/sigs/v8/dal.mli +++ b/src/lib_protocol_environment/sigs/v8/dal.mli @@ -97,12 +97,12 @@ val pages_per_slot : parameters -> int in the slot committed with commitment [commitment]. Returns [Ok false] otherwise. - Fails if the index of the page is out of range. *) + Fails if the index of the page is out of range or if the page is + not of the expected length [page_size] given for the + initialisation of [t]. *) val verify_page : t -> commitment -> page -> page_proof -> - ( bool, - [> `Degree_exceeds_srs_length of string | `Segment_index_out_of_range] ) - Result.t + (bool, [> `Segment_index_out_of_range | `Page_length_mismatch]) Result.t diff --git a/src/proto_alpha/lib_protocol/dal_slot_repr.ml b/src/proto_alpha/lib_protocol/dal_slot_repr.ml index 7448c9ce5a60..9a23410edc33 100644 --- a/src/proto_alpha/lib_protocol/dal_slot_repr.ml +++ b/src/proto_alpha/lib_protocol/dal_slot_repr.ml @@ -631,9 +631,12 @@ module History = struct "Wrong page content for the given page index and slot commitment" | Error `Segment_index_out_of_range -> fail_with_error_msg "Segment_index_out_of_range" - | Error (`Degree_exceeds_srs_length s) -> + | Error `Page_length_mismatch -> fail_with_error_msg - @@ Format.sprintf "Degree_exceeds_srs_length: %s" s + @@ Format.sprintf + "Page_length_mismatch: Expected:%d. Got: %d" + dal_params.page_size + (Bytes.length page.content) let produce_proof dal_params page_id ~page_info slots_hist hist_cache = let open Lwt_tzresult_syntax in -- GitLab From 9f7eefef5ae4fe9989adb0d246e709e362886458 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Tue, 25 Oct 2022 13:50:57 +0200 Subject: [PATCH 4/5] Dal: Export a parameter function --- src/lib_crypto_dal/cryptobox.ml | 12 ++++-------- src/lib_crypto_dal/cryptobox.mli | 3 --- src/lib_crypto_dal/cryptobox_intf.ml | 4 ++++ src/lib_protocol_environment/sigs/v8.ml | 4 ++++ src/lib_protocol_environment/sigs/v8/dal.mli | 4 ++++ 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/lib_crypto_dal/cryptobox.ml b/src/lib_crypto_dal/cryptobox.ml index 73200b2427ff..0651cfd3335b 100644 --- a/src/lib_crypto_dal/cryptobox.ml +++ b/src/lib_crypto_dal/cryptobox.ml @@ -396,6 +396,10 @@ module Inner = struct in ensure_validity t + let parameters + ({redundancy_factor; slot_size; page_size; number_of_shards; _} : t) = + {redundancy_factor; slot_size; page_size; number_of_shards} + let polynomial_degree = Polynomials.degree let polynomial_evaluate = Polynomials.evaluate @@ -878,12 +882,4 @@ module Internal_for_tests = struct {srs_g1; srs_g2} let load_parameters parameters = initialisation_parameters := Some parameters - - let parameters (t : t) = - { - redundancy_factor = t.redundancy_factor; - slot_size = t.slot_size; - page_size = t.page_size; - number_of_shards = t.number_of_shards; - } end diff --git a/src/lib_crypto_dal/cryptobox.mli b/src/lib_crypto_dal/cryptobox.mli index 37c8e2b53178..afa68d7049ac 100644 --- a/src/lib_crypto_dal/cryptobox.mli +++ b/src/lib_crypto_dal/cryptobox.mli @@ -218,7 +218,4 @@ module Internal_for_tests : sig from test frameworks where tests with various parameters could be run using the same binary. *) val load_parameters : initialisation_parameters -> unit - - (** [parameters t] returns the parameters with which [t] was initialized. *) - val parameters : t -> parameters end diff --git a/src/lib_crypto_dal/cryptobox_intf.ml b/src/lib_crypto_dal/cryptobox_intf.ml index d7bd0d814274..825bc4f002ef 100644 --- a/src/lib_crypto_dal/cryptobox_intf.ml +++ b/src/lib_crypto_dal/cryptobox_intf.ml @@ -65,6 +65,10 @@ module type VERIFIER = sig primitives defined in this module and stores them in a value of type [t] *) val make : parameters -> (t, [> `Fail of string]) result + (** [parameters t] returns the parameters given when [t] was + initialised with the function {!val:make} *) + val parameters : t -> parameters + (** Commitment to a polynomial. *) type commitment diff --git a/src/lib_protocol_environment/sigs/v8.ml b/src/lib_protocol_environment/sigs/v8.ml index 04e45ef17d3a..e494e59c5432 100644 --- a/src/lib_protocol_environment/sigs/v8.ml +++ b/src/lib_protocol_environment/sigs/v8.ml @@ -11913,6 +11913,10 @@ val parameters_encoding : parameters Data_encoding.t defined in this module and store them in a value of type [t] *) val make : parameters -> (t, [> `Fail of string]) result +(** [parameters t] returns the parameters given when [t] was + initialised with the function {!val:make} *) +val parameters : t -> parameters + (** Commitment to a polynomial. *) type commitment diff --git a/src/lib_protocol_environment/sigs/v8/dal.mli b/src/lib_protocol_environment/sigs/v8/dal.mli index b8a7d918e6aa..7950e6e1ea20 100644 --- a/src/lib_protocol_environment/sigs/v8/dal.mli +++ b/src/lib_protocol_environment/sigs/v8/dal.mli @@ -41,6 +41,10 @@ val parameters_encoding : parameters Data_encoding.t defined in this module and store them in a value of type [t] *) val make : parameters -> (t, [> `Fail of string]) result +(** [parameters t] returns the parameters given when [t] was + initialised with the function {!val:make} *) +val parameters : t -> parameters + (** Commitment to a polynomial. *) type commitment -- GitLab From 20e5bf406af9204d1b2245c70cb2fa8b93a0fade Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Tue, 25 Oct 2022 14:19:28 +0200 Subject: [PATCH 5/5] Protocol/DAL: use pages_per_slot --- .../bin_sc_rollup_node/dal_slots_tracker.ml | 2 +- .../lib_parameters/default_parameters.ml | 4 +-- src/proto_alpha/lib_protocol/alpha_context.ml | 2 ++ .../lib_protocol/alpha_context.mli | 16 ++++++---- src/proto_alpha/lib_protocol/dal_slot_repr.ml | 20 ++++++------ .../lib_protocol/dal_slot_repr.mli | 32 ++++++++++--------- .../lib_protocol/test/helpers/dal_helpers.ml | 4 +-- 7 files changed, 44 insertions(+), 36 deletions(-) diff --git a/src/proto_alpha/bin_sc_rollup_node/dal_slots_tracker.ml b/src/proto_alpha/bin_sc_rollup_node/dal_slots_tracker.ml index f988042e4372..eabf13ed0045 100644 --- a/src/proto_alpha/bin_sc_rollup_node/dal_slots_tracker.ml +++ b/src/proto_alpha/bin_sc_rollup_node/dal_slots_tracker.ml @@ -230,7 +230,7 @@ let download_and_save_slots @@ Bitset.inter subscribed_slots_indexes confirmed_slots_indexes in let params = protocol_constants.parametric.dal.cryptobox_parameters in - let number_of_pages = params.slot_size / params.page_size in + let number_of_pages = Dal.Page.pages_per_slot params in (* DAL/FIXME: https://gitlab.com/tezos/tezos/-/issues/2766. As part of the clean rollup storage workflow, we should make sure that pages for old slots are removed from the storage when not needed anymore. diff --git a/src/proto_alpha/lib_parameters/default_parameters.ml b/src/proto_alpha/lib_parameters/default_parameters.ml index 629fd3e63e80..91041cab3b54 100644 --- a/src/proto_alpha/lib_parameters/default_parameters.ml +++ b/src/proto_alpha/lib_parameters/default_parameters.ml @@ -60,7 +60,7 @@ let sc_rollup_timeout_period_in_blocks = 20_160 Think harder about those values. *) let default_cryptobox_parameters = { - Dal.Slots_history.page_size = 4096; + Dal.page_size = 4096; slot_size = 1 lsl 20; redundancy_factor = 16; number_of_shards = 2048; @@ -276,7 +276,7 @@ let constants_mainnet = let derive_cryptobox_parameters ~redundancy_factor ~mainnet_constants_divider = let m = default_cryptobox_parameters in { - Dal.Slots_history.redundancy_factor; + Dal.redundancy_factor; page_size = m.page_size / mainnet_constants_divider; slot_size = m.slot_size / mainnet_constants_divider; number_of_shards = m.number_of_shards / mainnet_constants_divider; diff --git a/src/proto_alpha/lib_protocol/alpha_context.ml b/src/proto_alpha/lib_protocol/alpha_context.ml index 1edf9aa6825f..2e60209824c1 100644 --- a/src/proto_alpha/lib_protocol/alpha_context.ml +++ b/src/proto_alpha/lib_protocol/alpha_context.ml @@ -97,6 +97,8 @@ module Sc_rollup = struct end module Dal = struct + include Dal_slot_repr + module Slot_index = struct include Dal_slot_repr.Index end diff --git a/src/proto_alpha/lib_protocol/alpha_context.mli b/src/proto_alpha/lib_protocol/alpha_context.mli index f04a6959c5d8..8c838787e522 100644 --- a/src/proto_alpha/lib_protocol/alpha_context.mli +++ b/src/proto_alpha/lib_protocol/alpha_context.mli @@ -2782,6 +2782,13 @@ end (** This module exposes definitions for the data-availability layer. *) module Dal : sig + type parameters = Dal.parameters = { + redundancy_factor : int; + page_size : int; + slot_size : int; + number_of_shards : int; + } + (** This module re-exports definitions from {!Dal_slot_repr.Index}. *) module Slot_index : sig type t @@ -2822,6 +2829,8 @@ module Dal : sig module Page : sig type content = bytes + val pages_per_slot : parameters -> int + module Index : sig type t = int @@ -2904,13 +2913,6 @@ module Dal : sig Slot.Header.t list -> (t * History_cache.t) tzresult - type dal_parameters = Dal.parameters = { - redundancy_factor : int; - page_size : int; - slot_size : int; - number_of_shards : int; - } - type proof end diff --git a/src/proto_alpha/lib_protocol/dal_slot_repr.ml b/src/proto_alpha/lib_protocol/dal_slot_repr.ml index 9a23410edc33..bb7d89917a92 100644 --- a/src/proto_alpha/lib_protocol/dal_slot_repr.ml +++ b/src/proto_alpha/lib_protocol/dal_slot_repr.ml @@ -23,6 +23,15 @@ (* *) (*****************************************************************************) +type parameters = Dal.parameters = { + redundancy_factor : int; + page_size : int; + slot_size : int; + number_of_shards : int; +} + +let parameters_encoding = Dal.parameters_encoding + module Commitment = struct (* DAL/FIXME https://gitlab.com/tezos/tezos/-/issues/3389 @@ -120,6 +129,8 @@ module Page = struct type slot_index = Index.t + let pages_per_slot = Dal.pages_per_slot + module Index = struct type t = int @@ -586,15 +597,6 @@ module History = struct pp_inclusion_proof next_inc_proof - type dal_parameters = Dal.parameters = { - redundancy_factor : int; - page_size : int; - slot_size : int; - number_of_shards : int; - } - - let dal_parameters_encoding = Dal.parameters_encoding - type error += Dal_proof_error of string let () = diff --git a/src/proto_alpha/lib_protocol/dal_slot_repr.mli b/src/proto_alpha/lib_protocol/dal_slot_repr.mli index cb39a47ea04c..a17d2d713a2a 100644 --- a/src/proto_alpha/lib_protocol/dal_slot_repr.mli +++ b/src/proto_alpha/lib_protocol/dal_slot_repr.mli @@ -23,6 +23,19 @@ (* *) (*****************************************************************************) +(** To verify the proof of a page membership in its associated slot, the + Cryptobox module needs the following Dal parameters. These are part of the + protocol's parameters. See {!Default_parameters.default_dal}. *) +type parameters = Dal.parameters = { + redundancy_factor : int; + page_size : int; + slot_size : int; + number_of_shards : int; +} + +(** An encoding for values of type {!parameters}. *) +val parameters_encoding : parameters Data_encoding.t + (** Slot header representation for the data-availability layer. {1 Overview} @@ -109,6 +122,8 @@ module Page : sig type slot_index = Index.t + val pages_per_slot : Dal.parameters -> int + module Index : sig type t = int @@ -242,19 +257,6 @@ module History : sig (** Pretty-printer for {!proof}. *) val pp_proof : Format.formatter -> proof -> unit - (** To verify the proof of a page membership in its associated slot, the - Cryptobox module needs the following Dal parameters. These are part of the - protocol's parameters. See {!Default_parameters.default_dal}. *) - type dal_parameters = Dal.parameters = { - redundancy_factor : int; - page_size : int; - slot_size : int; - number_of_shards : int; - } - - (** An encoding for values of type {!dal_parameters}. *) - val dal_parameters_encoding : dal_parameters Data_encoding.t - (** [produce_proof dal_parameters page_id page_info slots_hist hist_cache] produces a proof that either: - there exists a confirmed slot in the skip list that contains @@ -273,7 +275,7 @@ module History : sig the candidate slot (if any). *) val produce_proof : - dal_parameters -> + parameters -> Page.t -> page_info:(Page.content * Page.proof) option -> t -> @@ -291,7 +293,7 @@ module History : sig the candidate slot (if any). *) val verify_proof : - dal_parameters -> Page.t -> t -> proof -> Page.content option tzresult Lwt.t + parameters -> Page.t -> t -> proof -> Page.content option tzresult Lwt.t type error += Add_element_in_slots_skip_list_violates_ordering 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 d833c46adca5..221181ef6b0d 100644 --- a/src/proto_alpha/lib_protocol/test/helpers/dal_helpers.ml +++ b/src/proto_alpha/lib_protocol/test/helpers/dal_helpers.ml @@ -49,7 +49,7 @@ let mk_cryptobox dal_params = let open Result_syntax in let parameters = Cryptobox.Internal_for_tests.initialisation_parameters_from_slot_size - ~slot_size:dal_params.Hist.slot_size + ~slot_size:dal_params.S.slot_size in let () = Cryptobox.Internal_for_tests.load_parameters parameters in match Cryptobox.make dal_params with @@ -59,7 +59,7 @@ let mk_cryptobox dal_params = let derive_dal_parameters (reference : Cryptobox.parameters) ~redundancy_factor ~constants_divider = { - Hist.redundancy_factor; + S.redundancy_factor; page_size = reference.page_size / constants_divider; slot_size = reference.slot_size / constants_divider; number_of_shards = reference.number_of_shards / constants_divider; -- GitLab