- The signature of the
writeBits
PLC builtin has been changed from
[bytestring, list integer, list boolean] -> bytestring
to
[bytestring, list integer, boolean] -> bytestring
Instead of a list of boolean values to write to bit positions specified in the
second argument it now takes a single boolean value which is used to update the
bits at all of the given positions. If it's necessary to set some bits and
clear others then the function should be called twice, once with True
as the
third argument and once with False
.
- Removed
PlutusIR.Core.Instance.Pretty.Readable.PrettyPir
. UsePlutusCore.Pretty.Readable.PrettyReadable
instead.
- Renamed
PlutusIR.Core.Instance.Pretty.Readable.prettyPirReadable
toPlutusCore.Pretty.Readable.prettyReadable
. - Renamed
PlutusIR.Core.Instance.Pretty.Readable.prettyPirReadableSimple
toPlutusCore.Pretty.Readable.prettyReadableSimple
.
- Removed the
uplc
,plc
andpir
executables from this package. They are now in the newplutus-executables
package.
- A bug in the
findFirstSetBit
builtin has been fixed.
- Swapped around the type arguments of
EvaluationError
andEvaluationException
.
-
An initial DRAFT implementation of 'modularExponentiation' builtin
-
Builtin function
ripemd_160
implementing RIPEMD-160 hashing.
-
Added costing for the new bitwise builtins (see CIP-0058), which will probably become available at the Chang+1 HF.
-
Support for
Natural
numbers in the default universe, backed byInteger
.
- Updated version boundaries for the
nothunks
dependency (^>=0.2)
-
Removed
Emitter
andMonadEmitter
in #6224. -
In #6248 the case-of-case optimization was removed from the compiler due to it causing OOMs.
-
All names are printed with their unique suffixes by default.
-
Forbade using
EvaluationResult
in the builtins code in favor ofBuiltinResult
in #5926, so that builtins throw errors with more helpful messages. -
Changed the type of
emit
toText -> BuiltinResult ()
in #6224.
- In #6272 fixed a bug in
isNormalType
.
- References to CIP-87 have been corrected to refer to CIP-121.
- Rename
ReplicateByteString
toReplicateByte
(and similarly for denotation) - Renamed decodeViaFlat to decodeViaFlatWith
- Renamed AsSerialize to FlatViaSerialise
-
unsafeRunCekNoEmit
and allunsafeEvaluate*
functions in #6043. To replace e.g.unsafeEvaluateCek
you can useevaluateCek
in combination withunsafeToEvaluationResult
. -
UnknownBuiltin
andUnknownBuiltinType
in #6064.
-
Primitives
integerToByteString
andbyteStringToInteger
are added to PlutusV2, enabled at protocol version 10. -
A new cost model for PlutusV3.
-
Missing
KnownTypeAst
,ReadKnownIn
andMakeKnownIn
for integral types (Int8
,Word16
etc) in #6036
-
Renamed
unsafeExtractEvaluationResult
tounsafeToEvaluationResult
. -
We now have configurable cost models which allow different costs for different Plutus language versions and protocol versions.
-
Made unlifting errors a bit more flexible by allowing operational unlifting errors in #6036
-
CPU charges reduced for PlutusV1 and PlutusV2 scripts in the Conway era.
- A "stricter" version of
Z
-combinator that allows certain PIR programs not to lose their traces and yields minor performance gains.
- Debugger executable is removed and integrated inside plutus executable.
- An experimental "plutus" tool that unifies
pir
,plc
,uplc
, anddebugger
executables into one. Codec.CBOR.Extras
module is migrated here from `plutus-ledger-api.
- Restrict
eraseTerm
/eraseProgram
to only work withTPLC Name
input.
-
Improvements to costing infrastructure.
-
Use
Vector
in the datastructure forcase
terms during evaluation. This speeds up evaluation fairly significantly. -
The
flat
encoding of theData
type has been modified slightly to make sure that the result is always in the canonical format described in the Plutus Core specification.
- Partially applied builtins are estimated to be pure and work-free to better inform other optimizations, e.g. common subexpression elimination.
- Cost modelling code updated for
ByteStringToInteger
andIntegerToByteString
. - Preliminary budgeting for
ByteStringToInteger
andIntegerToByteString
.
- #5728 added
BuiltinResult
and leveraged in places where we used to useEmitter (EvaluationResult Smth)
.
- Implementations for the primitive operations described in CIP-0087
- Common subexpression elimination for Untyped Plutus Core.
-
The methoods in the
Flat
instances forPlutusCore.Crypto.BLS12_381.G1.Element
andPlutusCore.Crypto.BLS12_381.G2.Element
now cause failures: if a user wishes to use a literal constant in a serialised script then they should use the relevantuncompress
function on a bytestring. For convenience in experimentation and testing, literal constants are still allowed in textual Plutus Core programs, but any attempt to convert such a program toflat
format will fail. -
The
zero
andgenerator
constants (for use inplutus-tx
) have been removed fromPlutusCore.Crypto.BLS12_381.G1.Element
andPlutusCore.Crypto.BLS12_381.G2.Element
and replaced with bytestrings calledcompressed_zero
andcompressed_generator
; the original elements can be recovered by applying the appropriateuncompress
functions to these. -->
-
The
EvaluateBuiltins
pass will no longer produce constants that can't be serialized. -
Fixed a bug in the PIR inliner that causes it to change the order of effects in the presence of multi-lets.
Hashable
instances forData
, UPLCTerm
and related types.
- A
GCompare
instance forDefaultUni
in #5609.
-
A new pass in the simplifier that rewrites PIR terms given user-provided rules. It behaves similar to GHC's RULES, but for the PIR language. By default, a pre-defined set of rules are applied when the PIR simplifier is enabled.
-
A PIR rewrite rule for optimizing ""(unconstr . constrdata)"
-
The Plutus IR optimizer now performs case-of-case.
-
Typechecking property tests for all PIR compiler passes.
-
The debugger will now track and show traces, live as they are emitted by the CEK machine
- Instead of a single
--hs-file
, the debugger now accepts an--hs-dir DIR
option to look for (multiple) source PlutusTx modules
- Optimizer now considers constructor applications to be pure
- The ThunkRecursions transformation preserves now the effect order & strictness
- A
-B
/--builtin-semantics-variant
option for theplc
anduplc
commands to allow the user to select which variant of the builtin semantics to use.
- CekMachineCosts changed to use the "higher-kinded data" pattern, like BuiltinCostModel
-
The PIR callsite inliner no longer requires that the function is fully applied for inlining.
-
Fixed bugs in the inliner relating to inlining terms that are immediately evaluated.
- Optimization pass to strictify bindings
keccak_256
builtinblake2b_224
builtin
- Separated the single
Includes
constraint into two constraints,HasTypeLevel
andHasTermLevel
(which together formHasTypeAndTermLevel
) in #5434.
- Flat serialization&deserialization of DeBruijn indices go directly via Word64, instead of the previous indirection via Natural.
- The
FakeNamedDeBruijn
'sencode
&size
methods are fixed to roundtrip its flat format
-
Three new types for BLS12-381 objects (see CIP-0381).
-
Seventeen new built-in functions for BLS12-381 operations (see CIP-0381).
-
Costing benchmarks for the BLS12-381 builtins.
-
R code to infer cost models for the BLS12-381 builtins.
-
Property tests for the BLS12-381 builtins.
-
Code for Haskell bindings to the
blst
library has been added incbits
andplutus-core/src/Crypto/External/
. These have been copied from PR #266 incardano-base
and will be removed when that is merged. -
A special case of case-of-case optimization for UPLC, where the inner case is an
ifThenElse
application. -
Added
PlutusCore.MkPlc.mkIterAppNoAnn
,PlutusCore.MkPlc.mkIterInstNoAnn
andPlutusCore.MkPlc.mkIterTyAppNoAnn
. -
Callsite inlining for UPLC.
-
An
apply-to-data
command was added to theplc
anduplc
executables which allows a script to be applied to a list of flat-encoded data objects (the existingapply
command requires all inputs to be programs). -
Added
commuteFnWithConst
to the PIR simplifier pass.
-
The PLC, UPLC, and PIR parsers accept names quoted in backticks. Quoted names may have symbolic characters.
-
Costing functions for the BLS12-381 builtins were added to
builtinCostModel.json
. -
Costing benchmark results for the BLS12-381 builtins were added to
benching.csv
. -
Some of the R code in
models.R
was improved. -
The files in
plutus-core/src/crypto
were reorganised to put code relating to different sets of crypto functions into separate files. -
Improved the inlining of fully saturated functions such that it measures the size differences more accurately, and also performs beta reduction after inlining.
-
Changed
PlutusCore.MkPlc.mkIterApp
,PlutusCore.MkPlc.mkIterInst
andPlutusCore.MkPlc.mkIterTyApp
to require an annotation to be provided for each argument. -
Updated the parser and the pretty-printers to the new syntax of
Data
in #5391 according to this, for example:
Constr 1
[ Map [(B #616263646566, Constr 2 [B #, I 0])]
, List
[ List
[ List [List [I 123456]]
, B #666666666666666666666666666666666666666666666666666666666666666666666666666666666666 ] ]
, I 42 ]
-
The plc and uplc commands were failing to account for the new Constr and Case constructors for sums of products.
-
Fixed
PlutusIR.Purity.firstEffectfulTerm
andUntypedPlutusCore.Transform.Inline.firstEffectfulTerm
, which were sometimes too conservative and sometimes incorrect.
-
Float Delay optimization for UPLC.
-
GHC 9.6 support
- Improved "readable" pretty-printing functions by making them insert line breaks properly
- Simplified using "readable" pretty-printing by introducing the
PlutusCore.Pretty.Readable.AsReadable
wrapper
-
The PIR executable now actually checks uniqueness when reading a program.
-
applyProgram
andapplyCode
now returnEither
instead ofMaybe
for better error messages.
-
Case-of-known-constructor for Plutus IR.
-
The Plutus IR compiler can now compile datatypes using SOPs.
-
Generic builtin evaluation pass for PIR (subsumes constant-folding).
- Various
intercept
andslope
constants are now wrapped inIntercept
andSlope
newtype
s
- The inliner now rename before call site inlining to ensure global uniqueness.
Flat
instances for UPLC terms and programs. These were potentially unsafe as they don't perform the builtin checks that are required on chain, so it is important not to use them by accident.
-
optimise
options for thepir
,plc
, anduplc
commands. -
A
compile
option for thepir
command which allows a PIR file to be compiled to PLC or UPLC. -
Functions for mapping over names and typenames in the PLC AST.
-
Inlining of fully applied functions in the PIR inliner. This only affects non-recursive bindings.
-
Plutus Core 1.1.0 now supports sums-of-products via the new
constr
andcase
terms. See CIP-85 for details. -
UnrestrictedProgram
newtype that performs unchecked serialization/deserialization of programs for when that's appropriate. -
Tests for Steppable CEK against original CEK
-
Some of the
pir
commands have been extended to allow bothflat
and textual input. -
Made costing lazier to speed things up and increase expressiveness. #5239
- Fixed the
safeEncodeBits
assertion to also guard against 1 unsafe case. Does not affect current encoding/decoding.
- New Plutus Core language version 1.1
- PIR programs now have a version, which corresponds to the underlying Plutus Core language version.
-
defaultVersion
renamed tolatestVersion
-
applyProgram
now merges annotations and requires matching program versions -
Use a primitive array for the step counter; removed the word-array package.
- The debugger TUI updates live the currently spent CPU&MEM resources of the debugged program.
- The debugger TUI accepts a
--budget
to limit the CPU&MEM resources of the debugged program.
- The PIR readable prettyprinter was improved in a number of minor ways.
-
Added
NoThunks
instance forData
. -
A float-in compilation pass, capable of floating term bindings inwards in PIR. See Note [Float-in] for more details.
-
Tests targeting testing of (1) unconditional inlining of functions (2) call site inlining of fully applied functions (for the upcoming implementation).
-
The debugger can now highlight (beside the UPLC expression), the original PlutusTX expression currently being evaluated.
-
The debugger driver will now capture any error during the stepping of a PLC program and display it inside the debugging clients (tui,cli,etc).
-
function to track the type and term lambda abstraction order of a term in the PIR inliner.
-
PIR, TPLC and UPLC parsers now attach
PlutusCore.Annotation.SrcSpan
instead ofText.Megaparsec.Pos.SourcePos
to the parsed programs and terms. -
The float-in pass can now float non-recursive type and datatype bindings.
-
The float-in pass now floats bindings inwards more aggressively. See Note [Float-in] #5.
-
Plutus IR was moved to a public sub-library of
plutus-core
. -
Version
no longer has an annotation, as this was entirely unused. -
Made
geq
faster in certain cases, -1% of total validation time. #5061 -
Made the Haskell-Tx file input to the debugger optional.
-
The
goldenPIR
function now uses the correct function to print parse errors, so they are now printed in a human-readable way. -
PIR, PLC and UPLC term parsers can now parse comments.