The Pact Programming Language
Quick Start: Browser
The easiest way to try Pact is in the browser.
Quick Start: Atom
Installing Pact with homebrew (OSX only)
You'll then need to install the Pact interpreter/REPL. On Mac, the easiest way is with homebrew.
brew install kadena-io/pact/pact
Installing Pact with Binary Distributions
Once you have downloaded the binary, put it somewhere in your PATH.
Test by issuing
pact in a terminal. Try out some commands:
$ pact pact> (+ 1 2) 3 pact> (+ "hello, " "world") "hello, world"
There are examples in this source repository of working smart contracts which you can load into Atom to get started.
Quick Start: Pact REST API Server
Pact now features a full REST API HTTP server and SQLite database implementation, making blockchain application development painless and easy. The Pact server simulates a single-node blockchain environment, with the same API supported by the Kadena ScalableBFT blockchain.
To start the server, issue
pact --serve CONFIG or
pact -s CONFIG, where CONFIG is a valid config.yaml.
REST API Docs
The REST API is documented at http://pact-language.readthedocs.io/en/latest/pact-reference.html#rest-api.
The pact-todomvc is a working demonstration.
Hosting static files.
The HTTP server will host any static files it finds in its working directory.
Config file format
The pact dev server (pact-serve) requires a configuration Yaml file (e.g. server.conf) to operate. The documentation for it is:
➜ pact git:(feat/dev-server) pact --serve --help Config file is YAML format with the following properties: port - HTTP server port persistDir - Directory for database files. If ommitted, runs in-memory only. logDir - Directory for HTTP logs pragmas - SQLite pragmas to use with persistence DBs verbose - [True|False] Provide extra logging information
Replay from disk.
When running pact-serve with persistence enabled, the server automatically replays from the database
commands.sqlite in the persist dir. To prevent replay, simply delete this file before starting the server.
To build, you'll need a working Haskell Stack install . After which, building is as simple as 'stack build'.
To install for use with Atom and the command line, issue 'stack install' and then either add
$HOME/.local/bin to your path, or symlink
$HOME/.local/bin/pact somewhere in your PATH.
Building with Nix / NixOS
- Go to https://nixos.org/nix/, click "Get Nix", follow the instructions to install the Nix package manager
- Set the
binary-cache-public-keyslines as follows:
binary-caches = https://pact.cachix.org https://nixcache.reflex-frp.org https://cache.nixos.org/ binary-cache-public-keys = pact.cachix.org-1:cg1bsryGrHnQzqEp52NcHq4mBBL+R25XbR2Q/I/vQ8Y= ryantrinkle.com-1:JJiAKaRv9mWgpVAz8dwewnZe0AzzEAzPkagE9SP5NWI= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
- Restart the nix daemon.
sudo launchctl stop org.nixos.nix-daemon sudo launchctl start org.nixos.nix-daemon
sudo systemctl restart nix-daemon.service
nix-buildfrom the project root
nix-build does a full rebuild every time, which is usually not
what you want when developing. To do incremental builds, you need to enter a nix
shell. To do that use the following command:
$ nix-shell -A shells.ghc
This puts you in a shell that has all the necessary dependencies installed. Once
inside this shell you can build as normal with cabal using
cabal build or
You can also build with stack inside this shell as follows:
$ stack --stack-yaml stack-nix.yaml build
This code is distributed under the terms of the BSD3 license. See LICENSE for details.