diff --git a/etherlink/CHANGES_NODE.md b/etherlink/CHANGES_NODE.md index 0cb8af5615e0c142604102947fc0186e812646c5..5cb9f11d50db9908c6f6bf747f080c394105dc43 100644 --- a/etherlink/CHANGES_NODE.md +++ b/etherlink/CHANGES_NODE.md @@ -10,6 +10,13 @@ ### Metrics changes +### Command-line interface changes + +- Adds `--kernel-verbosity` to `run sandbox` to control the level of logs + emitted by the kernel. Note that printing kernel logs to the standard output + still requires to set the `RUST_LOG` environment variable to + `octez_evm_node_wasm_runtime::write_debug=trace`. (!17909) + ### Execution changes ### Storage changes diff --git a/etherlink/bin_node/lib_dev/durable_storage_path.ml b/etherlink/bin_node/lib_dev/durable_storage_path.ml index d61fee12a473f06771c5bb2a8cbe24926e23d3e2..443f50e26a362929e6258f77435545ac8cf88749 100644 --- a/etherlink/bin_node/lib_dev/durable_storage_path.ml +++ b/etherlink/bin_node/lib_dev/durable_storage_path.ml @@ -36,6 +36,8 @@ let da_fee_per_byte = World_state.make "/fees/da_fee_per_byte" let kernel_version = EVM.make "/kernel_version" +let kernel_verbosity = EVM.make "/logging_verbosity" + let storage_version = EVM.make "/storage_version" let kernel_root_hash = EVM.make "/kernel_root_hash" diff --git a/etherlink/bin_node/lib_dev/durable_storage_path.mli b/etherlink/bin_node/lib_dev/durable_storage_path.mli index 7c7d48b2c55c17878776fac093b84f0d24706691..dd9db51fe5dbf0db2f8884b09d1d087807933488 100644 --- a/etherlink/bin_node/lib_dev/durable_storage_path.mli +++ b/etherlink/bin_node/lib_dev/durable_storage_path.mli @@ -24,6 +24,8 @@ val da_fee_per_byte : path val kernel_version : path +val kernel_verbosity : path + val storage_version : path val kernel_root_hash : path diff --git a/etherlink/bin_node/lib_dev/events.ml b/etherlink/bin_node/lib_dev/events.ml index 3e46667702d9f4b95332b4371bb9246b3b1f4cc0..c8636142d9ff4868f605821f2d5711b27501f34e 100644 --- a/etherlink/bin_node/lib_dev/events.ml +++ b/etherlink/bin_node/lib_dev/events.ml @@ -216,6 +216,15 @@ type kernel_log_kind = Application | Simulation type kernel_log_level = Debug | Info | Error | Fatal +let string_from_kernel_log_level level = + let level_verbosity = + match level with Debug -> 3 | Info -> 2 | Error -> 1 | Fatal -> 0 + in + let value = Bytes.make 1 '\000' in + Bytes.set_uint8 value 0 level_verbosity ; + (* Safe because the initial pointer to the bytes is lost *) + Bytes.unsafe_to_string value + let kernel_log_kind_to_string = function | Application -> "application" | Simulation -> "simulation" diff --git a/etherlink/bin_node/lib_dev/events.mli b/etherlink/bin_node/lib_dev/events.mli index 59e46931ae0c4024f3f0e60def00ac47d2e7947f..3089a956074365809a3c411168c3dc75f4dd3708 100644 --- a/etherlink/bin_node/lib_dev/events.mli +++ b/etherlink/bin_node/lib_dev/events.mli @@ -94,6 +94,8 @@ type kernel_log_kind = Application | Simulation type kernel_log_level = Debug | Info | Error | Fatal +val string_from_kernel_log_level : kernel_log_level -> string + (** Logs kernel log [Debug]. *) val event_kernel_log : level:kernel_log_level -> kind:kernel_log_kind -> msg:string -> unit Lwt.t diff --git a/etherlink/bin_node/lib_dev/replay.ml b/etherlink/bin_node/lib_dev/replay.ml index 8a85467083aa183d4f455a6d2f2ea1682c75bcea..e96099315e3b66bb527bb462e5e0d673ad91b487 100644 --- a/etherlink/bin_node/lib_dev/replay.ml +++ b/etherlink/bin_node/lib_dev/replay.ml @@ -22,20 +22,12 @@ let patch_kernel ~kernel evm_state = in return evm_state -let level_verbosity = function - | Events.Debug -> 3 - | Info -> 2 - | Error -> 1 - | Fatal -> 0 - let patch_verbosity ~kernel_verbosity evm_state = let open Lwt_result_syntax in - let value = Bytes.make 1 '\000' in - Bytes.set_uint8 value 0 (level_verbosity kernel_verbosity) ; let*! evm_state = Evm_state.modify - ~key:"/evm/logging_verbosity" - ~value:(Bytes.to_string value) + ~key:Durable_storage_path.kernel_verbosity + ~value:(Events.string_from_kernel_log_level kernel_verbosity) evm_state in return evm_state diff --git a/etherlink/bin_node/lib_dev/sequencer.ml b/etherlink/bin_node/lib_dev/sequencer.ml index 9775f3c0e3c1d5866b151a841de209be2a655215..e9721e084cdefad4c4c1b6bf61563aae57219770 100644 --- a/etherlink/bin_node/lib_dev/sequencer.ml +++ b/etherlink/bin_node/lib_dev/sequencer.ml @@ -14,6 +14,7 @@ type sandbox_config = { funded_addresses : Ethereum_types.address list; parent_chain : Uri.t option; disable_da_fees : bool; + kernel_verbosity : Events.kernel_log_level option; } let install_finalizer_seq server_public_finalizer server_private_finalizer @@ -151,7 +152,14 @@ let main ~data_dir ?(genesis_timestamp = Misc.now ()) ~cctxt let smart_rollup_address_b58 = Address.to_string smart_rollup_address_typed in let* () = match sandbox_config with - | Some {public_key = pk; funded_addresses; disable_da_fees; _} -> + | Some + { + public_key = pk; + funded_addresses; + disable_da_fees; + kernel_verbosity; + _; + } -> let* () = Evm_context.patch_sequencer_key pk in let new_balance = Ethereum_types.quantity_of_z Z.(of_int 10_000 * pow (of_int 10) 18) @@ -178,6 +186,15 @@ let main ~data_dir ?(genesis_timestamp = Misc.now ()) ~cctxt | _ -> return_unit) kernel in + let* () = + Option.iter_es + (fun kernel_verbosity -> + Evm_context.patch_state + ~key:Durable_storage_path.kernel_verbosity + ~value:(Events.string_from_kernel_log_level kernel_verbosity) + ()) + kernel_verbosity + in let* () = when_ disable_da_fees @@ fun () -> Evm_context.patch_state diff --git a/etherlink/bin_node/main.ml b/etherlink/bin_node/main.ml index d64ce0662ceac1507faecfa4f50b4f85f7e33c55..cd7ddf218539b0f1a3266de986de3e492062fb23 100644 --- a/etherlink/bin_node/main.ml +++ b/etherlink/bin_node/main.ml @@ -2283,7 +2283,7 @@ let fund_arg = Tezos_clic.multiple_arg ~long ~doc ~placeholder:"0x..." Params.eth_address let sandbox_config_args = - Tezos_clic.args15 + Tezos_clic.args16 preimages_arg preimages_endpoint_arg native_execution_policy_arg @@ -2299,6 +2299,7 @@ let sandbox_config_args = fund_arg replicate_arg disable_da_fees_arg + kernel_verbosity_arg let sequencer_command = let open Tezos_clic in @@ -2427,7 +2428,8 @@ let sandbox_command = init_from_snapshot, funded_addresses, main_endpoint, - disable_da_fees ) ) + disable_da_fees, + kernel_verbosity ) ) () -> let open Lwt_result_syntax in let* restricted_rpcs = @@ -2462,6 +2464,7 @@ let sandbox_command = funded_addresses = Option.value ~default:[] funded_addresses; parent_chain; disable_da_fees; + kernel_verbosity; } in let config_file = config_filename ~data_dir config_file in diff --git a/etherlink/tezt/tests/expected/evm_sequencer.ml/EVM Node- man.out b/etherlink/tezt/tests/expected/evm_sequencer.ml/EVM Node- man.out index 1b073069b34d40ecb320ed089b3917cc35bb4530..be842b4c576b86048d6a140d3bb35cbb8a6731f0 100644 --- a/etherlink/tezt/tests/expected/evm_sequencer.ml/EVM Node- man.out +++ b/etherlink/tezt/tests/expected/evm_sequencer.ml/EVM Node- man.out @@ -47,7 +47,7 @@ Run commands: [--kernel ] [-d --wallet-dir ] [-f --password-filename ] [--network ] [--init-from-snapshot [snapshot url]] [--fund <0x...>] - [--replicate [url]] [--disable-da-fees] + [--replicate [url]] [--disable-da-fees] [--kernel-verbosity ] Start the EVM node in sandbox mode. The sandbox mode is a sequencer-like mode that produces blocks with a fake key and no rollup node connection. --data-dir : The path to the EVM node data directory. @@ -130,6 +130,8 @@ Run commands: address is provided. Defaults to `the official relay endpoint if --network is used`. --disable-da-fees: Disable DA fees for this replay. + --kernel-verbosity : Sets kernel's logging verbosity, either + `fatal`, `error`, `info`, `debug`. run proxy [--data-dir ] [--config-file ] [--rpc-addr ] [--rpc-port ] [--rpc-batch-limit ]