-- Plutus Smart Contract
validator :: Validator
validator = mkValidatorScript $$(PlutusTx.compile [|| mkValidator ||])
where
mkValidator :: () -> () -> ScriptContext -> Bool
mkValidator _ _ _ = True
-- Token Minting Policy
{-# INLINABLE mkPolicy #-}
mkPolicy :: TxOutRef -> () -> ScriptContext -> Bool
mkPolicy oref () ctx = traceIfFalse "UTxO not consumed" hasUTxO
where
info :: TxInfo
info = scriptContextTxInfo ctx
hasUTxO :: Bool
hasUTxO = any (\i -> txInInfoOutRef i == oref) $ txInfoInputs info
-- Datum and Redeemer
data AuctionDatum = AuctionDatum
{ seller :: PubKeyHash
, minBid :: Integer
, deadline :: POSIXTime
}
PlutusTx.unstableMakeIsData ''AuctionDatum
-- Validator Script
{-# INLINABLE mkValidator #-}
mkValidator :: AuctionDatum -> AuctionRedeemer -> ScriptContext -> Bool
mkValidator dat red ctx =
traceIfFalse "deadline not reached" deadlineReached &&
traceIfFalse "bid too low" sufficientBid
where
info :: TxInfo
info = scriptContextTxInfo ctx
-- NFT Minting
{-# INLINABLE mkNFTPolicy #-}
mkNFTPolicy :: TxOutRef -> TokenName -> () -> ScriptContext -> Bool
mkNFTPolicy oref tn () ctx =
traceIfFalse "UTxO not consumed" hasUTxO &&
traceIfFalse "wrong amount minted" checkMintedAmount
where
info :: TxInfo
info = scriptContextTxInfo ctx
-- Staking Validator
{-# INLINABLE mkStakingValidator #-}
mkStakingValidator :: StakingDatum -> () -> ScriptContext -> Bool
mkStakingValidator dat () ctx =
traceIfFalse "invalid withdrawal" validWithdrawal
where
info :: TxInfo
info = scriptContextTxInfo ctx
validWithdrawal = True
-- Plutus Smart Contract
validator :: Validator
validator = mkValidatorScript $$(PlutusTx.compile [|| mkValidator ||])
where
mkValidator :: () -> () -> ScriptContext -> Bool
mkValidator _ _ _ = True
-- Token Minting Policy
{-# INLINABLE mkPolicy #-}
mkPolicy :: TxOutRef -> () -> ScriptContext -> Bool
mkPolicy oref () ctx = traceIfFalse "UTxO not consumed" hasUTxO
where
info :: TxInfo
info = scriptContextTxInfo ctx
hasUTxO :: Bool
hasUTxO = any (\i -> txInInfoOutRef i == oref) $ txInfoInputs info
-- Datum and Redeemer
data AuctionDatum = AuctionDatum
{ seller :: PubKeyHash
, minBid :: Integer
, deadline :: POSIXTime
}
PlutusTx.unstableMakeIsData ''AuctionDatum
-- Validator Script
{-# INLINABLE mkValidator #-}
mkValidator :: AuctionDatum -> AuctionRedeemer -> ScriptContext -> Bool
mkValidator dat red ctx =
traceIfFalse "deadline not reached" deadlineReached &&
traceIfFalse "bid too low" sufficientBid
where
info :: TxInfo
info = scriptContextTxInfo ctx
-- NFT Minting
{-# INLINABLE mkNFTPolicy #-}
mkNFTPolicy :: TxOutRef -> TokenName -> () -> ScriptContext -> Bool
mkNFTPolicy oref tn () ctx =
traceIfFalse "UTxO not consumed" hasUTxO &&
traceIfFalse "wrong amount minted" checkMintedAmount
where
info :: TxInfo
info = scriptContextTxInfo ctx
-- Staking Validator
{-# INLINABLE mkStakingValidator #-}
mkStakingValidator :: StakingDatum -> () -> ScriptContext -> Bool
mkStakingValidator dat () ctx =
traceIfFalse "invalid withdrawal" validWithdrawal
where
info :: TxInfo
info = scriptContextTxInfo ctx
validWithdrawal = True