- Support for encoding a hyperlane TokenMessage (#1362)
- Fixed support for decoding a hyperlane TokenMessage (#1362)
- Support for keccak256 native (#1354)
- Add poseidon hash alias as
hash-poseidon
(#1356)
- Fixed parsing of difftime as a property (#1349)
- Added pact version command to verify linking (#1350)
- Support for verifier plugins (#1324,#1336)
- Support for
hyperlane-message-id
(#1335) - Support for decoding a hyperlane TokenMessage (#1344)
- Fix bug in enforce-pact-version parser (#1334)
- Fix pact CLI usage output to use correct naming (#1331)
- Fix
step
fordefpact
s in typechecker (#1333)
- List-modules moved to local-only (#1326)
- Update pact server typo (#1328)
- Deprecate readthedocs (#1341)
- Webauthn support in key formats (#1318)
- New
poseidon-hack-a-chain
native for the "Poseidon" hashing function (#1313)
- Gas model fix for concat (#1317)
- Fix FV
str-to-int
(#1304)
- Vendor webauthn dependency
- Pact value infos fixed (#1287)
- Webauthn support (#1193)
- Fix name resolution within module redeploy (#1235)
- Fixed issue with the hash of cap guards,
hash
native and principals (#1273) (#1278) (#1287) - Fixed error message for calling a non-function value (#1268)
- Tweaked the gas of concat (#1269), reverse and format (#1271)
- Allow computation on integers less than 10^80 without gas penalty (#1272)
- More granular gas units (#1245)
- Remove GHCJS support (#1280)
- GHC 9.6+ version support (#1242)
- Package docs in nix flake (#1258)
- Vendor sources of prettyprinter-1.6.0 (#1263)
- Use MTL 2.3+ (#1261)
- replace cryptonite by crypton (#1240)
- Support lambdas in static typechecker (#1232)
- Fix swapped type assignment in fold symeval (#1253)
- Improve modref docs (#1256)
Thanks to @thomashoneyman for the contribution!
- Add feature flag
FlagDisableRuntimeTypeChecking
for disabling runtime typechecking introduced in Pact 4.7 (#1231)
- Fixed empty list type defaulting to any (#1224)
- Fixed partial biniding (#1127)
- Refactored test to avoid
runIO
within tests (#1129) - Add
CoverageSpec
(#1228) - Fix
ReplSpec
tests (#1216) - Cleanup
PactContinuationSpec
(#1222)
- Cleanup README.md (#1225)
- Bump Z3 versions in GH actions (#1126)
- Improve advice implementation (#1187)
- Fix inconsistent trace output (#1153)
- Fix coverage, restore defun advice (#1151)
- Create persistence dirs if missing (#1148)
- Differentiate between errors on-chain and off-chain (#1185)
- Don't display function documentation in non-repl context (#1185)
- Runtime type checking on return types now enforced (#1209)
- Allow native function versioning in eval (#1195)
- Add new native
dec
for integer to decimal conversion (#1150) - Implement
shift
in terms of other natives for better gas costing (#1208) - Intialize body of
env-data
to an empty object instead of Null (#1188)
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 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 (#1212)
- Enable warnings during symbolic eval (#1175)
- Remove
emit-event
shim (#1168) - Remove
hash
shims (#1158) - Remove
enumerate
shim (#1155) - Remove
distinct
shim (#1154) - Remove
describe-namespace
shim (#1156) - Remove
is-principal
,typeof-principal
,create-principal
, andvalidate-principal
shims (#1160) - Remove
format
shim (#1159)
- Remove mention of private defpacts from the reference manual (#1207)
- Add documentation for
enumerate
(#1176)
- New PR and Issue templates introduced.
Thanks to everyone for their contributions, especially @CryptoPascal31 for his wonderful feedback and commentary, and welcome to our newest Pact team member, @ak3n!.
-
Add
DisablePact46
execution flag (#1138) -
Add Zero Knowledge native operations (#1052)
-
Add deprecation warning system (#1127)
-
Build support for Nix flakes (#1083)
-
Passage of time simulation in local pact server build (#1082)
-
Fixed parsing failure message for Public Keys (#1097)
-
print
native now pretty prints output using term pretty printing (#1106) -
Typechecker:
- now handles all const value types (#1116)
- inlines mock dynamic references (#1120)
-
Formal Verification:
- Prevent usage of
result
fixed binding indefpact
verification. (#1113) - Warning added for invaliding models when decimals are too high a precision (#1113)
- Typechecker now correctly infers function type arguments (#1112)
- Added debug flag to
verify
native, allowing outputs to be directed to SMTLib file on a per-module basis. (#1122) - Add shim for
select
in FV (#1090)
- Prevent usage of
Thanks to everyone for their contributions, especially new contributors @qooboodoop and @omahs, and welcome to our newest Pact team member, @rsoeldner!.
- Export
ApiReq
constituent data structures (#1055) - 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 (#1060, #1062)
- Added capability guards (#1057)
- Lazily evaluate
enforce
to reduce gas usage on evaluation (#1069) - Gas adjustment for various natives (#1071)
- Fix FV regression that disallowed the verification of unary operators like
abs
(#1079) - Documentation link fixes (thanks @przemeklach! #1075)
- Document VSCode support - thanks JeremeyJS! (#965)
- Documentation fixes - thanks JCM00N and Luzzotica! (#1003, #1021)
- Gas-related bug fixes and adjustments to
format
andtry
(#1020, #1019) - Defined keysets are now required to be namespaced (#1011)
- Consolidated Pact 4.4 execution config flag (removes need for
DisablePreserveNamespaceUpgrade
flag, #1026)
- Interpreter improvements (#970)
- New
create-principal
andvalidate-principal
natives (#969) - Fixes to name resolution (#987)
- New nested defpacts +
continue
native (#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
zip
native (#922)cond
syntactic form (#938)fold-db
native (#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.info
relative 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
-c
in pact tool outputs coverage tocoverage/lcov.info
relative to loaded file
- Emit synthetic cross-chain events (#875)
- 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 (#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)
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 (#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-events
for testing (#827)
- Fix runtime typechecker for lists (#825)
with-applied-env
,expect-that
testing 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
NFData
instances 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
base64
primitives (#788)
- Add the commands
sign
,add-sig
, andcombine-sigs
for 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-namespace
on 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
, anddefpact
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-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
- New native function
try
has been added - Bug fixes to the typechecker
- Improved documentation
- All non key-related data for
decrypt-cc20p1305
is now required to be base64-encoded - Improved documentation
- Analysis:
- bitwise operators are now supported
- 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 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
- 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
defpact
can run in local mode- Disallow 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
- 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-int
builtin - Numerous fixes to pact reference docs
- New compiler using megaparsec
- analysis supports
str-to-int
andread-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
- 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
/@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
- 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
format
form - Internal changes: TableName in AST, expose evalRepl', token parsing
- build improvements: weeder, hlint enforcement
keylog
returns rows indexed by txid
- Support for reading JSON arrays/objects to pact lists/objects
- Microsecond support in time objects
- new
keylog
function for obtaining logs by key
- Fix issue where extra parens silently ignored in repl scripts/prompt
pact
tool improvements: better stdin support, '-d' for debug output of load
- Bugfix for
and
regression
- ghcjs build working, typechecking not supported in browser yet
- native blake2 support, only for ghcjs
- Restore callstack, better rendering, runtime errors at top callsite
contains
addeddrop
,take
for objects- allow empty objects
- short-circuiting
and
,or
constantly
,identity
added
- "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
andsort
added- Better typechecking on partial application, TC bugfixes
- BREAKING:
format
takes list instead of var args - BREAKING:
pact-id
replacespact-txid
- Consts memoized at load
enforce-version
added
- 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:
use
support - use accepts barewords
- better output in
describe-module
list-modules
addedprint
REPL command- "transactional awareness" in Persist
yield
andresume
added for use in defpactsyielded
,sig-keyset
repl functions- JSON defaults for keysets, better dispatch of builtin preds
pact-version
function added.
- 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
- "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
- Support for types: inference, runtime enforcement, typechecking
- Numeric negation literals
deftable
,defschema
in module definitionswith-keyset
nowenforce-keyset
with no body
- New function
listModules
, improveddescribeModule
- REPL function
load
with optional reset arg