Skip to main content

amaru_uplc/machine/cost_model/
mod.rs

1pub 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}