This is my fork of the Plutus Pioneer Program where I will keep the examples up-to-date with the latest Plutus main branch.
I also use this to add comments to the code.
-
- Welcome
- The (E)UTxO-model
- Running an example auction contract on a local Playground
- Homework
-
- Triggering change.
- Low-level, untyped on-chain validation scripts.
- High-level, typed on-chain validation scripts.
-
- Script context.
- Time handling.
- Parameterized contracts.
-
- Monads
- The
EmulatorTrace
monad. - The
Contract
monad.
-
- Values.
- Native tokens & minting policies.
- NFT's.
-
- Oracles.
- Using the PAB.
-
- Commit schemes.
- State machines.
-
- Another state machine example: token sale.
- Automatic testing using emulator traces.
- Interlude: optics.
- Property based testing with
QuickCheck
. - Testing Plutus contracts with property based testing.
-
- Marlowe overview (slides).
- Marlowe in Plutus.
- Marlowe Playground demo.
-
- Uniswap overview.
- Uniswap implementation in Plutus.
- Deploying Uniswap with the PAB.
- Demo.
- Using
curl
to interact with the PAB.
- Lecture #1: English Auction
- Lecture #2: Simple Validation
- Lecture #3: Validation Context & Parameterized Contracts
- Lecture #4: Monads,
EmulatorTrace
&Contract
- Lecture #5: Minting Policies
- Lecture #6: Oracles
- Lecture #7: State Machines
- Lecture #8: Testing
- Lecture #9: Marlowe
- Lecture #10: Uniswap
-
Week #1
- Build the English Auction contract with
cabal build
(you may need to runcabal update
first). - Clone the The Plutus repository, check out the correct commit as specified in cabal.project.
- Set-up IOHK binary caches How to set up the IOHK binary caches. "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
) withnpm run start
. - Copy-paste the auction contract into the Playground editor - don't forget to remove the module header!
- Compile.
- Simulate various auction scenarios.
- Build the English Auction contract with
-
Week #2
-
Week #3
-
Week #4
- Write an appropriate
EmulatorTrace
that uses thepayContract
contract in the Homework module. - Catch errors in the
payContract
contract in the same module.
- Write an appropriate
-
Week #5
-
Week #6
- Get the Oracle demo running and extend it in some way.
-
Week #7
- Implement the game of "Rock, Paper, Scissors" using state machines.
-
Week #8
- Add a new operation
close
to theTokenSale
-contract that allows the seller to close the contract and retrieve all remaining funds (including the NFT). - Modify the tests accordingly.
- Add a new operation
-
Week #9
- Modify the example Marlowe contract, so that Charlie must put down twice the deposit in the very beginning, which gets split between Alice and Bob if Charlie refuses to make his choice.
-
Week #10
- Get the Uniswap demo running and extend it in some way.
-
Week #2
-
Week #3
-
Week #4
-
Week #5
-
Week #7
-
Week #8
-
Week #9
Language.Marlowe.Semantics
, contains Marlowe types and semantics.Plutus.Contract.StateMachine
, contains types and functions for using state machines.Plutus.Contract.Test
, provides various ways to write tests for Plutus contracts.Plutus.Contract.Test.ContractModel
, support for property based testing of Plutus contracts.Plutus.Contracts.Uniswap
, an implementation of Uniswap in Plutus.Plutus.PAB.Webserver.API
, contains the HTTP-interface provided by the PAB.Plutus.Trace.Emulator
, contains types and functions related to traces.Plutus.V1.Ledger.Ada
, contains support for the Ada currency.Plutus.V1.Ledger.Contexts
, contains the definition of the context-related types.Plutus.V1.Ledger.Interval
, contains the definition of and helper functions for theInterval
type.Plutus.V1.Ledger.Slot
, contains the definition of theSlot
type.Plutus.V1.Ledger.Value
, contains the definition of and helper functions for theValue
type.PlutusTx.Data
, contains the definition of theData
type.PlutusTx.IsData.Class
, defines theIsData
class.