diff --git a/plutus-scripts/PlutusScripts/Batch7/MultiIndexArray.hs b/plutus-scripts/PlutusScripts/Batch7/MultiIndexArray.hs index b546d09..1a2bc26 100644 --- a/plutus-scripts/PlutusScripts/Batch7/MultiIndexArray.hs +++ b/plutus-scripts/PlutusScripts/Batch7/MultiIndexArray.hs @@ -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 diff --git a/plutus-scripts/PlutusScripts/Batch7/MultiIndexArray/V110.hs b/plutus-scripts/PlutusScripts/Batch7/MultiIndexArray/V110.hs new file mode 100644 index 0000000..0eb6994 --- /dev/null +++ b/plutus-scripts/PlutusScripts/Batch7/MultiIndexArray/V110.hs @@ -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 diff --git a/plutus-scripts/PlutusScripts/Batch7/MultiIndexArray/V120.hs b/plutus-scripts/PlutusScripts/Batch7/MultiIndexArray/V120.hs new file mode 100644 index 0000000..fb3285e --- /dev/null +++ b/plutus-scripts/PlutusScripts/Batch7/MultiIndexArray/V120.hs @@ -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 diff --git a/plutus-scripts/plutus-scripts.cabal b/plutus-scripts/plutus-scripts.cabal index bff877f..b91451f 100644 --- a/plutus-scripts/plutus-scripts.cabal +++ b/plutus-scripts/plutus-scripts.cabal @@ -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