diff --git a/CHANGES.rst b/CHANGES.rst index 8db6c0bcad179d075849496a5b0d516a8024f4c6..435ea8dd6663f5edaa63ac0a6ad76e26d741d5c6 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -106,6 +106,8 @@ Protocol Compiler And Environment - Exposed a limited API to manipulate an Irmin binary tree within the protocol. + - Expose encoding with legacy attestation name. (MR :gl:`!8620`) + Codec ----- diff --git a/src/bin_client/test/proto_test_injection/main.ml b/src/bin_client/test/proto_test_injection/main.ml index 1f1fbcf51b4cdb78df51a4f3fbaeb6112feee3f9..6c4237ef6cd1ef7474586ceb098aa6c6a5f0b80d 100644 --- a/src/bin_client/test/proto_test_injection/main.ml +++ b/src/bin_client/test/proto_test_injection/main.ml @@ -41,16 +41,25 @@ type operation_data = unit let operation_data_encoding = Data_encoding.unit +let operation_data_encoding_with_legacy_attestation_name = + operation_data_encoding + type operation_receipt = unit let operation_receipt_encoding = Data_encoding.unit +let operation_receipt_encoding_with_legacy_attestation_name = + operation_receipt_encoding + let operation_data_and_receipt_encoding = Data_encoding.conv (function (), () -> ()) (fun () -> ((), ())) Data_encoding.unit +let operation_data_and_receipt_encoding_with_legacy_attestation_name = + operation_data_and_receipt_encoding + type operation = { shell : Operation.shell_header; protocol_data : operation_data; diff --git a/src/bin_node/node_replay_command.ml b/src/bin_node/node_replay_command.ml index 7b7098ebdfde71b21731e3132aa9b63387cfae15..02d582aa35a0135900a771fc9dab8ed9ed3fbbde 100644 --- a/src/bin_node/node_replay_command.ml +++ b/src/bin_node/node_replay_command.ml @@ -336,11 +336,16 @@ let replay_one_block strict main_chain_store validator_process block = in let to_json metadata_bytes = Data_encoding.Json.construct - Proto.operation_data_and_receipt_encoding + Proto + .operation_data_and_receipt_encoding_with_legacy_attestation_name Data_encoding.Binary. - ( of_bytes_exn Proto.operation_data_encoding op, - of_bytes_exn Proto.operation_receipt_encoding metadata_bytes - ) + ( of_bytes_exn + Proto.operation_data_encoding_with_legacy_attestation_name + op, + of_bytes_exn + Proto + .operation_receipt_encoding_with_legacy_attestation_name + metadata_bytes ) in let exp_json_opt, got_json_opt = match (exp_m, got_m) with diff --git a/src/lib_mockup/local_services.ml b/src/lib_mockup/local_services.ml index bfb1e1765a4fc9e46b04bf38133e083672c56b28..928eb32480679f359d0d59b2f6ab1794fe1912a3 100644 --- a/src/lib_mockup/local_services.ml +++ b/src/lib_mockup/local_services.ml @@ -252,7 +252,8 @@ module Make (E : MENV) = struct ~predecessor ~cache - let op_data_encoding = E.Protocol.operation_data_encoding + let op_data_encoding = + E.Protocol.operation_data_encoding_with_legacy_attestation_name let op_encoding = Data_encoding.( @@ -427,9 +428,7 @@ module Make (E : MENV) = struct let simulate_operation (state, preapply_result) op = let open Lwt_result_syntax in match - Data_encoding.Binary.to_bytes - E.Protocol.operation_data_encoding - op.E.Protocol.protocol_data + Data_encoding.Binary.to_bytes op_data_encoding op.E.Protocol.protocol_data with | Error _ -> failwith "mockup preapply_block: cannot deserialize operation" | Ok proto -> ( @@ -545,9 +544,7 @@ module Make (E : MENV) = struct let hash_protocol_operation op = match - Data_encoding.Binary.to_bytes - E.Protocol.operation_data_encoding - op.E.Protocol.protocol_data + Data_encoding.Binary.to_bytes op_data_encoding op.E.Protocol.protocol_data with | Error _ -> failwith "mockup preapply_operations: cannot deserialize operation" @@ -595,9 +592,7 @@ module Make (E : MENV) = struct | Error errs -> Tezos_rpc.Answer.fail errs))) let hash_op (shell, proto) = - let proto = - Data_encoding.Binary.to_bytes_exn E.Protocol.operation_data_encoding proto - in + let proto = Data_encoding.Binary.to_bytes_exn op_data_encoding proto in Operation.hash {shell; proto} let equal_op (a_shell_header, a_operation_data) @@ -642,7 +637,7 @@ module Make (E : MENV) = struct | Ok ({Operation.shell = shell_header; proto} as op) -> ( let operation_hash = Operation.hash op in let proto_op_opt = - Data_encoding.Binary.of_bytes E.Protocol.operation_data_encoding proto + Data_encoding.Binary.of_bytes op_data_encoding proto in match proto_op_opt with | Error _ -> Tezos_rpc.Answer.fail [Cannot_parse_op] @@ -678,7 +673,7 @@ module Make (E : MENV) = struct | Ok ({Operation.shell = shell_header; proto} as op) -> ( let operation_hash = Operation.hash op in let proto_op_opt = - Data_encoding.Binary.of_bytes E.Protocol.operation_data_encoding proto + Data_encoding.Binary.of_bytes op_data_encoding proto in match proto_op_opt with | Error _ -> Tezos_rpc.Answer.fail [Cannot_parse_op] diff --git a/src/lib_protocol_environment/environment_V0.ml b/src/lib_protocol_environment/environment_V0.ml index dd7852177506eb03566f2f3b9f1866fe3f79738f..59c79ea026f872a4cf21bee5dbd3e982628b655b 100644 --- a/src/lib_protocol_environment/environment_V0.ml +++ b/src/lib_protocol_environment/environment_V0.ml @@ -828,7 +828,7 @@ struct end module Lift (P : Updater.PROTOCOL) = struct - include IgnoreCaches (Environment_protocol_T.V0toV7 (LiftV0 (P))) + include IgnoreCaches (Environment_protocol_T.V0toV10 (LiftV0 (P))) let set_log_message_consumer _ = () diff --git a/src/lib_protocol_environment/environment_V1.ml b/src/lib_protocol_environment/environment_V1.ml index 6a04507f9cd22162f7be0be69dd476be0b6eacd8..ab6a393089e8c1d8cdfb663f8434e8571a866ca8 100644 --- a/src/lib_protocol_environment/environment_V1.ml +++ b/src/lib_protocol_environment/environment_V1.ml @@ -958,7 +958,7 @@ struct end module Lift (P : Updater.PROTOCOL) = struct - include IgnoreCaches (Environment_protocol_T.V0toV7 (LiftV1 (P))) + include IgnoreCaches (Environment_protocol_T.V0toV10 (LiftV1 (P))) let set_log_message_consumer _ = () diff --git a/src/lib_protocol_environment/environment_V10.ml b/src/lib_protocol_environment/environment_V10.ml index 6dafff36695fbc6b94ceac6fd536bb1832d21348..69e248bacb95179e32569bbf584ebaa90f597b8d 100644 --- a/src/lib_protocol_environment/environment_V10.ml +++ b/src/lib_protocol_environment/environment_V10.ml @@ -1074,7 +1074,7 @@ struct let activate = Context.set_protocol module type PROTOCOL = - Environment_protocol_T_V7.T + Environment_protocol_T_V10.T with type context := Context.t and type cache_value := Environment_context.Context.cache_value and type cache_key := Environment_context.Context.cache_key diff --git a/src/lib_protocol_environment/environment_V2.ml b/src/lib_protocol_environment/environment_V2.ml index 4586a6e800d425f95fe6b8b864d06007a17f2a94..3636ad6bd7ea07ad5522b222fca48212a79105fd 100644 --- a/src/lib_protocol_environment/environment_V2.ml +++ b/src/lib_protocol_environment/environment_V2.ml @@ -953,7 +953,7 @@ struct end module Lift (P : Updater.PROTOCOL) = struct - include IgnoreCaches (Environment_protocol_T.V0toV7 (LiftV2 (P))) + include IgnoreCaches (Environment_protocol_T.V0toV10 (LiftV2 (P))) let set_log_message_consumer _ = () diff --git a/src/lib_protocol_environment/environment_V3.ml b/src/lib_protocol_environment/environment_V3.ml index 4ba54c68e866e4fc03e4c173ece912a87c20ef62..1194e7f4f9050f5cb2cb560f4c9bc6d13db584d5 100644 --- a/src/lib_protocol_environment/environment_V3.ml +++ b/src/lib_protocol_environment/environment_V3.ml @@ -1044,6 +1044,15 @@ struct include P + let operation_data_encoding_with_legacy_attestation_name = + operation_data_encoding + + let operation_receipt_encoding_with_legacy_attestation_name = + operation_receipt_encoding + + let operation_data_and_receipt_encoding_with_legacy_attestation_name = + operation_data_and_receipt_encoding + let value_of_key ~chain_id ~predecessor_context ~predecessor_timestamp ~predecessor_level ~predecessor_fitness ~predecessor ~timestamp = let open Lwt_result_syntax in diff --git a/src/lib_protocol_environment/environment_V4.ml b/src/lib_protocol_environment/environment_V4.ml index b48d761c30013078dd00e6e1bcbc63a221621b0d..f399cfbde17b463c4dfa23b284f73bcbba6a0913 100644 --- a/src/lib_protocol_environment/environment_V4.ml +++ b/src/lib_protocol_environment/environment_V4.ml @@ -1061,6 +1061,15 @@ struct include P + let operation_data_encoding_with_legacy_attestation_name = + operation_data_encoding + + let operation_receipt_encoding_with_legacy_attestation_name = + operation_receipt_encoding + + let operation_data_and_receipt_encoding_with_legacy_attestation_name = + operation_data_and_receipt_encoding + let value_of_key ~chain_id ~predecessor_context ~predecessor_timestamp ~predecessor_level ~predecessor_fitness ~predecessor ~timestamp = let open Lwt_result_syntax in diff --git a/src/lib_protocol_environment/environment_V5.ml b/src/lib_protocol_environment/environment_V5.ml index e61535c5bd1875af4fad3794022e7d5e4982bc63..2810f3269a02feb1c1a9055d24d4b53c1db4f9ac 100644 --- a/src/lib_protocol_environment/environment_V5.ml +++ b/src/lib_protocol_environment/environment_V5.ml @@ -1038,6 +1038,15 @@ struct include P + let operation_data_encoding_with_legacy_attestation_name = + operation_data_encoding + + let operation_receipt_encoding_with_legacy_attestation_name = + operation_receipt_encoding + + let operation_data_and_receipt_encoding_with_legacy_attestation_name = + operation_data_and_receipt_encoding + let value_of_key ~chain_id ~predecessor_context ~predecessor_timestamp ~predecessor_level ~predecessor_fitness ~predecessor ~timestamp = let open Lwt_result_syntax in diff --git a/src/lib_protocol_environment/environment_V6.ml b/src/lib_protocol_environment/environment_V6.ml index 69dbed6feeae21307c100db88566f381c958a44b..96c477845739352e67dea64f60f76a345a9c85a1 100644 --- a/src/lib_protocol_environment/environment_V6.ml +++ b/src/lib_protocol_environment/environment_V6.ml @@ -1128,6 +1128,15 @@ struct include P + let operation_data_encoding_with_legacy_attestation_name = + operation_data_encoding + + let operation_receipt_encoding_with_legacy_attestation_name = + operation_receipt_encoding + + let operation_data_and_receipt_encoding_with_legacy_attestation_name = + operation_data_and_receipt_encoding + let value_of_key ~chain_id ~predecessor_context ~predecessor_timestamp ~predecessor_level ~predecessor_fitness ~predecessor ~timestamp = let open Lwt_result_syntax in diff --git a/src/lib_protocol_environment/environment_V7.ml b/src/lib_protocol_environment/environment_V7.ml index 4371957a754b39b2412338b0f96a845c750e38cf..fd4bb1daccc2b315e31df35ab238c374b9a754a3 100644 --- a/src/lib_protocol_environment/environment_V7.ml +++ b/src/lib_protocol_environment/environment_V7.ml @@ -1110,6 +1110,15 @@ struct include P + let operation_data_encoding_with_legacy_attestation_name = + operation_data_encoding + + let operation_receipt_encoding_with_legacy_attestation_name = + operation_receipt_encoding + + let operation_data_and_receipt_encoding_with_legacy_attestation_name = + operation_data_and_receipt_encoding + let value_of_key ~chain_id ~predecessor_context ~predecessor_timestamp ~predecessor_level ~predecessor_fitness ~predecessor ~timestamp = let open Lwt_result_syntax in diff --git a/src/lib_protocol_environment/environment_V8.ml b/src/lib_protocol_environment/environment_V8.ml index 2bd9901836f6a4a1e8eb1dfe7e8eed1dba9db37c..a418d0daf486c8c6116472b8f2f37705886c932f 100644 --- a/src/lib_protocol_environment/environment_V8.ml +++ b/src/lib_protocol_environment/environment_V8.ml @@ -1156,6 +1156,15 @@ struct include P + let operation_data_encoding_with_legacy_attestation_name = + operation_data_encoding + + let operation_receipt_encoding_with_legacy_attestation_name = + operation_receipt_encoding + + let operation_data_and_receipt_encoding_with_legacy_attestation_name = + operation_data_and_receipt_encoding + let value_of_key ~chain_id ~predecessor_context ~predecessor_timestamp ~predecessor_level ~predecessor_fitness ~predecessor ~timestamp = let open Lwt_result_syntax in diff --git a/src/lib_protocol_environment/environment_V9.ml b/src/lib_protocol_environment/environment_V9.ml index 65142cf59d7431e0802b425e3856ef7aac810c3c..6395c37103cb3511f4673b9f67d7acf7fd4982af 100644 --- a/src/lib_protocol_environment/environment_V9.ml +++ b/src/lib_protocol_environment/environment_V9.ml @@ -1156,6 +1156,15 @@ struct include P + let operation_data_encoding_with_legacy_attestation_name = + operation_data_encoding + + let operation_receipt_encoding_with_legacy_attestation_name = + operation_receipt_encoding + + let operation_data_and_receipt_encoding_with_legacy_attestation_name = + operation_data_and_receipt_encoding + let value_of_key ~chain_id ~predecessor_context ~predecessor_timestamp ~predecessor_level ~predecessor_fitness ~predecessor ~timestamp = let open Lwt_result_syntax in diff --git a/src/lib_protocol_environment/environment_protocol_T.ml b/src/lib_protocol_environment/environment_protocol_T.ml index bfe09a073fdf4d85385fa049fb8b2644351f33df..f3947ab058ff5961fa17d61bfcb9e82480172c06 100644 --- a/src/lib_protocol_environment/environment_protocol_T.ml +++ b/src/lib_protocol_environment/environment_protocol_T.ml @@ -49,11 +49,11 @@ open Environment_context environment ([module type Vx_T]). If you want to mock this module type, see {!Environment_protocol_T_test}. *) -module type T = Environment_protocol_T_V7.T +module type T = Environment_protocol_T_V10.T (* Documentation for this interface may be found in module type [PROTOCOL] of [sigs/v6/updater.mli]. *) -module V0toV7 +module V0toV10 (E : Environment_protocol_T_V0.T with type context := Context.t and type quota := quota @@ -61,7 +61,7 @@ module V0toV7 and type rpc_context := rpc_context and type tztrace := Error_monad.tztrace and type 'a tzresult := 'a Error_monad.tzresult) : - Environment_protocol_T_V7.T + Environment_protocol_T_V10.T with type context := Context.t and type quota := quota and type validation_result := validation_result @@ -80,6 +80,15 @@ module V0toV7 and type cache_value = Context.Cache.value = struct include E + let operation_data_encoding_with_legacy_attestation_name = + operation_data_encoding + + let operation_receipt_encoding_with_legacy_attestation_name = + operation_receipt_encoding + + let operation_data_and_receipt_encoding_with_legacy_attestation_name = + operation_data_and_receipt_encoding + type application_state = validation_state type mode = diff --git a/src/lib_protocol_environment/environment_protocol_T_V10.ml b/src/lib_protocol_environment/environment_protocol_T_V10.ml new file mode 100644 index 0000000000000000000000000000000000000000..de815bec7a8f61f2e53547b3bc4aaac3ec32a0eb --- /dev/null +++ b/src/lib_protocol_environment/environment_protocol_T_V10.ml @@ -0,0 +1,220 @@ +(*****************************************************************************) +(* *) +(* Open Source License *) +(* Copyright (c) 2018 Dynamic Ledger Solutions, Inc. *) +(* Copyright (c) 2018 Nomadic Labs. *) +(* *) +(* Permission is hereby granted, free of charge, to any person obtaining a *) +(* copy of this software and associated documentation files (the "Software"),*) +(* to deal in the Software without restriction, including without limitation *) +(* the rights to use, copy, modify, merge, publish, distribute, sublicense, *) +(* and/or sell copies of the Software, and to permit persons to whom the *) +(* Software is furnished to do so, subject to the following conditions: *) +(* *) +(* The above copyright notice and this permission notice shall be included *) +(* in all copies or substantial portions of the Software. *) +(* *) +(* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*) +(* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *) +(* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *) +(* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER*) +(* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *) +(* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *) +(* DEALINGS IN THE SOFTWARE. *) +(* *) +(*****************************************************************************) + +(* Documentation for this interface can be found in + module type [PROTOCOL] of [sigs/v10/updater.mli]. *) + +module type T = sig + type context + + type quota + + type validation_result + + type rpc_context + + type tztrace + + type 'a tzresult + + val max_block_length : int + + val max_operation_data_length : int + + val validation_passes : quota list + + type block_header_data + + val block_header_data_encoding : block_header_data Data_encoding.t + + type block_header = { + shell : Block_header.shell_header; + protocol_data : block_header_data; + } + + type block_header_metadata + + val block_header_metadata_encoding : block_header_metadata Data_encoding.t + + type operation_data + + type operation_receipt + + type operation = { + shell : Operation.shell_header; + protocol_data : operation_data; + } + + val operation_data_encoding : operation_data Data_encoding.t + + val operation_data_encoding_with_legacy_attestation_name : + operation_data Data_encoding.t + + val operation_receipt_encoding : operation_receipt Data_encoding.t + + val operation_receipt_encoding_with_legacy_attestation_name : + operation_receipt Data_encoding.t + + val operation_data_and_receipt_encoding : + (operation_data * operation_receipt) Data_encoding.t + + val operation_data_and_receipt_encoding_with_legacy_attestation_name : + (operation_data * operation_receipt) Data_encoding.t + + val acceptable_pass : operation -> int option + + val compare_operations : + Tezos_crypto.Hashed.Operation_hash.t * operation -> + Tezos_crypto.Hashed.Operation_hash.t * operation -> + int + + type validation_state + + type application_state + + type mode = + | Application of block_header + | Partial_validation of block_header + | Construction of { + predecessor_hash : Tezos_crypto.Hashed.Block_hash.t; + timestamp : Time.Protocol.t; + block_header_data : block_header_data; + } + | Partial_construction of { + predecessor_hash : Tezos_crypto.Hashed.Block_hash.t; + timestamp : Time.Protocol.t; + } + + val begin_validation : + context -> + Tezos_crypto.Hashed.Chain_id.t -> + mode -> + predecessor:Block_header.shell_header -> + validation_state tzresult Lwt.t + + val validate_operation : + ?check_signature:bool -> + validation_state -> + Tezos_crypto.Hashed.Operation_hash.t -> + operation -> + validation_state tzresult Lwt.t + + val finalize_validation : validation_state -> unit tzresult Lwt.t + + val begin_application : + context -> + Tezos_crypto.Hashed.Chain_id.t -> + mode -> + predecessor:Block_header.shell_header -> + application_state tzresult Lwt.t + + val apply_operation : + application_state -> + Tezos_crypto.Hashed.Operation_hash.t -> + operation -> + (application_state * operation_receipt) tzresult Lwt.t + + val finalize_application : + application_state -> + Block_header.shell_header option -> + (validation_result * block_header_metadata) tzresult Lwt.t + + val rpc_services : rpc_context Tezos_rpc.Directory.t + + val init : + Tezos_crypto.Hashed.Chain_id.t -> + context -> + Block_header.shell_header -> + validation_result tzresult Lwt.t + + type cache_value + + type cache_key + + val value_of_key : + chain_id:Tezos_crypto.Hashed.Chain_id.t -> + predecessor_context:context -> + predecessor_timestamp:Time.Protocol.t -> + predecessor_level:Int32.t -> + predecessor_fitness:Fitness.t -> + predecessor:Tezos_crypto.Hashed.Block_hash.t -> + timestamp:Time.Protocol.t -> + (cache_key -> cache_value tzresult Lwt.t) tzresult Lwt.t + + module Mempool : sig + type t + + type validation_info + + type conflict_handler = + existing_operation:Tezos_crypto.Hashed.Operation_hash.t * operation -> + new_operation:Tezos_crypto.Hashed.Operation_hash.t * operation -> + [`Keep | `Replace] + + type operation_conflict = + | Operation_conflict of { + existing : Tezos_crypto.Hashed.Operation_hash.t; + new_operation : Tezos_crypto.Hashed.Operation_hash.t; + } + + type add_result = + | Added + | Replaced of {removed : Tezos_crypto.Hashed.Operation_hash.t} + | Unchanged + + type add_error = + | Validation_error of tztrace + | Add_conflict of operation_conflict + + type merge_error = + | Incompatible_mempool + | Merge_conflict of operation_conflict + + val init : + context -> + Tezos_crypto.Hashed.Chain_id.t -> + head_hash:Tezos_crypto.Hashed.Block_hash.t -> + head:Block_header.shell_header -> + (validation_info * t) tzresult Lwt.t + + val encoding : t Data_encoding.t + + val add_operation : + ?check_signature:bool -> + ?conflict_handler:conflict_handler -> + validation_info -> + t -> + Tezos_crypto.Hashed.Operation_hash.t * operation -> + (t * add_result, add_error) result Lwt.t + + val remove_operation : t -> Tezos_crypto.Hashed.Operation_hash.t -> t + + val merge : + ?conflict_handler:conflict_handler -> t -> t -> (t, merge_error) result + + val operations : t -> operation Tezos_crypto.Hashed.Operation_hash.Map.t + end +end diff --git a/src/lib_protocol_environment/environment_protocol_T_test.ml b/src/lib_protocol_environment/environment_protocol_T_test.ml index 940e1b92bfd0b51b0cb674b10d1b60db66ba0925..c79fddeb4421b457395ee2f7fb7b7c920f1147c4 100644 --- a/src/lib_protocol_environment/environment_protocol_T_test.ml +++ b/src/lib_protocol_environment/environment_protocol_T_test.ml @@ -98,10 +98,19 @@ module Mock_all_unit : let operation_data_and_receipt_encoding = Data_encoding.conv (Fun.const ()) (Fun.const ((), ())) Data_encoding.unit + let operation_data_and_receipt_encoding_with_legacy_attestation_name = + operation_data_and_receipt_encoding + let operation_receipt_encoding = Data_encoding.unit + let operation_receipt_encoding_with_legacy_attestation_name = + operation_receipt_encoding + let operation_data_encoding = Data_encoding.unit + let operation_data_encoding_with_legacy_attestation_name = + operation_data_encoding + let block_header_metadata_encoding = Data_encoding.unit let block_header_data_encoding = Data_encoding.unit diff --git a/src/lib_protocol_environment/sigs/v10.ml b/src/lib_protocol_environment/sigs/v10.ml index 3bbd206375eba50f34dcf944571e71330f482498..3944900bfe6c98accdd3ac8e942259f627a83ae3 100644 --- a/src/lib_protocol_environment/sigs/v10.ml +++ b/src/lib_protocol_environment/sigs/v10.ml @@ -11428,16 +11428,31 @@ module type PROTOCOL = sig protocol_data : operation_data; } - (** Encoding for economoic protocol-specific operation data. *) + (** Encoding for protocol-specific operation data. *) val operation_data_encoding : operation_data Data_encoding.t - (** Encoding for eonomic protocol-specific operation receipts. *) + (** Encoding for protocol-specific operation data. This encoding uses the + attestation legacy name: endorsement. *) + val operation_data_encoding_with_legacy_attestation_name : + operation_data Data_encoding.t + + (** Encoding for protocol-specific operation receipts. *) val operation_receipt_encoding : operation_receipt Data_encoding.t + (** Encoding for protocol-specific operation receipts. This encoding uses the + attestation legacy name: endorsement. *) + val operation_receipt_encoding_with_legacy_attestation_name : + operation_receipt Data_encoding.t + (** Encoding that mixes an operation data and its receipt. *) val operation_data_and_receipt_encoding : (operation_data * operation_receipt) Data_encoding.t + (** Encoding that mixes an operation data and its receipt. This encoding uses + the attestation legacy name: endorsement. *) + val operation_data_and_receipt_encoding_with_legacy_attestation_name : + (operation_data * operation_receipt) Data_encoding.t + (** [acceptable_pass op] gives the validation pass in which the input operation [op] can appear. For instance, it results in [Some 0] if [op] only belongs to the first pass. When [op] is diff --git a/src/lib_protocol_environment/sigs/v10/updater.mli b/src/lib_protocol_environment/sigs/v10/updater.mli index 139da9e137821c91f37fb7540069e1de716f6bee..5a7089ab7f1e63bc89d7c094970587dbe02bea09 100644 --- a/src/lib_protocol_environment/sigs/v10/updater.mli +++ b/src/lib_protocol_environment/sigs/v10/updater.mli @@ -114,16 +114,31 @@ module type PROTOCOL = sig protocol_data : operation_data; } - (** Encoding for economoic protocol-specific operation data. *) + (** Encoding for protocol-specific operation data. *) val operation_data_encoding : operation_data Data_encoding.t - (** Encoding for eonomic protocol-specific operation receipts. *) + (** Encoding for protocol-specific operation data. This encoding uses the + attestation legacy name: endorsement. *) + val operation_data_encoding_with_legacy_attestation_name : + operation_data Data_encoding.t + + (** Encoding for protocol-specific operation receipts. *) val operation_receipt_encoding : operation_receipt Data_encoding.t + (** Encoding for protocol-specific operation receipts. This encoding uses the + attestation legacy name: endorsement. *) + val operation_receipt_encoding_with_legacy_attestation_name : + operation_receipt Data_encoding.t + (** Encoding that mixes an operation data and its receipt. *) val operation_data_and_receipt_encoding : (operation_data * operation_receipt) Data_encoding.t + (** Encoding that mixes an operation data and its receipt. This encoding uses + the attestation legacy name: endorsement. *) + val operation_data_and_receipt_encoding_with_legacy_attestation_name : + (operation_data * operation_receipt) Data_encoding.t + (** [acceptable_pass op] gives the validation pass in which the input operation [op] can appear. For instance, it results in [Some 0] if [op] only belongs to the first pass. When [op] is diff --git a/src/lib_shell/block_directory.ml b/src/lib_shell/block_directory.ml index 271660fc559e9a82a7567d0572e73f399478207a..54643fcbd835d7e699de3c82ae83783a306233c2 100644 --- a/src/lib_shell/block_directory.ml +++ b/src/lib_shell/block_directory.ml @@ -227,14 +227,16 @@ let build_raw_rpc_directory (module Proto : Block_services.PROTO) let convert_with_metadata chain_id (op : Operation.t) metadata : Block_services.operation = let protocol_data = - Data_encoding.Binary.of_bytes_exn Proto.operation_data_encoding op.proto + Data_encoding.Binary.of_bytes_exn + Proto.operation_data_encoding_with_legacy_attestation_name + op.proto in let receipt = match metadata with | Block_validation.Metadata bytes -> Block_services.Receipt (Data_encoding.Binary.of_bytes_exn - Proto.operation_receipt_encoding + Proto.operation_receipt_encoding_with_legacy_attestation_name bytes) | Too_large_metadata -> Too_large in @@ -248,7 +250,9 @@ let build_raw_rpc_directory (module Proto : Block_services.PROTO) in let convert_without_metadata chain_id (op : Operation.t) = let protocol_data = - Data_encoding.Binary.of_bytes_exn Proto.operation_data_encoding op.proto + Data_encoding.Binary.of_bytes_exn + Proto.operation_data_encoding_with_legacy_attestation_name + op.proto in { Block_services.chain_id; @@ -652,7 +656,8 @@ let build_raw_rpc_directory (module Proto : Block_services.PROTO) (fun op -> let proto = Data_encoding.Binary.to_bytes_exn - Next_proto.operation_data_encoding + Next_proto + .operation_data_encoding_with_legacy_attestation_name op.Next_proto.protocol_data in (op, {Operation.shell = op.shell; proto})) @@ -706,7 +711,7 @@ let build_raw_rpc_directory (module Proto : Block_services.PROTO) (fun op -> match Data_encoding.Binary.to_bytes - Next_proto.operation_data_encoding + Next_proto.operation_data_encoding_with_legacy_attestation_name op.Next_proto.protocol_data with | Error _ -> diff --git a/src/lib_shell/shell_operation.ml b/src/lib_shell/shell_operation.ml index 4c5c126658b976b17077e633cb6f8a8b97dd840c..a9b398650b41c7b7f35d1b3fd8da766e7911d845 100644 --- a/src/lib_shell/shell_operation.ml +++ b/src/lib_shell/shell_operation.ml @@ -55,7 +55,9 @@ module MakeParser (Proto : Tezos_protocol_environment.PROTOCOL) : type protocol_operation = Proto.operation let parse_unsafe (proto : bytes) : Proto.operation_data tzresult = - safe_binary_of_bytes Proto.operation_data_encoding proto + safe_binary_of_bytes + Proto.operation_data_encoding_with_legacy_attestation_name + proto let parse hash (raw : Operation.t) = let open Result_syntax in diff --git a/src/lib_shell/test/test_prevalidator_bounding.ml b/src/lib_shell/test/test_prevalidator_bounding.ml index 4bfc325748b5db432e0865dd66c2cfd094aa26e4..40fc0813eb05eb7908f2a1cdafe7959ad646722c 100644 --- a/src/lib_shell/test/test_prevalidator_bounding.ml +++ b/src/lib_shell/test/test_prevalidator_bounding.ml @@ -60,9 +60,15 @@ module Mock_protocol : let operation_data_encoding = Data_encoding.int16 + let operation_data_encoding_with_legacy_attestation_name = + operation_data_encoding + let operation_data_and_receipt_encoding = Data_encoding.conv fst (fun n -> (n, ())) Data_encoding.int16 + let operation_data_and_receipt_encoding_with_legacy_attestation_name = + operation_data_and_receipt_encoding + let acceptable_pass _ = assert false let compare_operations (oph1, {shell = _; protocol_data = n1}) diff --git a/src/lib_shell_services/block_services.ml b/src/lib_shell_services/block_services.ml index df373835e6ef7761f45a667a7b9e06308a880421..00c0dfe5c08507ac1b66a461ad241cd522710183 100644 --- a/src/lib_shell_services/block_services.ml +++ b/src/lib_shell_services/block_services.ml @@ -356,10 +356,19 @@ module type PROTO = sig val operation_data_encoding : operation_data Data_encoding.t + val operation_data_encoding_with_legacy_attestation_name : + operation_data Data_encoding.t + val operation_receipt_encoding : operation_receipt Data_encoding.t + val operation_receipt_encoding_with_legacy_attestation_name : + operation_receipt Data_encoding.t + val operation_data_and_receipt_encoding : (operation_data * operation_receipt) Data_encoding.t + + val operation_data_and_receipt_encoding_with_legacy_attestation_name : + (operation_data * operation_receipt) Data_encoding.t end type protocols = { @@ -483,7 +492,9 @@ module Make (Proto : PROTO) (Next_proto : PROTO) = struct (obj1 (req "protocol" (constant next_protocol_hash))) (merge_objs (dynamic_size Operation.shell_header_encoding) - (dynamic_size Next_proto.operation_data_encoding))) + (dynamic_size + Next_proto + .operation_data_encoding_with_legacy_attestation_name))) type operation_receipt = | Empty @@ -507,7 +518,7 @@ module Make (Proto : PROTO) (Next_proto : PROTO) = struct ~title:"Operation with too large metadata" (Tag 0) (merge_objs - Proto.operation_data_encoding + Proto.operation_data_encoding_with_legacy_attestation_name (obj1 (req "metadata" (constant "too large")))) (function | operation_data, Too_large -> Some (operation_data, ()) | _ -> None) @@ -515,13 +526,13 @@ module Make (Proto : PROTO) (Next_proto : PROTO) = struct case ~title:"Operation without metadata" (Tag 1) - Proto.operation_data_encoding + Proto.operation_data_encoding_with_legacy_attestation_name (function operation_data, Empty -> Some operation_data | _ -> None) (fun operation_data -> (operation_data, Empty)); case ~title:"Operation with metadata" (Tag 2) - Proto.operation_data_and_receipt_encoding + Proto.operation_data_and_receipt_encoding_with_legacy_attestation_name (function | operation_data, Receipt receipt -> Some (operation_data, receipt) | _ -> None) @@ -879,7 +890,9 @@ module Make (Proto : PROTO) (Next_proto : PROTO) = struct ~input:(list next_operation_encoding) ~output: (list - (dynamic_size Next_proto.operation_data_and_receipt_encoding)) + (dynamic_size + Next_proto + .operation_data_and_receipt_encoding_with_legacy_attestation_name)) Tezos_rpc.Path.(path / "operations") end @@ -1034,7 +1047,9 @@ module Make (Proto : PROTO) (Next_proto : PROTO) = struct (merge_objs (obj1 (req "hash" Operation_hash.encoding)) (dynamic_size Operation.shell_header_encoding)) - (dynamic_size Next_proto.operation_data_encoding))))) + (dynamic_size + Next_proto + .operation_data_encoding_with_legacy_attestation_name))))) (req "refused" (Operation_hash.Map.encoding @@ -1120,7 +1135,9 @@ module Make (Proto : PROTO) (Next_proto : PROTO) = struct (merge_objs (obj1 (req "hash" Operation_hash.encoding)) Operation.shell_header_encoding) - (dynamic_size Next_proto.operation_data_encoding))))) + (dynamic_size + Next_proto + .operation_data_encoding_with_legacy_attestation_name))))) (operations_with_error_encoding "refused") (operations_with_error_encoding "outdated") (operations_with_error_encoding "branch_refused") @@ -1778,13 +1795,22 @@ module Fake_protocol = struct let operation_data_encoding = Data_encoding.empty + let operation_data_encoding_with_legacy_attestation_name = + operation_data_encoding + let operation_receipt_encoding = Data_encoding.empty + let operation_receipt_encoding_with_legacy_attestation_name = + operation_receipt_encoding + let operation_data_and_receipt_encoding = Data_encoding.conv (fun ((), ()) -> ()) (fun () -> ((), ())) Data_encoding.empty + + let operation_data_and_receipt_encoding_with_legacy_attestation_name = + operation_data_and_receipt_encoding end module Empty = Make (Fake_protocol) (Fake_protocol) diff --git a/src/lib_shell_services/block_services.mli b/src/lib_shell_services/block_services.mli index 5c0273d168ad3f575cc405f54c03c7f56a0f083d..7e42ae7de9ef42e18a7290fa7d97e24b364c36ea 100644 --- a/src/lib_shell_services/block_services.mli +++ b/src/lib_shell_services/block_services.mli @@ -112,10 +112,19 @@ module type PROTO = sig val operation_data_encoding : operation_data Data_encoding.t + val operation_data_encoding_with_legacy_attestation_name : + operation_data Data_encoding.t + val operation_receipt_encoding : operation_receipt Data_encoding.t + val operation_receipt_encoding_with_legacy_attestation_name : + operation_receipt Data_encoding.t + val operation_data_and_receipt_encoding : (operation_data * operation_receipt) Data_encoding.t + + val operation_data_and_receipt_encoding_with_legacy_attestation_name : + (operation_data * operation_receipt) Data_encoding.t end type protocols = { diff --git a/src/lib_validation/block_validation.ml b/src/lib_validation/block_validation.ml index a56a1f850497b365e392a8daf82d4387c5fc7699..3a492688e05649481a7be8a0150e9aef43438467 100644 --- a/src/lib_validation/block_validation.ml +++ b/src/lib_validation/block_validation.ml @@ -434,7 +434,7 @@ module Make (Proto : Registered_protocol.T) = struct let op_hash = Operation.hash op in match Data_encoding.Binary.of_bytes_opt - Proto.operation_data_encoding + Proto.operation_data_encoding_with_legacy_attestation_name op.Operation.proto with | None -> @@ -494,12 +494,14 @@ module Make (Proto : Registered_protocol.T) = struct serializable/deserializable *) let bytes = Data_encoding.Binary.to_bytes_exn - Proto.operation_receipt_encoding + Proto + .operation_receipt_encoding_with_legacy_attestation_name receipt in let _ = Data_encoding.Binary.of_bytes_exn - Proto.operation_receipt_encoding + Proto + .operation_receipt_encoding_with_legacy_attestation_name bytes in let metadata = @@ -892,8 +894,10 @@ module Make (Proto : Registered_protocol.T) = struct match Data_encoding.Binary.( of_bytes_exn - Proto.operation_receipt_encoding - (to_bytes_exn Proto.operation_receipt_encoding receipt)) + Proto.operation_receipt_encoding_with_legacy_attestation_name + (to_bytes_exn + Proto.operation_receipt_encoding_with_legacy_attestation_name + receipt)) with | receipt -> Applied (pv, receipt) | exception exn -> @@ -916,7 +920,9 @@ module Make (Proto : Registered_protocol.T) = struct | Some protocol_data -> return protocol_data let parse_unsafe (proto : bytes) : Proto.operation_data tzresult = - safe_binary_of_bytes Proto.operation_data_encoding proto + safe_binary_of_bytes + Proto.operation_data_encoding_with_legacy_attestation_name + proto let parse (raw : Operation.t) = let open Result_syntax in diff --git a/src/proto_016_PtMumbai/lib_delegate/node_rpc.ml b/src/proto_016_PtMumbai/lib_delegate/node_rpc.ml index a0c9cb5f2454a90d27cb6fb195c5c2b5ed5ab98d..f77e8aec5635d03787f9aa8b604ad24393dd0d16 100644 --- a/src/proto_016_PtMumbai/lib_delegate/node_rpc.ml +++ b/src/proto_016_PtMumbai/lib_delegate/node_rpc.ml @@ -27,7 +27,8 @@ open Protocol open Alpha_context open Baking_cache open Baking_state -module Block_services = Block_services.Make (Protocol) (Protocol) +module Lifted_protocol = Tezos_protocol_016_PtMumbai_lifted.Lifted_protocol +module Block_services = Block_services.Make (Lifted_protocol) (Lifted_protocol) module Events = Baking_events.Node_rpc let inject_block cctxt ?(force = false) ~chain signed_block_header operations = diff --git a/src/proto_016_PtMumbai/lib_sc_rollup_node/dal_slots_tracker.ml b/src/proto_016_PtMumbai/lib_sc_rollup_node/dal_slots_tracker.ml index e1469af4c414cd54e18a9e750b056a0ec3816548..45b8758a29b21f00aa1289f4d25f9caa69884d45 100644 --- a/src/proto_016_PtMumbai/lib_sc_rollup_node/dal_slots_tracker.ml +++ b/src/proto_016_PtMumbai/lib_sc_rollup_node/dal_slots_tracker.ml @@ -25,7 +25,8 @@ open Protocol open Alpha_context -module Block_services = Block_services.Make (Protocol) (Protocol) +module Lifted_protocol = Tezos_protocol_016_PtMumbai_lifted.Lifted_protocol +module Block_services = Block_services.Make (Lifted_protocol) (Lifted_protocol) let ancestor_hash ~number_of_levels ({Node_context.genesis_info; _} as node_ctxt) head = diff --git a/src/proto_017_PtNairob/lib_delegate/node_rpc.ml b/src/proto_017_PtNairob/lib_delegate/node_rpc.ml index c4970bb28fe10860b5bb6342c243fcada71f7f7b..2fae4652e15e12be22d6ca7fc07814d4c90f77d8 100644 --- a/src/proto_017_PtNairob/lib_delegate/node_rpc.ml +++ b/src/proto_017_PtNairob/lib_delegate/node_rpc.ml @@ -27,7 +27,8 @@ open Protocol open Alpha_context open Baking_cache open Baking_state -module Block_services = Block_services.Make (Protocol) (Protocol) +module Lifted_protocol = Tezos_protocol_017_PtNairob_lifted.Lifted_protocol +module Block_services = Block_services.Make (Lifted_protocol) (Lifted_protocol) module Events = Baking_events.Node_rpc let inject_block cctxt ?(force = false) ~chain signed_block_header operations = diff --git a/src/proto_017_PtNairob/lib_sc_rollup_node/dal_slots_tracker.ml b/src/proto_017_PtNairob/lib_sc_rollup_node/dal_slots_tracker.ml index 67fcbebfcedfe9efaf5b99b45fc7d539f2f6996f..bb366e4012acd16868ecf9adc11ddf9443de95b7 100644 --- a/src/proto_017_PtNairob/lib_sc_rollup_node/dal_slots_tracker.ml +++ b/src/proto_017_PtNairob/lib_sc_rollup_node/dal_slots_tracker.ml @@ -25,7 +25,8 @@ open Protocol open Alpha_context -module Block_services = Block_services.Make (Protocol) (Protocol) +module Lifted_protocol = Tezos_protocol_017_PtNairob_lifted.Lifted_protocol +module Block_services = Block_services.Make (Lifted_protocol) (Lifted_protocol) let ancestor_hash ~number_of_levels ({Node_context.genesis_info; _} as node_ctxt) head = diff --git a/src/proto_alpha/lib_protocol/main.ml b/src/proto_alpha/lib_protocol/main.ml index 07b27a1f15dcf6fb7887def065ea193d9da80c4e..247bf2c3cb44670c2acc0cd9d35e87170a5d7d5a 100644 --- a/src/proto_alpha/lib_protocol/main.ml +++ b/src/proto_alpha/lib_protocol/main.ml @@ -44,7 +44,9 @@ type operation_data = Alpha_context.packed_protocol_data = 'kind Alpha_context.Operation.protocol_data -> operation_data -let operation_data_encoding = +let operation_data_encoding = Alpha_context.Operation.protocol_data_encoding + +let operation_data_encoding_with_legacy_attestation_name = Alpha_context.Operation.protocol_data_encoding_with_legacy_attestation_name type operation_receipt = Apply_results.packed_operation_metadata = @@ -53,10 +55,15 @@ type operation_receipt = Apply_results.packed_operation_metadata = -> operation_receipt | No_operation_metadata : operation_receipt -let operation_receipt_encoding = +let operation_receipt_encoding = Apply_results.operation_metadata_encoding + +let operation_receipt_encoding_with_legacy_attestation_name = Apply_results.operation_metadata_encoding_with_legacy_attestation_name let operation_data_and_receipt_encoding = + Apply_results.operation_data_and_metadata_encoding + +let operation_data_and_receipt_encoding_with_legacy_attestation_name = Apply_results .operation_data_and_metadata_encoding_with_legacy_attestation_name diff --git a/src/proto_demo_counter/lib_protocol/main.ml b/src/proto_demo_counter/lib_protocol/main.ml index e6bbc9518d040b3037b54b7f35dcb69b97d6b12d..904c62b5f56c1bc44976132b98bd10c9703bad38 100644 --- a/src/proto_demo_counter/lib_protocol/main.ml +++ b/src/proto_demo_counter/lib_protocol/main.ml @@ -48,15 +48,24 @@ type operation_data = Proto_operation.t let operation_data_encoding = Proto_operation.encoding +let operation_data_encoding_with_legacy_attestation_name = + operation_data_encoding + type operation_receipt = Receipt.t let operation_receipt_encoding = Receipt.encoding +let operation_receipt_encoding_with_legacy_attestation_name = + operation_receipt_encoding + let operation_data_and_receipt_encoding = (* we could merge data and receipt encoding for a lighter json *) Data_encoding.( obj2 (req "data" Proto_operation.encoding) (req "receipt" Receipt.encoding)) +let operation_data_and_receipt_encoding_with_legacy_attestation_name = + operation_data_and_receipt_encoding + type operation = { shell : Operation.shell_header; protocol_data : operation_data; diff --git a/src/proto_demo_noops/lib_protocol/main.ml b/src/proto_demo_noops/lib_protocol/main.ml index 854f4bb09bb4c5a1407850c0a0bed7234a4279c4..1857c867d73d6f86a3eb692bcdeab376aa14368c 100644 --- a/src/proto_demo_noops/lib_protocol/main.ml +++ b/src/proto_demo_noops/lib_protocol/main.ml @@ -49,16 +49,25 @@ type operation_data = unit let operation_data_encoding = Data_encoding.unit +let operation_data_encoding_with_legacy_attestation_name = + operation_data_encoding + type operation_receipt = unit let operation_receipt_encoding = Data_encoding.unit +let operation_receipt_encoding_with_legacy_attestation_name = + operation_receipt_encoding + let operation_data_and_receipt_encoding = Data_encoding.conv (function ((), ()) -> ()) (fun () -> ((), ())) Data_encoding.unit +let operation_data_and_receipt_encoding_with_legacy_attestation_name = + operation_data_and_receipt_encoding + type operation = { shell : Operation.shell_header; protocol_data : operation_data;