use cid::Cid;
use fvm_ipld_encoding::ipld_block::IpldBlock;
use fvm_shared::address::Address;
use fvm_shared::econ::TokenAmount;
use fvm_shared::error::ExitCode;
use fvm_shared::state::ActorState;
use fvm_shared::{ActorID, MethodNum};
use crate::gas::GasCharge;
use crate::kernel::SyscallError;
pub type ExecutionTrace = Vec<ExecutionEvent>;
#[derive(Clone, Debug, PartialEq)]
pub enum IpldOperation {
Get, Put, }
#[derive(Clone, Debug)]
#[non_exhaustive]
pub enum ExecutionEvent {
GasCharge(GasCharge),
Call {
from: ActorID,
to: Address,
method: MethodNum,
params: Option<IpldBlock>,
value: TokenAmount,
gas_limit: u64,
read_only: bool,
},
CallReturn(ExitCode, Option<IpldBlock>),
CallError(SyscallError),
InvokeActor {
id: ActorID,
state: ActorState,
},
Log(String),
Ipld {
op: IpldOperation,
cid: Cid,
size: usize,
},
}