diff --git a/src/bin_dal_node/RPC_server.ml b/src/bin_dal_node/RPC_server.ml index c913a33bc7d4a38280f52cbc5a90282d75ed1dc1..ce6bff0f3e18a96fda789b9abd4495b320674b68 100644 --- a/src/bin_dal_node/RPC_server.ml +++ b/src/bin_dal_node/RPC_server.ml @@ -32,7 +32,6 @@ open Tezos_dal_node_services let handle_split_slot ctxt fill slot = let open Lwt_result_syntax in let*? {dal_parameters; dal_constants; _} = Node_context.get_ready ctxt in - let slot = String.to_bytes slot in let slot = if fill then Slot_manager.Utils.fill_x00 dal_parameters.Cryptobox.slot_size slot @@ -59,7 +58,7 @@ let handle_slot ctxt (_, commitment) trim () = commitment in let slot = if trim then Slot_manager.Utils.trim_x00 slot else slot in - return (String.of_bytes slot) + return slot let handle_stored_slot_headers ctxt (_, block_hash) () () = let open Lwt_result_syntax in diff --git a/src/lib_dal_node/dal_node_client.mli b/src/lib_dal_node/dal_node_client.mli index 26c019f4697ee6ad6aab8d63ce406141032da1c4..ae69e9265394b338a9f4c8349c4bdb2113d746ca 100644 --- a/src/lib_dal_node/dal_node_client.mli +++ b/src/lib_dal_node/dal_node_client.mli @@ -42,7 +42,7 @@ class unix_cctxt : val make_unix_cctxt : addr:string -> port:int -> cctxt val get_slot : - #cctxt -> ?trim_slot:bool -> Cryptobox.Commitment.t -> string tzresult Lwt.t + #cctxt -> ?trim_slot:bool -> Cryptobox.Commitment.t -> bytes tzresult Lwt.t val get_shard : #cctxt -> Cryptobox.Commitment.t -> int -> Cryptobox.shard tzresult Lwt.t diff --git a/src/lib_dal_node_services/services.ml b/src/lib_dal_node_services/services.ml index a1d8ddf28cc12c9ef07c917ff7311a1e7181a8dd..b137dcc89d8ef25cb00c764c0f3a3aa86ac318d0 100644 --- a/src/lib_dal_node_services/services.ml +++ b/src/lib_dal_node_services/services.ml @@ -34,7 +34,7 @@ let split_slot () = RPC_service.post_service ~description:"Split and store a slot" ~query:split_query - ~input:Data_encoding.string + ~input:Data_encoding.bytes ~output:Data_encoding.string (* see [Slot_manager.Slot_header.to_b58check] *) RPC_path.(open_root / "slot" / "split") @@ -49,7 +49,7 @@ let slot () = RPC_service.get_service ~description:"Show content of a slot" ~query:slot_query - ~output:Data_encoding.string + ~output:Data_encoding.bytes RPC_path.(open_root / "slot" / "content" /: Cryptobox.Commitment.rpc_arg) let slot_pages () = diff --git a/tezt/lib_tezos/rollup.ml b/tezt/lib_tezos/rollup.ml index 0812760c51bf4085db4a221eb336a0dd433f9a24..47882229ee75d0ba97680b82fe0042a767470b5b 100644 --- a/tezt/lib_tezos/rollup.ml +++ b/tezt/lib_tezos/rollup.ml @@ -540,11 +540,20 @@ module Dal = struct ~get_host:Dal_node.rpc_host ~get_port:Dal_node.rpc_port + (** [encode_bytes_for_json raw] encodes arbitrary byte sequence as hex string for JSON *) + let encode_bytes_to_hex_string raw = + "\"" ^ match Hex.of_string raw with `Hex s -> s ^ "\"" + + let decode_hex_string_to_bytes s = Hex.to_string (`Hex s) + + let get_bytes_from_json_string_node json = + JSON.as_string json |> decode_hex_string_to_bytes + let split_slot slot = let slot = JSON.parse ~origin:"dal_node_split_slot_rpc" - (Format.sprintf "\"%s\"" slot) + (encode_bytes_to_hex_string slot) in let data = JSON.unannotate slot in make @@ -559,11 +568,11 @@ module Dal = struct GET ["slot"; "content"; slot_header] ~query_string:[("trim", "")] - JSON.as_string + get_bytes_from_json_string_node let slot_pages slot_header = make GET ["slot"; "pages"; slot_header] (fun pages -> - pages |> JSON.as_list |> List.map JSON.as_string) + pages |> JSON.as_list |> List.map get_bytes_from_json_string_node) let stored_slot_headers block_hash = make GET ["stored_slot_headers"; block_hash] @@ fun json -> diff --git a/tezt/tests/dal.ml b/tezt/tests/dal.ml index bd8b8516654bb3d289aa6f368665e1ab5f0ddf6f..1e7bc20855229ec7d1f9e1d02406987a1bef1789 100644 --- a/tezt/tests/dal.ml +++ b/tezt/tests/dal.ml @@ -498,6 +498,8 @@ let init_dal_node protocol = let* () = Dal_node.run dal_node in return (node, client, dal_node) +let split_slot node slot = RPC.call node (Rollup.Dal.RPC.split_slot slot) + let test_dal_node_slot_management = Protocol.register_test ~__FILE__ @@ -506,10 +508,8 @@ let test_dal_node_slot_management = ~supports:Protocol.(From_protocol (Protocol.number Alpha)) @@ fun protocol -> let* _node, _client, dal_node = init_dal_node protocol in - let slot_content = "test" in - let* slot_header = - RPC.call dal_node (Rollup.Dal.RPC.split_slot slot_content) - in + let slot_content = "test with invalid UTF-8 byte sequence \xFA" in + let* slot_header = split_slot dal_node slot_content in let* received_slot_content = RPC.call dal_node (Rollup.Dal.RPC.slot_content slot_header) in @@ -522,7 +522,7 @@ let test_dal_node_slot_management = return () let publish_and_store_slot node client dal_node source index content = - let* slot_header = RPC.call dal_node (Rollup.Dal.RPC.split_slot content) in + let* slot_header = split_slot dal_node content in let commitment = Tezos_crypto_dal.Cryptobox.Commitment.of_b58check_opt slot_header |> mandatory "The b58check-encoded slot header is not valid" @@ -635,12 +635,8 @@ let test_dal_node_test_slots_propagation = let* () = Dal_node.run dal_node2 in let* () = Dal_node.run dal_node3 in let* () = Dal_node.run dal_node4 in - let* slot_header1 = - RPC.call dal_node1 (Rollup.Dal.RPC.split_slot "content1") - in - let* slot_header2 = - RPC.call dal_node2 (Rollup.Dal.RPC.split_slot "content2") - in + let* slot_header1 = split_slot dal_node1 "content1" in + let* slot_header2 = split_slot dal_node2 "content2" in Lwt.join [ wait_for_stored_slot dal_node3 slot_header1; @@ -714,17 +710,11 @@ let rollup_node_stores_dal_slots ?expand_test _protocol dal_node sc_rollup_node (* 1. Send three slots to dal node and obtain corresponding headers. *) let slot_contents_0 = " 10 " in - let* commitment_0 = - RPC.call dal_node (Rollup.Dal.RPC.split_slot slot_contents_0) - in + let* commitment_0 = split_slot dal_node slot_contents_0 in let slot_contents_1 = " 200 " in - let* commitment_1 = - RPC.call dal_node (Rollup.Dal.RPC.split_slot slot_contents_1) - in + let* commitment_1 = split_slot dal_node slot_contents_1 in let slot_contents_2 = " 400 " in - let* commitment_2 = - RPC.call dal_node (Rollup.Dal.RPC.split_slot slot_contents_2) - in + let* commitment_2 = split_slot dal_node slot_contents_2 in (* 2. Run rollup node for an originated rollup. *) let* genesis_info = RPC.Client.call ~hooks client