Skip to content

Commit a459ae7

Browse files
kwxmmkoura
authored andcommitted
End-to-end tests for dropList builtin
1 parent ee4a2c5 commit a459ae7

8 files changed

+211
-4
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"type": "PlutusScriptV3",
3+
"description": "expensiveDropListPolicyScriptV3_1",
4+
"cborHex": "58d10101003323232223003002323001001229001a4d22900291149980419abd80033009002300900199319ab9c491146d6b436f756e7453657442697473506f6c696379008004cc01c01c01019180080091129949aba30038a800c64d5d180154006944193370e6ae84008d5d0800d284cc8cc010010004d5d10011aba2001191800800914800d2f5812233574000466008008002801c005208080c09e91c191c79502c00d2016c00d202cc00d2042c00d2058c00d206ec00d208401c00d209a01c00d20b001c00d20c601c00001800300001"
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"type": "PlutusScriptV3",
3+
"description": "expensiveDropListPolicyScriptV3_2",
4+
"cborHex": "58d10101003323232223003002323001001229001a4d22900291149980419abd80033009002300900199319ab9c491146d6b436f756e7453657442697473506f6c696379008004cc01c01c01019180080091129949aba30038a800c64d5d180154006944193370e6ae84008d5d0800d284cc8cc010010004d5d10011aba2001191800800914800d2f5812233574000466008008002801c00520a3abf8b19de3d4d4d602c00d2016c00d202cc00d2042c00d2058c00d206ec00d208401c00d209a01c00d20b001c00d20c601c00001800300001"
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"type": "PlutusScriptV3",
3+
"description": "expensiveDropListPolicyScriptV3_3",
4+
"cborHex": "5902530101003323232223003002323001001229001a4d22900291149980419abd80033009002300900199319ab9c491146d6b436f756e7453657442697473506f6c696379008004cc01c01c01019180080091129949aba30038a800c64d5d180154006944193370e6ae84008d5d0800d284cc8cc010010004d5d10011aba2001191800800914800d2f5812233574000466008008002801c00520fcffffffffffffffff01c00d2028c00d202ac00d202cc00d202ec00d2030c00d2032c00d2034c00d2036c00d2038c00d203ac00d203cc00d203ec00d2040c00d2042c00d2044c00d2046c00d2048c00d204ac00d204cc00d204ec00d2050c00d2052c00d2054c00d2056c00d2058c00d205ac00d205cc00d205ec00d2060c00d2062c00d2064c00d2066c00d2068c00d206ac00d206cc00d206ec00d2070c00d2072c00d2074c00d2076c00d2078c00d207ac00d207cc00d207ec00d208001c00d208201c00d208401c00d208601c00d208801c00d208a01c00d208c01c00d208e01c00d209001c00d209201c00d209401c00d209601c00d209801c00d209a01c00d209c01c00d209e01c00d20a001c00d20a201c00d20a401c00d20a601c00d20a801c00d20aa01c00d20ac01c00d20ae01c00d20b001c00d20b201c00d20b401c00d20b601c00d20b801c00d20ba01c00d20bc01c00d20be01c00d20c001c00d20c201c00d20c401c00d20c601c00d20c801c00d20ca01c00d20cc01c00d20ce01c00d20d001c00d20d201c00d20d401c00d20d601c00d20d801c00d20da01c00d20dc01c00d20de01c0000000000000000000000000300060001"
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"type": "PlutusScriptV3",
3+
"description": "expensiveDropListPolicyScriptV3_4",
4+
"cborHex": "5902530101003323232223003002323001001229001a4d22900291149980419abd80033009002300900199319ab9c491146d6b436f756e7453657442697473506f6c696379008004cc01c01c01019180080091129949aba30038a800c64d5d180154006944193370e6ae84008d5d0800d284cc8cc010010004d5d10011aba2001191800800914800d2f5812233574000466008008002801c00520feffffffffffffffff01c00d2028c00d202ac00d202cc00d202ec00d2030c00d2032c00d2034c00d2036c00d2038c00d203ac00d203cc00d203ec00d2040c00d2042c00d2044c00d2046c00d2048c00d204ac00d204cc00d204ec00d2050c00d2052c00d2054c00d2056c00d2058c00d205ac00d205cc00d205ec00d2060c00d2062c00d2064c00d2066c00d2068c00d206ac00d206cc00d206ec00d2070c00d2072c00d2074c00d2076c00d2078c00d207ac00d207cc00d207ec00d208001c00d208201c00d208401c00d208601c00d208801c00d208a01c00d208c01c00d208e01c00d209001c00d209201c00d209401c00d209601c00d209801c00d209a01c00d209c01c00d209e01c00d20a001c00d20a201c00d20a401c00d20a601c00d20a801c00d20aa01c00d20ac01c00d20ae01c00d20b001c00d20b201c00d20b401c00d20b601c00d20b801c00d20ba01c00d20bc01c00d20be01c00d20c001c00d20c201c00d20c401c00d20c601c00d20c801c00d20ca01c00d20cc01c00d20ce01c00d20d001c00d20d201c00d20d401c00d20d601c00d20d801c00d20da01c00d20dc01c00d20de01c0000000000000000000000000300060001"
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"type": "PlutusScriptV3",
3+
"description": "expensiveDropListPolicyScriptV3_5",
4+
"cborHex": "5902530101003323232223003002323001001229001a4d22900291149980419abd80033009002300900199319ab9c491146d6b436f756e7453657442697473506f6c696379008004cc01c01c01019180080091129949aba30038a800c64d5d180154006944193370e6ae84008d5d0800d284cc8cc010010004d5d10011aba2001191800800914800d2f5812233574000466008008002801c0052080808080808080808002c00d2028c00d202ac00d202cc00d202ec00d2030c00d2032c00d2034c00d2036c00d2038c00d203ac00d203cc00d203ec00d2040c00d2042c00d2044c00d2046c00d2048c00d204ac00d204cc00d204ec00d2050c00d2052c00d2054c00d2056c00d2058c00d205ac00d205cc00d205ec00d2060c00d2062c00d2064c00d2066c00d2068c00d206ac00d206cc00d206ec00d2070c00d2072c00d2074c00d2076c00d2078c00d207ac00d207cc00d207ec00d208001c00d208201c00d208401c00d208601c00d208801c00d208a01c00d208c01c00d208e01c00d209001c00d209201c00d209401c00d209601c00d209801c00d209a01c00d209c01c00d209e01c00d20a001c00d20a201c00d20a401c00d20a601c00d20a801c00d20aa01c00d20ac01c00d20ae01c00d20b001c00d20b201c00d20b401c00d20b601c00d20b801c00d20ba01c00d20bc01c00d20be01c00d20c001c00d20c201c00d20c401c00d20c601c00d20c801c00d20ca01c00d20cc01c00d20ce01c00d20d001c00d20d201c00d20d401c00d20d601c00d20d801c00d20da01c00d20dc01c00d20de01c0000000000000000000000000300060001"
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"type": "PlutusScriptV3",
3+
"description": "succeedingDropListPolicyScriptV3",
4+
"cborHex": "5901060101003323232223003002323001001229001a4d22900291149980419abd80033009002300900199319ab9c491146d6b436f756e7453657442697473506f6c696379008004cc01c01c01019180080091129949aba30038a800c64d5d180154006944193370e6ae84008d5d0800d284cc8cc010010004d5d10011aba2001191800800914800d2f58122335740004660080080023232801c0052000800c005801c005200e800c009801c0052022800e000c00e00290074006002c00e002905189e0018003003800a40018006000c00e002905209e0018003000010034805b003480b30034810b00348163003481bb0034821007003482680600202006905800e006906300e0001"
5+
}

