Plutus Core Team Update
High level summary
In the past weeks the Plutus team has added new built-in functions, improved Value support in the ledger API, broadened the conformance test suite, and continued working on Plutus V4 script context and Plutus V4 language features like casing on Data.
Two built-ins from recent CIPs have landed: multiIndexArray (CIP-0156), which reads several elements of an array in one call, and policies (CIP-0168), which returns the currency symbols in a Value.
Both are gated behind a future protocol version and not yet costed, so they cannot be used on-chain until Dijkstra.
The conformance test suite now ships .flat files alongside the textual test cases, making it much easier to consume for implementations that do not parse the textual format.
The asData pattern synonyms now use built-in list casing.
The Value built-in type has been added to the metatheory as postulates, along with a fix to decEq that removed a normalization blowup consuming over 128GB of memory when checking certificates.
We've merged the Plutus V4 script context definition (though it is subject to change), and recently discussed its Data encoding during a Plutus Working Group meeting.
You can find the meeting notes here.
Implementers of alternative node clients, UPLC interpreters, and compilers targeting UPLC are encouraged to review the notes and contribute to the discussion.
Key Pull Requests Merged
- Add multiIndexArray builtin (CIP-0156)
- Expose multiIndexArray to Plinth (CIP-0156)
- Add
policiesbuiltin (CIP-0168) - Add
unsafeLovelaceValueOf: a positional lovelace accessor for ledgerValues - Re-export the full
ValueAPI from V2/V3 and theData.*modules - Fix Integer narrowing in the PlutusTx.Builtins.Internal wrappers
- Range-check shift/rotate amounts in the bytestring wrappers
- Use list casing in asData pattern synonyms
- Remove BuiltinCasing option for the datatypes flag
- Plutus V4 ledger api types
- Add flat files to conformance tests
- Refactor BLS12_381 conformance tests to remove literal curve points
- Initial improvements to UPLC executable
- Optimize Flat integer decoding
- Metatheory: add Value built-in type with postulated functions
- Fix termination and performance issues with DecEq
- Agda conformance: re-enable valueData/unValueData tests
