@@ -278,7 +278,7 @@ class PlutusScriptData:
278278}
279279
280280
281- # ----- Succeeding bitwise tests ----- #
281+ # ----- Bitwise tests ----- #
282282
283283# These are used to fill in the execution costs of scripts where we don't yet
284284# know what the cost is. We're not currently checking the costs (and it seems
@@ -293,113 +293,30 @@ class PlutusScriptData:
293293)
294294
295295
296- MINTING_ANDBYTESTRING_PLUTUS_V3 = SCRIPTS_V3_DIR / "succeedingAndByteStringPolicyScriptV3.plutus"
297- MINTING_ANDBYTESTRING_V3 = PlutusScriptData (
298- script_file = MINTING_ANDBYTESTRING_PLUTUS_V3 ,
299- script_type = clusterlib .ScriptTypes .PLUTUS_V3 ,
300- execution_cost = ExecutionCost (
301- per_time = 19269680 , per_space = 102266 , fixed_cost = UNKNOWN_FIXED_COST
302- ),
303- )
304-
305- MINTING_ORBYTESTRING_PLUTUS_V3 = SCRIPTS_V3_DIR / "succeedingOrByteStringPolicyScriptV3.plutus"
306- MINTING_ORBYTESTRING_V3 = PlutusScriptData (
307- script_file = MINTING_ORBYTESTRING_PLUTUS_V3 ,
308- script_type = clusterlib .ScriptTypes .PLUTUS_V3 ,
309- execution_cost = ExecutionCost (
310- per_time = 19269680 , per_space = 102266 , fixed_cost = UNKNOWN_FIXED_COST
311- ),
312- )
313-
314- MINTING_XORBYTESTRING_PLUTUS_V3 = SCRIPTS_V3_DIR / "succeedingXorByteStringPolicyScriptV3.plutus"
315- MINTING_XORBYTESTRING_V3 = PlutusScriptData (
316- script_file = MINTING_XORBYTESTRING_PLUTUS_V3 ,
317- script_type = clusterlib .ScriptTypes .PLUTUS_V3 ,
318- execution_cost = ExecutionCost (
319- per_time = 19269680 , per_space = 102266 , fixed_cost = UNKNOWN_FIXED_COST
320- ),
321- )
322-
323- MINTING_COMPLEMENTBYTESTRING_PLUTUS_V3 = (
324- SCRIPTS_V3_DIR / "succeedingComplementByteStringPolicyScriptV3.plutus"
325- )
326- MINTING_COMPLEMENTBYTESTRING_V3 = PlutusScriptData (
327- script_file = MINTING_COMPLEMENTBYTESTRING_PLUTUS_V3 ,
328- script_type = clusterlib .ScriptTypes .PLUTUS_V3 ,
329- execution_cost = ExecutionCost (per_time = 5863431 , per_space = 30027 , fixed_cost = UNKNOWN_FIXED_COST ),
330- )
331-
332- MINTING_COUNTSETBITS_PLUTUS_V3 = SCRIPTS_V3_DIR / "succeedingCountSetBitsPolicyScriptV3.plutus"
333- MINTING_COUNTSETBITS_V3 = PlutusScriptData (
334- script_file = MINTING_COUNTSETBITS_PLUTUS_V3 ,
335- script_type = clusterlib .ScriptTypes .PLUTUS_V3 ,
336- execution_cost = ExecutionCost (per_time = 9211420 , per_space = 45324 , fixed_cost = UNKNOWN_FIXED_COST ),
337- )
338-
339- MINTING_FINDFIRSTSET_PLUTUS_V3 = SCRIPTS_V3_DIR / "succeedingFindFirstSetBitPolicyScriptV3.plutus"
340- MINTING_FINDFIRSTSET_V3 = PlutusScriptData (
341- script_file = MINTING_FINDFIRSTSET_PLUTUS_V3 ,
342- script_type = clusterlib .ScriptTypes .PLUTUS_V3 ,
343- execution_cost = ExecutionCost (per_time = 8071583 , per_space = 40221 , fixed_cost = UNKNOWN_FIXED_COST ),
344- )
345-
346- MINTING_READBIT_PLUTUS_V3 = SCRIPTS_V3_DIR / "succeedingReadBitPolicyScriptV3.plutus"
347- MINTING_READBIT_V3 = PlutusScriptData (
348- script_file = MINTING_READBIT_PLUTUS_V3 ,
349- script_type = clusterlib .ScriptTypes .PLUTUS_V3 ,
350- execution_cost = ExecutionCost (per_time = 15272720 , per_space = 82724 , fixed_cost = UNKNOWN_FIXED_COST ),
351- )
352-
353- MINTING_REPLICATEBYTE_PLUTUS_V3 = SCRIPTS_V3_DIR / "succeedingReplicateBytePolicyScriptV3.plutus"
354- MINTING_REPLICATEBYTE_V3 = PlutusScriptData (
355- script_file = MINTING_REPLICATEBYTE_PLUTUS_V3 ,
356- script_type = clusterlib .ScriptTypes .PLUTUS_V3 ,
357- execution_cost = ExecutionCost (per_time = 4549650 , per_space = 22946 , fixed_cost = UNKNOWN_FIXED_COST ),
358- )
359-
360- MINTING_ROTATEBYTESTRING_PLUTUS_V3 = (
361- SCRIPTS_V3_DIR / "succeedingRotateByteStringPolicyScriptV3.plutus"
362- )
363- MINTING_ROTATEBYTESTRING_V3 = PlutusScriptData (
364- script_file = MINTING_ROTATEBYTESTRING_PLUTUS_V3 ,
365- script_type = clusterlib .ScriptTypes .PLUTUS_V3 ,
366- execution_cost = ExecutionCost (
367- per_time = 22778618 , per_space = 109004 , fixed_cost = UNKNOWN_FIXED_COST
368- ),
369- )
370-
371- MINTING_SHIFTBYTESTRING_PLUTUS_V3 = (
372- SCRIPTS_V3_DIR / "succeedingShiftByteStringPolicyScriptV3.plutus"
373- )
374- MINTING_SHIFTBYTESTRING_V3 = PlutusScriptData (
375- script_file = MINTING_SHIFTBYTESTRING_PLUTUS_V3 ,
376- script_type = clusterlib .ScriptTypes .PLUTUS_V3 ,
377- execution_cost = ExecutionCost (per_time = 17922844 , per_space = 85787 , fixed_cost = UNKNOWN_FIXED_COST ),
378- )
379-
380- MINTING_WRITEBITS_PLUTUS_V3 = SCRIPTS_V3_DIR / "succeedingWriteBitsPolicyScriptV3.plutus"
381- MINTING_WRITEBITS_V3 = PlutusScriptData (
382- script_file = MINTING_WRITEBITS_PLUTUS_V3 ,
383- script_type = clusterlib .ScriptTypes .PLUTUS_V3 ,
384- execution_cost = ExecutionCost (
385- per_time = 90646820 , per_space = 462457 , fixed_cost = UNKNOWN_FIXED_COST
386- ),
387- )
388-
389296# ----- All succeeding bitwise tests ----- #
390297
391- SUCCEEDING_MINTING_BITWISE_SCRIPTS_V3 = (
392- MINTING_ANDBYTESTRING_V3 ,
393- MINTING_ORBYTESTRING_V3 ,
394- MINTING_XORBYTESTRING_V3 ,
395- MINTING_COMPLEMENTBYTESTRING_V3 ,
396- MINTING_COUNTSETBITS_V3 ,
397- MINTING_FINDFIRSTSET_V3 ,
398- MINTING_READBIT_V3 ,
399- MINTING_REPLICATEBYTE_V3 ,
400- MINTING_ROTATEBYTESTRING_V3 ,
401- MINTING_SHIFTBYTESTRING_V3 ,
402- MINTING_WRITEBITS_V3 ,
298+ # Tuples of (script_name, per_time, per_space, fixed_cost) for each succeeding bitwise script.
299+ SUCCEEDING_BITWISE_SCRIPTS_V3 = (
300+ ("succeedingAndByteStringPolicyScriptV3.plutus" , 19269680 , 102266 , UNKNOWN_FIXED_COST ),
301+ ("succeedingOrByteStringPolicyScriptV3.plutus" , 19269680 , 102266 , UNKNOWN_FIXED_COST ),
302+ ("succeedingXorByteStringPolicyScriptV3.plutus" , 19269680 , 102266 , UNKNOWN_FIXED_COST ),
303+ ("succeedingComplementByteStringPolicyScriptV3.plutus" , 5863431 , 30027 , UNKNOWN_FIXED_COST ),
304+ ("succeedingCountSetBitsPolicyScriptV3.plutus" , 9211420 , 45324 , UNKNOWN_FIXED_COST ),
305+ ("succeedingFindFirstSetBitPolicyScriptV3.plutus" , 8071583 , 40221 , UNKNOWN_FIXED_COST ),
306+ ("succeedingReadBitPolicyScriptV3.plutus" , 15272720 , 82724 , UNKNOWN_FIXED_COST ),
307+ ("succeedingReplicateBytePolicyScriptV3.plutus" , 4549650 , 22946 , UNKNOWN_FIXED_COST ),
308+ ("succeedingRotateByteStringPolicyScriptV3.plutus" , 22778618 , 109004 , UNKNOWN_FIXED_COST ),
309+ ("succeedingShiftByteStringPolicyScriptV3.plutus" , 17922844 , 85787 , UNKNOWN_FIXED_COST ),
310+ ("succeedingWriteBitsPolicyScriptV3.plutus" , 90646820 , 462457 , UNKNOWN_FIXED_COST ),
311+ )
312+
313+ SUCCEEDING_MINTING_BITWISE_SCRIPTS_V3 = tuple (
314+ PlutusScriptData (
315+ script_file = SCRIPTS_V3_DIR / script_name ,
316+ script_type = clusterlib .ScriptTypes .PLUTUS_V3 ,
317+ execution_cost = ExecutionCost (per_time = per_time , per_space = per_space , fixed_cost = fixed_cost ),
318+ )
319+ for script_name , per_time , per_space , fixed_cost in SUCCEEDING_BITWISE_SCRIPTS_V3
403320)
404321
405322
@@ -470,19 +387,20 @@ class PlutusScriptData:
470387#
471388# Includes tests for casing on constants, which will be released together with batch 6 in PV 11
472389
473- SUCCEEDING_BATCH6_SCRIPT_FILES_V3 = (
474- "caseBoolHappy_V3_110.plutus" ,
475- "caseIntegerHappy_V3_110.plutus" ,
476- "caseListHappy_V3_110.plutus" ,
477- "casePairHappy_V3_110.plutus" ,
478- "caseUnitHappy_V3_110.plutus" ,
479- "succeedingDropListPolicyScript_V3_110.plutus" ,
480- "succeedingExpModIntegerExponentOnePolicyScript_V3_110.plutus" ,
481- "succeedingExpModIntegerInversePolicyScript_V3_110.plutus" ,
482- "succeedingExpModIntegerPolicyScript_V3_110.plutus" ,
483- "succeedingIndexArrayPolicyScript_V3_110.plutus" ,
484- "succeedingLengthOfArrayPolicyScript_V3_110.plutus" ,
485- "succeedingListToArrayPolicyScript_V3_110.plutus" ,
390+ # Tuples of (script_name, per_time, per_space, fixed_cost) for each succeeding batch6 script.
391+ SUCCEEDING_BATCH6_SCRIPTS_V3 = (
392+ ("caseBoolHappy_V3_110.plutus" , 208100 , 1400 , 96 ),
393+ ("caseIntegerHappy_V3_110.plutus" , 208100 , 1400 , 96 ),
394+ ("caseListHappy_V3_110.plutus" , 1484744 , 6638 , 491 ),
395+ ("casePairHappy_V3_110.plutus" , 848864 , 3804 , 281 ),
396+ ("caseUnitHappy_V3_110.plutus" , 96100 , 700 , 48 ),
397+ ("succeedingDropListPolicyScript_V3_110.plutus" , 65064783 , 258749 , 19621 ),
398+ ("succeedingExpModIntegerExponentOnePolicyScript_V3_110.plutus" , 14492504 , 30930 , 2830 ),
399+ ("succeedingExpModIntegerInversePolicyScript_V3_110.plutus" , 35417284 , 55402 , 5751 ),
400+ ("succeedingExpModIntegerPolicyScript_V3_110.plutus" , 346637025 , 174626 , 35069 ),
401+ ("succeedingIndexArrayPolicyScript_V3_110.plutus" , 2831492 , 12706 , 938 ),
402+ ("succeedingLengthOfArrayPolicyScript_V3_110.plutus" , 2060965 , 9018 , 669 ),
403+ ("succeedingListToArrayPolicyScript_V3_110.plutus" , 3918949 , 15619 , 1184 ),
486404)
487405
488406FAILING_BATCH6_SCRIPT_FILES_V3 = (
@@ -527,33 +445,68 @@ class PlutusScriptData:
527445)
528446
529447if VERSIONS .node >= version .parse ("10.7.0" ):
530- SUCCEEDING_BATCH6_SCRIPT_FILES_V3 = ( # type: ignore[assignment]
531- * SUCCEEDING_BATCH6_SCRIPT_FILES_V3 ,
532- "succeedingG1MultiScalarMulPolicyScript1_V3_110.plutus" ,
533- "succeedingG1MultiScalarMulPolicyScript2_V3_110.plutus" ,
534- "succeedingG2MultiScalarMulPolicyScript1_V3_110.plutus" ,
535- "succeedingG2MultiScalarMulPolicyScript2_V3_110.plutus" ,
536- "succeedingDeleteExistingCoinPolicyScript_V3_110.plutus" ,
537- "succeedingDeleteMissingCoinPolicyScript_V3_110.plutus" ,
538- "succeedingInsertExistingCoinPolicyScript_V3_110.plutus" ,
539- "succeedingInsertNewCoinPolicyScript_V3_110.plutus" ,
540- "succeedingLookupMissingCoinPolicyScript_V3_110.plutus" ,
541- "succeedingScaleValueNegativePolicyScript_V3_110.plutus" ,
542- "succeedingScaleValuePositivePolicyScript_V3_110.plutus" ,
543- "succeedingScaleValueZeroPolicyScript_V3_110.plutus" ,
544- "succeedingUnionValueAssociativePolicyScript_V3_110.plutus" ,
545- "succeedingUnionValueAssociativeSingleCoinPolicyScript_V3_110.plutus" ,
546- "succeedingUnionValueCommutativePolicyScript_V3_110.plutus" ,
547- "succeedingUnionValueCommutativeSingleCoinPolicyScript_V3_110.plutus" ,
548- "succeedingUnionValueEmptyIdentityPolicyScript_V3_110.plutus" ,
549- "succeedingUnionValueInversablePolicyScript_V3_110.plutus" ,
550- "succeedingValueContainsDisjointPolicyScript_V3_110.plutus" ,
551- "succeedingValueContainsEmptyPolicyScript_V3_110.plutus" ,
552- "succeedingValueContainsIsSubValuePolicyScript_V3_110.plutus" ,
553- "succeedingValueContainsReflexivePolicyScript_V3_110.plutus" ,
554- "succeedingValueContainsRightExtraKeyPolicyScript_V3_110.plutus" ,
555- "succeedingValueContainsRightHigherAmountPolicyScript_V3_110.plutus" ,
556- "succeedingValueDataRoundTripPolicyScript_V3_110.plutus" ,
448+ SUCCEEDING_BATCH6_SCRIPTS_V3 = ( # type: ignore[assignment]
449+ * SUCCEEDING_BATCH6_SCRIPTS_V3 ,
450+ ("succeedingG1MultiScalarMulPolicyScript1_V3_110.plutus" , 9183574944 , 437274 , 687367 ),
451+ ("succeedingG1MultiScalarMulPolicyScript2_V3_110.plutus" , 9915620336 , 477870 , 742490 ),
452+ (
453+ "succeedingG2MultiScalarMulPolicyScript1_V3_110.plutus" ,
454+ UNKNOWN_PER_TIME ,
455+ UNKNOWN_PER_SPACE ,
456+ UNKNOWN_FIXED_COST ,
457+ ),
458+ (
459+ "succeedingG2MultiScalarMulPolicyScript2_V3_110.plutus" ,
460+ UNKNOWN_PER_TIME ,
461+ UNKNOWN_PER_SPACE ,
462+ UNKNOWN_FIXED_COST ,
463+ ),
464+ ("succeedingDeleteExistingCoinPolicyScript_V3_110.plutus" , 2176287 , 5979 , 502 ),
465+ ("succeedingDeleteMissingCoinPolicyScript_V3_110.plutus" , 2195175 , 5979 , 504 ),
466+ (
467+ "succeedingInsertExistingCoinPolicyScript_V3_110.plutus" ,
468+ UNKNOWN_PER_TIME ,
469+ UNKNOWN_PER_SPACE ,
470+ UNKNOWN_FIXED_COST ,
471+ ),
472+ ("succeedingInsertNewCoinPolicyScript_V3_110.plutus" , 1673425 , 5092 , 415 ),
473+ ("succeedingLookupMissingCoinPolicyScript_V3_110.plutus" , 1169613 , 4247 , 330 ),
474+ (
475+ "succeedingScaleValueNegativePolicyScript_V3_110.plutus" ,
476+ UNKNOWN_PER_TIME ,
477+ UNKNOWN_PER_SPACE ,
478+ UNKNOWN_FIXED_COST ,
479+ ),
480+ ("succeedingScaleValuePositivePolicyScript_V3_110.plutus" , 3839117 , 7971 , 737 ),
481+ ("succeedingScaleValueZeroPolicyScript_V3_110.plutus" , 3245681 , 6826 , 628 ),
482+ ("succeedingUnionValueAssociativePolicyScript_V3_110.plutus" , 6282854 , 11189 , 1099 ),
483+ (
484+ "succeedingUnionValueAssociativeSingleCoinPolicyScript_V3_110.plutus" ,
485+ 5806552 ,
486+ 11147 ,
487+ 1062 ,
488+ ),
489+ (
490+ "succeedingUnionValueCommutativePolicyScript_V3_110.plutus" ,
491+ UNKNOWN_PER_TIME ,
492+ UNKNOWN_PER_SPACE ,
493+ UNKNOWN_FIXED_COST ,
494+ ),
495+ (
496+ "succeedingUnionValueCommutativeSingleCoinPolicyScript_V3_110.plutus" ,
497+ UNKNOWN_PER_TIME ,
498+ UNKNOWN_PER_SPACE ,
499+ UNKNOWN_FIXED_COST ,
500+ ),
501+ ("succeedingUnionValueEmptyIdentityPolicyScript_V3_110.plutus" , 5410294 , 10487 , 996 ),
502+ ("succeedingUnionValueInversablePolicyScript_V3_110.plutus" , 3856300 , 8004 , 740 ),
503+ ("succeedingValueContainsDisjointPolicyScript_V3_110.plutus" , 2515834 , 5936 , 524 ),
504+ ("succeedingValueContainsEmptyPolicyScript_V3_110.plutus" , 3426852 , 7280 , 668 ),
505+ ("succeedingValueContainsIsSubValuePolicyScript_V3_110.plutus" , 2991582 , 6523 , 593 ),
506+ ("succeedingValueContainsReflexivePolicyScript_V3_110.plutus" , 1982910 , 4791 , 420 ),
507+ ("succeedingValueContainsRightExtraKeyPolicyScript_V3_110.plutus" , 3541590 , 7410 , 683 ),
508+ ("succeedingValueContainsRightHigherAmountPolicyScript_V3_110.plutus" , 2467834 , 5636 , 504 ),
509+ ("succeedingValueDataRoundTripPolicyScript_V3_110.plutus" , 3547465 , 6873 , 653 ),
557510 )
558511 FAILING_BATCH6_SCRIPT_FILES_V3 = ( # type: ignore[assignment]
559512 * FAILING_BATCH6_SCRIPT_FILES_V3 ,
@@ -572,11 +525,11 @@ class PlutusScriptData:
572525
573526SUCCEEDING_MINTING_BATCH6_SCRIPTS_V3 = tuple (
574527 PlutusScriptData (
575- script_file = SCRIPTS_V3_BATCH6_110_DIR / n ,
528+ script_file = SCRIPTS_V3_BATCH6_110_DIR / script_name ,
576529 script_type = clusterlib .ScriptTypes .PLUTUS_V3 ,
577- execution_cost = UNDETERMINED_COST ,
530+ execution_cost = ExecutionCost ( per_time = per_time , per_space = per_space , fixed_cost = fixed_cost ) ,
578531 )
579- for n in SUCCEEDING_BATCH6_SCRIPT_FILES_V3
532+ for script_name , per_time , per_space , fixed_cost in SUCCEEDING_BATCH6_SCRIPTS_V3
580533)
581534
582535FAILING_MINTING_BATCH6_SCRIPTS_V3 = tuple (
@@ -631,9 +584,9 @@ def check_plutus_costs(
631584 # Sort records by total cost
632585 sorted_plutus = sorted (
633586 plutus_costs ,
634- key = lambda x : x [ "executionUnits" ][ "memory" ]
635- + x ["executionUnits" ]["steps" ]
636- + x [ "lovelaceCost" ] ,
587+ key = lambda x : (
588+ x [ "executionUnits" ][ "memory" ] + x ["executionUnits" ]["steps" ] + x [ "lovelaceCost " ]
589+ ) ,
637590 )
638591 sorted_expected = sorted (expected_costs , key = lambda x : x .per_space + x .per_time + x .fixed_cost )
639592
@@ -678,7 +631,8 @@ def compute_cost(
678631
679632 collateral_fraction = protocol_params ["collateralPercentage" ] / 100
680633 min_collateral = int (fee_redeem * collateral_fraction * collateral_fraction_offset )
681- collateral_amount = max (min_collateral , 2000000 )
634+ # Eventual return collateral UTxO value must be bigger than min UTxO value
635+ collateral_amount = max (min_collateral + 1_000_000 , 2_000_000 )
682636
683637 return ScriptCost (fee = fee_redeem , collateral = collateral_amount , min_collateral = min_collateral )
684638
0 commit comments