Skip to content

Commit 6fc6db1

Browse files
committed
bench: plutus-scripts-bench: add EcdsaSecp256k1LoopV3 SchnorrSecp256k1LoopV3
1 parent 793248b commit 6fc6db1

6 files changed

Lines changed: 140 additions & 0 deletions

File tree

bench/plutus-scripts-bench/plutus-scripts-bench.cabal

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,13 @@ library
7070
other-modules:
7171
Cardano.Benchmarking.PlutusScripts.CustomCall
7272
Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1Loop
73+
Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1LoopV3
7374
Cardano.Benchmarking.PlutusScripts.HashOntoG2AndAdd
7475
Cardano.Benchmarking.PlutusScripts.Loop2024
7576
Cardano.Benchmarking.PlutusScripts.LoopV3
7677
Cardano.Benchmarking.PlutusScripts.Ripemd160
7778
Cardano.Benchmarking.PlutusScripts.SchnorrSecp256k1Loop
79+
Cardano.Benchmarking.PlutusScripts.SchnorrSecp256k1LoopV3
7880
Cardano.Benchmarking.PlutusScripts.SupplementalDatum
7981

8082
--------------------------

bench/plutus-scripts-bench/src/Cardano/Benchmarking/PlutusScripts.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@ import Cardano.Api
2424

2525
import qualified Cardano.Benchmarking.PlutusScripts.CustomCall as CustomCall
2626
import qualified Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1Loop as ECDSA
27+
import qualified Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1LoopV3 as ECDSAV3
2728
import qualified Cardano.Benchmarking.PlutusScripts.HashOntoG2AndAdd as HashG2Add
2829
import qualified Cardano.Benchmarking.PlutusScripts.Loop2024 as Loop2024
2930
import qualified Cardano.Benchmarking.PlutusScripts.LoopV3 as LoopV3
3031
import qualified Cardano.Benchmarking.PlutusScripts.Ripemd160 as Ripemd160
3132
import qualified Cardano.Benchmarking.PlutusScripts.SchnorrSecp256k1Loop as Schnorr
33+
import qualified Cardano.Benchmarking.PlutusScripts.SchnorrSecp256k1LoopV3 as SchnorrV3
3234
import qualified Cardano.Benchmarking.PlutusScripts.SupplementalDatum as SupplementalDatum
3335
import Cardano.Benchmarking.ScriptAPI
3436

