Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 7 additions & 43 deletions plutus-scripts/PlutusScripts/Batch7/MultiIndexArray.hs
Original file line number Diff line number Diff line change
@@ -1,48 +1,12 @@
{-# OPTIONS_GHC -fplugin-opt Plinth.Plugin:target-version=1.1.0 #-}

-- | PlutusV3 and PlutusV4 / PLC 1.1.0 policies for multiIndexArray (batch 7).
-- | Versioned multiIndexArray policies for PlutusV3 and PlutusV4.
module PlutusScripts.Batch7.MultiIndexArray (allMultiIndexArrayScripts) where

import Data.Text (Text)
import Helpers.Envelopes (VersionedScript (VersionedScript), plc110)
import PlutusCore.Version (plcVersion110)
import PlutusLedgerApi.Common.Versions (PlutusLedgerLanguage (PlutusV3, PlutusV4))
import PlutusScripts.Batch7.MultiIndexArray.Common (
failingLookups,
mkDataPolicy,
mkFailingPolicy,
mkIntegerPolicy,
mkOverLimitPolicy,
mkRepeatedPolicy,
repeatedSelections,
)
import PlutusTx (CompiledCode, compile, liftCode, unsafeApplyCode)
import Helpers.Envelopes (VersionedScript)
import PlutusScripts.Batch7.MultiIndexArray.V110 qualified as V110
import PlutusScripts.Batch7.MultiIndexArray.V120 qualified as V120
import PlutusTx.Prelude qualified as P

-- | The policies do not read the script context, so every ledger language gets the same code.
-- | Combine both Plutus Core versions, each covering both ledger languages.
allMultiIndexArrayScripts :: [VersionedScript (P.BuiltinData -> P.BuiltinUnit)]
allMultiIndexArrayScripts = concatMap multiIndexArrayScripts [PlutusV3, PlutusV4]

multiIndexArrayScripts :: PlutusLedgerLanguage -> [VersionedScript (P.BuiltinData -> P.BuiltinUnit)]
multiIndexArrayScripts ll =
map (uncurry (VersionedScript ll plc110)) policies

-- | Named policies; each failing policy isolates one observable failure.
policies :: [(Text, CompiledCode (P.BuiltinData -> P.BuiltinUnit))]
policies =
[ ("succeedingMultiIndexArrayPolicyScript", $$(compile [||mkIntegerPolicy||]))
, ("succeedingMultiIndexArrayDataPolicyScript", $$(compile [||mkDataPolicy||]))
]
<> [(name, repeated count) | (name, count) <- repeatedSelections]
<> [(name, failing elements indices) | (name, elements, indices) <- failingLookups]
<> [("failingMultiIndexArrayOverLimitPolicyScript", $$(compile [||mkOverLimitPolicy||]))]
where
repeated :: Integer -> CompiledCode (P.BuiltinData -> P.BuiltinUnit)
repeated count =
$$(compile [||mkRepeatedPolicy||])
`unsafeApplyCode` liftCode plcVersion110 count
failing :: [Integer] -> [Integer] -> CompiledCode (P.BuiltinData -> P.BuiltinUnit)
failing elements indices =
$$(compile [||mkFailingPolicy||])
`unsafeApplyCode` liftCode plcVersion110 elements
`unsafeApplyCode` liftCode plcVersion110 indices
allMultiIndexArrayScripts =
V110.allMultiIndexArrayScripts <> V120.allMultiIndexArrayScripts
57 changes: 57 additions & 0 deletions plutus-scripts/PlutusScripts/Batch7/MultiIndexArray/V110.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{-# OPTIONS_GHC -fplugin-opt Plinth.Plugin:target-version=1.1.0 #-}

-- | PlutusV3 and PlutusV4 / PLC 1.1.0 multiIndexArray policies.
module PlutusScripts.Batch7.MultiIndexArray.V110 (
allMultiIndexArrayScripts,
) where

import Data.Text (Text)
import Helpers.Envelopes (VersionedScript (VersionedScript), plc110)
import PlutusCore.Version (plcVersion110)
import PlutusLedgerApi.Common.Versions (
PlutusLedgerLanguage (PlutusV3, PlutusV4),
)
import PlutusScripts.Batch7.MultiIndexArray.Common (
failingLookups,
mkDataPolicy,
mkFailingPolicy,
mkIntegerPolicy,
mkOverLimitPolicy,
mkRepeatedPolicy,
repeatedSelections,
)
import PlutusTx (CompiledCode, compile, liftCode, unsafeApplyCode)
import PlutusTx.Prelude qualified as P

-- | Context-independent policies share compiled code across ledger languages.
allMultiIndexArrayScripts :: [VersionedScript (P.BuiltinData -> P.BuiltinUnit)]
allMultiIndexArrayScripts = concatMap multiIndexArrayScripts [PlutusV3, PlutusV4]

multiIndexArrayScripts
:: PlutusLedgerLanguage
-> [VersionedScript (P.BuiltinData -> P.BuiltinUnit)]
multiIndexArrayScripts ll =
map (uncurry (VersionedScript ll plc110)) policies

-- | Named policies, compiled and lifted at PLC 1.1.0.
policies :: [(Text, CompiledCode (P.BuiltinData -> P.BuiltinUnit))]
policies =
[ ("succeedingMultiIndexArrayPolicyScript", $$(compile [||mkIntegerPolicy||]))
, ("succeedingMultiIndexArrayDataPolicyScript", $$(compile [||mkDataPolicy||]))
]
<> [(name, repeated count) | (name, count) <- repeatedSelections]
<> [(name, failing elements indices) | (name, elements, indices) <- failingLookups]
<> [("failingMultiIndexArrayOverLimitPolicyScript", $$(compile [||mkOverLimitPolicy||]))]
where
repeated :: Integer -> CompiledCode (P.BuiltinData -> P.BuiltinUnit)
repeated count =
$$(compile [||mkRepeatedPolicy||])
`unsafeApplyCode` liftCode plcVersion110 count
failing
:: [Integer]
-> [Integer]
-> CompiledCode (P.BuiltinData -> P.BuiltinUnit)
failing elements indices =
$$(compile [||mkFailingPolicy||])
`unsafeApplyCode` liftCode plcVersion110 elements
`unsafeApplyCode` liftCode plcVersion110 indices
57 changes: 57 additions & 0 deletions plutus-scripts/PlutusScripts/Batch7/MultiIndexArray/V120.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{-# OPTIONS_GHC -fplugin-opt Plinth.Plugin:target-version=1.2.0 #-}

-- | PlutusV3 and PlutusV4 / PLC 1.2.0 multiIndexArray policies.
module PlutusScripts.Batch7.MultiIndexArray.V120 (
allMultiIndexArrayScripts,
) where

import Data.Text (Text)
import Helpers.Envelopes (VersionedScript (VersionedScript), plc120)
import PlutusCore.Version (plcVersion120)
import PlutusLedgerApi.Common.Versions (
PlutusLedgerLanguage (PlutusV3, PlutusV4),
)
import PlutusScripts.Batch7.MultiIndexArray.Common (
failingLookups,
mkDataPolicy,
mkFailingPolicy,
mkIntegerPolicy,
mkOverLimitPolicy,
mkRepeatedPolicy,
repeatedSelections,
)
import PlutusTx (CompiledCode, compile, liftCode, unsafeApplyCode)
import PlutusTx.Prelude qualified as P

-- | Context-independent policies share compiled code across ledger languages.
allMultiIndexArrayScripts :: [VersionedScript (P.BuiltinData -> P.BuiltinUnit)]
allMultiIndexArrayScripts = concatMap multiIndexArrayScripts [PlutusV3, PlutusV4]

multiIndexArrayScripts
:: PlutusLedgerLanguage
-> [VersionedScript (P.BuiltinData -> P.BuiltinUnit)]
multiIndexArrayScripts ll =
map (uncurry (VersionedScript ll plc120)) policies

-- | Reuse the PLC 1.1.0 scenarios, compiling and lifting at PLC 1.2.0.
policies :: [(Text, CompiledCode (P.BuiltinData -> P.BuiltinUnit))]
policies =
[ ("succeedingMultiIndexArrayPolicyScript", $$(compile [||mkIntegerPolicy||]))
, ("succeedingMultiIndexArrayDataPolicyScript", $$(compile [||mkDataPolicy||]))
]
<> [(name, repeated count) | (name, count) <- repeatedSelections]
<> [(name, failing elements indices) | (name, elements, indices) <- failingLookups]
<> [("failingMultiIndexArrayOverLimitPolicyScript", $$(compile [||mkOverLimitPolicy||]))]
where
repeated :: Integer -> CompiledCode (P.BuiltinData -> P.BuiltinUnit)
repeated count =
$$(compile [||mkRepeatedPolicy||])
`unsafeApplyCode` liftCode plcVersion120 count
failing
:: [Integer]
-> [Integer]
-> CompiledCode (P.BuiltinData -> P.BuiltinUnit)
failing elements indices =
$$(compile [||mkFailingPolicy||])
`unsafeApplyCode` liftCode plcVersion120 elements
`unsafeApplyCode` liftCode plcVersion120 indices
2 changes: 2 additions & 0 deletions plutus-scripts/plutus-scripts.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,8 @@ library scripts
PlutusScripts.Batch6.Value.V3_110
PlutusScripts.Batch7.MultiIndexArray
PlutusScripts.Batch7.MultiIndexArray.Common
PlutusScripts.Batch7.MultiIndexArray.V110
PlutusScripts.Batch7.MultiIndexArray.V120
PlutusScripts.Bitwise.Complement
PlutusScripts.Bitwise.Conversions
PlutusScripts.Bitwise.CountFindFirstSet
Expand Down