pub struct LevmCallTracer {
pub callframes: Vec<CallTraceFrame>,
pub only_top_call: bool,
pub with_log: bool,
pub active: bool,
pub next_log_index: u64,
}Expand description
Geth’s callTracer (https://geth.ethereum.org/docs/developers/evm-tracing/built-in-tracers)
Use LevmCallTracer::disabled() when tracing is not wanted.
Fields§
§callframes: Vec<CallTraceFrame>Stack for tracer callframes, at the end of execution there will be only one element.
only_top_call: boolIf true, trace only the top call (a.k.a. the external transaction)
with_log: boolIf true, trace logs
active: boolIf active is set to false it won’t trace.
next_log_index: u64Next block-absolute log index to assign (geth’s log.Index). Seeded with the
count of logs emitted by preceding txs in the block and bumped on each log.
Implementations§
Source§impl LevmCallTracer
impl LevmCallTracer
Sourcepub fn new(only_top_call: bool, with_log: bool, log_index_base: u64) -> Self
pub fn new(only_top_call: bool, with_log: bool, log_index_base: u64) -> Self
log_index_base is the number of logs emitted by preceding txs in the block, so
the first log this tx traces gets geth’s block-absolute index. Pass 0 when there
is no preceding context (e.g. the first tx, or with_log disabled).
Sourcepub fn disabled() -> Self
pub fn disabled() -> Self
This is to keep LEVM’s code clean, like self.tracer.enter(...),
instead of something more complex or uglier when we don’t want to trace.
(For now that we only implement one tracer it may be the most convenient solution)
Sourcepub fn enter(
&mut self,
call_type: CallType,
from: Address,
to: Address,
value: U256,
gas: u64,
input: &Bytes,
)
pub fn enter( &mut self, call_type: CallType, from: Address, to: Address, value: U256, gas: u64, input: &Bytes, )
Starts trace call.
Sourcepub fn exit_context(
&mut self,
ctx_result: &ContextResult,
is_top_call: bool,
) -> Result<(), InternalError>
pub fn exit_context( &mut self, ctx_result: &ContextResult, is_top_call: bool, ) -> Result<(), InternalError>
Exits trace call using the ContextResult.
Sourcepub fn exit_early(
&mut self,
gas_used: u64,
error: Option<String>,
) -> Result<(), InternalError>
pub fn exit_early( &mut self, gas_used: u64, error: Option<String>, ) -> Result<(), InternalError>
Exits trace call when CALL or CREATE opcodes return early or in case SELFDESTRUCT is called.
Trait Implementations§
Source§impl Debug for LevmCallTracer
impl Debug for LevmCallTracer
Source§impl Default for LevmCallTracer
impl Default for LevmCallTracer
Source§fn default() -> LevmCallTracer
fn default() -> LevmCallTracer
Auto Trait Implementations§
impl Freeze for LevmCallTracer
impl RefUnwindSafe for LevmCallTracer
impl Send for LevmCallTracer
impl Sync for LevmCallTracer
impl Unpin for LevmCallTracer
impl UnsafeUnpin for LevmCallTracer
impl UnwindSafe for LevmCallTracer
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.