Skip to content

Commit 8dfed5b

Browse files
author
Marge Bot
committed
Merge tezos/tezos!15269: EVM Node: Add logging to the WASM Runtime
Co-authored-by: Thomas Letan <[email protected]> Approved-by: Alain Mebsout <[email protected]> Approved-by: Sylvain R. <[email protected]> See merge request https://gitlab.com/tezos/tezos/-/merge_requests/15269
2 parents 811ef79 + 79d85fc commit 8dfed5b

File tree

13 files changed

+204
-17
lines changed

13 files changed

+204
-17
lines changed

etherlink/bin_node/lib_dev/wasm_runtime.ml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@
55
(* *)
66
(*****************************************************************************)
77

8-
let static_context = Evm_node_wasm_runtime.wasm_runtime_new_context ()
8+
open Evm_node_wasm_runtime
9+
10+
let () = wasm_runtime_logger_init ()
11+
12+
let static_context = wasm_runtime_new_context ()
913

1014
module Shared_inbox : sig
1115
(** [wrap inbox] encapsulates [inbox] between [sol; ipl] and [eol]. These
@@ -41,7 +45,7 @@ let run ~preimages_dir ?preimages_endpoint ~entrypoint tree rollup_address inbox
4145
: Irmin_context.tree Lwt.t =
4246
Lwt_preemptive.detach
4347
(fun () ->
44-
Evm_node_wasm_runtime.wasm_runtime_run
48+
wasm_runtime_run
4549
~preimages_dir
4650
?preimages_endpoint:(Option.map Uri.to_string preimages_endpoint)
4751
~entrypoint

src/lib_wasm_runtime/Cargo.lock

Lines changed: 98 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/lib_wasm_runtime/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,5 @@ ocaml = { version = "1.*" }
1313
wasmer = { path = "../../src/rust_deps/wasmer-3.3.0/lib/api", default-features = false, features = ["cranelift", "jit"] }
1414
wasmer-compiler-cranelift = { path = "../../src/rust_deps/wasmer-3.3.0/lib/compiler-cranelift" }
1515
tezos_crypto_rs = { version = "0.6", default-features = false }
16+
log = "0.4"
17+
env_logger = "0.11"

src/lib_wasm_runtime/ocaml-api/evm_node_wasm_runtime.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,5 @@ val wasm_runtime_run :
2121
Irmin_context.tree
2222

2323
val wasm_runtime_preload_kernel : context -> Irmin_context.tree -> unit
24+
25+
val wasm_runtime_logger_init : unit -> unit

src/lib_wasm_runtime/ocaml-api/wasm_runtime_gen.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ open! Bigarray
55
(* file: api.rs *)
66

77
type context
8+
external wasm_runtime_logger_init: unit -> unit = "wasm_runtime_logger_init"
89
external wasm_runtime_new_context: unit -> context = "wasm_runtime_new_context"
910
external wasm_runtime_run: context -> string -> string option -> string -> Irmin_context.tree -> bytes -> int32 -> string list -> Irmin_context.tree = "wasm_runtime_run_bytecode" "wasm_runtime_run"
1011
external wasm_runtime_preload_kernel: context -> Irmin_context.tree -> unit = "wasm_runtime_preload_kernel"

src/lib_wasm_runtime/ocaml-api/wasm_runtime_gen.mli

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ open! Bigarray
55
(* file: api.rs *)
66

77
type context
8+
external wasm_runtime_logger_init: unit -> unit = "wasm_runtime_logger_init"
89
external wasm_runtime_new_context: unit -> context = "wasm_runtime_new_context"
910
external wasm_runtime_run: context -> string -> string option -> string -> Irmin_context.tree -> bytes -> int32 -> string list -> Irmin_context.tree = "wasm_runtime_run_bytecode" "wasm_runtime_run"
1011
external wasm_runtime_preload_kernel: context -> Irmin_context.tree -> unit = "wasm_runtime_preload_kernel"

src/lib_wasm_runtime/src/api.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use crate::{
88
runtime::{self, InputsBuffer, RunStatus},
99
types::{ContextHash, EvmTree, OCamlString, SmartRollupAddress},
1010
};
11+
use log::trace;
1112
use ocaml::{Error, List, Pointer, Value};
1213
use std::collections::BTreeMap;
1314
use wasmer::{Engine, Features, Module, NativeEngineExt, Store, Target};
@@ -50,6 +51,7 @@ impl KernelsCache {
5051
let hash = bindings::store_get_hash(evm_tree, &KERNEL_PATH)?;
5152

5253
if self.miss(&hash) {
54+
trace!("KernelsCache::load cache miss");
5355
let code = bindings::read_value(&evm_tree, KERNEL_PATH)?;
5456
let kernel = Kernel::new(engine, code.as_bytes())?;
5557
let _previous = self.insert(&hash, kernel);
@@ -91,6 +93,12 @@ impl Context {
9193
}
9294
}
9395

96+
#[ocaml::func]
97+
#[ocaml::sig("unit -> unit")]
98+
pub fn wasm_runtime_logger_init() {
99+
env_logger::init();
100+
}
101+
94102
#[ocaml::func]
95103
#[ocaml::sig("unit -> context")]
96104
pub fn wasm_runtime_new_context() -> Pointer<Context> {

src/lib_wasm_runtime/src/host.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
66
use std::collections::VecDeque;
77

8+
use log::{debug, error, info, warn};
89
use ocaml::Error;
910

1011
use crate::{
1112
bindings,
1213
types::{EvmTree, OCamlString, SmartRollupAddress},
14+
write_debug::write_debug,
1315
};
1416

1517
#[derive(Clone)]
@@ -106,7 +108,7 @@ impl Host {
106108
}
107109

108110
pub fn write_debug(&self, msg: &[u8]) {
109-
print!("{}", String::from_utf8_lossy(msg))
111+
write_debug(msg)
110112
}
111113

112114
pub fn next_input(&mut self) -> Option<Input> {

src/lib_wasm_runtime/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ mod bindings;
55
mod host;
66
mod runtime;
77
mod types;
8+
mod write_debug;

src/lib_wasm_runtime/src/runtime/host_funcs.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
66
use std::{fs, path::PathBuf};
77

8-
use crate::bindings::{self, BindingsError};
8+
use crate::bindings::{self, BindingsError, Key};
99

1010
use super::env::Env;
11+
use log::trace;
1112
use tezos_crypto_rs::blake2b;
1213
use wasmer::{
1314
imports, AsStoreRef, Function, FunctionEnv, FunctionEnvMut, Imports, MemoryView, RuntimeError,
@@ -85,6 +86,7 @@ fn write_output(_env: FunctionEnvMut<Env>, _ptr: u32, length: u32) -> i32 {
8586
}
8687

8788
fn read_input(mut env: FunctionEnvMut<Env>, info_addr: u32, dst: u32, max_bytes: u32) -> i32 {
89+
trace!("read_input");
8890
let (runtime_env, store) = env.data_and_store_mut();
8991

9092
match runtime_env.mut_host().next_input() {
@@ -117,6 +119,7 @@ fn store_exists(env: FunctionEnvMut<Env>, key_ptr: u32, key_len: u32) -> Result<
117119
let memory_view = memory.view(&store);
118120

119121
let key = read_from_memory(&memory_view, key_ptr, key_len)?;
122+
trace!("store_exists({})", key.as_str());
120123

121124
match bindings::mem_tree(&runtime_env.host().tree(), key) {
122125
Ok(true) => Ok(1),
@@ -132,6 +135,7 @@ fn store_has(env: FunctionEnvMut<Env>, key_ptr: u32, key_len: u32) -> Result<i32
132135
let memory_view = memory.view(&store);
133136

134137
let key = read_from_memory(&memory_view, key_ptr, key_len)?;
138+
trace!("store_has({})", key.as_str());
135139

136140
match bindings::store_has(&runtime_env.host().tree(), key) {
137141
Ok(i) => Ok(i as i32),
@@ -149,6 +153,7 @@ fn store_delete(
149153
let memory_view = memory.view(&store);
150154

151155
let key = read_from_memory(&memory_view, key_ptr, key_len)?;
156+
trace!("store_delete({})", key.as_str());
152157

153158
match bindings::store_delete(&runtime_env.host().tree(), key, false) {
154159
Ok(evm_tree) => {
@@ -169,6 +174,7 @@ fn store_delete_value(
169174
let memory_view = memory.view(&store);
170175

171176
let key = read_from_memory(&memory_view, key_ptr, key_len)?;
177+
trace!("store_delete_value({})", key.as_str());
172178

173179
match bindings::store_delete(&runtime_env.host().tree(), key, true) {
174180
Ok(evm_tree) => {
@@ -192,6 +198,7 @@ fn store_copy(
192198

193199
let from = read_from_memory(&memory_view, from_ptr, from_len)?;
194200
let to = read_from_memory(&memory_view, to_ptr, to_len)?;
201+
trace!("store_copy(from: {}, to: {})", from.as_str(), to.as_str());
195202

196203
match bindings::store_copy(&runtime_env.host().tree(), from, to) {
197204
Ok(evm_tree) => {
@@ -215,6 +222,7 @@ fn store_move(
215222

216223
let from = read_from_memory(&memory_view, from_ptr, from_len)?;
217224
let to = read_from_memory(&memory_view, to_ptr, to_len)?;
225+
trace!("store_move(from: {}, to: {})", from.as_str(), to.as_str());
218226

219227
match bindings::store_move(&runtime_env.host().tree(), from, to) {
220228
Ok(evm_tree) => {
@@ -238,6 +246,7 @@ fn store_get_hash(
238246
let memory_view = memory.view(&store);
239247

240248
let key = read_from_memory(&memory_view, key_ptr, key_len)?;
249+
trace!("store_get_hash({})", key.as_str());
241250

242251
match bindings::store_get_hash(&runtime_env.host().tree(), &key) {
243252
Ok(hash) => {
@@ -261,6 +270,7 @@ fn store_list_size(
261270
let memory_view = memory.view(&store);
262271

263272
let key = read_from_memory(&memory_view, key_ptr, key_len)?;
273+
trace!("store_list_size({})", key.as_str());
264274

265275
match bindings::store_list_size(&runtime_env.host().tree(), key) {
266276
Ok(res) => Ok(res as i64),
@@ -279,6 +289,7 @@ fn store_value_size(
279289
let memory_view = memory.view(&store);
280290

281291
let key = read_from_memory(&memory_view, key_ptr, key_len)?;
292+
trace!("store_value_size({})", key.as_str());
282293

283294
match bindings::store_value_size(&runtime_env.host().tree(), key) {
284295
Ok(res) => Ok(res as i32),
@@ -299,6 +310,7 @@ fn store_read(
299310
let memory_view = memory.view(&store);
300311

301312
let key = read_from_memory(&memory_view, key_ptr, key_len)?;
313+
trace!("store_read({})", key.as_str());
302314

303315
match bindings::store_read(
304316
runtime_env.host().tree(),
@@ -327,6 +339,7 @@ fn store_write(
327339
let memory_view = memory.view(&store);
328340

329341
let key = read_from_memory(&memory_view, key_ptr, key_len)?;
342+
trace!("store_write({})", key.as_str());
330343
let buffer = read_from_memory(&memory_view, src_ptr, src_len)?;
331344

332345
match bindings::store_write(runtime_env.host().tree(), key, offset as usize, &buffer) {
@@ -343,6 +356,7 @@ fn reveal_metadata(
343356
dst_ptr: u32,
344357
max_bytes: u32,
345358
) -> Result<i32, RuntimeError> {
359+
trace!("reveal_metadata");
346360
let (runtime_env, store) = env.data_and_store_mut();
347361
let memory = runtime_env.memory();
348362
let memory_view = memory.view(&store);
@@ -382,6 +396,7 @@ fn reveal_preimage(
382396

383397
let hash_bytes = read_from_memory(&memory_view, hash_ptr, hash_len)?;
384398
let hash_hex = hex::encode(&hash_bytes);
399+
trace!("reveal_preimage({hash_hex})");
385400

386401
if hash_bytes[0] != 0u8 {
387402
return Err(RuntimeError::new(format!(

0 commit comments

Comments
 (0)