Plutus Platform
The Plutus Platform enables you to:
-
Work with Plutus Core, the smart contract language embedded in the Cardano ledger.
-
Write Haskell programs that create and use embedded Plutus Core programs.
-
Write smart contract executables which can be distributed for use with a Cardano wallet backend.
How to use the project
Prerequisites
The Haskell libraries in the Plutus Platform can be built in a number of ways. The prerequisites depend on how you want to build the libraries. The other artifacts (docs etc.) are most easily built with Nix, so we recommend installing it regardless.
-
Nix (recommended).
-
Install Nix following the instructions on the Nix website.
ImportantEven if you already have Nix installed, make sure to set up the IOHK binary cache.
-
See the section on Nix for further advice on using Nix.
-
-
cabal
(if building Haskell packages withcabal
). -
stack
(if building Haskell packages withstack
).
How to get started using the libraries
There is an example project in the example
folder, see its README
for more details.
How to build the Haskell packages and other artifacts
How to build Haskell packages and other artifacts with Nix
Run nix build -f default.nix localPackages.language-plutus-core
from the root to build the Plutus Core library.
See the section on Nix build attributes to find out what other attributes you can build.
cabal
How to build Haskell packages with Run cabal v2-build language-plutus-core
from the root to build the
Plutus Core library.
See the cabal project file to see the other
projects that you can build with cabal
.
stack
How to build the Haskell packages with Run stack build language-plutus-core
from the root to build the
Plutus Core library.
See the stack project file to see the other projects that you can build with stack.
How to run a local Plutus Playground in a Docker container
-
Install Docker following the instructions on the Docker website.
-
Run
nix build -f default.nix docker.plutusPlaygroundImage
, to build -
Run
docker load < docker-image-plutus-playgrounds.tar.gz
- this will print out the image name at the end, e.g.Loaded image: plutus-playgrounds:yn7h7m5qdjnnj9rxv8cgkvvwjkkcdnvp
-
Run
docker run --mount ‘type=bind,source=/tmp,target=/tmp’ -p 8080:8080 plutus-playgrounds:yn7h7m5qdjnnj9rxv8cgkvvwjkkcdnvp
using the image name from the previous step. -
Open http://localhost:8080/ in a web browser.
How to get the most recent documentation PDFs from CI
Specifications and design
Academic papers
Where to go next
Where to find tutorials
The plutus-tutorial project contains a basic tutorial for using the Plutus Platform to write smart contracts.
To build a full HTML version of the tutorial that you can view locally, build the docs.plutus-tutorial
using Nix.
Where to find the changelog
The changelog is stored in CHANGELOG.
How to communicate with us
We’re active on the Cardano
forum. Tag your post with the plutus
tag so we’ll see it.
Use the Github issue tracker for bugs and feature requests, but keep other discussions to the forum.
How to contribute to the project
See CONTRIBUTING, which describes our processes in more detail; and ARCHITECTURE, which describes the structure of the repository.
Nix
How to set up the IOHK binary caches
Adding the IOHK binary cache to your Nix configuration will speed up builds a lot, since many things will have been built already by our CI.
If you find you are building packages that are not defined in this repository, or if the build seems to take a very long time then you may not have this set up properly.
To set up the cache:
-
On non-NixOS, edit
/etc/nix/nix.conf
and add the following lines:substituters = https://hydra.iohk.io https://cache.nixos.org/ trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
-
On NixOS, set the following NixOS options:
nix = { binaryCaches = [ "https://hydra.iohk.io" ]; binaryCachePublicKeys = [ "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ=" ]; };
Note
|
If you are a trusted user you may add the
nix.conf lines to ~/.config/nix/nix.conf instead.
|
Nix on macOS
Nix on macOS can be a bit tricky. In particular, sandboxing is disabled by default, which can lead to strange failures.
These days it should be safe to turn on sandboxing on macOS with a few exceptions. Consider setting the following Nix settings, in the same way as in previous section:
sandbox = true extra-sandbox-paths = /System/Library/Frameworks /System/Library/PrivateFrameworks /usr/lib /private/tmp /private/var/tmp /usr/bin/env
How to get a development environment
While developing the libraries, you probably will not want to use Nix to
build all the libraries. If you want to use cabal v2-build
to build
the local projects only, then:
. Run nix-shell
.
. Run cabal v2-build
as normal.
Which attributes to use to build different artifacts
default.nix
defines a package set with attributes for all the
artifacts you can build from this repository. These can be built
using nix build
. For example:
nix build -f default.nix localPackages.language-plutus-core
-
Local packages: defined inside
localPackages
-
e.g.
localPackages.language-plutus-core
-
-
Documents: defined inside
docs
-
e.g.
docs.plutus-core-spec
-
-
Development scripts: defined inside
dev
-
e.g.
dev.scripts.fixStylishHaskell
-
There are other attributes defined in default.nix
.