Changelog of @hackage/lorentz 0.16.0

0.16.0

  • !1370 Add OverloadedRecordDot support for Lorentz StoreClass
    • Deprecated StoreClass.Extra, as it does more or less the same thing as OverloadedRecordDot, but a lot worse.
  • !1369 Add IsLabel and Default instances for EntrypointRef
    • Now OverloadedLabels can be used instead of Call
    • def from Data.Default can be used instead of CallDefault
  • !1364 Update to LTS-21.4 (GHC 9.4.5)
  • !1358 Make missing Generic errors more readable
  • !1367 Add Range type to Lorentz, see Lorentz.Range module documentation

0.15.2

  • !1362 Add division operators over integral operands returning fractional results
    • Fix division for fixed-point arithmetic;
    • Add more instances for fixed and rational arithmetic, for better interpop with integrals;
    • Optimize fixed-point division;
    • Add Real NFixed instance for convenience;
    • Fix bitshift operations for fixed-point arithmetic;
    • Fix division between Rational (or NRational) and Natural;
  • !1342 Replace fmt with prettyprinter
    • Removed trivial Buildable instance for :-> in favor of the default one
  • !1341 Refactor scope constraints
    • Avoid redundant check*Presence uses
    • Improve error messages with Nice* constraints
  • !1340 Remove deprecated types and functions
    • defaultAnnOptions
    • dropPrefixThen
    • haskellRepStripFieldPrefix

0.15.1

  • !1325 Add AND, NOT, OR, XOR, LSL and LSR operations support on bytes
  • !1326 Add support for bytes to nat and int conversions
    • Support nat and bytes instructions, and the new operands to int instruction.
  • !1331 Support implicit account tickets
    • Allow tickets as parameter to ImplicitAddress in ToTAddress;
  • !1328 Kill support for TORUs, minimal sr1 address support, tz4 address support
    • Module Lorentz.Txr1Call removed.
  • !1314 Preserve docs after failWith
  • !1289 Simplify/fix ReferencedByName
    • dupL and dupLNamed could under some specific circumstances crash at runtime due to not-always-valid unsafe coercions. The unsafe coercions have been removed.
  • !1235 Make it easier to have consistent field naming between HasAnnotation and TypeHasDoc
    • Require newly introduced TypeHasFieldNamingStrategy constraint in the default implementation annOptions. Apply the strategy as appropriate.
    • Add an optional field to typeDoc which allows specifying the strategy.
    • See also the corresponding morley changelog.

0.15.0

  • !1273 Add LAMBDA_REC and Lambda_rec support
    • framed instruction moved to Lorentz.Instr.Framed (re-exported from Lorentz.Instr).
    • IsoValue and HasAnnotation instances for (:->) are replaced with type-errored ones, as Lorentz code is no longer isomorphic to lambdas.
    • TypeHasDoc instance for (:->) removed.
    • WrappedLambda is now a sum datatype.
    • unWrappedLambda removed, as recursive lambdas can't be unwrapped like that.
    • All lambda-related instances moved to Lorentz.Lambda.
    • lambdaRec instruction introduced.
    • mkLambdaRec helper for constructing recursive lambda values introduced.
  • !1278 Deprecate timelock-related functions
  • !1270 Add lima protocol TICKET instruction, rename old one to TICKET_DEPRECATED
    • The TICKET instruction was renamed to TICKET_DEPRECATED
    • A new TICKET instruction was added which no longer allows zero amount tickets. It now returns Some Ticket and None in case of zero amount supplied.
  • !1267 Added Lorentz.ADT doctests examples / tests
  • !1271 Miscellaneous chores
    • Add Buildable instances for ZippedStackRepr and ZSNil.
    • Export DupT and DipT classes from Lorentz.Referenced.
  • !1252 Better errors on stuck GetEntrypointArgCustom
  • !1233 Rename Lorentz.Rebinded to Lorentz.Rebound
  • !1242 Use Constrained utility existential
  • !1180 Implement lmap for more types, and change signature of the typeclass to be more pure.
  • !1178 Add HasNoNestedBigMaps t constraint where required.
    • These constraint were missing on TZIP-16 views, but effectively it is required by the network for callbacks. This is a consequence of adding this constraint to Contract t in Morley.
  • !1222 Change the constraints on constructStack and deconstruct in Lorentz.ADT, and on documentEntrypoints in Lorentz.Entrypoints.Doc. Code using them in surprisingly polymorphic ways may need minor adjustments. Applications of these functions should now be faster to typecheck and also faster to run.
  • !1216 Remove KnownList constraints from euclidExtendedNormalization and reduceRationalHelper in Lorentz.CustomArith.RationalArith.
  • !1198 Implement dipT using dipN for performance. This change also allows dipT to be used without an explicit type argument when enough is known about the passed stack action. Do the same for dupT, using dupN.

