diff --git a/etherlink/kernel_evm/Cargo.lock b/etherlink/kernel_evm/Cargo.lock index 9631ee1fbdac325bb942906e0545889bdee12f8a..5e31350eff0126f7ada86b53e5d416f04fa734c1 100644 --- a/etherlink/kernel_evm/Cargo.lock +++ b/etherlink/kernel_evm/Cargo.lock @@ -2220,6 +2220,8 @@ dependencies = [ name = "tezos-evm-logging" version = "0.1.0" dependencies = [ + "num-derive", + "num-traits", "tezos-smart-rollup-debug", ] @@ -2228,6 +2230,7 @@ name = "tezos-evm-runtime" version = "0.1.0" dependencies = [ "sha3", + "tezos-evm-logging", "tezos-smart-rollup-core", "tezos-smart-rollup-debug", "tezos-smart-rollup-encoding", diff --git a/etherlink/kernel_evm/evm_evaluation/src/evalhost.rs b/etherlink/kernel_evm/evm_evaluation/src/evalhost.rs index 0ae2f6876fbcb99994c13b1a2af656d0aebf5b13..d05bc1f4f02c05af6dc114f7d882e9bd2d5fb755 100644 --- a/etherlink/kernel_evm/evm_evaluation/src/evalhost.rs +++ b/etherlink/kernel_evm/evm_evaluation/src/evalhost.rs @@ -4,6 +4,7 @@ use std::{cell::RefCell, io::Write}; +use tezos_evm_logging::Verbosity; use tezos_evm_runtime::{ internal_runtime::{ExtendedRuntime, InternalRuntime}, runtime::MockKernelHost, @@ -217,3 +218,9 @@ impl ExtendedRuntime for EvalHost { self.host.store_get_hash(path) } } + +impl Verbosity for EvalHost { + fn verbosity(&self) -> tezos_evm_logging::Level { + self.host.verbosity() + } +} diff --git a/etherlink/kernel_evm/kernel/src/block.rs b/etherlink/kernel_evm/kernel/src/block.rs index db76e69ed8481e91453c069d7adc775b3237498f..1d3e53687255308a2cf5deac687cd5faaaa4c22a 100644 --- a/etherlink/kernel_evm/kernel/src/block.rs +++ b/etherlink/kernel_evm/kernel/src/block.rs @@ -29,7 +29,7 @@ use evm_execution::trace::TracerInput; use primitive_types::{H160, H256, U256}; use tezos_ethereum::block::BlockFees; use tezos_ethereum::transaction::TransactionHash; -use tezos_evm_logging::{log, Level::*}; +use tezos_evm_logging::{log, Level::*, Verbosity}; use tezos_evm_runtime::runtime::Runtime; use tezos_evm_runtime::safe_storage::SafeStorage; use tezos_smart_rollup::outbox::OutboxQueue; diff --git a/etherlink/kernel_evm/kernel/src/evm_node_entrypoint.rs b/etherlink/kernel_evm/kernel/src/evm_node_entrypoint.rs index ece244b1f1a3a6271a2a198639a3622087dc552c..9dc4045d4cf039f0f6e7105c099708e40fe01e1e 100644 --- a/etherlink/kernel_evm/kernel/src/evm_node_entrypoint.rs +++ b/etherlink/kernel_evm/kernel/src/evm_node_entrypoint.rs @@ -12,6 +12,7 @@ use std::marker::PhantomData; use crate::{delayed_inbox::DelayedInbox, inbox::Transaction}; use tezos_ethereum::rlp_helpers::FromRlpBytes; +use tezos_evm_logging::Level; use tezos_evm_runtime::{internal_runtime::InternalHost, runtime::KernelHost}; use tezos_smart_rollup_core::rollup_host::RollupHost; use tezos_smart_rollup_host::{path::RefPath, runtime::Runtime}; @@ -27,6 +28,7 @@ pub extern "C" fn populate_delayed_inbox() { host: sdk_host, internal, _pd: PhantomData, + logs_verbosity: Level::default(), }; let payload = host.store_read_all(&DELAYED_INPUT_PATH).unwrap(); let transaction = Transaction::from_rlp_bytes(&payload).unwrap(); diff --git a/etherlink/kernel_evm/kernel/src/lib.rs b/etherlink/kernel_evm/kernel/src/lib.rs index 3bff17485ace9302bac9cfa4532f1525ae21293f..3c4ffe7768581ba0bb57ea1c677bac145097caae 100644 --- a/etherlink/kernel_evm/kernel/src/lib.rs +++ b/etherlink/kernel_evm/kernel/src/lib.rs @@ -30,7 +30,11 @@ use storage::{ }; use tezos_crypto_rs::hash::ContractKt1Hash; use tezos_ethereum::block::BlockFees; -use tezos_evm_logging::{log, Level::*}; +use tezos_evm_logging::{ + log, + Level::{self, *}, + Verbosity, +}; use tezos_evm_runtime::runtime::{KernelHost, Runtime}; use tezos_evm_runtime::safe_storage::WORLD_STATE_PATH; use tezos_smart_rollup::entrypoint; @@ -320,6 +324,7 @@ pub fn kernel_loop(host: &mut H let mut host = KernelHost { host, internal: internal_storage, + logs_verbosity: Level::default(), _pd: PhantomData::, }; diff --git a/etherlink/kernel_evm/logging/Cargo.toml b/etherlink/kernel_evm/logging/Cargo.toml index 46a29094511e1d41ddd4da2cb085447986b6de55..c0851ce37376d73b6161d9b83a5cbfe89ae5cbbb 100644 --- a/etherlink/kernel_evm/logging/Cargo.toml +++ b/etherlink/kernel_evm/logging/Cargo.toml @@ -9,10 +9,12 @@ edition = "2021" license = "MIT" [dependencies] +num-traits.workspace = true +num-derive.workspace = true tezos-smart-rollup-debug.workspace = true [features] default = ["alloc"] alloc = [] debug = [] -benchmark = [] \ No newline at end of file +benchmark = [] diff --git a/etherlink/kernel_evm/logging/src/lib.rs b/etherlink/kernel_evm/logging/src/lib.rs index a9176040cdaf32ba12607529f1ab739fbfe5927a..e15255dab31b8c1b6ad78adc36468be552fc9b13 100644 --- a/etherlink/kernel_evm/logging/src/lib.rs +++ b/etherlink/kernel_evm/logging/src/lib.rs @@ -5,15 +5,38 @@ #[doc(hidden)] pub use tezos_smart_rollup_debug::debug_str; -#[derive(PartialEq)] +use num_derive::FromPrimitive; +use num_traits::FromPrimitive; + +#[repr(u8)] +#[derive(PartialEq, Clone, Copy, PartialOrd, FromPrimitive)] pub enum Level { - Info, + Fatal = 0, Error, - Fatal, + Info, Debug, Benchmarking, } +impl TryFrom for Level { + type Error = (); + fn try_from(value: u8) -> Result { + FromPrimitive::from_u8(value).ok_or(()) + } +} + +impl Default for Level { + fn default() -> Self { + if cfg!(feature = "debug") { + Self::Debug + } else if cfg!(feature = "benchmark") { + Self::Benchmarking + } else { + Self::Info + } + } +} + impl std::fmt::Display for Level { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match &self { @@ -26,33 +49,17 @@ impl std::fmt::Display for Level { } } +pub trait Verbosity { + fn verbosity(&self) -> Level; +} + #[cfg(feature = "alloc")] #[macro_export] macro_rules! log { ($host: expr, $level: expr, $fmt: expr $(, $arg:expr)*) => { - match $level { - $crate::Level::Debug => { - #[cfg(not(feature = "debug"))] - {} - #[cfg(feature = "debug")] - { - let msg = format!("[{}] {}\n", $level, format_args!($fmt $(, $arg)*)); - $crate::debug_str!($host, &msg); - } - } - $crate::Level::Benchmarking => { - #[cfg(not(feature = "benchmark"))] - {} - #[cfg(feature = "benchmark")] - { - let msg = format!("[{}] {}\n", $level, format_args!($fmt $(, $arg)*)); - $crate::debug_str!($host, &msg); - } - } - $crate::Level::Info | $crate::Level::Error | $crate::Level::Fatal => { - let msg = format!("[{}] {}\n", $level, format_args!($fmt $(, $arg)*)); - $crate::debug_str!($host, &msg); - } + if $host.verbosity() >= $level { + let msg = format!("[{}] {}\n", $level, format_args!($fmt $(, $arg)*)); + $crate::debug_str!($host, &msg); } }; } diff --git a/etherlink/kernel_evm/runtime/Cargo.toml b/etherlink/kernel_evm/runtime/Cargo.toml index a2b28231d6e02715355b3ec55d2bde9878cc9f28..7a89c30ec8c18bd9c491cda389e55696727ae8e2 100644 --- a/etherlink/kernel_evm/runtime/Cargo.toml +++ b/etherlink/kernel_evm/runtime/Cargo.toml @@ -13,6 +13,7 @@ tezos-smart-rollup-core.workspace = true tezos-smart-rollup-host.workspace = true tezos-smart-rollup-mock.workspace = true tezos-smart-rollup-encoding.workspace = true +tezos-evm-logging.workspace = true sha3.workspace = true [dev-dependencies] diff --git a/etherlink/kernel_evm/runtime/src/runtime.rs b/etherlink/kernel_evm/runtime/src/runtime.rs index ebb683d969a771b90a819e5e0b6d5b69fbe9a915..0372970b5a6ab8c27f0b35df176f3abc72dea896 100644 --- a/etherlink/kernel_evm/runtime/src/runtime.rs +++ b/etherlink/kernel_evm/runtime/src/runtime.rs @@ -17,6 +17,7 @@ use crate::{ internal_runtime::{ExtendedRuntime, InternalRuntime}, mock_internal::MockInternal, }; +use tezos_evm_logging::{Level, Verbosity}; use tezos_smart_rollup_core::PREIMAGE_HASH_SIZE; use tezos_smart_rollup_encoding::smart_rollup::SmartRollupAddress; use tezos_smart_rollup_host::{ @@ -28,11 +29,11 @@ use tezos_smart_rollup_host::{ }; use tezos_smart_rollup_mock::MockHost; -pub trait Runtime: SdkRuntime + InternalRuntime + ExtendedRuntime {} +pub trait Runtime: SdkRuntime + InternalRuntime + ExtendedRuntime + Verbosity {} // If a type implements the Runtime, InternalRuntime and ExtendedRuntime traits, // it also implements the kernel Runtime. -impl Runtime for T {} +impl Runtime for T {} // This type has two interesting parts: // 1. Host: BorrowMut + Borrow @@ -53,6 +54,7 @@ impl Runtime for T {} pub struct KernelHost + Borrow, Internal> { pub host: Host, pub internal: Internal, + pub logs_verbosity: Level, pub _pd: PhantomData, } @@ -259,11 +261,20 @@ where KernelHost { host: &mut self.host, internal: &mut self.internal, + logs_verbosity: self.logs_verbosity, _pd: PhantomData, } } } +impl + Borrow, Internal: InternalRuntime> Verbosity + for KernelHost +{ + fn verbosity(&self) -> Level { + self.logs_verbosity + } +} + pub type MockKernelHost = KernelHost; impl Default for MockKernelHost { @@ -271,6 +282,7 @@ impl Default for MockKernelHost { Self { host: MockHost::default(), internal: MockInternal(), + logs_verbosity: Level::default(), _pd: PhantomData, } } @@ -283,6 +295,7 @@ impl MockKernelHost { KernelHost { host, internal, + logs_verbosity: Level::default(), _pd: PhantomData, } } diff --git a/etherlink/kernel_evm/runtime/src/safe_storage.rs b/etherlink/kernel_evm/runtime/src/safe_storage.rs index bce9d0ac6af8d42b7ee14525ac0dec75f172c758..2d0573aeae3566ebbbc80c3e7adf0a1ddac02663 100644 --- a/etherlink/kernel_evm/runtime/src/safe_storage.rs +++ b/etherlink/kernel_evm/runtime/src/safe_storage.rs @@ -7,6 +7,7 @@ use crate::internal_runtime::{ExtendedRuntime, InternalRuntime}; use crate::runtime::Runtime; +use tezos_evm_logging::Verbosity; use tezos_smart_rollup_core::PREIMAGE_HASH_SIZE; use tezos_smart_rollup_host::dal_parameters::RollupDalParameters; use tezos_smart_rollup_host::{ @@ -226,6 +227,12 @@ impl SdkRuntime for SafeStorage<&mut Host> { } } +impl Verbosity for SafeStorage<&mut Host> { + fn verbosity(&self) -> tezos_evm_logging::Level { + self.host.verbosity() + } +} + impl SafeStorage<&mut Host> { pub fn start(&mut self) -> Result<(), RuntimeError> { self.host