ethereum.trace
Defines the functions required for creating EVM traces during execution.
A trace is a log of operations that took place during an event or period of
time. In the case of an EVM trace, the log is built from a series of
TraceEvent
s emitted during the execution of a transaction.
Note that this module does not contain a trace implementation. Instead, it
defines only the events that can be collected into a trace by some other
package. See EvmTracer
.
See EIP-3155 for more details on EVM traces.
TransactionStart
Trace event that is triggered at the start of a transaction.
26 | @dataclass |
---|
class TransactionStart:
TransactionEnd
Trace event that is triggered at the end of a transaction.
33 | @dataclass |
---|
class TransactionEnd:
gas_used
39 | gas_used: int |
---|
output
44 | output: bytes |
---|
error
49 | error: Optional[EthereumException] |
---|
PrecompileStart
Trace event that is triggered before executing a precompile.
61 | @dataclass |
---|
class PrecompileStart:
address
67 | address: bytes |
---|
PrecompileEnd
Trace event that is triggered after executing a precompile.
73 | @dataclass |
---|
class PrecompileEnd:
OpStart
Trace event that is triggered before executing an opcode.
80 | @dataclass |
---|
class OpStart:
op
86 | op: enum.Enum |
---|
OpEnd
Trace event that is triggered after executing an opcode.
97 | @dataclass |
---|
class OpEnd:
OpException
Trace event that is triggered when an opcode raises an exception.
104 | @dataclass |
---|
class OpException:
error
110 | error: Exception |
---|
EvmStop
Trace event that is triggered when the EVM stops.
123 | @dataclass |
---|
class EvmStop:
op
129 | op: enum.Enum |
---|
GasAndRefund
Trace event that is triggered when gas is deducted.
140 | @dataclass |
---|
class GasAndRefund:
gas_cost
146 | gas_cost: int |
---|
TraceEvent
All possible types of events that an EvmTracer
is expected to handle.
152 | TraceEvent = Union[ |
---|---|
153 | TransactionStart, |
154 | TransactionEnd, |
155 | PrecompileStart, |
156 | PrecompileEnd, |
157 | OpStart, |
158 | OpEnd, |
159 | OpException, |
160 | EvmStop, |
161 | GasAndRefund, |
162 | ] |
discard_evm_trace
An EvmTracer
that discards all events.
def discard_evm_trace(evm: object, event: TraceEvent, trace_memory: bool, trace_stack: bool, trace_return_data: bool) -> None:
177 | """ |
---|---|
178 | An [`EvmTracer`] that discards all events. |
179 |
|
180 | [`EvmTracer`]: ref:ethereum.trace.EvmTracer |
181 | """ |
EvmTracer
Protocol
that describes tracer functions.
See ethereum.trace
for details about tracing in general, and
__call__
for more on how to implement a tracer.
class EvmTracer:
__call__
Call self
as a function, recording a trace event.
evm
is the live state of the EVM, and will be a fork-specific type
like ethereum.frontier.vm.Evm
.
event
, a TraceEvent
, is the reason why the tracer was triggered.
trace_memory
requests a full memory dump in the resulting trace.
trace_stack
requests the full stack in the resulting trace.
trace_return_data
requests that return data be included in the
resulting trace.
See discard_evm_trace
for an example function implementing this
protocol.
def __call__(self, evm: object, event: TraceEvent, /, trace_memory: bool, trace_stack: bool, trace_return_data: bool) -> None:
205 | """ |
---|---|
206 | Call `self` as a function, recording a trace event. |
207 |
|
208 | `evm` is the live state of the EVM, and will be a fork-specific type |
209 | like [`ethereum.frontier.vm.Evm`][evm]. |
210 |
|
211 | `event`, a [`TraceEvent`], is the reason why the tracer was triggered. |
212 |
|
213 | `trace_memory` requests a full memory dump in the resulting trace. |
214 |
|
215 | `trace_stack` requests the full stack in the resulting trace. |
216 |
|
217 | `trace_return_data` requests that return data be included in the |
218 | resulting trace. |
219 |
|
220 | See [`discard_evm_trace`] for an example function implementing this |
221 | protocol. |
222 |
|
223 | [`discard_evm_trace`]: ref:ethereum.trace.discard_evm_trace |
224 | [evm]: ref:ethereum.frontier.vm.Evm |
225 | [`TraceEvent`]: ref:ethereum.trace.TraceEvent |
226 | """ |
evm_trace
Active EvmTracer
that is used for generating traces.
229 | evm_trace: EvmTracer = discard_evm_trace |
---|