runtimeverification / plutus-core-semantics

BSD 3-Clause "New" or "Revised" License
27 stars 5 forks source link

Create a reproducible development environment to generate uplc from haskell code #284

Open SchmErik opened 2 years ago

SchmErik commented 2 years ago

At this moment, we are having a "work on my machine but not your's" when generating uplc code from haskell code using cabal build. We need to solve this issue by providing a reproducible development environment that can be used to run cabal build and etc.

SchmErik commented 2 years ago

I've attempted to spin up a ubuntu and install nix-shell. nix-shell is not intended to be installed by root so a better option would be to use a nixOs image instead...

gtrepta commented 2 years ago

This would be useful for Milestone 3, as it would be good to have an environment where it's easy to perform the end-to-end process of compiling PlutusTX to a uplc policy, and then running the KPlutus tools on that uplc policy.

@SchmErik said in the meeting today based on his experience that just having a nix-shell without a Docker image will probably be the best solution.

A question that came up is what is going to be the expected way to compile a PlutusTX contract into uplc? So far I've only seen it happen by running a cabal script of some sort that uses code from the Plutus repositories. Will there be any binary tools available on the command line that simplify the process (ie. plutustx-compile policy.hs)? @ChristianoBraga do you know about anything like this?

SchmErik commented 2 years ago

We need the compiler tool chain so the nix.shell file should contain whatever tools are needed to do the compilation or the "cabal build" command. We need a way to enter nix.shell and execute the compilation commands. I think one thing you could do is to take an existing set up and compile native-tokens policy. For this, we used the nix-shell from the plutus-apps project and that command takes a really long time. We only really need the binaries that execute when cabal build is run. @goodlyrottenapple might be a good person to ask about a set up for this.