1use cid::Cid;
2use fvm_ipld_encoding::ipld_block::IpldBlock;
5use fvm_shared::address::Address;
6use fvm_shared::econ::TokenAmount;
7use fvm_shared::error::ExitCode;
8use fvm_shared::state::ActorState;
9use fvm_shared::{ActorID, MethodNum};
10
11use crate::gas::GasCharge;
12use crate::kernel::SyscallError;
13
14pub type ExecutionTrace = Vec<ExecutionEvent>;
16
17#[derive(Clone, Debug, PartialEq)]
19pub enum IpldOperation {
20 Get, Put, }
23
24#[derive(Clone, Debug)]
28#[non_exhaustive]
29pub enum ExecutionEvent {
30 GasCharge(GasCharge),
31 Call {
34 from: ActorID,
35 to: Address,
36 method: MethodNum,
37 params: Option<IpldBlock>,
38 value: TokenAmount,
39 gas_limit: u64,
40 read_only: bool,
41 },
42 CallReturn(ExitCode, Option<IpldBlock>),
43 CallError(SyscallError),
44 InvokeActor {
46 id: ActorID,
47 state: ActorState,
48 },
49 Log(String),
50 Ipld {
51 op: IpldOperation,
52 cid: Cid,
53 size: usize,
54 },
55}