Pact 4
4.11.0
Minors
- Support for verifier plugins 
- Support for - hyperlane-message-id
- Support for decoding a hyperlane TokenMessage 
Patches
- Fix bug in enforce-pact-version parser 
- Fix pact CLI usage output to use correct naming 
- Fix - stepfor- defpacts in typechecker
May 21, 2024
Contributors
4.8.0
Patches
- Fix name resolution within module redeploy 
- Fixed issue with the hash of cap guards, - hashnative and principals
- Fixed error message for calling a non-function value 
Misc
- Tweaked the gas of concat , reverse and format 
- Allow computation on integers less than 10^80 without gas penalty 
- More granular gas units 
- Remove GHCJS support 
- GHC 9.6+ version support 
- Package docs in nix flake 
- Vendor sources of prettyprinter-1.6.0 
- Use MTL 2.3+ 
- replace cryptonite by crypton 
- Support lambdas in static typechecker 
- Fix swapped type assignment in fold symeval 
- Improve modref docs 
4.7.1
Patches
- Refactored test to avoid - runIOwithin tests
- Add - CoverageSpec
- Fix - ReplSpectests
- Cleanup - PactContinuationSpec
4.7.0
Misc
- Improve advice implementation 
- Fix inconsistent trace output 
- Fix coverage, restore defun advice 
- Create persistence dirs if missing 
- Differentiate between errors on-chain and off-chain 
- Don't display function documentation in non-repl context 
- Runtime type checking on return types now enforced 
- Allow native function versioning in eval 
- Add new native - decfor integer to decimal conversion
- Implement - shiftin terms of other natives for better gas costing
- Intialize body of - env-datato an empty object instead of Null
- read-*functions are now recoverable if the key doesn't exist. That is, a call such as- (read-string 'keyis recoverable if- 'keydoes not exist in the data payload by surrounding it with- try. As an example,- (try "string if key isn't present" (read-string "key". This applies to- read-integer,- read-string,- read-decimal,- read-keysetand- read-msg(as long as- read-msghas a key supplied as an argument.
- Fix Typechecker treatment of special binding forms 
- Enable warnings during symbolic eval 
- Remove - emit-eventshim
- Remove - hashshims
- Remove - enumerateshim
- Remove - distinctshim
- Remove - describe-namespaceshim
- Remove - is-principal,- typeof-principal,- create-principal, and- validate-principalshims
- Remove - formatshim
- Remove mention of private defpacts from the reference manual 
- Add documentation for - enumerate
- New PR and Issue templates introduced. 
4.6.0
Misc
- Add - DisablePact46execution flag
- Add Zero Knowledge native operations 
- Add deprecation warning system 
- Build support for Nix flakes 
- Passage of time simulation in local pact server build 
- Fixed parsing failure message for Public Keys 
- printnative now pretty prints output using term pretty printing
- Typechecker: - now handles all const value types
- inlines mock dynamic references
 
- Formal Verification: - Prevent usage of resultfixed binding indefpactverification.
- Warning added for invaliding models when decimals are too high a precision
- Typechecker now correctly infers function type arguments
- Added debug flag to verifynative, allowing outputs to be directed to SMTLib file on a per-module basis.
- Add shim for selectin FV
 
