From 74098c12eb4416e7944d28d39a802bed9e475c62 Mon Sep 17 00:00:00 2001 From: Nadia Yvette Chambers Date: Thu, 6 Apr 2023 20:08:26 -0400 Subject: [PATCH 1/5] plutus-scripts-bench: Use TH-generated scripts. This helps keep flake dependencies down & avoids having to go through a different team for changes to the scripts. --- .../plutus-scripts-bench.cabal | 3 +++ .../src/Cardano/Benchmarking/PlutusScripts.hs | 21 ++++++++++--------- .../Benchmarking/PlutusScripts/CustomCall.hs | 12 +++++------ .../PlutusScripts/EcdsaSecp256k1Loop.hs | 13 ++++++------ .../Benchmarking/PlutusScripts/Loop.hs | 12 +++++------ .../PlutusScripts/SchnorrSecp256k1Loop.hs | 13 ++++++------ .../src/Cardano/Benchmarking/ScriptAPI.hs | 17 +++++++++++++++ .../src/Cardano/Benchmarking/Script/Core.hs | 13 +++--------- .../src/Cardano/Benchmarking/Script/Types.hs | 2 +- .../src/Cardano/TxGenerator/Setup/Plutus.hs | 9 ++++++-- .../src/Cardano/TxGenerator/Types.hs | 2 +- bench/tx-generator/test/ApiTest.hs | 11 ++++++---- nix/nixos/tx-generator-service.nix | 12 +++++++++-- nix/workbench/profile/prof1-variants.jq | 6 +++--- 14 files changed, 89 insertions(+), 57 deletions(-) create mode 100644 bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs diff --git a/bench/plutus-scripts-bench/plutus-scripts-bench.cabal b/bench/plutus-scripts-bench/plutus-scripts-bench.cabal index dbe7e2eb917..86b9c1ce641 100644 --- a/bench/plutus-scripts-bench/plutus-scripts-bench.cabal +++ b/bench/plutus-scripts-bench/plutus-scripts-bench.cabal @@ -56,6 +56,7 @@ library exposed-modules: Cardano.Benchmarking.PlutusScripts Cardano.Benchmarking.PlutusScripts.CustomCallTypes + Cardano.Benchmarking.ScriptAPI other-modules: Cardano.Benchmarking.PlutusScripts.CustomCall @@ -76,6 +77,8 @@ library -- Non-IOG dependencies ------------------------ build-depends: + , text , bytestring , serialise , template-haskell + , filepath diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs index a83c6ae4d23..3f7f59a594b 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs @@ -10,11 +10,16 @@ module Cardano.Benchmarking.PlutusScripts , findPlutusScript , getAllScripts , listPlutusScripts + , asAnyLang + , normalizeModuleName ) where import Prelude import Data.ByteString.Lazy as LBS (ByteString) +import Data.Text(split, pack) +import Data.Maybe(listToMaybe) +import System.FilePath(takeBaseName) import Cardano.Api @@ -22,27 +27,23 @@ import qualified Cardano.Benchmarking.PlutusScripts.CustomCall as CustomCall import qualified Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1Loop as ECDSA import qualified Cardano.Benchmarking.PlutusScripts.Loop as Loop import qualified Cardano.Benchmarking.PlutusScripts.SchnorrSecp256k1Loop as Schnorr +import Cardano.Benchmarking.ScriptAPI -getAllScripts :: - [(String, ScriptInAnyLang)] +getAllScripts :: [BenchScript] getAllScripts = - [ (normalizeModuleName CustomCall.scriptName, asAnyLang CustomCall.scriptSerialized) - , (normalizeModuleName ECDSA.scriptName , asAnyLang ECDSA.scriptSerialized) - , (normalizeModuleName Loop.scriptName , asAnyLang Loop.scriptSerialized) - , (normalizeModuleName Schnorr.scriptName , asAnyLang Schnorr.scriptSerialized) - ] + [ CustomCall.script, ECDSA.script, Loop.script, Schnorr.script ] listPlutusScripts :: [String] listPlutusScripts - = fst <$> getAllScripts + = psName <$> getAllScripts findPlutusScript :: String -> Maybe ScriptInAnyLang -findPlutusScript - = (`lookup` getAllScripts) +findPlutusScript s + = listToMaybe [psScript t | t <- getAllScripts, last (split (=='.') . pack $ psName t) == pack (takeBaseName s)] encodePlutusScript :: ScriptInAnyLang diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs index 28b7c6240ee..43fab02297d 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs @@ -7,24 +7,24 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} -module Cardano.Benchmarking.PlutusScripts.CustomCall - ( scriptName - , scriptSerialized - ) where +module Cardano.Benchmarking.PlutusScripts.CustomCall (script) where import Language.Haskell.TH import Language.Haskell.TH.Syntax import Prelude as Haskell (String, (.), (<$>)) -import Cardano.Api (PlutusScript, PlutusScriptV2) -import Cardano.Api.Shelley (PlutusScript (..)) +import Cardano.Api (PlutusScriptV2, toScriptInAnyLang, Script(..)) +import Cardano.Api.Shelley (PlutusScript (..), PlutusScriptVersion (..)) import qualified Data.ByteString.Short as SBS import qualified PlutusLedgerApi.V2 as PlutusV2 import qualified PlutusTx import PlutusTx.Prelude as Plutus hiding (Semigroup (..), (.), (<$>)) +import Cardano.Benchmarking.ScriptAPI import Cardano.Benchmarking.PlutusScripts.CustomCallTypes +script :: BenchScript +script = mkBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV2 scriptSerialized)) scriptName :: Haskell.String scriptName diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs index b459bfeb396..ddd3fa6aebb 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs @@ -4,16 +4,14 @@ {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} -module Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1Loop - ( scriptName - , scriptSerialized - ) where +module Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1Loop (script) where import Language.Haskell.TH import Language.Haskell.TH.Syntax -import Cardano.Api (PlutusScript, PlutusScriptV2) -import Cardano.Api.Shelley (PlutusScript (..)) +import Cardano.Api (PlutusScript, PlutusScriptV2, Script(..), toScriptInAnyLang) +import Cardano.Api.Shelley (PlutusScript (..), PlutusScriptVersion (..)) +import Cardano.Benchmarking.ScriptAPI import qualified Data.ByteString.Short as SBS import qualified PlutusLedgerApi.V2 as PlutusV2 import qualified PlutusTx @@ -26,6 +24,9 @@ scriptName :: Haskell.String scriptName = $(LitE . StringL . loc_module <$> qLocation) +script :: BenchScript +script = mkBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV2 scriptSerialized)) + {-# INLINEABLE mkValidator #-} mkValidator :: BuiltinData -> BuiltinData -> BuiltinData -> () diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop.hs index 819ed7f31a5..75e6326283d 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop.hs @@ -4,17 +4,14 @@ {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} -module Cardano.Benchmarking.PlutusScripts.Loop - ( scriptName - , scriptSerialized - ) where +module Cardano.Benchmarking.PlutusScripts.Loop (script) where import Language.Haskell.TH import Language.Haskell.TH.Syntax import Prelude hiding (pred, ($), (&&), (<), (==)) -import Cardano.Api.Shelley (PlutusScript (..), PlutusScriptV1) - +import Cardano.Api.Shelley (PlutusScript (..), PlutusScriptV1, Script(..), toScriptInAnyLang, PlutusScriptVersion(..)) +import Cardano.Benchmarking.ScriptAPI import qualified Data.ByteString.Short as SBS import qualified PlutusLedgerApi.V2 as PlutusV2 @@ -27,6 +24,9 @@ scriptName :: String scriptName = $(LitE . StringL . loc_module <$> qLocation) +script :: BenchScript +script = mkBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV1 scriptSerialized)) + {-# INLINABLE mkValidator #-} mkValidator :: BuiltinData -> BuiltinData -> BuiltinData -> () diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs index 379926b12ca..2c46b4a8be5 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs @@ -4,16 +4,14 @@ {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} -module Cardano.Benchmarking.PlutusScripts.SchnorrSecp256k1Loop - ( scriptName - , scriptSerialized - ) where +module Cardano.Benchmarking.PlutusScripts.SchnorrSecp256k1Loop (script) where import Language.Haskell.TH import Language.Haskell.TH.Syntax -import Cardano.Api (PlutusScript, PlutusScriptV2) -import Cardano.Api.Shelley (PlutusScript (..)) +import Cardano.Api (PlutusScript, PlutusScriptV2, Script(..), toScriptInAnyLang) +import Cardano.Api.Shelley (PlutusScript (..), PlutusScriptVersion (..)) +import Cardano.Benchmarking.ScriptAPI import qualified Data.ByteString.Short as SBS import qualified PlutusLedgerApi.V2 as PlutusV2 import qualified PlutusTx @@ -26,6 +24,9 @@ scriptName :: Haskell.String scriptName = $(LitE . StringL . loc_module <$> qLocation) +script :: BenchScript +script = mkBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV2 scriptSerialized)) + {-# INLINEABLE mkValidator #-} mkValidator :: BuiltinData -> BuiltinData -> BuiltinData -> () diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs new file mode 100644 index 00000000000..0a4c9b21d0a --- /dev/null +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs @@ -0,0 +1,17 @@ +{-# OPTIONS_GHC -fno-warn-orphans #-} + +module Cardano.Benchmarking.ScriptAPI + (BenchScript, psName, psScript, mkBenchScript) + where + +import Prelude as Haskell (String) +import Cardano.Api (ScriptInAnyLang) + +data BenchScript + = BenchScript + { psName :: String + , psScript :: ScriptInAnyLang + } + +mkBenchScript :: String -> ScriptInAnyLang -> BenchScript +mkBenchScript = BenchScript diff --git a/bench/tx-generator/src/Cardano/Benchmarking/Script/Core.hs b/bench/tx-generator/src/Cardano/Benchmarking/Script/Core.hs index 548665473ea..65c98b7d586 100644 --- a/bench/tx-generator/src/Cardano/Benchmarking/Script/Core.hs +++ b/bench/tx-generator/src/Cardano/Benchmarking/Script/Core.hs @@ -23,7 +23,6 @@ import Control.Monad.Trans.Except import Control.Monad.Trans.Except.Extra import "contra-tracer" Control.Tracer (nullTracer) import Data.ByteString.Lazy.Char8 as BSL (writeFile) -import Data.List (isSuffixOf) import Data.Ratio ((%)) import Streaming @@ -55,7 +54,6 @@ import Cardano.TxGenerator.Setup.SigningKey import Cardano.Benchmarking.OuroborosImports as Core (LocalSubmitTx, SigningKeyFile, makeLocalConnectInfo, protocolToCodecConfig) -import Cardano.Benchmarking.PlutusScripts (findPlutusScript) import Cardano.Benchmarking.LogTypes as Core (TraceBenchTxSubmit (..), btConnect_, btN2N_, btSubmission2_, btTxSubmit_) @@ -409,12 +407,7 @@ makePlutusContext :: forall era. IsShelleyBasedEra era -> ActionM (Witness WitCtxTxIn era, ScriptInAnyLang, ScriptData, Lovelace) makePlutusContext ScriptSpec{..} = do protocolParameters <- getProtocolParameters - script <- if ".hs" `isSuffixOf` scriptSpecFile - then maybe - (liftTxGenError $ TxGenError $ "Plutus script not included: " ++ scriptSpecFile) - return - (findPlutusScript scriptSpecFile) - else liftIOSafe $ Plutus.readPlutusScript scriptSpecFile + script <- liftIOSafe $ Plutus.readPlutusScript scriptSpecFile executionUnitPrices <- case protocolParamPrices protocolParameters of Just x -> return x @@ -458,7 +451,7 @@ makePlutusContext ScriptSpec{..} = do traceDebug $ "Plutus auto mode : Available budget per Tx: " ++ show perTxBudget ++ " -- split between inputs per Tx: " ++ show txInputs - case plutusAutoScaleBlockfit protocolParameters scriptSpecFile script autoBudget strategy txInputs of + case plutusAutoScaleBlockfit protocolParameters (either ("builtin: "++) ("plutus file: "++) scriptSpecFile) script autoBudget strategy txInputs of Left err -> liftTxGenError err Right (summary, PlutusAutoBudget{..}, preRun) -> do setEnvSummary summary @@ -466,7 +459,7 @@ makePlutusContext ScriptSpec{..} = do return (unsafeHashableScriptData autoBudgetDatum, autoBudgetRedeemer, preRun) let msg = mconcat [ "Plutus Benchmark :" - , " Script: ", scriptSpecFile + , " Script: ", show scriptSpecFile , ", Datum: ", show scriptData , ", Redeemer: ", show scriptRedeemer , ", StatedBudget: ", show executionUnits diff --git a/bench/tx-generator/src/Cardano/Benchmarking/Script/Types.hs b/bench/tx-generator/src/Cardano/Benchmarking/Script/Types.hs index 9316f9583ae..f66c2f5a2d3 100644 --- a/bench/tx-generator/src/Cardano/Benchmarking/Script/Types.hs +++ b/bench/tx-generator/src/Cardano/Benchmarking/Script/Types.hs @@ -108,7 +108,7 @@ deriving instance Generic ScriptBudget data ScriptSpec = ScriptSpec { - scriptSpecFile :: !FilePath + scriptSpecFile :: !(Either String FilePath) , scriptSpecBudget :: !ScriptBudget , scriptSpecPlutusType :: !TxGenPlutusType } diff --git a/bench/tx-generator/src/Cardano/TxGenerator/Setup/Plutus.hs b/bench/tx-generator/src/Cardano/TxGenerator/Setup/Plutus.hs index 2ede993c547..87cc0f39ffb 100644 --- a/bench/tx-generator/src/Cardano/TxGenerator/Setup/Plutus.hs +++ b/bench/tx-generator/src/Cardano/TxGenerator/Setup/Plutus.hs @@ -27,14 +27,19 @@ import Cardano.Ledger.Alonzo.TxInfo (exBudgetToExUnits) import qualified PlutusLedgerApi.V1 as PlutusV1 import qualified PlutusLedgerApi.V2 as PlutusV2 +import Cardano.Benchmarking.PlutusScripts(findPlutusScript) import Cardano.TxGenerator.Types type ProtocolVersion = (Int, Int) -readPlutusScript :: FilePath -> IO (Either TxGenError ScriptInAnyLang) -readPlutusScript fp +readPlutusScript :: Either String FilePath -> IO (Either TxGenError ScriptInAnyLang) +readPlutusScript (Left s) + = return + $ maybe (Left . TxGenError $ "readPlutusScript: " ++ s ++ " not found.") + Right (findPlutusScript s) +readPlutusScript (Right fp) = runExceptT $ do script <- firstExceptT ApiError $ readFileScriptInAnyLang fp diff --git a/bench/tx-generator/src/Cardano/TxGenerator/Types.hs b/bench/tx-generator/src/Cardano/TxGenerator/Types.hs index 1935a1dee39..75554147ad2 100644 --- a/bench/tx-generator/src/Cardano/TxGenerator/Types.hs +++ b/bench/tx-generator/src/Cardano/TxGenerator/Types.hs @@ -90,7 +90,7 @@ data TxGenPlutusType data TxGenPlutusParams = PlutusOn -- ^ Generate Plutus Txs for given script { plutusType :: !TxGenPlutusType - , plutusScript :: !FilePath -- ^ Path to the Plutus script + , plutusScript :: !(Either String FilePath) -- ^ Path to the Plutus script , plutusDatum :: !(Maybe FilePath) -- ^ Datum passed to the Plutus script (JSON file in ScriptData schema) , plutusRedeemer :: !(Maybe FilePath) -- ^ Redeemer passed to the Plutus script (JSON file in ScriptData schema) , plutusExecMemory :: !(Maybe Natural) -- ^ Max. memory for ExecutionUnits (overriding corresponding protocol parameter) diff --git a/bench/tx-generator/test/ApiTest.hs b/bench/tx-generator/test/ApiTest.hs index baf0342f6a3..fc2092e3381 100644 --- a/bench/tx-generator/test/ApiTest.hs +++ b/bench/tx-generator/test/ApiTest.hs @@ -10,6 +10,7 @@ module Main (main) where +import Control.Arrow import Control.Monad import Control.Monad.Trans.Except import Control.Monad.Trans.Except.Extra @@ -155,7 +156,7 @@ checkPlutusLoop :: checkPlutusLoop (Just PlutusOn{..}) = do script <- either (die . show) pure =<< readPlutusScript plutusScript - putStrLn $ "--> Read plutus script: " ++ plutusScript + putStrLn $ "--> Read plutus script: " ++ (id ||| id) plutusScript protocolParameters <- readProtocolParametersOrDie let count = 1_792 -- arbitrary counter for a loop script; should respect mainnet limits @@ -202,9 +203,11 @@ checkPlutusLoop (Just PlutusOn{..}) mul :: Natural -> Double -> Natural mul n d = floor $ d * fromIntegral n - getRedeemerFile = - let redeemerPath = (<.> ".redeemer.json") $ dropExtension $ takeFileName plutusScript - in getDataFileName $ "data" redeemerPath + getRedeemerFile + = case plutusScript of + Right file -> let redeemerPath = (<.> ".redeemer.json") $ dropExtension $ takeFileName file + in getDataFileName $ "data" redeemerPath + Left _ -> getDataFileName "data/loop.redeemer.json" checkPlutusLoop _ = putStrLn "--> No plutus script defined." diff --git a/nix/nixos/tx-generator-service.nix b/nix/nixos/tx-generator-service.nix index 0e2b9143ada..72d8e2bad8a 100644 --- a/nix/nixos/tx-generator-service.nix +++ b/nix/nixos/tx-generator-service.nix @@ -5,7 +5,15 @@ let plutus = if (cfg.plutus.type or null) == null then null else { inherit (cfg.plutus) type; - script = "${pkgs.plutus-scripts}/generated-plutus-scripts/${cfg.plutus.script}"; + ## Basically do something like: + ## script = "${pkgs.plutus-scripts}/generated-plutus-scripts/${cfg.plutus.script}"; + ## except for having to weave the Either through things + script = if (cfg.plutus.script?Left) + ## The internal ID doesn't need path qualification. + then { Left = cfg.plutus.script.Left; } + else { Right = pkgs.plutus-scripts + + "/generated-plutus-scripts/" + + cfg.plutus.script.Right; }; redeemer = pkgs.writeText "plutus-redeemer.json" (__toJSON cfg.plutus.redeemer); datum = if cfg.plutus.datum == null then null else pkgs.writeText "plutus-datum.json" (__toJSON cfg.plutus.datum); @@ -66,7 +74,7 @@ in pkgs.commonLib.defServiceModule ## plutus = { type = mayOpt str "Plutus script type."; - script = mayOpt str "Name of the Plutus script from plutus-apps, prefixed with either of v1/v2."; + script = mayOpt attrs "Name of the Plutus script from plutus-apps, prefixed with either of v1/v2."; limitExecutionMem = mayOpt int "Limit for saturation tuning: mem; null means per-Tx limit from ProtocolParameters."; limitExecutionSteps = mayOpt int "Limit for saturation tuning: steps; null means per-Tx limit from ProtocolParameters."; datum = mayOpt attrs "Plutus script datum."; diff --git a/nix/workbench/profile/prof1-variants.jq b/nix/workbench/profile/prof1-variants.jq index f26018598e6..c37d29797ef 100644 --- a/nix/workbench/profile/prof1-variants.jq +++ b/nix/workbench/profile/prof1-variants.jq @@ -276,7 +276,7 @@ def all_profile_variants: ({ generator: { plutus: { type: "LimitSaturationLoop" - , script: "v1/loop.plutus" + , script: { "Left": "Loop.hs" } , redeemer: { "int": 1000000 } } @@ -288,7 +288,7 @@ def all_profile_variants: ({ generator: { plutus: { type: "LimitTxPerBlock_8" - , script: "v2/ecdsa-secp256k1-loop.plutus" + , script: { "Left": "EcdsaSecp256k1Loop.hs" } , redeemer: { constructor: 0 , fields: @@ -311,7 +311,7 @@ def all_profile_variants: ({ generator: { plutus: { type: "LimitTxPerBlock_8" - , script: "v2/schnorr-secp256k1-loop.plutus" + , script: { "Left": "SchnorrSecp256k1Loop.hs" } , redeemer: { constructor: 0 , fields: From 3c5122237b00f4bbfbe04cba9f4ac324c570a648 Mon Sep 17 00:00:00 2001 From: Nadia Yvette Chambers Date: Fri, 7 Apr 2023 11:17:37 -0400 Subject: [PATCH 2/5] plutus-scripts-bench: Do stylistic suggestions from Serge's code review. --- .../plutus-scripts-bench.cabal | 4 ++-- .../src/Cardano/Benchmarking/PlutusScripts.hs | 12 +++++++++--- .../Benchmarking/PlutusScripts/CustomCall.hs | 4 ++-- .../PlutusScripts/EcdsaSecp256k1Loop.hs | 4 ++-- .../Cardano/Benchmarking/PlutusScripts/Loop.hs | 4 ++-- .../PlutusScripts/SchnorrSecp256k1Loop.hs | 4 ++-- .../src/Cardano/Benchmarking/ScriptAPI.hs | 15 +++++++++------ .../src/Cardano/TxGenerator/Setup/Plutus.hs | 7 ++++--- 8 files changed, 32 insertions(+), 22 deletions(-) diff --git a/bench/plutus-scripts-bench/plutus-scripts-bench.cabal b/bench/plutus-scripts-bench/plutus-scripts-bench.cabal index 86b9c1ce641..4d54e5af20b 100644 --- a/bench/plutus-scripts-bench/plutus-scripts-bench.cabal +++ b/bench/plutus-scripts-bench/plutus-scripts-bench.cabal @@ -77,8 +77,8 @@ library -- Non-IOG dependencies ------------------------ build-depends: - , text + , filepath , bytestring , serialise , template-haskell - , filepath + , text diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs index 3f7f59a594b..ce6ecd330c4 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs @@ -30,9 +30,13 @@ import qualified Cardano.Benchmarking.PlutusScripts.SchnorrSecp256k1Loop as Schn import Cardano.Benchmarking.ScriptAPI -getAllScripts :: [BenchScript] +getAllScripts :: [PlutusBenchScript] getAllScripts = - [ CustomCall.script, ECDSA.script, Loop.script, Schnorr.script ] + [ CustomCall.script + , ECDSA.script + , Loop.script + , Schnorr.script + ] listPlutusScripts :: [String] @@ -43,7 +47,9 @@ findPlutusScript :: String -> Maybe ScriptInAnyLang findPlutusScript s - = listToMaybe [psScript t | t <- getAllScripts, last (split (=='.') . pack $ psName t) == pack (takeBaseName s)] + = listToMaybe [psScript t + | t <- getAllScripts + , last (split (=='.') . pack $ psName t) == pack (takeBaseName s)] encodePlutusScript :: ScriptInAnyLang diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs index 43fab02297d..13bd393241a 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs @@ -23,8 +23,8 @@ import PlutusTx.Prelude as Plutus hiding (Semigroup (..), (.), (<$>)) import Cardano.Benchmarking.ScriptAPI import Cardano.Benchmarking.PlutusScripts.CustomCallTypes -script :: BenchScript -script = mkBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV2 scriptSerialized)) +script :: PlutusBenchScript +script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV2 scriptSerialized)) scriptName :: Haskell.String scriptName diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs index ddd3fa6aebb..df37271e7aa 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs @@ -24,8 +24,8 @@ scriptName :: Haskell.String scriptName = $(LitE . StringL . loc_module <$> qLocation) -script :: BenchScript -script = mkBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV2 scriptSerialized)) +script :: PlutusBenchScript +script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV2 scriptSerialized)) {-# INLINEABLE mkValidator #-} diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop.hs index 75e6326283d..da0103600d1 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop.hs @@ -24,8 +24,8 @@ scriptName :: String scriptName = $(LitE . StringL . loc_module <$> qLocation) -script :: BenchScript -script = mkBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV1 scriptSerialized)) +script :: PlutusBenchScript +script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV1 scriptSerialized)) {-# INLINABLE mkValidator #-} diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs index 2c46b4a8be5..b97ad103925 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs @@ -24,8 +24,8 @@ scriptName :: Haskell.String scriptName = $(LitE . StringL . loc_module <$> qLocation) -script :: BenchScript -script = mkBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV2 scriptSerialized)) +script :: PlutusBenchScript +script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV2 scriptSerialized)) {-# INLINEABLE mkValidator #-} diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs index 0a4c9b21d0a..1a265c20d36 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs @@ -1,17 +1,20 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} module Cardano.Benchmarking.ScriptAPI - (BenchScript, psName, psScript, mkBenchScript) - where + ( PlutusBenchScript + , psName + , psScript + , mkPlutusBenchScript + ) where import Prelude as Haskell (String) import Cardano.Api (ScriptInAnyLang) -data BenchScript - = BenchScript +data PlutusBenchScript + = PlutusBenchScript { psName :: String , psScript :: ScriptInAnyLang } -mkBenchScript :: String -> ScriptInAnyLang -> BenchScript -mkBenchScript = BenchScript +mkPlutusBenchScript :: String -> ScriptInAnyLang -> PlutusBenchScript +mkPlutusBenchScript = PlutusBenchScript diff --git a/bench/tx-generator/src/Cardano/TxGenerator/Setup/Plutus.hs b/bench/tx-generator/src/Cardano/TxGenerator/Setup/Plutus.hs index 87cc0f39ffb..fecce5c353c 100644 --- a/bench/tx-generator/src/Cardano/TxGenerator/Setup/Plutus.hs +++ b/bench/tx-generator/src/Cardano/TxGenerator/Setup/Plutus.hs @@ -12,6 +12,7 @@ module Cardano.TxGenerator.Setup.Plutus import Data.Bifunctor (bimap) import Data.Map.Strict as Map (lookup, toAscList) +import Data.Maybe (fromMaybe) import Control.Monad.Trans.Except import Control.Monad.Trans.Except.Extra @@ -36,9 +37,9 @@ type ProtocolVersion = (Int, Int) readPlutusScript :: Either String FilePath -> IO (Either TxGenError ScriptInAnyLang) readPlutusScript (Left s) - = return - $ maybe (Left . TxGenError $ "readPlutusScript: " ++ s ++ " not found.") - Right (findPlutusScript s) + = pure + . fromMaybe (Left . TxGenError $ "readPlutusScript: " ++ s ++ " not found.") + $ Right <$> findPlutusScript s readPlutusScript (Right fp) = runExceptT $ do script <- firstExceptT ApiError $ From 2c9d74e560b3c7550af84b658e3a1a9d0cf136fc Mon Sep 17 00:00:00 2001 From: Nadia Yvette Chambers Date: Fri, 7 Apr 2023 19:28:47 -0400 Subject: [PATCH 3/5] plutus-scripts-bench: Hide suffixes & Either from users. --- .../Benchmarking/PlutusScripts/CustomCall.hs | 2 +- .../PlutusScripts/EcdsaSecp256k1Loop.hs | 2 +- .../Cardano/Benchmarking/PlutusScripts/Loop.hs | 2 +- .../PlutusScripts/SchnorrSecp256k1Loop.hs | 2 +- .../src/Cardano/Benchmarking/ScriptAPI.hs | 15 ++++++++++++++- nix/nixos/tx-generator-service.nix | 11 ++++------- nix/workbench/profile/prof1-variants.jq | 6 +++--- 7 files changed, 25 insertions(+), 15 deletions(-) diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs index 13bd393241a..024afeeccc6 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs @@ -28,7 +28,7 @@ script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusS scriptName :: Haskell.String scriptName - = $(LitE . StringL . loc_module <$> qLocation) + = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) instance Plutus.Eq CustomCallData where diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs index df37271e7aa..d96d5f82875 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs @@ -22,7 +22,7 @@ import Prelude as Haskell (String, (.), (<$>)) scriptName :: Haskell.String scriptName - = $(LitE . StringL . loc_module <$> qLocation) + = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) script :: PlutusBenchScript script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV2 scriptSerialized)) diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop.hs index da0103600d1..013004d0007 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop.hs @@ -22,7 +22,7 @@ import PlutusTx.Prelude hiding (Semigroup (..), unless, (.), (<$>)) scriptName :: String scriptName - = $(LitE . StringL . loc_module <$> qLocation) + = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) script :: PlutusBenchScript script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV1 scriptSerialized)) diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs index b97ad103925..dbce7df920c 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs @@ -22,7 +22,7 @@ import Prelude as Haskell (String, (.), (<$>)) scriptName :: Haskell.String scriptName - = $(LitE . StringL . loc_module <$> qLocation) + = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) script :: PlutusBenchScript script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV2 scriptSerialized)) diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs index 1a265c20d36..08034df926a 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs @@ -5,9 +5,11 @@ module Cardano.Benchmarking.ScriptAPI , psName , psScript , mkPlutusBenchScript + , prepareScriptName ) where -import Prelude as Haskell (String) +import Prelude as Haskell (String, dropWhile, head, last, map, reverse, (.), (==)) +import Data.Text (pack, split, unpack) import Cardano.Api (ScriptInAnyLang) data PlutusBenchScript @@ -18,3 +20,14 @@ data PlutusBenchScript mkPlutusBenchScript :: String -> ScriptInAnyLang -> PlutusBenchScript mkPlutusBenchScript = PlutusBenchScript + +prepareScriptName :: String -> String +prepareScriptName + = head + . dropWhile (=="hs") + . map unpack + . reverse + . split (=='.') + . last + . split (=='/') + . pack diff --git a/nix/nixos/tx-generator-service.nix b/nix/nixos/tx-generator-service.nix index 72d8e2bad8a..8acd4960c23 100644 --- a/nix/nixos/tx-generator-service.nix +++ b/nix/nixos/tx-generator-service.nix @@ -8,12 +8,9 @@ let ## Basically do something like: ## script = "${pkgs.plutus-scripts}/generated-plutus-scripts/${cfg.plutus.script}"; ## except for having to weave the Either through things - script = if (cfg.plutus.script?Left) - ## The internal ID doesn't need path qualification. - then { Left = cfg.plutus.script.Left; } - else { Right = pkgs.plutus-scripts - + "/generated-plutus-scripts/" - + cfg.plutus.script.Right; }; + ## To refer to a plutus script file, do something like: + ## { Right = pkgs.plutus-scripts + "/generated-plutus-scripts/" + cfg.plutus.script; } + script = { Left = cfg.plutus.script; }; redeemer = pkgs.writeText "plutus-redeemer.json" (__toJSON cfg.plutus.redeemer); datum = if cfg.plutus.datum == null then null else pkgs.writeText "plutus-datum.json" (__toJSON cfg.plutus.datum); @@ -74,7 +71,7 @@ in pkgs.commonLib.defServiceModule ## plutus = { type = mayOpt str "Plutus script type."; - script = mayOpt attrs "Name of the Plutus script from plutus-apps, prefixed with either of v1/v2."; + script = mayOpt str "Name of the Plutus script from plutus-apps, prefixed with either of v1/v2."; limitExecutionMem = mayOpt int "Limit for saturation tuning: mem; null means per-Tx limit from ProtocolParameters."; limitExecutionSteps = mayOpt int "Limit for saturation tuning: steps; null means per-Tx limit from ProtocolParameters."; datum = mayOpt attrs "Plutus script datum."; diff --git a/nix/workbench/profile/prof1-variants.jq b/nix/workbench/profile/prof1-variants.jq index c37d29797ef..35ba95f82e2 100644 --- a/nix/workbench/profile/prof1-variants.jq +++ b/nix/workbench/profile/prof1-variants.jq @@ -276,7 +276,7 @@ def all_profile_variants: ({ generator: { plutus: { type: "LimitSaturationLoop" - , script: { "Left": "Loop.hs" } + , script: "Loop" , redeemer: { "int": 1000000 } } @@ -288,7 +288,7 @@ def all_profile_variants: ({ generator: { plutus: { type: "LimitTxPerBlock_8" - , script: { "Left": "EcdsaSecp256k1Loop.hs" } + , script: "EcdsaSecp256k1Loop" , redeemer: { constructor: 0 , fields: @@ -311,7 +311,7 @@ def all_profile_variants: ({ generator: { plutus: { type: "LimitTxPerBlock_8" - , script: { "Left": "SchnorrSecp256k1Loop.hs" } + , script: "SchnorrSecp256k1Loop" , redeemer: { constructor: 0 , fields: From 897cb2ea107cece5c4d2498b1468eb1fd28fc756 Mon Sep 17 00:00:00 2001 From: Nadia Yvette Chambers Date: Sat, 8 Apr 2023 12:21:02 -0400 Subject: [PATCH 4/5] plutus-scripts-bench: rewrite script name normalisation Commment what it's doing, make better use of filepath primitives, remove dependency on the text package, and use less golfy style. --- .../src/Cardano/Benchmarking/ScriptAPI.hs | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs index 08034df926a..67222d0f3ad 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs @@ -8,8 +8,9 @@ module Cardano.Benchmarking.ScriptAPI , prepareScriptName ) where -import Prelude as Haskell (String, dropWhile, head, last, map, reverse, (.), (==)) -import Data.Text (pack, split, unpack) +import Prelude as Haskell (String, Maybe(..)) +import Data.Char (isUpper) +import System.FilePath (splitExtension, stripExtension, takeFileName) import Cardano.Api (ScriptInAnyLang) data PlutusBenchScript @@ -21,13 +22,21 @@ data PlutusBenchScript mkPlutusBenchScript :: String -> ScriptInAnyLang -> PlutusBenchScript mkPlutusBenchScript = PlutusBenchScript +-- This is doing two or three sorts of normalisation at once: +-- It strips leading / -separated components, drops the ".hs" suffix +-- if present, then chooses the last . -separated component. +-- If there is a suffix different from .hs that begins with a capital +-- letter, that is returned. +-- e.g. "Data/List/System.FilePath.Text.hs" --> "Text" +-- "Data/List/System.FilePath.Text" --> "Text" prepareScriptName :: String -> String -prepareScriptName - = head - . dropWhile (=="hs") - . map unpack - . reverse - . split (=='.') - . last - . split (=='/') - . pack +prepareScriptName script + = case splitExtension file' of + (s, "") -> s -- no dots so take it as-is + (_, '.':s@(c:_)) | isUpper c -> s -- take last dot-separated component + _ -> file' -- shouldn't happen + where + file = takeFileName script -- ignore leading directories + file' = case stripExtension "hs" file of + Just x -> x + Nothing -> file -- no trailing .hs so use filename as-is From 2fe2c433fb0e664c740c2de9b638e06c4041899e Mon Sep 17 00:00:00 2001 From: Nadia Yvette Chambers Date: Tue, 11 Apr 2023 11:13:06 -0400 Subject: [PATCH 5/5] plutus-scripts-bench: fix hlint warnings --- bench/locli/src/Cardano/Analysis/Summary.hs | 4 ++-- bench/locli/src/Data/CDF.hs | 2 +- .../src/Cardano/Benchmarking/PlutusScripts.hs | 9 +++++---- .../src/Cardano/Benchmarking/ScriptAPI.hs | 8 ++++---- .../tx-generator/src/Cardano/TxGenerator/Setup/Plutus.hs | 6 +++--- 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/bench/locli/src/Cardano/Analysis/Summary.hs b/bench/locli/src/Cardano/Analysis/Summary.hs index 3c75d52b5b5..4931283226a 100644 --- a/bench/locli/src/Cardano/Analysis/Summary.hs +++ b/bench/locli/src/Cardano/Analysis/Summary.hs @@ -67,11 +67,11 @@ summariseMultiSummary sumAnalysisTime centiles xs@(headline:xss) = do (sumGenesis <$> xss) & maybe (Right $ sumGenesis headline) (Left .SEIncoherentRunGeneses .(sumGenesis headline:).(:[])) - sumGenesisSpec <- find (not .(== (sumGenesisSpec headline))) + sumGenesisSpec <- find (not .(== sumGenesisSpec headline)) (sumGenesisSpec <$> xss) & maybe (Right $ sumGenesisSpec headline) (Left .SEIncoherentRunGenesisSpecs .(sumGenesisSpec headline:).(:[])) - sumWorkload <- find (not .(== (sumWorkload headline))) + sumWorkload <- find (not .(== sumWorkload headline)) (sumWorkload <$> xss) & maybe (Right $ sumWorkload headline) (Left .SEIncoherentRunWorkloads .(sumWorkload headline:).(:[])) diff --git a/bench/locli/src/Data/CDF.hs b/bench/locli/src/Data/CDF.hs index 9df590df9db..3c90afde4c2 100644 --- a/bench/locli/src/Data/CDF.hs +++ b/bench/locli/src/Data/CDF.hs @@ -323,7 +323,7 @@ mapCDFCentiles :: (Centile -> p a -> b) -> CDF p a -> [b] mapCDFCentiles f CDF{..} = fmap (uncurry f) cdfSamples arityProj :: forall p a. KnownCDF p => (CDF I a -> a) -> p a -> a -arityProj f = arity unI f +arityProj = arity unI data CDFError = CDFIncoherentSamplingLengths [Int] diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs index ce6ecd330c4..9b4769e7f2a 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs @@ -18,7 +18,7 @@ import Prelude import Data.ByteString.Lazy as LBS (ByteString) import Data.Text(split, pack) -import Data.Maybe(listToMaybe) +import Data.List(find) import System.FilePath(takeBaseName) import Cardano.Api @@ -47,9 +47,10 @@ findPlutusScript :: String -> Maybe ScriptInAnyLang findPlutusScript s - = listToMaybe [psScript t - | t <- getAllScripts - , last (split (=='.') . pack $ psName t) == pack (takeBaseName s)] + = psScript + <$> find (\x -> last (split (=='.') . pack . psName $ x) == s') getAllScripts + where + s' = pack $ takeBaseName s encodePlutusScript :: ScriptInAnyLang diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs index 67222d0f3ad..5d6deb5ebaa 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs @@ -8,8 +8,9 @@ module Cardano.Benchmarking.ScriptAPI , prepareScriptName ) where -import Prelude as Haskell (String, Maybe(..)) +import Prelude as Haskell (String, ($)) import Data.Char (isUpper) +import Data.Maybe (fromMaybe) import System.FilePath (splitExtension, stripExtension, takeFileName) import Cardano.Api (ScriptInAnyLang) @@ -37,6 +38,5 @@ prepareScriptName script _ -> file' -- shouldn't happen where file = takeFileName script -- ignore leading directories - file' = case stripExtension "hs" file of - Just x -> x - Nothing -> file -- no trailing .hs so use filename as-is + -- no trailing .hs so use filename as-is + file' = fromMaybe file $ stripExtension "hs" file diff --git a/bench/tx-generator/src/Cardano/TxGenerator/Setup/Plutus.hs b/bench/tx-generator/src/Cardano/TxGenerator/Setup/Plutus.hs index fecce5c353c..5812976885c 100644 --- a/bench/tx-generator/src/Cardano/TxGenerator/Setup/Plutus.hs +++ b/bench/tx-generator/src/Cardano/TxGenerator/Setup/Plutus.hs @@ -12,7 +12,6 @@ module Cardano.TxGenerator.Setup.Plutus import Data.Bifunctor (bimap) import Data.Map.Strict as Map (lookup, toAscList) -import Data.Maybe (fromMaybe) import Control.Monad.Trans.Except import Control.Monad.Trans.Except.Extra @@ -38,8 +37,9 @@ type ProtocolVersion = (Int, Int) readPlutusScript :: Either String FilePath -> IO (Either TxGenError ScriptInAnyLang) readPlutusScript (Left s) = pure - . fromMaybe (Left . TxGenError $ "readPlutusScript: " ++ s ++ " not found.") - $ Right <$> findPlutusScript s + $ maybe (Left . TxGenError $ "readPlutusScript: " ++ s ++ " not found.") + Right + (findPlutusScript s) readPlutusScript (Right fp) = runExceptT $ do script <- firstExceptT ApiError $