0.14.1

  • !1214 Add emit instructions
  • !1202 Make type errors less confusing when types are ambiguous
  • !1177 Distinguish implicit/contract aliases and addresses on the type level
  • !1136 Add idiv and imod macros to Lorentz.
  • !1181 Add a few missing instances
    • CanCastTo instances for ZippedStackRepr and WrappedLambda,
    • Generic and MapLorentzInstr instances for WrappedLambda,
    • HasAnnotation instances for ZippedStackRepr.

0.14.0

  • !1123 Remove deprecated exports
  • !1169 Support MIN_BLOCK_TIME instruction
    • Add the corresponding Lorentz minBlockTime instruction.
  • !1158 Refactor (out) annotation checking support
    • iWithVarAnnotations removed.
    • Initial cast in lorentz contracts is redundant since annotations are ignored, hence it is removed.
    • Hence, coDisableInitialCast and coDisableInitialCastL are removed.
  • !1163 Prohibit some operations in views
    • ContractCode is now a newtype wrapper instead of type synonym; this is required to avoid accidentally pasting contract code in views.
    • Lorentz lambdas are now newtype-wrapped with WrappedLambda, for the same reason.
    • Lambda is a type synonym for WrappedLambda with singleton input and output stacks.
    • The old Lambda synonym (which was a sequence of instructions with singleton i/o stacks) is renamed to Fn.
    • New "smart" constructors, mkContractCode and mkLambda, which conjure the required constraints.
  • !1153 Remove 'OpSize' module.
  • !1114 Update to ghc-9.0.2
  • !1108 Remove support for the deprecated morley extensions
  • !1007 Add Rational datatype in Lorentz and arithmetic operations with it
    • Move all custom arithmetics in Lorentz the a separate module
  • !1146 Optimize lmap for Maybe.
  • !1111 Add errorDocArg, deprecate errorDoc
    • Added errorDocArg, a quasi-quoter replacing errorDoc. The main difference is errorDocArg allows optionally specifying the error argument type.
    • Since errorDocArg subsumes errorDoc, the latter is deprecated.

0.13.4

  • !1078 Option to flatten EpdRecursive entrypoints in autodoc
    • New entrypoint kind FlattenedEntrypointsKindHiding, which flattens entrypoints in autodoc and allows hiding specific constructors. For other intents it's the same as PlainEntrypointsKind.
    • Convenience synonym FlattenedEntrypointsKind for cases where no hiding is necessary.
    • New convenience functions entryCaseFlattened and entryCaseFlattenedHiding.
    • Deprecate redundant constructDEpArg, use mkDEntrypointArgSimple instead.
  • !1104 Use clearer notation for (-$)
    • Introduce new data types ZippedStackRepr a b = a ::: b and ZSNil = ZSNil, isomorphic to '(a, b)' and '()' respectively, to represent a zipped stack.
  • !1082 Fix/drop/comment noncanonical Show instances
  • !841 Make entrypoints derivation work with void-like entrypoint arguments.

0.13.3

  • !1100 Support map instruction over Maybe (a.k.a. option)
    • Add instance MapOpHs (Maybe e)
  • !1084 Switch to the new mutez subtraction operation
  • !1101 Export sopSetField and sopGetField from Lorentz.StoreClass
  • !1089 Enhance and rename mutez quasiquote
    • Export tz quasiquoter from Lorentz.Value and Lorentz.
  • !1071 Add HasRPCRepr typeclass
    • Move AsRPC type instances from the Lorentz.AsRPC module to the modules of their respective types.
  • !901 Weaken constraints of getField
    • getField and similar methods now require Dupable on the copied field and HasDupableGetters (defaults to Dupable) on the datatype.
  • !1060 Add Lorentz.AsRPC module containing instances for Morley.AsRPC type family
  • !978 Make it difficult to misuse 'Show'
    • Use Buildable and pretty preferrentially.
    • Avoid using (+||) and (||+).
    • Use Debug.show when defining Show instances.
  • !1062 Move senderIsNotAdmin Lorenz error to morley-ledgers repo
  • !997 Check necessity in initial cast automatically in Lorentz contracts
  • !1043 Extract actual + expected pattern into a datatype and show diff in type mismatch
  • !1037 Add synonyms for SomeConstrainedValue
    • Reimplement SomeConstant, SomeValue, SomeStorage via SomeConstrainedValue.
    • Add SomePackedVal = SomeConstrainedValue PackedValScope.
  • !1049 Delete unnecessary HasStorage constraints
    • Lorentz.Contract no longer requires ParameterDeclaresEntrypoints or HasAnnotation st.
    • Added NiceStorageFull constraint for when HasAnnotation st is actually needed.

