From 5a2a9caa2b12abc6381d0bc1c885e2589314384e Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Tue, 14 Jun 2022 23:20:39 +0200 Subject: [PATCH 1/4] Proto/Michelson: use more precise types for transaction to tx rollup --- src/proto_alpha/lib_protocol/script_typed_ir.ml | 4 ++-- src/proto_alpha/lib_protocol/script_typed_ir.mli | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/proto_alpha/lib_protocol/script_typed_ir.ml b/src/proto_alpha/lib_protocol/script_typed_ir.ml index 9cc3a94ac81b..e0371d154e5f 100644 --- a/src/proto_alpha/lib_protocol/script_typed_ir.ml +++ b/src/proto_alpha/lib_protocol/script_typed_ir.ml @@ -1371,8 +1371,8 @@ and 'kind internal_operation_contents = -> Kind.transaction internal_operation_contents | Transaction_to_tx_rollup : { destination : Tx_rollup.t; - parameters_ty : ('a, _) ty; - parameters : 'a; + parameters_ty : (('a ticket, tx_rollup_l2_address) pair, _) ty; + parameters : ('a ticket, tx_rollup_l2_address) pair; unparsed_parameters : Script.expr; } -> Kind.transaction internal_operation_contents diff --git a/src/proto_alpha/lib_protocol/script_typed_ir.mli b/src/proto_alpha/lib_protocol/script_typed_ir.mli index da95bffff5f1..2899f5ce523d 100644 --- a/src/proto_alpha/lib_protocol/script_typed_ir.mli +++ b/src/proto_alpha/lib_protocol/script_typed_ir.mli @@ -1512,8 +1512,8 @@ and 'kind internal_operation_contents = -> Kind.transaction internal_operation_contents | Transaction_to_tx_rollup : { destination : Tx_rollup.t; - parameters_ty : ('a, _) ty; - parameters : 'a; + parameters_ty : (('a ticket, tx_rollup_l2_address) pair, _) ty; + parameters : ('a ticket, tx_rollup_l2_address) pair; unparsed_parameters : Script.expr; } -> Kind.transaction internal_operation_contents -- GitLab From 4f8dedff4a731c06b4c70f0e36f3375473d17168 Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Tue, 14 Jun 2022 23:25:29 +0200 Subject: [PATCH 2/4] Proto/Tx_rollup: remove dead branch of get_deposit_parameters --- .../lib_protocol/tx_rollup_parameters.ml | 18 +++++++++--------- .../lib_protocol/tx_rollup_parameters.mli | 12 +++++++----- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/proto_alpha/lib_protocol/tx_rollup_parameters.ml b/src/proto_alpha/lib_protocol/tx_rollup_parameters.ml index 7c93e0a7f75e..4598233892e7 100644 --- a/src/proto_alpha/lib_protocol/tx_rollup_parameters.ml +++ b/src/proto_alpha/lib_protocol/tx_rollup_parameters.ml @@ -25,18 +25,18 @@ (* *) (*****************************************************************************) +open Script_typed_ir + type deposit_parameters = { ex_ticket : Ticket_scanner.ex_ticket; - l2_destination : Script_typed_ir.tx_rollup_l2_address; + l2_destination : tx_rollup_l2_address; } let get_deposit_parameters : type a comparable. - (a, comparable) Script_typed_ir.ty -> a -> deposit_parameters tzresult = - fun ty contents -> - let open Script_typed_ir in - match (ty, contents) with - | ( Pair_t (Ticket_t (ty, _), Tx_rollup_l2_address_t, _, _), - (ticket, l2_destination) ) -> - ok {ex_ticket = Ticket_scanner.Ex_ticket (ty, ticket); l2_destination} - | _ -> error Alpha_context.Tx_rollup_errors.Wrong_deposit_parameters + ((a ticket, tx_rollup_l2_address) pair, comparable) ty -> + (a ticket, tx_rollup_l2_address) pair -> + deposit_parameters tzresult = + fun (Pair_t (Ticket_t (ty, _), Tx_rollup_l2_address_t, _, _)) + (ticket, l2_destination) -> + ok {ex_ticket = Ticket_scanner.Ex_ticket (ty, ticket); l2_destination} diff --git a/src/proto_alpha/lib_protocol/tx_rollup_parameters.mli b/src/proto_alpha/lib_protocol/tx_rollup_parameters.mli index 8d240a428375..ba69fb3a5374 100644 --- a/src/proto_alpha/lib_protocol/tx_rollup_parameters.mli +++ b/src/proto_alpha/lib_protocol/tx_rollup_parameters.mli @@ -28,22 +28,24 @@ (** A module for representing and extracting typed transactional rollup parameters. *) +open Script_typed_ir + (** A type representing deposit parameters for transactional rollups. Deposit parameters consist of a ticket of arbitrary content along with a layer-2 destination address. *) type deposit_parameters = { ex_ticket : Ticket_scanner.ex_ticket; - l2_destination : Script_typed_ir.tx_rollup_l2_address; + l2_destination : tx_rollup_l2_address; } (** [get_deposit_parameters ty value] returns [ex_ticket] and a - [tx_rollup_l2_address] from a michelson typed value. if [ty] is not of a - pair of ticket and [tx_rollup_l2_address] then it fails with - [Tx_rollup_errors.Wrong_deposit_parameters]. + [tx_rollup_l2_address] from a michelson typed value. This function is intended to be used to enforce the type of the transaction to a [tx_rollup%deposit]. It must be used both in [ticket_diffs_of_operations] to account for the ticket deposited and in [apply] to retrieve the ticket when applying the transaction to a tx_rollup. *) val get_deposit_parameters : - ('a, 'comparable) Script_typed_ir.ty -> 'a -> deposit_parameters tzresult + (('a ticket, tx_rollup_l2_address) pair, 'comparable) ty -> + ('a ticket, tx_rollup_l2_address) pair -> + deposit_parameters tzresult -- GitLab From c4339a61ad9162ef072c0b5876dfb69b26cde1d6 Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Wed, 6 Jul 2022 19:02:07 +0200 Subject: [PATCH 3/4] Proto: move error Wrong_deposit_parameters to lib_tx_rollup --- src/proto_alpha/lib_protocol/alpha_context.mli | 1 - src/proto_alpha/lib_protocol/tx_rollup_errors_repr.ml | 1 - src/proto_alpha/lib_tx_rollup/daemon.ml | 7 ++----- src/proto_alpha/lib_tx_rollup/error.ml | 2 ++ src/proto_alpha/lib_tx_rollup/error.mli | 2 ++ 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/proto_alpha/lib_protocol/alpha_context.mli b/src/proto_alpha/lib_protocol/alpha_context.mli index 462b29885ef4..e340830d8188 100644 --- a/src/proto_alpha/lib_protocol/alpha_context.mli +++ b/src/proto_alpha/lib_protocol/alpha_context.mli @@ -2304,7 +2304,6 @@ module Tx_rollup_errors : sig [ `Valid_path of Tx_rollup_commitment.Merkle.h * int | `Hash of Tx_rollup_message_result_hash.t ]; } - | Wrong_deposit_parameters | Proof_failed_to_reject | Proof_produced_rejected_state | Proof_invalid_before of { diff --git a/src/proto_alpha/lib_protocol/tx_rollup_errors_repr.ml b/src/proto_alpha/lib_protocol/tx_rollup_errors_repr.ml index a79f10792ef9..6e14836718e8 100644 --- a/src/proto_alpha/lib_protocol/tx_rollup_errors_repr.ml +++ b/src/proto_alpha/lib_protocol/tx_rollup_errors_repr.ml @@ -87,7 +87,6 @@ type error += | `Hash of Tx_rollup_message_result_hash_repr.t ]; } | Ticket_payload_size_limit_exceeded of {payload_size : int; limit : int} - | Wrong_deposit_parameters | Proof_failed_to_reject | Proof_produced_rejected_state | Proof_invalid_before of {agreed : Context_hash.t; provided : Context_hash.t} diff --git a/src/proto_alpha/lib_tx_rollup/daemon.ml b/src/proto_alpha/lib_tx_rollup/daemon.ml index 673e1dd72cd6..2c8b32e864f0 100644 --- a/src/proto_alpha/lib_tx_rollup/daemon.ml +++ b/src/proto_alpha/lib_tx_rollup/daemon.ml @@ -53,14 +53,11 @@ let parse_ticketer : Script.node -> Contract.t tzresult = let open Micheline in function | Bytes (_loc, bytes) (* As unparsed with [Optimized]. *) -> - Result.of_option - ~error: - [Environment.wrap_tzerror Tx_rollup_errors.Wrong_deposit_parameters] + Result.of_option ~error:[Wrong_deposit_parameters] @@ Data_encoding.Binary.of_bytes_opt Contract.encoding bytes | String (_loc, str) (* As unparsed with [Readable]. *) -> Environment.wrap_tzresult @@ Contract.of_b58check str - | Int _ | Prim _ | Seq _ -> - error (Environment.wrap_tzerror Tx_rollup_errors.Wrong_deposit_parameters) + | Int _ | Prim _ | Seq _ -> error Wrong_deposit_parameters let parse_tx_rollup_deposit_parameters : Script.expr -> diff --git a/src/proto_alpha/lib_tx_rollup/error.ml b/src/proto_alpha/lib_tx_rollup/error.ml index fec8c73affba..13277743addf 100644 --- a/src/proto_alpha/lib_tx_rollup/error.ml +++ b/src/proto_alpha/lib_tx_rollup/error.ml @@ -561,3 +561,5 @@ let () = Data_encoding.(obj1 (req "operation" Operation_hash.encoding)) (function Tx_rollup_deposit_slashed o -> Some o | _ -> None) (fun o -> Tx_rollup_deposit_slashed o) + +type error += Wrong_deposit_parameters diff --git a/src/proto_alpha/lib_tx_rollup/error.mli b/src/proto_alpha/lib_tx_rollup/error.mli index 097c2a811136..5c396b5a3671 100644 --- a/src/proto_alpha/lib_tx_rollup/error.mli +++ b/src/proto_alpha/lib_tx_rollup/error.mli @@ -132,3 +132,5 @@ type error += Tx_rollup_deposit_not_allowed (** Error (fatal) when we are slashed *) type error += Tx_rollup_deposit_slashed of Operation_hash.t + +type error += Wrong_deposit_parameters -- GitLab From cb602a12f1d53142d65f38bf40e6ac24fb93830b Mon Sep 17 00:00:00 2001 From: Mehdi Bouaziz Date: Tue, 14 Jun 2022 23:29:25 +0200 Subject: [PATCH 4/4] Proto/Tx_rollup: get_deposit_parameters never fails --- src/proto_alpha/lib_protocol/apply.ml | 5 +++-- src/proto_alpha/lib_protocol/ticket_operations_diff.ml | 5 +++-- src/proto_alpha/lib_protocol/tx_rollup_parameters.ml | 4 ++-- src/proto_alpha/lib_protocol/tx_rollup_parameters.mli | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/proto_alpha/lib_protocol/apply.ml b/src/proto_alpha/lib_protocol/apply.ml index 8b5bc41e532a..23bdab2df0fc 100644 --- a/src/proto_alpha/lib_protocol/apply.ml +++ b/src/proto_alpha/lib_protocol/apply.ml @@ -963,8 +963,9 @@ let apply_transaction_to_tx_rollup ~ctxt ~parameters_ty ~parameters ~payer returned using the L2 withdrawal mechanism: a failing deposit emits a withdrawal that can be executed by [payer]. *) - Tx_rollup_parameters.get_deposit_parameters parameters_ty parameters - >>?= fun {ex_ticket; l2_destination} -> + let Tx_rollup_parameters.{ex_ticket; l2_destination} = + Tx_rollup_parameters.get_deposit_parameters parameters_ty parameters + in ex_ticket_size ctxt ex_ticket >>=? fun (ctxt, ticket_size) -> let limit = Constants.tx_rollup_max_ticket_payload_size ctxt in fail_when diff --git a/src/proto_alpha/lib_protocol/ticket_operations_diff.ml b/src/proto_alpha/lib_protocol/ticket_operations_diff.ml index 9bac8dc869f5..c3db21d23593 100644 --- a/src/proto_alpha/lib_protocol/ticket_operations_diff.ml +++ b/src/proto_alpha/lib_protocol/ticket_operations_diff.ml @@ -193,8 +193,9 @@ let tickets_of_operation ctxt ~allow_zero_amount_tickets ~parameters | Transaction_to_tx_rollup {destination; unparsed_parameters = _; parameters_ty; parameters} -> - Tx_rollup_parameters.get_deposit_parameters parameters_ty parameters - >>?= fun {ex_ticket; l2_destination = _} -> + let Tx_rollup_parameters.{ex_ticket; l2_destination = _} = + Tx_rollup_parameters.get_deposit_parameters parameters_ty parameters + in return ( Some { diff --git a/src/proto_alpha/lib_protocol/tx_rollup_parameters.ml b/src/proto_alpha/lib_protocol/tx_rollup_parameters.ml index 4598233892e7..f79d341c7642 100644 --- a/src/proto_alpha/lib_protocol/tx_rollup_parameters.ml +++ b/src/proto_alpha/lib_protocol/tx_rollup_parameters.ml @@ -36,7 +36,7 @@ let get_deposit_parameters : type a comparable. ((a ticket, tx_rollup_l2_address) pair, comparable) ty -> (a ticket, tx_rollup_l2_address) pair -> - deposit_parameters tzresult = + deposit_parameters = fun (Pair_t (Ticket_t (ty, _), Tx_rollup_l2_address_t, _, _)) (ticket, l2_destination) -> - ok {ex_ticket = Ticket_scanner.Ex_ticket (ty, ticket); l2_destination} + {ex_ticket = Ticket_scanner.Ex_ticket (ty, ticket); l2_destination} diff --git a/src/proto_alpha/lib_protocol/tx_rollup_parameters.mli b/src/proto_alpha/lib_protocol/tx_rollup_parameters.mli index ba69fb3a5374..76bd40127701 100644 --- a/src/proto_alpha/lib_protocol/tx_rollup_parameters.mli +++ b/src/proto_alpha/lib_protocol/tx_rollup_parameters.mli @@ -48,4 +48,4 @@ type deposit_parameters = { val get_deposit_parameters : (('a ticket, tx_rollup_l2_address) pair, 'comparable) ty -> ('a ticket, tx_rollup_l2_address) pair -> - deposit_parameters tzresult + deposit_parameters -- GitLab