From 19a8577d2a6b5c49e57b274b50aa40ecf80ecafb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Mon, 10 Apr 2023 21:22:05 +0200 Subject: [PATCH 1/4] Proto/Michelson: compound{1,2} at the level of metadata This commit makes the smart contructors for `ty` less dependent on the definition of metadata by introducing auxiliary transformers of metadata for unary and binary type constructors. --- .../lib_protocol/script_typed_ir.ml | 55 +++++++++++-------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/src/proto_alpha/lib_protocol/script_typed_ir.ml b/src/proto_alpha/lib_protocol/script_typed_ir.ml index ce9fae118fe0..ec1a5fd9eea0 100644 --- a/src/proto_alpha/lib_protocol/script_typed_ir.ml +++ b/src/proto_alpha/lib_protocol/script_typed_ir.ml @@ -1724,6 +1724,13 @@ let kinstr_location : type a s b f. (a, s, b, f) kinstr -> Script.location = let meta_basic = {size = Type_size.one} +let meta_compound1 loc ({size} : _ ty_metadata) : _ ty_metadata tzresult = + Type_size.compound1 loc size >|? fun size -> {size} + +let meta_compound2 loc ({size = size1} : _ ty_metadata) + ({size = size2} : _ ty_metadata) : _ ty_metadata tzresult = + Type_size.compound2 loc size1 size2 >|? fun size -> {size} + let ty_metadata : type a ac. (a, ac) ty -> a ty_metadata = function | Unit_t | Never_t | Int_t | Nat_t | Signature_t | String_t | Bytes_t | Mutez_t | Bool_t | Key_hash_t | Key_t | Timestamp_t | Chain_id_t | Address_t @@ -1815,15 +1822,15 @@ let pair_t : Script.location -> (a, ac) ty -> (b, bc) ty -> (a, b) pair ty_ex_c tzresult = fun loc l r -> - Type_size.compound2 loc (ty_size l) (ty_size r) >|? fun size -> + meta_compound2 loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> let (Ex_dand cmp) = dand (is_comparable l) (is_comparable r) in - Ty_ex_c (Pair_t (l, r, {size}, cmp)) + Ty_ex_c (Pair_t (l, r, metadata, cmp)) let pair_3_t loc l m r = pair_t loc m r >>? fun (Ty_ex_c r) -> pair_t loc l r let comparable_pair_t loc l r = - Type_size.compound2 loc (ty_size l) (ty_size r) >|? fun size -> - Pair_t (l, r, {size}, YesYes) + meta_compound2 loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> + Pair_t (l, r, metadata, YesYes) let comparable_pair_3_t loc l m r = comparable_pair_t loc m r >>? fun r -> comparable_pair_t loc l r @@ -1832,24 +1839,24 @@ let or_t : type a ac b bc. Script.location -> (a, ac) ty -> (b, bc) ty -> (a, b) or_ ty_ex_c tzresult = fun loc l r -> - Type_size.compound2 loc (ty_size l) (ty_size r) >|? fun size -> + meta_compound2 loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> let (Ex_dand cmp) = dand (is_comparable l) (is_comparable r) in - Ty_ex_c (Or_t (l, r, {size}, cmp)) + Ty_ex_c (Or_t (l, r, metadata, cmp)) let or_bytes_bool_t = Or_t (bytes_t, bool_t, {size = Type_size.three}, YesYes) let comparable_or_t loc l r = - Type_size.compound2 loc (ty_size l) (ty_size r) >|? fun size -> - Or_t (l, r, {size}, YesYes) + meta_compound2 loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> + Or_t (l, r, metadata, YesYes) let lambda_t loc l r = - Type_size.compound2 loc (ty_size l) (ty_size r) >|? fun size -> - Lambda_t (l, r, {size}) + meta_compound2 loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> + Lambda_t (l, r, metadata) let option_t loc t = - Type_size.compound1 loc (ty_size t) >|? fun size -> + meta_compound1 loc (ty_metadata t) >|? fun metadata -> let cmp = is_comparable t in - Option_t (t, {size}, cmp) + Option_t (t, metadata, cmp) let option_mutez_t = Option_t (mutez_t, {size = Type_size.two}, Yes) @@ -1884,34 +1891,34 @@ let option_pair_int_nat_t = Yes ) let list_t loc t = - Type_size.compound1 loc (ty_size t) >|? fun size -> List_t (t, {size}) + meta_compound1 loc (ty_metadata t) >|? fun metadata -> List_t (t, metadata) let operation_t = Operation_t let list_operation_t = List_t (operation_t, {size = Type_size.two}) let set_t loc t = - Type_size.compound1 loc (ty_size t) >|? fun size -> Set_t (t, {size}) + meta_compound1 loc (ty_metadata t) >|? fun metadata -> Set_t (t, metadata) let map_t loc l r = - Type_size.compound2 loc (ty_size l) (ty_size r) >|? fun size -> - Map_t (l, r, {size}) + meta_compound2 loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> + Map_t (l, r, metadata) let big_map_t loc l r = - Type_size.compound2 loc (ty_size l) (ty_size r) >|? fun size -> - Big_map_t (l, r, {size}) + meta_compound2 loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> + Big_map_t (l, r, metadata) let contract_t loc t = - Type_size.compound1 loc (ty_size t) >|? fun size -> Contract_t (t, {size}) + meta_compound1 loc (ty_metadata t) >|? fun metadata -> Contract_t (t, metadata) let contract_unit_t = Contract_t (unit_t, {size = Type_size.two}) -let sapling_transaction_t ~memo_size = Sapling_transaction_t memo_size +let sapling_transaction_t ~memo_metadata = Sapling_transaction_t memo_metadata -let sapling_transaction_deprecated_t ~memo_size = - Sapling_transaction_deprecated_t memo_size +let sapling_transaction_deprecated_t ~memo_metadata = + Sapling_transaction_deprecated_t memo_metadata -let sapling_state_t ~memo_size = Sapling_state_t memo_size +let sapling_state_t ~memo_metadata = Sapling_state_t memo_metadata let chain_id_t = Chain_id_t @@ -1924,7 +1931,7 @@ let bls12_381_g2_t = Bls12_381_g2_t let bls12_381_fr_t = Bls12_381_fr_t let ticket_t loc t = - Type_size.compound1 loc (ty_size t) >|? fun size -> Ticket_t (t, {size}) + meta_compound1 loc (ty_metadata t) >|? fun metadata -> Ticket_t (t, metadata) let chest_key_t = Chest_key_t -- GitLab From d81c08281bf7a00f811de44e906c980631c897ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Fri, 7 Apr 2023 13:18:52 +0200 Subject: [PATCH 2/4] Proto/Michelson: restrict type of unsafe meta_compound functions This is to avoid unintended invariant breakage --- .../lib_protocol/script_typed_ir.ml | 81 ++++++++++++++++--- 1 file changed, 69 insertions(+), 12 deletions(-) diff --git a/src/proto_alpha/lib_protocol/script_typed_ir.ml b/src/proto_alpha/lib_protocol/script_typed_ir.ml index ec1a5fd9eea0..f0a56a595867 100644 --- a/src/proto_alpha/lib_protocol/script_typed_ir.ml +++ b/src/proto_alpha/lib_protocol/script_typed_ir.ml @@ -1731,6 +1731,62 @@ let meta_compound2 loc ({size = size1} : _ ty_metadata) ({size = size2} : _ ty_metadata) : _ ty_metadata tzresult = Type_size.compound2 loc size1 size2 >|? fun size -> {size} +let pair_metadata : + Script.location -> + 'a ty_metadata -> + 'b ty_metadata -> + ('a, 'b) pair ty_metadata tzresult = + meta_compound2 + +let or_metadata : + Script.location -> + 'a ty_metadata -> + 'b ty_metadata -> + ('a, 'b) or_ ty_metadata tzresult = + meta_compound2 + +let lambda_metadata : + Script.location -> + 'a ty_metadata -> + 'b ty_metadata -> + ('a, 'b) lambda ty_metadata tzresult = + meta_compound2 + +let option_metadata : + Script.location -> 'a ty_metadata -> 'a option ty_metadata tzresult = + meta_compound1 + +let list_metadata : + Script.location -> 'a ty_metadata -> 'a Script_list.t ty_metadata tzresult = + meta_compound1 + +let set_metadata : + Script.location -> 'a ty_metadata -> 'a set ty_metadata tzresult = + meta_compound1 + +let map_metadata : + Script.location -> + 'a ty_metadata -> + 'b ty_metadata -> + ('a, 'b) map ty_metadata tzresult = + meta_compound2 + +let big_map_metadata : + Script.location -> + 'a ty_metadata -> + 'b ty_metadata -> + ('a, 'b) big_map ty_metadata tzresult = + meta_compound2 + +let contract_metadata : + Script.location -> 'a ty_metadata -> 'a typed_contract ty_metadata tzresult + = + meta_compound1 + +let ticket_metadata : + Script.location -> 'a ty_metadata -> 'a ticket ty_metadata tzresult = + meta_compound1 + let ty_metadata : type a ac. (a, ac) ty -> a ty_metadata = function | Unit_t | Never_t | Int_t | Nat_t | Signature_t | String_t | Bytes_t | Mutez_t | Bool_t | Key_hash_t | Key_t | Timestamp_t | Chain_id_t | Address_t @@ -1822,14 +1878,14 @@ let pair_t : Script.location -> (a, ac) ty -> (b, bc) ty -> (a, b) pair ty_ex_c tzresult = fun loc l r -> - meta_compound2 loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> + pair_metadata loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> let (Ex_dand cmp) = dand (is_comparable l) (is_comparable r) in Ty_ex_c (Pair_t (l, r, metadata, cmp)) let pair_3_t loc l m r = pair_t loc m r >>? fun (Ty_ex_c r) -> pair_t loc l r let comparable_pair_t loc l r = - meta_compound2 loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> + pair_metadata loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> Pair_t (l, r, metadata, YesYes) let comparable_pair_3_t loc l m r = @@ -1839,22 +1895,22 @@ let or_t : type a ac b bc. Script.location -> (a, ac) ty -> (b, bc) ty -> (a, b) or_ ty_ex_c tzresult = fun loc l r -> - meta_compound2 loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> + or_metadata loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> let (Ex_dand cmp) = dand (is_comparable l) (is_comparable r) in Ty_ex_c (Or_t (l, r, metadata, cmp)) let or_bytes_bool_t = Or_t (bytes_t, bool_t, {size = Type_size.three}, YesYes) let comparable_or_t loc l r = - meta_compound2 loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> + or_metadata loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> Or_t (l, r, metadata, YesYes) let lambda_t loc l r = - meta_compound2 loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> + lambda_metadata loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> Lambda_t (l, r, metadata) let option_t loc t = - meta_compound1 loc (ty_metadata t) >|? fun metadata -> + option_metadata loc (ty_metadata t) >|? fun metadata -> let cmp = is_comparable t in Option_t (t, metadata, cmp) @@ -1891,25 +1947,26 @@ let option_pair_int_nat_t = Yes ) let list_t loc t = - meta_compound1 loc (ty_metadata t) >|? fun metadata -> List_t (t, metadata) + list_metadata loc (ty_metadata t) >|? fun metadata -> List_t (t, metadata) let operation_t = Operation_t let list_operation_t = List_t (operation_t, {size = Type_size.two}) let set_t loc t = - meta_compound1 loc (ty_metadata t) >|? fun metadata -> Set_t (t, metadata) + set_metadata loc (ty_metadata t) >|? fun metadata -> Set_t (t, metadata) let map_t loc l r = - meta_compound2 loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> + map_metadata loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> Map_t (l, r, metadata) let big_map_t loc l r = - meta_compound2 loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> + big_map_metadata loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> Big_map_t (l, r, metadata) let contract_t loc t = - meta_compound1 loc (ty_metadata t) >|? fun metadata -> Contract_t (t, metadata) + contract_metadata loc (ty_metadata t) >|? fun metadata -> + Contract_t (t, metadata) let contract_unit_t = Contract_t (unit_t, {size = Type_size.two}) @@ -1931,7 +1988,7 @@ let bls12_381_g2_t = Bls12_381_g2_t let bls12_381_fr_t = Bls12_381_fr_t let ticket_t loc t = - meta_compound1 loc (ty_metadata t) >|? fun metadata -> Ticket_t (t, metadata) + ticket_metadata loc (ty_metadata t) >|? fun metadata -> Ticket_t (t, metadata) let chest_key_t = Chest_key_t -- GitLab From 9cfa9b85e7f1cb097d1713fa033497aa5e009c10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Fri, 7 Apr 2023 13:36:32 +0200 Subject: [PATCH 3/4] Proto/Michelson: same for meta_basic --- .../lib_protocol/script_typed_ir.ml | 84 +++++++++++++++++-- 1 file changed, 76 insertions(+), 8 deletions(-) diff --git a/src/proto_alpha/lib_protocol/script_typed_ir.ml b/src/proto_alpha/lib_protocol/script_typed_ir.ml index f0a56a595867..7d3560a80774 100644 --- a/src/proto_alpha/lib_protocol/script_typed_ir.ml +++ b/src/proto_alpha/lib_protocol/script_typed_ir.ml @@ -1731,6 +1731,57 @@ let meta_compound2 loc ({size = size1} : _ ty_metadata) ({size = size2} : _ ty_metadata) : _ ty_metadata tzresult = Type_size.compound2 loc size1 size2 >|? fun size -> {size} +let unit_metadata : unit ty_metadata = meta_basic + +let never_metadata : never ty_metadata = meta_basic + +let int_metadata : z num ty_metadata = meta_basic + +let nat_metadata : n num ty_metadata = meta_basic + +let signature_metadata : signature ty_metadata = meta_basic + +let string_metadata : Script_string.t ty_metadata = meta_basic + +let bytes_metadata : bytes ty_metadata = meta_basic + +let mutez_metadata : Tez.t ty_metadata = meta_basic + +let bool_metadata : bool ty_metadata = meta_basic + +let key_hash_metadata : public_key_hash ty_metadata = meta_basic + +let key_metadata : public_key ty_metadata = meta_basic + +let timestamp_metadata : Script_timestamp.t ty_metadata = meta_basic + +let chain_id_metadata : Script_chain_id.t ty_metadata = meta_basic + +let address_metadata : address ty_metadata = meta_basic + +let tx_rollup_l2_address_metadata : tx_rollup_l2_address ty_metadata = + meta_basic + +let sapling_transaction_metadata : Sapling.transaction ty_metadata = meta_basic + +let sapling_transaction_deprecated_metadata : + Sapling.Legacy.transaction ty_metadata = + meta_basic + +let sapling_state_metadata : Sapling.state ty_metadata = meta_basic + +let operation_metadata : operation ty_metadata = meta_basic + +let bls12_381_g1_metadata : Script_bls.G1.t ty_metadata = meta_basic + +let bls12_381_g2_metadata : Script_bls.G2.t ty_metadata = meta_basic + +let bls12_381_fr_metadata : Script_bls.Fr.t ty_metadata = meta_basic + +let chest_metadata : Script_timelock.chest ty_metadata = meta_basic + +let chest_key_metadata : Script_timelock.chest_key ty_metadata = meta_basic + let pair_metadata : Script.location -> 'a ty_metadata -> @@ -1788,10 +1839,21 @@ let ticket_metadata : meta_compound1 let ty_metadata : type a ac. (a, ac) ty -> a ty_metadata = function - | Unit_t | Never_t | Int_t | Nat_t | Signature_t | String_t | Bytes_t - | Mutez_t | Bool_t | Key_hash_t | Key_t | Timestamp_t | Chain_id_t | Address_t - | Tx_rollup_l2_address_t -> - meta_basic + | Unit_t -> unit_metadata + | Never_t -> never_metadata + | Int_t -> int_metadata + | Nat_t -> nat_metadata + | Signature_t -> signature_metadata + | String_t -> string_metadata + | Bytes_t -> bytes_metadata + | Mutez_t -> mutez_metadata + | Bool_t -> bool_metadata + | Key_hash_t -> key_hash_metadata + | Key_t -> key_metadata + | Timestamp_t -> timestamp_metadata + | Chain_id_t -> chain_id_metadata + | Address_t -> address_metadata + | Tx_rollup_l2_address_t -> tx_rollup_l2_address_metadata | Pair_t (_, _, meta, _) -> meta | Or_t (_, _, meta, _) -> meta | Option_t (_, meta, _) -> meta @@ -1802,10 +1864,16 @@ let ty_metadata : type a ac. (a, ac) ty -> a ty_metadata = function | Big_map_t (_, _, meta) -> meta | Ticket_t (_, meta) -> meta | Contract_t (_, meta) -> meta - | Sapling_transaction_t _ | Sapling_transaction_deprecated_t _ - | Sapling_state_t _ | Operation_t | Bls12_381_g1_t | Bls12_381_g2_t - | Bls12_381_fr_t | Chest_t | Chest_key_t -> - meta_basic + | Sapling_transaction_t _ -> sapling_transaction_metadata + | Sapling_transaction_deprecated_t _ -> + sapling_transaction_deprecated_metadata + | Sapling_state_t _ -> sapling_state_metadata + | Operation_t -> operation_metadata + | Bls12_381_g1_t -> bls12_381_g1_metadata + | Bls12_381_g2_t -> bls12_381_g2_metadata + | Bls12_381_fr_t -> bls12_381_fr_metadata + | Chest_t -> chest_metadata + | Chest_key_t -> chest_key_metadata let ty_size t = (ty_metadata t).size -- GitLab From 7490d9e3dc967641144f717f5bbacf34c30561dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Cauderlier?= Date: Fri, 7 Apr 2023 13:49:03 +0200 Subject: [PATCH 4/4] Proto/Michelson: toplevel asserts replace Type_size.{two,three,four} --- .../lib_protocol/script_typed_ir.ml | 82 ++++++++++--------- 1 file changed, 43 insertions(+), 39 deletions(-) diff --git a/src/proto_alpha/lib_protocol/script_typed_ir.ml b/src/proto_alpha/lib_protocol/script_typed_ir.ml index 7d3560a80774..f9c1d7cebc5d 100644 --- a/src/proto_alpha/lib_protocol/script_typed_ir.ml +++ b/src/proto_alpha/lib_protocol/script_typed_ir.ml @@ -260,12 +260,6 @@ module type TYPE_SIZE = sig val one : _ t - val two : _ t - - val three : _ t - - val four : (_, _) pair option t - val compound1 : Script.location -> _ t -> _ t tzresult val compound2 : Script.location -> _ t -> _ t -> _ t tzresult @@ -285,12 +279,6 @@ module Type_size : TYPE_SIZE = struct let one = 1 - let two = 2 - - let three = 3 - - let four = 4 - let check_eq : type a b error_trace. error_details:(_, error_trace) Script_tc_errors.error_details -> @@ -1915,6 +1903,16 @@ let is_comparable : type v c. (v, c) ty -> c dbool = function type 'v ty_ex_c = Ty_ex_c : ('v, _) ty -> 'v ty_ex_c [@@ocaml.unboxed] +let assert_ok1 f x = + match f Micheline.dummy_location x with + | Ok res -> res + | Error _ -> assert false + +let assert_ok2 f x y = + match f Micheline.dummy_location x y with + | Ok res -> res + | Error _ -> assert false + let unit_t = Unit_t let int_t = Int_t @@ -1967,7 +1965,12 @@ let or_t : let (Ex_dand cmp) = dand (is_comparable l) (is_comparable r) in Ty_ex_c (Or_t (l, r, metadata, cmp)) -let or_bytes_bool_t = Or_t (bytes_t, bool_t, {size = Type_size.three}, YesYes) +let or_bytes_bool_t = + Or_t + ( bytes_t, + bool_t, + assert_ok2 or_metadata bytes_metadata bool_metadata, + YesYes ) let comparable_or_t loc l r = or_metadata loc (ty_metadata l) (ty_metadata r) >|? fun metadata -> @@ -1982,44 +1985,44 @@ let option_t loc t = let cmp = is_comparable t in Option_t (t, metadata, cmp) -let option_mutez_t = Option_t (mutez_t, {size = Type_size.two}, Yes) +let option_mutez_t = + Option_t (mutez_t, assert_ok1 option_metadata mutez_metadata, Yes) -let option_string_t = Option_t (string_t, {size = Type_size.two}, Yes) +let option_string_t = + Option_t (string_t, assert_ok1 option_metadata string_metadata, Yes) -let option_bytes_t = Option_t (bytes_t, {size = Type_size.two}, Yes) +let option_bytes_t = + Option_t (bytes_t, assert_ok1 option_metadata bytes_metadata, Yes) -let option_nat_t = Option_t (nat_t, {size = Type_size.two}, Yes) +let option_nat_t = Option_t (nat_t, assert_ok1 option_metadata nat_metadata, Yes) let option_pair_nat_nat_t = - Option_t - ( Pair_t (nat_t, nat_t, {size = Type_size.three}, YesYes), - {size = Type_size.four}, - Yes ) + let pmetadata = assert_ok2 pair_metadata nat_metadata nat_metadata in + let ometadata = assert_ok1 option_metadata pmetadata in + Option_t (Pair_t (nat_t, nat_t, pmetadata, YesYes), ometadata, Yes) let option_pair_nat_mutez_t = - Option_t - ( Pair_t (nat_t, mutez_t, {size = Type_size.three}, YesYes), - {size = Type_size.four}, - Yes ) + let pmetadata = assert_ok2 pair_metadata nat_metadata mutez_metadata in + let ometadata = assert_ok1 option_metadata pmetadata in + Option_t (Pair_t (nat_t, mutez_t, pmetadata, YesYes), ometadata, Yes) let option_pair_mutez_mutez_t = - Option_t - ( Pair_t (mutez_t, mutez_t, {size = Type_size.three}, YesYes), - {size = Type_size.four}, - Yes ) + let pmetadata = assert_ok2 pair_metadata mutez_metadata mutez_metadata in + let ometadata = assert_ok1 option_metadata pmetadata in + Option_t (Pair_t (mutez_t, mutez_t, pmetadata, YesYes), ometadata, Yes) let option_pair_int_nat_t = - Option_t - ( Pair_t (int_t, nat_t, {size = Type_size.three}, YesYes), - {size = Type_size.four}, - Yes ) + let pmetadata = assert_ok2 pair_metadata int_metadata nat_metadata in + let ometadata = assert_ok1 option_metadata pmetadata in + Option_t (Pair_t (int_t, nat_t, pmetadata, YesYes), ometadata, Yes) let list_t loc t = list_metadata loc (ty_metadata t) >|? fun metadata -> List_t (t, metadata) let operation_t = Operation_t -let list_operation_t = List_t (operation_t, {size = Type_size.two}) +let list_operation_t = + List_t (operation_t, assert_ok1 list_metadata operation_metadata) let set_t loc t = set_metadata loc (ty_metadata t) >|? fun metadata -> Set_t (t, metadata) @@ -2036,14 +2039,15 @@ let contract_t loc t = contract_metadata loc (ty_metadata t) >|? fun metadata -> Contract_t (t, metadata) -let contract_unit_t = Contract_t (unit_t, {size = Type_size.two}) +let contract_unit_t = + Contract_t (unit_t, assert_ok1 contract_metadata unit_metadata) -let sapling_transaction_t ~memo_metadata = Sapling_transaction_t memo_metadata +let sapling_transaction_t ~memo_size = Sapling_transaction_t memo_size -let sapling_transaction_deprecated_t ~memo_metadata = - Sapling_transaction_deprecated_t memo_metadata +let sapling_transaction_deprecated_t ~memo_size = + Sapling_transaction_deprecated_t memo_size -let sapling_state_t ~memo_metadata = Sapling_state_t memo_metadata +let sapling_state_t ~memo_size = Sapling_state_t memo_size let chain_id_t = Chain_id_t -- GitLab