mirror of
https://github.com/FiloSpaTeam/plutus-pioneer-program.git
synced 2024-11-25 08:12:00 +01:00
82 lines
2.1 KiB
Haskell
82 lines
2.1 KiB
Haskell
|
{-# LANGUAGE OverloadedStrings #-}
|
||
|
{-# LANGUAGE TypeApplications #-}
|
||
|
{-# LANGUAGE DataKinds #-}
|
||
|
{-# LANGUAGE TypeOperators #-}
|
||
|
|
||
|
module Week04.Contract where
|
||
|
|
||
|
import Control.Monad.Freer.Extras as Extras
|
||
|
import Data.Functor (void)
|
||
|
import Data.Text (Text, unpack)
|
||
|
import Data.Void (Void)
|
||
|
import Plutus.Contract as Contract
|
||
|
import Plutus.Trace.Emulator as Emulator
|
||
|
import Wallet.Emulator.Wallet
|
||
|
|
||
|
-- Contract w s e a
|
||
|
-- EmulatorTrace a
|
||
|
|
||
|
myContract1 :: Contract () BlockchainActions Text ()
|
||
|
myContract1 = do
|
||
|
void $ Contract.throwError "BOOM!"
|
||
|
Contract.logInfo @String "Hello from the contract!"
|
||
|
|
||
|
myTrace1 :: EmulatorTrace ()
|
||
|
myTrace1 = void $ activateContractWallet (Wallet 1) myContract1
|
||
|
|
||
|
test1 :: IO ()
|
||
|
test1 = runEmulatorTraceIO myTrace1
|
||
|
|
||
|
myContract2 :: Contract () BlockchainActions Void ()
|
||
|
myContract2 = Contract.handleError
|
||
|
(\err -> Contract.logError $ "Caught error: " ++ unpack err)
|
||
|
myContract1
|
||
|
|
||
|
myTrace2 :: EmulatorTrace ()
|
||
|
myTrace2 = void $ activateContractWallet (Wallet 1) myContract2
|
||
|
|
||
|
test2 :: IO ()
|
||
|
test2 = runEmulatorTraceIO myTrace2
|
||
|
|
||
|
type MySchema = BlockchainActions .\/ Endpoint "foo" Int
|
||
|
|
||
|
myContract3 :: Contract () MySchema Text ()
|
||
|
myContract3 = do
|
||
|
n <- endpoint @"foo"
|
||
|
Contract.logInfo n
|
||
|
|
||
|
myTrace3 :: EmulatorTrace ()
|
||
|
myTrace3 = do
|
||
|
h <- activateContractWallet (Wallet 1) myContract3
|
||
|
callEndpoint @"foo" h 42
|
||
|
|
||
|
test3 :: IO ()
|
||
|
test3 = runEmulatorTraceIO myTrace3
|
||
|
|
||
|
myContract4 :: Contract [Int] BlockchainActions Text ()
|
||
|
myContract4 = do
|
||
|
void $ Contract.waitNSlots 10
|
||
|
tell [1]
|
||
|
void $ Contract.waitNSlots 10
|
||
|
tell [2]
|
||
|
void $ Contract.waitNSlots 10
|
||
|
|
||
|
myTrace4 :: EmulatorTrace ()
|
||
|
myTrace4 = do
|
||
|
h <- activateContractWallet (Wallet 1) myContract4
|
||
|
|
||
|
void $ Emulator.waitNSlots 5
|
||
|
xs <- observableState h
|
||
|
Extras.logInfo $ show xs
|
||
|
|
||
|
void $ Emulator.waitNSlots 10
|
||
|
ys <- observableState h
|
||
|
Extras.logInfo $ show ys
|
||
|
|
||
|
void $ Emulator.waitNSlots 10
|
||
|
zs <- observableState h
|
||
|
Extras.logInfo $ show zs
|
||
|
|
||
|
test4 :: IO ()
|
||
|
test4 = runEmulatorTraceIO myTrace4
|