cardano_node_tests/tests/plutus_common.py

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
SCRIPTS_V1_DIR = PLUTUS_DIR / "v1"
1717
SCRIPTS_V2_DIR = PLUTUS_DIR / "v2"
1818
SCRIPTS_V3_DIR = PLUTUS_DIR / "v3"
19+
SCRIPTS_V3_BATCH6_110_DIR = SCRIPTS_V3_DIR / "batch6" / "1.1.0"
20+
1921
SEPC256K1_ECDSA_DIR = PLUTUS_DIR / "sepc256k1_ecdsa"
2022
SEPC256K1_SCHNORR_DIR = PLUTUS_DIR / "sepc256k1_schnorr"
2123

@@ -285,7 +287,18 @@ class PlutusScriptData:
285287

286288
# ----- Succeeding bitwise tests ----- #
287289

290+
# These are used to fill in the execution costs of scripts where we don't yet
291+
# know what the cost is. We're not currently checking the costs (and it seems
292+
# to be difficult when the script fails anyway), so the values here don't really
293+
# matter.
294+
295+
UNKNOWN_PER_TIME = 1_000_000
296+
UNKNOWN_PER_SPACE = 100_000
288297
UNKNOWN_FIXED_COST = 777_777
298+
UNDETERMINED_COST = ExecutionCost(
299+
per_time=UNKNOWN_PER_TIME, per_space=UNKNOWN_PER_SPACE, fixed_cost=UNKNOWN_FIXED_COST
300+
)
301+
289302

