From 03de1a0678c3628feef7ca100c910ef7b9fcb0a4 Mon Sep 17 00:00:00 2001 From: Fridrik Asmundsson Date: Thu, 27 Jul 2023 13:11:22 +0000 Subject: [PATCH 1/5] feat: add new fields to message trace for supporting new trace api --- fvm/src/call_manager/default.rs | 7 +++++++ fvm/src/trace/mod.rs | 2 ++ 2 files changed, 9 insertions(+) diff --git a/fvm/src/call_manager/default.rs b/fvm/src/call_manager/default.rs index d3ac28332..da53b5894 100644 --- a/fvm/src/call_manager/default.rs +++ b/fvm/src/call_manager/default.rs @@ -186,6 +186,13 @@ where method, params: params.as_ref().map(Into::into), value: value.clone(), + gas_limit: std::cmp::min( + gas_limit + .unwrap_or(Gas::from_milligas(u64::MAX)) + .as_milligas(), + self.gas_tracker.gas_available().as_milligas(), + ), + read_only, }); } diff --git a/fvm/src/trace/mod.rs b/fvm/src/trace/mod.rs index fcbec8287..19a0d24c7 100644 --- a/fvm/src/trace/mod.rs +++ b/fvm/src/trace/mod.rs @@ -25,6 +25,8 @@ pub enum ExecutionEvent { method: MethodNum, params: Option, value: TokenAmount, + gas_limit: u64, + read_only: bool, }, CallReturn(ExitCode, Option), CallError(SyscallError), From 17dc7fc98de1d8c1d35f330a548d53322c9e97db Mon Sep 17 00:00:00 2001 From: Fridrik Asmundsson Date: Thu, 27 Jul 2023 15:39:24 +0000 Subject: [PATCH 2/5] Add invoked cids to ExecutionEvent enum --- fvm/src/trace/mod.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fvm/src/trace/mod.rs b/fvm/src/trace/mod.rs index 19a0d24c7..3fe60b479 100644 --- a/fvm/src/trace/mod.rs +++ b/fvm/src/trace/mod.rs @@ -8,6 +8,7 @@ use fvm_shared::{ActorID, MethodNum}; use crate::gas::GasCharge; use crate::kernel::SyscallError; +use crate::Cid; /// Execution Trace, only for informational and debugging purposes. pub type ExecutionTrace = Vec; @@ -30,4 +31,5 @@ pub enum ExecutionEvent { }, CallReturn(ExitCode, Option), CallError(SyscallError), + Invoke(Cid), } From f86a49b5032fc3d05693bff7e2381a94e29aecec Mon Sep 17 00:00:00 2001 From: Fridrik Asmundsson Date: Fri, 28 Jul 2023 14:43:21 +0000 Subject: [PATCH 3/5] feat: Start tracing InvokeActor(cid) --- fvm/src/call_manager/default.rs | 4 ++++ fvm/src/trace/mod.rs | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/fvm/src/call_manager/default.rs b/fvm/src/call_manager/default.rs index da53b5894..0df87b9e2 100644 --- a/fvm/src/call_manager/default.rs +++ b/fvm/src/call_manager/default.rs @@ -661,6 +661,10 @@ where .get_actor(to)? .ok_or_else(|| syscall_error!(NotFound; "actor does not exist: {}", to))?; + if self.machine.context().tracing { + self.trace(ExecutionEvent::InvokeActor(state.code)); + } + // Transfer, if necessary. if !value.is_zero() { let t = self.charge_gas(self.price_list().on_value_transfer())?; diff --git a/fvm/src/trace/mod.rs b/fvm/src/trace/mod.rs index 3fe60b479..7ce923c5c 100644 --- a/fvm/src/trace/mod.rs +++ b/fvm/src/trace/mod.rs @@ -31,5 +31,5 @@ pub enum ExecutionEvent { }, CallReturn(ExitCode, Option), CallError(SyscallError), - Invoke(Cid), + InvokeActor(Cid), } From 8a00486d2fa9e471fc0b3c9fb13e39888a68d645 Mon Sep 17 00:00:00 2001 From: Fridrik Asmundsson Date: Mon, 21 Aug 2023 15:25:19 +0000 Subject: [PATCH 4/5] Add comments to Call/InvokeActor enum --- fvm/src/trace/mod.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fvm/src/trace/mod.rs b/fvm/src/trace/mod.rs index 7ce923c5c..745410773 100644 --- a/fvm/src/trace/mod.rs +++ b/fvm/src/trace/mod.rs @@ -20,6 +20,8 @@ pub type ExecutionTrace = Vec; #[non_exhaustive] pub enum ExecutionEvent { GasCharge(GasCharge), + /// Emitted on each send call regardless whether we actually end up invoking the + /// actor or not (e.g. if we don't have enough gas or if the actor does not exist) Call { from: ActorID, to: Address, @@ -31,5 +33,6 @@ pub enum ExecutionEvent { }, CallReturn(ExitCode, Option), CallError(SyscallError), + /// Emitted every time we successfully invoke an actor InvokeActor(Cid), } From f53fa5fb0a84a1a78e192e23ca73c93992120932 Mon Sep 17 00:00:00 2001 From: Fridrik Asmundsson Date: Tue, 22 Aug 2023 17:52:19 +0000 Subject: [PATCH 5/5] Use gas instead of milligas in ExecutionEvent --- fvm/src/call_manager/default.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/fvm/src/call_manager/default.rs b/fvm/src/call_manager/default.rs index 0df87b9e2..c78912da6 100644 --- a/fvm/src/call_manager/default.rs +++ b/fvm/src/call_manager/default.rs @@ -187,10 +187,8 @@ where params: params.as_ref().map(Into::into), value: value.clone(), gas_limit: std::cmp::min( - gas_limit - .unwrap_or(Gas::from_milligas(u64::MAX)) - .as_milligas(), - self.gas_tracker.gas_available().as_milligas(), + gas_limit.unwrap_or(Gas::from_milligas(u64::MAX)).round_up(), + self.gas_tracker.gas_available().round_up(), ), read_only, });