Skip to content
Demo of integrating a JS webapp with the Pact smart contract langauge
JavaScript CSS HTML Shell
Branch: master
Clone or download
ggobugi27 Fix dependencies (#15)
* ran npm audit fix

* removed node_modules folder
Latest commit 285c4e0 Aug 20, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
pact Change app structure with create-react-app (#13) Jun 20, 2019
.gitignore Change app structure with create-react-app (#13) Jun 20, 2019
package.json Change app structure with create-react-app (#13) Jun 20, 2019
todos-pact.png Add files via upload Jul 10, 2019

Pact Smart Contract Language TodoMVC demo


  • Install Pact >= 3.0.0
    • brew install kadena-io/pact/pact
  • Install Node >= 8.11.4
  • Install All Dependencies. The dependencies include Pact Lang API.
    • npm install
  • Navigate into pact-todomvc and create a log folder in the top-level folder mkdir log


npm run start:pact: Start the Pact Server

npm run pact:seed: Seed the blockchain

npm start: Start the Web Application

Starting the Project

  1. npm run start:pact
  2. npm run pact:seed
  3. npm start
  4. http://localhost:3000

Using the Pact Dev Server

Configuration File

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

Initializing the server

When running pact-serve with persistence enabled the development server will automatically replay from disk when it starts. In this demo, we are persisting to log/ which causes pact-serve to create or use log/commands.sqlite to store Commands and CommandResults.

The first time you run pact-serve the SQLite DBs will be created empty (as no commands have been run yet). To upload todos.pact, which the front end needs loaded to interact with, you run The important thing to note is that until you delete log/commands.sqlite (or run pact-serve in memory) pact-serve will replay every command (e.g. load todos.pact -> UI interactions) on start up.

If you think of it like a blockchain, deleting the commands.sqlite file or running in memory gives Pact a "fresh" chain to work with.


The front-end of this app was built on React TodoMVC example.

You can’t perform that action at this time.