plutus-core
Removed
LowerInitialCharacteris no longer exported fromPlutusCore.Evaluation.Machine.ExBudget; it existed solely to supportderiving-aeson, whichplutus-coreno longer depends on.
Added
-
New builtin
multiIndexArray(CIP-0156) of typeforall a. array a -> list integer -> list a, returning the array elements at the given indices in order (duplicates preserved) and failing the whole call on any out-of-bounds index. Placeholder costing; gated underfuturePV, so it is not available in any released protocol version. -
The
policiesbuiltin (CIP-0168): returns the currency symbols of aValuein ascending order. Expected to be enabled at PV12. -
A PIR optimization pass, CollapseCase, that rewrites list casing into
dropList.
Changed
- Replaced the
deriving-aeson-based JSON instances of the cost model types with plainaesongeneric instances. The JSON format is unchanged.
plutus-ledger-api
Added
-
Shell completion (bash/zsh/fish) and worked
Examplessections in--help
for theuplc,plcandpirexecutables, via completion metadata in the
sharedplutus-execliboption parsers and a newPlutusCore.Executable.Help
module. -
unsafeLovelaceValueOfinPlutusLedgerApi.V1.ValueandPlutusLedgerApi.V1.Data.Value: assumes the first amount of the first currency represents lovelace without verifying this, which makes it much faster thanlovelaceValueOf. It is sound only when this is true. -
PlutusLedgerApi.V2,PlutusLedgerApi.V3, andPlutusLedgerApi.Data.V1/V2/V3re-export the fullValueAPI thatPlutusLedgerApi.V1already exposed (read accessors,AssetClass, helpers), and all of these umbrellas (includingV1) now also exposegeq,gt,leq,lt, andwithCurrencySymbol. Reading or comparing aValuefrom these modules no longer requires importingPlutusLedgerApi.V1.ValueorPlutusLedgerApi.V1.Data.Value. -
Add first draft Plutus V4 script context types.
-
The
uplcandplcexecutables now deduce the input and output format from
the file extension when--if/--ofis not supplied:.uplc/.plc/.pir
→ textual,.flat→ flat, and (foruplconly).hex→ hex and.cbor→
serialised. An explicit--if/--ofalways overrides the deduced format, and
reading from stdin, writing to stdout, or an unrecognised extension still
falls back to textual. -
The
applycommand now deduces the format of each input file independently
from its own extension, so a script and arguments in different formats can be
applied together (for example a textual script applied to flat-encoded
arguments). An explicit--ifstill forces a single format for every file.
Changed
- When an output file is given with
-obut no--of, the output format is now
deduced from the file's extension instead of always defaulting to textual. A
command that relied on the old default (for exampleuplc convert -i p.uplc -o p.flatwith no--of) will now write the format implied by the extension;
pass--of textualexplicitly to restore the previous behaviour.
Fixed
- The
plcexecutable no longer advertises theserialised,hexand
blueprintformats, which it never supported:--if/--ofnow accept only
textualand theflatvariants, and unsupported values are rejected when
the command line is parsed rather than a failure occurring at runtime.
plutus-tx
Added
-
PlutusTx.Builtins.multiIndexArray: themultiIndexArraybuiltin from
CIP-0156, returning the array elements at the given
indices and failing on any out-of-bounds index. -
PlutusTx.Builtins.policies, exposing thepoliciesbuiltin (CIP-0168). Expected to be enabled at PV12.
Changed
- Improve
asDatacodegen to use list casing instead ofheadandtail.
Fixed
-
Evaluating the Haskell definition of
PlutusTx.Builtins.indexArraywith an index exceeding
maxBound :: Intnow fails, matching the builtin, instead of silently indexing with the
wrapped value. -
The Haskell definitions of
indexByteString,sliceByteString,readBit,replicateByte
andcaseIntegerlikewise check their integer arguments in theIntegerdomain, matching
the builtins, instead of silently wrapping values that exceed the machine-integer range. -
The Haskell definition of
consByteStringnow follows the PlutusV3 builtin semantics and
fails on a byte outside[0..255]; the PlutusV1/V2 builtins reduce the byte modulo 256
instead, which a single Haskell definition cannot also mirror. -
The Haskell definitions of
shiftByteStringandrotateByteStringnow fail when the shift
or rotation amount does not fit in a machineInt, matching the builtin semantics that the
van Rossem HF activates (variants D and E); earlier variants accept any amount on-chain.
plutus-tx-plugin
Removed
- Removed the
BuiltinCasingoption for Plinth compiler flagdatatypes.
Use theSumsOfProductsoption (which is the default) to enable builtin casing.
Added
- Compilation support for the
multiIndexArraybuiltin
(CIP-0156).
plutus-executables
No changes.
plutus-metatheory
Added
- Postulated definitions for
Valueand its corresponding built-in functions
Fixed
- Fixed a performance bug in the certifier regarding decidable equality.
Full Changelog: 1.66.0.0...1.67.0.0