Skip to main content

Changelogs

Changelogs

Pact 4

May 21, 2024

Contributors

    emilypiDevopsGothrsoeldnerchessai

4.12.0

Minors

  • Support for keccak256 native

  • Add poseidon hash alias as hash-poseidon

Patches

  • Fixed parsing of difftime as a property

Misc

  • Added pact version command to verify linking

May 21, 2024

Contributors

    jmcardonchessaikyoshisukisirlensalotemilypirsoeldneredmundnobleimalsogreg

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 step for defpacts in typechecker

Misc

  • List-modules moved to local-only

  • Update pact server typo

  • Deprecate readthedocs

May 21, 2024

Contributors

    0xd34df00drsoeldneremilypiimalsogregedmundnoblejmcardondavibauer

4.10.0

Minors

  • Webauthn support in key formats

  • New poseidon-hack-a-chain native for the "Poseidon" hashing function

Patches

  • Gas model fix for concat

  • Fix FV str-to-int

Misc

  • Vendor webauthn dependency

May 10, 2024

Contributors

    jmcardonimalsogreg

4.9.0

Minors

Patches

  • Pact value infos fixed

May 21, 2024

Contributors

4.8.0

Patches

  • Fix name resolution within module redeploy

  • Fixed issue with the hash of cap guards, hash native 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

May 21, 2024

Contributors

    rsoeldneremilypijmcardonjwiegleyedmundnoble

4.7.1

Patches

  • Refactored test to avoid runIO within tests

  • Add CoverageSpec

  • Fix ReplSpec tests

  • Cleanup PactContinuationSpec

