From 9d42a094358110aa5d19f5723fac7ac77ec8ac29 Mon Sep 17 00:00:00 2001 From: Yura Lazarev Date: Mon, 9 Nov 2026 12:33:33 +0100 Subject: [PATCH] feat: test multiIndexArray with PLC 1.2.0 Add V3 and V4 policies for PLC 1.2.0 alongside the existing 1.1.0 scripts. Reuse the scenario registry, governance setup and minting and budget helpers across all four combinations. Keep variant identities distinct in artifacts and address caches. Preserve the existing 1.1.0 envelopes and strict failure checks. --- agent_docs/multi_index_array.md | 27 +++-- ...iIndexArrayEmptyPolicyScript_V3_120.plutus | 5 + ...rrayHugeNegativePolicyScript_V3_120.plutus | 5 + ...rrayHugePositivePolicyScript_V3_120.plutus | 5 + ...ArrayLateInvalidPolicyScript_V3_120.plutus | 5 + ...dexArrayNegativePolicyScript_V3_120.plutus | 5 + ...exArrayOverLimitPolicyScript_V3_120.plutus | 5 + ...xArrayUpperBoundPolicyScript_V3_120.plutus | 5 + ...tiIndexArrayDataPolicyScript_V3_120.plutus | 5 + ...gMultiIndexArrayPolicyScript_V3_120.plutus | 5 + ...rrayRepeated1024PolicyScript_V3_120.plutus | 5 + ...exArrayRepeated1PolicyScript_V3_120.plutus | 5 + ...xArrayRepeated64PolicyScript_V3_120.plutus | 5 + ...iIndexArrayEmptyPolicyScript_V4_120.plutus | 5 + ...rrayHugeNegativePolicyScript_V4_120.plutus | 5 + ...rrayHugePositivePolicyScript_V4_120.plutus | 5 + ...ArrayLateInvalidPolicyScript_V4_120.plutus | 5 + ...dexArrayNegativePolicyScript_V4_120.plutus | 5 + ...exArrayOverLimitPolicyScript_V4_120.plutus | 5 + ...xArrayUpperBoundPolicyScript_V4_120.plutus | 5 + ...tiIndexArrayDataPolicyScript_V4_120.plutus | 5 + ...gMultiIndexArrayPolicyScript_V4_120.plutus | 5 + ...rrayRepeated1024PolicyScript_V4_120.plutus | 5 + ...exArrayRepeated1PolicyScript_V4_120.plutus | 5 + ...xArrayRepeated64PolicyScript_V4_120.plutus | 5 + cardano_node_tests/tests/plutus_common.py | 81 ++++++++------ .../tests_plutus_v3/test_multi_index_array.py | 100 ++++++++---------- 27 files changed, 224 insertions(+), 104 deletions(-) create mode 100644 cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayEmptyPolicyScript_V3_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayHugeNegativePolicyScript_V3_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayHugePositivePolicyScript_V3_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayLateInvalidPolicyScript_V3_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayNegativePolicyScript_V3_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayOverLimitPolicyScript_V3_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayUpperBoundPolicyScript_V3_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayDataPolicyScript_V3_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayPolicyScript_V3_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayRepeated1024PolicyScript_V3_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayRepeated1PolicyScript_V3_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayRepeated64PolicyScript_V3_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayEmptyPolicyScript_V4_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayHugeNegativePolicyScript_V4_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayHugePositivePolicyScript_V4_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayLateInvalidPolicyScript_V4_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayNegativePolicyScript_V4_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayOverLimitPolicyScript_V4_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayUpperBoundPolicyScript_V4_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayDataPolicyScript_V4_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayPolicyScript_V4_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayRepeated1024PolicyScript_V4_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayRepeated1PolicyScript_V4_120.plutus create mode 100644 cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayRepeated64PolicyScript_V4_120.plutus diff --git a/agent_docs/multi_index_array.md b/agent_docs/multi_index_array.md index eb9f776cc..d5fa0466b 100644 --- a/agent_docs/multi_index_array.md +++ b/agent_docs/multi_index_array.md @@ -2,9 +2,10 @@ Issue: [plutus-private#2261](https://github.com/IntersectMBO/plutus-private/issues/2261). The builtin takes the array first, unlike the older signature in the issue. -The tests target PV12 with PlutusV3 and PlutusV4 / PLC 1.1.0. The node and CLI -must both use a Plutus revision that activates batch7 at PV12 in both languages; -a development version number alone does not establish that activation. +The tests target PV12 with PlutusV3 and PlutusV4, each compiled for PLC 1.1.0 and +1.2.0. The node and CLI must both use a Plutus revision that activates batch7 at +PV12 in both languages; a development version number alone does not establish +that activation. ## Established practice @@ -19,16 +20,20 @@ the complete conformance suite or its golden budgets. The test reuses the chunked funding/subtest runner, caches funded addresses, and checks confirmed transaction outputs and optional db-sync records. Its fixture locks governance and Plutus resources and uses the cluster pools. When necessary, it -enacts one cost-model update for every tested language, then marks the cluster for -respin. The update can require three epochs; the fixture skips this setup on -long-epoch testnets before doing any governance work. All PlutusV3 scenarios and -then all PlutusV4 scenarios run as subtests of one test, so both languages share -this setup. Separate parametrized tests would each pay for the update and a respin. +marks the cluster for respin before proposing one cost-model update for every +tested language. The update can require three epochs; the fixture skips this +setup on long-epoch testnets before doing any governance work. All four ledger/Core +combinations run as subtests of one test and share this setup. Each combination +reuses the same scenario runner, budget-growth checks and raw budget tests. +Separate parametrized tests would each pay for the update and a respin. The PlutusV4 policies have the same code as the PlutusV3 ones, because the -policies don't read the script context. Only the envelope `type` differs. The -PlutusV4 scenarios are skipped, without skipping PlutusV3, when the transaction -era is older than Dijkstra or the CLI cannot decode the PlutusV4 policies. +policies don't read the script context. Only the envelope `type` differs between +languages for a given Core version. The scenario definitions are shared between +both Core versions and compiled separately with their respective target versions. +Known batch7 decoding incompatibilities produce skips per combination; both +PlutusV4 variants are skipped when the transaction era is older than Dijkstra. +Other decoder errors, including missing artifacts, fail setup. ## Scenario selection diff --git a/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayEmptyPolicyScript_V3_120.plutus b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayEmptyPolicyScript_V3_120.plutus new file mode 100644 index 000000000..ad120cef1 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayEmptyPolicyScript_V3_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV3", + "description": "failingMultiIndexArrayEmptyPolicyScript_V3_120", + "cborHex": "58b5010200339800aba0abdaab9cabe548888c8c8c8c8888ca4cdc4a400060106a00a66012002600e0073263300a49011b756e726561636861626c65206e65676174697665206c656e6774680049a930c028c01400cc8cc00400448004884a4006450030029a9980280289000800b000191800800914800d2f581223300a00233004004001191800800914800d2f581223300900233004004001191800800914800d20009119b8048008cc010010004800400d2000c001" +} diff --git a/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayHugeNegativePolicyScript_V3_120.plutus b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayHugeNegativePolicyScript_V3_120.plutus new file mode 100644 index 000000000..c69018905 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayHugeNegativePolicyScript_V3_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV3", + "description": "failingMultiIndexArrayHugeNegativePolicyScript_V3_120", + "cborHex": "58cb010200339800aba0abdaab9cabe548888c8c8c8c8888ca4cdc4a400060106a00a66012002600e0073263300a49011b756e726561636861626c65206e65676174697665206c656e6774680049a930c028c01400cc8cc00400448004884a4006450030029a9980280289000800b000191800800914800d2f581223300a00233004004001191800800914800d2f581223300900233004004001191800800914800d20009119b8048008cc010010004801a4029801a4051801a40798000801a41fffffffffffffffffe0780001" +} diff --git a/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayHugePositivePolicyScript_V3_120.plutus b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayHugePositivePolicyScript_V3_120.plutus new file mode 100644 index 000000000..d4792efd8 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayHugePositivePolicyScript_V3_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV3", + "description": "failingMultiIndexArrayHugePositivePolicyScript_V3_120", + "cborHex": "58cb010200339800aba0abdaab9cabe548888c8c8c8c8888ca4cdc4a400060106a00a66012002600e0073263300a49011b756e726561636861626c65206e65676174697665206c656e6774680049a930c028c01400cc8cc00400448004884a4006450030029a9980280289000800b000191800800914800d2f581223300a00233004004001191800800914800d2f581223300900233004004001191800800914800d20009119b8048008cc010010004801a4029801a4051801a40798000801a410101010101010101000980001" +} diff --git a/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayLateInvalidPolicyScript_V3_120.plutus b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayLateInvalidPolicyScript_V3_120.plutus new file mode 100644 index 000000000..d98bbfad6 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayLateInvalidPolicyScript_V3_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV3", + "description": "failingMultiIndexArrayLateInvalidPolicyScript_V3_120", + "cborHex": "58ca010200339800aba0abdaab9cabe548888c8c8c8c8888ca4cdc4a400060106a00a66012002600e0073263300a49011b756e726561636861626c65206e65676174697665206c656e6774680049a930c028c01400cc8cc00400448004884a4006450030029a9980280289000800b000191800800914800d2f581223300a00233004004001191800800914800d2f581223300900233004004001191800800914800d20009119b8048008cc010010004801a4029801a4051801a40798000801a4001801a4005801a400d80001" +} diff --git a/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayNegativePolicyScript_V3_120.plutus b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayNegativePolicyScript_V3_120.plutus new file mode 100644 index 000000000..ae9106f99 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayNegativePolicyScript_V3_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV3", + "description": "failingMultiIndexArrayNegativePolicyScript_V3_120", + "cborHex": "58ca010200339800aba0abdaab9cabe548888c8c8c8c8888ca4cdc4a400060106a00a66012002600e0073263300a49011b756e726561636861626c65206e65676174697665206c656e6774680049a930c028c01400cc8cc00400448004884a4006450030029a9980280289000800b000191800800914800d2f581223300a00233004004001191800800914800d2f581223300900233004004001191800800914800d20009119b8048008cc010010004801a4029801a4051801a40798000801a4001801a4005801a400380001" +} diff --git a/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayOverLimitPolicyScript_V3_120.plutus b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayOverLimitPolicyScript_V3_120.plutus new file mode 100644 index 000000000..a8be09292 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayOverLimitPolicyScript_V3_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV3", + "description": "failingMultiIndexArrayOverLimitPolicyScript_V3_120", + "cborHex": "58d60102009800aba0abdaab9cabe548888c8c8c8c8c8c88ca4cdc4a400060106a00866012002600e0073263300a49011b756e726561636861626c65206e65676174697665206c656e6774680049a930c028c016006902a600030024820840c8cc00400448004884a4006450030029a9980280289000800b00019180080091499b890014800300348002646600600600266e0400520026000323001001229001a5eb02446601400466008008002323001001229001a5eb02446601200466008008002323001001229001a400122337009001198020020009" +} diff --git a/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayUpperBoundPolicyScript_V3_120.plutus b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayUpperBoundPolicyScript_V3_120.plutus new file mode 100644 index 000000000..0b6defb27 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/failingMultiIndexArrayUpperBoundPolicyScript_V3_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV3", + "description": "failingMultiIndexArrayUpperBoundPolicyScript_V3_120", + "cborHex": "58c2010200339800aba0abdaab9cabe548888c8c8c8c8888ca4cdc4a400060106a00a66012002600e0073263300a49011b756e726561636861626c65206e65676174697665206c656e6774680049a930c028c01400cc8cc00400448004884a4006450030029a9980280289000800b000191800800914800d2f581223300a00233004004001191800800914800d2f581223300900233004004001191800800914800d20009119b8048008cc010010004801a4029801a4051801a40798000801a400d80001" +} diff --git a/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayDataPolicyScript_V3_120.plutus b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayDataPolicyScript_V3_120.plutus new file mode 100644 index 000000000..edb6de7dc --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayDataPolicyScript_V3_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV3", + "description": "succeedingMultiIndexArrayDataPolicyScript_V3_120", + "cborHex": "5901380102009800aba0abdaab9cabe548888c8c8c8c88c8c8ca660024466ebc008006003801801e00698102182a00c00c00f0034c0108477061796c6f616400c000150054c98cc02924011e6d756c7469496e646578417272617920446174612073656c656374696f6e0049a930c8cc004004cc024008c022006900260069000600690026006900160000452003228018014cc0100100058000c024c01600698102182a00c00d300108477061796c6f616400c00c00700006e9cc00e0069001600690026006900360000c8cc0040044800488488a400b20034a3224a0914801d2848a4cc01c01000a9433001007801c005533009009120010323001001229001a5eb8244660146ea0008cc0100100046460020024520034bd70488cc024008cc0100100046460020024520034bd60488cc020008cc01001000401" +} diff --git a/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayPolicyScript_V3_120.plutus b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayPolicyScript_V3_120.plutus new file mode 100644 index 000000000..ddd3c80e9 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayPolicyScript_V3_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV3", + "description": "succeedingMultiIndexArrayPolicyScript_V3_120", + "cborHex": "59015b0102009800aba3aba0abdaab9cabe5488888c8c8c8c8c8c88c8c8c8c8ca6660024466e1c008006005801a40a1801a40290041500752864c044006942602200a4c98cc0392401216d756c7469496e646578417272617920696e74656765722073656c656374696f6e0049a930cc030008c02e00064660020026601800460150034801b00348003003480130034801b000022900191400c00a66008008002c0006018600f00348053003480a2002400d203cc00d2050c00033008300a300380018024000c8cc0040044800488488a400b20034a3224a0914801d2848a4cc01c01000a9433001007801c005533009009120010323001001229001a5eb02446601800466008008002323001001229001a5eb02446601600466008008002323001001229001a5eb02446601400466008008002323001001229001a5eb02446601200466008008002323001001229001a5eb024466010004660080080021" +} diff --git a/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayRepeated1024PolicyScript_V3_120.plutus b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayRepeated1024PolicyScript_V3_120.plutus new file mode 100644 index 000000000..68c448f23 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayRepeated1024PolicyScript_V3_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV3", + "description": "succeedingMultiIndexArrayRepeated1024PolicyScript_V3_120", + "cborHex": "59010001020039800aba0abdaab9cabe548888c8c8c8c8c8c888c8c8ca64cdc39805000802d284c02c0053263300d491226d756c7469496e64657841727261792072657065617465642073656c656374696f6e0049a930d4014cc02c004008c030c01e006902a6000300430050023233001001120012212900191400c00a6a6600a00a24002002c0006460020024520034bd60488cc030008cc01001000464600200245266e240052000c00d2000991980180180099b81001480098000c8c0040048a400697ac09119805001198020020008c8c0040048a40069000488cdc02400466008008002323001001229001a5191499b874815000a9426600800800212080101" +} diff --git a/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayRepeated1PolicyScript_V3_120.plutus b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayRepeated1PolicyScript_V3_120.plutus new file mode 100644 index 000000000..296d37338 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayRepeated1PolicyScript_V3_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV3", + "description": "succeedingMultiIndexArrayRepeated1PolicyScript_V3_120", + "cborHex": "58ff01020039800aba0abdaab9cabe548888c8c8c8c8c8c888c8c8ca64cdc39805000802d284c02c0053263300d491226d756c7469496e64657841727261792072657065617465642073656c656374696f6e0049a930d4014cc02c004008c030c01e006902a6000300430050023233001001120012212900191400c00a6a6600a00a24002002c0006460020024520034bd60488cc030008cc01001000464600200245266e240052000c00d2000991980180180099b81001480098000c8c0040048a400697ac09119805001198020020008c8c0040048a40069000488cdc02400466008008002323001001229001a5191499b874815000a94266008008002120021" +} diff --git a/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayRepeated64PolicyScript_V3_120.plutus b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayRepeated64PolicyScript_V3_120.plutus new file mode 100644 index 000000000..e9627e96d --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v3/batch7/1.2.0/succeedingMultiIndexArrayRepeated64PolicyScript_V3_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV3", + "description": "succeedingMultiIndexArrayRepeated64PolicyScript_V3_120", + "cborHex": "59010001020039800aba0abdaab9cabe548888c8c8c8c8c8c888c8c8ca64cdc39805000802d284c02c0053263300d491226d756c7469496e64657841727261792072657065617465642073656c656374696f6e0049a930d4014cc02c004008c030c01e006902a6000300430050023233001001120012212900191400c00a6a6600a00a24002002c0006460020024520034bd60488cc030008cc01001000464600200245266e240052000c00d2000991980180180099b81001480098000c8c0040048a400697ac09119805001198020020008c8c0040048a40069000488cdc02400466008008002323001001229001a5191499b874815000a9426600800800212080011" +} diff --git a/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayEmptyPolicyScript_V4_120.plutus b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayEmptyPolicyScript_V4_120.plutus new file mode 100644 index 000000000..e7968f842 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayEmptyPolicyScript_V4_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV4", + "description": "failingMultiIndexArrayEmptyPolicyScript_V4_120", + "cborHex": "58b5010200339800aba0abdaab9cabe548888c8c8c8c8888ca4cdc4a400060106a00a66012002600e0073263300a49011b756e726561636861626c65206e65676174697665206c656e6774680049a930c028c01400cc8cc00400448004884a4006450030029a9980280289000800b000191800800914800d2f581223300a00233004004001191800800914800d2f581223300900233004004001191800800914800d20009119b8048008cc010010004800400d2000c001" +} diff --git a/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayHugeNegativePolicyScript_V4_120.plutus b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayHugeNegativePolicyScript_V4_120.plutus new file mode 100644 index 000000000..dbc074b98 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayHugeNegativePolicyScript_V4_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV4", + "description": "failingMultiIndexArrayHugeNegativePolicyScript_V4_120", + "cborHex": "58cb010200339800aba0abdaab9cabe548888c8c8c8c8888ca4cdc4a400060106a00a66012002600e0073263300a49011b756e726561636861626c65206e65676174697665206c656e6774680049a930c028c01400cc8cc00400448004884a4006450030029a9980280289000800b000191800800914800d2f581223300a00233004004001191800800914800d2f581223300900233004004001191800800914800d20009119b8048008cc010010004801a4029801a4051801a40798000801a41fffffffffffffffffe0780001" +} diff --git a/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayHugePositivePolicyScript_V4_120.plutus b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayHugePositivePolicyScript_V4_120.plutus new file mode 100644 index 000000000..2d4424582 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayHugePositivePolicyScript_V4_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV4", + "description": "failingMultiIndexArrayHugePositivePolicyScript_V4_120", + "cborHex": "58cb010200339800aba0abdaab9cabe548888c8c8c8c8888ca4cdc4a400060106a00a66012002600e0073263300a49011b756e726561636861626c65206e65676174697665206c656e6774680049a930c028c01400cc8cc00400448004884a4006450030029a9980280289000800b000191800800914800d2f581223300a00233004004001191800800914800d2f581223300900233004004001191800800914800d20009119b8048008cc010010004801a4029801a4051801a40798000801a410101010101010101000980001" +} diff --git a/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayLateInvalidPolicyScript_V4_120.plutus b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayLateInvalidPolicyScript_V4_120.plutus new file mode 100644 index 000000000..6c8ca524b --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayLateInvalidPolicyScript_V4_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV4", + "description": "failingMultiIndexArrayLateInvalidPolicyScript_V4_120", + "cborHex": "58ca010200339800aba0abdaab9cabe548888c8c8c8c8888ca4cdc4a400060106a00a66012002600e0073263300a49011b756e726561636861626c65206e65676174697665206c656e6774680049a930c028c01400cc8cc00400448004884a4006450030029a9980280289000800b000191800800914800d2f581223300a00233004004001191800800914800d2f581223300900233004004001191800800914800d20009119b8048008cc010010004801a4029801a4051801a40798000801a4001801a4005801a400d80001" +} diff --git a/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayNegativePolicyScript_V4_120.plutus b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayNegativePolicyScript_V4_120.plutus new file mode 100644 index 000000000..a164f1f1b --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayNegativePolicyScript_V4_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV4", + "description": "failingMultiIndexArrayNegativePolicyScript_V4_120", + "cborHex": "58ca010200339800aba0abdaab9cabe548888c8c8c8c8888ca4cdc4a400060106a00a66012002600e0073263300a49011b756e726561636861626c65206e65676174697665206c656e6774680049a930c028c01400cc8cc00400448004884a4006450030029a9980280289000800b000191800800914800d2f581223300a00233004004001191800800914800d2f581223300900233004004001191800800914800d20009119b8048008cc010010004801a4029801a4051801a40798000801a4001801a4005801a400380001" +} diff --git a/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayOverLimitPolicyScript_V4_120.plutus b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayOverLimitPolicyScript_V4_120.plutus new file mode 100644 index 000000000..26328c4b3 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayOverLimitPolicyScript_V4_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV4", + "description": "failingMultiIndexArrayOverLimitPolicyScript_V4_120", + "cborHex": "58d60102009800aba0abdaab9cabe548888c8c8c8c8c8c88ca4cdc4a400060106a00866012002600e0073263300a49011b756e726561636861626c65206e65676174697665206c656e6774680049a930c028c016006902a600030024820840c8cc00400448004884a4006450030029a9980280289000800b00019180080091499b890014800300348002646600600600266e0400520026000323001001229001a5eb02446601400466008008002323001001229001a5eb02446601200466008008002323001001229001a400122337009001198020020009" +} diff --git a/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayUpperBoundPolicyScript_V4_120.plutus b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayUpperBoundPolicyScript_V4_120.plutus new file mode 100644 index 000000000..692c8cdc2 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/failingMultiIndexArrayUpperBoundPolicyScript_V4_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV4", + "description": "failingMultiIndexArrayUpperBoundPolicyScript_V4_120", + "cborHex": "58c2010200339800aba0abdaab9cabe548888c8c8c8c8888ca4cdc4a400060106a00a66012002600e0073263300a49011b756e726561636861626c65206e65676174697665206c656e6774680049a930c028c01400cc8cc00400448004884a4006450030029a9980280289000800b000191800800914800d2f581223300a00233004004001191800800914800d2f581223300900233004004001191800800914800d20009119b8048008cc010010004801a4029801a4051801a40798000801a400d80001" +} diff --git a/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayDataPolicyScript_V4_120.plutus b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayDataPolicyScript_V4_120.plutus new file mode 100644 index 000000000..fc46ea11d --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayDataPolicyScript_V4_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV4", + "description": "succeedingMultiIndexArrayDataPolicyScript_V4_120", + "cborHex": "5901380102009800aba0abdaab9cabe548888c8c8c8c88c8c8ca660024466ebc008006003801801e00698102182a00c00c00f0034c0108477061796c6f616400c000150054c98cc02924011e6d756c7469496e646578417272617920446174612073656c656374696f6e0049a930c8cc004004cc024008c022006900260069000600690026006900160000452003228018014cc0100100058000c024c01600698102182a00c00d300108477061796c6f616400c00c00700006e9cc00e0069001600690026006900360000c8cc0040044800488488a400b20034a3224a0914801d2848a4cc01c01000a9433001007801c005533009009120010323001001229001a5eb8244660146ea0008cc0100100046460020024520034bd70488cc024008cc0100100046460020024520034bd60488cc020008cc01001000401" +} diff --git a/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayPolicyScript_V4_120.plutus b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayPolicyScript_V4_120.plutus new file mode 100644 index 000000000..910bd4791 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayPolicyScript_V4_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV4", + "description": "succeedingMultiIndexArrayPolicyScript_V4_120", + "cborHex": "59015b0102009800aba3aba0abdaab9cabe5488888c8c8c8c8c8c88c8c8c8c8ca6660024466e1c008006005801a40a1801a40290041500752864c044006942602200a4c98cc0392401216d756c7469496e646578417272617920696e74656765722073656c656374696f6e0049a930cc030008c02e00064660020026601800460150034801b00348003003480130034801b000022900191400c00a66008008002c0006018600f00348053003480a2002400d203cc00d2050c00033008300a300380018024000c8cc0040044800488488a400b20034a3224a0914801d2848a4cc01c01000a9433001007801c005533009009120010323001001229001a5eb02446601800466008008002323001001229001a5eb02446601600466008008002323001001229001a5eb02446601400466008008002323001001229001a5eb02446601200466008008002323001001229001a5eb024466010004660080080021" +} diff --git a/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayRepeated1024PolicyScript_V4_120.plutus b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayRepeated1024PolicyScript_V4_120.plutus new file mode 100644 index 000000000..20698d565 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayRepeated1024PolicyScript_V4_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV4", + "description": "succeedingMultiIndexArrayRepeated1024PolicyScript_V4_120", + "cborHex": "59010001020039800aba0abdaab9cabe548888c8c8c8c8c8c888c8c8ca64cdc39805000802d284c02c0053263300d491226d756c7469496e64657841727261792072657065617465642073656c656374696f6e0049a930d4014cc02c004008c030c01e006902a6000300430050023233001001120012212900191400c00a6a6600a00a24002002c0006460020024520034bd60488cc030008cc01001000464600200245266e240052000c00d2000991980180180099b81001480098000c8c0040048a400697ac09119805001198020020008c8c0040048a40069000488cdc02400466008008002323001001229001a5191499b874815000a9426600800800212080101" +} diff --git a/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayRepeated1PolicyScript_V4_120.plutus b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayRepeated1PolicyScript_V4_120.plutus new file mode 100644 index 000000000..9805fd1f6 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayRepeated1PolicyScript_V4_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV4", + "description": "succeedingMultiIndexArrayRepeated1PolicyScript_V4_120", + "cborHex": "58ff01020039800aba0abdaab9cabe548888c8c8c8c8c8c888c8c8ca64cdc39805000802d284c02c0053263300d491226d756c7469496e64657841727261792072657065617465642073656c656374696f6e0049a930d4014cc02c004008c030c01e006902a6000300430050023233001001120012212900191400c00a6a6600a00a24002002c0006460020024520034bd60488cc030008cc01001000464600200245266e240052000c00d2000991980180180099b81001480098000c8c0040048a400697ac09119805001198020020008c8c0040048a40069000488cdc02400466008008002323001001229001a5191499b874815000a94266008008002120021" +} diff --git a/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayRepeated64PolicyScript_V4_120.plutus b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayRepeated64PolicyScript_V4_120.plutus new file mode 100644 index 000000000..ec48802c8 --- /dev/null +++ b/cardano_node_tests/tests/data/plutus/v4/batch7/1.2.0/succeedingMultiIndexArrayRepeated64PolicyScript_V4_120.plutus @@ -0,0 +1,5 @@ +{ + "type": "PlutusScriptV4", + "description": "succeedingMultiIndexArrayRepeated64PolicyScript_V4_120", + "cborHex": "59010001020039800aba0abdaab9cabe548888c8c8c8c8c8c888c8c8ca64cdc39805000802d284c02c0053263300d491226d756c7469496e64657841727261792072657065617465642073656c656374696f6e0049a930d4014cc02c004008c030c01e006902a6000300430050023233001001120012212900191400c00a6a6600a00a24002002c0006460020024520034bd60488cc030008cc01001000464600200245266e240052000c00d2000991980180180099b81001480098000c8c0040048a400697ac09119805001198020020008c8c0040048a40069000488cdc02400466008008002323001001229001a5191499b874815000a9426600800800212080011" +} diff --git a/cardano_node_tests/tests/plutus_common.py b/cardano_node_tests/tests/plutus_common.py index 9242035fd..0ceff9e98 100644 --- a/cardano_node_tests/tests/plutus_common.py +++ b/cardano_node_tests/tests/plutus_common.py @@ -732,8 +732,14 @@ def _get_script_data_fail(script_name: str) -> PlutusScriptData: # ------ Batch 7: multiIndexArray (PV12) ------ # -SCRIPTS_V3_BATCH7_110_DIR = SCRIPTS_V3_DIR / "batch7" / "1.1.0" -SCRIPTS_V4_BATCH7_110_DIR = SCRIPTS_V4_DIR / "batch7" / "1.1.0" +class MultiIndexArrayScripts(tp.NamedTuple): + """multiIndexArray policies for one ledger language and Plutus Core version.""" + + cost_model: str + succeeding: tuple[PlutusScriptData, ...] + failing: tuple[PlutusScriptData, ...] + + _SUCCEEDING_MULTI_INDEX_ARRAY_NAMES = ( "Policy", "DataPolicy", @@ -750,42 +756,47 @@ def _get_script_data_fail(script_name: str) -> PlutusScriptData: "HugeNegative", "OverLimit", ) -SUCCEEDING_MINTING_MULTI_INDEX_ARRAY_SCRIPTS_V3 = tuple( - PlutusScriptData( - script_file=SCRIPTS_V3_BATCH7_110_DIR - / f"succeedingMultiIndexArray{name}Script_V3_110.plutus", - script_type=clusterlib.ScriptTypes.PLUTUS_V3, - execution_cost=UNDETERMINED_COST, - ) - for name in _SUCCEEDING_MULTI_INDEX_ARRAY_NAMES -) -FAILING_MINTING_MULTI_INDEX_ARRAY_SCRIPTS_V3 = tuple( - PlutusScriptData( - script_file=SCRIPTS_V3_BATCH7_110_DIR - / f"failingMultiIndexArray{name}PolicyScript_V3_110.plutus", - script_type=clusterlib.ScriptTypes.PLUTUS_V3, - execution_cost=UNDETERMINED_COST, - ) - for name in _FAILING_MULTI_INDEX_ARRAY_NAMES -) -SUCCEEDING_MINTING_MULTI_INDEX_ARRAY_SCRIPTS_V4 = tuple( - PlutusScriptData( - script_file=SCRIPTS_V4_BATCH7_110_DIR - / f"succeedingMultiIndexArray{name}Script_V4_110.plutus", - script_type=clusterlib.ScriptTypes.PLUTUS_V4, + + +def _get_multi_index_array_script(name: str, ledger: str, core_version: str) -> PlutusScriptData: + """Locate a multiIndexArray envelope for a ledger and Core version pair.""" + return PlutusScriptData( + script_file=PLUTUS_DIR + / ledger + / "batch7" + / core_version + / f"{name}_{ledger.upper()}_{core_version.replace('.', '')}.plutus", + script_type={ + "v3": clusterlib.ScriptTypes.PLUTUS_V3, + "v4": clusterlib.ScriptTypes.PLUTUS_V4, + }[ledger], execution_cost=UNDETERMINED_COST, ) - for name in _SUCCEEDING_MULTI_INDEX_ARRAY_NAMES -) -FAILING_MINTING_MULTI_INDEX_ARRAY_SCRIPTS_V4 = tuple( - PlutusScriptData( - script_file=SCRIPTS_V4_BATCH7_110_DIR - / f"failingMultiIndexArray{name}PolicyScript_V4_110.plutus", - script_type=clusterlib.ScriptTypes.PLUTUS_V4, - execution_cost=UNDETERMINED_COST, + + +MULTI_INDEX_ARRAY_SCRIPTS = { + f"{ledger}_{core_version.replace('.', '')}": MultiIndexArrayScripts( + cost_model=f"Plutus{ledger.upper()}", + succeeding=tuple( + _get_multi_index_array_script( + name=f"succeedingMultiIndexArray{name}Script", + ledger=ledger, + core_version=core_version, + ) + for name in _SUCCEEDING_MULTI_INDEX_ARRAY_NAMES + ), + failing=tuple( + _get_multi_index_array_script( + name=f"failingMultiIndexArray{name}PolicyScript", + ledger=ledger, + core_version=core_version, + ) + for name in _FAILING_MULTI_INDEX_ARRAY_NAMES + ), ) - for name in _FAILING_MULTI_INDEX_ARRAY_NAMES -) + for ledger in ("v3", "v4") + for core_version in ("1.1.0", "1.2.0") +} @dataclasses.dataclass(frozen=True, order=True) diff --git a/cardano_node_tests/tests/tests_plutus_v3/test_multi_index_array.py b/cardano_node_tests/tests/tests_plutus_v3/test_multi_index_array.py index c62beb7d4..02b772b17 100644 --- a/cardano_node_tests/tests/tests_plutus_v3/test_multi_index_array.py +++ b/cardano_node_tests/tests/tests_plutus_v3/test_multi_index_array.py @@ -27,27 +27,7 @@ MULTI_INDEX_ARRAY_COST_MODEL_LEN = 355 -class VersionScripts(tp.NamedTuple): - """multiIndexArray policies compiled for one Plutus version.""" - - cost_model: str - succeeding: tuple[plutus_common.PlutusScriptData, ...] - failing: tuple[plutus_common.PlutusScriptData, ...] - - -# The policies don't read the script context, so both versions share the same code -SCRIPTS = { - "v3": VersionScripts( - cost_model="PlutusV3", - succeeding=plutus_common.SUCCEEDING_MINTING_MULTI_INDEX_ARRAY_SCRIPTS_V3, - failing=plutus_common.FAILING_MINTING_MULTI_INDEX_ARRAY_SCRIPTS_V3, - ), - "v4": VersionScripts( - cost_model="PlutusV4", - succeeding=plutus_common.SUCCEEDING_MINTING_MULTI_INDEX_ARRAY_SCRIPTS_V4, - failing=plutus_common.FAILING_MINTING_MULTI_INDEX_ARRAY_SCRIPTS_V4, - ), -} +SCRIPTS = plutus_common.MULTI_INDEX_ARRAY_SCRIPTS pytestmark = [ # Skip before the fixture locks governance and Plutus resources @@ -63,15 +43,15 @@ class VersionScripts(tp.NamedTuple): class MultiIndexArraySetup(tp.NamedTuple): - """Cluster with multiIndexArray costing for all Plutus versions that are tested.""" + """Cluster with multiIndexArray costing for all tested ledger/Core combinations.""" cluster: clusterlib.ClusterLib - # Reasons to skip Plutus versions, keyed like `SCRIPTS` + # Reasons to skip ledger/Core combinations, keyed like `SCRIPTS` skip_reasons: dict[str, str] def _get_decode_skip_reason(cluster_obj: clusterlib.ClusterLib, script_file: pl.Path) -> str: - """Return the reason to skip a Plutus version if the CLI cannot decode its policy.""" + """Return a skip reason for known batch7 decoding incompatibilities.""" try: cluster_obj.g_transaction.get_policyid(script_file) except clusterlib.CLIError as exc: @@ -93,32 +73,35 @@ def multi_index_array_setup( """Enable multiIndexArray costing while locking governance and Plutus resources. Update the PlutusV3 and PlutusV4 cost models in a single governance action, unless - the cost models of all tested Plutus versions already price multiIndexArray. Skip - the whole test when PlutusV3 cannot be tested, and only the PlutusV4 scenarios - when PlutusV4 cannot be tested. + the cost models of all tested languages already price multiIndexArray. Both Core + versions reuse these models. Skip the whole test when the PlutusV3/PLC 1.1.0 + baseline has a known batch7 decoding incompatibility. Check the same decoding + incompatibilities separately for the other ledger/Core combinations. """ cluster = cluster_plutus pparams = cluster.g_query.get_protocol_params() if pparams["protocolVersion"]["major"] < 12: pytest.skip("multiIndexArray requires protocol version 12 or later") - # Fail before governance setup if the CLI cannot decode PV12 scripts + # Check CLI batch7 activation before governance setup skip_reason_v3 = _get_decode_skip_reason( - cluster_obj=cluster, script_file=SCRIPTS["v3"].succeeding[0].script_file + cluster_obj=cluster, script_file=SCRIPTS["v3_110"].succeeding[0].script_file ) if skip_reason_v3: pytest.skip(skip_reason_v3) skip_reasons = {} - if VERSIONS.transaction_era < VERSIONS.DIJKSTRA_FIRST: - skip_reasons["v4"] = "Plutus V4 is available only in Dijkstra+ eras" - else: - skip_reason_v4 = _get_decode_skip_reason( - cluster_obj=cluster, script_file=SCRIPTS["v4"].succeeding[0].script_file + for variant, scripts in SCRIPTS.items(): + if scripts.cost_model == "PlutusV4" and VERSIONS.transaction_era < VERSIONS.DIJKSTRA_FIRST: + skip_reasons[variant] = "Plutus V4 is available only in Dijkstra+ eras" + continue + + skip_reason = _get_decode_skip_reason( + cluster_obj=cluster, script_file=scripts.succeeding[0].script_file ) - if skip_reason_v4: - skip_reasons["v4"] = skip_reason_v4 + if skip_reason: + skip_reasons[variant] = skip_reason - tested_cost_models = [s.cost_model for v, s in SCRIPTS.items() if v not in skip_reasons] + tested_cost_models = {s.cost_model for v, s in SCRIPTS.items() if v not in skip_reasons} def _is_costing_enabled(cost_models: dict) -> bool: return all( @@ -174,10 +157,11 @@ def test_multi_index_array( ): """Mint with valid selections and reject invalid requests while building transactions. - Run all scenarios with the PlutusV3 policies, then with the same policies compiled - for PlutusV4. Both versions reuse a single cost-model setup. Skip the PlutusV4 - scenarios when the transaction era is older than Dijkstra or when the CLI cannot - decode the PlutusV4 policies. + Run the existing scenarios for PlutusV3 and PlutusV4, each compiled for PLC + 1.1.0 and 1.2.0. All four combinations reuse a single cost-model setup and + minting/budget helpers. Skip known batch7 decoding incompatibilities for each + combination and both PlutusV4 variants before the Dijkstra transaction era. + Other decoder errors fail setup. Check ordering, duplicate indices, empty selections, heterogeneous Data, and repeated selections of 1, 64 and 1,024 elements. The Data policy selects @@ -193,32 +177,32 @@ def test_multi_index_array( setup = multi_index_array_setup temp_template = common.get_test_id(setup.cluster) - for plutus_version, scripts in SCRIPTS.items(): - skip_reason = setup.skip_reasons.get(plutus_version) + for variant, scripts in SCRIPTS.items(): + skip_reason = setup.skip_reasons.get(variant) if skip_reason: - with subtests.test(plutus_version=plutus_version): + with subtests.test(variant=variant): pytest.skip(skip_reason) continue - self._check_plutus_version( + self._check_variant( cluster_manager=cluster_manager, cluster_obj=setup.cluster, - temp_template=f"{temp_template}_{plutus_version}", - plutus_version=plutus_version, + temp_template=f"{temp_template}_{variant}", + variant=variant, scripts=scripts, subtests=subtests, ) - def _check_plutus_version( + def _check_variant( self, cluster_manager: cluster_management.ClusterManager, cluster_obj: clusterlib.ClusterLib, temp_template: str, - plutus_version: str, - scripts: VersionScripts, + variant: str, + scripts: plutus_common.MultiIndexArrayScripts, subtests: pytest_subtests.SubTests, ) -> None: - """Run the minting and budget scenarios with the policies of one Plutus version.""" + """Run minting and budget scenarios for one ledger/Core combination.""" cluster = cluster_obj over_limit_stem = next( s.script_file.stem for s in scripts.failing if "OverLimitPolicy" in s.script_file.stem @@ -229,7 +213,7 @@ def _check_plutus_version( cluster_manager=cluster_manager, cluster_obj=cluster, temp_template=temp_template, - variant=f"multi_index_array_{plutus_version}", + variant=f"multi_index_array_{variant}", success_scripts=scripts.succeeding, fail_scripts=scripts.failing, overspend_scripts=(), @@ -265,7 +249,7 @@ def _check_plutus_version( redeemer_records=db_record.redeemers, cost_records=minted.plutus_costs ) - with subtests.test(plutus_version=plutus_version, check="policy_budget_growth"): + with subtests.test(variant=variant, check="policy_budget_growth"): assert len(repeated_costs) == 3, ( "Expected budgets for requests of 1, 64 and 1024 indices" ) @@ -276,12 +260,12 @@ def _check_plutus_version( < repeated_costs["1024"][resource] ), f"Policy execution {resource} did not grow with request size: {repeated_costs}" - with subtests.test(plutus_version=plutus_version, check="execution_budget"): + with subtests.test(variant=variant, check="execution_budget"): self._check_execution_budget( cluster_manager=cluster_manager, cluster_obj=cluster, temp_template=f"{temp_template}_budget", - plutus_version=plutus_version, + variant=variant, script=next( s for s in scripts.succeeding if "Repeated1024Policy" in s.script_file.stem ), @@ -293,7 +277,7 @@ def _check_execution_budget( cluster_manager: cluster_management.ClusterManager, cluster_obj: clusterlib.ClusterLib, temp_template: str, - plutus_version: str, + variant: str, script: plutus_common.PlutusScriptData, subtests: pytest_subtests.SubTests, ) -> None: @@ -314,7 +298,7 @@ def _check_execution_budget( cluster_obj=cluster, num=2, fund_idx=[0], - caching_key=helpers.get_current_line_str(), + caching_key=f"{helpers.get_current_line_str()}_{variant}", amount=1_000_000_000, min_amount=100_000_000, ) @@ -367,7 +351,7 @@ def _check_execution_budget( ("memory", (units["steps"], units["memory"] - 1)), ("sufficient", (units["steps"], units["memory"])), ): - with subtests.test(plutus_version=plutus_version, budget=name): + with subtests.test(variant=variant, budget=name): tx_name = f"{temp_template}_{name}" tx_output = cluster.g_transaction.build_raw_tx( src_address=issuer_addr.address,