From ba985c016eb616f34c20703d7adbe7291de7909c Mon Sep 17 00:00:00 2001 From: Alain Mebsout Date: Thu, 14 Nov 2024 16:46:07 +0100 Subject: [PATCH 1/8] Rollup node/RPC/Alpha: retrieve values under key in durable storage --- .../sc_rollup_services.ml | 9 +++++++ .../lib_sc_rollup_node/wasm_2_0_0_rpc.ml | 25 ++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/proto_alpha/lib_sc_rollup_layer2/sc_rollup_services.ml b/src/proto_alpha/lib_sc_rollup_layer2/sc_rollup_services.ml index 06e2622363db..f492d11531b6 100644 --- a/src/proto_alpha/lib_sc_rollup_layer2/sc_rollup_services.ml +++ b/src/proto_alpha/lib_sc_rollup_layer2/sc_rollup_services.ml @@ -333,6 +333,15 @@ module Block = struct ~output:Data_encoding.(list string) (path / "durable" / Sc_rollup.Kind.to_string pvm_kind / "subkeys") + let durable_state_values (pvm_kind : Sc_rollup.Kind.t) = + Tezos_rpc.Service.get_service + ~description: + "Retrieve values directly under a given key from PVM durable storage. \ + PVM state is taken with respect to the specified block level." + ~query:Query.key_query + ~output:Data_encoding.(list (obj2 (req "key" string) (req "value" bytes))) + (path / "durable" / Sc_rollup.Kind.to_string pvm_kind / "values") + let status = Tezos_rpc.Service.get_service ~description:"PVM status at block" diff --git a/src/proto_alpha/lib_sc_rollup_node/wasm_2_0_0_rpc.ml b/src/proto_alpha/lib_sc_rollup_node/wasm_2_0_0_rpc.ml index fe4d530eb9d6..6f735fe764f6 100644 --- a/src/proto_alpha/lib_sc_rollup_node/wasm_2_0_0_rpc.ml +++ b/src/proto_alpha/lib_sc_rollup_node/wasm_2_0_0_rpc.ml @@ -68,13 +68,32 @@ struct let*! leng = Durable_state.value_length (of_node_pvmstate state) key in return leng ) ; + ( Block_directory.register0 + (Sc_rollup_services.Block.durable_state_subkeys Kind.Wasm_2_0_0) + @@ fun (node_ctxt, block) {key} () -> + let open Lwt_result_syntax in + let* state = get_state node_ctxt block in + let*! subkeys = Durable_state.list (of_node_pvmstate state) key in + return subkeys ) ; + Block_directory.register0 - (Sc_rollup_services.Block.durable_state_subkeys Kind.Wasm_2_0_0) + (Sc_rollup_services.Block.durable_state_values Kind.Wasm_2_0_0) @@ fun (node_ctxt, block) {key} () -> let open Lwt_result_syntax in let* state = get_state node_ctxt block in - let*! subkeys = Durable_state.list (of_node_pvmstate state) key in - return subkeys + let tree = of_node_pvmstate state in + let*! subkeys = Durable_state.list tree key in + let*! bindings = + List.filter_map_s + (fun subkey -> + let open Lwt_syntax in + let+ value = + Durable_state.lookup tree (String.concat "/" [key; subkey]) + in + match value with None -> None | Some value -> Some (subkey, value)) + subkeys + in + return bindings let build_sub_directory node_ctxt = register () ; -- GitLab From 744159f885882de27d9a26badca195aff7a4677c Mon Sep 17 00:00:00 2001 From: Alain Mebsout Date: Thu, 14 Nov 2024 16:54:17 +0100 Subject: [PATCH 2/8] 018_Proxford/Rollup node/RPC/Alpha: retrieve values under key in durable storage Porting to proto 018_Proxford 17bd9bd8c1e8aeb67a608818d1de9b65ce7b8b17 - Rollup node/RPC/Alpha: retrieve values under key in durable storage --- .../sc_rollup_services.ml | 9 +++++++ .../lib_sc_rollup_node/wasm_2_0_0_rpc.ml | 25 ++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/proto_018_Proxford/lib_sc_rollup_layer2/sc_rollup_services.ml b/src/proto_018_Proxford/lib_sc_rollup_layer2/sc_rollup_services.ml index 06e2622363db..f492d11531b6 100644 --- a/src/proto_018_Proxford/lib_sc_rollup_layer2/sc_rollup_services.ml +++ b/src/proto_018_Proxford/lib_sc_rollup_layer2/sc_rollup_services.ml @@ -333,6 +333,15 @@ module Block = struct ~output:Data_encoding.(list string) (path / "durable" / Sc_rollup.Kind.to_string pvm_kind / "subkeys") + let durable_state_values (pvm_kind : Sc_rollup.Kind.t) = + Tezos_rpc.Service.get_service + ~description: + "Retrieve values directly under a given key from PVM durable storage. \ + PVM state is taken with respect to the specified block level." + ~query:Query.key_query + ~output:Data_encoding.(list (obj2 (req "key" string) (req "value" bytes))) + (path / "durable" / Sc_rollup.Kind.to_string pvm_kind / "values") + let status = Tezos_rpc.Service.get_service ~description:"PVM status at block" diff --git a/src/proto_018_Proxford/lib_sc_rollup_node/wasm_2_0_0_rpc.ml b/src/proto_018_Proxford/lib_sc_rollup_node/wasm_2_0_0_rpc.ml index fe4d530eb9d6..6f735fe764f6 100644 --- a/src/proto_018_Proxford/lib_sc_rollup_node/wasm_2_0_0_rpc.ml +++ b/src/proto_018_Proxford/lib_sc_rollup_node/wasm_2_0_0_rpc.ml @@ -68,13 +68,32 @@ struct let*! leng = Durable_state.value_length (of_node_pvmstate state) key in return leng ) ; + ( Block_directory.register0 + (Sc_rollup_services.Block.durable_state_subkeys Kind.Wasm_2_0_0) + @@ fun (node_ctxt, block) {key} () -> + let open Lwt_result_syntax in + let* state = get_state node_ctxt block in + let*! subkeys = Durable_state.list (of_node_pvmstate state) key in + return subkeys ) ; + Block_directory.register0 - (Sc_rollup_services.Block.durable_state_subkeys Kind.Wasm_2_0_0) + (Sc_rollup_services.Block.durable_state_values Kind.Wasm_2_0_0) @@ fun (node_ctxt, block) {key} () -> let open Lwt_result_syntax in let* state = get_state node_ctxt block in - let*! subkeys = Durable_state.list (of_node_pvmstate state) key in - return subkeys + let tree = of_node_pvmstate state in + let*! subkeys = Durable_state.list tree key in + let*! bindings = + List.filter_map_s + (fun subkey -> + let open Lwt_syntax in + let+ value = + Durable_state.lookup tree (String.concat "/" [key; subkey]) + in + match value with None -> None | Some value -> Some (subkey, value)) + subkeys + in + return bindings let build_sub_directory node_ctxt = register () ; -- GitLab From a759b6bce9d1412aa67675470ced9dd91004dc95 Mon Sep 17 00:00:00 2001 From: Alain Mebsout Date: Thu, 14 Nov 2024 16:54:18 +0100 Subject: [PATCH 3/8] 019_PtParisB/018_Proxford/Rollup node/RPC/Alpha: retrieve values under key in durable storage Porting to proto 019_PtParisB 216f25a5c75d67babaed6215b48b5280cc852959 - 018_Proxford/Rollup node/RPC/Alpha: retrieve values under key in durable storage --- .../sc_rollup_services.ml | 9 +++++++ .../lib_sc_rollup_node/wasm_2_0_0_rpc.ml | 25 ++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/proto_019_PtParisB/lib_sc_rollup_layer2/sc_rollup_services.ml b/src/proto_019_PtParisB/lib_sc_rollup_layer2/sc_rollup_services.ml index d982430b7806..47a39eee9b61 100644 --- a/src/proto_019_PtParisB/lib_sc_rollup_layer2/sc_rollup_services.ml +++ b/src/proto_019_PtParisB/lib_sc_rollup_layer2/sc_rollup_services.ml @@ -374,6 +374,15 @@ module Block = struct ~output:Data_encoding.(list string) (path / "durable" / Sc_rollup.Kind.to_string pvm_kind / "subkeys") + let durable_state_values (pvm_kind : Sc_rollup.Kind.t) = + Tezos_rpc.Service.get_service + ~description: + "Retrieve values directly under a given key from PVM durable storage. \ + PVM state is taken with respect to the specified block level." + ~query:Query.key_query + ~output:Data_encoding.(list (obj2 (req "key" string) (req "value" bytes))) + (path / "durable" / Sc_rollup.Kind.to_string pvm_kind / "values") + let status = Tezos_rpc.Service.get_service ~description:"PVM status at block" diff --git a/src/proto_019_PtParisB/lib_sc_rollup_node/wasm_2_0_0_rpc.ml b/src/proto_019_PtParisB/lib_sc_rollup_node/wasm_2_0_0_rpc.ml index fe4d530eb9d6..6f735fe764f6 100644 --- a/src/proto_019_PtParisB/lib_sc_rollup_node/wasm_2_0_0_rpc.ml +++ b/src/proto_019_PtParisB/lib_sc_rollup_node/wasm_2_0_0_rpc.ml @@ -68,13 +68,32 @@ struct let*! leng = Durable_state.value_length (of_node_pvmstate state) key in return leng ) ; + ( Block_directory.register0 + (Sc_rollup_services.Block.durable_state_subkeys Kind.Wasm_2_0_0) + @@ fun (node_ctxt, block) {key} () -> + let open Lwt_result_syntax in + let* state = get_state node_ctxt block in + let*! subkeys = Durable_state.list (of_node_pvmstate state) key in + return subkeys ) ; + Block_directory.register0 - (Sc_rollup_services.Block.durable_state_subkeys Kind.Wasm_2_0_0) + (Sc_rollup_services.Block.durable_state_values Kind.Wasm_2_0_0) @@ fun (node_ctxt, block) {key} () -> let open Lwt_result_syntax in let* state = get_state node_ctxt block in - let*! subkeys = Durable_state.list (of_node_pvmstate state) key in - return subkeys + let tree = of_node_pvmstate state in + let*! subkeys = Durable_state.list tree key in + let*! bindings = + List.filter_map_s + (fun subkey -> + let open Lwt_syntax in + let+ value = + Durable_state.lookup tree (String.concat "/" [key; subkey]) + in + match value with None -> None | Some value -> Some (subkey, value)) + subkeys + in + return bindings let build_sub_directory node_ctxt = register () ; -- GitLab From 80f6c3c1e3a6c8ae30f4a10a152f037232820a77 Mon Sep 17 00:00:00 2001 From: Alain Mebsout Date: Thu, 14 Nov 2024 16:54:19 +0100 Subject: [PATCH 4/8] 020_PsParisC/019_PtParisB/018_Proxford/Rollup node/RPC/Alpha: retrieve values under key in durable storage Porting to proto 020_PsParisC 6e9e8eed0ed1eea2105a36576835dd6c96d6c719 - 019_PtParisB/018_Proxford/Rollup node/RPC/Alpha: retrieve values under key in durable storage --- .../sc_rollup_services.ml | 9 +++++++ .../lib_sc_rollup_node/wasm_2_0_0_rpc.ml | 25 ++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/proto_020_PsParisC/lib_sc_rollup_layer2/sc_rollup_services.ml b/src/proto_020_PsParisC/lib_sc_rollup_layer2/sc_rollup_services.ml index d982430b7806..47a39eee9b61 100644 --- a/src/proto_020_PsParisC/lib_sc_rollup_layer2/sc_rollup_services.ml +++ b/src/proto_020_PsParisC/lib_sc_rollup_layer2/sc_rollup_services.ml @@ -374,6 +374,15 @@ module Block = struct ~output:Data_encoding.(list string) (path / "durable" / Sc_rollup.Kind.to_string pvm_kind / "subkeys") + let durable_state_values (pvm_kind : Sc_rollup.Kind.t) = + Tezos_rpc.Service.get_service + ~description: + "Retrieve values directly under a given key from PVM durable storage. \ + PVM state is taken with respect to the specified block level." + ~query:Query.key_query + ~output:Data_encoding.(list (obj2 (req "key" string) (req "value" bytes))) + (path / "durable" / Sc_rollup.Kind.to_string pvm_kind / "values") + let status = Tezos_rpc.Service.get_service ~description:"PVM status at block" diff --git a/src/proto_020_PsParisC/lib_sc_rollup_node/wasm_2_0_0_rpc.ml b/src/proto_020_PsParisC/lib_sc_rollup_node/wasm_2_0_0_rpc.ml index fe4d530eb9d6..6f735fe764f6 100644 --- a/src/proto_020_PsParisC/lib_sc_rollup_node/wasm_2_0_0_rpc.ml +++ b/src/proto_020_PsParisC/lib_sc_rollup_node/wasm_2_0_0_rpc.ml @@ -68,13 +68,32 @@ struct let*! leng = Durable_state.value_length (of_node_pvmstate state) key in return leng ) ; + ( Block_directory.register0 + (Sc_rollup_services.Block.durable_state_subkeys Kind.Wasm_2_0_0) + @@ fun (node_ctxt, block) {key} () -> + let open Lwt_result_syntax in + let* state = get_state node_ctxt block in + let*! subkeys = Durable_state.list (of_node_pvmstate state) key in + return subkeys ) ; + Block_directory.register0 - (Sc_rollup_services.Block.durable_state_subkeys Kind.Wasm_2_0_0) + (Sc_rollup_services.Block.durable_state_values Kind.Wasm_2_0_0) @@ fun (node_ctxt, block) {key} () -> let open Lwt_result_syntax in let* state = get_state node_ctxt block in - let*! subkeys = Durable_state.list (of_node_pvmstate state) key in - return subkeys + let tree = of_node_pvmstate state in + let*! subkeys = Durable_state.list tree key in + let*! bindings = + List.filter_map_s + (fun subkey -> + let open Lwt_syntax in + let+ value = + Durable_state.lookup tree (String.concat "/" [key; subkey]) + in + match value with None -> None | Some value -> Some (subkey, value)) + subkeys + in + return bindings let build_sub_directory node_ctxt = register () ; -- GitLab From 068875aa82786859b24b3020a434c809bdba33e5 Mon Sep 17 00:00:00 2001 From: Alain Mebsout Date: Thu, 14 Nov 2024 16:54:20 +0100 Subject: [PATCH 5/8] 021_PsQuebec/020_PsParisC/019_PtParisB/018_Proxford/Rollup node/RPC/Alpha: retrieve values under key in durable storage Porting to proto 021_PsQuebec 67ad1ee225dc8838c9528175be007f78c887f038 - 020_PsParisC/019_PtParisB/018_Proxford/Rollup node/RPC/Alpha: retrieve values under key in durable storage --- .../sc_rollup_services.ml | 9 +++++++ .../lib_sc_rollup_node/wasm_2_0_0_rpc.ml | 25 ++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/proto_021_PsQuebec/lib_sc_rollup_layer2/sc_rollup_services.ml b/src/proto_021_PsQuebec/lib_sc_rollup_layer2/sc_rollup_services.ml index 06e2622363db..f492d11531b6 100644 --- a/src/proto_021_PsQuebec/lib_sc_rollup_layer2/sc_rollup_services.ml +++ b/src/proto_021_PsQuebec/lib_sc_rollup_layer2/sc_rollup_services.ml @@ -333,6 +333,15 @@ module Block = struct ~output:Data_encoding.(list string) (path / "durable" / Sc_rollup.Kind.to_string pvm_kind / "subkeys") + let durable_state_values (pvm_kind : Sc_rollup.Kind.t) = + Tezos_rpc.Service.get_service + ~description: + "Retrieve values directly under a given key from PVM durable storage. \ + PVM state is taken with respect to the specified block level." + ~query:Query.key_query + ~output:Data_encoding.(list (obj2 (req "key" string) (req "value" bytes))) + (path / "durable" / Sc_rollup.Kind.to_string pvm_kind / "values") + let status = Tezos_rpc.Service.get_service ~description:"PVM status at block" diff --git a/src/proto_021_PsQuebec/lib_sc_rollup_node/wasm_2_0_0_rpc.ml b/src/proto_021_PsQuebec/lib_sc_rollup_node/wasm_2_0_0_rpc.ml index fe4d530eb9d6..6f735fe764f6 100644 --- a/src/proto_021_PsQuebec/lib_sc_rollup_node/wasm_2_0_0_rpc.ml +++ b/src/proto_021_PsQuebec/lib_sc_rollup_node/wasm_2_0_0_rpc.ml @@ -68,13 +68,32 @@ struct let*! leng = Durable_state.value_length (of_node_pvmstate state) key in return leng ) ; + ( Block_directory.register0 + (Sc_rollup_services.Block.durable_state_subkeys Kind.Wasm_2_0_0) + @@ fun (node_ctxt, block) {key} () -> + let open Lwt_result_syntax in + let* state = get_state node_ctxt block in + let*! subkeys = Durable_state.list (of_node_pvmstate state) key in + return subkeys ) ; + Block_directory.register0 - (Sc_rollup_services.Block.durable_state_subkeys Kind.Wasm_2_0_0) + (Sc_rollup_services.Block.durable_state_values Kind.Wasm_2_0_0) @@ fun (node_ctxt, block) {key} () -> let open Lwt_result_syntax in let* state = get_state node_ctxt block in - let*! subkeys = Durable_state.list (of_node_pvmstate state) key in - return subkeys + let tree = of_node_pvmstate state in + let*! subkeys = Durable_state.list tree key in + let*! bindings = + List.filter_map_s + (fun subkey -> + let open Lwt_syntax in + let+ value = + Durable_state.lookup tree (String.concat "/" [key; subkey]) + in + match value with None -> None | Some value -> Some (subkey, value)) + subkeys + in + return bindings let build_sub_directory node_ctxt = register () ; -- GitLab From 61f0ff000ade6566fe6327e1ca12126d306c7a14 Mon Sep 17 00:00:00 2001 From: Alain Mebsout Date: Tue, 19 Nov 2024 11:28:48 +0100 Subject: [PATCH 6/8] Rollup node/RPC: remove durable storage values RPC from secure ACL --- src/lib_smart_rollup_node/rpc_server.ml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib_smart_rollup_node/rpc_server.ml b/src/lib_smart_rollup_node/rpc_server.ml index 910bb84d4999..75bb005108c4 100644 --- a/src/lib_smart_rollup_node/rpc_server.ml +++ b/src/lib_smart_rollup_node/rpc_server.ml @@ -48,6 +48,7 @@ module Acl = struct parse [ "GET /global/block/*/durable/wasm_2_0_0/subkeys"; + "GET /global/block/*/durable/wasm_2_0_0/values"; "/local/batcher/**"; "/admin/**"; "/stats/**"; -- GitLab From 0d28efd5bf2146edd9e02cad62f1e053b229e75b Mon Sep 17 00:00:00 2001 From: Alain Mebsout Date: Thu, 14 Nov 2024 17:18:13 +0100 Subject: [PATCH 7/8] Doc: changelog --- CHANGES.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 0b205648ea1b..387059c03211 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -138,6 +138,15 @@ Smart Rollup node - Fix potential issue with store with SQLite < 3.35. (MR :gl:`!15631`) +- Paginate RPC for durable storage subkeys + ``/global/block//durable/wasm_2_0_0/subkeys?key=&offset=&length=``, + with new query parameters ``offset`` and ``length``. (MR :gl:`!15625`) + +- New RPC to retrieve values under a key in the durable storage + ``/global/block//durable/wasm_2_0_0/values?key=&offset=&length=``. + (MR :gl:`!15627`) + + Smart Rollup WASM Debugger -------------------------- -- GitLab From 984ea1a1c60c70c648d0177d198f7f13eaf044d1 Mon Sep 17 00:00:00 2001 From: Alain Mebsout Date: Fri, 15 Nov 2024 13:53:31 +0100 Subject: [PATCH 8/8] Test: durable storage values RPC --- tezt/lib_tezos/sc_rollup_rpc.ml | 20 +++++++-- tezt/lib_tezos/sc_rollup_rpc.mli | 1 + ..._0 - RPC API should work and be stable.out | 4 ++ ..._0 - RPC API should work and be stable.out | 4 ++ ..._0 - RPC API should work and be stable.out | 4 ++ tezt/tests/sc_rollup.ml | 42 ++++++++++++++++++- 6 files changed, 69 insertions(+), 6 deletions(-) diff --git a/tezt/lib_tezos/sc_rollup_rpc.ml b/tezt/lib_tezos/sc_rollup_rpc.ml index 1d14fa9bdd85..05cd2f9bbce5 100644 --- a/tezt/lib_tezos/sc_rollup_rpc.ml +++ b/tezt/lib_tezos/sc_rollup_rpc.ml @@ -223,19 +223,31 @@ type 'output_type durable_state_operation = | Value : string option durable_state_operation | Length : int64 option durable_state_operation | Subkeys : string list durable_state_operation + | Values : (string * string) list durable_state_operation let string_of_durable_state_operation (type a) (x : a durable_state_operation) = - match x with Value -> "value" | Length -> "length" | Subkeys -> "subkeys" + match x with + | Value -> "value" + | Length -> "length" + | Subkeys -> "subkeys" + | Values -> "values" let get_global_block_durable_state_value ?(block = "head") ~pvm_kind ~operation ~key () = let op = string_of_durable_state_operation operation in let f : type k. k durable_state_operation -> JSON.t -> k = fun operation -> + let open JSON in match operation with - | Value -> JSON.as_string_opt - | Length -> JSON.as_int64_opt - | Subkeys -> fun json -> List.map JSON.as_string (JSON.as_list json) + | Value -> as_string_opt + | Length -> as_int64_opt + | Subkeys -> fun json -> List.map as_string (as_list json) + | Values -> + fun json -> + List.map + (fun json -> + (json |-> "key" |> as_string, json |-> "value" |> as_string)) + (as_list json) in make ~query_string:[("key", String.trim key)] diff --git a/tezt/lib_tezos/sc_rollup_rpc.mli b/tezt/lib_tezos/sc_rollup_rpc.mli index 8b83bdc3b68e..8d19a4526bb2 100644 --- a/tezt/lib_tezos/sc_rollup_rpc.mli +++ b/tezt/lib_tezos/sc_rollup_rpc.mli @@ -156,6 +156,7 @@ type 'output_type durable_state_operation = | Value : string option durable_state_operation | Length : int64 option durable_state_operation | Subkeys : string list durable_state_operation + | Values : (string * string) list durable_state_operation (** RPC: [GET global/block//durable//] gets the corresponding durable PVM state information (depending on [operation]) mapped to [key] for the [block] diff --git a/tezt/tests/expected/sc_rollup.ml/Alpha- wasm_2_0_0 - RPC API should work and be stable.out b/tezt/tests/expected/sc_rollup.ml/Alpha- wasm_2_0_0 - RPC API should work and be stable.out index 34a33b04c469..63d4f4ea4b78 100644 --- a/tezt/tests/expected/sc_rollup.ml/Alpha- wasm_2_0_0 - RPC API should work and be stable.out +++ b/tezt/tests/expected/sc_rollup.ml/Alpha- wasm_2_0_0 - RPC API should work and be stable.out @@ -253,6 +253,10 @@ GET http://[HOST]:[PORT]/global/block/head/durable/wasm_2_0_0/subkeys?key=/reado 200 OK ["boot.wasm","env"] +GET http://[HOST]:[PORT]/global/block/head/durable/wasm_2_0_0/values?key=/numbers +200 OK +[{"key":"number02","value":"02"},{"key":"number24","value":"18"},{"key":"number01","value":"01"},{"key":"number12","value":"0c"},{"key":"number04","value":"04"},{"key":"number00","value":"00"},{"key":"number03","value":"03"},{"key":"number10","value":"0a"},{"key":"number21","value":"15"},{"key":"number14","value":"0e"},{"key":"number15","value":"0f"},{"key":"number20","value":"14"},{"key":"number05","value":"05"},{"key":"number25","value":"19"},{"key":"number26","value":"1a"},{"key":"number16","value":"10"},{"key":"number29","value":"1d"},{"key":"number06","value":"06"},{"key":"number23","value":"17"},{"key":"number13","value":"0d"},{"key":"number09","value":"09"},{"key":"number08","value":"08"},{"key":"number27","value":"1b"},{"key":"number19","value":"13"},{"key":"number22","value":"16"},{"key":"number07","value":"07"},{"key":"number18","value":"12"},{"key":"number11","value":"0b"},{"key":"number28","value":"1c"},{"key":"number17","value":"11"}] + GET http://[HOST]:[PORT]/global/block/head/status 200 OK "Waiting for input message" diff --git a/tezt/tests/expected/sc_rollup.ml/Parisc- wasm_2_0_0 - RPC API should work and be stable.out b/tezt/tests/expected/sc_rollup.ml/Parisc- wasm_2_0_0 - RPC API should work and be stable.out index ad76087db2e8..22ccb74c39d6 100644 --- a/tezt/tests/expected/sc_rollup.ml/Parisc- wasm_2_0_0 - RPC API should work and be stable.out +++ b/tezt/tests/expected/sc_rollup.ml/Parisc- wasm_2_0_0 - RPC API should work and be stable.out @@ -253,6 +253,10 @@ GET http://[HOST]:[PORT]/global/block/head/durable/wasm_2_0_0/subkeys?key=/reado 200 OK ["boot.wasm","env"] +GET http://[HOST]:[PORT]/global/block/head/durable/wasm_2_0_0/values?key=/numbers +200 OK +[{"key":"number02","value":"02"},{"key":"number24","value":"18"},{"key":"number01","value":"01"},{"key":"number12","value":"0c"},{"key":"number04","value":"04"},{"key":"number00","value":"00"},{"key":"number03","value":"03"},{"key":"number10","value":"0a"},{"key":"number21","value":"15"},{"key":"number14","value":"0e"},{"key":"number15","value":"0f"},{"key":"number20","value":"14"},{"key":"number05","value":"05"},{"key":"number25","value":"19"},{"key":"number26","value":"1a"},{"key":"number16","value":"10"},{"key":"number29","value":"1d"},{"key":"number06","value":"06"},{"key":"number23","value":"17"},{"key":"number13","value":"0d"},{"key":"number09","value":"09"},{"key":"number08","value":"08"},{"key":"number27","value":"1b"},{"key":"number19","value":"13"},{"key":"number22","value":"16"},{"key":"number07","value":"07"},{"key":"number18","value":"12"},{"key":"number11","value":"0b"},{"key":"number28","value":"1c"},{"key":"number17","value":"11"}] + GET http://[HOST]:[PORT]/global/block/head/status 200 OK "Waiting for input message" diff --git a/tezt/tests/expected/sc_rollup.ml/Quebec- wasm_2_0_0 - RPC API should work and be stable.out b/tezt/tests/expected/sc_rollup.ml/Quebec- wasm_2_0_0 - RPC API should work and be stable.out index 34a33b04c469..63d4f4ea4b78 100644 --- a/tezt/tests/expected/sc_rollup.ml/Quebec- wasm_2_0_0 - RPC API should work and be stable.out +++ b/tezt/tests/expected/sc_rollup.ml/Quebec- wasm_2_0_0 - RPC API should work and be stable.out @@ -253,6 +253,10 @@ GET http://[HOST]:[PORT]/global/block/head/durable/wasm_2_0_0/subkeys?key=/reado 200 OK ["boot.wasm","env"] +GET http://[HOST]:[PORT]/global/block/head/durable/wasm_2_0_0/values?key=/numbers +200 OK +[{"key":"number02","value":"02"},{"key":"number24","value":"18"},{"key":"number01","value":"01"},{"key":"number12","value":"0c"},{"key":"number04","value":"04"},{"key":"number00","value":"00"},{"key":"number03","value":"03"},{"key":"number10","value":"0a"},{"key":"number21","value":"15"},{"key":"number14","value":"0e"},{"key":"number15","value":"0f"},{"key":"number20","value":"14"},{"key":"number05","value":"05"},{"key":"number25","value":"19"},{"key":"number26","value":"1a"},{"key":"number16","value":"10"},{"key":"number29","value":"1d"},{"key":"number06","value":"06"},{"key":"number23","value":"17"},{"key":"number13","value":"0d"},{"key":"number09","value":"09"},{"key":"number08","value":"08"},{"key":"number27","value":"1b"},{"key":"number19","value":"13"},{"key":"number22","value":"16"},{"key":"number07","value":"07"},{"key":"number18","value":"12"},{"key":"number11","value":"0b"},{"key":"number28","value":"1c"},{"key":"number17","value":"11"}] + GET http://[HOST]:[PORT]/global/block/head/status 200 OK "Waiting for input message" diff --git a/tezt/tests/sc_rollup.ml b/tezt/tests/sc_rollup.ml index 437d63de7e18..ef9acba3ab26 100644 --- a/tezt/tests/sc_rollup.ml +++ b/tezt/tests/sc_rollup.ml @@ -4700,8 +4700,46 @@ let test_rpcs ~kind in Check.((kernel_subkeys = ["boot.wasm"; "env"]) (list string)) ~error_msg:"The key's subkeys are %L but should be %R" ; - return () - | "riscv" -> return () + + Log.info "Add elements in the durable storage" ; + (* Stop the rollup node. *) + let* () = Sc_rollup_node.terminate sc_rollup_node in + + let elements = + List.init 30 (fun i -> + (Format.sprintf "number%02d" i, Format.sprintf "%02x" i)) + in + let* () = + Lwt_list.iter_s + (fun (key, value) -> + Sc_rollup_node.patch_durable_storage + sc_rollup_node + ~key:("/numbers/" ^ key) + ~value) + elements + in + let* () = + Sc_rollup_node.run ~event_level:`Debug sc_rollup_node sc_rollup [] + in + + let* number_values = + Sc_rollup_node.RPC.call sc_rollup_node ~rpc_hooks + @@ Sc_rollup_rpc.get_global_block_durable_state_value + ~pvm_kind:kind + ~operation:Sc_rollup_rpc.Values + ~key:"/numbers" + () + in + let number_values = + List.fast_sort + (fun (k1, _) (k2, _) -> String.compare k1 k2) + number_values + in + Check.((number_values = elements) (list (tuple2 string string))) + ~error_msg:"/numbers has %L but should contain values for %R" ; + + unit + | "riscv" -> unit | _ -> failwith "incorrect kind" in let* _status = -- GitLab