Giter Site home page Giter Site logo

jelle-dc / plutus Goto Github PK

View Code? Open in Web Editor NEW

This project forked from intersectmbo/plutus

0.0 0.0 0.0 64.16 MB

The Plutus language implementation and tools

License: Apache License 2.0

Haskell 28.93% Yacc 0.11% Nix 3.05% Shell 0.06% TeX 10.33% Makefile 0.05% HCL 0.46% JavaScript 0.43% PureScript 8.30% HTML 40.86% CSS 0.01% Agda 6.03% Dhall 0.15% Ruby 0.02% TypeScript 0.22% Nearley 0.14% R 0.22% RAML 0.04% SCSS 0.51% Lex 0.10%

plutus's Introduction

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 using Plutus Tx.

  • Write smart contract executables which can be distributed for use with the Plutus Smart Contract Backend.

You are free to copy, modify, and distribute the Plutus Platform with under the terms of the Apache 2.0 license. See the LICENSE and NOTICE files for details.

How to use the project

This section contains brief information about how to use this project. For development work see How to develop and contribute to the project for more information.

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

Install Nix (recommended). following the instructions on the Nix website.

Important

Even if you already have Nix installed, make sure to set up the IOHK binary cache.

See Nix for further advice on using Nix.

Non-Nix

If you use Nix, these tools are provided for you via shell.nix, and you do not need to install them yourself.

  • If you want to build our Haskell packages with cabal, then install it.

  • If you want to build our Haskell packages with stack, then install it.

  • If you want to build our Agda code, then install Agda and the standard library.

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 haskell.projectPackages.plutus-core from the root to build the Plutus Core library.

See Which attributes to use to build different artifacts to find out what other attributes you can build.

How to build Haskell packages with cabal

Run cabal v2-build 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.

How to build the Haskell packages with stack

Run stack build 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

  1. Install Docker following the instructions on the Docker website.

  2. Run nix build -f default.nix docker.plutusPlaygroundImage, to build

  3. 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

  4. Run docker run --mount 'type=bind,source=/tmp,target=/tmp' -p 8080:8080 plutus-playgrounds:yn7h7m5qdjnnj9rxv8cgkvvwjkkcdnvp using the image name from the previous step.

  5. Open http://localhost:8080/ in a web browser.

Where to go next

Where to find tutorials

The doc folder contains the documentation site.

To build a full HTML version of the site that you can view locally, build the docs.site attribute using Nix.

How to learn about the terminology we use

There is a comprehensive glossary in GLOSSARY.

Where to find the changelog

The changelog is stored in CHANGELOG.

How to submit an issue

We track our issues on the GitHub Issue tracker.

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 develop and contribute to the project

See CONTRIBUTING, which describes our processes in more detail including development environments; 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:

  1. On non-NixOS, edit /etc/nix/nix.conf and add the following lines:

    substituters        = https://hydra.iohk.io https://iohk.cachix.org https://cache.nixos.org/
    trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= iohk.cachix.org-1:DpRUyj7h7V830dp/i6Nti+NEO2/nhblbov/8MW7Rqoo= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  2. On NixOS, set the following NixOS options:

    nix = {
      binaryCaches          = [ "https://hydra.iohk.io" "https://iohk.cachix.org" ];
      binaryCachePublicKeys = [ "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ=" "iohk.cachix.org-1:DpRUyj7h7V830dp/i6Nti+NEO2/nhblbov/8MW7Rqoo=" ];
    };
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

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 haskell.projectPackages.plutus-core
Example attributes
  • Project packages: defined inside haskell.projectPackages

    • e.g. haskell.projectPackages.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.

plutus's People

Contributors

michaelpj avatar jmchapman avatar krisajenkins avatar j-mueller avatar shmish111 avatar effectfully avatar kwxm avatar psygnisfive avatar nau avatar palas avatar brunjlar avatar polinavino avatar gilligan avatar vmchale avatar mchakravarty avatar disassembler avatar nahern avatar raduom avatar bezirg avatar wenkokke avatar reactormonk avatar dk14 avatar simonjohnthompson avatar cubesoup avatar hrajchert avatar github-actions[bot] avatar elviejo79 avatar omelkonian avatar robcohen avatar vagoum avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.