From f959f17da4941ece1b3eb6718c67863cff1d6cc7 Mon Sep 17 00:00:00 2001 From: Federico Mastellone Date: Tue, 17 Feb 2026 18:31:28 +0000 Subject: [PATCH 1/5] bench: plutus-scripts-bench: Unused Haskell extensions removal --- bench/plutus-scripts-bench/plutus-scripts-bench.cabal | 1 - .../src/Cardano/Benchmarking/PlutusScripts.hs | 1 - .../src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs | 3 --- .../src/Cardano/Benchmarking/PlutusScripts/CustomCallTypes.hs | 4 ---- .../Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs | 2 -- .../Cardano/Benchmarking/PlutusScripts/HashOntoG2AndAdd.hs | 2 -- .../src/Cardano/Benchmarking/PlutusScripts/Loop2024.hs | 2 -- .../src/Cardano/Benchmarking/PlutusScripts/LoopV3.hs | 2 -- .../src/Cardano/Benchmarking/PlutusScripts/Ripemd160.hs | 2 -- .../Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs | 2 -- .../Cardano/Benchmarking/PlutusScripts/SupplementalDatum.hs | 2 -- .../src/Cardano/Benchmarking/ScriptAPI.hs | 2 -- 12 files changed, 25 deletions(-) diff --git a/bench/plutus-scripts-bench/plutus-scripts-bench.cabal b/bench/plutus-scripts-bench/plutus-scripts-bench.cabal index 9a79d8ce6a6..ac3a80548dc 100644 --- a/bench/plutus-scripts-bench/plutus-scripts-bench.cabal +++ b/bench/plutus-scripts-bench/plutus-scripts-bench.cabal @@ -37,7 +37,6 @@ common common-definitions default-language: Haskell2010 default-extensions: NoImplicitPrelude - ImportQualifiedPost OverloadedStrings ghc-options: diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs index ab0d9858868..523144862de 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs @@ -1,7 +1,6 @@ {-# LANGUAGE GADTs #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} 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 a1e96714265..da743aaa918 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs @@ -1,9 +1,6 @@ {-# LANGUAGE DataKinds #-} -{-# LANGUAGE ImportQualifiedPost #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE TemplateHaskell #-} -{-# LANGUAGE TypeApplications #-} -{-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-orphans #-} diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCallTypes.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCallTypes.hs index a2c33988391..d95121a3c9e 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCallTypes.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCallTypes.hs @@ -1,9 +1,5 @@ -{-# LANGUAGE DataKinds #-} -{-# LANGUAGE ImportQualifiedPost #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE TemplateHaskell #-} -{-# LANGUAGE TypeApplications #-} -{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE ViewPatterns #-} module Cardano.Benchmarking.PlutusScripts.CustomCallTypes 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 2102e998184..7e7e5e0622d 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs @@ -1,8 +1,6 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE TemplateHaskell #-} -{-# LANGUAGE TypeApplications #-} -{-# LANGUAGE TypeFamilies #-} -- PlutusV2 must be compiled using plc 1.0 {-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:target-version=1.0.0 #-} diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/HashOntoG2AndAdd.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/HashOntoG2AndAdd.hs index 3f19bdad774..5785a047d33 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/HashOntoG2AndAdd.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/HashOntoG2AndAdd.hs @@ -2,8 +2,6 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE TemplateHaskell #-} -{-# LANGUAGE TypeApplications #-} -{-# LANGUAGE TypeFamilies #-} -- | This validator script is based on the Plutus benchmark -- 'Hash n bytestrings onto G2 and add points' diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop2024.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop2024.hs index 65caa2fd8cf..68660ff32fe 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop2024.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop2024.hs @@ -1,8 +1,6 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE TemplateHaskell #-} -{-# LANGUAGE TypeApplications #-} -{-# LANGUAGE TypeFamilies #-} -- PlutusV1 must be compiled using plc 1.0 {-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:target-version=1.0.0 #-} diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/LoopV3.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/LoopV3.hs index 63dbd132d65..8f9dbd51db3 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/LoopV3.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/LoopV3.hs @@ -1,8 +1,6 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE TemplateHaskell #-} -{-# LANGUAGE TypeApplications #-} -{-# LANGUAGE TypeFamilies #-} module Cardano.Benchmarking.PlutusScripts.LoopV3 (script) where diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Ripemd160.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Ripemd160.hs index dd5bc42dbc5..cae4c071c9f 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Ripemd160.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Ripemd160.hs @@ -2,8 +2,6 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE TemplateHaskell #-} -{-# LANGUAGE TypeApplications #-} -{-# LANGUAGE TypeFamilies #-} module Cardano.Benchmarking.PlutusScripts.Ripemd160 (script) where 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 2d8c9430352..0569549b15e 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs @@ -1,8 +1,6 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE TemplateHaskell #-} -{-# LANGUAGE TypeApplications #-} -{-# LANGUAGE TypeFamilies #-} -- PlutusV2 must be compiled using plc 1.0 {-# OPTIONS_GHC -fplugin-opt PlutusTx.Plugin:target-version=1.0.0 #-} diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SupplementalDatum.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SupplementalDatum.hs index f14432037dc..a3d3c4d036f 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SupplementalDatum.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SupplementalDatum.hs @@ -1,8 +1,6 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE TemplateHaskell #-} -{-# LANGUAGE TypeApplications #-} -{-# LANGUAGE TypeFamilies #-} module Cardano.Benchmarking.PlutusScripts.SupplementalDatum (script) where diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs index 5d6deb5ebaa..28d1b2bc6a2 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs @@ -1,5 +1,3 @@ -{-# OPTIONS_GHC -fno-warn-orphans #-} - module Cardano.Benchmarking.ScriptAPI ( PlutusBenchScript , psName From 951792d1545c1054c6bb1cca400fef95e9cc71d0 Mon Sep 17 00:00:00 2001 From: Federico Mastellone Date: Tue, 17 Feb 2026 20:17:07 +0000 Subject: [PATCH 2/5] bench: plutus-scripts-bench: rigorous imports and formatting --- .../Benchmarking/PlutusScripts/CustomCall.hs | 14 +++++--------- .../PlutusScripts/EcdsaSecp256k1Loop.hs | 17 ++++++----------- .../PlutusScripts/HashOntoG2AndAdd.hs | 18 +++++++----------- .../Benchmarking/PlutusScripts/Loop2024.hs | 17 ++++++----------- .../Benchmarking/PlutusScripts/LoopV3.hs | 17 ++++++----------- .../Benchmarking/PlutusScripts/Ripemd160.hs | 18 +++++++----------- .../PlutusScripts/SchnorrSecp256k1Loop.hs | 17 ++++++----------- .../PlutusScripts/SupplementalDatum.hs | 19 ++++++++----------- 8 files changed, 51 insertions(+), 86 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 da743aaa918..e99d9d500a2 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs @@ -11,21 +11,17 @@ module Cardano.Benchmarking.PlutusScripts.CustomCall (script) where import Cardano.Api (PlutusScript (..), PlutusScriptV2, PlutusScriptVersion (..), Script (..), toScriptInAnyLang) - import Cardano.Benchmarking.PlutusScripts.CustomCallTypes import Cardano.Benchmarking.ScriptAPI -import qualified PlutusLedgerApi.V2 as PlutusV2 - -import Prelude as Haskell (String, (.), (<$>)) - import qualified Data.ByteString.Short as SBS - -import Language.Haskell.TH -import Language.Haskell.TH.Syntax -import qualified PlutusTx +import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import qualified PlutusLedgerApi.V2 as PlutusV2 +import qualified PlutusTx (compile) import PlutusTx.Foldable (sum) import PlutusTx.List (all, length) import PlutusTx.Prelude as Plutus hiding (Semigroup (..), (.), (<$>)) +import Prelude as Haskell (String, (.), (<$>)) + script :: PlutusBenchScript script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV2 scriptSerialized)) 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 7e7e5e0622d..ff42bfef01a 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs @@ -7,21 +7,16 @@ module Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1Loop (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV2, PlutusScriptVersion (..), - Script (..), toScriptInAnyLang) - +import Cardano.Api (PlutusScript (..), PlutusScriptV2, + PlutusScriptVersion (..), Script (..), toScriptInAnyLang) import Cardano.Benchmarking.ScriptAPI -import qualified PlutusLedgerApi.V2 as PlutusV2 - -import Prelude as Haskell (String, (.), (<$>)) - import qualified Data.ByteString.Short as SBS - -import Language.Haskell.TH -import Language.Haskell.TH.Syntax -import qualified PlutusTx +import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import qualified PlutusLedgerApi.V2 as PlutusV2 +import qualified PlutusTx (compile) import qualified PlutusTx.Builtins as BI import PlutusTx.Prelude as P hiding (Semigroup (..), (.), (<$>)) +import Prelude as Haskell (String, (.), (<$>)) scriptName :: Haskell.String diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/HashOntoG2AndAdd.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/HashOntoG2AndAdd.hs index 5785a047d33..055e81cf72f 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/HashOntoG2AndAdd.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/HashOntoG2AndAdd.hs @@ -9,23 +9,18 @@ module Cardano.Benchmarking.PlutusScripts.HashOntoG2AndAdd (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV3, PlutusScriptVersion (..), - Script (..), toScriptInAnyLang) - +import Cardano.Api (PlutusScript (..), PlutusScriptV3, + PlutusScriptVersion (..), Script (..), toScriptInAnyLang) import Cardano.Benchmarking.ScriptAPI -import qualified PlutusLedgerApi.V3 as PlutusV3 - -import Prelude as Haskell (String, (.), (<$>)) - import qualified Data.ByteString.Short as SBS import GHC.ByteOrder (ByteOrder (LittleEndian)) - -import Language.Haskell.TH -import Language.Haskell.TH.Syntax -import qualified PlutusTx +import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import qualified PlutusLedgerApi.V3 as PlutusV3 +import qualified PlutusTx (compile) import qualified PlutusTx.Builtins.Internal as BI (BuiltinList, head, snd, tail, unitval, unsafeDataAsConstr) import PlutusTx.Prelude as Tx hiding (Semigroup (..), (.), (<$>)) +import Prelude as Haskell (String, (.), (<$>)) scriptName :: Haskell.String @@ -35,6 +30,7 @@ scriptName script :: PlutusBenchScript script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV3 scriptSerialized)) + {-# INLINABLE mkValidator #-} mkValidator :: BuiltinData -> BuiltinUnit mkValidator arg = diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop2024.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop2024.hs index 68660ff32fe..3748db94288 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop2024.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop2024.hs @@ -7,21 +7,16 @@ module Cardano.Benchmarking.PlutusScripts.Loop2024 (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV1, PlutusScriptVersion (..), - Script (..), toScriptInAnyLang) - +import Cardano.Api (PlutusScript (..), PlutusScriptV1, + PlutusScriptVersion (..), Script (..), toScriptInAnyLang) import Cardano.Benchmarking.ScriptAPI -import qualified PlutusLedgerApi.V1 as PlutusV1 - -import Prelude hiding (pred, ($), (&&), (<), (==)) - import qualified Data.ByteString.Short as SBS - -import Language.Haskell.TH -import Language.Haskell.TH.Syntax -import PlutusTx +import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import qualified PlutusLedgerApi.V1 as PlutusV1 +import qualified PlutusTx (compile) import PlutusTx.Builtins (unsafeDataAsI) import PlutusTx.Prelude hiding (Semigroup (..), unless, (.), (<$>)) +import Prelude hiding (pred, ($), (&&), (<), (==)) scriptName :: String diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/LoopV3.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/LoopV3.hs index 8f9dbd51db3..1a12bb776e2 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/LoopV3.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/LoopV3.hs @@ -4,23 +4,18 @@ module Cardano.Benchmarking.PlutusScripts.LoopV3 (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV3, PlutusScriptVersion (..), - Script (..), toScriptInAnyLang) - +import Cardano.Api (PlutusScript (..), PlutusScriptV3, + PlutusScriptVersion (..), Script (..), toScriptInAnyLang) import Cardano.Benchmarking.ScriptAPI -import qualified PlutusLedgerApi.V3 as PlutusV3 - -import Prelude hiding (pred, ($), (&&), (<), (==)) - import qualified Data.ByteString.Short as SBS - -import Language.Haskell.TH -import Language.Haskell.TH.Syntax -import PlutusTx +import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import qualified PlutusLedgerApi.V3 as PlutusV3 +import qualified PlutusTx (compile) import PlutusTx.Builtins (unsafeDataAsI) import qualified PlutusTx.Builtins.Internal as BI (BuiltinList, head, snd, tail, unitval, unsafeDataAsConstr) import PlutusTx.Prelude as Plutus hiding (Semigroup (..), unless, (.), (<$>)) +import Prelude hiding (pred, ($), (&&), (<), (==)) scriptName :: String diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Ripemd160.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Ripemd160.hs index cae4c071c9f..a8fbd8094ec 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Ripemd160.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Ripemd160.hs @@ -5,22 +5,17 @@ module Cardano.Benchmarking.PlutusScripts.Ripemd160 (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV3, PlutusScriptVersion (..), - Script (..), toScriptInAnyLang) - +import Cardano.Api (PlutusScript (..), PlutusScriptV3, + PlutusScriptVersion (..), Script (..), toScriptInAnyLang) import Cardano.Benchmarking.ScriptAPI -import qualified PlutusLedgerApi.V3 as PlutusV3 - -import Prelude as Haskell (String, (.), (<$>)) - import qualified Data.ByteString.Short as SBS - -import Language.Haskell.TH -import Language.Haskell.TH.Syntax -import qualified PlutusTx +import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import qualified PlutusLedgerApi.V3 as PlutusV3 +import qualified PlutusTx (compile) import qualified PlutusTx.Builtins.Internal as BI (BuiltinList, head, snd, tail, unitval, unsafeDataAsConstr) import PlutusTx.Prelude as Tx hiding (Semigroup (..), (.), (<$>)) +import Prelude as Haskell (String, (.), (<$>)) scriptName :: Haskell.String @@ -30,6 +25,7 @@ scriptName script :: PlutusBenchScript script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV3 scriptSerialized)) + {-# INLINABLE mkValidator #-} mkValidator :: BuiltinData -> BuiltinUnit mkValidator arg = 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 0569549b15e..e5df6bbab38 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs @@ -7,21 +7,16 @@ module Cardano.Benchmarking.PlutusScripts.SchnorrSecp256k1Loop (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV2, PlutusScriptVersion (..), - Script (..), toScriptInAnyLang) - +import Cardano.Api (PlutusScript (..), PlutusScriptV2, + PlutusScriptVersion (..), Script (..), toScriptInAnyLang) import Cardano.Benchmarking.ScriptAPI -import qualified PlutusLedgerApi.V2 as PlutusV2 - -import Prelude as Haskell (String, (.), (<$>)) - import qualified Data.ByteString.Short as SBS - -import Language.Haskell.TH -import Language.Haskell.TH.Syntax -import qualified PlutusTx +import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import qualified PlutusLedgerApi.V2 as PlutusV2 +import qualified PlutusTx (compile) import qualified PlutusTx.Builtins as BI import PlutusTx.Prelude as P hiding (Semigroup (..), (.), (<$>)) +import Prelude as Haskell (String, (.), (<$>)) scriptName :: Haskell.String diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SupplementalDatum.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SupplementalDatum.hs index a3d3c4d036f..ca4921d2d4a 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SupplementalDatum.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SupplementalDatum.hs @@ -4,23 +4,19 @@ module Cardano.Benchmarking.PlutusScripts.SupplementalDatum (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV3, PlutusScriptVersion (..), - Script (..), toScriptInAnyLang) - +import Cardano.Api (PlutusScript (..), PlutusScriptV3, + PlutusScriptVersion (..), Script (..), toScriptInAnyLang) import Cardano.Benchmarking.ScriptAPI +import qualified Data.ByteString.Short as SBS +import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) import qualified PlutusLedgerApi.V3 as V3 import qualified PlutusLedgerApi.V3.Contexts as V3 - -import Prelude as Haskell (String, (.), (<$>)) - -import qualified Data.ByteString.Short as SBS - -import Language.Haskell.TH -import Language.Haskell.TH.Syntax -import PlutusTx +import qualified PlutusTx (compile) import qualified PlutusTx.Builtins as PlutusTx import PlutusTx.Prelude as Tx hiding (Semigroup (..), (.), (<$>)) import qualified PlutusTx.Prelude as PlutusTx +import Prelude as Haskell (String, (.), (<$>)) + scriptName :: Haskell.String scriptName @@ -29,6 +25,7 @@ scriptName script :: PlutusBenchScript script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV3 scriptSerialized)) + -- | Write to disk with: cabal run plutus-scripts-bench -- print SupplementalDatum -o supplemental-datum.plutus {-# INLINABLE typedValidator #-} typedValidator :: V3.ScriptContext -> Bool From 58b1bcd157b0dd66f341f63fc912528b6287d5e1 Mon Sep 17 00:00:00 2001 From: Federico Mastellone Date: Fri, 13 Feb 2026 19:17:11 +0000 Subject: [PATCH 3/5] bench: plutus-scripts-bench: add EcdsaSecp256k1LoopV3 SchnorrSecp256k1LoopV3 --- .../plutus-scripts-bench.cabal | 2 + .../src/Cardano/Benchmarking/PlutusScripts.hs | 4 ++ .../PlutusScripts/EcdsaSecp256k1LoopV3.hs | 62 +++++++++++++++++++ .../PlutusScripts/SchnorrSecp256k1LoopV3.hs | 62 +++++++++++++++++++ .../EcdsaSecp256k1LoopV3.plutus | 5 ++ .../SchnorrSecp256k1LoopV3.plutus | 5 ++ 6 files changed, 140 insertions(+) create mode 100644 bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1LoopV3.hs create mode 100644 bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1LoopV3.hs create mode 100644 bench/tx-generator/scripts-fallback/EcdsaSecp256k1LoopV3.plutus create mode 100644 bench/tx-generator/scripts-fallback/SchnorrSecp256k1LoopV3.plutus diff --git a/bench/plutus-scripts-bench/plutus-scripts-bench.cabal b/bench/plutus-scripts-bench/plutus-scripts-bench.cabal index ac3a80548dc..57d0de6ee79 100644 --- a/bench/plutus-scripts-bench/plutus-scripts-bench.cabal +++ b/bench/plutus-scripts-bench/plutus-scripts-bench.cabal @@ -70,11 +70,13 @@ library other-modules: Cardano.Benchmarking.PlutusScripts.CustomCall Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1Loop + Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1LoopV3 Cardano.Benchmarking.PlutusScripts.HashOntoG2AndAdd Cardano.Benchmarking.PlutusScripts.Loop2024 Cardano.Benchmarking.PlutusScripts.LoopV3 Cardano.Benchmarking.PlutusScripts.Ripemd160 Cardano.Benchmarking.PlutusScripts.SchnorrSecp256k1Loop + Cardano.Benchmarking.PlutusScripts.SchnorrSecp256k1LoopV3 Cardano.Benchmarking.PlutusScripts.SupplementalDatum -------------------------- diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs index 523144862de..1bf3017d28b 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs @@ -24,11 +24,13 @@ import Cardano.Api import qualified Cardano.Benchmarking.PlutusScripts.CustomCall as CustomCall import qualified Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1Loop as ECDSA +import qualified Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1LoopV3 as ECDSAV3 import qualified Cardano.Benchmarking.PlutusScripts.HashOntoG2AndAdd as HashG2Add import qualified Cardano.Benchmarking.PlutusScripts.Loop2024 as Loop2024 import qualified Cardano.Benchmarking.PlutusScripts.LoopV3 as LoopV3 import qualified Cardano.Benchmarking.PlutusScripts.Ripemd160 as Ripemd160 import qualified Cardano.Benchmarking.PlutusScripts.SchnorrSecp256k1Loop as Schnorr +import qualified Cardano.Benchmarking.PlutusScripts.SchnorrSecp256k1LoopV3 as SchnorrV3 import qualified Cardano.Benchmarking.PlutusScripts.SupplementalDatum as SupplementalDatum import Cardano.Benchmarking.ScriptAPI @@ -37,11 +39,13 @@ getAllScripts :: [PlutusBenchScript] getAllScripts = [ CustomCall.script , ECDSA.script + , ECDSAV3.script , HashG2Add.script , Loop2024.script , LoopV3.script , Ripemd160.script , Schnorr.script + , SchnorrV3.script , SupplementalDatum.script ] diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1LoopV3.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1LoopV3.hs new file mode 100644 index 00000000000..5b4eef36142 --- /dev/null +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1LoopV3.hs @@ -0,0 +1,62 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE TemplateHaskell #-} + +module Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1LoopV3 (script) where + +import Cardano.Api (PlutusScript (..), PlutusScriptV3, + PlutusScriptVersion (..), Script (..), toScriptInAnyLang) +import Cardano.Benchmarking.ScriptAPI +import qualified Data.ByteString.Short as SBS +import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import qualified PlutusLedgerApi.V3 as PlutusV3 +import qualified PlutusTx (compile) +import qualified PlutusTx.Builtins as Builtins +import qualified PlutusTx.Builtins.Internal as BI (BuiltinList, head, snd, tail, unitval, + unsafeDataAsConstr) +import PlutusTx.Prelude as P hiding (Semigroup (..), (.), (<$>)) +import Prelude as Haskell (String, (.), (<$>)) + + +scriptName :: Haskell.String +scriptName + = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) + +script :: PlutusBenchScript +script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV3 scriptSerialized)) + + +{-# INLINABLE mkValidator #-} +mkValidator :: BuiltinData -> BuiltinUnit +mkValidator arg = + if red_n < (1000000 :: Integer) -- large number ensures same bitsize for all counter values + then traceError "redeemer is < 1000000" + else loop red_n red_vkey red_msg red_sig + where + -- lazily decode script context up to redeemer, which is less expensive and results in much smaller tx size + constrArgs :: BuiltinData -> BI.BuiltinList BuiltinData + constrArgs = BI.snd . BI.unsafeDataAsConstr + + redeemerFollowedByScriptInfo :: BI.BuiltinList BuiltinData + redeemerFollowedByScriptInfo = BI.tail (constrArgs arg) + + redeemer :: BuiltinData + redeemer = BI.head redeemerFollowedByScriptInfo + + red_n :: Integer + red_vkey :: BuiltinByteString + red_msg :: BuiltinByteString + red_sig :: BuiltinByteString + (red_n, red_vkey, red_msg, red_sig) = PlutusV3.unsafeFromBuiltinData redeemer + + loop i v m s + | i == 1000000 = BI.unitval + | Builtins.verifyEcdsaSecp256k1Signature v m s = loop (pred i) v m s + | otherwise = P.traceError "Trace error: ECDSA validation failed" + +ecdsaLoopScriptShortBs :: SBS.ShortByteString +ecdsaLoopScriptShortBs = PlutusV3.serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||]) + +scriptSerialized :: PlutusScript PlutusScriptV3 +scriptSerialized = PlutusScriptSerialised ecdsaLoopScriptShortBs + diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1LoopV3.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1LoopV3.hs new file mode 100644 index 00000000000..48008ac99c3 --- /dev/null +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1LoopV3.hs @@ -0,0 +1,62 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE TemplateHaskell #-} + +module Cardano.Benchmarking.PlutusScripts.SchnorrSecp256k1LoopV3 (script) where + +import Cardano.Api (PlutusScript (..), PlutusScriptV3, + PlutusScriptVersion (..), Script (..), toScriptInAnyLang) +import Cardano.Benchmarking.ScriptAPI +import qualified Data.ByteString.Short as SBS +import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import qualified PlutusLedgerApi.V3 as PlutusV3 +import qualified PlutusTx (compile) +import qualified PlutusTx.Builtins as Builtins +import qualified PlutusTx.Builtins.Internal as BI (BuiltinList, head, snd, tail, unitval, + unsafeDataAsConstr) +import PlutusTx.Prelude as P hiding (Semigroup (..), (.), (<$>)) +import Prelude as Haskell (String, (.), (<$>)) + + +scriptName :: Haskell.String +scriptName + = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) + +script :: PlutusBenchScript +script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV3 scriptSerialized)) + + +{-# INLINABLE mkValidator #-} +mkValidator :: BuiltinData -> BuiltinUnit +mkValidator arg = + if red_n < (1000000 :: Integer) -- large number ensures same bitsize for all counter values + then traceError "redeemer is < 1000000" + else loop red_n red_vkey red_msg red_sig + where + -- lazily decode script context up to redeemer, which is less expensive and results in much smaller tx size + constrArgs :: BuiltinData -> BI.BuiltinList BuiltinData + constrArgs = BI.snd . BI.unsafeDataAsConstr + + redeemerFollowedByScriptInfo :: BI.BuiltinList BuiltinData + redeemerFollowedByScriptInfo = BI.tail (constrArgs arg) + + redeemer :: BuiltinData + redeemer = BI.head redeemerFollowedByScriptInfo + + red_n :: Integer + red_vkey :: BuiltinByteString + red_msg :: BuiltinByteString + red_sig :: BuiltinByteString + (red_n, red_vkey, red_msg, red_sig) = PlutusV3.unsafeFromBuiltinData redeemer + + loop i v m s + | i == 1000000 = BI.unitval + | Builtins.verifySchnorrSecp256k1Signature v m s = loop (pred i) v m s + | otherwise = P.traceError "Trace error: Schnorr validation failed" + +schnorrLoopScriptShortBs :: SBS.ShortByteString +schnorrLoopScriptShortBs = PlutusV3.serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||]) + +scriptSerialized :: PlutusScript PlutusScriptV3 +scriptSerialized = PlutusScriptSerialised schnorrLoopScriptShortBs + diff --git a/bench/tx-generator/scripts-fallback/EcdsaSecp256k1LoopV3.plutus b/bench/tx-generator/scripts-fallback/EcdsaSecp256k1LoopV3.plutus new file mode 100644 index 00000000000..124747e96f9 --- /dev/null +++ b/bench/tx-generator/scripts-fallback/EcdsaSecp256k1LoopV3.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV3", + "description": "", + "cborHex": "59013c0101003232232325333573466e200052080897a1300549011572656465656d6572206973203c2031303030303030001333300400190029111001a400a444400490029111000a400644440083233223325333573466e2000d2000130074910350543600133001003801919194004dd69aba10039bae35742005375c6ae840066eb8d5d09aba20011aba2001357440038000c8c00400488a4006601292010350543700912999ab9a3370e9000002080109991980300300099b81004480080040026aae74004d55cf0009baa357426ae88d55cf1baa001323001001222225333573466e1d2080897a004149854ccd5cd199bb40030020011333323300600600133702008900100180100089803249245472616365206572726f723a2045434453412076616c69646174696f6e206661696c656400232633573800300001" +} diff --git a/bench/tx-generator/scripts-fallback/SchnorrSecp256k1LoopV3.plutus b/bench/tx-generator/scripts-fallback/SchnorrSecp256k1LoopV3.plutus new file mode 100644 index 00000000000..e5ccc260521 --- /dev/null +++ b/bench/tx-generator/scripts-fallback/SchnorrSecp256k1LoopV3.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV3", + "description": "", + "cborHex": "59013e0101003232232325333573466e200052080897a1300549011572656465656d6572206973203c2031303030303030001333300400190029111001a400a444400490029111000a400644440083233223325333573466e2000d2000130074910350543600133001003801919194004dd69aba10039bae35742005375c6ae840066eb8d5d09aba20011aba2001357440038000c8c00400488a4006601292010350543700912999ab9a3370e9000002080109991980300300099b81004480080040026aae74004d55cf0009baa357426ae88d55cf1baa001323001001222225333573466e1d2080897a004149854ccd5cd199bb50030020011333323300600600133702008900100180100089803249265472616365206572726f723a205363686e6f72722076616c69646174696f6e206661696c656400232633573800300001" +} From 64225ebe8614bd2ead724979ed854100af061ac4 Mon Sep 17 00:00:00 2001 From: Federico Mastellone Date: Sat, 14 Feb 2026 00:35:01 +0000 Subject: [PATCH 4/5] bench: plutus-scripts-bench: add CustomCallV3 --- .../plutus-scripts-bench.cabal | 1 + .../src/Cardano/Benchmarking/PlutusScripts.hs | 2 + .../PlutusScripts/CustomCallV3.hs | 83 +++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCallV3.hs diff --git a/bench/plutus-scripts-bench/plutus-scripts-bench.cabal b/bench/plutus-scripts-bench/plutus-scripts-bench.cabal index 57d0de6ee79..8e8837e6228 100644 --- a/bench/plutus-scripts-bench/plutus-scripts-bench.cabal +++ b/bench/plutus-scripts-bench/plutus-scripts-bench.cabal @@ -69,6 +69,7 @@ library other-modules: Cardano.Benchmarking.PlutusScripts.CustomCall + Cardano.Benchmarking.PlutusScripts.CustomCallV3 Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1Loop Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1LoopV3 Cardano.Benchmarking.PlutusScripts.HashOntoG2AndAdd diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs index 1bf3017d28b..4a47da843fa 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs @@ -23,6 +23,7 @@ import System.FilePath (takeBaseName) import Cardano.Api import qualified Cardano.Benchmarking.PlutusScripts.CustomCall as CustomCall +import qualified Cardano.Benchmarking.PlutusScripts.CustomCallV3 as CustomCallV3 import qualified Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1Loop as ECDSA import qualified Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1LoopV3 as ECDSAV3 import qualified Cardano.Benchmarking.PlutusScripts.HashOntoG2AndAdd as HashG2Add @@ -38,6 +39,7 @@ import Cardano.Benchmarking.ScriptAPI getAllScripts :: [PlutusBenchScript] getAllScripts = [ CustomCall.script + , CustomCallV3.script , ECDSA.script , ECDSAV3.script , HashG2Add.script diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCallV3.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCallV3.hs new file mode 100644 index 00000000000..42c327e5c1c --- /dev/null +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCallV3.hs @@ -0,0 +1,83 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE TemplateHaskell #-} + +{-# OPTIONS_GHC -fno-warn-orphans #-} + +module Cardano.Benchmarking.PlutusScripts.CustomCallV3 (script) where + +import Cardano.Api (PlutusScript (..), PlutusScriptV3, + PlutusScriptVersion (..),Script (..), toScriptInAnyLang) +import Cardano.Benchmarking.PlutusScripts.CustomCallTypes +import Cardano.Benchmarking.ScriptAPI +import qualified Data.ByteString.Short as SBS +import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import qualified PlutusLedgerApi.V3 as PlutusV3 +import qualified PlutusTx (compile) +import qualified PlutusTx.Builtins.Internal as BI (BuiltinList, head, snd, tail, unitval, + unsafeDataAsConstr) +import PlutusTx.Foldable (sum) +import PlutusTx.List (all, length) +import PlutusTx.Prelude as Plutus hiding (Semigroup (..), (.), (<$>)) +import Prelude as Haskell (String, (.), (<$>)) + + +script :: PlutusBenchScript +script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV3 scriptSerialized)) + +scriptName :: Haskell.String +scriptName + = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) + + +instance Plutus.Eq CustomCallData where + CCNone == CCNone = True + CCInteger i == CCInteger i' = i == i' + CCSum i is == CCSum i' is' = i == i' && is == is' + CCByteString s == CCByteString s' = s == s' + CCConcat s ss == CCConcat s' ss' = s == s' && ss == ss' + _ == _ = False + +{-# INLINABLE mkValidator #-} +mkValidator :: BuiltinData -> BuiltinUnit +mkValidator arg = + let + result = case cmd of + EvalSpine -> length redeemerArg == length datumArg + EvalValues -> redeemerArg == datumArg + EvalAndValidate -> all validateValue redeemerArg && redeemerArg == datumArg + in if result then BI.unitval else error () + where + -- lazily decode script context up to datum and redeemer + constrArgs :: BuiltinData -> BI.BuiltinList BuiltinData + constrArgs = BI.snd . BI.unsafeDataAsConstr + + ctxFields :: BI.BuiltinList BuiltinData + ctxFields = constrArgs arg + + datum :: BuiltinData + datum = BI.head ctxFields + + redeemerFollowedByScriptInfo :: BI.BuiltinList BuiltinData + redeemerFollowedByScriptInfo = BI.tail ctxFields + + redeemer :: BuiltinData + redeemer = BI.head redeemerFollowedByScriptInfo + + datumArg = snd (unwrap datum) + (cmd, redeemerArg) = unwrap redeemer + + validateValue :: CustomCallData -> Bool + validateValue (CCSum i is) = i == sum is + validateValue (CCConcat s ss) = s == mconcat ss + validateValue _ = True + +{-# INLINABLE unwrap #-} +unwrap :: BuiltinData -> CustomCallArg +unwrap = PlutusV3.unsafeFromBuiltinData + +customCallScriptShortBs :: SBS.ShortByteString +customCallScriptShortBs = PlutusV3.serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||]) + +scriptSerialized :: PlutusScript PlutusScriptV3 +scriptSerialized = PlutusScriptSerialised customCallScriptShortBs From b2d378b6918ed06a4664d75d3453c84866d2c7c9 Mon Sep 17 00:00:00 2001 From: Federico Mastellone Date: Thu, 19 Feb 2026 20:22:15 +0000 Subject: [PATCH 5/5] bench: plutus-scripts-bench: decouple mkPlutusBenchScript from PlutusTx accepting serialised UPLC --- .../Benchmarking/PlutusScripts/CustomCall.hs | 23 +++++++----------- .../PlutusScripts/CustomCallV3.hs | 23 +++++++----------- .../PlutusScripts/EcdsaSecp256k1Loop.hs | 23 +++++++----------- .../PlutusScripts/EcdsaSecp256k1LoopV3.hs | 24 +++++++------------ .../PlutusScripts/HashOntoG2AndAdd.hs | 23 +++++++----------- .../Benchmarking/PlutusScripts/Loop2024.hs | 22 ++++++----------- .../Benchmarking/PlutusScripts/LoopV3.hs | 22 ++++++----------- .../Benchmarking/PlutusScripts/Ripemd160.hs | 23 +++++++----------- .../PlutusScripts/SchnorrSecp256k1Loop.hs | 23 +++++++----------- .../PlutusScripts/SchnorrSecp256k1LoopV3.hs | 24 +++++++------------ .../PlutusScripts/SupplementalDatum.hs | 21 ++++++---------- .../src/Cardano/Benchmarking/ScriptAPI.hs | 24 +++++++++++++++---- 12 files changed, 105 insertions(+), 170 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 e99d9d500a2..195eb1b7bf9 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCall.hs @@ -9,26 +9,24 @@ module Cardano.Benchmarking.PlutusScripts.CustomCall (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV2, PlutusScriptVersion (..), - Script (..), toScriptInAnyLang) +import Cardano.Api (PlutusScriptVersion (PlutusScriptV2)) import Cardano.Benchmarking.PlutusScripts.CustomCallTypes -import Cardano.Benchmarking.ScriptAPI -import qualified Data.ByteString.Short as SBS +import Cardano.Benchmarking.ScriptAPI (PlutusBenchScript, mkPlutusBenchScript) import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import PlutusLedgerApi.Common (serialiseCompiledCode) import qualified PlutusLedgerApi.V2 as PlutusV2 import qualified PlutusTx (compile) import PlutusTx.Foldable (sum) import PlutusTx.List (all, length) import PlutusTx.Prelude as Plutus hiding (Semigroup (..), (.), (<$>)) -import Prelude as Haskell (String, (.), (<$>)) +import Prelude as Haskell ((.), (<$>)) script :: PlutusBenchScript -script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV2 scriptSerialized)) - -scriptName :: Haskell.String -scriptName - = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) +script = mkPlutusBenchScript + $(LitE . StringL . loc_module <$> qLocation) + PlutusScriptV2 + (serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||])) instance Plutus.Eq CustomCallData where @@ -66,8 +64,3 @@ unwrap :: BuiltinData -> CustomCallArg unwrap = PlutusV2.unsafeFromBuiltinData -- Note: type-constraining unsafeFromBuiltinData decreases script's execution units. -customCallScriptShortBs :: SBS.ShortByteString -customCallScriptShortBs = PlutusV2.serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||]) - -scriptSerialized :: PlutusScript PlutusScriptV2 -scriptSerialized = PlutusScriptSerialised customCallScriptShortBs diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCallV3.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCallV3.hs index 42c327e5c1c..54c89697498 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCallV3.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/CustomCallV3.hs @@ -6,12 +6,11 @@ module Cardano.Benchmarking.PlutusScripts.CustomCallV3 (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV3, - PlutusScriptVersion (..),Script (..), toScriptInAnyLang) +import Cardano.Api (PlutusScriptVersion (PlutusScriptV3)) import Cardano.Benchmarking.PlutusScripts.CustomCallTypes -import Cardano.Benchmarking.ScriptAPI -import qualified Data.ByteString.Short as SBS +import Cardano.Benchmarking.ScriptAPI (PlutusBenchScript, mkPlutusBenchScript) import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import PlutusLedgerApi.Common (serialiseCompiledCode) import qualified PlutusLedgerApi.V3 as PlutusV3 import qualified PlutusTx (compile) import qualified PlutusTx.Builtins.Internal as BI (BuiltinList, head, snd, tail, unitval, @@ -19,15 +18,14 @@ import qualified PlutusTx.Builtins.Internal as BI (BuiltinList, head, snd, tail, import PlutusTx.Foldable (sum) import PlutusTx.List (all, length) import PlutusTx.Prelude as Plutus hiding (Semigroup (..), (.), (<$>)) -import Prelude as Haskell (String, (.), (<$>)) +import Prelude as Haskell ((.), (<$>)) script :: PlutusBenchScript -script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV3 scriptSerialized)) - -scriptName :: Haskell.String -scriptName - = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) +script = mkPlutusBenchScript + $(LitE . StringL . loc_module <$> qLocation) + PlutusScriptV3 + (serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||])) instance Plutus.Eq CustomCallData where @@ -76,8 +74,3 @@ mkValidator arg = unwrap :: BuiltinData -> CustomCallArg unwrap = PlutusV3.unsafeFromBuiltinData -customCallScriptShortBs :: SBS.ShortByteString -customCallScriptShortBs = PlutusV3.serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||]) - -scriptSerialized :: PlutusScript PlutusScriptV3 -scriptSerialized = PlutusScriptSerialised customCallScriptShortBs 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 ff42bfef01a..3bf9e80ef9f 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1Loop.hs @@ -7,24 +7,22 @@ module Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1Loop (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV2, - PlutusScriptVersion (..), Script (..), toScriptInAnyLang) -import Cardano.Benchmarking.ScriptAPI -import qualified Data.ByteString.Short as SBS +import Cardano.Api (PlutusScriptVersion (PlutusScriptV2)) +import Cardano.Benchmarking.ScriptAPI (PlutusBenchScript, mkPlutusBenchScript) import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import PlutusLedgerApi.Common (serialiseCompiledCode) import qualified PlutusLedgerApi.V2 as PlutusV2 import qualified PlutusTx (compile) import qualified PlutusTx.Builtins as BI import PlutusTx.Prelude as P hiding (Semigroup (..), (.), (<$>)) -import Prelude as Haskell (String, (.), (<$>)) +import Prelude as Haskell ((.), (<$>)) -scriptName :: Haskell.String -scriptName - = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) - script :: PlutusBenchScript -script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV2 scriptSerialized)) +script = mkPlutusBenchScript + $(LitE . StringL . loc_module <$> qLocation) + PlutusScriptV2 + (serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||])) {-# INLINEABLE mkValidator #-} @@ -42,8 +40,3 @@ mkValidator _datum red _txContext = | BI.verifyEcdsaSecp256k1Signature v m s = loop (pred i) v m s | otherwise = P.traceError "Trace error: ECDSA validation failed" -v2EcdsaLoopScriptShortBs :: SBS.ShortByteString -v2EcdsaLoopScriptShortBs = PlutusV2.serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||]) - -scriptSerialized :: PlutusScript PlutusScriptV2 -scriptSerialized = PlutusScriptSerialised v2EcdsaLoopScriptShortBs diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1LoopV3.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1LoopV3.hs index 5b4eef36142..c05fef89834 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1LoopV3.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/EcdsaSecp256k1LoopV3.hs @@ -4,26 +4,24 @@ module Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1LoopV3 (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV3, - PlutusScriptVersion (..), Script (..), toScriptInAnyLang) -import Cardano.Benchmarking.ScriptAPI -import qualified Data.ByteString.Short as SBS +import Cardano.Api (PlutusScriptVersion (PlutusScriptV3)) +import Cardano.Benchmarking.ScriptAPI (PlutusBenchScript, mkPlutusBenchScript) import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import PlutusLedgerApi.Common (serialiseCompiledCode) import qualified PlutusLedgerApi.V3 as PlutusV3 import qualified PlutusTx (compile) import qualified PlutusTx.Builtins as Builtins import qualified PlutusTx.Builtins.Internal as BI (BuiltinList, head, snd, tail, unitval, unsafeDataAsConstr) import PlutusTx.Prelude as P hiding (Semigroup (..), (.), (<$>)) -import Prelude as Haskell (String, (.), (<$>)) +import Prelude as Haskell ((.), (<$>)) -scriptName :: Haskell.String -scriptName - = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) - script :: PlutusBenchScript -script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV3 scriptSerialized)) +script = mkPlutusBenchScript + $(LitE . StringL . loc_module <$> qLocation) + PlutusScriptV3 + (serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||])) {-# INLINABLE mkValidator #-} @@ -54,9 +52,3 @@ mkValidator arg = | Builtins.verifyEcdsaSecp256k1Signature v m s = loop (pred i) v m s | otherwise = P.traceError "Trace error: ECDSA validation failed" -ecdsaLoopScriptShortBs :: SBS.ShortByteString -ecdsaLoopScriptShortBs = PlutusV3.serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||]) - -scriptSerialized :: PlutusScript PlutusScriptV3 -scriptSerialized = PlutusScriptSerialised ecdsaLoopScriptShortBs - diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/HashOntoG2AndAdd.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/HashOntoG2AndAdd.hs index 055e81cf72f..31f3ba690f5 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/HashOntoG2AndAdd.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/HashOntoG2AndAdd.hs @@ -9,26 +9,24 @@ module Cardano.Benchmarking.PlutusScripts.HashOntoG2AndAdd (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV3, - PlutusScriptVersion (..), Script (..), toScriptInAnyLang) -import Cardano.Benchmarking.ScriptAPI -import qualified Data.ByteString.Short as SBS +import Cardano.Api (PlutusScriptVersion (PlutusScriptV3)) +import Cardano.Benchmarking.ScriptAPI (PlutusBenchScript, mkPlutusBenchScript) import GHC.ByteOrder (ByteOrder (LittleEndian)) import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import PlutusLedgerApi.Common (serialiseCompiledCode) import qualified PlutusLedgerApi.V3 as PlutusV3 import qualified PlutusTx (compile) import qualified PlutusTx.Builtins.Internal as BI (BuiltinList, head, snd, tail, unitval, unsafeDataAsConstr) import PlutusTx.Prelude as Tx hiding (Semigroup (..), (.), (<$>)) -import Prelude as Haskell (String, (.), (<$>)) +import Prelude as Haskell ((.), (<$>)) -scriptName :: Haskell.String -scriptName - = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) - script :: PlutusBenchScript -script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV3 scriptSerialized)) +script = mkPlutusBenchScript + $(LitE . StringL . loc_module <$> qLocation) + PlutusScriptV3 + (serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||])) {-# INLINABLE mkValidator #-} @@ -61,8 +59,3 @@ mkValidator arg = | i == 1000000 = BI.unitval | otherwise = let !_ = hashAndAddG2 l i in loop (pred i) l -hashAndAddG2ShortBs :: SBS.ShortByteString -hashAndAddG2ShortBs = PlutusV3.serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||]) - -scriptSerialized :: PlutusScript PlutusScriptV3 -scriptSerialized = PlutusScriptSerialised hashAndAddG2ShortBs diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop2024.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop2024.hs index 3748db94288..9d67a8a58ff 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop2024.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Loop2024.hs @@ -7,24 +7,21 @@ module Cardano.Benchmarking.PlutusScripts.Loop2024 (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV1, - PlutusScriptVersion (..), Script (..), toScriptInAnyLang) -import Cardano.Benchmarking.ScriptAPI -import qualified Data.ByteString.Short as SBS +import Cardano.Api (PlutusScriptVersion (PlutusScriptV1)) +import Cardano.Benchmarking.ScriptAPI (PlutusBenchScript, mkPlutusBenchScript) import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) -import qualified PlutusLedgerApi.V1 as PlutusV1 +import PlutusLedgerApi.Common (serialiseCompiledCode) import qualified PlutusTx (compile) import PlutusTx.Builtins (unsafeDataAsI) import PlutusTx.Prelude hiding (Semigroup (..), unless, (.), (<$>)) import Prelude hiding (pred, ($), (&&), (<), (==)) -scriptName :: String -scriptName - = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) - script :: PlutusBenchScript -script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV1 scriptSerialized)) +script = mkPlutusBenchScript + $(LitE . StringL . loc_module <$> qLocation) + PlutusScriptV1 + (serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||])) {-# INLINABLE mkValidator #-} @@ -37,8 +34,3 @@ mkValidator _datum redeemer _txContext n = unsafeDataAsI redeemer loop i = if i == 1000000 then () else loop $ pred i -loopScriptShortBs :: SBS.ShortByteString -loopScriptShortBs = PlutusV1.serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||]) - -scriptSerialized :: PlutusScript PlutusScriptV1 -scriptSerialized = PlutusScriptSerialised loopScriptShortBs diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/LoopV3.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/LoopV3.hs index 1a12bb776e2..88d20cc1ae3 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/LoopV3.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/LoopV3.hs @@ -4,12 +4,10 @@ module Cardano.Benchmarking.PlutusScripts.LoopV3 (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV3, - PlutusScriptVersion (..), Script (..), toScriptInAnyLang) -import Cardano.Benchmarking.ScriptAPI -import qualified Data.ByteString.Short as SBS +import Cardano.Api (PlutusScriptVersion (PlutusScriptV3)) +import Cardano.Benchmarking.ScriptAPI (PlutusBenchScript, mkPlutusBenchScript) import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) -import qualified PlutusLedgerApi.V3 as PlutusV3 +import PlutusLedgerApi.Common (serialiseCompiledCode) import qualified PlutusTx (compile) import PlutusTx.Builtins (unsafeDataAsI) import qualified PlutusTx.Builtins.Internal as BI (BuiltinList, head, snd, tail, unitval, @@ -18,12 +16,11 @@ import PlutusTx.Prelude as Plutus hiding (Semigroup (..), unless, (.), import Prelude hiding (pred, ($), (&&), (<), (==)) -scriptName :: String -scriptName - = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) - script :: PlutusBenchScript -script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV3 scriptSerialized)) +script = mkPlutusBenchScript + $(LitE . StringL . loc_module <$> qLocation) + PlutusScriptV3 + (serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||])) {-# INLINABLE mkValidator #-} @@ -47,8 +44,3 @@ mkValidator arg = loop i = if i == 1000000 then BI.unitval else loop (pred i) -loopScriptShortBs :: SBS.ShortByteString -loopScriptShortBs = PlutusV3.serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||]) - -scriptSerialized :: PlutusScript PlutusScriptV3 -scriptSerialized = PlutusScriptSerialised loopScriptShortBs diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Ripemd160.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Ripemd160.hs index a8fbd8094ec..954a586517f 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Ripemd160.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/Ripemd160.hs @@ -5,25 +5,23 @@ module Cardano.Benchmarking.PlutusScripts.Ripemd160 (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV3, - PlutusScriptVersion (..), Script (..), toScriptInAnyLang) -import Cardano.Benchmarking.ScriptAPI -import qualified Data.ByteString.Short as SBS +import Cardano.Api (PlutusScriptVersion (PlutusScriptV3)) +import Cardano.Benchmarking.ScriptAPI (PlutusBenchScript, mkPlutusBenchScript) import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import PlutusLedgerApi.Common (serialiseCompiledCode) import qualified PlutusLedgerApi.V3 as PlutusV3 import qualified PlutusTx (compile) import qualified PlutusTx.Builtins.Internal as BI (BuiltinList, head, snd, tail, unitval, unsafeDataAsConstr) import PlutusTx.Prelude as Tx hiding (Semigroup (..), (.), (<$>)) -import Prelude as Haskell (String, (.), (<$>)) +import Prelude as Haskell ((.), (<$>)) -scriptName :: Haskell.String -scriptName - = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) - script :: PlutusBenchScript -script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV3 scriptSerialized)) +script = mkPlutusBenchScript + $(LitE . StringL . loc_module <$> qLocation) + PlutusScriptV3 + (serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||])) {-# INLINABLE mkValidator #-} @@ -51,8 +49,3 @@ mkValidator arg = | i == 1000000 = BI.unitval | otherwise = let !res' = Tx.ripemd_160 res in loop (pred i) res' -ripEmd160ShortBs :: SBS.ShortByteString -ripEmd160ShortBs = PlutusV3.serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||]) - -scriptSerialized :: PlutusScript PlutusScriptV3 -scriptSerialized = PlutusScriptSerialised ripEmd160ShortBs 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 e5df6bbab38..451a93e2e90 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1Loop.hs @@ -7,24 +7,22 @@ module Cardano.Benchmarking.PlutusScripts.SchnorrSecp256k1Loop (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV2, - PlutusScriptVersion (..), Script (..), toScriptInAnyLang) -import Cardano.Benchmarking.ScriptAPI -import qualified Data.ByteString.Short as SBS +import Cardano.Api (PlutusScriptVersion (PlutusScriptV2)) +import Cardano.Benchmarking.ScriptAPI (PlutusBenchScript, mkPlutusBenchScript) import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import PlutusLedgerApi.Common (serialiseCompiledCode) import qualified PlutusLedgerApi.V2 as PlutusV2 import qualified PlutusTx (compile) import qualified PlutusTx.Builtins as BI import PlutusTx.Prelude as P hiding (Semigroup (..), (.), (<$>)) -import Prelude as Haskell (String, (.), (<$>)) +import Prelude as Haskell ((.), (<$>)) -scriptName :: Haskell.String -scriptName - = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) - script :: PlutusBenchScript -script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV2 scriptSerialized)) +script = mkPlutusBenchScript + $(LitE . StringL . loc_module <$> qLocation) + PlutusScriptV2 + (serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||])) {-# INLINEABLE mkValidator #-} @@ -42,8 +40,3 @@ mkValidator _datum red _txContext = | BI.verifySchnorrSecp256k1Signature v m s = loop (pred i) v m s | otherwise = P.traceError "Trace error: Schnorr validation failed" -v2SchnorrLoopScriptShortBs :: SBS.ShortByteString -v2SchnorrLoopScriptShortBs = PlutusV2.serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||]) - -scriptSerialized :: PlutusScript PlutusScriptV2 -scriptSerialized = PlutusScriptSerialised v2SchnorrLoopScriptShortBs diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1LoopV3.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1LoopV3.hs index 48008ac99c3..32be7a78d05 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1LoopV3.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SchnorrSecp256k1LoopV3.hs @@ -4,26 +4,24 @@ module Cardano.Benchmarking.PlutusScripts.SchnorrSecp256k1LoopV3 (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV3, - PlutusScriptVersion (..), Script (..), toScriptInAnyLang) -import Cardano.Benchmarking.ScriptAPI -import qualified Data.ByteString.Short as SBS +import Cardano.Api (PlutusScriptVersion (PlutusScriptV3)) +import Cardano.Benchmarking.ScriptAPI (PlutusBenchScript, mkPlutusBenchScript) import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import PlutusLedgerApi.Common (serialiseCompiledCode) import qualified PlutusLedgerApi.V3 as PlutusV3 import qualified PlutusTx (compile) import qualified PlutusTx.Builtins as Builtins import qualified PlutusTx.Builtins.Internal as BI (BuiltinList, head, snd, tail, unitval, unsafeDataAsConstr) import PlutusTx.Prelude as P hiding (Semigroup (..), (.), (<$>)) -import Prelude as Haskell (String, (.), (<$>)) +import Prelude as Haskell ((.), (<$>)) -scriptName :: Haskell.String -scriptName - = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) - script :: PlutusBenchScript -script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV3 scriptSerialized)) +script = mkPlutusBenchScript + $(LitE . StringL . loc_module <$> qLocation) + PlutusScriptV3 + (serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||])) {-# INLINABLE mkValidator #-} @@ -54,9 +52,3 @@ mkValidator arg = | Builtins.verifySchnorrSecp256k1Signature v m s = loop (pred i) v m s | otherwise = P.traceError "Trace error: Schnorr validation failed" -schnorrLoopScriptShortBs :: SBS.ShortByteString -schnorrLoopScriptShortBs = PlutusV3.serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||]) - -scriptSerialized :: PlutusScript PlutusScriptV3 -scriptSerialized = PlutusScriptSerialised schnorrLoopScriptShortBs - diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SupplementalDatum.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SupplementalDatum.hs index ca4921d2d4a..742f12a600d 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SupplementalDatum.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts/SupplementalDatum.hs @@ -4,26 +4,24 @@ module Cardano.Benchmarking.PlutusScripts.SupplementalDatum (script) where -import Cardano.Api (PlutusScript (..), PlutusScriptV3, - PlutusScriptVersion (..), Script (..), toScriptInAnyLang) +import Cardano.Api (PlutusScriptVersion (PlutusScriptV3)) import Cardano.Benchmarking.ScriptAPI -import qualified Data.ByteString.Short as SBS import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation) +import PlutusLedgerApi.Common (serialiseCompiledCode) import qualified PlutusLedgerApi.V3 as V3 import qualified PlutusLedgerApi.V3.Contexts as V3 import qualified PlutusTx (compile) import qualified PlutusTx.Builtins as PlutusTx import PlutusTx.Prelude as Tx hiding (Semigroup (..), (.), (<$>)) import qualified PlutusTx.Prelude as PlutusTx -import Prelude as Haskell (String, (.), (<$>)) +import Prelude as Haskell ((.), (<$>)) -scriptName :: Haskell.String -scriptName - = prepareScriptName $(LitE . StringL . loc_module <$> qLocation) - script :: PlutusBenchScript -script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV3 scriptSerialized)) +script = mkPlutusBenchScript + $(LitE . StringL . loc_module <$> qLocation) + PlutusScriptV3 + (serialiseCompiledCode $$(PlutusTx.compile [|| untypedValidator ||])) -- | Write to disk with: cabal run plutus-scripts-bench -- print SupplementalDatum -o supplemental-datum.plutus @@ -48,8 +46,3 @@ untypedValidator :: BuiltinData -> BuiltinUnit untypedValidator ctx = PlutusTx.check (typedValidator (PlutusTx.unsafeFromBuiltinData ctx) ) -supplementalDatumBs :: SBS.ShortByteString -supplementalDatumBs = V3.serialiseCompiledCode $$(PlutusTx.compile [|| untypedValidator ||]) - -scriptSerialized :: PlutusScript PlutusScriptV3 -scriptSerialized = PlutusScriptSerialised supplementalDatumBs diff --git a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs index 28d1b2bc6a2..a85a69af6e2 100644 --- a/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs +++ b/bench/plutus-scripts-bench/src/Cardano/Benchmarking/ScriptAPI.hs @@ -3,14 +3,16 @@ module Cardano.Benchmarking.ScriptAPI , psName , psScript , mkPlutusBenchScript - , prepareScriptName ) where import Prelude as Haskell (String, ($)) import Data.Char (isUpper) import Data.Maybe (fromMaybe) import System.FilePath (splitExtension, stripExtension, takeFileName) -import Cardano.Api (ScriptInAnyLang) +import Cardano.Api (ScriptInAnyLang, IsPlutusScriptLanguage, + PlutusScriptVersion, PlutusScript (PlutusScriptSerialised), + Script (PlutusScript), toScriptInAnyLang) +import qualified PlutusLedgerApi.Common as Plutus (SerialisedScript) data PlutusBenchScript = PlutusBenchScript @@ -18,8 +20,21 @@ data PlutusBenchScript , psScript :: ScriptInAnyLang } -mkPlutusBenchScript :: String -> ScriptInAnyLang -> PlutusBenchScript -mkPlutusBenchScript = PlutusBenchScript +-- | Create a PlutusBenchScript from a serialised PlutusCore script. +-- This eliminates boilerplate by handling script name extraction +-- and version-polymorphic script construction. +mkPlutusBenchScript :: + IsPlutusScriptLanguage lang + => String -- ^ Module name (from Template Haskell). + -> PlutusScriptVersion lang -- ^ Calling convention / builtins (V1, V2, V3). + -> Plutus.SerialisedScript -- ^ Flat-encoded UPLC program. + -> PlutusBenchScript +mkPlutusBenchScript moduleName version serializedScript = + PlutusBenchScript scriptName scriptInAnyLang + where + scriptName = prepareScriptName moduleName + scriptSerialized = PlutusScriptSerialised serializedScript + scriptInAnyLang = toScriptInAnyLang (PlutusScript version scriptSerialized) -- This is doing two or three sorts of normalisation at once: -- It strips leading / -separated components, drops the ".hs" suffix @@ -38,3 +53,4 @@ prepareScriptName script file = takeFileName script -- ignore leading directories -- no trailing .hs so use filename as-is file' = fromMaybe file $ stripExtension "hs" file +