Commit c359d6c1 authored by Daniel Firth's avatar Daniel Firth
Browse files

Allow multiple TokenNames per policy

No related merge requests found
Pipeline #806 passed with stage
in 19 minutes and 34 seconds
......@@ -9,10 +9,10 @@ import PlutusTx
import PlutusTx.Prelude
{-# INLINEABLE mkPolicy #-}
mkPolicy :: TxOutRef -> TokenName -> () -> ScriptContext -> Bool
mkPolicy oref tn () ctx =
mkPolicy :: TxOutRef -> [TokenName] -> () -> ScriptContext -> Bool
mkPolicy oref tns () ctx =
traceIfFalse "Seed UTxO For NFT Not Consumed" hasUTxO
&& traceIfFalse "Must Mint Exactly One NFT" checkMintedAmount
&& traceIfFalse "Must Mint Exactly One NFT Per TokenName" checkMintedAmount
where
info :: TxInfo
info = scriptContextTxInfo ctx
......@@ -20,17 +20,21 @@ mkPolicy oref tn () ctx =
hasUTxO :: Bool
hasUTxO = any ((oref ==) . txInInfoOutRef) $ txInfoInputs info
ownSymbol :: CurrencySymbol
ownSymbol = ownCurrencySymbol ctx
minted :: Value
minted = txInfoMint info
checkMintedAmount :: Bool
checkMintedAmount = case flattenValue (txInfoMint info) of
[(_, tn', amt)] -> tn' == tn && amt == 1
_ -> False
checkMintedAmount = and $ map (\x -> valueOf minted ownSymbol x == 1) tns
policy :: TxOutRef -> TokenName -> Scripts.MintingPolicy
policy :: TxOutRef -> [TokenName] -> Scripts.MintingPolicy
policy oref tn =
mkMintingPolicyScript $
$$(PlutusTx.compile [||\oref' tn' -> Scripts.wrapMintingPolicy $ mkPolicy oref' tn'||])
`PlutusTx.applyCode` PlutusTx.liftCode oref
`PlutusTx.applyCode` PlutusTx.liftCode tn
curSymbol :: TxOutRef -> TokenName -> CurrencySymbol
curSymbol oref tn = scriptCurrencySymbol $ policy oref tn
curSymbol :: TxOutRef -> [TokenName] -> CurrencySymbol
curSymbol oref tns = scriptCurrencySymbol $ policy oref tns
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment