use storage::db::DB;
use crate::cost_model::INITIAL_COST_MODEL;
use crate::ops::*;
use crate::result_mode::*;
use crate::vm_error::OnchainProgramError;
use crate::vm_value::VmValue;
#[allow(clippy::type_complexity)]
pub fn run_program<D: DB, M: ResultMode<D>>(
initial: &[VmValue<D>],
program: &[Op<M, D>],
) -> Result<(Vec<VmValue<D>>, Vec<M::Event>), OnchainProgramError<D>> {
let step_limit = None;
run_program_step_limited(initial, program, step_limit)
}
#[allow(clippy::type_complexity)]
pub fn run_program_step_limited<D: DB, M: ResultMode<D>>(
initial: &[VmValue<D>],
program: &[Op<M, D>],
step_limit: Option<usize>,
) -> Result<(Vec<VmValue<D>>, Vec<M::Event>), OnchainProgramError<D>> {
let gas_limit = None;
let res = crate::vm::run_program_step_limited(
initial,
program,
step_limit,
gas_limit,
&INITIAL_COST_MODEL,
)?;
Ok((res.stack, res.events))
}