Misc

  • Add feature flag FlagDisableRuntimeTypeChecking for disabling runtime typechecking introduced in Pact 4.7

  • Fixed empty list type defaulting to any

  • Fixed partial biniding

  • Cleanup [README.md](README.md

  • Bump Z3 versions in GH actions

May 21, 2024

Contributors

    sirlensalotrsoeldneremilypijmcardonimalsogregjwiegleyCryptoPascal31DevopsGoth

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 dec for integer to decimal conversion

  • Implement shift in terms of other natives for better gas costing

  • Intialize body of env-data to 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 'key is recoverable if 'key does 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-keyset and read-msg (as long as read-msg has a key supplied as an argument.

  • Fix Typechecker treatment of special binding forms

  • Enable warnings during symbolic eval

  • Remove emit-event shim

  • Remove hash shims

  • Remove enumerate shim

  • Remove distinct shim

  • Remove describe-namespace shim

  • Remove is-principal, typeof-principal, create-principal, and validate-principal shims

  • Remove format shim

  • Remove mention of private defpacts from the reference manual

  • Add documentation for enumerate

  • New PR and Issue templates introduced.

May 21, 2024

Contributors

    jmcardonjwiegleyqooboodooplarskuhtzrsoeldnersirlensalotemilypi

4.6.0

Misc

  • Add DisablePact46 execution 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

  • print native now pretty prints output using term pretty printing

  • Typechecker:

    • now handles all const value types
    • inlines mock dynamic references
  • Formal Verification:

    • Prevent usage of result fixed binding in defpact verification.
    • Warning added for invaliding models when decimals are too high a precision
    • Typechecker now correctly infers function type arguments
    • Added debug flag to verify native, allowing outputs to be directed to SMTLib file on a per-module basis.
    • Add shim for select in FV

May 26, 2024

Contributors

    mightybytelarskuhtzsirlensalotslpopejoyjmcardonjwiegleyprzemeklach

4.4.1

Misc

  • Export ApiReq constituent 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 enforce to 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!

May 14, 2024

Contributors

    jeremyjsemilypiJCM00NLuzzoticajmcardon

4.4

Misc

  • Document VSCode support - thanks JeremeyJS!

  • Documentation fixes - thanks JCM00N and Luzzotica!

  • Gas-related bug fixes and adjustments to format and try

  • Defined keysets are now required to be namespaced

  • Consolidated Pact 4.4 execution config flag (removes need for DisablePreserveNamespaceUpgrade flag

May 9, 2024

Contributors

4.3

Misc

  • Interpreter improvements

  • New create-principal and validate-principal natives

  • Fixes to name resolution

  • New nested defpacts + continue native

May 9, 2024

Contributors

    jmcardonlarskuhtz

4.2.1

Misc

  • Backport chainweb gasmodel

  • Memory improvements

  • Force eof in parseExprs

  • Fix pact add-sig

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

    • zip native
    • cond syntactic form
    • fold-db native
  • Persistence improvements

    • Versoned PactValue persistence
    • Fix modref payload serialization, decouple from persistence backcompat
    • Run Repls with Sqlite backend

Jan 11, 2024

Contributors

    slpopejoy

4.1.2

Misc

  • Enforce key format in keyset creation

May 14, 2024

Contributors

    jmcardonslpopejoysirlensalotemilypi

4.1.1

Misc

  • Guard for recursion at runtime on user apps

  • FV and TC give real errors (and warnings, improve model failure output

  • Fix nested capability acquisition

  • Add support for empty import lists when module hashes are present

May 24, 2024

Contributors

    slpopejoylarskuhtzsirlensalotjmininger

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.info relative to loaded file

  • [Build Tooling]

    • Add build-tool flag to shrink library build
    • Build-related
    • CI-related

May 24, 2024

Contributors

    slpopejoysirlensalotemmanueldenloyejminingeremilypimightybytelarskuhtz

4.0.1

Misc

  • Add "advice" plus LCOV code coverage

    • General advice mechanism for e.g. instrumenting performance bracketing
    • -c in pact tool outputs coverage to coverage/lcov.info relative to loaded file
  • Emit synthetic cross-chain events

    • Emits X_YIELD on cross-chain initiation and X_RESUME on 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.
  • 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

    • enumerate to build sequenced lists
    • str-to-list and concat to transform strings to arrays and back
    • distinct to de-dupe lists
    • emit-event to 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

May 14, 2024

Contributors

    slpopejoyemilypi

3.7

Misc

  • Module References

  • Pact Events:

    • Backward compatible JSON
    • @event tag for capabilities
    • env-events for testing
  • Fix runtime typechecker for lists

  • with-applied-env, expect-that testing tools

May 2, 2024

Contributors

    slpopejoylarskuhtzmightybyte

3.6

Misc

  • Pact events

  • Type-only module reference support

  • Update SBV and other deps

Jan 11, 2024

Contributors

    slpopejoy

3.5.2

Misc

  • ApiReq: expose builder, migrate String -> Text

  • Fix install module governance issue

May 14, 2024

Contributors

    emilypislpopejoyjoelburgetLindaOrtega

3.5.1

Misc

  • NFData instances 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
  • Additional benchmarks for 10x operations/tx

  • Fix bad commandline rendering from tool on load failure

  • Better sanitization of sqlite db names

  • Bugfix for base64 primitives

Apr 30, 2024

Contributors

    mightybyteslpopejoyLindaOrtega

3.5.0

Misc

  • Add the commands sign, add-sig, and combine-sigs for 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-namespace on 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|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

-

3.3.0

Misc

  • Managed capabilities (see documentation

  • Production Gas model v1

  • Added signing utilities

  • Interfaces now admit defcap, defschema, and defpact declarations

  • 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-capability overload for granted capabilities
    • expect-failure overload 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-read analysis bugs fixed
    • Unbound column invariants
    • vacuous property detection and report

-

3.2.1

Misc

  • New native function try has been added

  • Bug fixes to the typechecker

  • Improved documentation

-

3.2.0

Misc

  • All non key-related data for decrypt-cc20p1305 is 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-data native schema type

  • Documentation for namespaces and interfaces

  • Add base-64 case to str-to-int and improve error messages

  • Add int-to-str native

  • Analysis:

    • traces now render on same line
    • added support pact step signatures, and governance analysis
    • added support for chain-data pact 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

  • defpact can run in local mode

  • Disallow rollback on the last step of a pact

  • Replaces REPL's env-step and env-pactid with continue-pact and pact-state

  • Adds REPL functions chain-data and 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, and resume
    • 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-int builtin

  • Numerous fixes to pact reference docs

  • New compiler using megaparsec

  • analysis supports str-to-int and read-integer built-ins

  • new row-exists, read, column-of, column-written properties

  • @model now 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 / @doc syntax.
    • We now display all the argument and variable values, reads, writes, keysets, and function result for invalidating models.
    • Introduced row-read-count and row-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 at now 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.
    • verify now 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-decimal and enforce-one are now supported.
    • Bug fix: Analysis of and and or now (correctly short-circuits.
    • The property checking system is now included in the documentation.
    • defproperty: New properties can now be defined at the module level.

-

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 format form

  • Internal changes: TableName in AST, expose evalRepl', token parsing

  • build improvements: weeder, hlint enforcement

-

2.3.7

Misc

  • keylog returns rows indexed by txid

-

2.3.6

Misc

  • Support for reading JSON arrays/objects to pact lists/objects

  • Microsecond support in time objects

  • new keylog function for obtaining logs by key

-

2.3.5

Misc

  • Fix issue where extra parens silently ignored in repl scripts/prompt

-

2.3.4

Misc

  • pact tool improvements: better stdin support, '-d' for debug output of load

-

2.3.3

Misc

  • Bugfix for and regression

-

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

  • contains added

  • drop, take for objects

  • allow empty objects

  • short-circuiting and,or

  • constantly, identity added

-

2.3.0

Misc

  • "Pure" execution capability, used in keyset enforcement

  • enforce-one added

  • Pact tests counted in HUnit results

  • defpact overhaul to support public/escrow

  • New query model: select, where, and?/or?/not?

  • reverse and sort added

  • Better typechecking on partial application, TC bugfixes

  • BREAKING: format takes list instead of var args

  • BREAKING: pact-id replaces pact-txid

  • Consts memoized at load

  • enforce-version added

-

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: use support

  • use accepts barewords

  • better output in describe-module

  • list-modules added

  • print REPL command

  • "transactional awareness" in Persist

-

2.2.1

Misc

  • yield and resume added for use in defpacts

  • yielded, sig-keyset repl functions

  • JSON defaults for keysets, better dispatch of builtin preds

  • pact-version function added.

-

2.2.0

Misc

  • Privacy API: private endpoint, 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

  • json repl function, read-msg can take zero args to get entire data payload

-

2.0.0

Misc

  • Support for types: inference, runtime enforcement, typechecking

  • Numeric negation literals

  • deftable, defschema in module definitions

  • with-keyset now enforce-keyset with no body

-

1.0.1

Misc

  • New function listModules, improved describeModule

  • REPL function load with optional reset arg