Home /
Input Output /
plutus
Mar 26, 9-10 PM (0)
Mar 26, 10-11 PM (0)
Mar 26, 11-12 AM (0)
Mar 27, 12-1 AM (0)
Mar 27, 1-2 AM (0)
Mar 27, 2-3 AM (0)
Mar 27, 3-4 AM (0)
Mar 27, 4-5 AM (0)
Mar 27, 5-6 AM (0)
Mar 27, 6-7 AM (0)
Mar 27, 7-8 AM (0)
Mar 27, 8-9 AM (2)
Mar 27, 9-10 AM (0)
Mar 27, 10-11 AM (0)
Mar 27, 11-12 PM (0)
Mar 27, 12-1 PM (0)
Mar 27, 1-2 PM (0)
Mar 27, 2-3 PM (2)
Mar 27, 3-4 PM (2)
Mar 27, 4-5 PM (0)
Mar 27, 5-6 PM (0)
Mar 27, 6-7 PM (0)
Mar 27, 7-8 PM (1)
Mar 27, 8-9 PM (0)
Mar 27, 9-10 PM (0)
Mar 27, 10-11 PM (1)
Mar 27, 11-12 AM (0)
Mar 28, 12-1 AM (0)
Mar 28, 1-2 AM (0)
Mar 28, 2-3 AM (0)
Mar 28, 3-4 AM (0)
Mar 28, 4-5 AM (0)
Mar 28, 5-6 AM (0)
Mar 28, 6-7 AM (0)
Mar 28, 7-8 AM (0)
Mar 28, 8-9 AM (0)
Mar 28, 9-10 AM (0)
Mar 28, 10-11 AM (0)
Mar 28, 11-12 PM (0)
Mar 28, 12-1 PM (0)
Mar 28, 1-2 PM (0)
Mar 28, 2-3 PM (0)
Mar 28, 3-4 PM (0)
Mar 28, 4-5 PM (0)
Mar 28, 5-6 PM (0)
Mar 28, 6-7 PM (0)
Mar 28, 7-8 PM (0)
Mar 28, 8-9 PM (0)
Mar 28, 9-10 PM (0)
Mar 28, 10-11 PM (0)
Mar 28, 11-12 AM (0)
Mar 29, 12-1 AM (0)
Mar 29, 1-2 AM (0)
Mar 29, 2-3 AM (1)
Mar 29, 3-4 AM (0)
Mar 29, 4-5 AM (0)
Mar 29, 5-6 AM (0)
Mar 29, 6-7 AM (0)
Mar 29, 7-8 AM (0)
Mar 29, 8-9 AM (0)
Mar 29, 9-10 AM (0)
Mar 29, 10-11 AM (0)
Mar 29, 11-12 PM (0)
Mar 29, 12-1 PM (0)
Mar 29, 1-2 PM (0)
Mar 29, 2-3 PM (0)
Mar 29, 3-4 PM (0)
Mar 29, 4-5 PM (0)
Mar 29, 5-6 PM (0)
Mar 29, 6-7 PM (0)
Mar 29, 7-8 PM (0)
Mar 29, 8-9 PM (0)
Mar 29, 9-10 PM (0)
Mar 29, 10-11 PM (0)
Mar 29, 11-12 AM (0)
Mar 30, 12-1 AM (0)
Mar 30, 1-2 AM (0)
Mar 30, 2-3 AM (0)
Mar 30, 3-4 AM (0)
Mar 30, 4-5 AM (0)
Mar 30, 5-6 AM (0)
Mar 30, 6-7 AM (0)
Mar 30, 7-8 AM (0)
Mar 30, 8-9 AM (0)
Mar 30, 9-10 AM (0)
Mar 30, 10-11 AM (0)
Mar 30, 11-12 PM (0)
Mar 30, 12-1 PM (0)
Mar 30, 1-2 PM (1)
Mar 30, 2-3 PM (3)
Mar 30, 3-4 PM (7)
Mar 30, 4-5 PM (5)
Mar 30, 5-6 PM (2)
Mar 30, 6-7 PM (1)
Mar 30, 7-8 PM (0)
Mar 30, 8-9 PM (0)
Mar 30, 9-10 PM (0)
Mar 30, 10-11 PM (6)
Mar 30, 11-12 AM (1)
Mar 31, 12-1 AM (3)
Mar 31, 1-2 AM (0)
Mar 31, 2-3 AM (2)
Mar 31, 3-4 AM (0)
Mar 31, 4-5 AM (0)
Mar 31, 5-6 AM (0)
Mar 31, 6-7 AM (0)
Mar 31, 7-8 AM (2)
Mar 31, 8-9 AM (1)
Mar 31, 9-10 AM (1)
Mar 31, 10-11 AM (3)
Mar 31, 11-12 PM (0)
Mar 31, 12-1 PM (7)
Mar 31, 1-2 PM (0)
Mar 31, 2-3 PM (0)
Mar 31, 3-4 PM (0)
Mar 31, 4-5 PM (0)
Mar 31, 5-6 PM (0)
Mar 31, 6-7 PM (0)
Mar 31, 7-8 PM (0)
Mar 31, 8-9 PM (0)
Mar 31, 9-10 PM (0)
Mar 31, 10-11 PM (0)
Mar 31, 11-12 AM (1)
Apr 01, 12-1 AM (0)
Apr 01, 1-2 AM (0)
Apr 01, 2-3 AM (0)
Apr 01, 3-4 AM (0)
Apr 01, 4-5 AM (0)
Apr 01, 5-6 AM (1)
Apr 01, 6-7 AM (0)
Apr 01, 7-8 AM (0)
Apr 01, 8-9 AM (0)
Apr 01, 9-10 AM (0)
Apr 01, 10-11 AM (1)
Apr 01, 11-12 PM (2)
Apr 01, 12-1 PM (1)
Apr 01, 1-2 PM (2)
Apr 01, 2-3 PM (0)
Apr 01, 3-4 PM (0)
Apr 01, 4-5 PM (0)
Apr 01, 5-6 PM (0)
Apr 01, 6-7 PM (0)
Apr 01, 7-8 PM (0)
Apr 01, 8-9 PM (0)
Apr 01, 9-10 PM (0)
Apr 01, 10-11 PM (0)
Apr 01, 11-12 AM (0)
Apr 02, 12-1 AM (0)
Apr 02, 1-2 AM (0)
Apr 02, 2-3 AM (0)
Apr 02, 3-4 AM (0)
Apr 02, 4-5 AM (0)
Apr 02, 5-6 AM (0)
Apr 02, 6-7 AM (0)
Apr 02, 7-8 AM (0)
Apr 02, 8-9 AM (3)
Apr 02, 9-10 AM (1)
Apr 02, 10-11 AM (3)
Apr 02, 11-12 PM (1)
Apr 02, 12-1 PM (2)
Apr 02, 1-2 PM (5)
Apr 02, 2-3 PM (0)
Apr 02, 3-4 PM (0)
Apr 02, 4-5 PM (0)
Apr 02, 5-6 PM (0)
Apr 02, 6-7 PM (0)
Apr 02, 7-8 PM (0)
Apr 02, 8-9 PM (0)
Apr 02, 9-10 PM (0)
77 commits this week
Mar 26, 2026
-
Apr 02, 2026
Deploying to gh-pages from @ IntersectMBO/plutus@09680d7e6dd61fb4350cf5171665cf2364de9422 🚀
Regenerate golden files for updated indexByteString cost parameters
Deploying to gh-pages from @ IntersectMBO/plutus@1ae84fb1f6c1ce69fbe6c8edf7cee8b1246bb117 🚀
Update indexByteString cost model parameters from fresh benchmarks
Re-ran costing benchmarks on plutus-bench for IndexByteString after the denotation change in #7699. Updated CSV with 150 fresh data points and CPU cost parameters in all three model variants (A, B, C): 13,169 -> 183,300 picoseconds (constant_cost). The increase is due to benchmarking environment drift since the original March 2024 measurements, not the code change itself. The denotation change shows a ~3.5% improvement vs the old code on the same machine.
fix(Compiler/Expr): replace caseInteger list-indexing fallback with equalsInteger chain (#7693)
* test(IsData/Budget): add SoP mode budget test for unsafeFromBuiltinData Adds a minimal test that compiles unsafeFromBuiltinData on a 3-constructor type in the default SumsOfProducts mode (no BuiltinCasing pragma). This captures the caseInteger fallback regression for comparison. * test(IsData/Budget): add GHC 9.12 golden files * test(IsData/Budget): regenerate golden UPLC with correct formatting * test(IsData/Budget): generate baseline golden files with caseInteger disabled Temporarily set `if False` in unsafeFromDataClause to bypass caseInteger and generate golden files from the old equalsInteger/ifThenElse code path. These serve as the equivalence target for the Expr.hs fix. * fix(Compiler/Expr): replace caseInteger list-indexing fallback with equalsInteger chain When compiling caseInteger in non-BuiltinCasing mode (SumsOfProducts), the fallback used PlutusTx.List.!! which built a linked list of branches at runtime and indexed into it with a Y-combinator. This caused a 3-5x execution cost regression for unsafeFromBuiltinData on multi-constructor types (reported by the Hydra team, see #7691). Replace the fallback with mkEqualsIntegerChain, which generates a flat chain of equalsInteger/ifThenElse comparisons in PIR. This produces UPLC equivalent to the pre-caseInteger code path with no runtime allocation. See Note [caseInteger non-BuiltinCasing fallback] in Expr.hs. * chore: add changelog entry for caseInteger SoP fallback fix
Deploying to gh-pages from @ IntersectMBO/plutus@1ae84fb1f6c1ce69fbe6c8edf7cee8b1246bb117 🚀
Deploying to gh-pages from @ IntersectMBO/plutus@1ae84fb1f6c1ce69fbe6c8edf7cee8b1246bb117 🚀
Remove double range check in indexByteString (#7699)
Use BS.indexMaybe instead of a manual bounds check followed by BS.index (which checks again internally). This eliminates one redundant bounds check per call. Fixes #7469
chore: regenerate Marlowe validators and add changelog entry
Regenerate Marlowe flat files and golden budget TSVs to reflect the equalsInteger chain compilation. Semantics SoP validator shrinks from 57663 to 57266 bytes (~0.7%).
fix(Compiler/Expr): replace caseInteger list-indexing with equalsInteger chain
Replace the PlutusTx.List.!! fallback for caseInteger in SoP/Scott mode with an inline equalsInteger/ifThenElse chain that avoids runtime list construction and indexing. Also fix a latent bug in compileHaskellList: the old single-element pattern silently discarded the list tail, so when GHC inlined `build` into an explicit (:)-chain (as it does for recursive types with many constructors like Marlowe's Value and Observation), only the first branch was compiled. The fix adds a recursive consumeCons that walks the full (:) spine.
test(IsData/Budget): add SoP and BuiltinCasing budget tests
Add golden budget tests for unsafeFromBuiltinData compilation in both SumsOfProducts and BuiltinCasing modes. Covers single-constructor, pair, mixed-arity, and three-constructor types with PIR, UPLC, and evaluation golden files for GHC 9.6 and 9.12.
Add IndexByteString cost model visualization page
Add interactive visualization for the IndexByteString builtin function to the cost-models site. This provides a visual baseline of the current constant-cost model (13169 picoseconds CPU) before the denotation change in #7699 that removes the redundant double bounds check. Relates to #7469
test(CallTrace): regenerate golden eval files from clean build
Previous golden files were generated from a dirty cabal cache, missing source locations for cross-module call traces. Clean nix rebuild correctly resolves the source spans.
fix(Compiler/Expr): handle (:)-chain list representation in compileHaskellList
compileHaskellList previously assumed GHC always uses the `build` form for multi-element lists. However, GHC may inline `build` into an explicit (:)-chain for types with many constructors (e.g. Marlowe's Value with 12 and Observation with 11 constructors). The old single-element pattern `(App (App (App (Var _con) _ty) e) _)` silently discarded the tail, returning only the first branch. This produced a 1-branch equalsInteger chain where 11 or 12 branches were expected, causing 53/206 Marlowe Semantics benchmark cases to hit the fallthrough `error` at runtime. The fix adds a recursive `consumeCons` that walks the full (:)-chain spine, collecting all elements before the terminal `[] @ty`. Also inlines `where` bindings in IsData/Budget/SoP.hs test and regenerates Marlowe flat files and golden budgets.
Upgrade to agda 2.8 and agda-stdlib 2.3
Remove double range check in indexByteString
Use BS.indexMaybe instead of a manual bounds check followed by BS.index (which checks again internally). This eliminates one redundant bounds check per call. Fixes #7469
chore(deps): bump benchmark-action/github-action-benchmark
Bumps [benchmark-action/github-action-benchmark](https://github.com/benchmark-action/github-action-benchmark) from 1.21.0 to 1.22.0. - [Release notes](https://github.com/benchmark-action/github-action-benchmark/releases) - [Changelog](https://github.com/benchmark-action/github-action-benchmark/blob/master/CHANGELOG.md) - [Commits](https://github.com/benchmark-action/github-action-benchmark/compare/v1.21.0...v1.22.0) --- updated-dependencies: - dependency-name: benchmark-action/github-action-benchmark dependency-version: 1.22.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]>
fix(Compiler/Expr): replace caseInteger list-indexing fallback with equalsInteger chain
When compiling caseInteger in non-BuiltinCasing mode (SumsOfProducts), the fallback used PlutusTx.List.!! which built a linked list of branches at runtime and indexed into it with a Y-combinator. This caused a 3-5x execution cost regression for unsafeFromBuiltinData on multi-constructor types (reported by the Hydra team, see #7691). Replace the fallback with mkEqualsIntegerChain, which generates a flat chain of equalsInteger/ifThenElse comparisons in PIR. This produces UPLC equivalent to the pre-caseInteger code path with no runtime allocation. See Note [caseInteger non-BuiltinCasing fallback] in Expr.hs.
test(IsData/Budget): add GHC 9.12 golden files