From 9b9280e0c438c51997393e242235a75b4ceff7be Mon Sep 17 00:00:00 2001 From: Aayush Date: Thu, 14 Apr 2022 19:19:12 -0400 Subject: [PATCH] Address review --- fvm/src/call_manager/default.rs | 15 ++++++++++++--- fvm/src/machine/mod.rs | 8 +++++--- fvm/src/trace/mod.rs | 4 ++-- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/fvm/src/call_manager/default.rs b/fvm/src/call_manager/default.rs index f017ef9b03..7ec811871c 100644 --- a/fvm/src/call_manager/default.rs +++ b/fvm/src/call_manager/default.rs @@ -4,7 +4,7 @@ use fvm_ipld_encoding::{RawBytes, DAG_CBOR}; use fvm_shared::actor::builtin::Type; use fvm_shared::address::{Address, Protocol}; use fvm_shared::econ::TokenAmount; -use fvm_shared::error::ExitCode; +use fvm_shared::error::{ErrorNumber, ExitCode}; use fvm_shared::version::NetworkVersion; use fvm_shared::{ActorID, MethodNum, METHOD_SEND}; use num_traits::Zero; @@ -13,7 +13,7 @@ use super::{Backtrace, CallManager, InvocationResult, NO_DATA_BLOCK_ID}; use crate::call_manager::backtrace::Frame; use crate::call_manager::FinishRet; use crate::gas::GasTracker; -use crate::kernel::{ClassifyResult, ExecutionError, Kernel, Result}; +use crate::kernel::{ClassifyResult, ExecutionError, Kernel, Result, SyscallError}; use crate::machine::Machine; use crate::syscalls::error::Abort; use crate::trace::{ExecutionEvent, ExecutionTrace, SendParams}; @@ -125,7 +125,16 @@ where self.call_stack_depth -= 1; if self.machine.context().tracing { - self.exec_trace.push(ExecutionEvent::Return(result.clone())); + self.exec_trace.push(ExecutionEvent::Return(match result { + Err(ref e) => Err(match e { + ExecutionError::OutOfGas => { + SyscallError::new(ErrorNumber::Forbidden, "out of gas") + } + ExecutionError::Fatal(_) => SyscallError::new(ErrorNumber::Forbidden, "fatal"), + ExecutionError::Syscall(s) => s.clone(), + }), + Ok(ref v) => Ok(v.clone()), + })); } result diff --git a/fvm/src/machine/mod.rs b/fvm/src/machine/mod.rs index 448992328a..23ee33c27b 100644 --- a/fvm/src/machine/mod.rs +++ b/fvm/src/machine/mod.rs @@ -129,8 +129,8 @@ impl NetworkConfig { /// Enable actor debugging. This is a consensus-critical option (affects gas usage) so it should /// only be enabled for local testing or as a network-wide parameter. - pub fn enable_actor_debugging(&mut self, enabled: bool) -> &mut Self { - self.actor_debugging = enabled; + pub fn enable_actor_debugging(&mut self) -> &mut Self { + self.actor_debugging = true; self } @@ -180,6 +180,8 @@ pub struct MachineContext { /// DEFAULT: Total FIL supply (likely not what you want). pub circ_supply: TokenAmount, + /// Whether or not to produce execution traces in the returned result. + /// Not consensus-critical, but has a performance impact. pub tracing: bool, } @@ -196,7 +198,7 @@ impl MachineContext { self } - /// Set [`MachineContext::tracing`]. + /// Enable execution traces. [`MachineContext::tracing`]. pub fn enable_tracing(&mut self) -> &mut Self { self.tracing = true; self diff --git a/fvm/src/trace/mod.rs b/fvm/src/trace/mod.rs index 73c076059b..35f9a5948a 100644 --- a/fvm/src/trace/mod.rs +++ b/fvm/src/trace/mod.rs @@ -4,7 +4,7 @@ use fvm_shared::econ::TokenAmount; use fvm_shared::{ActorID, MethodNum}; use crate::call_manager::InvocationResult; -use crate::kernel::Result; +use crate::kernel::SyscallError; /// Execution Trace, only for informational and debugging purposes. pub type ExecutionTrace = Vec; @@ -12,7 +12,7 @@ pub type ExecutionTrace = Vec; #[derive(Clone, Debug)] pub enum ExecutionEvent { Call(SendParams), - Return(Result), + Return(Result), } #[derive(Clone, Debug)]