290303
MINTING_ANDBYTESTRING_PLUTUS_V3 = SCRIPTS_V3_DIR / "succeedingAndByteStringPolicyScriptV3.plutus"
291304
MINTING_ANDBYTESTRING_V3 = PlutusScriptData(
@@ -441,10 +454,6 @@ class PlutusScriptData:
441454
"failingWriteBitsPolicyScriptV3_19.plutus",
442455
)
443456

444-
# We're not currently checking the costs (and it seems to be difficult when the
445-
# script fails anyway), so the values here don't really matter.
446-
UNDETERMINED_COST = ExecutionCost(per_time=1_000_000, per_space=100_000, fixed_cost=1234)
447-
448457

449458
FAILING_MINTING_BITWISE_SCRIPTS_V3 = tuple(
450459
PlutusScriptData(
@@ -464,6 +473,34 @@ class PlutusScriptData:
464473

465474
SUCCEEDING_MINTING_RIPEMD_160_SCRIPTS_V3 = (MINTING_RIPEMD_160_V3,)
466475

476+
# ------ Batch 6 builtins (Plutus V3 only) ------ #
477+
478+
MINTING_DROPLIST_PLUTUS_V3 = SCRIPTS_V3_BATCH6_110_DIR / "succeedingDropListPolicyScriptV3.plutus"
479+
MINTING_DROPLIST_V3 = PlutusScriptData(
480+
script_file=MINTING_DROPLIST_PLUTUS_V3,
481+
script_type=clusterlib.ScriptTypes.PLUTUS_V3,
482+
execution_cost=UNDETERMINED_COST,
483+
)
484+
485+
SUCCEEDING_MINTING_BATCH6_SCRIPTS_V3 = (MINTING_DROPLIST_V3,)
486+
487+
FAILING_BATCH6_SCRIPT_FILES_V3 = (
488+
"expensiveDropListPolicyScriptV3_1.plutus",
489+
"expensiveDropListPolicyScriptV3_2.plutus",
490+
"expensiveDropListPolicyScriptV3_3.plutus",
491+
"expensiveDropListPolicyScriptV3_4.plutus",
492+
"expensiveDropListPolicyScriptV3_5.plutus",
493+
)
494+
495+
FAILING_MINTING_BATCH6_SCRIPTS_V3 = tuple(
496+
PlutusScriptData(
497+
script_file=SCRIPTS_V3_BATCH6_110_DIR / n,
498+
script_type=clusterlib.ScriptTypes.PLUTUS_V3,
499+
execution_cost=UNDETERMINED_COST,
500+
)
501+
for n in FAILING_BATCH6_SCRIPT_FILES_V3
502+
)
503+
467504

468505
@dataclasses.dataclass(frozen=True, order=True)
469506
class PlutusOp:

cardano_node_tests/tests/tests_plutus_v3/test_mint_build.py

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,3 +212,143 @@ def test_plutusv3_builtins(
212212
plutus_v_record=script,
213213
success_expected=False,
214214
)
215+
216+
217+
# Just a slightly modified copy of TestPlutusBatch5V3Builtins
218+
class TestPlutusBatch6V3Builtins:
219+
"""Tests for batch6 of Plutus Core built-in functions."""
220+
221+
success_scripts = plutus_common.SUCCEEDING_MINTING_BATCH6_SCRIPTS_V3
222+
223+
fail_scripts = plutus_common.FAILING_MINTING_BATCH6_SCRIPTS_V3
224+
225+
@pytest.fixture
226+
def payment_addrs(
227+
self,
228+
update_cost_model: None, # noqa: ARG002
229+
cluster_manager: cluster_management.ClusterManager,
230+
cluster: clusterlib.ClusterLib,
231+
) -> list[clusterlib.AddressRecord]:
232+
"""Create new payment address."""
233+
addrs = common.get_payment_addrs(
234+
name_template=common.get_test_id(cluster),
235+
cluster_manager=cluster_manager,
236+
cluster_obj=cluster,
237+
num=2,
238+
fund_idx=[0],
239+
amount=700_000_000,
240+
)
241+
return addrs
242+
243+
def run_scenario(
244+
self,
245+
cluster_obj: clusterlib.ClusterLib,
246+
payment_addrs: list[clusterlib.AddressRecord],
247+
plutus_v_record: plutus_common.PlutusScriptData,
248+
success_expected: bool,
249+
):
250+
"""Run an e2e test for a Plutus builtin."""
251+
temp_template = common.get_test_id(cluster_obj)
252+
253+
payment_addr = payment_addrs[0]
254+
issuer_addr = payment_addrs[1]
255+
256+
lovelace_amount = 2_000_000
257+
token_amount = 5
258+
script_fund = 10_000_000
259+
260+
minting_cost = plutus_common.compute_cost(
261+
execution_cost=plutus_v_record.execution_cost,
262+
protocol_params=cluster_obj.g_query.get_protocol_params(),
263+
)
264+
265+
# Step 1: fund the token issuer and create UTXO for collaterals
266+
267+
mint_utxos, collateral_utxos, _tx_output_step1 = mint_build._fund_issuer(
268+
cluster_obj=cluster_obj,
269+
temp_template=temp_template,
270+
payment_addr=payment_addr,
271+
issuer_addr=issuer_addr,
272+
minting_cost=minting_cost,
273+
amount=script_fund,
274+
)
275+
276+
# Step 2: mint the "qacoin"
277+
278+
policyid = cluster_obj.g_transaction.get_policyid(plutus_v_record.script_file)
279+
asset_name = f"qacoin{clusterlib.get_rand_str(4)}".encode().hex()
280+
token = f"{policyid}.{asset_name}"
281+
mint_txouts = [
282+
clusterlib.TxOut(address=issuer_addr.address, amount=token_amount, coin=token)
283+
]
284+
285+
plutus_mint_data = [
286+
clusterlib.Mint(
287+
txouts=mint_txouts,
288+
script_file=plutus_v_record.script_file,
289+
collaterals=collateral_utxos,
290+
redeemer_file=plutus_common.REDEEMER_42,
291+
)
292+
]
293+
294+
tx_files_step2 = clusterlib.TxFiles(
295+
signing_key_files=[issuer_addr.skey_file],
296+
)
297+
txouts_step2 = [
298+
clusterlib.TxOut(address=issuer_addr.address, amount=lovelace_amount),
299+
*mint_txouts,
300+
]
301+
302+
try:
303+
tx_output_step2 = clusterlib_utils.build_and_submit_tx(
304+
cluster_obj=cluster_obj,
305+
name_template=f"{temp_template}_step2",
306+
src_address=payment_addr.address,
307+
build_method=clusterlib_utils.BuildMethods.BUILD,
308+
tx_files=tx_files_step2,
309+
txins=mint_utxos,
310+
txouts=txouts_step2,
311+
mint=plutus_mint_data,
312+
)
313+
except clusterlib.CLIError as excp:
314+
if success_expected:
315+
raise
316+
if "The machine terminated because of an error" in str(excp):
317+
return
318+
raise
319+
320+
out_utxos = cluster_obj.g_query.get_utxo(tx_raw_output=tx_output_step2)
321+
token_utxo = clusterlib.filter_utxos(
322+
utxos=out_utxos, address=issuer_addr.address, coin=token
323+
)
324+
assert token_utxo and token_utxo[0].amount == token_amount, "The token was not minted"
325+
326+
@allure.link(helpers.get_vcs_link())
327+
@pytest.mark.long
328+
@pytest.mark.team_plutus
329+
@pytest.mark.upgrade_step3
330+
def test_plutusv3_batch6_builtins(
331+
self,
332+
update_cost_model: None, # noqa: ARG002
333+
cluster: clusterlib.ClusterLib,
334+
payment_addrs: list[clusterlib.AddressRecord],
335+
subtests: pytest_subtests.SubTests,
336+
):
337+
"""Test minting with the batch6 of Plutus Core built-in functions."""
338+
for script in self.success_scripts:
339+
with subtests.test(script=script.script_file.stem):
340+
self.run_scenario(
341+
cluster_obj=cluster,
342+
payment_addrs=payment_addrs,
343+
plutus_v_record=script,
344+
success_expected=True,
345+
)
346+
347+
for script in self.fail_scripts:
348+
with subtests.test(script=script.script_file.stem):
349+
self.run_scenario(
350+
cluster_obj=cluster,
351+
payment_addrs=payment_addrs,
352+
plutus_v_record=script,
353+
success_expected=False,
354+
)

0 commit comments

Comments
 (0)