Skip to content
This repository was archived by the owner on Jun 11, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions crates/uplc/src/machine/cek.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ use super::{

pub struct Machine<'a, B: BuiltinCostModel> {
pub(super) arena: &'a Arena,
initial_budget: ExBudget,
ex_budget: ExBudget,
unbudgeted_steps: [u8; 10],
pub(super) costs: CostModel<B>,
Expand All @@ -42,6 +43,7 @@ impl<'a, B: BuiltinCostModel> Machine<'a, B> {
) -> Self {
Machine {
arena,
initial_budget,
ex_budget: initial_budget,
unbudgeted_steps: [0; 10],
costs,
Expand All @@ -54,6 +56,7 @@ impl<'a, B: BuiltinCostModel> Machine<'a, B> {

pub fn info(self) -> MachineInfo {
MachineInfo {
remaining_budget: self.initial_budget - self.ex_budget,
consumed_budget: self.ex_budget,
logs: self.logs,
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -376,8 +376,8 @@ impl BuiltinCostModel for BuiltinCostsV1 {
divide_integer: TwoArgumentsCosting::new(
TwoArgumentsCosting::subtracted_sizes(
cost_map["divide_integer-mem-arguments-intercept"],
cost_map["divide_integer-mem-arguments-minimum"],
cost_map["divide_integer-mem-arguments-slope"],
cost_map["divide_integer-mem-arguments-minimum"],
),
TwoArgumentsCosting::const_above_diagonal_into_multiplied_sizes(
cost_map["divide_integer-cpu-arguments-constant"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -390,8 +390,8 @@ impl BuiltinCostModel for BuiltinCostsV2 {
divide_integer: TwoArgumentsCosting::new(
TwoArgumentsCosting::subtracted_sizes(
cost_map["divide_integer-mem-arguments-intercept"],
cost_map["divide_integer-mem-arguments-minimum"],
cost_map["divide_integer-mem-arguments-slope"],
cost_map["divide_integer-mem-arguments-minimum"],
),
TwoArgumentsCosting::const_above_diagonal_into_multiplied_sizes(
cost_map["divide_integer-cpu-arguments-constant"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -643,8 +643,8 @@ impl BuiltinCostModel for BuiltinCostsV3 {
divide_integer: TwoArgumentsCosting::new(
TwoArgumentsCosting::subtracted_sizes(
cost_map["divide_integer-mem-arguments-intercept"],
cost_map["divide_integer-mem-arguments-minimum"],
cost_map["divide_integer-mem-arguments-slope"],
cost_map["divide_integer-mem-arguments-minimum"],
),
TwoArgumentsCosting::above_and_below_diagonal_into_quadratic_x_and_y(
cost_map["divide_integer-cpu-arguments-minimum"],
Expand Down
5 changes: 4 additions & 1 deletion crates/uplc/src/machine/cost_model/cost_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -610,7 +610,10 @@ impl CostMap {
"byteStringToInteger-mem-arguments-slope",
];

if values.len() == 297 {
// Newer parameter vectors may append extra entries after the known
// bitwise/ripemd V3 costs. As long as we have at least that prefix,
// keep mapping the known keys instead of silently dropping them.
if values.len() >= 297 {
base_keys.extend([
"andByteString-cpu-arguments-intercept",
"andByteString-cpu-arguments-slope1",
Expand Down
1 change: 1 addition & 0 deletions crates/uplc/src/machine/info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use super::ExBudget;

#[derive(Debug)]
pub struct MachineInfo {
pub remaining_budget: ExBudget,
pub consumed_budget: ExBudget,
pub logs: Vec<String>,
}
2 changes: 1 addition & 1 deletion crates/uplc/src/machine/runtime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2581,7 +2581,7 @@ impl<'a, B: BuiltinCostModel> Machine<'a, B> {
.costs
.builtin_costs
.get_cost(
DefaultFunction::OrByteString,
DefaultFunction::XorByteString,
&[
cost_model::BOOL_EX_MEM,
cost_model::byte_string_ex_mem(left_bytes),
Expand Down
3 changes: 1 addition & 2 deletions crates/uplc/src/program.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,7 @@ where
*self.version,
);
let term = machine.run(self.term);
let mut info = machine.info();
info.consumed_budget = initial_budget - info.consumed_budget;
let info = machine.info();
EvalResult { term, info }
}

Expand Down
6 changes: 3 additions & 3 deletions crates/uplc/tests/conformance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@ fn run_conformance(file_contents: &str, expected_output: &str, expected_budget:

pretty_assertions::assert_eq!(expected.term, term);

let consumed_budget = format!(
let remaining_budget = format!(
"({{cpu: {}\n| mem: {}}})",
info.consumed_budget.cpu, info.consumed_budget.mem
info.remaining_budget.cpu, info.remaining_budget.mem
);

pretty_assertions::assert_eq!(consumed_budget, expected_budget);
pretty_assertions::assert_eq!(remaining_budget, expected_budget);
}

include!(concat!(env!("OUT_DIR"), "/generated_tests.rs"));
2 changes: 1 addition & 1 deletion crates/uplc/tests/conformance_flat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ fn run_conformance(fixture_json: &str) {
let encoded = flat::encode(result_program).expect("encoder failed on eval result");

assert_eq!(hex::encode(&expected_bytes), hex::encode(&encoded));
assert_eq!(result.info.consumed_budget, *budget);
assert_eq!(result.info.remaining_budget, *budget);
}

include!(concat!(env!("OUT_DIR"), "/generated_flat_tests.rs"));
Loading