# Plutus Pioneer Program ## Lectures - [Lecture #1](https://youtu.be/IEn6jUo-0vU) - Welcome - The (E)UTxO-model - Running an example auction contract on a local Playground - Homework - [Lecture #2](https://youtu.be/E5KRk5y9KjQ) - Triggering change. - Low-level, untyped on-chain validation scripts. - High-level, typed on-chain validation scripts. ## Code Examples - Lecture #1: [English Auction](code/week01) - Lecture #2: [Simple Validation](code/week02) ## Exercises - Week #1 - Build the [English Auction](code/week01) contract with `cabal build` (you may need to run `cabal update` first). - Clone the [The Plutus repository](https://github.com/input-output-hk/plutus), check out the correct commit as specified in [cabal.project](code/week01/cabal.project). - Set-up IOHK binary caches [How to set up the IOHK binary caches](https://github.com/input-output-hk/plutus#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." - Enter a `nix-shell`. - Go to the `plutus-playground-client` folder. - Start the Playground server with `plutus-playground-server`. - Start the Playground client (in another `nix-shell`) with `npm run start`. - Copy-paste the auction contract into the Playground editor - don't forget to remove the module header! - Compile. - Simulate various auction scenarios. - Week #2 - Fix and complete the code in the [Homework1](code/week02/src/Week02/Homework1.hs) module. - Fix and complete the code in the [Homework2](code/week02/src/Week02/Homework2.hs) module. ## Solutions - Week #2 - [`Homework1`](code/week02/src/Week02/Solution1.hs) - [`Homework2`](code/week02/src/Week02/Solution2.hs) ## Some Plutus Modules - [`Plutus.V1.Ledger.Contexts`](https://github.com/input-output-hk/plutus/blob/master/plutus-ledger-api/src/Plutus/V1/Ledger/Contexts.hs), contains the definition of the context-related types. - [`Plutus.V1.Ledger.Interval`](https://github.com/input-output-hk/plutus/blob/master/plutus-ledger-api/src/Plutus/V1/Ledger/Interval.hs), contains the definition of and helper functions for the `Interval` type. - [`Plutus.V1.Ledger.Slot`](https://github.com/input-output-hk/plutus/blob/master/plutus-ledger-api/src/Plutus/V1/Ledger/Slot.hs), contains the definition of the `Slot` type. - [`PlutusTx.Data`](https://github.com/input-output-hk/plutus/blob/master/plutus-tx/src/PlutusTx/Data.hs), contains the definition of the `Data` type. - [`PlutusTx.IsData.Class`](https://github.com/input-output-hk/plutus/blob/master/plutus-tx/src/PlutusTx/IsData/Class.hs), defines the `IsData` class. ## Additional Resources - [The Plutus repository](https://github.com/input-output-hk/plutus) - [Learn You a Haskell for Great Good!](http://learnyouahaskell.com/) - [Haskell & Cryptocurrencies course Mongolia](https://www.youtube.com/playlist?list=PLJ3w5xyG4JWmBVIigNBytJhvSSfZZzfTm)