mirror of
https://github.com/FiloSpaTeam/plutus-pioneer-program.git
synced 2024-11-23 07:12:08 +01:00
Homeworks week 2,3
This commit is contained in:
parent
03e6e4ca9d
commit
5f5812f0b7
5 changed files with 60 additions and 20 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.vscode
|
|
@ -32,23 +32,28 @@ import Text.Printf (printf)
|
|||
{-# INLINABLE mkValidator #-}
|
||||
-- This should validate if and only if the two Booleans in the redeemer are equal!
|
||||
mkValidator :: () -> (Bool, Bool) -> ScriptContext -> Bool
|
||||
mkValidator _ _ _ = True -- FIX ME!
|
||||
mkValidator _ (a, b) _ = traceIfFalse "redeemers doesnt match!" $ a == b
|
||||
|
||||
data Typed
|
||||
instance Scripts.ValidatorTypes Typed where
|
||||
-- Implement the instance!
|
||||
type instance DatumType Typed = ()
|
||||
type instance RedeemerType Typed = (Bool, Bool)
|
||||
|
||||
typedValidator :: Scripts.TypedValidator Typed
|
||||
typedValidator = undefined -- FIX ME!
|
||||
typedValidator = Scripts.mkTypedValidator @Typed
|
||||
$$(PlutusTx.compile [|| mkValidator ||])
|
||||
$$(PlutusTx.compile [|| wrap ||])
|
||||
where
|
||||
wrap = Scripts.wrapValidator @() @(Bool, Bool)
|
||||
|
||||
validator :: Validator
|
||||
validator = undefined -- FIX ME!
|
||||
validator = Scripts.validatorScript typedValidator
|
||||
|
||||
valHash :: Ledger.ValidatorHash
|
||||
valHash = undefined -- FIX ME!
|
||||
valHash = Scripts.validatorHash typedValidator
|
||||
|
||||
scrAddress :: Ledger.Address
|
||||
scrAddress = undefined -- FIX ME!
|
||||
scrAddress = scriptAddress validator
|
||||
|
||||
type GiftSchema =
|
||||
Endpoint "give" Integer
|
||||
|
|
|
@ -43,23 +43,28 @@ PlutusTx.unstableMakeIsData ''MyRedeemer
|
|||
{-# INLINABLE mkValidator #-}
|
||||
-- This should validate if and only if the two Booleans in the redeemer are equal!
|
||||
mkValidator :: () -> MyRedeemer -> ScriptContext -> Bool
|
||||
mkValidator _ _ _ = True -- FIX ME!
|
||||
|
||||
data Typed
|
||||
mkValidator _ (MyRedeemer r) _ = traceIfFalse "Flags dont match" $ r.flag1 == r.flag2
|
||||
s
|
||||
dat Typed
|
||||
instance Scripts.ValidatorTypes Typed where
|
||||
-- Implement me!
|
||||
type instance DatumType Typed = ()
|
||||
type instance RedeemerType Typed = MyRedeemer
|
||||
|
||||
typedValidator :: Scripts.TypedValidator Typed
|
||||
typedValidator = undefined -- FIX ME!
|
||||
typedValidator = Scripts.mkTypedValidator @Typed -- FIX ME!
|
||||
$$(PlutusTx.compile [|| mkValidator ||])
|
||||
$$(PlutusTx.compile [|| wrap ||])
|
||||
where
|
||||
wrap = Scripts.wrapValidator @() @MyRedeemer
|
||||
|
||||
validator :: Validator
|
||||
validator = undefined -- FIX ME!
|
||||
validator = Scripts.validatorScript typedValidator -- FIX ME!
|
||||
|
||||
valHash :: Ledger.ValidatorHash
|
||||
valHash = undefined -- FIX ME!
|
||||
valHash = Scripts.validatorHash typedValidator -- FIX ME!
|
||||
|
||||
scrAddress :: Ledger.Address
|
||||
scrAddress = undefined -- FIX ME!
|
||||
scrAddress = scriptAddress validator -- FIX ME!
|
||||
|
||||
type GiftSchema =
|
||||
Endpoint "give" Integer
|
||||
|
|
|
@ -46,7 +46,22 @@ PlutusTx.unstableMakeIsData ''VestingDatum
|
|||
-- This should validate if either beneficiary1 has signed the transaction and the current slot is before or at the deadline
|
||||
-- or if beneficiary2 has signed the transaction and the deadline has passed.
|
||||
mkValidator :: VestingDatum -> () -> ScriptContext -> Bool
|
||||
mkValidator _ _ _ = False -- FIX ME!
|
||||
mkValidator dat () ctx = (traceIfFalse "beneficiary 1 not signed" signedBeneficiary1 &&
|
||||
traceIfFalse "beneficiary 1 deadline expired" (not $ deadlineExpired)) ||
|
||||
(traceIfFalse "beneficiary 2 not signed" signedBeneficiary2 &&
|
||||
traceIfFalse "beneficiary 2 deadline not reached yet" deadlineExpired)
|
||||
where
|
||||
info :: TxInfo
|
||||
info = scriptContextTxInfo ctx
|
||||
|
||||
signedBeneficiary1 :: Bool
|
||||
signedBeneficiary1 = txSignedBy info $ beneficiary1 dat
|
||||
|
||||
signedBeneficiary2 :: Bool
|
||||
signedBeneficiary2 = txSignedBy info $ beneficiary2 dat
|
||||
|
||||
deadlineExpired :: Bool
|
||||
deadlineExpired = contains (from $ deadline dat) $ txInfoValidRange info
|
||||
|
||||
data Vesting
|
||||
instance Scripts.ValidatorTypes Vesting where
|
||||
|
|
|
@ -36,7 +36,17 @@ import Text.Printf (printf)
|
|||
|
||||
{-# INLINABLE mkValidator #-}
|
||||
mkValidator :: PubKeyHash -> POSIXTime -> () -> ScriptContext -> Bool
|
||||
mkValidator _ _ _ _ = False -- FIX ME!
|
||||
mkValidator pkey dline () ctx = traceIfFalse "beneficiary signature missing" signedByBeneficiary &&
|
||||
traceIfFalse "deadline not reached" deadlineReached
|
||||
where
|
||||
info :: TxInfo
|
||||
info = scriptContextTxInfo ctx
|
||||
|
||||
signedByBeneficiary :: Bool
|
||||
signedByBeneficiary = txSignedBy info $ pkey
|
||||
|
||||
deadlineReached :: Bool
|
||||
deadlineReached = contains (from $ dline) $ txInfoValidRange info
|
||||
|
||||
data Vesting
|
||||
instance Scripts.ValidatorTypes Vesting where
|
||||
|
@ -44,13 +54,17 @@ instance Scripts.ValidatorTypes Vesting where
|
|||
type instance RedeemerType Vesting = ()
|
||||
|
||||
typedValidator :: PubKeyHash -> Scripts.TypedValidator Vesting
|
||||
typedValidator = undefined -- IMPLEMENT ME!
|
||||
typedValidator p = Scripts.mkTypedValidator @Vesting
|
||||
($$(PlutusTx.compile [|| mkValidator ||]) `PlutusTx.applyCode` PlutusTx.liftCode p)
|
||||
$$(PlutusTx.compile [|| wrap ||])
|
||||
where
|
||||
wrap = Scripts.wrapValidator @POSIXTime @()
|
||||
|
||||
validator :: PubKeyHash -> Validator
|
||||
validator = undefined -- IMPLEMENT ME!
|
||||
validator = Scripts.validatorScript . typedValidator
|
||||
|
||||
scrAddress :: PubKeyHash -> Ledger.Address
|
||||
scrAddress = undefined -- IMPLEMENT ME!
|
||||
scrAddress = scriptAddress . validator
|
||||
|
||||
data GiveParams = GiveParams
|
||||
{ gpBeneficiary :: !PubKeyHash
|
||||
|
@ -102,7 +116,7 @@ grab = do
|
|||
Just d -> d <= now
|
||||
|
||||
endpoints :: Contract () VestingSchema Text ()
|
||||
endpoints = (give' `select` grab') >> endpoints
|
||||
endpoints = (give' + grab') >> endpoints
|
||||
where
|
||||
give' = endpoint @"give" >>= give
|
||||
grab' = endpoint @"grab" >> grab
|
||||
|
|
Loading…
Reference in a new issue