From c2dab3668733626791249c2ff7404d629f159633 Mon Sep 17 00:00:00 2001 From: Albin Coquereau Date: Wed, 19 Apr 2023 10:32:17 +0200 Subject: [PATCH 01/11] alpha/operation_repr: light refactoring of encoding --- src/proto_alpha/lib_protocol/operation_repr.ml | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/proto_alpha/lib_protocol/operation_repr.ml b/src/proto_alpha/lib_protocol/operation_repr.ml index 5d5d989b59eb..aa9cc19fa42d 100644 --- a/src/proto_alpha/lib_protocol/operation_repr.ml +++ b/src/proto_alpha/lib_protocol/operation_repr.ml @@ -1031,6 +1031,9 @@ module Encoding = struct } -> 'b case + let make_case (Case {tag; name; encoding; select = _; proj; inj}) = + case (Tag tag) name encoding (fun o -> Some (proj o)) (fun x -> inj x) + let preendorsement_case = Case { @@ -1044,9 +1047,6 @@ module Encoding = struct } let preendorsement_encoding = - let make (Case {tag; name; encoding; select = _; proj; inj}) = - case (Tag tag) name encoding (fun o -> Some (proj o)) (fun x -> inj x) - in let to_list : Kind.preendorsement contents_list -> _ = function | Single o -> o in @@ -1066,7 +1066,7 @@ module Encoding = struct "operations" (conv to_list of_list @@ def "inlined.preendorsement.contents" - @@ union [make preendorsement_case])) + @@ union [make_case preendorsement_case])) (varopt "signature" Signature.encoding))) let endorsement_encoding = @@ -1096,9 +1096,6 @@ module Encoding = struct } let endorsement_encoding = - let make (Case {tag; name; encoding; select = _; proj; inj}) = - case (Tag tag) name encoding (fun o -> Some (proj o)) (fun x -> inj x) - in let to_list : Kind.endorsement contents_list -> _ = fun (Single o) -> o in let of_list : Kind.endorsement contents -> _ = fun o -> Single o in def "inlined.endorsement" @@ -1114,7 +1111,7 @@ module Encoding = struct "operations" (conv to_list of_list @@ def "inlined.endorsement_mempool.contents" - @@ union [make endorsement_case])) + @@ union [make_case endorsement_case])) (varopt "signature" Signature.encoding))) let dal_attestation_encoding = -- GitLab From 67567fd2ffe490bacad0be81f1d6670d0edc9837 Mon Sep 17 00:00:00 2001 From: Albin Coquereau Date: Wed, 19 Apr 2023 14:11:08 +0200 Subject: [PATCH 02/11] tezt/tests: add encoding tests for preendorsement and double_preendorsement_evidence --- ...double-preendorsement-evidence.sample.json | 31 +++++++ .../operation-preendorsement.sample.json | 13 +++ ...ol encoding regression test- operation.out | 82 +++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 tezt/tests/encoding_samples/alpha/operation/operation-double-preendorsement-evidence.sample.json create mode 100644 tezt/tests/encoding_samples/alpha/operation/operation-preendorsement.sample.json diff --git a/tezt/tests/encoding_samples/alpha/operation/operation-double-preendorsement-evidence.sample.json b/tezt/tests/encoding_samples/alpha/operation/operation-double-preendorsement-evidence.sample.json new file mode 100644 index 000000000000..ad947afaa61a --- /dev/null +++ b/tezt/tests/encoding_samples/alpha/operation/operation-double-preendorsement-evidence.sample.json @@ -0,0 +1,31 @@ +{ + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": [ + { + "kind": "double_preendorsement_evidence", + "op1": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "preendorsement", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + }, + "op2": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "preendorsement", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + } + } + ], + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" +} diff --git a/tezt/tests/encoding_samples/alpha/operation/operation-preendorsement.sample.json b/tezt/tests/encoding_samples/alpha/operation/operation-preendorsement.sample.json new file mode 100644 index 000000000000..12cb8aeca006 --- /dev/null +++ b/tezt/tests/encoding_samples/alpha/operation/operation-preendorsement.sample.json @@ -0,0 +1,13 @@ +{ + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": [ + { + "kind": "preendorsement", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + } + ], + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" +} diff --git a/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- operation.out b/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- operation.out index e17494ab27c5..9d1db0e36834 100644 --- a/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- operation.out +++ b/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- operation.out @@ -240,6 +240,64 @@ "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } +./octez-codec encode alpha.operation from '{ + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": [ + { + "kind": "double_preendorsement_evidence", + "op1": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "preendorsement", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + }, + "op2": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "preendorsement", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + } + } + ], + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" +}' +0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8070000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c + +./octez-codec decode alpha.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8070000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c +{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": + [ { "kind": "double_preendorsement_evidence", + "op1": + { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": + { "kind": "preendorsement", "slot": 0, "level": 1331, + "round": 0, + "block_payload_hash": + "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" }, + "op2": + { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": + { "kind": "preendorsement", "slot": 0, "level": 1331, + "round": 0, + "block_payload_hash": + "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } } ], + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } + ./octez-codec encode alpha.operation from '{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", "contents": [ @@ -384,6 +442,30 @@ "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } +./octez-codec encode alpha.operation from '{ + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": [ + { + "kind": "preendorsement", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + } + ], + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" +}' +0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c + +./octez-codec decode alpha.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c +{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": + [ { "kind": "preendorsement", "slot": 0, "level": 1331, "round": 0, + "block_payload_hash": + "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" } ], + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } + ./octez-codec encode alpha.operation from '{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", "contents": [ -- GitLab From 916985df8d0701fccf9dd8d37746c358947470f4 Mon Sep 17 00:00:00 2001 From: Albin Coquereau Date: Wed, 19 Apr 2023 10:34:27 +0200 Subject: [PATCH 03/11] alpha/lib_protocol: add preattestation in json encodings --- .../lib_protocol/operation_repr.ml | 58 +++++++++++++++++-- 1 file changed, 53 insertions(+), 5 deletions(-) diff --git a/src/proto_alpha/lib_protocol/operation_repr.ml b/src/proto_alpha/lib_protocol/operation_repr.ml index aa9cc19fa42d..4724751e364c 100644 --- a/src/proto_alpha/lib_protocol/operation_repr.ml +++ b/src/proto_alpha/lib_protocol/operation_repr.ml @@ -1034,6 +1034,16 @@ module Encoding = struct let make_case (Case {tag; name; encoding; select = _; proj; inj}) = case (Tag tag) name encoding (fun o -> Some (proj o)) (fun x -> inj x) + type 'b json_case = + | Json_case : { + name : string; + encoding : 'a Data_encoding.t; + select : packed_contents -> 'b contents option; + proj : 'b contents -> 'a; + inj : 'a -> 'b contents; + } + -> 'b json_case + let preendorsement_case = Case { @@ -1046,6 +1056,17 @@ module Encoding = struct inj = (fun preendorsement -> Preendorsement preendorsement); } + let preattestation_case = + Json_case + { + name = "preattestation"; + encoding = consensus_content_encoding; + select = + (function Contents (Preendorsement _ as op) -> Some op | _ -> None); + proj = (fun (Preendorsement preendorsement) -> preendorsement); + inj = (fun preendorsement -> Preendorsement preendorsement); + } + let preendorsement_encoding = let to_list : Kind.preendorsement contents_list -> _ = function | Single o -> o @@ -1478,7 +1499,11 @@ module Encoding = struct PCase zk_rollup_update_case; ] - let contents_encoding = + type json_packed_case = JCase : 'b json_case -> json_packed_case + + let contents_json_cases = [JCase preattestation_case] + + let contents_encoding ~with_json_cases = let make (PCase (Case {tag; name; encoding; select; proj; inj})) = assert (not @@ reserved_tag tag) ; case @@ -1488,10 +1513,27 @@ module Encoding = struct (fun o -> match select o with None -> None | Some o -> Some (proj o)) (fun x -> Contents (inj x)) in - def "operation.alpha.contents" @@ union (List.map make contents_cases) + let make_json (JCase (Json_case {name; encoding; select; proj; inj})) = + case + Json_only + name + encoding + (fun o -> match select o with None -> None | Some o -> Some (proj o)) + (fun x -> Contents (inj x)) + in + def "operation.alpha.contents" + @@ union + (if with_json_cases then + List.rev_append + (List.map make contents_cases) + (List.map make_json contents_json_cases) + else List.map make contents_cases) - let contents_list_encoding = - conv_with_guard to_list of_list_internal (Variable.list contents_encoding) + let contents_list_encoding ~with_json_cases = + conv_with_guard + to_list + of_list_internal + (Variable.list (contents_encoding ~with_json_cases)) let protocol_data_json_encoding = conv @@ -1500,9 +1542,15 @@ module Encoding = struct (fun (Contents_list contents, signature) -> Operation_data {contents; signature}) (obj2 - (req "contents" (dynamic_size contents_list_encoding)) + (req + "contents" + (dynamic_size (contents_list_encoding ~with_json_cases:true))) (opt "signature" Signature.encoding)) + let contents_encoding = contents_encoding ~with_json_cases:false + + let contents_list_encoding = contents_list_encoding ~with_json_cases:false + type contents_or_signature_prefix = | Actual_contents of packed_contents | Signature_prefix of Signature.prefix -- GitLab From b02c80e48ebfb16b65ccd2463be2d6fd44683bcc Mon Sep 17 00:00:00 2001 From: Albin Coquereau Date: Tue, 18 Apr 2023 16:11:53 +0200 Subject: [PATCH 04/11] tezt/tests: add an encoding test for preattestation operations --- .../lib_protocol/operation_repr.ml | 3 ++ tezt/tests/encoding.ml | 53 ++++++++++++++++++- .../operation-preattestation.sample.json | 13 +++++ ... encoding regression test- attestation.out | 24 +++++++++ 4 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 tezt/tests/encoding_samples/alpha/attestation/operation-preattestation.sample.json create mode 100644 tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- attestation.out diff --git a/src/proto_alpha/lib_protocol/operation_repr.ml b/src/proto_alpha/lib_protocol/operation_repr.ml index 4724751e364c..3408185ebf92 100644 --- a/src/proto_alpha/lib_protocol/operation_repr.ml +++ b/src/proto_alpha/lib_protocol/operation_repr.ml @@ -1056,6 +1056,9 @@ module Encoding = struct inj = (fun preendorsement -> Preendorsement preendorsement); } + (* TODO: https://gitlab.com/tezos/tezos/-/issues/5460 + Once protocol O will be frozen, attestation should be the default encoding + and endorsement one should have JSON_only tag. *) let preattestation_case = Json_case { diff --git a/tezt/tests/encoding.ml b/tezt/tests/encoding.ml index 2a5db8b16322..94d80df54094 100644 --- a/tezt/tests/encoding.ml +++ b/tezt/tests/encoding.ml @@ -133,6 +133,57 @@ let check_samples protocols = protocol_sample "voting_period" ; () +let check_attestation_sample ~name ~file = + let* json_string = Tezos_stdlib_unix.Lwt_utils_unix.read_file file in + let original_json = JSON.parse ~origin:json_string json_string in + let* binary = + Codec.encode ~hooks:Regression.hooks ~name (JSON.unannotate original_json) + in + let* decoded_json = Codec.decode ~hooks:Regression.hooks ~name binary in + Check.( + (original_json <> decoded_json) + json + ~__LOC__ + ~error_msg: + "The converted JSON match the original but should not.\n\ + Expected: %L\n\ + Actual: %R") ; + let original_json_with_endorsement = + Str.global_replace + (Str.regexp_string "attestation") + "endorsement" + (JSON.encode original_json) + in + let original_json_with_endorsement = + JSON.parse ~origin:json_string original_json_with_endorsement + in + Check.( + (decoded_json = original_json_with_endorsement) + json + ~__LOC__ + ~error_msg: + {|The converted JSON (with "endorsement" replaced by "attestation") does not match the original.\n + Expected: %L\n\ + Actual: %R|}) ; + return () + +let check_attestation_samples_encoding = + Protocol.register_regression_test + ~__FILE__ + ~title:(sf "protocol encoding regression test: attestation") + ~tags:["encoding"; "protocol"; "attestation"] + ~supports:Protocol.(From_protocol 18) + @@ fun protocol -> + let base_path = + "tezt" // "tests" // "encoding_samples" // Protocol.tag protocol + // "attestation" + in + iter_sample_s base_path @@ fun file -> + check_attestation_sample + ~name:(Protocol.encoding_prefix protocol ^ "." ^ "operation") + ~file + let register ~protocols = check_dump_encodings () ; - check_samples protocols + check_samples protocols ; + check_attestation_samples_encoding protocols diff --git a/tezt/tests/encoding_samples/alpha/attestation/operation-preattestation.sample.json b/tezt/tests/encoding_samples/alpha/attestation/operation-preattestation.sample.json new file mode 100644 index 000000000000..1911762a4437 --- /dev/null +++ b/tezt/tests/encoding_samples/alpha/attestation/operation-preattestation.sample.json @@ -0,0 +1,13 @@ +{ + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": [ + { + "kind": "preattestation", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + } + ], + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" +} diff --git a/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- attestation.out b/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- attestation.out new file mode 100644 index 000000000000..f708a48d0e90 --- /dev/null +++ b/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- attestation.out @@ -0,0 +1,24 @@ + +./octez-codec encode alpha.operation from '{ + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": [ + { + "kind": "preattestation", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + } + ], + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" +}' +0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c + +./octez-codec decode alpha.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c +{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": + [ { "kind": "preendorsement", "slot": 0, "level": 1331, "round": 0, + "block_payload_hash": + "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" } ], + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } -- GitLab From c64c9bffddca0bab4a51cb71747adcc2693d3092 Mon Sep 17 00:00:00 2001 From: Albin Coquereau Date: Wed, 19 Apr 2023 10:35:18 +0200 Subject: [PATCH 05/11] alpha/lib_protocol: add attestation in json encodings --- .../lib_protocol/operation_repr.ml | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/proto_alpha/lib_protocol/operation_repr.ml b/src/proto_alpha/lib_protocol/operation_repr.ml index 3408185ebf92..5101971d2613 100644 --- a/src/proto_alpha/lib_protocol/operation_repr.ml +++ b/src/proto_alpha/lib_protocol/operation_repr.ml @@ -1119,6 +1119,28 @@ module Encoding = struct Endorsement {slot; level; round; block_payload_hash}); } + (* TODO: https://gitlab.com/tezos/tezos/-/issues/5460 + Once protocol O will be frozen, attestation should be the default encoding + and endorsement one should have JSON_only tag. *) + + let attestation_case = + Json_case + { + name = "attestation"; + encoding = endorsement_encoding; + select = + (function Contents (Endorsement _ as op) -> Some op | _ -> None); + proj = + (fun (Endorsement consensus_content) -> + ( consensus_content.slot, + consensus_content.level, + consensus_content.round, + consensus_content.block_payload_hash )); + inj = + (fun (slot, level, round, block_payload_hash) -> + Endorsement {slot; level; round; block_payload_hash}); + } + let endorsement_encoding = let to_list : Kind.endorsement contents_list -> _ = fun (Single o) -> o in let of_list : Kind.endorsement contents -> _ = fun o -> Single o in @@ -1504,7 +1526,7 @@ module Encoding = struct type json_packed_case = JCase : 'b json_case -> json_packed_case - let contents_json_cases = [JCase preattestation_case] + let contents_json_cases = [JCase preattestation_case; JCase attestation_case] let contents_encoding ~with_json_cases = let make (PCase (Case {tag; name; encoding; select; proj; inj})) = -- GitLab From 45f383630d1f349abfb13dc8be7d571e968ff0f8 Mon Sep 17 00:00:00 2001 From: Albin Coquereau Date: Tue, 18 Apr 2023 16:32:53 +0200 Subject: [PATCH 06/11] tezt/tests: add an encoding test for preattestation operations --- .../operation-attestation.sample.json | 13 ++++++++++ ... encoding regression test- attestation.out | 24 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 tezt/tests/encoding_samples/alpha/attestation/operation-attestation.sample.json diff --git a/tezt/tests/encoding_samples/alpha/attestation/operation-attestation.sample.json b/tezt/tests/encoding_samples/alpha/attestation/operation-attestation.sample.json new file mode 100644 index 000000000000..fa6ebd461571 --- /dev/null +++ b/tezt/tests/encoding_samples/alpha/attestation/operation-attestation.sample.json @@ -0,0 +1,13 @@ +{ + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": [ + { + "kind": "attestation", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + } + ], + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" +} diff --git a/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- attestation.out b/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- attestation.out index f708a48d0e90..024cb3ac1ef2 100644 --- a/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- attestation.out +++ b/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- attestation.out @@ -1,4 +1,28 @@ +./octez-codec encode alpha.operation from '{ + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": [ + { + "kind": "attestation", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + } + ], + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" +}' +0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c + +./octez-codec decode alpha.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c +{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": + [ { "kind": "endorsement", "slot": 0, "level": 1331, "round": 0, + "block_payload_hash": + "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" } ], + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } + ./octez-codec encode alpha.operation from '{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", "contents": [ -- GitLab From 78b02a98414c8e98d68e2726d9bc27f033ae8b4e Mon Sep 17 00:00:00 2001 From: Albin Coquereau Date: Wed, 19 Apr 2023 10:35:50 +0200 Subject: [PATCH 07/11] alpha/lib_protocol: add double_preattestation_evidence in json encodings --- .../lib_protocol/operation_repr.ml | 57 ++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/src/proto_alpha/lib_protocol/operation_repr.ml b/src/proto_alpha/lib_protocol/operation_repr.ml index 5101971d2613..e0023f08a200 100644 --- a/src/proto_alpha/lib_protocol/operation_repr.ml +++ b/src/proto_alpha/lib_protocol/operation_repr.ml @@ -1044,6 +1044,9 @@ module Encoding = struct } -> 'b json_case + let make_json_case (Json_case {name; encoding; select = _; proj; inj}) = + case Json_only name encoding (fun o -> Some (proj o)) (fun x -> inj x) + let preendorsement_case = Case { @@ -1093,6 +1096,33 @@ module Encoding = struct @@ union [make_case preendorsement_case])) (varopt "signature" Signature.encoding))) + let preattestation_encoding = + let to_list : Kind.preendorsement contents_list -> _ = function + | Single o -> o + in + let of_list : Kind.preendorsement contents -> _ = function + | o -> Single o + in + def "inlined.preattestation" + @@ conv + (fun ({shell; protocol_data = {contents; signature}} : _ operation) -> + (shell, (contents, signature))) + (fun (shell, (contents, signature)) : _ operation -> + {shell; protocol_data = {contents; signature}}) + (merge_objs + Operation.shell_header_encoding + (obj2 + (req + "operations" + (conv to_list of_list + @@ def "inlined.preattestation.contents" + @@ union + [ + make_case preendorsement_case; + make_json_case preattestation_case; + ])) + (varopt "signature" Signature.encoding))) + let endorsement_encoding = obj4 (req "slot" Slot_repr.encoding) @@ -1229,6 +1259,26 @@ module Encoding = struct inj = (fun (op1, op2) -> Double_preendorsement_evidence {op1; op2}); } + (* TODO: https://gitlab.com/tezos/tezos/-/issues/5460 + Once protocol O will be frozen, attestation should be the default encoding + and endorsement one should have JSON_only tag. *) + let double_preattestation_evidence_case : + Kind.double_preendorsement_evidence json_case = + Json_case + { + name = "double_preattestation_evidence"; + encoding = + obj2 + (req "op1" (dynamic_size preattestation_encoding)) + (req "op2" (dynamic_size preattestation_encoding)); + select = + (function + | Contents (Double_preendorsement_evidence _ as op) -> Some op + | _ -> None); + proj = (fun (Double_preendorsement_evidence {op1; op2}) -> (op1, op2)); + inj = (fun (op1, op2) -> Double_preendorsement_evidence {op1; op2}); + } + let double_endorsement_evidence_case : Kind.double_endorsement_evidence case = Case { @@ -1526,7 +1576,12 @@ module Encoding = struct type json_packed_case = JCase : 'b json_case -> json_packed_case - let contents_json_cases = [JCase preattestation_case; JCase attestation_case] + let contents_json_cases = + [ + JCase preattestation_case; + JCase attestation_case; + JCase double_preattestation_evidence_case; + ] let contents_encoding ~with_json_cases = let make (PCase (Case {tag; name; encoding; select; proj; inj})) = -- GitLab From 8cb431f23f91bbe5c01f63fb4ddb708cd4924072 Mon Sep 17 00:00:00 2001 From: Albin Coquereau Date: Wed, 19 Apr 2023 14:29:12 +0200 Subject: [PATCH 08/11] tezt/tests: add an encoding test for double_preattestation_evidence operations --- ...double-preattestation-evidence.sample.json | 31 +++++ ...n-evidence_with_preendorsement.sample.json | 31 +++++ ... encoding regression test- attestation.out | 116 ++++++++++++++++++ 3 files changed, 178 insertions(+) create mode 100644 tezt/tests/encoding_samples/alpha/attestation/operation-double-preattestation-evidence.sample.json create mode 100644 tezt/tests/encoding_samples/alpha/attestation/operation-double-preattestation-evidence_with_preendorsement.sample.json diff --git a/tezt/tests/encoding_samples/alpha/attestation/operation-double-preattestation-evidence.sample.json b/tezt/tests/encoding_samples/alpha/attestation/operation-double-preattestation-evidence.sample.json new file mode 100644 index 000000000000..371a2d8e4e55 --- /dev/null +++ b/tezt/tests/encoding_samples/alpha/attestation/operation-double-preattestation-evidence.sample.json @@ -0,0 +1,31 @@ +{ + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": [ + { + "kind": "double_preattestation_evidence", + "op1": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "preattestation", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + }, + "op2": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "preattestation", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + } + } + ], + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" +} diff --git a/tezt/tests/encoding_samples/alpha/attestation/operation-double-preattestation-evidence_with_preendorsement.sample.json b/tezt/tests/encoding_samples/alpha/attestation/operation-double-preattestation-evidence_with_preendorsement.sample.json new file mode 100644 index 000000000000..f9eb46e6c461 --- /dev/null +++ b/tezt/tests/encoding_samples/alpha/attestation/operation-double-preattestation-evidence_with_preendorsement.sample.json @@ -0,0 +1,31 @@ +{ + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": [ + { + "kind": "double_preattestation_evidence", + "op1": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "preendorsement", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + }, + "op2": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "preattestation", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + } + } + ], + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" +} diff --git a/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- attestation.out b/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- attestation.out index 024cb3ac1ef2..00b50f6958a7 100644 --- a/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- attestation.out +++ b/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- attestation.out @@ -23,6 +23,122 @@ "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } +./octez-codec encode alpha.operation from '{ + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": [ + { + "kind": "double_preattestation_evidence", + "op1": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "preattestation", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + }, + "op2": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "preattestation", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + } + } + ], + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" +}' +0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8070000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c + +./octez-codec decode alpha.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8070000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c +{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": + [ { "kind": "double_preendorsement_evidence", + "op1": + { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": + { "kind": "preendorsement", "slot": 0, "level": 1331, + "round": 0, + "block_payload_hash": + "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" }, + "op2": + { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": + { "kind": "preendorsement", "slot": 0, "level": 1331, + "round": 0, + "block_payload_hash": + "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } } ], + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } + +./octez-codec encode alpha.operation from '{ + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": [ + { + "kind": "double_preattestation_evidence", + "op1": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "preendorsement", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + }, + "op2": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "preattestation", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + } + } + ], + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" +}' +0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8070000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c + +./octez-codec decode alpha.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8070000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81400000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c +{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": + [ { "kind": "double_preendorsement_evidence", + "op1": + { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": + { "kind": "preendorsement", "slot": 0, "level": 1331, + "round": 0, + "block_payload_hash": + "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" }, + "op2": + { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": + { "kind": "preendorsement", "slot": 0, "level": 1331, + "round": 0, + "block_payload_hash": + "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } } ], + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } + ./octez-codec encode alpha.operation from '{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", "contents": [ -- GitLab From d32c61ead59c193f514f238e1a55092408928718 Mon Sep 17 00:00:00 2001 From: Albin Coquereau Date: Wed, 19 Apr 2023 10:37:19 +0200 Subject: [PATCH 09/11] alpha/lib_protocol: add double_attestation_evidence in json encodings --- .../lib_protocol/operation_repr.ml | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/proto_alpha/lib_protocol/operation_repr.ml b/src/proto_alpha/lib_protocol/operation_repr.ml index e0023f08a200..574e23f29052 100644 --- a/src/proto_alpha/lib_protocol/operation_repr.ml +++ b/src/proto_alpha/lib_protocol/operation_repr.ml @@ -1190,6 +1190,29 @@ module Encoding = struct @@ union [make_case endorsement_case])) (varopt "signature" Signature.encoding))) + let attestation_encoding = + let to_list : Kind.endorsement contents_list -> _ = fun (Single o) -> o in + let of_list : Kind.endorsement contents -> _ = fun o -> Single o in + def "inlined.attestation" + @@ conv + (fun ({shell; protocol_data = {contents; signature}} : _ operation) -> + (shell, (contents, signature))) + (fun (shell, (contents, signature)) : _ operation -> + {shell; protocol_data = {contents; signature}}) + (merge_objs + Operation.shell_header_encoding + (obj2 + (req + "operations" + (conv to_list of_list + @@ def "inlined.attestation_mempool.contents" + @@ union + [ + make_case endorsement_case; + make_json_case attestation_case; + ])) + (varopt "signature" Signature.encoding))) + let dal_attestation_encoding = obj3 (req "attestor" Signature.Public_key_hash.encoding) @@ -1296,6 +1319,26 @@ module Encoding = struct inj = (fun (op1, op2) -> Double_endorsement_evidence {op1; op2}); } + (* TODO: https://gitlab.com/tezos/tezos/-/issues/5460 + Once protocol O will be frozen, attestation should be the default encoding + and endorsement one should have JSON_only tag. *) + let double_attestation_evidence_case : + Kind.double_endorsement_evidence json_case = + Json_case + { + name = "double_attestation_evidence"; + encoding = + obj2 + (req "op1" (dynamic_size attestation_encoding)) + (req "op2" (dynamic_size attestation_encoding)); + select = + (function + | Contents (Double_endorsement_evidence _ as op) -> Some op + | _ -> None); + proj = (fun (Double_endorsement_evidence {op1; op2}) -> (op1, op2)); + inj = (fun (op1, op2) -> Double_endorsement_evidence {op1; op2}); + } + let double_baking_evidence_case = Case { @@ -1581,6 +1624,7 @@ module Encoding = struct JCase preattestation_case; JCase attestation_case; JCase double_preattestation_evidence_case; + JCase double_attestation_evidence_case; ] let contents_encoding ~with_json_cases = -- GitLab From 6d6bb4c9faa9938a716bac047504bbe64cbef1cd Mon Sep 17 00:00:00 2001 From: Albin Coquereau Date: Wed, 19 Apr 2023 14:39:29 +0200 Subject: [PATCH 10/11] tezt/tests: add an encoding test for double_attestation_evidence operations --- ...on-double-attestation-evidence.sample.json | 31 +++++ ...tion-evidence_with_endorsement.sample.json | 31 +++++ ... encoding regression test- attestation.out | 112 ++++++++++++++++++ 3 files changed, 174 insertions(+) create mode 100644 tezt/tests/encoding_samples/alpha/attestation/operation-double-attestation-evidence.sample.json create mode 100644 tezt/tests/encoding_samples/alpha/attestation/operation-double-attestation-evidence_with_endorsement.sample.json diff --git a/tezt/tests/encoding_samples/alpha/attestation/operation-double-attestation-evidence.sample.json b/tezt/tests/encoding_samples/alpha/attestation/operation-double-attestation-evidence.sample.json new file mode 100644 index 000000000000..82a918a9f6f2 --- /dev/null +++ b/tezt/tests/encoding_samples/alpha/attestation/operation-double-attestation-evidence.sample.json @@ -0,0 +1,31 @@ +{ + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": [ + { + "kind": "double_attestation_evidence", + "op1": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "attestation", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + }, + "op2": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "attestation", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + } + } + ], + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" +} diff --git a/tezt/tests/encoding_samples/alpha/attestation/operation-double-attestation-evidence_with_endorsement.sample.json b/tezt/tests/encoding_samples/alpha/attestation/operation-double-attestation-evidence_with_endorsement.sample.json new file mode 100644 index 000000000000..2557b6ba59c2 --- /dev/null +++ b/tezt/tests/encoding_samples/alpha/attestation/operation-double-attestation-evidence_with_endorsement.sample.json @@ -0,0 +1,31 @@ +{ + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": [ + { + "kind": "double_attestation_evidence", + "op1": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "endorsement", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + }, + "op2": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "attestation", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + } + } + ], + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" +} diff --git a/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- attestation.out b/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- attestation.out index 00b50f6958a7..06419ce374ca 100644 --- a/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- attestation.out +++ b/tezt/tests/expected/encoding.ml/Alpha- protocol encoding regression test- attestation.out @@ -23,6 +23,118 @@ "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } +./octez-codec encode alpha.operation from '{ + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": [ + { + "kind": "double_attestation_evidence", + "op1": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "attestation", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + }, + "op2": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "attestation", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + } + } + ], + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" +}' +0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8020000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c + +./octez-codec decode alpha.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8020000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c +{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": + [ { "kind": "double_endorsement_evidence", + "op1": + { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": + { "kind": "endorsement", "slot": 0, "level": 1331, "round": 0, + "block_payload_hash": + "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" }, + "op2": + { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": + { "kind": "endorsement", "slot": 0, "level": 1331, "round": 0, + "block_payload_hash": + "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } } ], + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } + +./octez-codec encode alpha.operation from '{ + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": [ + { + "kind": "double_attestation_evidence", + "op1": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "endorsement", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + }, + "op2": { + "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": { + "kind": "attestation", + "level": 1331, + "block_payload_hash": "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG", + "round": 0, + "slot": 0 + }, + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" + } + } + ], + "signature": "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" +}' +0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8020000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c + +./octez-codec decode alpha.operation from 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8020000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c0000008b0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a81500000000053300000000000000000000000000000000000000000000000000000000000000000000000066804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c66804fe735e06e97e26da8236b6341b91c625d5e82b3524ec0a88cc982365e70f8a5b9bc65df2ea6d21ee244cc3a96fb33031c394c78b1179ff1b8a44237740c +{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "contents": + [ { "kind": "double_endorsement_evidence", + "op1": + { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": + { "kind": "endorsement", "slot": 0, "level": 1331, "round": 0, + "block_payload_hash": + "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" }, + "op2": + { "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", + "operations": + { "kind": "endorsement", "slot": 0, "level": 1331, "round": 0, + "block_payload_hash": + "vh1g87ZG6scSYxKhspAUzprQVuLAyoa5qMBKcUfjgnQGnFb3dJcG" }, + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } } ], + "signature": + "sigbQ5ZNvkjvGssJgoAnUAfY4Wvvg3QZqawBYB1j1VDBNTMBAALnCzRHWzer34bnfmzgHg3EvwdzQKdxgSghB897cono6gbQ" } + ./octez-codec encode alpha.operation from '{ "branch": "BKpbfCvh777DQHnXjU2sqHvVUNZ7dBAdqEfKkdw8EGSkD9LSYXb", "contents": [ -- GitLab From cbd424c2dcd90db3d5d7db517788e981d169b003 Mon Sep 17 00:00:00 2001 From: Albin Coquereau Date: Wed, 19 Apr 2023 14:58:54 +0200 Subject: [PATCH 11/11] docs/alpha: add attestation encoding entry in the changelog --- docs/protocols/alpha.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/protocols/alpha.rst b/docs/protocols/alpha.rst index f9cc0cf87683..d023fbb2ff57 100644 --- a/docs/protocols/alpha.rst +++ b/docs/protocols/alpha.rst @@ -51,3 +51,7 @@ Internal - Fail earlier when a smart rollup commitment is in conflict when cementing. (MR :gl:`!8128`) + +- Update the operation_encoding to accept attestation (and preattestation, + double_attestation_evidence and double_preattestation_evidence) as an alias + for endorsement kind (MR :gl:`!8254`) -- GitLab