0.13.2

  • !1041 createContract now returns TAddress, not Address

0.13.1

  • !1016
    • Add support for on-chain views.
    • Contract, TAddress and similar types has gained a new type argument designating the views set exposed by the contract. By default, set it to ().
    • The old A1 (aka TZIP-4) views - View type and related methods - were renamed via adding a _ suffix: View_, mkView_, wrapView_, e.t.c.
  • !1010 Add timelock puzzle support.
    • Add Lorentz instruction openChest.
    • Add OpenChest type, isomorphic to Either ByteString Bool
    • Add Lorentz types ChestT, OpenChestT, abstracting working with any type representable as ByteString (defined in Lorentz.Bytes).
    • Add openChestT Lorentz instruction for working with ChestT (defined in Lorentz.Bytes)

0.13.0

  • !915
    • Add Fixedpoint arithmetics to lorentz
    • Add additional NFixed datatype for natural fixedpoint values
    • Add typeclasses for rounding and casting fixedpoint values
    • Change behavior of lorentz arithmetic operations - now type of the result is specified by user.
    • Add ArithOpHs instance for EDiv instruction
  • !989 Switch from interpolate to home-grown string interpolation module
    • Note this changes the syntax of slices in md quasiquoter. Before we could use expressions #{expression}, now we can only use variable names #{name}.
  • !909
    • Update all instances of Named functions with patterns from Morley.Util.Named
  • !1000 Modify the cloneX macro to only use dups.
  • !937 Attach source code location to interpreter error messages
    • Changed morley interpreter error type from MichelsonFailed to MichelsonFailureWithStack
  • !945
    • Bump Stackage LTS version from 17.9 to 18.10.
  • !835
    • Added Lorentz.Tickets module with tickets arithmetics and common helpers.
    • Added Impossible error.
    • Added transferTokensE and pairE.
    • Moved NonZero to Lorentz.Macro.
    • Updated Wrappable:
      • Make separate Wrappable and Unwrappable typeclasses.
      • Old Unwrappable type family renamed to Unwrappabled.
      • Weaked permissions to perform some actions for some types. May now require unsafeCoerceWrap instead of coerceWrap.
  • !922 Replace lSignEd22519 with generic lSign
  • !881
    • Rename PrintedValScope to UntypedValScope with related types and functions.

0.12.1

  • !879
    • Add Buildable and RenderDoc instances for (:->) operator
    • Instances are based on transforming operator to Instr type and using its instances

0.12.0

  • !854

    • StoreHasField instance definition is no more necessary for simple ADT storage types.
  • !846

    • Reorganized Contract type and related stuff.
    • Added methods for reading Contract from file.

    Migration guide (sufficient unless you worked on framework internals):

    • In case you needed to use non-default contract compilation options, use mkContractWith now.

    For more details, see documentation of Lorentz.Run.

  • !832

    • Add tickets feature.
    • Add dupable restriction to dup-like instructions and some high-level helpers. See dup's documentation for notes on how to live in this brand new world.
    • Make parseNoEnv, readValue and other similar functions accept MichelsonSource instead of FilePath.
  • !838

    • All unsafe functions and data constructors now contain "unsafe" word at prefix position. E.g UnsafeMText, unsafeMkAnnotation.
  • !794 !833

    • Added Lorentz.Expr module with primitives for convenient expressions evaluation.
      • Added listE to construct an expression list from a list of expressions.
    • if ... then ... else now is polymorphic in the first argument.
      • Boolean expressions now can appear as condition for if.

