use fvm::executor::{ApplyKind, Executor};
use fvm_integration_tests::bundle;
use fvm_integration_tests::dummy::DummyExterns;
use fvm_integration_tests::tester::{Account, Tester};
use fvm_ipld_blockstore::MemoryBlockstore;
use fvm_ipld_encoding::tuple::*;
use fvm_shared::address::Address;
use fvm_shared::econ::TokenAmount;
use fvm_shared::message::Message;
use fvm_shared::state::StateTreeVersion;
use fvm_shared::version::NetworkVersion;
use num_traits::Zero;
const WAT: &str = r#"
;; Mock invoke function
(module
(func (export "invoke") (param $x i32) (result i32)
(i32.const 1)
)
)
"#;
#[derive(Serialize_tuple, Deserialize_tuple, Clone, Debug)]
struct State {
empty: bool,
}
pub fn main() {
let bs = MemoryBlockstore::default();
let bundle_root = bundle::import_bundle(&bs, actors::BUNDLE_CAR).unwrap();
let mut tester =
Tester::new(NetworkVersion::V21, StateTreeVersion::V5, bundle_root, bs).unwrap();
let sender: [Account; 1] = tester.create_accounts().unwrap();
let wasm_bin = wat::parse_str(WAT).unwrap();
let actor_state = State { empty: true };
let state_cid = tester.set_state(&actor_state).unwrap();
let actor_address = Address::new_id(10000);
tester
.set_actor_from_bin(&wasm_bin, state_cid, actor_address, TokenAmount::zero())
.unwrap();
tester.instantiate_machine(DummyExterns).unwrap();
let message = Message {
from: sender[0].1,
to: actor_address,
gas_limit: 1000000000,
method_num: 1,
..Message::default()
};
tester
.executor
.unwrap()
.execute_message(message, ApplyKind::Explicit, 100)
.unwrap();
}