2021-04-08 12:07:47 +02:00
# 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
2021-04-13 12:48:07 +02:00
- [Lecture #2 ](https://youtu.be/E5KRk5y9KjQ )
- Triggering change.
- Low-level, untyped on-chain validation scripts.
- High-level, typed on-chain validation scripts.
2021-04-08 12:07:47 +02:00
## Code Examples
- Lecture #1: [English Auction ](code/week01 )
2021-04-13 16:44:22 +02:00
- Lecture #2: [Simple Validation ](code/week02 )
2021-04-08 12:07:47 +02:00
2021-04-08 12:15:17 +02:00
## Exercises
- Week #1
Improve instructions
When running `cabal build`, I ran into this issue:
```
Warning: The package list for 'hackage.haskell.org' does not exist. Run 'cabal
update' to download it.RemoteRepo {remoteRepoName = RepoName
"hackage.haskell.org", remoteRepoURI = http://hackage.haskell.org/,
remoteRepoSecure = Just True, remoteRepoRootKeys =
["fe331502606802feac15e514d9b9ea83fee8b6ffef71335479a2e68d84adc6b0","1ea9ba32c526d1cc91ab5e5bd364ec5e9e8cb67179a471872f6e26f0ae773d42","2c6c3627bd6c982990239487f1abd02e08a02e6cf16edb105a8012d444d870c3","0a5c7ea47cd1b15f01f5f51a33adda7e655bc0f0b0615baa8e271f4c3351e21d","51f0161b906011b52c6613376b1ae937670da69322113a24
6a09f807c62f6921"],
remoteRepoKeyThreshold = 3, remoteRepoShouldTryHttps = True}
Warning: Requested index-state 2021-02-24T00:00:00Z is newer than
'hackage.haskell.org'! Falling back to older state ().
Resolving dependencies...
cabal: Could not resolve dependencies:
[__0] trying: byron-spec-chain-0.1.0.0 (user goal)
[__1] unknown package: microlens-th (dependency of byron-spec-chain)
[__1] fail (backjumping, conflict set: byron-spec-chain, microlens-th)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: byron-spec-chain, microlens-th
```
As described, I needed to run `cabal update` first. It could be helpful to have it in the README to help some people get started
2021-04-08 18:41:28 +02:00
- Build the [English Auction ](code/week01 ) contract with `cabal build` (you may need to run `cabal update` first).
2021-04-08 12:15:17 +02:00
- 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 ).
2021-04-09 09:36:15 +02:00
- 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."
2021-04-08 12:15:17 +02:00
- 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.
2021-04-13 16:44:22 +02:00
- 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.
2021-04-14 16:42:16 +02:00
## Solutions
- Week #2
- [`Homework1` ](code/week02/src/Week02/Solution1.hs )
- [`Homework2` ](code/week02/src/Week02/Solution2.hs )
2021-04-12 11:29:45 +02:00
## Some Plutus Modules
2021-04-18 22:49:27 +02:00
- [`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.
2021-04-12 11:29:45 +02:00
- [`PlutusTx.Data` ](https://github.com/input-output-hk/plutus/blob/master/plutus-tx/src/PlutusTx/Data.hs ), contains the definition of the `Data` type.
2021-04-12 22:59:51 +02:00
- [`PlutusTx.IsData.Class` ](https://github.com/input-output-hk/plutus/blob/master/plutus-tx/src/PlutusTx/IsData/Class.hs ), defines the `IsData` class.
2021-04-12 11:29:45 +02:00
2021-04-08 12:07:47 +02:00
## Additional Resources
2021-04-08 12:15:17 +02:00
- [The Plutus repository ](https://github.com/input-output-hk/plutus )
- [Learn You a Haskell for Great Good! ](http://learnyouahaskell.com/ )
2021-04-08 12:07:47 +02:00
- [Haskell & Cryptocurrencies course Mongolia ](https://www.youtube.com/playlist?list=PLJ3w5xyG4JWmBVIigNBytJhvSSfZZzfTm )