Home / Input Output / plutus
Jan 22, 5-6 PM (1)
Jan 22, 6-7 PM (0)
Jan 22, 7-8 PM (2)
Jan 22, 8-9 PM (1)
Jan 22, 9-10 PM (0)
Jan 22, 10-11 PM (0)
Jan 22, 11-12 AM (3)
Jan 23, 12-1 AM (0)
Jan 23, 1-2 AM (0)
Jan 23, 2-3 AM (0)
Jan 23, 3-4 AM (0)
Jan 23, 4-5 AM (0)
Jan 23, 5-6 AM (0)
Jan 23, 6-7 AM (0)
Jan 23, 7-8 AM (0)
Jan 23, 8-9 AM (0)
Jan 23, 9-10 AM (3)
Jan 23, 10-11 AM (1)
Jan 23, 11-12 PM (8)
Jan 23, 12-1 PM (0)
Jan 23, 1-2 PM (8)
Jan 23, 2-3 PM (7)
Jan 23, 3-4 PM (1)
Jan 23, 4-5 PM (0)
Jan 23, 5-6 PM (0)
Jan 23, 6-7 PM (0)
Jan 23, 7-8 PM (0)
Jan 23, 8-9 PM (0)
Jan 23, 9-10 PM (0)
Jan 23, 10-11 PM (0)
Jan 23, 11-12 AM (0)
Jan 24, 12-1 AM (0)
Jan 24, 1-2 AM (0)
Jan 24, 2-3 AM (0)
Jan 24, 3-4 AM (0)
Jan 24, 4-5 AM (0)
Jan 24, 5-6 AM (0)
Jan 24, 6-7 AM (0)
Jan 24, 7-8 AM (0)
Jan 24, 8-9 AM (0)
Jan 24, 9-10 AM (0)
Jan 24, 10-11 AM (0)
Jan 24, 11-12 PM (0)
Jan 24, 12-1 PM (0)
Jan 24, 1-2 PM (0)
Jan 24, 2-3 PM (0)
Jan 24, 3-4 PM (0)
Jan 24, 4-5 PM (0)
Jan 24, 5-6 PM (0)
Jan 24, 6-7 PM (0)
Jan 24, 7-8 PM (0)
Jan 24, 8-9 PM (0)
Jan 24, 9-10 PM (0)
Jan 24, 10-11 PM (0)
Jan 24, 11-12 AM (0)
Jan 25, 12-1 AM (0)
Jan 25, 1-2 AM (0)
Jan 25, 2-3 AM (0)
Jan 25, 3-4 AM (0)
Jan 25, 4-5 AM (0)
Jan 25, 5-6 AM (0)
Jan 25, 6-7 AM (0)
Jan 25, 7-8 AM (0)
Jan 25, 8-9 AM (0)
Jan 25, 9-10 AM (0)
Jan 25, 10-11 AM (0)
Jan 25, 11-12 PM (0)
Jan 25, 12-1 PM (0)
Jan 25, 1-2 PM (0)
Jan 25, 2-3 PM (0)
Jan 25, 3-4 PM (0)
Jan 25, 4-5 PM (0)
Jan 25, 5-6 PM (0)
Jan 25, 6-7 PM (0)
Jan 25, 7-8 PM (0)
Jan 25, 8-9 PM (0)
Jan 25, 9-10 PM (0)
Jan 25, 10-11 PM (0)
Jan 25, 11-12 AM (0)
Jan 26, 12-1 AM (0)
Jan 26, 1-2 AM (0)
Jan 26, 2-3 AM (0)
Jan 26, 3-4 AM (0)
Jan 26, 4-5 AM (0)
Jan 26, 5-6 AM (0)
Jan 26, 6-7 AM (0)
Jan 26, 7-8 AM (0)
Jan 26, 8-9 AM (3)
Jan 26, 9-10 AM (1)
Jan 26, 10-11 AM (1)
Jan 26, 11-12 PM (1)
Jan 26, 12-1 PM (1)
Jan 26, 1-2 PM (1)
Jan 26, 2-3 PM (1)
Jan 26, 3-4 PM (0)
Jan 26, 4-5 PM (0)
Jan 26, 5-6 PM (0)
Jan 26, 6-7 PM (0)
Jan 26, 7-8 PM (0)
Jan 26, 8-9 PM (0)
Jan 26, 9-10 PM (0)
Jan 26, 10-11 PM (0)
Jan 26, 11-12 AM (1)
Jan 27, 12-1 AM (0)
Jan 27, 1-2 AM (2)
Jan 27, 2-3 AM (0)
Jan 27, 3-4 AM (0)
Jan 27, 4-5 AM (0)
Jan 27, 5-6 AM (0)
Jan 27, 6-7 AM (0)
Jan 27, 7-8 AM (0)
Jan 27, 8-9 AM (0)
Jan 27, 9-10 AM (0)
Jan 27, 10-11 AM (11)
Jan 27, 11-12 PM (11)
Jan 27, 12-1 PM (5)
Jan 27, 1-2 PM (1)
Jan 27, 2-3 PM (3)
Jan 27, 3-4 PM (1)
Jan 27, 4-5 PM (1)
Jan 27, 5-6 PM (0)
Jan 27, 6-7 PM (0)
Jan 27, 7-8 PM (0)
Jan 27, 8-9 PM (0)
Jan 27, 9-10 PM (0)
Jan 27, 10-11 PM (0)
Jan 27, 11-12 AM (0)
Jan 28, 12-1 AM (0)
Jan 28, 1-2 AM (0)
Jan 28, 2-3 AM (0)
Jan 28, 3-4 AM (0)
Jan 28, 4-5 AM (0)
Jan 28, 5-6 AM (0)
Jan 28, 6-7 AM (0)
Jan 28, 7-8 AM (0)
Jan 28, 8-9 AM (2)
Jan 28, 9-10 AM (2)
Jan 28, 10-11 AM (1)
Jan 28, 11-12 PM (1)
Jan 28, 12-1 PM (1)
Jan 28, 1-2 PM (0)
Jan 28, 2-3 PM (0)
Jan 28, 3-4 PM (2)
Jan 28, 4-5 PM (0)
Jan 28, 5-6 PM (0)
Jan 28, 6-7 PM (0)
Jan 28, 7-8 PM (0)
Jan 28, 8-9 PM (0)
Jan 28, 9-10 PM (0)
Jan 28, 10-11 PM (0)
Jan 28, 11-12 AM (2)
Jan 29, 12-1 AM (0)
Jan 29, 1-2 AM (0)
Jan 29, 2-3 AM (0)
Jan 29, 3-4 AM (0)
Jan 29, 4-5 AM (0)
Jan 29, 5-6 AM (0)
Jan 29, 6-7 AM (0)
Jan 29, 7-8 AM (0)
Jan 29, 8-9 AM (0)
Jan 29, 9-10 AM (1)
Jan 29, 10-11 AM (0)
Jan 29, 11-12 PM (0)
Jan 29, 12-1 PM (2)
Jan 29, 1-2 PM (0)
Jan 29, 2-3 PM (0)
Jan 29, 3-4 PM (0)
Jan 29, 4-5 PM (0)
Jan 29, 5-6 PM (0)
94 commits this week Jan 22, 2026 - Jan 29, 2026
refactor(uplc-evaluator): normalize measurement structure
Move deterministic budget values (cpu_budget, memory_budget, memory_bytes) to the top level of JSON output. Keep only variable timing data in the timing_samples array. This eliminates redundant data that was repeated identically in every measurement sample.

