amaru_uplc/machine/cost_model/
mod.rs1pub mod builtin_costs;
2pub(crate) mod cost_map;
3mod costing;
4pub mod ex_budget;
5mod machine_costs;
6mod value;
7
8pub use value::*;
9
10use crate::machine::{
11 cost_model::{builtin_costs::BuiltinCostModel, machine_costs::MachineCosts},
12 ExBudget, PlutusVersion,
13};
14
15#[derive(Debug, PartialEq)]
16pub struct CostModel<B: BuiltinCostModel> {
17 pub machine_startup: ExBudget,
18 pub machine_costs: MachineCosts,
19 pub builtin_costs: B,
20}
21
22impl<B: BuiltinCostModel> CostModel<B> {
23 pub fn initialize_cost_model(version: &PlutusVersion, cost_model: &[i64]) -> CostModel<B> {
24 let cost_map = cost_map::CostMap::new(version, cost_model);
25 Self {
26 machine_startup: ExBudget {
27 mem: cost_map["cek_startup_cost-exBudgetmem"],
28 cpu: cost_map["cek_startup_cost-exBudgetCPU"],
29 },
30 machine_costs: MachineCosts::initialize_machine_costs(&cost_map),
31 builtin_costs: B::initialize(&cost_map),
32 }
33 }
34}
35
36impl<B: BuiltinCostModel + Default> Default for CostModel<B> {
37 fn default() -> Self {
38 Self {
39 machine_startup: ExBudget::start_up(),
40 machine_costs: Default::default(),
41 builtin_costs: Default::default(),
42 }
43 }
44}
45
46#[repr(usize)]
47pub enum StepKind {
48 Constant = 0,
49 Var = 1,
50 Lambda = 2,
51 Apply = 3,
52 Delay = 4,
53 Force = 5,
54 Builtin = 6,
55 Constr = 7,
56 Case = 8,
57}