- Document VSCode support - thanks JeremeyJS! (#965)
- Documentation fixes - thanks JCM00N and Luzzotica! (#1003, #1021)
- Gas-related bug fixes and adjustments to
formatandtry(#1020, #1019) - Defined keysets are now required to be namespaced (#1011)
- Consolidated Pact 4.4 execution config flag (removes need for
DisablePreserveNamespaceUpgradeflag, #1026)
- Interpreter improvements (#970)
- New
create-principalandvalidate-principalnatives (#969) - Fixes to name resolution (#987)
- New nested defpacts +
continuenative (#980)
- Backport chainweb gasmodel (#978)
- Memory improvements (#964)
- Force eof in parseExprs (#963)
- Fix
pact add-sig(#981)
-
Language features:
- Lambdas: let-bound function definitions (#915)
- In-line lambdas @ application use sites: (#954)
- Provide equality for modrefs (#951)
-
Bug Fixes
- Fixed formal verification for take/drop functions (#921)
- Internal native fix (#945)
- Fix schema unification on module upgrades (#948)
- Docs expression evaluation fixed (#946)
- Allow self modrefs (#950)
-
New Natives
zipnative (#922)condsyntactic form (#938)fold-dbnative (#941)
-
Persistence improvements
- Versoned PactValue persistence (#926)
- Fix modref payload serialization, decouple from persistence backcompat (#949)
- Run Repls with Sqlite backend (#934)
- Enforce key format in keyset creation (#918)
- Guard for recursion at runtime on user apps (#913)
- FV and TC give real errors (and warnings), improve model failure output (#904)
- Fix nested capability acquisition (#910)
- Add support for empty import lists when module hashes are present (#901)
- [Typechecking/FV] Support dynamic refs in TC/analyze (#894)
- adds 'env-dynref' REPL builtin for mocking interfaces
- improved/automatic shimming of natives in TC
- [Code Coverage] Write
coverage/lcov.inforelative to loaded file (#883) - [Build Tooling]
- Add build-tool flag to shrink library build (#882,#892,#891,#889)
- Build-related (#895,#885,#877)
- CI-related (#880,#890,#881,#884)
- Add "advice" plus LCOV code coverage (#861)
- General advice mechanism for e.g. instrumenting performance bracketing
-cin pact tool outputs coverage tocoverage/lcov.inforelative to loaded file
- Emit synthetic cross-chain events (#875)
- 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 (#862)
- 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 (#859,#874,#860,#862)
enumerateto build sequenced listsstr-to-listandconcatto transform strings to arrays and backdistinctto de-dupe listsemit-eventto not fire event defcaps when emitting, and allowing arbitrary parameter values
- Miscellaneous
- Elide info from Modref JSON (#856)
- Move SigData and related types into library (#852)
- More robust TH and avoid deprecated use of star (#870)
- Enable benchmarks in nix ghc build (#869)
- Remove thyme dependency (#867)
- Remove swagger support (#866)
- Add time benchmarks (#868)
- Remove setup from gas results (#865)
- Improve gas golden output (#864)
- Conditional z3 and servant (#850)
- Module References (#817,#839)
- Pact Events:
- Backward compatible JSON (#820)
- @event tag for capabilities (#830)
env-eventsfor testing (#827)
- Fix runtime typechecker for lists (#825)
with-applied-env,expect-thattesting tools
- Pact events (#819)
- Type-only module reference support (#814,#816)
- Update SBV and other deps (#812)
- ApiReq: expose builder, migrate String -> Text (#805)
- Fix install module governance issue
NFDatainstances for common Pact Service types (#800)- Analysis (#798):
- 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 (#795)
- Fix bad commandline rendering from tool on load failure (#793)
- Better sanitization of sqlite db names (#787)
- Bugfix for
base64primitives (#788)
- Add the commands
sign,add-sig, andcombine-sigsfor working with signatures (#759) - Decode StackFrame in JSON output (#755)
- CommandResult golden coverage (#754)
- Use CFFI for aeson (upstreamed from chainweb) (#749)
- Add gas logs to eval result (#748)
- Add missing case in Eval (#764)
- Misc updates to docs
- Add "Literate Flags" in execution config (#722)
- Add flag to allow reads in local (#777)
Note this is the version that deploys with Chainweb 1.4.x, with a finalized gas model and managed capability improvements (auto-management, autonomous management)
- Improve ApiReq for creationTime, TTL, haddocks for PublicMeta and friends (#753)
- Allow for flexible interface manager spec, and "auto-managed" caps (#746)
- Cover module persistence with golden test (#745)
- Execution config (#741)
- Fail
define-namespaceon bad atom structure (#737) - Finalize gas model (#734)
- Use ByteString readFile and explicit UTF8 decoding (#735)
- Enable autonomous managed capabilities (#733)
- benchmark and improve rounding (#732)
base64-(encode|decode)natives- 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
- Managed capabilities (see documentation)
- Production Gas model v1
- Added signing utilities
- Interfaces now admit
defcap,defschema, anddefpactdeclarations - 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-charsetCHARSET_ASCII: built-in constant defining the ascii-charsettest-capabilityoverload for granted capabilitiesexpect-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
- New native function
tryhas been added - Bug fixes to the typechecker
- Improved documentation
- All non key-related data for
decrypt-cc20p1305is now required to be base64-encoded - Improved documentation
- Analysis:
- bitwise operators are now supported
- 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
- Check for module in stack when enforcing module guard
- Output test failures on error
- fix describe table output and meta pretty instance
- 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, andresume - 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-stepandenv-pactidwithcontinue-pactandpact-state - Adds REPL functions
chain-dataandenv-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
- 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
- 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-intandread-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
- Fix keyset enforce of old keyset
- 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 typechecksdefconsts, so it now checks a superset oftypecheck.- 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-decimalandenforce-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
- Fix support for property checker in Atom
- 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
- 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
keylogreturns rows indexed by txid
- Support for reading JSON arrays/objects to pact lists/objects
- Microsecond support in time objects
- new
keylogfunction for obtaining logs by key
- Fix issue where extra parens silently ignored in repl scripts/prompt
pacttool improvements: better stdin support, '-d' for debug output of load
- Bugfix for
andregression
- ghcjs build working, typechecking not supported in browser yet
- native blake2 support, only for ghcjs
- Restore callstack, better rendering, runtime errors at top callsite
containsaddeddrop,takefor objects- allow empty objects
- short-circuiting
and,or constantly,identityadded
- "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? reverseandsortadded- Better typechecking on partial application, TC bugfixes
- BREAKING:
formattakes list instead of var args - BREAKING:
pact-idreplacespact-txid - Consts memoized at load
enforce-versionadded
- 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
- Module Hashes:
usesupport - use accepts barewords
- better output in
describe-module list-modulesaddedprintREPL command- "transactional awareness" in Persist
yieldandresumeadded for use in defpactsyielded,sig-keysetrepl functions- JSON defaults for keysets, better dispatch of builtin preds
pact-versionfunction added.
- 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
- "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
- Support for types: inference, runtime enforcement, typechecking
- Numeric negation literals
deftable,defschemain module definitionswith-keysetnowenforce-keysetwith no body
- New function
listModules, improveddescribeModule - REPL function
loadwith optional reset arg