From 6fcdc5d9af529e71bfae67286fabf921b45f6031 Mon Sep 17 00:00:00 2001 From: Ryan Tan Date: Tue, 4 Jul 2023 16:44:01 +0100 Subject: [PATCH 1/3] Dac: refactor rpc param to use Parsed_rpc --- manifest/main.ml | 1 + opam/octez-dac-node.opam | 1 + src/bin_dac_node/dune | 2 ++ src/bin_dac_node/main_dac.ml | 31 +++++++++++++++++++------------ 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/manifest/main.ml b/manifest/main.ml index 8a3b2a7b6b80..a474d07dbf3a 100644 --- a/manifest/main.ml +++ b/manifest/main.ml @@ -7371,6 +7371,7 @@ let _octez_dac_node = octez_rpc_http_client_unix; octez_stdlib_unix |> open_; octez_stdlib |> open_; + octez_dac_lib |> open_; octez_dac_node_lib |> open_; octez_layer2_store |> open_; irmin_pack; diff --git a/opam/octez-dac-node.opam b/opam/octez-dac-node.opam index d14cb582eb89..e786466feb46 100644 --- a/opam/octez-dac-node.opam +++ b/opam/octez-dac-node.opam @@ -21,6 +21,7 @@ depends: [ "tezos-rpc-http-client-unix" "tezos-stdlib-unix" "tezos-stdlib" + "tezos-dac-lib" "tezos-dac-node-lib" "tezos-layer2-store" "irmin-pack" { >= "3.7.2" & < "3.8.0" } diff --git a/src/bin_dac_node/dune b/src/bin_dac_node/dune index 61fa57ebcf28..1fbfcf77f06c 100644 --- a/src/bin_dac_node/dune +++ b/src/bin_dac_node/dune @@ -19,6 +19,7 @@ tezos-rpc-http-client-unix tezos-stdlib-unix tezos-stdlib + tezos-dac-lib tezos_dac_node_lib tezos_layer2_store irmin-pack @@ -42,6 +43,7 @@ -open Tezos_rpc_http -open Tezos_stdlib_unix -open Tezos_stdlib + -open Tezos_dac_lib -open Tezos_dac_node_lib -open Tezos_layer2_store)) diff --git a/src/bin_dac_node/main_dac.ml b/src/bin_dac_node/main_dac.ml index 1fc562ff8589..737998e0decc 100644 --- a/src/bin_dac_node/main_dac.ml +++ b/src/bin_dac_node/main_dac.ml @@ -156,12 +156,13 @@ let allow_v1_api_arg : (bool, Client_context.full) Tezos_clic.arg = () let raw_rpc_parameter = - Tezos_clic.parameter (fun _cctxt h -> - match String.split ':' h with - | [host_name; port] -> ( - try Lwt.return_ok (host_name, int_of_string port) - with _ -> failwith "Address not in format :") - | _ -> failwith "Address not in format :") + let open Lwt_result_syntax in + let open Dac_clic_helpers in + Tezos_clic.parameter (fun _cctxt raw_rpc -> + let parsed_rpc_result = Parsed_rpc.of_string raw_rpc in + match parsed_rpc_result with + | Ok parsed_rpc -> return parsed_rpc + | Error (`Parse_rpc_error msg) -> failwith "%s" msg) let coordinator_rpc_param ?(name = "coordinator-rpc-address") ?(desc = @@ -308,7 +309,7 @@ module Config_init = struct @@ tz4_address_param ~desc:"BLS public key hash to use as the signer." @@ stop) (fun (data_dir, rpc_address, rpc_port, reveal_data_dir, allow_v1_api) - (coordinator_rpc_address, coordinator_rpc_port) + coordinator_rpc_address address cctxt -> experimental_disclaimer () ; @@ -319,13 +320,14 @@ module Config_init = struct ~rpc_port ~allow_v1_api (Configuration.make_committee_member - coordinator_rpc_address - coordinator_rpc_port + coordinator_rpc_address.host + coordinator_rpc_address.port address) cctxt) let observer_command = let open Tezos_clic in + let open Dac_clic_helpers in command ~group ~desc:"Configure DAC node in observer mode." @@ -351,10 +353,15 @@ module Config_init = struct reveal_data_dir, timeout, allow_v1_api ) - (coordinator_rpc_address, coordinator_rpc_port) + coordinator_rpc_address committee_rpc_addresses cctxt -> experimental_disclaimer () ; + let committee_rpc_addresses = + List.map + (fun Parsed_rpc.{scheme = _; host; port} -> (host, port)) + committee_rpc_addresses + in create_configuration ~data_dir ~reveal_data_dir @@ -364,8 +371,8 @@ module Config_init = struct (Configuration.make_observer ~committee_rpc_addresses ?timeout - coordinator_rpc_address - coordinator_rpc_port) + coordinator_rpc_address.host + coordinator_rpc_address.port) cctxt) let commands = -- GitLab From 68656c46c8664fcad534bb34b42c2184681f5bcc Mon Sep 17 00:00:00 2001 From: Ryan Tan Date: Tue, 4 Jul 2023 18:17:44 +0100 Subject: [PATCH 2/3] Dac: refactor committee member config --- src/bin_dac_node/main_dac.ml | 12 ++++++++---- src/lib_dac_client/dac_node_client.ml | 7 +++++++ src/lib_dac_client/dac_node_client.mli | 3 +++ src/lib_dac_node/configuration.ml | 27 +++++++++++--------------- src/lib_dac_node/configuration.mli | 14 ++++++------- src/lib_dac_node/node_context.ml | 10 ++-------- 6 files changed, 38 insertions(+), 35 deletions(-) diff --git a/src/bin_dac_node/main_dac.ml b/src/bin_dac_node/main_dac.ml index 737998e0decc..430940a660df 100644 --- a/src/bin_dac_node/main_dac.ml +++ b/src/bin_dac_node/main_dac.ml @@ -313,16 +313,20 @@ module Config_init = struct address cctxt -> experimental_disclaimer () ; + let coordinator_rpc_address = + Uri.make + ~scheme:coordinator_rpc_address.scheme + ~host:coordinator_rpc_address.host + ~port:coordinator_rpc_address.port + () + in create_configuration ~data_dir ~reveal_data_dir ~rpc_address ~rpc_port ~allow_v1_api - (Configuration.make_committee_member - coordinator_rpc_address.host - coordinator_rpc_address.port - address) + (Configuration.make_committee_member ~coordinator_rpc_address address) cctxt) let observer_command = diff --git a/src/lib_dac_client/dac_node_client.ml b/src/lib_dac_client/dac_node_client.ml index 0d3cc85031a5..2264a44289f1 100644 --- a/src/lib_dac_client/dac_node_client.ml +++ b/src/lib_dac_client/dac_node_client.ml @@ -44,6 +44,13 @@ let make_unix_cctxt ~scheme ~host ~port = in new unix_cctxt ~rpc_config +let of_uri uri = + let endpoint = uri in + let rpc_config = + {Tezos_rpc_http_client_unix.RPC_client_unix.default_config with endpoint} + in + new unix_cctxt ~rpc_config + module V0 = struct (* FIXME: https://gitlab.com/tezos/tezos/-/issues/4895 If the preimage was generated using a different plugin, the computation of diff --git a/src/lib_dac_client/dac_node_client.mli b/src/lib_dac_client/dac_node_client.mli index db2ea4646f51..4bf3d8257cef 100644 --- a/src/lib_dac_client/dac_node_client.mli +++ b/src/lib_dac_client/dac_node_client.mli @@ -39,6 +39,9 @@ class unix_cctxt : the client configuration parameters. *) val make_unix_cctxt : scheme:string -> host:string -> port:int -> cctxt +(** [of_uri uri] generates a cctxt from [uri]. *) +val of_uri : Uri.t -> cctxt + (** [V0] is a module that provides a client specification for interacting with experimental [Tezos_lib_dac.Rpc_services.Api.V0] API. Note that even though [V0] api is binding, it is already deprecated. Use it at your own risk! *) diff --git a/src/lib_dac_node/configuration.ml b/src/lib_dac_node/configuration.ml index bbbbaa22096a..e9fad022c04e 100644 --- a/src/lib_dac_node/configuration.ml +++ b/src/lib_dac_node/configuration.ml @@ -71,24 +71,23 @@ end module Committee_member = struct type t = { - coordinator_rpc_address : string; - coordinator_rpc_port : int; + coordinator_rpc_address : Uri.t; address : Tezos_crypto.Aggregate_signature.public_key_hash; } - let make coordinator_rpc_address coordinator_rpc_port address = - {coordinator_rpc_address; coordinator_rpc_port; address} + let make coordinator_rpc_address address = {coordinator_rpc_address; address} let encoding = Data_encoding.( conv - (fun {coordinator_rpc_address; coordinator_rpc_port; address} -> - (coordinator_rpc_address, coordinator_rpc_port, address)) - (fun (coordinator_rpc_address, coordinator_rpc_port, address) -> - {coordinator_rpc_address; coordinator_rpc_port; address}) - (obj3 + (fun {coordinator_rpc_address; address} -> + let coordinator_rpc_address = Uri.to_string coordinator_rpc_address in + (coordinator_rpc_address, address)) + (fun (coordinator_rpc_address, address) -> + let coordinator_rpc_address = Uri.of_string coordinator_rpc_address in + {coordinator_rpc_address; address}) + (obj2 (req "coordinator_rpc_address" string) - (req "coordinator_rpc_port" uint16) (req "address" Tezos_crypto.Aggregate_signature.Public_key_hash.encoding))) @@ -230,13 +229,9 @@ type mode = let make_coordinator committee_members = Coordinator (Coordinator.make committee_members) -let make_committee_member coordinator_rpc_address coordinator_rpc_port - committee_member_address = +let make_committee_member ~coordinator_rpc_address committee_member_address = Committee_member - (Committee_member.make - coordinator_rpc_address - coordinator_rpc_port - committee_member_address) + (Committee_member.make coordinator_rpc_address committee_member_address) let make_observer ~committee_rpc_addresses ?timeout coordinator_rpc_address coordinator_rpc_port = diff --git a/src/lib_dac_node/configuration.mli b/src/lib_dac_node/configuration.mli index e7aab8057e8f..42143625fa93 100644 --- a/src/lib_dac_node/configuration.mli +++ b/src/lib_dac_node/configuration.mli @@ -46,8 +46,7 @@ end module Committee_member : sig (** The type of a Committee_member specific configuration mode. *) type t = { - coordinator_rpc_address : string; - coordinator_rpc_port : int; + coordinator_rpc_address : Uri.t; address : Tezos_crypto.Aggregate_signature.public_key_hash; } end @@ -124,12 +123,13 @@ val mode_name : t -> string *) val make_coordinator : Tezos_crypto.Aggregate_signature.public_key list -> mode -(** [make_committee_member coordinator_rpc_address coordinator_rpc_port - committee_member_address] creates a new committee-member configuration - mode using the given address and port for the coordinator, and the given - [committee_member_address]. *) +(** [make_committee_member ~coordinator_rpc_address committee_member_address] + creates a new committee member configuration with [committee_member_address] + as the signer and [coordinator_rpc_address] as the coordinator. *) val make_committee_member : - string -> int -> Tezos_crypto.Aggregate_signature.public_key_hash -> mode + coordinator_rpc_address:Uri.t -> + Tezos_crypto.Aggregate_signature.public_key_hash -> + mode (** [make_observer committee_endpoints coordinator_rpc_address coordinator_rpc_port] creates a new observer configuration that sets the Data Availabiity Committee diff --git a/src/lib_dac_node/node_context.ml b/src/lib_dac_node/node_context.ml index 9f40e7e710d9..0b314f94d153 100644 --- a/src/lib_dac_node/node_context.ml +++ b/src/lib_dac_node/node_context.ml @@ -73,19 +73,13 @@ module Committee_member = struct let init committee_member_config cctxt = let open Lwt_result_syntax in - let Configuration.Committee_member. - {address; coordinator_rpc_address; coordinator_rpc_port} = + let Configuration.Committee_member.{address; coordinator_rpc_address} = committee_member_config in let+ committee_member = Wallet_account.Committee_member.of_committee_member_address address cctxt in - let coordinator_cctxt = - Dac_node_client.make_unix_cctxt - ~scheme:"http" - ~host:coordinator_rpc_address - ~port:coordinator_rpc_port - in + let coordinator_cctxt = Dac_node_client.of_uri coordinator_rpc_address in {committee_member; coordinator_cctxt} let secret_key_uri t = -- GitLab From 3e445277022b0993df0edb4e47f19215042d565b Mon Sep 17 00:00:00 2001 From: Ryan Tan Date: Tue, 4 Jul 2023 18:54:33 +0100 Subject: [PATCH 3/3] Dac: refactor observer config --- src/bin_dac_node/main_dac.ml | 13 ++++-- src/lib_dac_node/configuration.ml | 63 ++++++++++-------------------- src/lib_dac_node/configuration.mli | 19 ++++----- src/lib_dac_node/node_context.ml | 19 ++------- 4 files changed, 40 insertions(+), 74 deletions(-) diff --git a/src/bin_dac_node/main_dac.ml b/src/bin_dac_node/main_dac.ml index 430940a660df..fcc4547bc54f 100644 --- a/src/bin_dac_node/main_dac.ml +++ b/src/bin_dac_node/main_dac.ml @@ -363,9 +363,17 @@ module Config_init = struct experimental_disclaimer () ; let committee_rpc_addresses = List.map - (fun Parsed_rpc.{scheme = _; host; port} -> (host, port)) + (fun Parsed_rpc.{scheme; host; port} -> + Uri.make ~scheme ~host ~port ()) committee_rpc_addresses in + let coordinator_rpc_address = + Uri.make + ~scheme:coordinator_rpc_address.scheme + ~host:coordinator_rpc_address.host + ~port:coordinator_rpc_address.port + () + in create_configuration ~data_dir ~reveal_data_dir @@ -375,8 +383,7 @@ module Config_init = struct (Configuration.make_observer ~committee_rpc_addresses ?timeout - coordinator_rpc_address.host - coordinator_rpc_address.port) + coordinator_rpc_address) cctxt) let commands = diff --git a/src/lib_dac_node/configuration.ml b/src/lib_dac_node/configuration.ml index e9fad022c04e..9b02b8656060 100644 --- a/src/lib_dac_node/configuration.ml +++ b/src/lib_dac_node/configuration.ml @@ -97,53 +97,35 @@ end module Observer = struct type t = { - coordinator_rpc_address : string; - coordinator_rpc_port : int; - committee_rpc_addresses : (string * int) list; + coordinator_rpc_address : Uri.t; + committee_rpc_addresses : Uri.t list; timeout : int; } let default_timeout = 6 let make ~committee_rpc_addresses ?(timeout = default_timeout) - coordinator_rpc_address coordinator_rpc_port = - { - coordinator_rpc_address; - timeout; - coordinator_rpc_port; - committee_rpc_addresses; - } + coordinator_rpc_address = + {coordinator_rpc_address; timeout; committee_rpc_addresses} let encoding = Data_encoding.( conv - (fun { - coordinator_rpc_address; - coordinator_rpc_port; - committee_rpc_addresses; - timeout; - } -> - ( coordinator_rpc_address, - coordinator_rpc_port, - committee_rpc_addresses, - timeout )) - (fun ( coordinator_rpc_address, - coordinator_rpc_port, - committee_rpc_addresses, - timeout ) -> - { - coordinator_rpc_address; - coordinator_rpc_port; - committee_rpc_addresses; - timeout; - }) - (obj4 + (fun {coordinator_rpc_address; committee_rpc_addresses; timeout} -> + let coordinator_rpc_address = Uri.to_string coordinator_rpc_address in + let committee_rpc_addresses = + List.map Uri.to_string committee_rpc_addresses + in + (coordinator_rpc_address, committee_rpc_addresses, timeout)) + (fun (coordinator_rpc_address, committee_rpc_addresses, timeout) -> + let coordinator_rpc_address = Uri.of_string coordinator_rpc_address in + let committee_rpc_addresses = + List.map Uri.of_string committee_rpc_addresses + in + {coordinator_rpc_address; committee_rpc_addresses; timeout}) + (obj3 (req "coordinator_rpc_address" string) - (req "coordinator_rpc_port" uint16) - (req - "committee_rpc_addresses" - (Data_encoding.list - (obj2 (req "rpc_address" string) (req "rpc_port" uint16)))) + (req "committee_rpc_addresses" (Data_encoding.list string)) (req "timeout" Data_encoding.uint8))) let name = "Observer" @@ -233,14 +215,9 @@ let make_committee_member ~coordinator_rpc_address committee_member_address = Committee_member (Committee_member.make coordinator_rpc_address committee_member_address) -let make_observer ~committee_rpc_addresses ?timeout coordinator_rpc_address - coordinator_rpc_port = +let make_observer ~committee_rpc_addresses ?timeout coordinator_rpc_address = Observer - (Observer.make - ~committee_rpc_addresses - ?timeout - coordinator_rpc_address - coordinator_rpc_port) + (Observer.make ~committee_rpc_addresses ?timeout coordinator_rpc_address) let make_legacy ?coordinator_host_and_port threshold committee_members_addresses committee_member_address_opt = diff --git a/src/lib_dac_node/configuration.mli b/src/lib_dac_node/configuration.mli index 42143625fa93..4414551ed232 100644 --- a/src/lib_dac_node/configuration.mli +++ b/src/lib_dac_node/configuration.mli @@ -55,9 +55,8 @@ end module Observer : sig (** The type of an Observer specific configuration mode. *) type t = { - coordinator_rpc_address : string; - coordinator_rpc_port : int; - committee_rpc_addresses : (string * int) list; + coordinator_rpc_address : Uri.t; + committee_rpc_addresses : Uri.t list; timeout : int; } @@ -131,16 +130,12 @@ val make_committee_member : Tezos_crypto.Aggregate_signature.public_key_hash -> mode -(** [make_observer committee_endpoints coordinator_rpc_address coordinator_rpc_port] - creates a new observer configuration that sets the Data Availabiity Committee - endpoints to [committee_endpoints] and Coordinator endpoint to - [(coordinator_rpc_address * coordinator_rpc_port)] as the coordinator. *) +(** [make_observer ~committee_rpc_addresses ?timeout coordinator_rpc_address] + creates a new observer configuration that sets the DAC Committee + rpc addresses to [committee_rpc_addresses] and Coordinator endpoint to + [coordinator_rpc_address]. *) val make_observer : - committee_rpc_addresses:(string * int) list -> - ?timeout:int -> - string -> - int -> - mode + committee_rpc_addresses:Uri.t list -> ?timeout:int -> Uri.t -> mode (** [make_legacy ?coordinator_host_and_port threshold committee_members_addresses] diff --git a/src/lib_dac_node/node_context.ml b/src/lib_dac_node/node_context.ml index 0b314f94d153..b6bec685b629 100644 --- a/src/lib_dac_node/node_context.ml +++ b/src/lib_dac_node/node_context.ml @@ -99,25 +99,12 @@ module Observer = struct let init observer_config = let open Lwt_result_syntax in let Configuration.Observer. - { - coordinator_rpc_address; - coordinator_rpc_port; - committee_rpc_addresses; - timeout; - } = + {coordinator_rpc_address; committee_rpc_addresses; timeout} = observer_config in - let coordinator_cctxt = - Dac_node_client.make_unix_cctxt - ~scheme:"http" - ~host:coordinator_rpc_address - ~port:coordinator_rpc_port - in + let coordinator_cctxt = Dac_node_client.of_uri coordinator_rpc_address in let committee_cctxts = - List.map - (fun (host, port) -> - Dac_node_client.make_unix_cctxt ~scheme:"http" ~host ~port) - committee_rpc_addresses + List.map Dac_node_client.of_uri committee_rpc_addresses in return {coordinator_cctxt; committee_cctxts; timeout} end -- GitLab