From 47de41ce68f878d65574de0876f32c521c3894b6 Mon Sep 17 00:00:00 2001 From: Jacco <4022046+basetunnel@users.noreply.github.com> Date: Fri, 13 Feb 2026 20:10:29 +0100 Subject: [PATCH 1/5] Version generated .flat programs of marlowe benchmark, add to data-files --- plutus-benchmark/marlowe/bench/Shared.hs | 13 ++-- plutus-benchmark/marlowe/exe/Main.hs | 33 ++++++++- .../scripts/rolepayout/validator/data.flat | Bin 0 -> 6860 bytes .../scripts/rolepayout/validator/sop.flat | Bin 0 -> 13055 bytes .../scripts/semantics/validator/data.flat | Bin 0 -> 59116 bytes .../scripts/semantics/validator/sop.flat | Bin 0 -> 57676 bytes .../src/PlutusBenchmark/Marlowe/BenchUtil.hs | 31 ++++++-- plutus-benchmark/marlowe/test/Spec.hs | 70 +++++++----------- plutus-benchmark/plutus-benchmark.cabal | 4 + 9 files changed, 90 insertions(+), 61 deletions(-) create mode 100644 plutus-benchmark/marlowe/scripts/rolepayout/validator/data.flat create mode 100644 plutus-benchmark/marlowe/scripts/rolepayout/validator/sop.flat create mode 100644 plutus-benchmark/marlowe/scripts/semantics/validator/data.flat create mode 100644 plutus-benchmark/marlowe/scripts/semantics/validator/sop.flat diff --git a/plutus-benchmark/marlowe/bench/Shared.hs b/plutus-benchmark/marlowe/bench/Shared.hs index 19596826622..e210f5e61b0 100644 --- a/plutus-benchmark/marlowe/bench/Shared.hs +++ b/plutus-benchmark/marlowe/bench/Shared.hs @@ -3,21 +3,20 @@ module Shared where import Criterion.Main (Benchmark, Benchmarkable, bench, bgroup, defaultMainWith) -import PlutusBenchmark.Common (Program, getConfig) +import PlutusBenchmark.Common (Program, getConfig, getDataDir) import PlutusBenchmark.Marlowe.BenchUtil ( benchmarkToUPLC + , readFlat , rolePayoutBenchmarks , semanticsBenchmarks ) -import PlutusBenchmark.Marlowe.Scripts.RolePayout (rolePayoutValidator) -import PlutusBenchmark.Marlowe.Scripts.Semantics (marloweValidator) import PlutusBenchmark.Marlowe.Types qualified as M import PlutusLedgerApi.V2 (scriptContextTxInfo, txInfoId) -import PlutusTx.Code (CompiledCode) +import System.FilePath mkBenchmarkable :: (Program -> Benchmarkable) - -> CompiledCode a + -> Program -> M.Benchmark -> (String, Benchmarkable) mkBenchmarkable benchmarker validator bm@M.Benchmark {..} = @@ -26,10 +25,14 @@ mkBenchmarkable benchmarker validator bm@M.Benchmark {..} = runBenchmarks :: (Program -> Benchmarkable) -> IO () runBenchmarks benchmarker = do + dir <- getDataDir + -- Read the semantics benchmark files. + marloweValidator <- readFlat $ dir "marlowe/scripts/semantics/validator/sop.flat" semanticsMBench <- either error id <$> semanticsBenchmarks -- Read the role payout benchmark files. + rolePayoutValidator <- readFlat $ dir "marlowe/scripts/rolepayout/validator/sop.flat" rolePayoutMBench <- either error id <$> rolePayoutBenchmarks let diff --git a/plutus-benchmark/marlowe/exe/Main.hs b/plutus-benchmark/marlowe/exe/Main.hs index 17ff8798332..7569e437f51 100644 --- a/plutus-benchmark/marlowe/exe/Main.hs +++ b/plutus-benchmark/marlowe/exe/Main.hs @@ -5,21 +5,35 @@ module Main (main) where import Cardano.Binary (serialize') import Data.ByteString qualified as BS (writeFile) import Data.ByteString.Base16 qualified as B16 (encode) +import Data.Foldable +import Data.Functor (void) import Data.List (intercalate) import PlutusBenchmark.Common (getDataDir) import PlutusBenchmark.Marlowe.BenchUtil ( rolePayoutBenchmarks , semanticsBenchmarks , tabulateResults + , writeFlat , writeFlatUPLCs ) import PlutusBenchmark.Marlowe.RolePayout qualified as RolePayout +import PlutusBenchmark.Marlowe.Scripts.Data.RolePayout qualified as DataRolePayout (rolePayoutValidator) +import PlutusBenchmark.Marlowe.Scripts.Data.Semantics qualified as DataSemantics (marloweValidator) +import PlutusBenchmark.Marlowe.Scripts.RolePayout qualified as RolePayout (rolePayoutValidator) +import PlutusBenchmark.Marlowe.Scripts.Semantics qualified as Semantics (marloweValidator) import PlutusBenchmark.Marlowe.Semantics qualified as Semantics import PlutusLedgerApi.V2 (ScriptHash, SerialisedScript) +import PlutusTx.Code (getPlc) import System.FilePath (normalise, ()) -{-| Run the benchmarks and export information about -the validators and the benchmarking results. -} +{- +Generates .flat files of the compiled marlowe validators. + +Additionally: +- Generates .flat files of validators applied to a all benchmark arguments +- Saves the validators to .plutus files in base-16 encoded CBOR format +- Writes .tsv files with tables of the reference costs +-} main :: IO () main = do dir <- normalise <$> getDataDir @@ -32,7 +46,20 @@ main = do rolePayoutValidatorExportDir = dir "marlowe/exe/marlowe-rolepayout" rolePayoutValidatorResults = dir "marlowe/exe/marlowe-rolepayout.tsv" - -- Read the semantics benchmarks. + -- Write .flat files for validators + let + vs = + [ (semanticsUplcDir "validator/sop.flat", Semantics.marloweValidator) + , (semanticsUplcDir "validator/data.flat", DataSemantics.marloweValidator) + , (rolePayoutUplcDir "validator/sop.flat", RolePayout.rolePayoutValidator) + , (rolePayoutUplcDir "validator/data.flat", DataRolePayout.rolePayoutValidator) + ] + + for_ vs $ \(path, validator) -> do + putStrLn $ "Writing " <> path + writeFlat path (void . getPlc $ validator) + + -- Read the benchmark arguments for semantics validator benchmarks <- either error id <$> semanticsBenchmarks -- Write the tabulation of semantics benchmark results. diff --git a/plutus-benchmark/marlowe/scripts/rolepayout/validator/data.flat b/plutus-benchmark/marlowe/scripts/rolepayout/validator/data.flat new file mode 100644 index 0000000000000000000000000000000000000000..73f81471dc66ea7334dabc19ce486f333461d962 GIT binary patch literal 6860 zcmdT}O>7(25#HHdlKQhNnU*bEb>aue4ti+IXu}F9a;W3R$d4Tul@wnZs0>9(v}IBv zmw}y|fgW;b??nzlP63)0J_P|9lIKP16mA_fV$U<*mWdVQU?;Oz>L!kcX~!J2K?&cX>ws zRT^~K-46FJwvGpl!~P2o;fy22lz4s2{)rV z&$awr1&?2K;+Ah_nuA`i)oDItczfMLXaJ}*SrfpwBVuZ^CUCFn>s(YPi}y+a+~*^u zK~bW`r+}f`s^o^x&^!aXlW02MCQ_D4FL{r|1TK+%F=zg5QiE7^4aq$oDZEO)%`w?#+>O*-GU6EN7tgf>Y zIEf+}?IhzL3hO;QBVfZee$Mi=@w%1wWRqWp$ht0iQhQz;JpPC#+UsfK--8FjjQ9=M z-bCYQmQj3@n^2wYBYgX5ubtHJpfTt1PDq&D6FT40Ff7CElVLh%=$;6HmzBZdePQrH zV}e_snT*oX6jRhh&!~m&*l0SZZe>HN7%zr6u3A&piGf%aY%PyD@U+l|Qz>%_NzM$b z@qdI<9YI5YxS~$QY*Ca7Ov45++@4?%lZM$ffjV5%H;Ze#`9uMmFX}_I(d2~j?6<@w zRsT9w4!hlZgCogmmHqB7+WQ9x-VtT9!g3@*Z8*q9+30rp)vx~bac#*z;QZmoNV|xP zh;Deo)HmxJR_NN}7ngj7?l$K}pv-0LHLOfdgT97U~M3z_fvXq#*?P^-}>9;ca| zplIY2feEA>gwL`*nEx>4iY9aQ{VXS$@43Wqel%w5w`}At@zy2ct%LfVpAsX9kLTsX zSBI-nq9VmF0KDRycxKX1PBTwWuNjE{A82MQ2B~I#JQjpP%`E&EG_#u3M&^6AW^2eo zp61zFG^L)b7{lgm=stYLOjN~X7j9n}^tpIlkZ}82H$ISJlk#mOWcH@0-oMfLlrfXxYy2W(CEJrdJd{bN18`r+Sy`z2{v z;aVsV%Y}i5Yse|kShiJ}3E}~2O%vk9rH8A}o=U60%NxJE`#2_<=oi^gi9JP!vw|o| zLiGZk;NodLzQ9#e&kIbc-Pvt%@f89~-X5g|3iA1cjTHskmhY#P=?i4n`K0S|#OIkf z+;<%DxrF$6C7w!p5t4p;jnzy1b?c2ql7?=(GP3R2-`&ieCuU!!;PzIX<8DDN8)Ro+2KyCN~K6lFslUZ6n<_9HGG5P=0B4(rCUb zt_j37Gj32(OQms^T814pAtXO-)JZbhN|7U0>amzK=hI|~3$+)ER+N(!&hgI*1usn- z7mC&;I~5Ir=+(#XWL;-jiCWTbt7Vy@>6J#Dt7_z`z^)`*67Yd|@2`YUddUm_oIS~h z;(0&us(L^~6vZSZKh7CBh%50;YgE;oGb_mr-|U4CL7s&mqhfM!X6ByL2?;jXixUo^N76&;os+| z%WoB8i_4uhKwS1EPY0y(v(` z5c?ur=0wNe;2Y~6dgQD>T-$x|nDI%?)!vBUPOH~{hR@@sINR`w6b_vn6yX7(hpsS$ zG37d`e%TvK)9ob}J`35coPO^-cb7K<8^GRO?TBpI-R4iyFw(cAfLE>vaLg)h##jR5 zHvxyW1CAA>=q(Zt0N18hIs5+A2H)-CeR7ZU<99On6$oGDMDr@hYWmk;&mhAA z{VQ_P+0p+WdXJ|+LA3Uh0VI5Pel+s&ESvhcg*G$q2pN=0dh!hQ<5`GUKx@J+yEOYAK@9yboN+Gsn zakt+&47Y>`eD`tlPzc|<)o%6FkaN%;`6%>T&2~!-FNZJtwZq=cS5deVb(^h&;W@r+ zU{%>wKOG@Zz@Js1KWz4*57ipK9Hz>n zS|^W+!SMGf3Cf!{B(XsdY)OlUyGM|=(W?ahDe{n+38Tu5z%;I!M#VI)nMTz#J~oZ( zXcU!nY%1~K7RiUUK}Yvn`!LYJ7JtSNac3+Ri$*LKxUnVXxeMNTYWL$vc0Y0gmd)_oEnAc>P7P9? z2!T~gz8fm%m1fraU>5a`X4iSmt_xWv)iO+vYOkJ$Iff~N+df(Sw0&8TbDICKa>^(S zyvMB9db|le)=Ow%2nHR;FJi~xjTFicG?p7VLb*Ud-DotrVUJXPup@>mEt1D^`In4P z2DVV<)7O(Hh!rkc5`Ep0XdOS503jp_p=1(-F_qElOiE-E96WA=&7FRP*sA{}4C*q` zd9ZJ7xbI%A_d*CAM+~lDB3#YOEtU@Wom1GbEVChrneSCU*A^S`H~I261BOi`$KdH1 z`C;2)b8%|9lKp?Y{`TMhQgM{yFK;vkV`Z>Ror==J@XUs3+pt0Jl)t_l+)rEfPb@vCL^nVSiATx-1lDKf zxWVeOIQY6SfqN)23pZ`|a3RAz{`I#?o)EDoHpC}O zjo#UjHsqWZobyI-tdrQCqbS5NF!%Uoo%e3G+c{^j46n7KBa-_#6m`F<;g}H&_rx|K zaR_N-uf%T29f_^4v3;Mh&4go#Oyk4$*J1Z&yWb*BwE8k(nVxh7VjIbP**-Mq5)oEu zC}65u`eKpi(I1zk+U+zb^t98lD3t1ZHz;ITT1ZiTxIH974~jMNN?M{G_>|PKSuv5B zpLTPTa=P0@(hO-WpHF{}!vlo*@#}WGN3Z%As7G-&N&}wu>b%Nii;Au zMAA$rYq(H(_8UE%&N1*Fvib+cNd6i7N~MXE)Yu80_I{u=#InSYy9z1X7mf<7RBl2= zKkAv`33Ah?tLzEj=G77>e5B&9OP1~&I~xPQjI)}tOfC|U`6k!OLMFj2J7$%EZSKFK zkXDDdkDAB>tNRB3J@V&I!mn%H2KR98W2b|#Mn}OMrkXji5i3}Sk2n!}>L3gO6}!*E zaq=+gKuMg`YX0WH9;R-5hydItI6N1BGz2UO(%Fx)00ve*CjUqfpOM(~*a~FH{(IwO ze^zsFjw9Bzn?6f|O%UA<55t4o;gj&-ccHrOvWGBUqYzuod>2FqS?` zCGGJ@UA*}}Nxs@fjE~t!=!a^A5AyUWk3`KbUA2waQKy^AqI4ojiD~}s6UyeAW{%Fe zzadg(o`Ocg@>U5~AZ<9cr0eU6vbn<8JS{m>KEa%$Ofp1k=Q~ZwQJNiFbbS{DLMCqU z|CJco#w>QqnWXq^q+G0Ih-qwhM@q2pM_5kbzad*KGuHJ6?dm&&%8=)B*(G1JVp_{3 zFOGA`B~6i8+a+@rS=SSAO5NuGL-%b*aFsYvkQYsV7i$@kugAIM753YK875t(A7h20N(t2EB>CC6CjpVA4VVAZ9%W-GHj8ogWn+nj1rhIBGooRIy6y2< z74A!Sd-s|^PD9N?%>_P^r2bo~{sI~`SOKD!RbPl5z^*R-R|l&8c*!aZbMINh^fhnl<3qgn0^-yF-xfH4@q!bK3+DC!}Ssj$NIVydlo@;-7IIyQA zG%6^$>nTeO(6M*D())(qrRJ1lZoRlzQD36bi_F8;;JM5spHE@7x=pwYmijR*7x*!g zlqt?;lqr@_MyRRC5Lz2$XQlNwm>{kEu67Y%T+_SvB2Brtli`v?yVNI*lG`7Bs(=tVo=J zgO@)j;gD!cBgx)IKHTQm$n6y1frkm=^e0Y=p2T?BkE!EP4QGQ+SjHjG=aj z3CNABO$(FlMHdQ->8&VTNXqzy+6-WT_8Jk!Exp@(9*1EqNb??CR)Wq8Ylb>?kb{>a zy_ZbAWvK>0*SeTl`|e6@NSs!UTo4^x<_hMh#HPh9+S|#4FCjURVIfThv(w^$1UA9L z*yNpI37mkZXMDaV-+fV2_vE@@=0&Kgh2tTW5;0fiyD#u2rECiAOnmpK2Z}+F6-6DN z>4$MPo0@z}3HeGB?->{D5ImrLQ|VAscq)S&t26Bnieq<#LZlP)L$sfQ$fYbI&khh7 znrkj?MwUB6KwM)dr=Tjx59d*XcANkOB$;DzjwKQnQmH0s3mKoc8iisO3Nt?z3M|_v zZoz3n(5UaVU8u3v=a4l5JJ|@F+pB2PxTV}t9=seq%q|j6uE4IiIim%TOEms;*0_F zK;B+2rrIe>1&aZv35_8`PfkU$XMXvSO_`U9VQI=xhl&XQnX*Q--P(7TsTyUE|9gZ@ wEdL7$$FwwnaLPKKuB66|0p^Liba;>6;xmWN+Hb-eW~?>lKQr`gg>grs*RXJB_W-|NLO;gp` z)zw<7cB%4ov(eskUhQ75Y;7&A1$F1y9`o$*#dfg1<-D0V*Q^AsN;CGsEzaY_H=~tA zEmPH#P1C=#Q!5*_I`wiQ{y4a-J0B^%(%9GxniYCA;(kF7)Tijzd*YLP^922lN%IG< zv?`0OX03jX9uBSqTa{zAt=7GCSDvb#u5Sg^%8_PcSTul`C`g*_D+>yWXNIa`Wvi zT=>Nkjn^%?3aBe4m~s z26l3JtJ1s_v}%od=Yj2455xg-JlO13zBsk9*uwaz&Em>hqqb6EfDA8VoU6|U>utFo z2xR2^GP|uQb%t(CQKeLnC2y&MXt4Qi2*d4z9g*VoPX?wG1BHHe%r-eU!}8W9q- zUwzn=&_p_|j7BZ9-X2UY?kmfcZI<`a<&y&7DAtbD8&84A)mE_hc?kOT!|^u2ewtu3 z-C7x&svf==mir{r@bQ(k%F2bsm1b?Tg¥9G$8H%NjKyEd)uga*+Wl#SJaGIc@o# z6OkuKYPdyEJ5{O9tuiOu7v6UR#86m_Y8l~M z4VcsigFNa5EDw4;FtxFCd9Ge%iZ@Dq0S2`P;#wYAxqp{wt zlfZJPOVjbs4`0SQTdk~it74yl{2}xltFjhQi-`$H#fu?g*H~I;gxEoI^AZNePBMmHV)nYCs9%M@B}5xd2V()^eX@f1fN6swK(RUjlaSQK%9C6!6A#TrQx%x=!q zT6HWc?p1`rnQnMQYb_Jf0~l(&Sa+t5SL_UrF6(D&o0l-+$UlgWYr)ouhAh9O#>p4! zvL3l=XdQNGkvmph7*Gz}*&P|4k!&B{unPLe4^D0)_2oS9K! zZFxV7$wQBFYqfKXzA`kL+JG;W;u6_$e_{o6^eoXq>WC(_{$%9oQnR+PLCa)Xr4{!k z)Gd+nbM=K_s}-+{C&4sCb(uz@FO)Nok&_lqEGk+K3EO!Bp7wKiu8Tr@_dtA2Al!-J`rY6)d&yA6)%h7wK3?%bP zuw~EzXtpfS%=(TD>W8wb9~D()&6mr{3S4y+ewYh|+^mXx=!Ko|bCNvQeIGTVef*kX!ULXqfo>X#E+tf(!*3TfaI?tBA`s)Rxmy-x&LFuulALddLr{L zRibZe8mP+8S47L0z?9R9Gppk!nVn_;b%_Ne!>^|!1+m6_DS3EyW4U&&-Dq#oS}^O$ zR3{5@>2Qkt#M6$~wl+w%0^npBE**|nb*nCZdaJ^kZP>+d@y5UMlpg1RpRLqs zS_Z1M%X)P#mS@W4^0bNyY$xUw7xh$FRG@mNrHKW_O5-C zP*af){O5f!kDXUt&M&h5McmULcv19N5|0KpMXTfMkc0U-aCV3vC9vvOtFN#9_{}$z ztsy@@_|y`f-1=>zK%(BRGXc8G(5CskCZO~CzV*}_#~kwePh?TuGkdVS~Tu*;}X_gl60kEkh++s;Cn zfZ3qEj&1;-9jomtDHzc(Q~xg%-CvnMQ4c6d~T(ioOF%gE}D9 z>0T&}@Bdt(J4Ta!JZWcjtTY`p;C~~%q@L)(pp&46OKfUc;wkKi!)4g7;^vaa1cC+r zGH2*$2l?{_2Jr0$305=nL(0_*Zz-#o?cg!~A}@{HT`GeRv2BKpElwCZS^Im{)p(5lj`H<>H2nuX4dAE;@z>b@9PHHYPSJF(WY<<`H; zsPFtRdtmdcS18RJJ$a%sRK(I!oxn}_}l;GzUB?)EUP?> zM-`A`KNmF5vHET(gZ#&^`NF6jo^+w?=TZLbG(O~uM>3fSHOfM`5zWc|5__VQ{wgaM zk7PV|ykEw6&;M$cd5|CPnCVDP<66E;M|N{ZpmJB52gyA_T}eDk?aa=tTo1Nief?#{ zeV$f3v#~uq)4J#NFUz;eC=Ghto{|Xx+(UPe0OzVjOrzGlo$%pO9tbI4BM02C;VYd z3V990l~VEleCMTnl{$JFQ>IG(o$eD4A%Zy9_8|CO(nadYv0 ztXo{+79>bNqiZjGTE0jR)X|L6oq*P3aLxLG#`;@$UjuWCIZGea^w0n^g^qvq$Dtl_ zNN5)9`@Bw{WiZ_ox!bctivN4<>oh)Bg}Sf5;e8cw1%;=%RC-uxiqYeJsH0D~=sv3n zcZ{|_6uW;=S^NEc{i$)0r)H6THNV}8Uki7t|8j>ma zhX@-OpHaEFUM&^9oogP^km<;Z6I-xXIyux$9$OR{T7koov*U}3SF4z1VEYrP`%4N^ zH3?Fr)Ny==h7RbVJOD^oc;}b!1alw*#Gh%WJ9kTWcE6p$y5Ev?WgYK(U?Y%bM;Ra< zQ}c13h0U`%f=@6M0YPgV-=!C*yag5qnXDEx<_tIu1&*<^Wo{!=f_*~4K4GAc)mXyA z_l$*t(B+Q^eA*(rX4v>YOkhX1nbL|)f=yNfH;}F-^F*>MIHqBpa?8K4*{};d9-uJj z5IXUS68Q<^qz+NV5jm+-O#_bLK}~uFm_}$lbb9O6UtdLaIjq207K<`50H-aSS?<5| z%21hGc_NHbXi2+h5>Zh(>x#-@0FEzMdBf~88t1E z+EhnaO;$G`9G5ZAcU1o!`dgw4kzV>?XUAdTYs*_+IoITx`c&7~SUcY5|2RLbvj6J~ zFJ-WhzBgVz^NDW|K~3YT1Ke)^s2W&dwa}k5_a$)g zG3Mfj;BwiL2tOKJ@*x)GIuRj{6l3UQ9L)ES76A`DYs9s#v3(C>waa&9wZkC4kG5a` z58H=ceku(SHV2a$!Dd`Kl0rd7?N=s1*$ndG9e4J@I9THMsw+XaxgxP?+~13V9@0F_=`Mr5vLKaVg?MF%N8-aPU835AjEdBX=wuLSel+cHnkev zT7gBI_H1BkRU)17-o56Dm+40&P`Lr1`^r9Oc0yH(I1K+lJ@Y^R?|+;g z_tq$W!E1>f3UNIUi-6w|d2f<&oq<N>KdnMnDuoA=qU4gh0JbdVXF6p_bxS2{F}P%~~i zPff#}g{HGJXW$J4BysTsUqIi5G=|>WIT9(vOP4w$Q}fSuFg2yOH8mZ95Khe(Izl0J zYKCvX)Xcln;am?)>y0m|eH!8*z#e8s@LrZY@WgtUKjDbdVwa9sb%rB%L-;Z&*TxKr z1F`#}QG#3KT^4okC1oUbBZI`G^JQL-zS_Vl-+ozt5fUItE(d&G*kseM|0&gwGbpO% zcfgVrwSQzW)+eor;g==M#t*DW3hk;+6v{{>nqESdqNrbNUjhU-^^urL6WrdV-5ZIepO&RjAVEeWBG8!svpg7CWE=e8Ly3Aw1#igy{j!z4OpB z1n<3kpS_>%DoT9+zz0T3zkbbG1?By37un=(^uV>ZZb1Z>w)dmg=JeYZoW zYx*Ot5JLvk-gFcDWn4uP-xcn6(t8|;6N+#o1rf?B6%bfyY`_hMu5KXJUGG+q@jJF; zg3OYgfXPN$%^7#TZJs8<`l$tW?ZiAV{yNqzpr_2_#RH!qqU%k5`xr=6xb1OuPGuLC zW{9Du2m>YN1_)yCNES?Uz^iGj!2js}dZV)QUF; z*B}|^%mX#|6_z>6{s@Q0Uw}1lp#^^>OwN%9ELP`vOsp083hsYQQ?wKiILH)zFMw;v z_m=s01;1jhx{j9+=J1lk1CP{iCp86Ai-I0po(grs?~M;&+YJpl^ZESNN|W~EnIKyO zGYdqTu&4`{ria!BK^DxAgLCr-J_~Y)N1nM*bU|wq51kEBG67Mj={~@BAtpVTk*;Dq z-n>_RRqz@W=qWZkixBpEJ)vtK54!C?oa)b*&|pdjn1kM7*i7#-iv~^++#>m*8*Vwy zSSp%j@@4$XQJ7F`2~;wsN%p6wHpXuVwc+OuJ-;c9kq20DBlgOJyZiOaKU)yqk3~-m zQy9Js-q>~>;~0g%wdJ0T>oK#L^Cl@VWO$dI%g)1=i8ppkFPG83Wdl z8uqV)p!&lrq}iXSoP)pG-YztddjPlEx~1O|b+i?^%u(v-t;%U#r!K8S&ZaZDG$E;A z`KIAP7X-9@4MUF#f-5;i)} zfUX${Bdg=TtUz(DXLvg6)P%=(AqI9_X^SYd5oG)vwn1X({pu4@appW(#YwdZ`8!kw zqCtVQ0}}$&gOV>X24|iO!mdCYFrn9?KWLp_$VrK1kjSI7)dKZ{aFtP4CPaSG%}|3B ztDK%8w^V=EFyHuTQeVW*uq9mJK1WPv()^n@K+J8Q$H#Z%*Mp-;;G)GfmL(Mp-ecJS zas}(1>p+y(TOW2tqoCZWsg$&$Qyj zh^RY22-vmOMfp?-wi!Dhsy3BzGo=NMd(t$~0bcqTJ4{t*BKi5`wOK8}E%UcpX7Y9C zX$bsWI~04HOOo!xu)BoFu+)jNYl=>hw!#TNFa01gJ4-#%Z1b$4<{?w${)+fI{@S1X zye-93Z8>=&xRAmPHZXmI)=W6iivc)iZ?u@vsL741~=%V(J z=%(?Tv}bXCySUA)oC4Oz1UYLxKAOr3tl;E`Y*0SfF@sG)$xbCjEsX%7g?29OJ1BaL zC?GYdmBvEp&k9z_uf?^qif~A?u1*Ms9ZrOXsdyD~QVzR#|y-E;FF$5`qc%U)-_-e^e_thpGoEmp3abE#6_us~PLe zZcv}oaOW2?aqcfsxk`46G<9a`iZa3smVE%vm~H!A?FK}ktzm81sO?p`a05bx1z{pE zoBGL|>uFfZFpA5;dQe}11|-xSrXr%Z@++*JXib=t>S-o~B#N`(sTFl)>w(#u^gpU4 z3FkyC=nxk~tgQvSnCuk;Qq33Y&rMOMA+=+Iio8>CHUx4&^m0t3^UO`bAcW<{I@*z15lnQ5V#kU?ogrF!Q#x-6qNp4 z+b!V)2Ec$@F@TNp=rKDXz+hS=sBphWfU3BIz+U^!GhooZrX-%MkDUN*Ct(z9IvfGGR zrzY||NURRVN;|b0O;Sbi3JpIU96N3YI6@7lw!`Dol1|AF9ZX{@WQW^6{z`m0( z7gET}8eTEZ9m=f_8|pZ%sbpJkU<(7idF3O3kv60cGB%bkzC~!ryw_NOvoLr==#1~i z9_hnYCgH^e7^ny?LqzVYkQ0j<5)oveS($d%po$%D zGW$tey^$Hre~6tTJm_Tt{(ydgeeRE^`Xjut+50*qMND-uZ?~tz(3o&P_;g>blZ%qU zl@dDH-S;$_FkGDMs3L246*Roy^AmW*X)97l(Q2dARajiRncnJW>}P}m>ptUhp$ES| z2#|@6x?{vX+c{oQp$|nE0k-SQ#eUkipX^OquYoR!p}=t=5dc{CbnyrzC%)JZ9~wCx zc~Uxg9=X55T|S%8#l=#{-zTQ%#CB7Z*HctTPSG9)eIJ{M5}$-q7MiYp3+<+CUeZ8k zHzk8u2^618KvDB<^E|dO{-_bB$n4XDR6?@>$&HMiT80<+vdqT(7Y^wRi(3$RQKM_a zgkUyHf_%o$O|2g0T&_8!lqDCp7a$Z2MkBt3IfRNqKEuUcmbyWvBy7MR(fu?6@(M}t65Fk;2O=$!Ok7rT}y)(w)z%mCS#M5+abo50gb|DQIN z7=)|}bSd0}JfhL=bZe&*VDy$)nMP|+kT8s?(87R?c@tm!w9KFjfyry>vMYhx&u=VN z*6AYL)teD^9x;Y3%9sEN{Q<(zkh2dTj%yF`l1{0f-0{HWkb2K<8_t&)g1o(Xs&Y9% zmidY-m#xS4RyHr6 zJ#eXo{t!5vv<&Q~cn-uswhrM4k8^A}*Xc_0P}?}PX228y`7LNl2SRK!0OC5#;0Q-L z@Hv)ge-H9YP!3esQKV8>jBTYD2eGT;`k$L6au}KcPCcMA4@fk~p&9x=fCR{pc)4@p zfzFhCN|i@v18hOxLJob?JJP;pY<4VUtkBX81k-z2R^#-rNSWU?m#idIG(}0IcCyAs zU!G{Vnfi4~S@Y#$dj%(3U<^c9B-?EKl_T^zgD5Cxe8`S$AuyC**(LKEUpEsjTd>> zIHswWPC$>6-Phn}GIrP$Y3xO1#$J&1_QDnMt7QEyii<88-Ivv50f)!&^>$1iCc5N%P}YR>+QDluAqAB7285v~^@18dEH0FnsXB5!L z2{{?xq7Ef)v55DeGwaUzI{EndI`->c5D(@KKC-NTuQWX8-#;N0eHw)LTFGi_&{MpKYh}6t6-gD@EITb>Cxy5vrW%z z0HcXcaZPl>aB7(L2p-~$Sy675E&0)i3KV)pZ{4BKg2bVnpA;T2Vt_Y1-5)LA2b45B zHkCO#iYTjl?xMKql7}yr_2F32@?HXuEvFhyp(^8P(>@L>s-YRVv;t#(QQNFYUbmzg zMw$hcB1+`_5wd)Q$4ZRjfng#TDk_mZ*UVHRs&eE_L{lYJ5UnMvY_D+8hwW7!#oX3& zH>7oa-bk{?9xOpbd$b*%1vaQfVoMw#J29p9D=J3-!-7nhbtg>80@;JgPw zNsQ~|9ERg66aurpnPlT$Gxs*p9GXrZ9XjsRk=wowum;)zM6q}D9}Zgnw_@E))5zKy zIoh;j#-10(?m}Sf?Ly#0r1wmz;^?^}mroSAtQpa;*zDX_Ixt<572IQ4=NK{Uyz8<1 zd#vPb)(=NXAXF)W)wCRvQ&n;Xt0MsXG50&Ei>c$!uXkuFhp-4|0r4klM|(S>UCr+a zT_VpIg6+6T=2Mc)!w|h`mlrTrG`H3oXESo-1tevD^H%o2eUx z9XjC%FnZff$RemE2(UyFD?chHWn$`p6-v`7nN;G%E77_dw;Zd`63-4SV;O9;zZC>I z732f`6c?P)0h0ChPjyO1@+wPp1!&KfusJ7?H!KN&S zG-{!OoQ$B)g4OBbgK6FIq(JhiG@0)F>wwdA9Quohl~WH*-}Xh_j)#mA#KfC zCEY|s8T*W%hk8$koI_a9&MK(hRzPFb=oEWTSK%?U2dI;`jT}XL$>t+R>`Z7!q?A6< zfRjniSl0riJjYSNYxd2wCdkQG)_V!%Go+3pQ`*lV%tfDA^93Bl)GM6aqxAToV(Iba zv==>NY#lkubR7;^9YY@0D=$UN83zoAhc!^Gl9q`d*lP8{h*o)ricG^msO2RNZnYKI zHQZsz1vCfnZI={HZnoy5Q| z50ZXW@s!J3*K8*KK=a(%&3J@5ZM(dT_)p#1LMu5cKkb3@TIhIfcPlW1;RfGPOIV8PI*Zv+^l3z+3uUWgl^B zzA;8ay=FR&)ETx~gf6H<>`vTRVrYb4g9(IV3Cbt-+Fb^%Mg^@#BIr;Qa1$C|$vkL^ z4hguCD2zD;Mg42N2*v3X65$@<2g8t9#n6wAq!?9wkY9ceg;H?a#mPe0kmYX%|Kf@$ zIxyMZq=V+MdA4$8u5SABVbjErG%*mtZLP@W@%c@$!~5vqw{w+d<}B|x7U4)icz@Jk#Z`!esk{yp7 z?NSKZ?pHCu$3U3H?Csi!PCH11V3zeuh{eK{haNR#WQ@?a0-q(ku{cwQHXI@DXUx3b z4U1S`-l5z3`wR()i1k9i)oO><8593zMeL3IBL#(tE=SSU@7RlQH@4Nd>>R7HC=C8bz!^8jczq;xU)Q+%( zeY;Z|XVxHn89T_NfYaxWtv^I_;Frxg`Uuu@_+fbW#>X~IFJ7ok`R)kwNOWP>*f zDh{84u@Eo1qKYHcS!$MtZeXC_rqBfd)QWbGS?r4V8C904u^phL&OpsRfy$CzZ~Y){)p@?+7FGS zg6>RU7mM_#Utbt9bo(IH$fYDa$&hLtxpBu{2w}{eWLZYokcdwSH{A{9D=LY&h?000 zXoFq*kPmxp$Z*Jz?ZOgEA;Fitq4YoDuOX)>O9Su@hSno^)5LdoNSmNO-L6%(Ryaz? z_gTL_b*fvuy6T~jGJPsTDPWsRMlN{M=G$wZoJ*Z*@RT*WQ6y1pTc^SJK?fWN=nx<| z0kp`sW}a>8xc>}}3dlAqoGXV6lXBy+)FSZ>voM>0zVVhGMVE@*9$IOoJ>A;Z;lU3O z(A&`0!Tv{V%i|LaC;$Q^LINZXvG;>M$T}`u^o3^}#C5e&4R8Ye!Nw}Zb{8tuDsmLz zDkR2MA}aZ0Zqhi#tdQ-9K(*cup$ zW6@6L-B9I0e?$-9EGCPNMb4v06wr^Cts1_BLuof=fO%CheE6ok|q73Bib~F z``%)vo)nsb6EQ83up~hac4m^18Z$*LhZ(aShT-t(&W@5BF5f3iwuCL>9FPllL%%%1 zCOpiU}LI7e%>vg!Yfoll_zkgf7Y%m}^{fZcpBe4qv1!kBaxRs;^xRIp>>^sC0 ziS|^sPhH0w4(id^pdPmskZa(-%AR{x0%T{s&I#0kvT;GpWod^8?fm2uKFUG&Ko#&^*e7QUc+1W&t5CSu$+sK)_swZcO*u z17}iR`T;Y$Nx)8S8aoP%_H+TWkPMc!WIC<2-ckTksz)S8+5A%gSM z&Z%w6;HB8;e81uD0xT^*lcd2!iQ_?ptY&;ap_bwWgYf)Ud8 z_C-7g`unU9M?|qkyg#R837b+rm=bXKcUF9GRte+@tG#`&N^maGJ0#J$Q*xMs>OLS` z@1j)#sa+c~qO#t*o0q&N1wL(BGRjkoJ-#=G6w@BD&zh_$a2nR?blO)UZC060m28!S zR|FynIW82QLPJgXL?m$)vUeuJ?|=KsvkYu@)p-B4`aF9H+v|hnbqOg0yBlNm8CrF1 zrJ@4`^wCRjoKfJZRD>J2Q7H;mKX|Hk$rP6o$J;v8$dtfIanTZs?Pc>o?2QzCLUB{g zOTqeKZcH3r?(;>8Sh201-ZGs;+F|Z_Y(Q4yMl2xF=|?i7M!*i`$b_t|Njmhf_dD3I zr9vj$%%@e`Mr}6O55PlbAPTC6yrsP8xJ)K!*=Km|r>t&ktl5DA@qR}%F|OeL<!0*4kOE7#Jn{?|+F;2azRZ zYHT(aC0Sf>e-9v$zTC4>IJo|Xn8;#$kTIR(y{kkSZNREkp~10FKjZyI+lm8K;)JvX zJ%q8ZIhgkQa@^$m9qNc%k#I29uqk^i6xC^LTG6o3oMV4xG;QbpfQE3kN1jjRDO9TW z;(CXU$jS&Z*vbqd_?ewl+nPrl$sM_gb->J7=O= zyO541tR#or-Sux@r)U{uj<@w?!^eXvS~X?+u3u9Fwth|(-YLwDqcV_-347yT{q)mWP#Zdy+%?SZ7UlknXBf7Bp3;o8QQLV{VLJt!M`5mAQdEs8Mvr~Z226E0-G9OdB z*OAj2N3zzN2Go< z0MP7z>6Go0ks%g=b{|_tC7oIcu~&i|^c$w)Yf@tQa=NiJUMH2!x^B~zr7eppa0 zIx}n#Xy19A#X$Q|8WL;gHlIvM|rDoFoZsDTf>Z-%ldSvEblF#!)5tQT7(o% z#x^*M(XJFZ@9;34HGvRf9OpVlmr2yokaSR1kJLmL>g`;zb$p0nnDtE-5dag>&pdWY z9EkjYI@tySR_Tx)Ukg22+72h?A=-mZo6)TV>bx^4V62oLd#CdbdbTwkefWs5X!FlR z$v>>)M5n`}iS7P#l1IXg?lL@m#En!oZFVA>sFe6lb+)SI2%+^!Og)E^_mhXF=gRL2 z~pwr9J(6GEax-5w*Mb9|wgrC^2@0`c^n35AhnH{-6+(B2S z+^%$LHXmvB0H)ndkc=~QX#iaoK}SUQ1ksTWH9RAG*dTE9jBK+uuseu7Z4ZR_XcI5U zn|l-R(5JcUXldHz>U&L=Rp=3RGts{S0!;JmI+Cd%m*H52C8vW|T9w6ClXCXlr#yU! z_-cHp`USAzM0ZC>Fvr3gqI)+HU98>GRP{)^zS3$mj|ZC&_^KPhW(G%XBia{-dU4dR z5HpMxCnFurFrD&g9~IL$evFijIC(RCBV~De6@3tBQO3m`VGCZ1k{f~Mfd_Y@LO!zx zqple*Zl~QRimF6IL{WJHr}RHVX!h*@sJ@G}2B`Zw19hJO6$LP429L}+-~;0Bhd{F^ zFqnb@AED13Xi6Q!>2NIhf^H_d+*ux0tjR%Cq3P^Nu93pow2|M-D=>lf(m&Y}pxHPw z$s74bX9oB?m2Y(9I?e;Wp<+&ih#7Q9oo%t>JL+ z3C8B0WE(y3-QmCoN;5dXZE3B7ovAldML3@uCtH=6BSr+6#Ju*>Nlhj9rlE@;UntwI zU4oO5#h^QqTU}zNrT<92&n`NK3N%1-hk_8Ff()>ZIlRN>)ut6V^>zS*t+EZE-!X<+ znFBNdIJ(EQfDBM%2B**-lYfbx?V#a1(}4TocOJMq7{VQCL%1_OgmB5+$%GV`D=Ppt zo>U&v$xs4jLObh3<`sj^A5nVP_C!e5w0WLF?L#qn4th{tw%x>J#qp?c?DPaF86 z!T_n62J?tS?}WAAo(8--Is@+x1|Al8l@@zC;KZT_(&DV49V|9&5yT#LedTV8>9Iir^4?oN1n_ z5i1H>sZakhgOaq&ksxY9!#8gGV4-f(WQK2F-(Y@3o7zLN|suz)2 zz$GJSHVY)cFPgiUQ4^f^9h;BPP9mcNNM{8>Orn0GgOt*qie^C-krV^dCrK#K#RhF= zLee^2-d^+mBr+pHEaXD?c72V6+-#Hnk%AfUS5y+x7rpdKQjvZ{1?kXnZ5*W&5z1Yp z5@XK8Y3ppQ5yjrv^2Dk^!ed0Q59==KJogbchrB1+GK&O8der&(d||7-EF;9RA7P)N zzUmi>4rK3Pz-Tl498lmP&)*&Svb^~VDTDc-U3m;Cbj*MpkNC4FfC2YtDlf<*oCsmt zAF?Jw0CDT@u}Prsr!sfN+wHR|+CIDQ2GxZ`Qht9`l~rPOAYU1+0tA)FDuBJiSuU6j zdW-D`@)k;TY|Z4cv?PO3j;4?hQr3xnfiK*ZQaX?cq@Y0jdkY{v+X@Q&}zKWABUdkN%>0WvPI*NM(XuasLC}Mz*O;j$h@AZnY z_j-l$d}DSxr80aVT%>H&N3P%=i-LiemCaw8zIrN4jmBZnxeFidP*ErBgXL7#gVs5q zyaIgCV8a&>D`4CpqD&G77%O^|f?i4c#+@d46EG~22g#yq1j|OQcU_3w1K5ddDl3@x zNV?J;7p~#_@>_fG^D^IR+vy^oH49$4?f2FWl=8i3!QI=pcFkq1hE8d@A$z8asgySJ zfvM{0`c_b_9BDQ-o(ful*lybPnRB8=rpSxK-32|0UC?x{kFSHsGky+259X2#KG^$A znXx48&CNaoFBHsg(#~CdCJ+Nl3@o>pkaSN;ZL0n1>o1d_O{pSx*5l-MIA=gGQl$^{ zCet7#{(8F&LKdK~Z%TUHvB3e;V0SH{{(UpgSwAh(KJ8hL`AH@P_7fn&r0@7S{G)j^ z^9Q{d&(1r%PH*}BU2N*^naq?4jTovznl0&#DYPX-NEEzw4m&MA0I;gLrZMgO6-ut*RJ z4sKEtN@Z`-D0WJ60cV)(FkEVHu2;IG*>I9vghB^8XyVREL@+5YaGI^QMhcX7tO`3h zk#r*cZM=Ni5{A4L)&w~23s`$ea>OP#AQ139qCJRK2vyF^QBRd=oif|K2YUMwwh^w8 zCm_N^jLyS+m-w+f$ogJD&Q0+>Qqqp!Tt^XbK|J$ z1bQ=sPj1{-UqGW+4S<83m3DgTEp2?mD|XgaDL*2=rX&Ak5fY~Q3hCO)7vI7)Msfu} zCz%UsHNr1Ksj2%F6)td*oqw0_^E;$O>MO!0-!a0+OGfw%c8c&BNR99*c8TyQBx893 zvXQ1m_~f8VP~sN-PXzkw{0yQmy;9?Tk=V^yPKhFyPcPvMxuirVP+xQbWcIW!l(iZ#G(}}3H2#r2!dLSUwqrGj4ADu*?h~^;XI|<_bU5_%o81( zj=sD|wHS1_y}cOL<=@P}g~6GGZXy#XYTxeSLgrce}B(=VSeAifAx+3^S2Y1Uis!Uc;x>F D%ytJy literal 0 HcmV?d00001 diff --git a/plutus-benchmark/marlowe/scripts/semantics/validator/sop.flat b/plutus-benchmark/marlowe/scripts/semantics/validator/sop.flat new file mode 100644 index 0000000000000000000000000000000000000000..e0a80c048b2666e06a4fcdc0fd4c4372d4c2abfa GIT binary patch literal 57676 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 b??3f^clPPy|N4*q&p(dcdjF3nAtV1kOpo%D literal 0 HcmV?d00001 diff --git a/plutus-benchmark/marlowe/src/PlutusBenchmark/Marlowe/BenchUtil.hs b/plutus-benchmark/marlowe/src/PlutusBenchmark/Marlowe/BenchUtil.hs index 840ad3bd30c..eee8f37f4c1 100644 --- a/plutus-benchmark/marlowe/src/PlutusBenchmark/Marlowe/BenchUtil.hs +++ b/plutus-benchmark/marlowe/src/PlutusBenchmark/Marlowe/BenchUtil.hs @@ -10,6 +10,8 @@ module PlutusBenchmark.Marlowe.BenchUtil , printBenchmark , printResult , tabulateResults + , readFlat + , writeFlat , writeFlatUPLC , writeFlatUPLCs , updateScriptHash @@ -22,7 +24,8 @@ import Control.Monad (void) import Control.Monad.Except (runExcept) import Control.Monad.Writer (runWriterT) import Data.Bifunctor (bimap, second) -import Data.ByteString.Lazy qualified as LBS (readFile) +import Data.ByteString qualified as BS +import Data.ByteString.Lazy qualified as LBS import Data.Either.Extras (unsafeFromEither) import Data.Int (Int64) import Data.List (isSuffixOf, sort) @@ -42,6 +45,7 @@ import PlutusCore.Executable.Types , PrintMode (Readable) , UplcProg ) +import PlutusCore.Flat (flat, unflat) import PlutusCore.MkPlc (mkConstant) import PlutusLedgerApi.Common.Versions import PlutusLedgerApi.V2 @@ -49,27 +53,28 @@ import PlutusPrelude ((.*)) import PlutusTx.Code (CompiledCode, getPlc) import System.Directory (listDirectory) import System.FilePath ((<.>), ()) -import UntypedPlutusCore (NamedDeBruijn, Program (..), applyProgram) -import UntypedPlutusCore.Core.Type qualified as UPLC +import UntypedPlutusCore (NamedDeBruijn, applyProgram) +import UntypedPlutusCore qualified as UPLC + +type Program a = UPLC.Program NamedDeBruijn PLC.DefaultUni PLC.DefaultFun a -- | Turn a `PlutusBenchmark.Marlowe.Types.Benchmark` to a UPLC program. benchmarkToUPLC - :: CompiledCode a + :: Program () -- ^ semantics or role payout validator. -> M.Benchmark {-^ `PlutusBenchmark.Marlowe.Types.Benchmark`, benchmarking type used by the executable, it includes benchmarking results along with script info. -} - -> UPLC.Program NamedDeBruijn PLC.DefaultUni PLC.DefaultFun () + -> Program () -- ^ A named DeBruijn program, for turning to `Benchmarkable`. benchmarkToUPLC validator M.Benchmark {..} = foldl1 (unsafeFromEither .* applyProgram) $ - void prog : [datum, redeemer, context] + validator : [datum, redeemer, context] where wrap = UPLC.Program () (UPLC.Version 1 0 0) datum = wrap $ mkConstant () bDatum redeemer = wrap $ mkConstant () bRedeemer context = wrap $ mkConstant () $ toData bScriptContext - prog = getPlc validator -- | Read all of the benchmarking cases for a particular validator. readBenchmarks :: FilePath -> IO (Either String [Benchmark]) @@ -80,6 +85,16 @@ readBenchmarks subfolder = do <$> listDirectory folder sequence <$> mapM readBenchmark (sort files) +readFlat :: FilePath -> IO (Program ()) +readFlat path = do + contents <- BS.readFile path + case unflat contents of + Left e -> errorWithoutStackTrace $ "Flat deserialisation failure for " ++ path ++ ": " ++ show e + Right (UPLC.UnrestrictedProgram prog) -> return prog + +writeFlat :: FilePath -> Program () -> IO () +writeFlat path = BS.writeFile path . flat . UPLC.UnrestrictedProgram + -- | Read a benchmarking file. readBenchmark :: FilePath -> IO (Either String Benchmark) readBenchmark filename = do @@ -251,7 +266,7 @@ writeFlatUPLCs writer benchmarks folder = writeFlatUPLC :: CompiledCode a -> FilePath -> Benchmark -> IO () writeFlatUPLC validator filename Benchmark {..} = let - wrap = Program () (Version 1 0 0) + wrap = UPLC.Program () (Version 1 0 0) datum = wrap $ mkConstant () bDatum :: UplcProg () redeemer = wrap $ mkConstant () bRedeemer :: UplcProg () context = wrap $ mkConstant () $ toData bScriptContext :: UplcProg () diff --git a/plutus-benchmark/marlowe/test/Spec.hs b/plutus-benchmark/marlowe/test/Spec.hs index e9e8093594a..122d36b1dca 100644 --- a/plutus-benchmark/marlowe/test/Spec.hs +++ b/plutus-benchmark/marlowe/test/Spec.hs @@ -10,62 +10,42 @@ import Lib qualified import Main.Utf8 (withUtf8) import PlutusBenchmark.Common (checkGoldenFileExists) import PlutusBenchmark.Marlowe.BenchUtil - ( benchmarkToUPLC - , rolePayoutBenchmarks - , semanticsBenchmarks - ) -import PlutusBenchmark.Marlowe.Scripts.Data.RolePayout qualified as Data (rolePayoutValidator) -import PlutusBenchmark.Marlowe.Scripts.Data.Semantics qualified as Data (marloweValidator) -import PlutusBenchmark.Marlowe.Scripts.RolePayout qualified as SOP (rolePayoutValidator) -import PlutusBenchmark.Marlowe.Scripts.Semantics qualified as SOP (marloweValidator) import PlutusLedgerApi.V3 (ExCPU (..), ExMemory (..)) import System.FilePath (()) import System.IO (hPutStrLn) import Test.Tasty (defaultMain, testGroup) -import UntypedPlutusCore.AstSize qualified as UPLC +import UntypedPlutusCore.AstSize (AstSize (..)) main :: IO () main = withUtf8 $ do let dir = "marlowe" "test" + scriptDir = "marlowe" "scripts" goldenFile = dir "budgets.golden.tsv" goldenFileData = dir "data.budgets.golden.tsv" actualFile = dir "budgets.actual.tsv" actualFileData = dir "data.budgets.actual.tsv" checkGoldenFileExists goldenFile -- See Note [Paths to golden files] + let + benchSOP = + [ (scriptDir "semantics/validator/sop.flat", semanticsBenchmarks) + , (scriptDir "rolepayout/validator/sop.flat", rolePayoutBenchmarks) + ] + benchData = + [ (scriptDir "semantics/validator/data.flat", semanticsBenchmarks) + , (scriptDir "rolepayout/validator/data.flat", rolePayoutBenchmarks) + ] - -- Measure ExCPU, ExMemory, and UPLC.AstSize for each "semantics" benchmark - semanticsMeasures <- - semanticsBenchmarks >>= \case - Left err -> fail $ "Error generating semantics benchmarks: " <> show err - Right semantics -> - traverse - Lib.measureProgram - [benchmarkToUPLC SOP.marloweValidator bench | bench <- semantics] - - dataSemanticsMeasures <- - semanticsBenchmarks >>= \case - Left err -> fail $ "Error generating semantics benchmarks: " <> show err - Right semantics -> - traverse - Lib.measureProgram - [benchmarkToUPLC Data.marloweValidator bench | bench <- semantics] - - -- Measure ExCPU, ExMemory, and UPLC.AstSize for each "role payout" benchmark - rolePayoutMeasures <- - rolePayoutBenchmarks >>= \case - Left err -> fail $ "Error generating role payout benchmarks: " <> show err - Right rolePayout -> - traverse - Lib.measureProgram - [benchmarkToUPLC SOP.rolePayoutValidator bench | bench <- rolePayout] + measure (validatorPath, getCases) = do + validator <- readFlat validatorPath + getCases >>= \case + Left err -> fail $ "Error generating benchmarks: " <> show err + Right cases -> + traverse + Lib.measureProgram + [benchmarkToUPLC validator bench | bench <- cases] - dataRolePayoutMeasures <- - rolePayoutBenchmarks >>= \case - Left err -> fail $ "Error generating role payout benchmarks: " <> show err - Right rolePayout -> - traverse - Lib.measureProgram - [benchmarkToUPLC Data.rolePayoutValidator bench | bench <- rolePayout] + measuresSOP <- mapM measure benchSOP + measuresData <- mapM measure benchData -- Write the measures to the actual file defaultMain $ @@ -73,14 +53,14 @@ main = withUtf8 $ do "Marlowe" [ Lib.goldenUplcMeasurements "budgets" goldenFile actualFile \writeHandle -> for_ - (semanticsMeasures <> rolePayoutMeasures) - \(ExCPU cpu, ExMemory mem, UPLC.AstSize size) -> + (mconcat measuresSOP) + \(ExCPU cpu, ExMemory mem, AstSize size) -> hPutStrLn writeHandle $ List.intercalate "\t" [show cpu, show mem, show size] , Lib.goldenUplcMeasurements "data-budgets" goldenFileData actualFileData \writeHandle -> for_ - (dataSemanticsMeasures <> dataRolePayoutMeasures) - \(ExCPU cpu, ExMemory mem, UPLC.AstSize size) -> + (mconcat measuresData) + \(ExCPU cpu, ExMemory mem, AstSize size) -> hPutStrLn writeHandle $ List.intercalate "\t" [show cpu, show mem, show size] ] diff --git a/plutus-benchmark/plutus-benchmark.cabal b/plutus-benchmark/plutus-benchmark.cabal index f00e7de47ab..28626f70cef 100644 --- a/plutus-benchmark/plutus-benchmark.cabal +++ b/plutus-benchmark/plutus-benchmark.cabal @@ -19,7 +19,9 @@ data-files: common/templates/*.tpl force-delay/data/*.flat marlowe/scripts/rolepayout/*.benchmark + marlowe/scripts/rolepayout/validator/*.flat marlowe/scripts/semantics/*.benchmark + marlowe/scripts/semantics/validator/*.flat validation/data/*.flat source-repository head @@ -606,6 +608,7 @@ library marlowe-internal , plutus-ledger-api:plutus-execlib , plutus-tx ^>=1.60 , plutus-tx-plugin ^>=1.60 + , plutus-core:flat , serialise executable marlowe-validators @@ -639,6 +642,7 @@ benchmark marlowe build-depends: , base >=4.9 && <5 , criterion + , filepath , marlowe-internal , plutus-benchmark-common , plutus-ledger-api ^>=1.60 From 870e4de5add888dbcd3d3b5211614e0ceef5ac53 Mon Sep 17 00:00:00 2001 From: Jacco <4022046+basetunnel@users.noreply.github.com> Date: Thu, 19 Mar 2026 11:53:19 +0100 Subject: [PATCH 2/5] Better names for qualified modules --- plutus-benchmark/marlowe/exe/Main.hs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plutus-benchmark/marlowe/exe/Main.hs b/plutus-benchmark/marlowe/exe/Main.hs index 7569e437f51..be0a22d8755 100644 --- a/plutus-benchmark/marlowe/exe/Main.hs +++ b/plutus-benchmark/marlowe/exe/Main.hs @@ -19,8 +19,8 @@ import PlutusBenchmark.Marlowe.BenchUtil import PlutusBenchmark.Marlowe.RolePayout qualified as RolePayout import PlutusBenchmark.Marlowe.Scripts.Data.RolePayout qualified as DataRolePayout (rolePayoutValidator) import PlutusBenchmark.Marlowe.Scripts.Data.Semantics qualified as DataSemantics (marloweValidator) -import PlutusBenchmark.Marlowe.Scripts.RolePayout qualified as RolePayout (rolePayoutValidator) -import PlutusBenchmark.Marlowe.Scripts.Semantics qualified as Semantics (marloweValidator) +import PlutusBenchmark.Marlowe.Scripts.RolePayout qualified as SOPRolePayout (rolePayoutValidator) +import PlutusBenchmark.Marlowe.Scripts.Semantics qualified as SOPSemantics (marloweValidator) import PlutusBenchmark.Marlowe.Semantics qualified as Semantics import PlutusLedgerApi.V2 (ScriptHash, SerialisedScript) import PlutusTx.Code (getPlc) @@ -49,9 +49,9 @@ main = do -- Write .flat files for validators let vs = - [ (semanticsUplcDir "validator/sop.flat", Semantics.marloweValidator) + [ (semanticsUplcDir "validator/sop.flat", SOPSemantics.marloweValidator) , (semanticsUplcDir "validator/data.flat", DataSemantics.marloweValidator) - , (rolePayoutUplcDir "validator/sop.flat", RolePayout.rolePayoutValidator) + , (rolePayoutUplcDir "validator/sop.flat", SOPRolePayout.rolePayoutValidator) , (rolePayoutUplcDir "validator/data.flat", DataRolePayout.rolePayoutValidator) ] From 14cb1ecec762eb83f495a2e00612c779e21339f5 Mon Sep 17 00:00:00 2001 From: Jacco <4022046+basetunnel@users.noreply.github.com> Date: Thu, 19 Mar 2026 13:29:35 +0100 Subject: [PATCH 3/5] Regenerate marlowe semantics validators --- .../scripts/semantics/validator/data.flat | Bin 59116 -> 57754 bytes .../scripts/semantics/validator/sop.flat | Bin 57676 -> 57663 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/plutus-benchmark/marlowe/scripts/semantics/validator/data.flat b/plutus-benchmark/marlowe/scripts/semantics/validator/data.flat index e08f6c7bd5506ec9068b9467329a43d5a2fea6a7..c932adb249754fee4899b7a7ca4c0a3fc79bf1c5 100644 GIT binary patch delta 2587 zcmb_eeQZ5(k+^M3fre#sLsoO;9v_Gb4XlRV0eW}$dZE7oZ=e}n{ zldbz}|Gf9^Ip>~_-|yUW-(Pkz&3_UP~%Z5$(o>k}QJ{Fw` zvruNd#0oHsCra%F=K+NKqcL_qvs79nz+rrALnAzz`QwHQ(7Fg^BFr;3=}DduAd`X;QB^$##%lB`9q)y&#^(=-zQOq zSMO`lya?E4s)P%uHPyl;tTQ#hGdN;0mpl!U1bLBYEESenCtmOAfamcQQ+0kosb6s_ zNa>sSnQ1?4!F}c`=*MH`VZ9GD@e~tWc=G3_)-)6bL!lkL&?3Pp{Ilinu!z5{cmta8smjhWrzcgv zbXv_M3o-t#vW9FvseJQ)*nD1P-gFK?7mbI)^Gplcpgfgi0@Wmn>{I}>lv0wN!LI6k zhOkN>K6!AXpXX6&np3y-AV!8v&&{<@~) zz+*66$H@|fa4N{ysI<2|GJX5p?~h+x$hXam&F@a9SQn>L1H~!6$~Gl)tXbOwP?$It z⇩^!*jh#TJpiL>K=D%%@U`u5V|Zzeu^>yio&A@#}!3qmSAOCfmo7_wRW(IHmB zW*ic$bseJS=wYnvsK7<>7}5Ee=!c`|v)YJl&eD|Or99DZEa2%T76Z-zEPsT_CKSHKGxsdvJQ`0e^; z`u<7%dGO?Z&c|m#D!}PqEq~(ky`HujefmNRg}_6+KR4YSzelWLEj#2V*bn8Tw^KPC3IvxgY@ z)afj2BCLd&;4HJ_A6nbAjp?N~@O77!sz2L01`aNSCfwlS_7Au$(1J%u+oRZY^QW#` zq|U%A?|abDHmqtaJpe&!88}3A(HEn6pal7k-RqUzjCtt%j2(_9*$fuD_fV|X{2F>L zxSxTuXqKWdgpW#AIEK9*BVLsbz;>+mn9}W^n92o8sX^iQ!C*=I~w6Q)_R|X zuV=1$X@XDT-!|74MWo!ppTqZt?gJTHxA^sO74sOL*wUbnc*j&eUmY?N!7E$-K{UMC zX}8RH#{p!fF+RHs3R7}$GCUy537LHjKk4-9kAP-AN$}xD$%KI}FS$P5^*k2$M(`JX z7W~mrK1?9?zE3y9cY3=@1Bv90c!XsyjVQk6D~Bj<-C2XTd{?N2p6=^}eYpNm13f?P zvq1!Z{Hg^)7k<`+hMppv>c0q68Sq;`KdY8pht`2~S=2i*y_Di?LiXs}l-B+5R0aNN z;QJ;C^pnA4I1r4=Y|=Y6eP?9jhDe+hi`3-Skoh=3kZ-LoFyOO_}!qC|d*)xaAD&9?$cruB5q}$_G%*cSiPH z17+|D!V`0GjW5F|26c>;Sk+g(O}G_4lKrJ`j_a4OJ1T* z&0HuaIF-z`q8hQxqm(eha={b>+M&rB@HNMS)(R}rmjt2+JdlQ4W8vP4)fJI5i4e{? zqv+Auql^vfRHx*dV@)q92l>rq#a|xxCo@XilN^j!Q4nH^S3~y1LkS7UF(-z0g7H$5 zud(2{1yWP1U)(D`q*h6B`OR~;hAc@+vb619HcC6(vtE^Cj#_nBMmL^0^MC4}k8Xad F{WsiW#Ss7i delta 3676 zcmbtWX>e256~5;^N!~EnNEiukda{gnTlTZCkrym4V2i~9%QdA1N3kR$kR@9Sn58j> zw1p&u<+N!^I)S8_rUMNjqfT34z4Ds)mtTmtZtK<+SOWtyPMG56N z_2Rtv>~JE!#~&E-&2od~lW%kuoAPNYcX2BD%s^M|1GW{9);f0D>>ZEHXeR`x?M%YhXC)a}SRU?ezqw{On-z<9rLiE|k{P z<|2T&D;Q!3*i-O&vZSC-fDk^kwi>>aJh%2TG@S*#1QhRtJ$6olFaynKI2dP{(^HGn z=rY*gaXeutF+G;?XJT;);QYP~$u|u9AZrH*{u$=NP?t>cj2AV)b9la}1fIg{MP_&b ze^yjgb%oNIjWGdq1ZyG`XOIfvt02pu3j{-Pf0T9LLir}RithEL;K9gnS&0zf zTl%#o}K6e=;&UOj{LdqCbLkqn3 z^Cj)%V{P0nP?Z*2Oqq)^(6_DjX7uLf)Y9dXwAOI#&<8t5e+6PZG0jA(qVf9s=ig2h zlE;ysLURyn%q1rbg#!`B^pc8{tPsl~2}cexwiJR+JZe4-UHA`kKODy` zk`+48C;bsBaJ!`r>Tu!527KId%5a`)oo@~7jD#aW-)Fp`gr9B3@`^_2!(A1740DME zzR}VKspe=^KLJWJbD$wr#|QOE2k%IG=hDcWpp+fbU0x;5RqEmTgwanTxyk*9oTq z|MseZH_*#f{n?eOX$@Yg9mKxs&%qGR9GCD;b-#F02DI(1!|v%EeB{+UG+Q+2s#y&| z{A|r$T^~#F<_&nKel5)5uj{*WPp6ue;xjdjK>}wQ`gxS!Yv_hXY-n!GYar;vDep9El+m4K zgL)iqtRyIS{l4DVBQ&Yg4OrUDf7#w-f@VB#vp_H2qS2Wef7x_KoiX(Sc&RtwVX7Ow zF_J#T|BAl~ooYYWNeny(gE2OPy5>>Z!V4W7H?J!jF|F=g$b?1LxCOAxl>`c?~3m3!FLdH`JbQmZ-j{cfuh z+ROHjmOy8ho?gn0H7{ zYgz&e+Kb=_R<-vRMnO5VrWGzrbUI-3PYigmJr@q)GwtP6_8+$2qq4lbxz;?>wih7E z1jExisQ07Z3I9Me8i_LB5QuJ%oe|NDSm-c91Zy3mw81IIGjpoKr5a>WSx8?-T0qYa z`M#*%M`uCM8%mw?B!+)!S_yszq34 zX;Ec|jYyh+m(Fa)6*pXJX7(|MY9j9l$4nO6gG0$8hu7bq=i-I$EELZXkwiW5pF4x0 zbBd12(kkl|9b$)r;YoL##8igN3E)iBDxpe5M<&69qG6eqs4z6FK zd0qYk%-ocMd39S^_y=#ldF95l${%>LyR?R5xB^o(>9<(LXzV$~H+OKg+~mr1z{IxC zFF9T)^YFKoUJw`G1Ui6j&i>x5im_lH>!c-|t!V5B!b1oi6W(vr!8ktO@fO_;Z+3Lx zt}=VtTp;$N*lnfenZIpH&v-B#Tv9Pxb zdwRRg1GKL;5e`PeY%3J_XA<5}toK;lKN61;`Pd{r+k1blLdq4s%)B=~IeH}^a>$T9 z;f?v--e8n@(n#cuEGozWt{~R&^zBJV-JVkS2hOLR`wOq%elOv~j|Mg*U+H^6yO}a1 zf)mRLAzs;~gjTBhXHI2eDlwUOdw{c8;lIl>cR5ZOr4@;r8P`)ZyI-8s zOpvP3et9vq{kX{RofS0_B`r7eMq0JR&Rgn#&?Hdz(n889b)kC>GB!@D5oB&BN=j00 zUVMQo8Y6(!cSS57D34k$Z*+Rm4Jy@unGctiJj|&`t9qjN)TFyr`>8te-^z%yI_JuK zW;Q~4hn)U-bnG!~PbI{QP1*5`sC>&}SEA)vU HpPGLIKnKa_ diff --git a/plutus-benchmark/marlowe/scripts/semantics/validator/sop.flat b/plutus-benchmark/marlowe/scripts/semantics/validator/sop.flat index e0a80c048b2666e06a4fcdc0fd4c4372d4c2abfa..03135f1631306b5adb65ba3859a5137fdce9516f 100644 GIT binary patch delta 1092 zcmX?ehWVuC7Zu7!>%DMhKp#Rl;z$+or(3`UHT6Xk_B&*PZS%Znnv*;8x* zGn&v>$qdFwQ%0tgVg@Ef<{ZNu1_mHy1f)zEIZ7)0OG|=M(-=4vnTrgIKvG3UKq}Zc z+$8PsL9lWbMz9oOM0@Sb{;PaRD@L#=$^?Bv}GoL(B=W*%^$Sm7#T$;`|C~zlcAGs^c5hEl5D&#Ec~{UZV#_9CBc6o^5rERUKlKap6NSgOQQBxGaN# z$%`qC5ha!;H#->Aqgl(GT9SxiuMwjNDE6I;Qd3g%N-`63UQkwu0iA6%uL8 zqQ(Ibcd{r#Y!o&H$6f&3GOz-m4p`y<@j*!e$OoqgV;mL%Z2(!s1X0a6*?~*6-isB* zTR=6^#HVd7vAhIRN4*XdJ;@57Ps6KSDK% zgJCfX(Y3kXDW4ya#y7JEu`>#=Lz5y0D1kFD2u)517M-jeq6?&D8964`1-F68(8*CD ZSHQ{99hMveHrs^WX`@nd47~H31pwqH24esK delta 1103 zcmb7?&rcIU6vyYy?$VYY1#N*;1T#WJ(%68tF`8glP!9D#p&{x8vTV0PBo(@~!FV9X z#G^*v!9)+%8wV3f_NE5|F+>yNKOhG&-Xvc2BJs`cmb4KMUf#~WpWpe+d%LN8+*H=f z!REHU{H0|*mn&Mf?c58#X{q;I?x-mBo?o$fz^{#wRl##MW1dYxu(UF9t2AZhSz~P= zxx6FORFIZOKrwBLL2bsrOPAbI#Vv(s<%QegkO-NEZOx`}>vKCEE4Mn|x*qdb?KNim z%;8~nA_a<7GH|H-2tJ(EoL4;~&A{=|S}%TCX~0-~zC}xVdQ_8Ia8)&nR*u>>*(Kw~LgD(D`|B}ciqK?Oj%}`qO97`L zA~!^)TZPhsvFOodQrN*E0B@ECep97AnX#a5uqveNNDAu5DXu%20g7?~i*&Q&0_#0;;32j4$2YSV79%7pkhLw}bM9=vQ~v;@2Mjd; From 97eb4325518b94823f5d738469d11774c511e4ae Mon Sep 17 00:00:00 2001 From: Jacco <4022046+basetunnel@users.noreply.github.com> Date: Thu, 19 Mar 2026 14:03:46 +0100 Subject: [PATCH 4/5] Remove unused dependency --- plutus-benchmark/plutus-benchmark.cabal | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plutus-benchmark/plutus-benchmark.cabal b/plutus-benchmark/plutus-benchmark.cabal index 28626f70cef..59b70401ddc 100644 --- a/plutus-benchmark/plutus-benchmark.cabal +++ b/plutus-benchmark/plutus-benchmark.cabal @@ -604,11 +604,11 @@ library marlowe-internal , newtype-generics , plutus-benchmark-common , plutus-core ^>=1.60 + , plutus-core:flat , plutus-ledger-api ^>=1.60 , plutus-ledger-api:plutus-execlib , plutus-tx ^>=1.60 , plutus-tx-plugin ^>=1.60 - , plutus-core:flat , serialise executable marlowe-validators @@ -646,7 +646,6 @@ benchmark marlowe , marlowe-internal , plutus-benchmark-common , plutus-ledger-api ^>=1.60 - , plutus-tx ^>=1.60 test-suite plutus-benchmark-marlowe-tests import: lang, ghc-version-support, os-support From 2980d86fb583add44cd4b952960cfcfcf6d60554 Mon Sep 17 00:00:00 2001 From: Jacco <4022046+basetunnel@users.noreply.github.com> Date: Thu, 19 Mar 2026 14:10:18 +0100 Subject: [PATCH 5/5] Update dependencies for marlowe-agda-cek --- plutus-benchmark/plutus-benchmark.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plutus-benchmark/plutus-benchmark.cabal b/plutus-benchmark/plutus-benchmark.cabal index 59b70401ddc..863aa78620f 100644 --- a/plutus-benchmark/plutus-benchmark.cabal +++ b/plutus-benchmark/plutus-benchmark.cabal @@ -721,10 +721,10 @@ benchmark marlowe-agda-cek , agda-internal , base >=4.9 && <5 , criterion + , filepath , marlowe-internal , plutus-benchmark-common , plutus-ledger-api ^>=1.60 - , plutus-tx ^>=1.60 -------------------- bitwise -----------------------