From fe49551b19144bd0429917b265db0d914e65a130 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Tue, 1 Feb 2022 15:02:49 +0100 Subject: [PATCH 01/13] Protocol: Bump the quota list --- src/proto_alpha/lib_protocol/main.ml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/proto_alpha/lib_protocol/main.ml b/src/proto_alpha/lib_protocol/main.ml index 6d9b77a304f3..8a984fafddd4 100644 --- a/src/proto_alpha/lib_protocol/main.ml +++ b/src/proto_alpha/lib_protocol/main.ml @@ -84,6 +84,8 @@ let validation_passes = }; (* 512kB *) {max_size = 512 * 1024; max_op = None}; + (* FIXME: copy of manager operations for prototyping.*) + {max_size = 512 * 1024; max_op = None}; ] let rpc_services = -- GitLab From e7b2f2cf11645f44b9fca2321c96fe3a22716e87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Wed, 2 Feb 2022 12:30:32 +0100 Subject: [PATCH 02/13] Alpha: Baker recognize a new validation pass MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: François Thiré --- .../lib_delegate/operation_pool.ml | 91 +++++++++++++------ .../lib_delegate/operation_pool.mli | 4 + .../lib_delegate/operation_selection.ml | 19 +++- .../lib_delegate/state_transitions.ml | 8 +- 4 files changed, 87 insertions(+), 35 deletions(-) diff --git a/src/proto_alpha/lib_delegate/operation_pool.ml b/src/proto_alpha/lib_delegate/operation_pool.ml index 692bb6561500..133e59331bf7 100644 --- a/src/proto_alpha/lib_delegate/operation_pool.ml +++ b/src/proto_alpha/lib_delegate/operation_pool.ml @@ -33,6 +33,7 @@ type 'collection t = { votes : 'collection; anonymous : 'collection; managers : 'collection; + tx_rollup : 'collection; } module Prioritized_operation = struct @@ -81,44 +82,54 @@ type ordered_pool = packed_operation list t let ordered_pool_encoding = let open Data_encoding in conv - (fun {consensus; votes; anonymous; managers} -> - (consensus, votes, anonymous, managers)) - (fun (consensus, votes, anonymous, managers) -> - {consensus; votes; anonymous; managers}) - (obj4 + (fun {consensus; votes; anonymous; managers; tx_rollup} -> + (consensus, votes, anonymous, managers, tx_rollup)) + (fun (consensus, votes, anonymous, managers, tx_rollup) -> + {consensus; votes; anonymous; managers; tx_rollup}) + (obj5 (req "ordered_consensus" (list (dynamic_size Operation.encoding))) (req "ordered_votes" (list (dynamic_size Operation.encoding))) (req "ordered_anonymouns" (list (dynamic_size Operation.encoding))) - (req "ordered_managers" (list (dynamic_size Operation.encoding)))) + (req "ordered_managers" (list (dynamic_size Operation.encoding))) + (req "ordered_tx_rollup" (list (dynamic_size Operation.encoding)))) type payload = { votes_payload : packed_operation list; anonymous_payload : packed_operation list; managers_payload : packed_operation list; + tx_rollup_payload : packed_operation list; } let empty_payload = - {votes_payload = []; anonymous_payload = []; managers_payload = []} + { + votes_payload = []; + anonymous_payload = []; + managers_payload = []; + tx_rollup_payload = []; + } let payload_encoding = let open Data_encoding in conv - (fun {votes_payload; anonymous_payload; managers_payload} -> - (votes_payload, anonymous_payload, managers_payload)) - (fun (votes_payload, anonymous_payload, managers_payload) -> - {votes_payload; anonymous_payload; managers_payload}) - (obj3 + (fun {votes_payload; anonymous_payload; managers_payload; tx_rollup_payload} -> + (votes_payload, anonymous_payload, managers_payload, tx_rollup_payload)) + (fun (votes_payload, anonymous_payload, managers_payload, tx_rollup_payload) -> + {votes_payload; anonymous_payload; managers_payload; tx_rollup_payload}) + (obj4 (req "votes_payload" (list (dynamic_size Operation.encoding))) (req "anonymous_payload" (list (dynamic_size Operation.encoding))) - (req "managers_payload" (list (dynamic_size Operation.encoding)))) + (req "managers_payload" (list (dynamic_size Operation.encoding))) + (req "tx_rollup_payload" (list (dynamic_size Operation.encoding)))) -let pp_payload fmt {votes_payload; anonymous_payload; managers_payload} = +let pp_payload fmt + {votes_payload; anonymous_payload; managers_payload; tx_rollup_payload} = Format.fprintf fmt - "[votes: %d, anonymous: %d, managers: %d]" + "[votes: %d, anonymous: %d, managers: %d, tx_rollup: %d]" (List.length votes_payload) (List.length anonymous_payload) (List.length managers_payload) + (List.length tx_rollup_payload) let empty = { @@ -126,27 +137,31 @@ let empty = votes = Operation_set.empty; anonymous = Operation_set.empty; managers = Operation_set.empty; + tx_rollup = Operation_set.empty; } -let empty_ordered = {consensus = []; votes = []; anonymous = []; managers = []} +let empty_ordered = + {consensus = []; votes = []; anonymous = []; managers = []; tx_rollup = []} -let pp_pool fmt {consensus; votes; anonymous; managers} = +let pp_pool fmt {consensus; votes; anonymous; managers; tx_rollup} = Format.fprintf fmt - "[consensus: %d, votes: %d, anonymous: %d, managers: %d]" + "[consensus: %d, votes: %d, anonymous: %d, managers: %d, tx_rollup: %d]" (Operation_set.cardinal consensus) (Operation_set.cardinal votes) (Operation_set.cardinal anonymous) (Operation_set.cardinal managers) + (Operation_set.cardinal tx_rollup) -let pp_ordered_pool fmt {consensus; votes; anonymous; managers} = +let pp_ordered_pool fmt {consensus; votes; anonymous; managers; tx_rollup} = Format.fprintf fmt - "[consensus: %d, votes: %d, anonymous: %d, managers: %d]" + "[consensus: %d, votes: %d, anonymous: %d, managers: %d, tx_rollup: %d]" (List.length consensus) (List.length votes) (List.length anonymous) (List.length managers) + (List.length tx_rollup) (* Hypothesis : we suppose [List.length Protocol.Main.validation_passes = 4] *) let consensus_index = 0 @@ -157,6 +172,8 @@ let anonymous_index = 2 let managers_index = 3 +let tx_rollup_index = 4 + let classify op = (* Hypothesis: acceptable passes returns a size at most 1 list *) match Main.acceptable_passes op with @@ -281,32 +298,41 @@ let filter_endorsements ops = | _ -> None) ops -let ordered_to_list_list {consensus; votes; anonymous; managers} = - [consensus; votes; anonymous; managers] +let ordered_to_list_list {consensus; votes; anonymous; managers; tx_rollup} = + [consensus; votes; anonymous; managers; tx_rollup] let ordered_of_list_list = function - | [consensus; votes; anonymous; managers] -> - Some {consensus; votes; anonymous; managers} + | [consensus; votes; anonymous; managers; tx_rollup] -> + Some {consensus; votes; anonymous; managers; tx_rollup} | _ -> None -let payload_of_ordered_pool {votes; anonymous; managers; _} = +let payload_of_ordered_pool + {consensus = _; votes; anonymous; managers; tx_rollup} = { votes_payload = votes; anonymous_payload = anonymous; managers_payload = managers; + tx_rollup_payload = tx_rollup; } let ordered_pool_of_payload ~consensus_operations - {votes_payload; anonymous_payload; managers_payload} = + {votes_payload; anonymous_payload; managers_payload; tx_rollup_payload} = { consensus = consensus_operations; votes = votes_payload; anonymous = anonymous_payload; managers = managers_payload; + tx_rollup = tx_rollup_payload; } let extract_operations_of_list_list = function - | [consensus; votes_payload; anonymous_payload; managers_payload] -> + | [ + consensus; + votes_payload; + anonymous_payload; + managers_payload; + tx_rollup_payload; + ] -> let (preendorsements, endorsements) = List.fold_left (fun ( (preendorsements : Kind.preendorsement Operation.t list), @@ -328,16 +354,19 @@ let extract_operations_of_list_list = function let preendorsements = if preendorsements = [] then None else Some preendorsements in - let payload = {votes_payload; anonymous_payload; managers_payload} in + let payload = + {votes_payload; anonymous_payload; managers_payload; tx_rollup_payload} + in Some (preendorsements, endorsements, payload) | _ -> None -let filter_pool p {consensus; votes; anonymous; managers} = +let filter_pool p {consensus; votes; anonymous; managers; tx_rollup} = { consensus = Operation_set.filter p consensus; votes = Operation_set.filter p votes; anonymous = Operation_set.filter p anonymous; managers = Operation_set.filter p managers; + tx_rollup = Operation_set.filter p tx_rollup; } module Prioritized = struct @@ -356,6 +385,7 @@ module Prioritized = struct votes = of_operation_set pool.votes; anonymous = of_operation_set pool.anonymous; managers = of_operation_set pool.managers; + tx_rollup = of_operation_set pool.tx_rollup; } let add_operation = @@ -372,7 +402,7 @@ module Prioritized = struct (external_operations : packed_operation list) = List.fold_left add_external_operation pool external_operations - let filter p {consensus; votes; anonymous; managers} = + let filter p {consensus; votes; anonymous; managers; tx_rollup} = let filter = Prioritized_operation_set.filter (fun pop -> p (Prioritized_operation.packed pop)) @@ -382,5 +412,6 @@ module Prioritized = struct votes = filter votes; anonymous = filter anonymous; managers = filter managers; + tx_rollup = filter tx_rollup; } end diff --git a/src/proto_alpha/lib_delegate/operation_pool.mli b/src/proto_alpha/lib_delegate/operation_pool.mli index 8d59013d4791..895e10d28edc 100644 --- a/src/proto_alpha/lib_delegate/operation_pool.mli +++ b/src/proto_alpha/lib_delegate/operation_pool.mli @@ -34,6 +34,8 @@ val anonymous_index : int val managers_index : int +val tx_rollup_index : int + module Operation_set : Set.S with type elt = packed_operation (** Generic base type for pools *) @@ -42,6 +44,7 @@ type 'collection t = { votes : 'collection; anonymous : 'collection; managers : 'collection; + tx_rollup : 'collection; } (** A pool of operations for a single origin, or undifferenciated origin, @@ -70,6 +73,7 @@ type payload = { votes_payload : packed_operation list; anonymous_payload : packed_operation list; managers_payload : packed_operation list; + tx_rollup_payload : packed_operation list; } val empty_payload : payload diff --git a/src/proto_alpha/lib_delegate/operation_selection.ml b/src/proto_alpha/lib_delegate/operation_selection.ml index 4d3f10414c39..89d6b394afe7 100644 --- a/src/proto_alpha/lib_delegate/operation_selection.ml +++ b/src/proto_alpha/lib_delegate/operation_selection.ml @@ -37,6 +37,8 @@ let anonymous_quota = Stdlib.List.nth quota Operation_pool.anonymous_index let managers_quota = Stdlib.List.nth quota Operation_pool.managers_index +let tx_rollup_quota = Stdlib.List.nth quota Operation_pool.tx_rollup_index + type prioritized_manager = { op : Prioritized_operation.t; size : int; @@ -219,7 +221,8 @@ let filter_valid_operations_up_to_quota inc (ops, quota) = with Full (inc, l) -> Lwt.return (inc, List.rev l) let filter_operations_with_simulation initial_inc fees_config - ~hard_gas_limit_per_block {consensus; votes; anonymous; managers} = + ~hard_gas_limit_per_block {consensus; votes; anonymous; managers; tx_rollup} + = let { Baking_configuration.minimal_fees; minimal_nanotez_per_gas_unit; @@ -254,7 +257,11 @@ let filter_operations_with_simulation initial_inc fees_config |> List.map (fun {op; _} -> Prioritized_operation.packed op), managers_quota ) >>= fun (inc, managers) -> - let operations = [consensus; votes; anonymous; managers] in + filter_valid_operations_up_to_quota + inc + (Prioritized_operation_set.operations tx_rollup, tx_rollup_quota) + >>= fun (inc, tx_rollup) -> + let operations = [consensus; votes; anonymous; managers; tx_rollup] in let operations_hash = Operation_list_list_hash.compute (List.map @@ -289,7 +296,7 @@ let filter_valid_operations_up_to_quota_without_simulation (ops, quota) = with Full l -> List.rev l let filter_operations_without_simulation fees_config ~hard_gas_limit_per_block - {consensus; votes; anonymous; managers} = + {consensus; votes; anonymous; managers; tx_rollup} = let consensus = filter_valid_operations_up_to_quota_without_simulation (Prioritized_operation_set.operations consensus, consensus_quota) @@ -324,5 +331,9 @@ let filter_operations_without_simulation fees_config ~hard_gas_limit_per_block |> List.map (fun {op; _} -> Prioritized_operation.packed op), managers_quota ) in - let operations = [consensus; votes; anonymous; managers] in + let tx_rollup = + filter_valid_operations_up_to_quota_without_simulation + (Prioritized_operation_set.operations tx_rollup, tx_rollup_quota) + in + let operations = [consensus; votes; anonymous; managers; tx_rollup] in operations diff --git a/src/proto_alpha/lib_delegate/state_transitions.ml b/src/proto_alpha/lib_delegate/state_transitions.ml index 4f3930606803..664b11f38a49 100644 --- a/src/proto_alpha/lib_delegate/state_transitions.ml +++ b/src/proto_alpha/lib_delegate/state_transitions.ml @@ -377,13 +377,19 @@ let propose_fresh_block_action ~endorsements ?last_proposal Operation_pool.votes_payload; anonymous_payload; managers_payload; + tx_rollup_payload; } = proposal.payload in List.fold_left Operation_pool.add_operations pool - [votes_payload; anonymous_payload; managers_payload] + [ + votes_payload; + anonymous_payload; + managers_payload; + tx_rollup_payload; + ] | None -> pool in (* 2. Filter and only retain relevant endorsements. *) -- GitLab From e254bba06b07da664c4432270915549f8f281892 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Wed, 2 Feb 2022 17:21:37 +0100 Subject: [PATCH 03/13] fixup! Alpha: Baker recognize a new validation pass --- src/proto_alpha/lib_delegate/operation_pool.ml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/proto_alpha/lib_delegate/operation_pool.ml b/src/proto_alpha/lib_delegate/operation_pool.ml index 133e59331bf7..aab822de2c0c 100644 --- a/src/proto_alpha/lib_delegate/operation_pool.ml +++ b/src/proto_alpha/lib_delegate/operation_pool.ml @@ -183,6 +183,7 @@ let classify op = else if pass = votes_index then `Votes else if pass = anonymous_index then `Anonymous else if pass = managers_index then `Managers + else if pass = tx_rollup_index then `Tx_rollup else `Bad | _ -> `Bad @@ -200,6 +201,9 @@ let add_operation_to_pool add classify pool operation = | `Managers -> let managers = add operation pool.managers in {pool with managers} + | `Tx_rollup -> + let tx_rollup = add operation pool.tx_rollup in + {pool with tx_rollup} | `Bad -> pool let add_operation = add_operation_to_pool Operation_set.add classify -- GitLab From 30a8d22a317a7320131a6d42d26e64f97a5cc273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Wed, 2 Feb 2022 13:36:12 +0100 Subject: [PATCH 04/13] Tezt: Fix "bakind ordering" test --- tezt/tests/baking.ml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/tezt/tests/baking.ml b/tezt/tests/baking.ml index c3a2fee9caf9..46e82b4a6b47 100644 --- a/tezt/tests/baking.ml +++ b/tezt/tests/baking.ml @@ -388,9 +388,13 @@ let check_ordering ops = let ops' = List.sort compare_info ops in assert (ops = ops') -let assert_block_is_well_baked block = +let number protocol = + Protocol.(match protocol with Alpha -> 13 | Ithaca -> 12 | Hangzhou -> 11) + +let assert_block_is_well_baked ~protocol block = match JSON.(as_list (block |-> "operations")) with - | [endorsement_ops; vote_ops; anonymous_ops; manager_ops] -> + | [endorsement_ops; vote_ops; anonymous_ops; manager_ops] + when number protocol < 13 -> (* There very well might be endorsement operations *) Log.debug "%d endorsement operations" @@ -404,6 +408,20 @@ let assert_block_is_well_baked block = (JSON.as_list manager_ops) in check_ordering fees_managers_and_counters + | [endorsement_ops; vote_ops; anonymous_ops; manager_ops; tx_rollup_ops] -> + (* There very well might be endorsement operations *) + Log.debug + "%d endorsement operations" + (List.length (JSON.as_list endorsement_ops)) ; + List.iter + (fun l -> assert (JSON.as_list l = [])) + [vote_ops; anonymous_ops; tx_rollup_ops] ; + let fees_managers_and_counters = + List.map + (fun json -> get_fees_manager_and_counter json) + (JSON.as_list manager_ops) + in + check_ordering fees_managers_and_counters | _ -> Test.fail "ill-formed operation list list" (* ------------------------------------------------------------------------- *) @@ -462,7 +480,7 @@ let bake_and_check state ~protocol ~mempool = let* block = Client.(rpc GET ["chains"; "main"; "blocks"; "head"] state.sandbox_client) in - assert_block_is_well_baked block ; + assert_block_is_well_baked ~protocol block ; return () let init ~protocol = -- GitLab From 4f2b9ad7f4c98fba70b4a33322e9abb297121f39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Wed, 2 Feb 2022 13:40:28 +0100 Subject: [PATCH 05/13] Tezt: Fix "Alpha: forge fake block" test --- tezt/tests/precheck.ml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tezt/tests/precheck.ml b/tezt/tests/precheck.ml index 2e64e0602f87..e12429c1dc19 100644 --- a/tezt/tests/precheck.ml +++ b/tezt/tests/precheck.ml @@ -163,6 +163,9 @@ let forge_block ~protocol ?client node ~key = in return block_header +let validation_passes protocol = + Protocol.(match protocol with Alpha -> 5 | Ithaca -> 4 | Hangzhou -> 4) + let propagate_precheckable_bad_block = let blocks_to_bake = 4 in Protocol.register_test @@ -236,7 +239,8 @@ let propagate_precheckable_bad_block = `O [ ("data", `String signed_bad_block_header_hex); - ("operations", `A (List.init 4 (fun _ -> `A []))); + ( "operations", + `A (List.init (validation_passes protocol) (fun _ -> `A [])) ); ] in let wait_precheck_but_validation_fail node = -- GitLab From 4abb2fc275c035f72ca3e01a5a28f034cce7cace Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Wed, 2 Feb 2022 13:51:40 +0100 Subject: [PATCH 06/13] Mockup: Small fix for event warning message --- src/lib_mockup/local_services.ml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib_mockup/local_services.ml b/src/lib_mockup/local_services.ml index dead50db3ae6..ece96495e51c 100644 --- a/src/lib_mockup/local_services.ml +++ b/src/lib_mockup/local_services.ml @@ -278,6 +278,7 @@ module Make (E : MENV) = struct () let warn msg = + let msg = String.map (function ' ' -> '_' | x -> x) msg in S.declare_0 ~section ~name:(Printf.sprintf "local_services_warn_%s" msg) -- GitLab From 8459c4364524fd8d087c1bd1c80522f66acd2127 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Wed, 2 Feb 2022 14:31:00 +0100 Subject: [PATCH 07/13] Mockup: Fix shell services "operations" RPC --- src/lib_mockup/local_services.ml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib_mockup/local_services.ml b/src/lib_mockup/local_services.ml index ece96495e51c..45a4a2a96c1e 100644 --- a/src/lib_mockup/local_services.ml +++ b/src/lib_mockup/local_services.ml @@ -869,6 +869,8 @@ module Make (E : MENV) = struct with_chain ~caller_name:"protocol_data_raw" chain (fun () -> RPC_answer.return E.protocol_data))) + let rec init v n = if n <= 0 then [] else v :: init v (n - 1) + let operations () = Directory.prefix (Tezos_rpc.RPC_path.prefix Chain_services.path Block_services.path) @@ -878,7 +880,8 @@ module Make (E : MENV) = struct (fun (((), chain), _block) () () -> with_chain ~caller_name:"operations" chain (fun () -> (* FIXME: Better answer here *) - RPC_answer.return [[]; []; []; []])) + RPC_answer.return + (init [] E.rpc_context.block_header.validation_passes))) let monitor_operations () = let open Lwt_syntax in -- GitLab From c71c198fd785423ba6af0c1e2b7e528d42f17e47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Wed, 2 Feb 2022 14:39:36 +0100 Subject: [PATCH 08/13] Tezt: Fix "Alpha: event level debug" --- tezt/tests/node_event_level.ml | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/tezt/tests/node_event_level.ml b/tezt/tests/node_event_level.ml index e45755b19b02..28fe237d051d 100644 --- a/tezt/tests/node_event_level.ml +++ b/tezt/tests/node_event_level.ml @@ -135,6 +135,12 @@ let check_json_is_empty_list ?(fail_msg = "") json = in Test.fail "%s" msg +let number protocol = + Protocol.(match protocol with Alpha -> 13 | Ithaca -> 12 | Hangzhou -> 11) + +let validation_passes protocol = + Protocol.(match protocol with Alpha -> 5 | Ithaca -> 4 | Hangzhou -> 4) + (* Test. Aim: check that a node launched with "debug" event level performs @@ -209,7 +215,7 @@ let test_debug_level_misc = let* ops = RPC.get_operations client_1 in Log.info "RPC.get_operations done." ; (match JSON.(ops |> as_list_opt) with - | Some [x1; x2; x3; x4] -> ( + | Some [x1; x2; x3; x4] when number protocol < 13 -> ( List.iter check_json_is_empty_list [x1; x2; x3] ; match JSON.(x4 |> as_list_opt) with | Some [x] -> ( @@ -223,7 +229,27 @@ let test_debug_level_misc = Test.fail "Fourth list returned by RPC.operations should contain exactly one \ operation.") - | _ -> Test.fail "RPC.operations should return a list of length 4.") ; + | Some [x1; x2; x3; x4; x5] -> ( + List.iter check_json_is_empty_list [x1; x2; x3; x5] ; + match JSON.(x4 |> as_list_opt) with + | Some [x] -> ( + match JSON.(x |-> "hash" |> as_string_opt) with + | Some s when String.equal s oph1 -> () + | _ -> + Test.fail + "Fourth list returned by RPC.operations should contain only \ + the previously applied operation.") + | _ -> + Test.fail + "Fourth list returned by RPC.operations should contain exactly one \ + operation.") + | Some l -> + Test.fail + "RPC.operations returned a list of an incorrect size: Expected '%d', \ + got '%d'" + (validation_passes protocol) + (List.length l) + | None -> Test.fail "RPC.operations failed to return a list of operations") ; unit (* Wait for an event of name "set_head.v0". -- GitLab From 42145c6aa1256b8d7875523ff607e8d959bb0446 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Wed, 2 Feb 2022 15:02:26 +0100 Subject: [PATCH 09/13] Store/Tests: Generalize hard-coded constant --- src/lib_store/test/alpha_utils.ml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib_store/test/alpha_utils.ml b/src/lib_store/test/alpha_utils.ml index 6664001c17b9..4729815a6868 100644 --- a/src/lib_store/test/alpha_utils.ml +++ b/src/lib_store/test/alpha_utils.ml @@ -583,7 +583,7 @@ let apply ctxt chain_id ~policy ?(operations = empty_operations) pred = Some (List.map (List.map (fun r -> Operation_metadata_hash.hash_bytes [r])) - (list_init_exn 4 (fun _ -> []))) + (list_init_exn nb_validation_passes (fun _ -> []))) in return ( block_header, @@ -616,7 +616,7 @@ let apply_and_store chain_store ?(synchronous_merge = true) ?policy last_allowed_fork_level = validation.last_allowed_fork_level; }; block_metadata = block_header_metadata; - ops_metadata = list_init_exn 4 (fun _ -> []); + ops_metadata = list_init_exn nb_validation_passes (fun _ -> []); block_metadata_hash; ops_metadata_hashes; } -- GitLab From eee33fbb8655a84fc25884482cc13efb1ad292f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Wed, 2 Feb 2022 15:43:35 +0100 Subject: [PATCH 10/13] Python: Fix "check_block_contains_operations" function --- tests_python/tools/utils.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tests_python/tools/utils.py b/tests_python/tools/utils.py index 62a1c17d3ef2..09ef37efc121 100644 --- a/tests_python/tools/utils.py +++ b/tests_python/tools/utils.py @@ -59,11 +59,7 @@ def check_block_contains_operations( client: Client, operation_hashes: List[str] ) -> bool: res = client.rpc('get', '/chains/main/blocks/head/operation_hashes') - flatten = ( - res[0] + res[1] + res[2] + res[3] - if res is not None and len(res) == 4 - else [] - ) + flatten: List[str] = sum(res, []) return all(oh in flatten for oh in operation_hashes) -- GitLab From 0af40e008a46b8823b7b047dbb3b4737a1b9b7df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Wed, 2 Feb 2022 15:51:16 +0100 Subject: [PATCH 11/13] Python: Update regression tests --- ...elfAddressTransfer::test_self_address_originate_receiver.out | 2 +- ...tSelfAddressTransfer::test_self_address_originate_sender.out | 2 +- ...act_onchain_opcodes.TestContractOnchainLevel::test_level.out | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests_python/tests_alpha/_regtest_outputs/test_contract.TestSelfAddressTransfer::test_self_address_originate_receiver.out b/tests_python/tests_alpha/_regtest_outputs/test_contract.TestSelfAddressTransfer::test_self_address_originate_receiver.out index ecc5ad98070a..46a1e59d0ddd 100644 --- a/tests_python/tests_alpha/_regtest_outputs/test_contract.TestSelfAddressTransfer::test_self_address_originate_receiver.out +++ b/tests_python/tests_alpha/_regtest_outputs/test_contract.TestSelfAddressTransfer::test_self_address_originate_receiver.out @@ -50,4 +50,4 @@ New contract [CONTRACT_HASH] originated. Contract memorized as self_address_receiver. Injected block at minimal timestamp [ [ "[BLOCK_HASH]" ], [], [], - [ "[BLOCK_HASH]" ] ] + [ "[BLOCK_HASH]" ], [] ] diff --git a/tests_python/tests_alpha/_regtest_outputs/test_contract.TestSelfAddressTransfer::test_self_address_originate_sender.out b/tests_python/tests_alpha/_regtest_outputs/test_contract.TestSelfAddressTransfer::test_self_address_originate_sender.out index 11fa864f1297..ab8c1b5231de 100644 --- a/tests_python/tests_alpha/_regtest_outputs/test_contract.TestSelfAddressTransfer::test_self_address_originate_sender.out +++ b/tests_python/tests_alpha/_regtest_outputs/test_contract.TestSelfAddressTransfer::test_self_address_originate_sender.out @@ -49,4 +49,4 @@ This sequence of operations was run: New contract [CONTRACT_HASH] originated. Contract memorized as self_address_sender. Injected block at minimal timestamp -[ [], [], [], [ "[BLOCK_HASH]" ] ] +[ [], [], [], [ "[BLOCK_HASH]" ], [] ] diff --git a/tests_python/tests_alpha/_regtest_outputs/test_contract_onchain_opcodes.TestContractOnchainLevel::test_level.out b/tests_python/tests_alpha/_regtest_outputs/test_contract_onchain_opcodes.TestContractOnchainLevel::test_level.out index 8a13c028f1b0..de40e1fe9ea6 100644 --- a/tests_python/tests_alpha/_regtest_outputs/test_contract_onchain_opcodes.TestContractOnchainLevel::test_level.out +++ b/tests_python/tests_alpha/_regtest_outputs/test_contract_onchain_opcodes.TestContractOnchainLevel::test_level.out @@ -80,7 +80,7 @@ This sequence of operations was run: Injected block at minimal timestamp { "level": [LEVEL], "proto": 1, "predecessor": "[BLOCK_HASH]", - "timestamp": "[TIMESTAMP]", "validation_pass": 4, + "timestamp": "[TIMESTAMP]", "validation_pass": 5, "operations_hash": "[OPERATION_HASH]", "fitness": "[FITNESS]", "context": "[CONTEXT]" } -- GitLab From 2a2f30d47282b0b5678b23309a3b9b97b053332c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Wed, 2 Feb 2022 17:25:31 +0100 Subject: [PATCH 12/13] Protocol: Put Tx_rollup operation in their own validation pass --- src/proto_alpha/lib_protocol/operation_repr.ml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/proto_alpha/lib_protocol/operation_repr.ml b/src/proto_alpha/lib_protocol/operation_repr.ml index 24b882ddbcf6..18446ecfa04f 100644 --- a/src/proto_alpha/lib_protocol/operation_repr.ml +++ b/src/proto_alpha/lib_protocol/operation_repr.ml @@ -1034,8 +1034,20 @@ let acceptable_passes (op : packed_operation) = | Single (Double_preendorsement_evidence _) -> [2] | Single (Double_baking_evidence _) -> [2] | Single (Activate_account _) -> [2] - | Single (Manager_operation _) -> [3] - | Cons (Manager_operation _, _ops) -> [3] + | Single (Manager_operation {operation; _}) -> ( + match operation with + | Reveal _ | Transaction _ | Origination _ | Delegation _ + | Register_global_constant _ | Set_deposits_limit _ + | Sc_rollup_originate _ | Sc_rollup_add_messages _ -> + [3] + | Tx_rollup_origination | Tx_rollup_submit_batch _ -> [4]) + | Cons (Manager_operation {operation; _}, _ops) -> ( + match operation with + | Reveal _ | Transaction _ | Origination _ | Delegation _ + | Register_global_constant _ | Set_deposits_limit _ + | Sc_rollup_originate _ | Sc_rollup_add_messages _ -> + [3] + | Tx_rollup_origination | Tx_rollup_submit_batch _ -> [4]) type error += Invalid_signature (* `Permanent *) -- GitLab From 4c46bad174e0507af88c29c20a62afd8e41caf86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Wed, 2 Feb 2022 17:28:45 +0100 Subject: [PATCH 13/13] Protocol: FIXME to handle --- src/proto_alpha/lib_protocol/main.ml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/proto_alpha/lib_protocol/main.ml b/src/proto_alpha/lib_protocol/main.ml index 8a984fafddd4..81041ad7e866 100644 --- a/src/proto_alpha/lib_protocol/main.ml +++ b/src/proto_alpha/lib_protocol/main.ml @@ -721,6 +721,7 @@ let relative_position_within_block op1 op2 = | (_, Single (Failing_noop _)) -> 1 | (Single (Failing_noop _), _) -> -1 (* Manager operations with smaller counter are pre-validated first. *) + (* FIXME: Should we update this for tx_rollup operations? *) | (Single (Manager_operation op1), Single (Manager_operation op2)) -> Z.compare op1.counter op2.counter | (Cons (Manager_operation op1, _), Single (Manager_operation op2)) -> -- GitLab