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
step
fordefpact
s in typechecker
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 principalsFixed 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
runIO
within testsAdd
CoverageSpec
Fix
ReplSpec
testsCleanup
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
dec
for integer to decimal conversionImplement
shift
in terms of other natives for better gas costingIntialize body of
env-data
to an empty object instead of Nullread-*
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 withtry
. As an example,(try "string if key isn't present" (read-string "key"
. This applies toread-integer
,read-string
,read-decimal
,read-keyset
andread-msg
(as long asread-msg
has a key supplied as an argument.Fix Typechecker treatment of special binding forms
Enable warnings during symbolic eval
Remove
emit-event
shimRemove
hash
shimsRemove
enumerate
shimRemove
distinct
shimRemove
describe-namespace
shimRemove
is-principal
,typeof-principal
,create-principal
, andvalidate-principal
shimsRemove
format
shimRemove mention of private defpacts from the reference manual
Add documentation for
enumerate
New PR and Issue templates introduced.
4.6.0
Misc
Add
DisablePact46
execution flagAdd 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 printingTypechecker:
- now handles all const value types
- inlines mock dynamic references
Formal Verification:
- Prevent usage of
result
fixed binding indefpact
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
- Prevent usage of
4.4.1
Misc
Export
ApiReq
constituent data structuresFix 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 evaluationGas 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
format
andtry
Defined keysets are now required to be namespaced
Consolidated Pact 4.4 execution config flag (removes need for
DisablePreserveNamespaceUpgrade
flag
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
zip
nativecond
syntactic formfold-db
native
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.info
relative 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
-c
in pact tool outputs coverage tocoverage/lcov.info
relative to loaded file
Emit synthetic cross-chain events
- Emits
X_YIELD
on cross-chain initiation andX_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.
- 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
enumerate
to build sequenced listsstr-to-list
andconcat
to transform strings to arrays and backdistinct
to de-dupe listsemit-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
3.5.2
Misc
ApiReq: expose builder, migrate String -> Text
Fix install module governance issue
3.5.1
Misc
NFData
instances for common Pact Service typesAnalysis :
- 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
base64
primitives
3.5.0
Misc
Add the commands
sign
,add-sig
, andcombine-sigs
for working with signaturesDecode 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 structureFinalize gas model
Use ByteString readFile and explicit UTF8 decoding
Enable autonomous managed capabilities
benchmark and improve rounding
-
3.3.1
Misc
base64-(encode|decode
nativesBugfix: 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
, anddefpact
declarationsAdd 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-capability
overload for granted capabilitiesexpect-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 addedBug fixes to the typechecker
Improved documentation
-
3.2.0
Misc
All non key-related data for
decrypt-cc20p1305
is now required to be base64-encodedImproved documentation
Analysis:
- bitwise operators are now supported
-
3.1.0
Misc
Add SPV endorsement functionality to
defpact
s'=' 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 typeDocumentation for namespaces and interfaces
Add base-64 case to
str-to-int
and improve error messagesAdd
int-to-str
nativeAnalysis:
- 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
, andresume
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 modeDisallow rollback on the last step of a pact
Replaces REPL's
env-step
andenv-pactid
withcontinue-pact
andpact-state
Adds REPL functions
chain-data
andenv-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
, etcVarious changes to support web repl
use cryptonite for Blake2 implementation
new
str-to-int
builtinNumerous fixes to pact reference docs
New compiler using megaparsec
analysis supports
str-to-int
andread-integer
built-insnew
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
androw-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 typechecksdefconst
s, 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-decimal
andenforce-one
are now supported.- Bug fix: Analysis of
and
andor
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.
- 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
format
formInternal 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
addeddrop
,take
for objectsallow empty objects
short-circuiting
and
,or
constantly
,identity
added
-
2.3.0
Misc
"Pure" execution capability, used in keyset enforcement
enforce-one
addedPact tests counted in HUnit results
defpact overhaul to support public/escrow
New query model:
select
,where
,and?/or?/not?
reverse
andsort
addedBetter typechecking on partial application, TC bugfixes
BREAKING:
format
takes list instead of var argsBREAKING:
pact-id
replacespact-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
supportuse accepts barewords
better output in
describe-module
list-modules
addedprint
REPL command"transactional awareness" in Persist
-
2.2.1
Misc
yield
andresume
added for use in defpactsyielded
,sig-keyset
repl functionsJSON defaults for keysets, better dispatch of builtin preds
pact-version
function added.
-
2.2.0
Misc
Privacy API:
private
endpoint, address fields in commandTypechecker 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 definitionswith-keyset
nowenforce-keyset
with no body
-
1.0.1
Misc
New function
listModules
, improveddescribeModule
REPL function
load
with optional reset arg