use cid::Cid;
use fvm_ipld_encoding::ipld_block::IpldBlock;
use fvm_shared::{
address::Address, econ::TokenAmount, error::ErrorNumber, ActorID, MethodNum, Response,
};
use thiserror::Error;
pub mod fake_syscalls;
pub mod fvm_syscalls;
#[derive(Copy, Clone, Debug, Error)]
#[error("actor does not exist in state-tree")]
pub struct NoStateError;
pub trait Syscalls {
fn root(&self) -> Result<Cid, NoStateError>;
fn set_root(&self, cid: &Cid) -> Result<(), NoStateError>;
fn receiver(&self) -> ActorID;
fn caller(&self) -> ActorID;
fn send(
&self,
to: &Address,
method: MethodNum,
params: Option<IpldBlock>,
value: TokenAmount,
) -> Result<Response, ErrorNumber>;
fn resolve_address(&self, addr: &Address) -> Option<ActorID>;
}