From d1cb0fe7042e66ee205525c2b123c54c6c2857d8 Mon Sep 17 00:00:00 2001 From: Valentin Chaboche Date: Thu, 14 Sep 2023 09:47:12 +0200 Subject: [PATCH] EVM/Proxy: verbose mode --- src/bin_evm_proxy/evm_proxy.ml | 26 +++++++++++++++++++------- src/bin_evm_proxy/lib_dev/services.ml | 22 +++++++++++++++------- src/kernel_evm/CHANGES.md | 3 ++- 3 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/bin_evm_proxy/evm_proxy.ml b/src/bin_evm_proxy/evm_proxy.ml index a53ef0866fa7..59d799128838 100644 --- a/src/bin_evm_proxy/evm_proxy.ml +++ b/src/bin_evm_proxy/evm_proxy.ml @@ -37,6 +37,7 @@ type config = { mode : mode; cors_origins : string list; cors_headers : string list; + verbose : bool; } let default_config = @@ -48,10 +49,11 @@ let default_config = mode = Prod; cors_origins = []; cors_headers = []; + verbose = false; } let make_config ?mode ?rpc_addr ?rpc_port ?debug ?cors_origins ?cors_headers - ~rollup_node_endpoint () = + ~rollup_node_endpoint ~verbose () = { rpc_addr = Option.value ~default:default_config.rpc_addr rpc_addr; rpc_port = Option.value ~default:default_config.rpc_port rpc_port; @@ -62,6 +64,7 @@ let make_config ?mode ?rpc_addr ?rpc_port ?debug ?cors_origins ?cors_headers Option.value ~default:default_config.cors_origins cors_origins; cors_headers = Option.value ~default:default_config.cors_headers cors_headers; + verbose; } let install_finalizer server = @@ -121,7 +124,7 @@ let prod_directory ~rollup_node_endpoint = in return @@ Services.directory rollup_node_config -let dev_directory ~rollup_node_endpoint = +let dev_directory ~verbose ~rollup_node_endpoint = let open Lwt_result_syntax in let open Evm_proxy_lib_dev in let* rollup_node_config = @@ -136,7 +139,7 @@ let dev_directory ~rollup_node_endpoint = let* smart_rollup_address = Mockup.smart_rollup_address in return ((module Mockup : Rollup_node.S), smart_rollup_address) in - return @@ Services.directory rollup_node_config + return @@ Services.directory ~verbose rollup_node_config let start {rpc_addr; rpc_port; debug; cors_origins; cors_headers; _} ~directory = @@ -239,6 +242,13 @@ let mode_arg = ~doc:"The EVM proxy server mode, it's either prod or dev." Params.mode +let verbose_arg = + Tezos_clic.switch + ~short:'v' + ~long:"verbose" + ~doc:"If verbose is set, the proxy will display the responses to RPCs." + () + let rollup_node_endpoint_param = Tezos_clic.param ~name:"rollup-node-endpoint" @@ -280,14 +290,15 @@ let main_command = let open Lwt_result_syntax in command ~desc:"Start the RPC server" - (args5 + (args6 mode_arg rpc_addr_arg rpc_port_arg cors_allowed_origins_arg - cors_allowed_headers_arg) + cors_allowed_headers_arg + verbose_arg) (prefixes ["run"; "with"; "endpoint"] @@ rollup_node_endpoint_param @@ stop) - (fun (mode, rpc_addr, rpc_port, cors_origins, cors_headers) + (fun (mode, rpc_addr, rpc_port, cors_origins, cors_headers, verbose) rollup_node_endpoint () -> let*! () = Tezos_base_unix.Internal_event_unix.init () in @@ -300,12 +311,13 @@ let main_command = ?cors_origins ?cors_headers ~rollup_node_endpoint + ~verbose () in let* directory = match config.mode with | Prod -> prod_directory ~rollup_node_endpoint - | Dev -> dev_directory ~rollup_node_endpoint + | Dev -> dev_directory ~verbose:config.verbose ~rollup_node_endpoint in let* server = start config ~directory in let (_ : Lwt_exit.clean_up_callback_id) = install_finalizer server in diff --git a/src/bin_evm_proxy/lib_dev/services.ml b/src/bin_evm_proxy/lib_dev/services.ml index 6262627bd2aa..08c55ab39de2 100644 --- a/src/bin_evm_proxy/lib_dev/services.ml +++ b/src/bin_evm_proxy/lib_dev/services.ml @@ -95,7 +95,7 @@ let get_transaction_from_index block index | Some hash -> Rollup_node_rpc.transaction_object hash) | TxFull l -> return @@ List.nth_opt l index -let dispatch_input +let dispatch_input ~verbose ((module Rollup_node_rpc : Rollup_node.S), smart_rollup_address) (input, id) = let open Lwt_result_syntax in @@ -221,19 +221,27 @@ let dispatch_input return (Web3_clientVersion.Output (Ok client_version)) | _ -> Error_monad.failwith "Unsupported method\n%!" in - return (output, id) -let dispatch ctx dir = + let response = (output, id) in + if verbose then + Data_encoding.Json.construct Output.encoding response + |> Data_encoding.Json.to_string |> Printf.printf "%s\n%!" ; + return response + +let dispatch ~verbose ctx dir = Directory.register0 dir dispatch_service (fun () input -> let open Lwt_result_syntax in match input with | Singleton input -> - let+ output = dispatch_input ctx input in + let+ output = dispatch_input ~verbose ctx input in Singleton output | Batch inputs -> - let+ outputs = List.map_es (dispatch_input ctx) inputs in + let+ outputs = List.map_es (dispatch_input ~verbose ctx) inputs in Batch outputs) -let directory ((module Rollup_node_rpc : Rollup_node.S), smart_rollup_address) = +let directory ~verbose + ((module Rollup_node_rpc : Rollup_node.S), smart_rollup_address) = Directory.empty |> version - |> dispatch ((module Rollup_node_rpc : Rollup_node.S), smart_rollup_address) + |> dispatch + ~verbose + ((module Rollup_node_rpc : Rollup_node.S), smart_rollup_address) diff --git a/src/kernel_evm/CHANGES.md b/src/kernel_evm/CHANGES.md index fa8d5a78ca43..d1131607fa96 100644 --- a/src/kernel_evm/CHANGES.md +++ b/src/kernel_evm/CHANGES.md @@ -26,7 +26,8 @@ simulations. (!9664) - Add support for `eth_getBlockByHash`. (!10061) - Add support for `eth_getTransactionByBlockHashAndIndex` and `eth_getTransactionByBlockNumberAndIndex`. (!10068) - +- Add an optional `--verbose` argument. Displays the responses to requests before + returning them. (!10116) ### Bug fixes -- GitLab