@@ -37,11 +39,13 @@ getAllScripts :: [PlutusBenchScript]
3739
getAllScripts =
3840
[ CustomCall.script
3941
, ECDSA.script
42+
, ECDSAV3.script
4043
, HashG2Add.script
4144
, Loop2024.script
4245
, LoopV3.script
4346
, Ripemd160.script
4447
, Schnorr.script
48+
, SchnorrV3.script
4549
, SupplementalDatum.script
4650
]
4751

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{-# LANGUAGE DataKinds #-}
2+
{-# LANGUAGE NoImplicitPrelude #-}
3+
{-# LANGUAGE TemplateHaskell #-}
4+
5+
module Cardano.Benchmarking.PlutusScripts.EcdsaSecp256k1LoopV3 (script) where
6+
7+
import Cardano.Api (PlutusScript (..), PlutusScriptV3,
8+
PlutusScriptVersion (..), Script (..), toScriptInAnyLang)
9+
import Cardano.Benchmarking.ScriptAPI
10+
import qualified Data.ByteString.Short as SBS
11+
import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation)
12+
import qualified PlutusLedgerApi.V3 as PlutusV3
13+
import qualified PlutusTx (compile)
14+
import qualified PlutusTx.Builtins as Builtins
15+
import qualified PlutusTx.Builtins.Internal as BI (BuiltinList, head, snd, tail, unitval,
16+
unsafeDataAsConstr)
17+
import PlutusTx.Prelude as P hiding (Semigroup (..), (.), (<$>))
18+
import Prelude as Haskell (String, (.), (<$>))
19+
20+
21+
scriptName :: Haskell.String
22+
scriptName
23+
= prepareScriptName $(LitE . StringL . loc_module <$> qLocation)
24+
25+
script :: PlutusBenchScript
26+
script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV3 scriptSerialized))
27+
28+
29+
{-# INLINABLE mkValidator #-}
30+
mkValidator :: BuiltinData -> BuiltinUnit
31+
mkValidator arg =
32+
if red_n < (1000000 :: Integer) -- large number ensures same bitsize for all counter values
33+
then traceError "redeemer is < 1000000"
34+
else loop red_n red_vkey red_msg red_sig
35+
where
36+
-- lazily decode script context up to redeemer, which is less expensive and results in much smaller tx size
37+
constrArgs :: BuiltinData -> BI.BuiltinList BuiltinData
38+
constrArgs = BI.snd . BI.unsafeDataAsConstr
39+
40+
redeemerFollowedByScriptInfo :: BI.BuiltinList BuiltinData
41+
redeemerFollowedByScriptInfo = BI.tail (constrArgs arg)
42+
43+
redeemer :: BuiltinData
44+
redeemer = BI.head redeemerFollowedByScriptInfo
45+
46+
red_n :: Integer
47+
red_vkey :: BuiltinByteString
48+
red_msg :: BuiltinByteString
49+
red_sig :: BuiltinByteString
50+
(red_n, red_vkey, red_msg, red_sig) = PlutusV3.unsafeFromBuiltinData redeemer
51+
52+
loop i v m s
53+
| i == 1000000 = BI.unitval
54+
| Builtins.verifyEcdsaSecp256k1Signature v m s = loop (pred i) v m s
55+
| otherwise = P.traceError "Trace error: ECDSA validation failed"
56+
57+
ecdsaLoopScriptShortBs :: SBS.ShortByteString
58+
ecdsaLoopScriptShortBs = PlutusV3.serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||])
59+
60+
scriptSerialized :: PlutusScript PlutusScriptV3
61+
scriptSerialized = PlutusScriptSerialised ecdsaLoopScriptShortBs
62+
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{-# LANGUAGE DataKinds #-}
2+
{-# LANGUAGE NoImplicitPrelude #-}
3+
{-# LANGUAGE TemplateHaskell #-}
4+
5+
module Cardano.Benchmarking.PlutusScripts.SchnorrSecp256k1LoopV3 (script) where
6+
7+
import Cardano.Api (PlutusScript (..), PlutusScriptV3,
8+
PlutusScriptVersion (..), Script (..), toScriptInAnyLang)
9+
import Cardano.Benchmarking.ScriptAPI
10+
import qualified Data.ByteString.Short as SBS
11+
import Language.Haskell.TH.Syntax (Exp (LitE), Lit (StringL), Loc (loc_module), qLocation)
12+
import qualified PlutusLedgerApi.V3 as PlutusV3
13+
import qualified PlutusTx (compile)
14+
import qualified PlutusTx.Builtins as Builtins
15+
import qualified PlutusTx.Builtins.Internal as BI (BuiltinList, head, snd, tail, unitval,
16+
unsafeDataAsConstr)
17+
import PlutusTx.Prelude as P hiding (Semigroup (..), (.), (<$>))
18+
import Prelude as Haskell (String, (.), (<$>))
19+
20+
21+
scriptName :: Haskell.String
22+
scriptName
23+
= prepareScriptName $(LitE . StringL . loc_module <$> qLocation)
24+
25+
script :: PlutusBenchScript
26+
script = mkPlutusBenchScript scriptName (toScriptInAnyLang (PlutusScript PlutusScriptV3 scriptSerialized))
27+
28+
29+
{-# INLINABLE mkValidator #-}
30+
mkValidator :: BuiltinData -> BuiltinUnit
31+
mkValidator arg =
32+
if red_n < (1000000 :: Integer) -- large number ensures same bitsize for all counter values
33+
then traceError "redeemer is < 1000000"
34+
else loop red_n red_vkey red_msg red_sig
35+
where
36+
-- lazily decode script context up to redeemer, which is less expensive and results in much smaller tx size
37+
constrArgs :: BuiltinData -> BI.BuiltinList BuiltinData
38+
constrArgs = BI.snd . BI.unsafeDataAsConstr
39+
40+
redeemerFollowedByScriptInfo :: BI.BuiltinList BuiltinData
41+
redeemerFollowedByScriptInfo = BI.tail (constrArgs arg)
42+
43+
redeemer :: BuiltinData
44+
redeemer = BI.head redeemerFollowedByScriptInfo
45+
46+
red_n :: Integer
47+
red_vkey :: BuiltinByteString
48+
red_msg :: BuiltinByteString
49+
red_sig :: BuiltinByteString
50+
(red_n, red_vkey, red_msg, red_sig) = PlutusV3.unsafeFromBuiltinData redeemer
51+
52+
loop i v m s
53+
| i == 1000000 = BI.unitval
54+
| Builtins.verifySchnorrSecp256k1Signature v m s = loop (pred i) v m s
55+
| otherwise = P.traceError "Trace error: Schnorr validation failed"
56+
57+
schnorrLoopScriptShortBs :: SBS.ShortByteString
58+
schnorrLoopScriptShortBs = PlutusV3.serialiseCompiledCode $$(PlutusTx.compile [|| mkValidator ||])
59+
60+
scriptSerialized :: PlutusScript PlutusScriptV3
61+
scriptSerialized = PlutusScriptSerialised schnorrLoopScriptShortBs
62+
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"type": "PlutusScriptV3",
3+
"description": "",
4+
"cborHex": "59013c0101003232232325333573466e200052080897a1300549011572656465656d6572206973203c2031303030303030001333300400190029111001a400a444400490029111000a400644440083233223325333573466e2000d2000130074910350543600133001003801919194004dd69aba10039bae35742005375c6ae840066eb8d5d09aba20011aba2001357440038000c8c00400488a4006601292010350543700912999ab9a3370e9000002080109991980300300099b81004480080040026aae74004d55cf0009baa357426ae88d55cf1baa001323001001222225333573466e1d2080897a004149854ccd5cd199bb40030020011333323300600600133702008900100180100089803249245472616365206572726f723a2045434453412076616c69646174696f6e206661696c656400232633573800300001"
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"type": "PlutusScriptV3",
3+
"description": "",
4+
"cborHex": "59013e0101003232232325333573466e200052080897a1300549011572656465656d6572206973203c2031303030303030001333300400190029111001a400a444400490029111000a400644440083233223325333573466e2000d2000130074910350543600133001003801919194004dd69aba10039bae35742005375c6ae840066eb8d5d09aba20011aba2001357440038000c8c00400488a4006601292010350543700912999ab9a3370e9000002080109991980300300099b81004480080040026aae74004d55cf0009baa357426ae88d55cf1baa001323001001222225333573466e1d2080897a004149854ccd5cd199bb50030020011333323300600600133702008900100180100089803249265472616365206572726f723a205363686e6f72722076616c69646174696f6e206661696c656400232633573800300001"
5+
}

0 commit comments

Comments
 (0)