GithubHelp home page GithubHelp logo

leobel / plutus Goto Github PK

View Code? Open in Web Editor NEW

This project forked from intersectmbo/plutus

0.0 1.0 0.0 82.45 MB

The Plutus language implementation and tools

License: Apache License 2.0

Haskell 30.59% Yacc 0.09% Nix 3.64% Shell 0.14% TeX 9.61% Makefile 0.05% HCL 0.28% JavaScript 0.66% PureScript 11.64% HTML 36.60% CSS 0.05% Agda 4.80% Dhall 0.24% TypeScript 0.14% Nearley 0.12% R 0.25% RAML 0.03% SCSS 0.64% Lex 0.09% Smarty 0.33%

plutus's Introduction

The Plutus Platform is an application development platform for developing distributed applications using the Cardano blockchain; and Marlowe is a platform specifically for financial products, built on top of Plutus. For more information about the projects, see the User documentation.

This repository contains:

  • Plutus Platform

  • The implementation, specification, and mechanized metatheory of Plutus Core, the scripting language embedded in the Cardano ledger.

  • Plutus Tx, the compiler from Haskell to Plutus Core.

  • Libraries which implement the Plutus Application Framework, a framework for writing applications that work with Cardano.

  • A selection of end-to-end usecases written with the Plutus Application Framework

  • The Plutus Playground, a web-based playground for learning and writing basic Plutus Applications.

  • Marlowe

  • The implementation of the Marlowe domain-specific language.

  • Tools for working with Marlowe, including static analysis.

  • A selection of examples using Marlowe, including a number based on the ACTUS financial standard.

  • The Marlowe Playground, a web-based playground for learning and writing Marlowe Applications.

Important

The rest of this README is focussed on people who want to develop or contribute to the Platform.

For people who want to use the Platform, please consult the User documentation.

Important

DO NOT IGNORE THIS

If you want to use Nix with this project, make sure to set up the IOHK binary cache. If you do not do this, you will end up building GHC, which takes several hours. If you find yourself building GHC, STOP and fix the cache.

Working with the project

How to submit an issue

Issues can be filed in the GitHub Issue tracker.

However, note that this is pre-release software, so we will not usually be providing support.

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.

How to depend on the project from another Haskell project

None of our libraries are on Hackage, unfortunately (many of our dependencies aren’t either). So for the time being, you need to:

  1. Add plutus as a source-repository-package to your cabal.project.

  2. Copy the source-repository-package stanzas from our cabal.project to yours.

  3. Copy additional stanzas from our cabal.project as you need, e.g. you may need some of the allow-newer stanzas.

The plutus-starter project provides an example.

How to build the project’s artifacts

This section contains information about how to build the project’s artifacts for independent usage. For development work see How to develop and contribute to the project for more information.

Prerequisites

The Haskell libraries in the Plutus Platform are built with cabal and Nix. The other artifacts (docs etc.) are also most easily built with Nix.

Nix

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

Make sure you have read and understood the cache warning. DO NOT IGNORE THIS.

See Nix for further advice on using Nix.

Non-Nix

You can build some of the Haskell packages without Nix, but this is not recommended and we don’t guarantee that these prerequisites are sufficient. 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 build the Haskell packages and other artifacts with Nix

Run nix build -f default.nix plutus.haskell.packages.plutus-core.components.library 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 the Haskell packages with cabal

The Haskell packages can be built directly with cabal. We do this during development (see How to develop and contribute to the project). The best way is to do this is inside a nix-shell.

Run cabal build plutus-core from the root to build the Plutus Core library.

See the cabal project file to see the other packages that you can build with cabal.

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=
    Note

    If you don’t have an /etc/nix/nix.conf or don’t want to edit it, you may add the nix.conf lines to ~/.config/nix/nix.conf instead. You must be a trusted user to do this.

  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=" ];
    };

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 docs.papers.eutxo
Example attributes
  • Project packages: defined inside plutus.haskell.packages

    • e.g. plutus.haskell.packages.plutus-core.components.library

  • Documents: defined inside docs

    • e.g. docs.plutus-core-spec

There are other attributes defined in default.nix.

Licensing

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.

plutus's People

Contributors

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

Watchers

James Cloos 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.