- Prevent usage of 
4.4.1
Misc
- Export - ApiReqconstituent data structures
- Fix test tree creation to allow tests to run faster, safer to run on a single core, and prevents test servers from being exposed to public environs 
- Added capability guards 
- Lazily evaluate - enforceto reduce gas usage on evaluation
- Gas adjustment for various natives 
- Fix FV regression that disallowed the verification of unary operators like - abs
- Documentation link fixes (thanks @przemeklach! 
4.4
Misc
- Document VSCode support - thanks JeremeyJS! 
- Documentation fixes - thanks JCM00N and Luzzotica! 
- Gas-related bug fixes and adjustments to - formatand- try
- Defined keysets are now required to be namespaced 
- Consolidated Pact 4.4 execution config flag (removes need for - DisablePreserveNamespaceUpgradeflag
May 9, 2024
Contributors
May 24, 2024
Contributors
4.2.0
Misc
- Language features: - Lambdas: let-bound function definitions
- In-line lambdas @ application use sites:
- Provide equality for modrefs
 
- Bug Fixes - Fixed formal verification for take/drop functions
- Internal native fix
- Fix schema unification on module upgrades
- Docs expression evaluation fixed
- Allow self modrefs
 
- New Natives - zipnative
- condsyntactic form
- fold-dbnative
 
- Persistence improvements - Versoned PactValue persistence
- Fix modref payload serialization, decouple from persistence backcompat
- Run Repls with Sqlite backend
 
4.1.2
Misc
- Enforce key format in keyset creation 
4.1
Misc
- [Typechecking/FV] Support dynamic refs in TC/analyze - adds 'env-dynref' REPL builtin for mocking interfaces
- improved/automatic shimming of natives in TC
 
- [Code Coverage] Write - coverage/lcov.inforelative to loaded file
- [Build Tooling] - Add build-tool flag to shrink library build
- Build-related
- CI-related
 
4.0.1
Misc
- Add "advice" plus LCOV code coverage - General advice mechanism for e.g. instrumenting performance bracketing
- -cin pact tool outputs coverage to- coverage/lcov.inforelative to loaded file
 
- Emit synthetic cross-chain events - Emits X_YIELDon cross-chain initiation andX_RESUMEon cross chain resumption for any defpact:- (pact.X_YIELD targetChain:string continuationName:string continuationArgs:[*]
- (pact.X_RESUME sourceChain:string continuationName:string continuationArgs:[*]
 
- Thus a cross-chain transfer send from 0 to 1 would be (pact.X_YIELD "1" "coin.transfer-crosschain" ["Bob" "Alice" 10.0]on chain 0 then(pact.X_RESUME "0" "coin.transfer-crosschain" ["Bob" "Alice" 10.0]on chain 1.
 
- Emits 
- Support blessed modules and add source chain in crosschain - Blessed modules are now supported for resuming cross-chains initiated pre-upgrade.
- Initiation of cross-chain captures/transmits source chain in output in field .continuation.yield.sourceChain
 
- New natives - enumerateto build sequenced lists
- str-to-listand- concatto transform strings to arrays and back
- distinctto de-dupe lists
- emit-eventto not fire event defcaps when emitting, and allowing arbitrary parameter values
 
- Miscellaneous - Elide info from Modref JSON
- Move SigData and related types into library
- More robust TH and avoid deprecated use of star
- Enable benchmarks in nix ghc build
- Remove thyme dependency
- Remove swagger support
- Add time benchmarks
- Remove setup from gas results
- Improve gas golden output
- Conditional z3 and servant
 
3.5.2
Misc
- ApiReq: expose builder, migrate String -> Text 
- Fix install module governance issue 
3.5.1
Misc
- NFDatainstances for common Pact Service types
- Analysis : - Soft support for is-charset(analysis does not choke on this primitive
- Fix column delta calculation
- Static Cap tracing
- Upgraded to SBV 8.6
 
- Soft support for 
- Additional benchmarks for 10x operations/tx 
- Fix bad commandline rendering from tool on load failure 
- Better sanitization of sqlite db names 
- Bugfix for - base64primitives
3.5.0
Misc
- Add the commands - sign,- add-sig, and- combine-sigsfor working with signatures
- Decode StackFrame in JSON output 
- CommandResult golden coverage 
- Use CFFI for aeson (upstreamed from chainweb 
- Add gas logs to eval result 
- Add missing case in Eval 
- Misc updates to docs 
- Add "Literate Flags" in execution config 
- Add flag to allow reads in local 
May 14, 2024
Contributors
3.4.0
Misc
- Improve ApiReq for creationTime, TTL, haddocks for PublicMeta and friends 
- Allow for flexible interface manager spec, and "auto-managed" caps 
- Cover module persistence with golden test 
- Execution config 
- Fail - define-namespaceon bad atom structure
- Finalize gas model 
- Use ByteString readFile and explicit UTF8 decoding 
- Enable autonomous managed capabilities 
- benchmark and improve rounding 
-
3.3.1
Misc
- base64-(encode|decodenatives
- Bugfix: you can now declare user guards as constants 
- keysets are now set-based so that keyset equality works regardless of key order 
- Bugfix: module guards with managed caps on demand installs works properly 
- Signature checks only consider acquired and pending caps 
- Better docs all around 
-
3.3.0
Misc
- Managed capabilities (see documentation 
- Production Gas model v1 
- Added signing utilities 
- Interfaces now admit - defcap,- defschema, and- defpactdeclarations
- Add explicit import system. Users may now import function, constant and schema symbols 
- Enforce unique names for in-module declarations 
- Typechecking interfaces now succeeds 
- Previous block hashes added to public data 
- TTL + creation time added to public data 
- Added new natives: - is-charset: provides support for testing string conformity with a given charset.
- CHARSET_LATIN1: built-in constant defining the latin1-charset
- CHARSET_ASCII: built-in constant defining the ascii-charset
- test-capabilityoverload for granted capabilities
- expect-failureoverload allowing users to match on substrings of errors Currently suppported charsets include: ASCII and ISO 8859-1 (latin1 supplement character sets
 
- Bug fix disallowing access to Capabilities via FQN 
- Steps with rollbacks now disallowed w/ cross-chain yields 
- Network-id requirement in payloads 
- Analysis: - list and object length analysis
- with-default-readanalysis bugs fixed
- Unbound column invariants
- vacuous property detection and report
 
-
3.2.1
Misc
- New native function - tryhas been added
- Bug fixes to the typechecker 
- Improved documentation 
-
3.2.0
Misc
- All non key-related data for - decrypt-cc20p1305is now required to be base64-encoded
- Improved documentation 
- Analysis: - bitwise operators are now supported
 
-
3.1.0
Misc
- Add SPV endorsement functionality to - defpacts
- '=' now compares only like terms 
- User guards can now be created as closures of boolean-valued functions 
- Improved swagger documentation 
- Improved error messages 
- Added new decryption and keypair validation primitives for CHACHA20-POLY1305 Authenticated Encryption with Associated Data (AEAD 
- Added bitwise integer native functions - &,- ~,- shift,- xor, and- |
- Add user-facing - chain-datanative schema type
- Documentation for namespaces and interfaces 
- Add base-64 case to - str-to-intand improve error messages
- Add - int-to-strnative
- Analysis: - traces now render on same line
- added support pact step signatures, and governance analysis
- added support for chain-datapact native
- upgrade z3 version support to 4.8.5
- Scope checking for interfaces
 
-
3.0.1
Misc
- Check for module in stack when enforcing module guard 
- Output test failures on error 
- fix describe table output and meta pretty instance 
-
3.0.0
Misc
- Guards and capabilities, with full model-checking support 
- Scoped namespaces for modules and keysets 
- Adds module governance function 
- Migrate all runtime pact state to DB backend: modules, pacts, transaction ID management 
- Improved transaction non-malleability: signatories and chain version in payload 
- Adds SPV support with configurable backend 
- Multiple Cryptographic signature schemes: ED25519, ECDSA 
- Adds Table-based Gas model 
- Standardize on CommandResult in all API endpoints 
- CommandResult adds gas consumed, logs, and metadata fields 
- CommandResult's "result" field changed to output reliable, user-friendly Terms and errors. 
- Adds continuation proof field to ContMsg 
- Adds public metadata to Pact Command API 
- Format all hashes in Base64url 
- Adds typechecking for lists, - yield, and- resume
- Typechecker and analysis support for partial schemas 
- Removes support for non-string keys in objects 
- Rejects decimal literals with too many digits 
- defpactcan run in local mode
- Disallow rollback on the last step of a pact 
- Replaces REPL's - env-stepand- env-pactidwith- continue-pactand- pact-state
- Adds REPL functions - chain-dataand- env-chain-data
- Better compile and typecheck errors 
- Pretty printing 
- Working Windows build 
- Analysis: - Adds analysis for non-literal constants
- Adds pact analysis tools developer guide
- Adds analysis for pact-id,defpact,yield, andresume
- Improves output from verification
- Supports analysis of (bounded-size lists and nested objects
- Pins z3 to a specific version (4.8.3
- Uses timeout of 1 second for all z3 queries
 
- Swagger for API 
-
2.6.1
Misc
- Korean readthedocs 
- Interfaces copy models onto implementing modules 
- Better/tighter compile phase, remove TBless, TImplements 
- Fix bug preventing correct reporting of argument values in falsifying models from the property checker 
-
2.6.0
Misc
- Pact Interfaces 
- Localized docs in JP, EN 
- Add configurable gas limit for - pact -s
- Remove file server from - pact -s
- Fix empty list runtime type enforcement bug 
- Enforce top-level only for builtins - pact-version,- enforce-pact-version, etc
- Various changes to support web repl 
- use cryptonite for Blake2 implementation 
- new - str-to-intbuiltin
- Numerous fixes to pact reference docs 
- New compiler using megaparsec 
- analysis supports - str-to-intand- read-integerbuilt-ins
- new - row-exists,- read,- column-of,- column-writtenproperties
- @modelnow always takes a list when applied on modules, functions, or schemas.
- properties can now be applied to an entire module 
- Fix bug in analysis impl of decimal arithmetic 
- Model falsifications are now presented as execution traces with example values 
-
2.5.1
Misc
- Fix keyset enforce of old keyset 
-
2.5.0
Misc
- Pluggable gas model with simple fixed-rate implementation 
- "Pact" continuation API support 
- Allow qualified keyset predicate function names 
- Allow commas to delimit list literals 
- Improve cp example: authorization, load scripts 
- Accept keyset name as string 
- Document Pact database backend format 
- Nix build support 
- Break up Lang and Runtime type files Analysis: - New @model/@docsyntax.
- We now display all the argument and variable values, reads, writes, keysets, and function result for invalidating models.
- Introduced row-read-countandrow-write-count, specifying the number of times a row is read or written.
- Table quantification: it's now possible to quantify over tables, though in this release you can't yet quantify over columns.
- Object literals and atnow work in properties. Object comparison with=and!=also now works.
- Analysis now typechecks references to tables (ie it knows table schemas and the types you can read and write to them and return types.
- verifynow typechecks- defconsts, so it now checks a superset of- typecheck.
- We now check each invariant individually and give a separate invalidating model for each invariant.
- Property parse errors are now less confusing and include location info.
- read-decimaland- enforce-oneare now supported.
- Bug fix: Analysis of andandornow (correctly short-circuits.
- The property checking system is now included in the documentation.
- defproperty: New properties can now be defined at the module level.
 
- New 
-
2.4.1
Misc
- Fix support for property checker in Atom 
-
2.4.0
Misc
- Preview support of of property-based formal verification 
- Fix fold type signature 
- Refactor ghcjs code into external project 
- Various bug fixes in typechecker 
- GHC 8.4 support (semigroup instances, statistics-0.14 
- "No-Leftpad" dependency management implementation 
- Nested schema support 
-
2.3.8
Misc
- Pact tool improvements: auto-complete, readline support, better multiline 
- Fix documentation for - formatform
- Internal changes: TableName in AST, expose evalRepl', token parsing 
- build improvements: weeder, hlint enforcement 
-
2.3.7
Misc
- keylogreturns rows indexed by txid
-
2.3.6
Misc
- Support for reading JSON arrays/objects to pact lists/objects 
- Microsecond support in time objects 
- new - keylogfunction for obtaining logs by key
-
2.3.5
Misc
- Fix issue where extra parens silently ignored in repl scripts/prompt 
-
2.3.4
Misc
- pacttool improvements: better stdin support, '-d' for debug output of load
-
2.3.3
Misc
- Bugfix for - andregression
-
2.3.2
Misc
- ghcjs build working, typechecking not supported in browser yet 
- native blake2 support, only for ghcjs 
- Restore callstack, better rendering, runtime errors at top callsite 
-
2.3.1
Misc
- containsadded
- drop,- takefor objects
- allow empty objects 
- short-circuiting - and,- or
- constantly,- identityadded
-
2.3.0
Misc
- "Pure" execution capability, used in keyset enforcement 
- enforce-oneadded
- Pact tests counted in HUnit results 
- defpact overhaul to support public/escrow 
- New query model: - select,- where,- and?/or?/not?
- reverseand- sortadded
- Better typechecking on partial application, TC bugfixes 
- BREAKING: - formattakes list instead of var args
- BREAKING: - pact-idreplaces- pact-txid
- Consts memoized at load 
- enforce-versionadded
-
2.2.3
Misc
- Pact tool now supports '-a' to format API requests and '-g' to generate ED25519 keypairs 
- Fixed error output (was breaking Atom parsing 
- Changelog removed from reference docs 
-
2.2.2
Misc
- Module Hashes: - usesupport
- use accepts barewords 
- better output in - describe-module
- list-modulesadded
- printREPL command
- "transactional awareness" in Persist 
-
2.2.1
Misc
- yieldand- resumeadded for use in defpacts
- yielded,- sig-keysetrepl functions
- JSON defaults for keysets, better dispatch of builtin preds 
- pact-versionfunction added.
-
2.2.0
Misc
- Privacy API: - privateendpoint, address fields in command
- Typechecker support for - at,- filter,- map,- fold,- compose
- Persist layer standardized for easier extension 
- Library features: Interpreter module, NFData all the things, Eval uses exceptions 
- Types module breakup 
-
2.1.0
Misc
- "pact -serve": new REST API server for app development 
- pact-lang-api.js javascript package 
- jsonrepl function,- read-msgcan take zero args to get entire data payload
-
2.0.0
Misc
- Support for types: inference, runtime enforcement, typechecking 
- Numeric negation literals 
- deftable,- defschemain module definitions
- with-keysetnow- enforce-keysetwith no body
-
1.0.1
Misc
- New function - listModules, improved- describeModule
- REPL function - loadwith optional reset arg