Previous structure stored budget in each sample, wasting space and obscuring the deterministic nature of budget values. New structure clearly separates deterministic (budget) from variable (timing) data.
test(uplc-evaluator): add budget determinism and error handling tests
Add explicit tests verifying the deterministic nature of CEK evaluation
and proper error type mapping for runtime failures.

- Budget determinism: verify all samples have identical cpu/memory budget
- Evaluation error: verify runtime errors produce evaluation_error type
- Adjust range assertions for real (small) values vs mock ranges
feat(uplc-evaluator): implement real CEK evaluation replacing mock
Replace random mock measurements with actual UPLC evaluation using
the CEK machine from plutus-core. Programs are parsed, converted to
NamedDeBruijn representation, and evaluated with budget tracking.

Key changes:
- Parse textual UPLC via UntypedPlutusCore.Parser
- Evaluate with runCekDeBruijn using tallying mode
- Extract deterministic CPU/memory budgets from ExBudget
- Collect 15 timing samples with criterion-measurement
- Map parse errors to syntax_error, runtime errors to evaluation_error
feat(nix): expose uplc-evaluator executable in nix packages (#7549)
Add uplc-evaluator to exposed-haskell-packages in nix/outputs.nix to make
it available via nix build/run commands.

This allows users to easily build and use the uplc-evaluator service:
  nix build .#uplc-evaluator
  nix run .#uplc-evaluator -- --help

The executable provides an asynchronous file-based interface for
benchmarking UPLC programs, as specified in plutus-benchmark/uplc-evaluator/SPEC.md.
feat(nix): expose uplc-evaluator executable in nix packages
Add uplc-evaluator to exposed-haskell-packages in nix/outputs.nix to make
it available via nix build/run commands.

This allows users to easily build and use the uplc-evaluator service:
  nix build .#uplc-evaluator
  nix run .#uplc-evaluator -- --help

The executable provides an asynchronous file-based interface for
benchmarking UPLC programs, as specified in plutus-benchmark/uplc-evaluator/SPEC.md.
Fix uplc-evaluator-integration-tests to work in nix builds
The test harness was searching for the uplc-evaluator executable only in
hardcoded dist-newstyle paths with specific GHC versions. This failed in
nix builds where the executable is made available via build-tool-depends
in PATH.

Solution: Use System.Directory.findExecutable to locate uplc-evaluator
in PATH. This works for both:
- cabal builds: cabal test adds build-tools to PATH
- nix builds: nix adds dependencies to PATH via build-tool-depends

This eliminates the need to maintain a list of hardcoded paths for
different platforms and GHC versions.
test(cek): add comprehensive discharge tests for free variables
Add 8 test cases covering variable capture scenarios in dischargeCekValue:

- Free variables under 1, 2, and 3 lambdas

- Deeply indexed free variables

- Multiple free variables in the same term

- Nested environment structures

Tests verify that free variables are correctly shifted to prevent capture when terms are discharged from the evaluation environment.

Tests for #7526
fix(cek): prevent variable capture in dischargeCekValue
Add shiftTermBy function to correctly shift free variables when discharging values from the environment. Previously, free variables in discharged terms could be captured by outer lambdas, causing incorrect variable references in the output term.

The fix tracks binding depth during discharge and shifts free variables (those with indices beyond the current binding depth) by the appropriate amount to maintain correct scoping.

Resolves #7526