diff --git a/cardano_node_tests/tests/plutus_common.py b/cardano_node_tests/tests/plutus_common.py index 6b551c356..f768352a4 100644 --- a/cardano_node_tests/tests/plutus_common.py +++ b/cardano_node_tests/tests/plutus_common.py @@ -278,7 +278,7 @@ class PlutusScriptData: } -# ----- Succeeding bitwise tests ----- # +# ----- Bitwise tests ----- # # These are used to fill in the execution costs of scripts where we don't yet # know what the cost is. We're not currently checking the costs (and it seems @@ -293,113 +293,30 @@ class PlutusScriptData: ) -MINTING_ANDBYTESTRING_PLUTUS_V3 = SCRIPTS_V3_DIR / "succeedingAndByteStringPolicyScriptV3.plutus" -MINTING_ANDBYTESTRING_V3 = PlutusScriptData( - script_file=MINTING_ANDBYTESTRING_PLUTUS_V3, - script_type=clusterlib.ScriptTypes.PLUTUS_V3, - execution_cost=ExecutionCost( - per_time=19269680, per_space=102266, fixed_cost=UNKNOWN_FIXED_COST - ), -) - -MINTING_ORBYTESTRING_PLUTUS_V3 = SCRIPTS_V3_DIR / "succeedingOrByteStringPolicyScriptV3.plutus" -MINTING_ORBYTESTRING_V3 = PlutusScriptData( - script_file=MINTING_ORBYTESTRING_PLUTUS_V3, - script_type=clusterlib.ScriptTypes.PLUTUS_V3, - execution_cost=ExecutionCost( - per_time=19269680, per_space=102266, fixed_cost=UNKNOWN_FIXED_COST - ), -) - -MINTING_XORBYTESTRING_PLUTUS_V3 = SCRIPTS_V3_DIR / "succeedingXorByteStringPolicyScriptV3.plutus" -MINTING_XORBYTESTRING_V3 = PlutusScriptData( - script_file=MINTING_XORBYTESTRING_PLUTUS_V3, - script_type=clusterlib.ScriptTypes.PLUTUS_V3, - execution_cost=ExecutionCost( - per_time=19269680, per_space=102266, fixed_cost=UNKNOWN_FIXED_COST - ), -) - -MINTING_COMPLEMENTBYTESTRING_PLUTUS_V3 = ( - SCRIPTS_V3_DIR / "succeedingComplementByteStringPolicyScriptV3.plutus" -) -MINTING_COMPLEMENTBYTESTRING_V3 = PlutusScriptData( - script_file=MINTING_COMPLEMENTBYTESTRING_PLUTUS_V3, - script_type=clusterlib.ScriptTypes.PLUTUS_V3, - execution_cost=ExecutionCost(per_time=5863431, per_space=30027, fixed_cost=UNKNOWN_FIXED_COST), -) - -MINTING_COUNTSETBITS_PLUTUS_V3 = SCRIPTS_V3_DIR / "succeedingCountSetBitsPolicyScriptV3.plutus" -MINTING_COUNTSETBITS_V3 = PlutusScriptData( - script_file=MINTING_COUNTSETBITS_PLUTUS_V3, - script_type=clusterlib.ScriptTypes.PLUTUS_V3, - execution_cost=ExecutionCost(per_time=9211420, per_space=45324, fixed_cost=UNKNOWN_FIXED_COST), -) - -MINTING_FINDFIRSTSET_PLUTUS_V3 = SCRIPTS_V3_DIR / "succeedingFindFirstSetBitPolicyScriptV3.plutus" -MINTING_FINDFIRSTSET_V3 = PlutusScriptData( - script_file=MINTING_FINDFIRSTSET_PLUTUS_V3, - script_type=clusterlib.ScriptTypes.PLUTUS_V3, - execution_cost=ExecutionCost(per_time=8071583, per_space=40221, fixed_cost=UNKNOWN_FIXED_COST), -) - -MINTING_READBIT_PLUTUS_V3 = SCRIPTS_V3_DIR / "succeedingReadBitPolicyScriptV3.plutus" -MINTING_READBIT_V3 = PlutusScriptData( - script_file=MINTING_READBIT_PLUTUS_V3, - script_type=clusterlib.ScriptTypes.PLUTUS_V3, - execution_cost=ExecutionCost(per_time=15272720, per_space=82724, fixed_cost=UNKNOWN_FIXED_COST), -) - -MINTING_REPLICATEBYTE_PLUTUS_V3 = SCRIPTS_V3_DIR / "succeedingReplicateBytePolicyScriptV3.plutus" -MINTING_REPLICATEBYTE_V3 = PlutusScriptData( - script_file=MINTING_REPLICATEBYTE_PLUTUS_V3, - script_type=clusterlib.ScriptTypes.PLUTUS_V3, - execution_cost=ExecutionCost(per_time=4549650, per_space=22946, fixed_cost=UNKNOWN_FIXED_COST), -) - -MINTING_ROTATEBYTESTRING_PLUTUS_V3 = ( - SCRIPTS_V3_DIR / "succeedingRotateByteStringPolicyScriptV3.plutus" -) -MINTING_ROTATEBYTESTRING_V3 = PlutusScriptData( - script_file=MINTING_ROTATEBYTESTRING_PLUTUS_V3, - script_type=clusterlib.ScriptTypes.PLUTUS_V3, - execution_cost=ExecutionCost( - per_time=22778618, per_space=109004, fixed_cost=UNKNOWN_FIXED_COST - ), -) - -MINTING_SHIFTBYTESTRING_PLUTUS_V3 = ( - SCRIPTS_V3_DIR / "succeedingShiftByteStringPolicyScriptV3.plutus" -) -MINTING_SHIFTBYTESTRING_V3 = PlutusScriptData( - script_file=MINTING_SHIFTBYTESTRING_PLUTUS_V3, - script_type=clusterlib.ScriptTypes.PLUTUS_V3, - execution_cost=ExecutionCost(per_time=17922844, per_space=85787, fixed_cost=UNKNOWN_FIXED_COST), -) - -MINTING_WRITEBITS_PLUTUS_V3 = SCRIPTS_V3_DIR / "succeedingWriteBitsPolicyScriptV3.plutus" -MINTING_WRITEBITS_V3 = PlutusScriptData( - script_file=MINTING_WRITEBITS_PLUTUS_V3, - script_type=clusterlib.ScriptTypes.PLUTUS_V3, - execution_cost=ExecutionCost( - per_time=90646820, per_space=462457, fixed_cost=UNKNOWN_FIXED_COST - ), -) - # ----- All succeeding bitwise tests ----- # -SUCCEEDING_MINTING_BITWISE_SCRIPTS_V3 = ( - MINTING_ANDBYTESTRING_V3, - MINTING_ORBYTESTRING_V3, - MINTING_XORBYTESTRING_V3, - MINTING_COMPLEMENTBYTESTRING_V3, - MINTING_COUNTSETBITS_V3, - MINTING_FINDFIRSTSET_V3, - MINTING_READBIT_V3, - MINTING_REPLICATEBYTE_V3, - MINTING_ROTATEBYTESTRING_V3, - MINTING_SHIFTBYTESTRING_V3, - MINTING_WRITEBITS_V3, +# Tuples of (script_name, per_time, per_space, fixed_cost) for each succeeding bitwise script. +SUCCEEDING_BITWISE_SCRIPTS_V3 = ( + ("succeedingAndByteStringPolicyScriptV3.plutus", 19269680, 102266, UNKNOWN_FIXED_COST), + ("succeedingOrByteStringPolicyScriptV3.plutus", 19269680, 102266, UNKNOWN_FIXED_COST), + ("succeedingXorByteStringPolicyScriptV3.plutus", 19269680, 102266, UNKNOWN_FIXED_COST), + ("succeedingComplementByteStringPolicyScriptV3.plutus", 5863431, 30027, UNKNOWN_FIXED_COST), + ("succeedingCountSetBitsPolicyScriptV3.plutus", 9211420, 45324, UNKNOWN_FIXED_COST), + ("succeedingFindFirstSetBitPolicyScriptV3.plutus", 8071583, 40221, UNKNOWN_FIXED_COST), + ("succeedingReadBitPolicyScriptV3.plutus", 15272720, 82724, UNKNOWN_FIXED_COST), + ("succeedingReplicateBytePolicyScriptV3.plutus", 4549650, 22946, UNKNOWN_FIXED_COST), + ("succeedingRotateByteStringPolicyScriptV3.plutus", 22778618, 109004, UNKNOWN_FIXED_COST), + ("succeedingShiftByteStringPolicyScriptV3.plutus", 17922844, 85787, UNKNOWN_FIXED_COST), + ("succeedingWriteBitsPolicyScriptV3.plutus", 90646820, 462457, UNKNOWN_FIXED_COST), +) + +SUCCEEDING_MINTING_BITWISE_SCRIPTS_V3 = tuple( + PlutusScriptData( + script_file=SCRIPTS_V3_DIR / script_name, + script_type=clusterlib.ScriptTypes.PLUTUS_V3, + execution_cost=ExecutionCost(per_time=per_time, per_space=per_space, fixed_cost=fixed_cost), + ) + for script_name, per_time, per_space, fixed_cost in SUCCEEDING_BITWISE_SCRIPTS_V3 ) @@ -470,19 +387,20 @@ class PlutusScriptData: # # Includes tests for casing on constants, which will be released together with batch 6 in PV 11 -SUCCEEDING_BATCH6_SCRIPT_FILES_V3 = ( - "caseBoolHappy_V3_110.plutus", - "caseIntegerHappy_V3_110.plutus", - "caseListHappy_V3_110.plutus", - "casePairHappy_V3_110.plutus", - "caseUnitHappy_V3_110.plutus", - "succeedingDropListPolicyScript_V3_110.plutus", - "succeedingExpModIntegerExponentOnePolicyScript_V3_110.plutus", - "succeedingExpModIntegerInversePolicyScript_V3_110.plutus", - "succeedingExpModIntegerPolicyScript_V3_110.plutus", - "succeedingIndexArrayPolicyScript_V3_110.plutus", - "succeedingLengthOfArrayPolicyScript_V3_110.plutus", - "succeedingListToArrayPolicyScript_V3_110.plutus", +# Tuples of (script_name, per_time, per_space, fixed_cost) for each succeeding batch6 script. +SUCCEEDING_BATCH6_SCRIPTS_V3 = ( + ("caseBoolHappy_V3_110.plutus", 208100, 1400, 96), + ("caseIntegerHappy_V3_110.plutus", 208100, 1400, 96), + ("caseListHappy_V3_110.plutus", 1484744, 6638, 491), + ("casePairHappy_V3_110.plutus", 848864, 3804, 281), + ("caseUnitHappy_V3_110.plutus", 96100, 700, 48), + ("succeedingDropListPolicyScript_V3_110.plutus", 65064783, 258749, 19621), + ("succeedingExpModIntegerExponentOnePolicyScript_V3_110.plutus", 14492504, 30930, 2830), + ("succeedingExpModIntegerInversePolicyScript_V3_110.plutus", 35417284, 55402, 5751), + ("succeedingExpModIntegerPolicyScript_V3_110.plutus", 346637025, 174626, 35069), + ("succeedingIndexArrayPolicyScript_V3_110.plutus", 2831492, 12706, 938), + ("succeedingLengthOfArrayPolicyScript_V3_110.plutus", 2060965, 9018, 669), + ("succeedingListToArrayPolicyScript_V3_110.plutus", 3918949, 15619, 1184), ) FAILING_BATCH6_SCRIPT_FILES_V3 = ( @@ -527,33 +445,68 @@ class PlutusScriptData: ) if VERSIONS.node >= version.parse("10.7.0"): - SUCCEEDING_BATCH6_SCRIPT_FILES_V3 = ( # type: ignore[assignment] - *SUCCEEDING_BATCH6_SCRIPT_FILES_V3, - "succeedingG1MultiScalarMulPolicyScript1_V3_110.plutus", - "succeedingG1MultiScalarMulPolicyScript2_V3_110.plutus", - "succeedingG2MultiScalarMulPolicyScript1_V3_110.plutus", - "succeedingG2MultiScalarMulPolicyScript2_V3_110.plutus", - "succeedingDeleteExistingCoinPolicyScript_V3_110.plutus", - "succeedingDeleteMissingCoinPolicyScript_V3_110.plutus", - "succeedingInsertExistingCoinPolicyScript_V3_110.plutus", - "succeedingInsertNewCoinPolicyScript_V3_110.plutus", - "succeedingLookupMissingCoinPolicyScript_V3_110.plutus", - "succeedingScaleValueNegativePolicyScript_V3_110.plutus", - "succeedingScaleValuePositivePolicyScript_V3_110.plutus", - "succeedingScaleValueZeroPolicyScript_V3_110.plutus", - "succeedingUnionValueAssociativePolicyScript_V3_110.plutus", - "succeedingUnionValueAssociativeSingleCoinPolicyScript_V3_110.plutus", - "succeedingUnionValueCommutativePolicyScript_V3_110.plutus", - "succeedingUnionValueCommutativeSingleCoinPolicyScript_V3_110.plutus", - "succeedingUnionValueEmptyIdentityPolicyScript_V3_110.plutus", - "succeedingUnionValueInversablePolicyScript_V3_110.plutus", - "succeedingValueContainsDisjointPolicyScript_V3_110.plutus", - "succeedingValueContainsEmptyPolicyScript_V3_110.plutus", - "succeedingValueContainsIsSubValuePolicyScript_V3_110.plutus", - "succeedingValueContainsReflexivePolicyScript_V3_110.plutus", - "succeedingValueContainsRightExtraKeyPolicyScript_V3_110.plutus", - "succeedingValueContainsRightHigherAmountPolicyScript_V3_110.plutus", - "succeedingValueDataRoundTripPolicyScript_V3_110.plutus", + SUCCEEDING_BATCH6_SCRIPTS_V3 = ( # type: ignore[assignment] + *SUCCEEDING_BATCH6_SCRIPTS_V3, + ("succeedingG1MultiScalarMulPolicyScript1_V3_110.plutus", 9183574944, 437274, 687367), + ("succeedingG1MultiScalarMulPolicyScript2_V3_110.plutus", 9915620336, 477870, 742490), + ( + "succeedingG2MultiScalarMulPolicyScript1_V3_110.plutus", + UNKNOWN_PER_TIME, + UNKNOWN_PER_SPACE, + UNKNOWN_FIXED_COST, + ), + ( + "succeedingG2MultiScalarMulPolicyScript2_V3_110.plutus", + UNKNOWN_PER_TIME, + UNKNOWN_PER_SPACE, + UNKNOWN_FIXED_COST, + ), + ("succeedingDeleteExistingCoinPolicyScript_V3_110.plutus", 2176287, 5979, 502), + ("succeedingDeleteMissingCoinPolicyScript_V3_110.plutus", 2195175, 5979, 504), + ( + "succeedingInsertExistingCoinPolicyScript_V3_110.plutus", + UNKNOWN_PER_TIME, + UNKNOWN_PER_SPACE, + UNKNOWN_FIXED_COST, + ), + ("succeedingInsertNewCoinPolicyScript_V3_110.plutus", 1673425, 5092, 415), + ("succeedingLookupMissingCoinPolicyScript_V3_110.plutus", 1169613, 4247, 330), + ( + "succeedingScaleValueNegativePolicyScript_V3_110.plutus", + UNKNOWN_PER_TIME, + UNKNOWN_PER_SPACE, + UNKNOWN_FIXED_COST, + ), + ("succeedingScaleValuePositivePolicyScript_V3_110.plutus", 3839117, 7971, 737), + ("succeedingScaleValueZeroPolicyScript_V3_110.plutus", 3245681, 6826, 628), + ("succeedingUnionValueAssociativePolicyScript_V3_110.plutus", 6282854, 11189, 1099), + ( + "succeedingUnionValueAssociativeSingleCoinPolicyScript_V3_110.plutus", + 5806552, + 11147, + 1062, + ), + ( + "succeedingUnionValueCommutativePolicyScript_V3_110.plutus", + UNKNOWN_PER_TIME, + UNKNOWN_PER_SPACE, + UNKNOWN_FIXED_COST, + ), + ( + "succeedingUnionValueCommutativeSingleCoinPolicyScript_V3_110.plutus", + UNKNOWN_PER_TIME, + UNKNOWN_PER_SPACE, + UNKNOWN_FIXED_COST, + ), + ("succeedingUnionValueEmptyIdentityPolicyScript_V3_110.plutus", 5410294, 10487, 996), + ("succeedingUnionValueInversablePolicyScript_V3_110.plutus", 3856300, 8004, 740), + ("succeedingValueContainsDisjointPolicyScript_V3_110.plutus", 2515834, 5936, 524), + ("succeedingValueContainsEmptyPolicyScript_V3_110.plutus", 3426852, 7280, 668), + ("succeedingValueContainsIsSubValuePolicyScript_V3_110.plutus", 2991582, 6523, 593), + ("succeedingValueContainsReflexivePolicyScript_V3_110.plutus", 1982910, 4791, 420), + ("succeedingValueContainsRightExtraKeyPolicyScript_V3_110.plutus", 3541590, 7410, 683), + ("succeedingValueContainsRightHigherAmountPolicyScript_V3_110.plutus", 2467834, 5636, 504), + ("succeedingValueDataRoundTripPolicyScript_V3_110.plutus", 3547465, 6873, 653), ) FAILING_BATCH6_SCRIPT_FILES_V3 = ( # type: ignore[assignment] *FAILING_BATCH6_SCRIPT_FILES_V3, @@ -572,11 +525,11 @@ class PlutusScriptData: SUCCEEDING_MINTING_BATCH6_SCRIPTS_V3 = tuple( PlutusScriptData( - script_file=SCRIPTS_V3_BATCH6_110_DIR / n, + script_file=SCRIPTS_V3_BATCH6_110_DIR / script_name, script_type=clusterlib.ScriptTypes.PLUTUS_V3, - execution_cost=UNDETERMINED_COST, + execution_cost=ExecutionCost(per_time=per_time, per_space=per_space, fixed_cost=fixed_cost), ) - for n in SUCCEEDING_BATCH6_SCRIPT_FILES_V3 + for script_name, per_time, per_space, fixed_cost in SUCCEEDING_BATCH6_SCRIPTS_V3 ) FAILING_MINTING_BATCH6_SCRIPTS_V3 = tuple( @@ -631,9 +584,9 @@ def check_plutus_costs( # Sort records by total cost sorted_plutus = sorted( plutus_costs, - key=lambda x: x["executionUnits"]["memory"] - + x["executionUnits"]["steps"] - + x["lovelaceCost"], + key=lambda x: ( + x["executionUnits"]["memory"] + x["executionUnits"]["steps"] + x["lovelaceCost"] + ), ) sorted_expected = sorted(expected_costs, key=lambda x: x.per_space + x.per_time + x.fixed_cost) @@ -678,7 +631,8 @@ def compute_cost( collateral_fraction = protocol_params["collateralPercentage"] / 100 min_collateral = int(fee_redeem * collateral_fraction * collateral_fraction_offset) - collateral_amount = max(min_collateral, 2000000) + # Eventual return collateral UTxO value must be bigger than min UTxO value + collateral_amount = max(min_collateral + 1_000_000, 2_000_000) return ScriptCost(fee=fee_redeem, collateral=collateral_amount, min_collateral=min_collateral) diff --git a/cardano_node_tests/tests/tests_plutus_v3/test_mint_build.py b/cardano_node_tests/tests/tests_plutus_v3/test_mint_build.py index 7c87c1030..20b8263c4 100644 --- a/cardano_node_tests/tests/tests_plutus_v3/test_mint_build.py +++ b/cardano_node_tests/tests/tests_plutus_v3/test_mint_build.py @@ -172,6 +172,21 @@ def run_scenario( *mint_txouts, ] + def _dump_cost() -> None: + try: # noqa: SIM105 + cluster_obj.g_transaction.calculate_plutus_script_cost( + src_address=payment_addr.address, + tx_name=plutus_v_record.script_file.name, + tx_files=tx_files_step2, + txins=mint_utxos, + txouts=txouts_step2, + mint=plutus_mint_data, + ) + except clusterlib.CLIError: + pass + + _dump_cost() + try: tx_output_step2 = clusterlib_utils.build_and_submit_tx( cluster_obj=cluster_obj,