High level summary
The Plutus team has finished implementing and costing the Value primitives, as well as completing all other development required for the upcoming intra-era hard fork.
We've recently published a blog post recapping the recent UPLC 2025 event: https://www.iog.io/news/uplc-2025-conference-recap
In collaboration with Koz Ross from MLabs, we've implemented optimized byteStringToInteger and integerToByteString primitives.
Both primitives will now take linear time instead of quadratic time.
These improvements leverage the ghc-bignum library, which was made possible by dropping support for GHC 8.
In parallel, we continue to make progress across several other areas, including the initial work on Plutus V4, ongoing discussions around formally verifying the UPLC inliner in collaboration with Professor Philip Wadler, further optimization of UPLC runtime performance, and continued improvements to the usability of Plinth.
Low level summary
Key Pull Requests Merged
- Plinth user guide: more details on versions
- Add valueData and unValueData conformance tests
- Finalise cost models for valueData and unValueData
- Make Builtins.unsafeUncons use builtin list casing
- Improve UPLC parser error messages
- Value costing: insertCoin, unionValue, scaleValue
- Add casing on constants to the Plinth user guide
- Optimize VConstr bounds check in CEK machine
- Optimize Integer <-> ByteString conversions
- Make Enum PlutusTx.Rational plc compilable
- Fix the spec of CEK rules for constr and case
- Add deriveEnum for Plinth
- perf(builtins): optimize listToArray implementation and costing
- (Optimization) Combine Either Text (HeadSpine ...) into HeadSpine
- Support mkNil for any builtin types
Issues and Pull Requests In Progress
- Formally verifying the UPLC inliner
- Adding a new
Arrayconstructor for UPLC, which can be accessed in Plutus V4 - End-to-end testing for intra-era Hard Fork features