0.11.0

  • !814

    • Added the usage of Prelude.Type instead of Data.Kind.Type, as a result Kind.Type was replaced with just Type.
  • !745

    • Generalize st* methods for working with storage. Now it is possible to access nested fields and submaps like stToField (#a :-| #b). This should not require any changes unless you keep you own generic helpers over those methods.

    • Existing StoreHasSubmap (Big?)Map anyName k v instance is replaced with two:

      • StoreHasSubmap (Big?)Map Self k v
      • StoreHasSubmap store name k v that delegates to StoreHasField.

      Migration guide:

      • If you have StoreHasSubmap instances for specific storage and name implemented via storeSubmapOpsDeeper, remove them and make sure you have a similar StoreHasField instance implemented via storeFieldOpsADT.
      • If you have storage which is directly a map, use this instead of label to access the map.
      • If you have an instance for a complex storage which is not represented as simple ADT, turn this instance into overlappable one. Make sure that name type parameter is of concrete type to avoid "overlapping instances" error.
      • The pattern when a datatype transparently provides access to its inner fields via an overlapping instance - may not work smoothly and produce "overlapping instances" error. To mitigate this do one of the following:
        • Specify the kind of name type parameter in your overlapping instance to be concrete (i.e. Symbol).
        • Use the new functionality to access the nested field by a fully qualified name.
  • !807

    • Add some instances to BigMap and TAddress types.
  • !787

    • Added new Edo macros: CAR k and CDR k as carN and cdrN.
  • !798

    • Added back the UnaryArithOpHs Abs Integer instance that was removed by accident.
  • !802

    • Add NiceParameterFull and NiceStorage constraints to Lorentz Contract constructor.
    • Moved coDisableInitialCast to CompilationOptions datatype.

0.10.0

  • !774
    • Added support for BLS12-381 crypto primitives (types, instructions, arithmetics).
    • Now it is possible to use int instruction for newtypes over Natural.
  • !786
  • !791
    • Add new Edo instructions: pairGet and pairUpdate.
  • !755 Restricted FAILWITH only to packable values, except CONTRACTs
  • !759
    • Add UnitErrorArg and NoErrorArg to be used with ErrorArg instance.
      • UnitErrorArg is preferred to ()
      • NoErrorArg allows failing with just a string instead of a pair string unit.
  • !764
    • Added Never type, deprecated Empty type.

0.9.1

  • !781
    • Replaced mixins and dependency on base with base-noprelude.
  • !751
    • Add new Edo instruction: LEVEL.
  • !741
    • Add new Edo instructions: SHA3 and KECCAK.

0.9.0

  • !731 Added GenericStrategy-ies for compatibility with LIGO.
  • !712 Add lenses for Lorentz contract config.
  • !684
    • Simplify working with autodoc in contracts (breaking change).
    • finalizeParamCallingDoc is now applied automatically when lorentz' Contract is used, no need to call it manually.

0.8.0

  • !671
    • Add TypeHasDoc instances for TAddress and FutureContract.
    • Add a generic instance DocItem (DEntrypoint ep). In case of getting overlapping instances, you have to implement EntrypointKindHasDoc instead.
    • Some error messages in doc tests are improved.
    • Some bugfixes for anchors.
    • Cases with contract logic residing outside of entrypoints are now better handled.
  • !665 Improve StorageContains to work for polymorphic case (when field is marked with Identity).
  • !679 Add dupLNamed.
  • !672
    • Add Packed, TSignature and Hash types.
    • pack and unpack now work with Packed instead of ByteString (for the sake of better type-safety). Either use Packed type, or packRaw/unpackRaw instructions.
    • checkSignature now works with Packed and TSignature.
    • blake2b and other hashing instructions now work with Hash.
    • If necessary, coersions can be used to switch between the mentioned types and raw ByteString.
  • !667
    • Modify representation of extended lambdas (arbitrary code used as lambdas is now packed into right-hand combs, not left-hand ones).
    • Add applicate macro.
  • !630 Use : in all library instructions instead of &.
  • !652 Update the ContractRegistry to be able to not require contract name for all its commands when there is only one contract.
  • !640 Change StoreSubmapOps to contain no optional methods.

0.7.1

  • !653 Added primitives for evaluating OpSize in Lorentz.
  • !651 Add dupL.

0.7.0

  • !629 All UStore modules has been moved to the morley-upgradeable repository. Now you have to include that repository to your build and import Lorentz.UStore.
  • !610 Remove Lorentz.TestScenario.
  • !585 Add HasAnnotation instance for ChainId.

0.6.2

  • !589 Add annOptions method in HasAnnotation which can be used to customize the generated annotations of a type.
    • Add helper functions to use with annOptions.
  • !591 Add dupTop2.

0.6.1

  • !533 Add entrypointDoc, typeDoc, and errorDoc quasiquotes which help generating typeclass instances.

0.6.0

  • !558 Added a new wrapOne to wrap a value in a constructor with a single field, because it has the advantage of having an input stack that does not depend on a type family.
  • !528 The generated documentation now contains a sample value of each entrypoint.
    • Allow modification of sample value via mkDEntrypointExample.
  • !493 Add support for root entrypoint.
    • A contract can now specify whether or not the root annotation should be generated and which name it should use.
    • self and contract instructions are able to call the root entrypoint.

0.5.0

  • !530 Field annotation are now generated for sum-type in parameter and storage.
    • It also ensures that it will not generate field annotations that would introduce extra entrypoints.
  • !371 Make view_ argument accept 2 arguments rather than a pair.
  • !486 Add customGeneric to derive Generic instances with a custom tree structure and, consequently, IsoValue instances with such a structure.
  • !483 Add a way to generate field annotations for entrypoint parameter.
  • !470 Move Lorentz.Test and Hedgehog generators to a new package: cleveland.
  • !357 Remove deprecated Lorentz.Store module and deprecated custom error functionality.

0.4.0

  • !449
    • Improve Lorentz.Test.Integrational interface.
    • Remove IntegrationalValidator, SuccessValidator, validate, composeValidators, composeValidatorsList, expectAnySuccess.
    • Add unexpectedInterpreterError, attempt, catchExpectedError.
    • Change type of expect*/tExpect*/lExpect* functions. They now return IntegrationalScenario instead of SuccessValidator / Bool.
    • Rename ValidationError to TestError
    • Replace TestError's UnexpectedExecutorError constructor with InterpreterError and UnexpectedInterpreterError.
  • !432 Add whenNone to Lorentz.
  • !398 Add StoreHasEntrypoint class to conveniently use entrypoints as lambdas stored into big_map(s) to make use of lazy evaluation.
  • !409
    • Add hedgehog support
  • !303
    • Functions for working with UStore from Haskell world (e.g. fillUStore) now have a different constraint.
    • UStore templates are now documented and thus may require instance of the respective typeclass.

0.3.0

  • !417 Change the license to MIT.
  • !360
    • Add compileLorentzWithOptions function that accepts optional Michelson optimizer configuration and string transformer function. Changed compileLorentz to call the optimizer with the default configuration.
    • Add Lorentz.Contract data type as a wrapper for Lorentz.ContractCode and Lorentz.CompilationOptions. Require that all contracts are wrapped in this data type.
  • !354
    • Add constructStack function that constructs a datatype from fields on the stack.
    • Add deconstruct function that deconstructs a datatype to its fields on the stack.
  • !358 Removed deprecated STEPS_TO_QUOTA instruction.
  • !337 Added comment, commentAroundFun and commentAroundStmt to generate comments in Michelson code.

0.2.0

  • !346 Added docStorage and contractGeneralDefault.
  • !306 Deprecated mapMigrationCode in favor of MapLorentzInstr.
  • !326 Updated contract registry (Lorentz.ContractRegistry):
    • Now it can print initial storage apart from contract and documentation.
    • Some extra fields were added to ContractInfo.
    • Logic is captured in the runContractRegistry function.
    • If you don't specify output file, we will use a file with name constructed from contract name. Pass - if you want stdout.
  • !245 Added HasTypeAnn instance for FutureContract arg.
  • !294
    • Added Paths_* modules to autogen-modules in cabal files. Removed -O0
    • from default GHC options. Please set ghc-options in your stack.yaml or cabal.project.local.
  • !271 Renamed 'Contract' to 'ContractCode', and appended "Code" to the names of two functions: 'convertContract' and 'printTypedContract'
  • !267
    • Retain type annotations in entrypoints derivation.
    • Remove overlappable HasTypeAnn instance defined for nearly each type. Add default getTypeAnn method definition instead and manually define HasTypeAnn instance for each type instead (trivially). When you create a new data type with IsoValue instance, you usually have to derive HasTypeAnn as well.

0.1.0

Initial release extracted from the morley package.