From 0518f926ac556c5b95ad2f47ddc3368f63253d2d Mon Sep 17 00:00:00 2001 From: Martin Kourim Date: Fri, 4 Oct 2024 10:49:30 +0200 Subject: [PATCH] Update the cost model update test Use PlutusV3 cost model in a list format. --- .../tests/data/cost_models_pv10_list.json | 648 ++++++++++++++++++ .../tests/tests_conway/test_pparam_update.py | 79 ++- 2 files changed, 689 insertions(+), 38 deletions(-) create mode 100644 cardano_node_tests/tests/data/cost_models_pv10_list.json diff --git a/cardano_node_tests/tests/data/cost_models_pv10_list.json b/cardano_node_tests/tests/data/cost_models_pv10_list.json new file mode 100644 index 000000000..95853c0c6 --- /dev/null +++ b/cardano_node_tests/tests/data/cost_models_pv10_list.json @@ -0,0 +1,648 @@ +{ + "PlutusV1": [ + 205665, + 812, + 1, + 1, + 1000, + 571, + 0, + 1, + 1000, + 24177, + 4, + 1, + 1000, + 32, + 117366, + 10475, + 4, + 23000, + 100, + 23000, + 100, + 23000, + 100, + 23000, + 100, + 23000, + 100, + 23000, + 100, + 100, + 100, + 23000, + 100, + 19537, + 32, + 175354, + 32, + 46417, + 4, + 221973, + 511, + 0, + 1, + 89141, + 32, + 497525, + 14068, + 4, + 2, + 196500, + 453240, + 220, + 0, + 1, + 1, + 1000, + 28662, + 4, + 2, + 245000, + 216773, + 62, + 1, + 1060367, + 12586, + 1, + 208512, + 421, + 1, + 187000, + 1000, + 52998, + 1, + 80436, + 32, + 43249, + 32, + 1000, + 32, + 80556, + 1, + 57667, + 4, + 1000, + 10, + 197145, + 156, + 1, + 197145, + 156, + 1, + 204924, + 473, + 1, + 208896, + 511, + 1, + 52467, + 32, + 64832, + 32, + 65493, + 32, + 22558, + 32, + 16563, + 32, + 76511, + 32, + 196500, + 453240, + 220, + 0, + 1, + 1, + 69522, + 11687, + 0, + 1, + 60091, + 32, + 196500, + 453240, + 220, + 0, + 1, + 1, + 196500, + 453240, + 220, + 0, + 1, + 1, + 806990, + 30482, + 4, + 1927926, + 82523, + 4, + 265318, + 0, + 4, + 0, + 85931, + 32, + 205665, + 812, + 1, + 1, + 41182, + 32, + 212342, + 32, + 31220, + 32, + 32696, + 32, + 43357, + 32, + 32247, + 32, + 38314, + 32, + 9462713, + 1021, + 10 + ], + "PlutusV2": [ + 205665, + 812, + 1, + 1, + 1000, + 571, + 0, + 1, + 1000, + 24177, + 4, + 1, + 1000, + 32, + 117366, + 10475, + 4, + 23000, + 100, + 23000, + 100, + 23000, + 100, + 23000, + 100, + 23000, + 100, + 23000, + 100, + 100, + 100, + 23000, + 100, + 19537, + 32, + 175354, + 32, + 46417, + 4, + 221973, + 511, + 0, + 1, + 89141, + 32, + 497525, + 14068, + 4, + 2, + 196500, + 453240, + 220, + 0, + 1, + 1, + 1000, + 28662, + 4, + 2, + 245000, + 216773, + 62, + 1, + 1060367, + 12586, + 1, + 208512, + 421, + 1, + 187000, + 1000, + 52998, + 1, + 80436, + 32, + 43249, + 32, + 1000, + 32, + 80556, + 1, + 57667, + 4, + 1000, + 10, + 197145, + 156, + 1, + 197145, + 156, + 1, + 204924, + 473, + 1, + 208896, + 511, + 1, + 52467, + 32, + 64832, + 32, + 65493, + 32, + 22558, + 32, + 16563, + 32, + 76511, + 32, + 196500, + 453240, + 220, + 0, + 1, + 1, + 69522, + 11687, + 0, + 1, + 60091, + 32, + 196500, + 453240, + 220, + 0, + 1, + 1, + 196500, + 453240, + 220, + 0, + 1, + 1, + 1159724, + 392670, + 0, + 2, + 806990, + 30482, + 4, + 1927926, + 82523, + 4, + 265318, + 0, + 4, + 0, + 85931, + 32, + 205665, + 812, + 1, + 1, + 41182, + 32, + 212342, + 32, + 31220, + 32, + 32696, + 32, + 43357, + 32, + 32247, + 32, + 38314, + 32, + 35892428, + 10, + 9462713, + 1021, + 10, + 38887044, + 32947, + 10 + ], + "PlutusV3": [ + 100788, + 420, + 1, + 1, + 1000, + 173, + 0, + 1, + 1000, + 59957, + 4, + 1, + 11183, + 32, + 207616, + 8310, + 4, + 201305, + 8356, + 4, + 962335, + 18, + 2780678, + 6, + 442008, + 1, + 52538055, + 3756, + 18, + 267929, + 18, + 76433006, + 8868, + 18, + 52948122, + 18, + 1995836, + 36, + 3227919, + 12, + 901022, + 1, + 166917843, + 4307, + 36, + 284546, + 36, + 158221314, + 26549, + 36, + 74698472, + 36, + 333849714, + 1, + 254006273, + 72, + 2174038, + 72, + 1006041, + 43623, + 251, + 0, + 1, + 94375, + 32, + 132994, + 32, + 61462, + 4, + 72010, + 178, + 0, + 1, + 22151, + 32, + 91189, + 769, + 4, + 2, + 85848, + 123203, + 7305, + -900, + 1716, + 549, + 57, + 85848, + 0, + 1, + 1, + 1000, + 42921, + 4, + 2, + 24548, + 29498, + 38, + 1, + 898148, + 27279, + 1, + 51775, + 558, + 1, + 39184, + 1000, + 60594, + 1, + 141895, + 32, + 83150, + 32, + 15299, + 32, + 76049, + 1, + 13169, + 4, + 1293828, + 28716, + 63, + 0, + 1, + 2261318, + 64571, + 4, + 22100, + 10, + 28999, + 74, + 1, + 28999, + 74, + 1, + 43285, + 552, + 1, + 44749, + 541, + 1, + 33852, + 32, + 68246, + 32, + 72362, + 32, + 7243, + 32, + 7391, + 32, + 11546, + 32, + 85848, + 123203, + 7305, + -900, + 1716, + 549, + 57, + 85848, + 0, + 1, + 90434, + 519, + 0, + 1, + 74433, + 32, + 85848, + 123203, + 7305, + -900, + 1716, + 549, + 57, + 85848, + 0, + 1, + 1, + 85848, + 123203, + 7305, + -900, + 1716, + 549, + 57, + 85848, + 0, + 1, + 955506, + 213312, + 0, + 2, + 270652, + 22588, + 4, + 1457325, + 64566, + 4, + 20467, + 1, + 4, + 0, + 141992, + 32, + 100788, + 420, + 1, + 1, + 81663, + 32, + 59498, + 32, + 20142, + 32, + 24588, + 32, + 20744, + 32, + 25933, + 32, + 24623, + 32, + 43053543, + 10, + 53384111, + 14333, + 10, + 43574283, + 26308, + 10, + 100181, + 726, + 719, + 0, + 1, + 100181, + 726, + 719, + 0, + 1, + 100181, + 726, + 719, + 0, + 1, + 107878, + 680, + 0, + 1, + 95336, + 1, + 281145, + 18848, + 0, + 1, + 180194, + 159, + 1, + 1, + 158519, + 8942, + 0, + 1, + 159378, + 8813, + 0, + 1, + 107490, + 3298, + 1, + 106057, + 655, + 1, + 1964219, + 24520, + 3, + 100000000000, + 100000000000, + 100, + 100, + 16000, + 100, + 16000, + 100, + 16000, + 100, + 16000, + 100, + 16000, + 100, + 16000, + 100, + 16000, + 100, + 16000, + 100, + 16000, + 100 + ] +} diff --git a/cardano_node_tests/tests/tests_conway/test_pparam_update.py b/cardano_node_tests/tests/tests_conway/test_pparam_update.py index 5be258aa4..901c05ca2 100644 --- a/cardano_node_tests/tests/tests_conway/test_pparam_update.py +++ b/cardano_node_tests/tests/tests_conway/test_pparam_update.py @@ -2,6 +2,7 @@ # pylint: disable=expression-not-assigned import fractions +import json import logging import pathlib as pl import random @@ -1300,16 +1301,23 @@ def _check_state(state: dict): [r.success() for r in (reqc.cip080, reqc.cip081, reqc.cip082, reqc.cip083)] @allure.link(helpers.get_vcs_link()) + @pytest.mark.skipif( + not configuration.DEV_CLUSTER_RUNNING, + reason="Meant to be run manually on dev cluster", + ) @pytest.mark.long - def test_pparam_update2( + def test_update_cost_models( self, cluster_lock_governance: governance_utils.GovClusterT, pool_user_lg: clusterlib.PoolUser, ): - """Test enactment of protocol parameter update.""" + """Test cost model update. + + This test is for verifying concrete cost model updates on a specific testnet configuration. + """ cluster, governance_data = cluster_lock_governance temp_template = common.get_test_id(cluster) - cost_proposal_file = DATA_DIR / "cost_models_pv10.json" + cost_proposal_file = DATA_DIR / "cost_models_pv10_list.json" is_in_bootstrap = conway_common.is_in_bootstrap(cluster_obj=cluster) if is_in_bootstrap and not configuration.HAS_CC: @@ -1327,6 +1335,9 @@ def test_pparam_update2( ), ] + with open(cost_proposal_file, encoding="utf-8") as fp: + cost_models_in = json.load(fp) + prev_action_rec = governance_utils.get_prev_action( action_type=governance_utils.PrevGovActionIds.PPARAM_UPDATE, gov_state=cluster.g_conway_governance.query.gov_state(), @@ -1348,6 +1359,10 @@ def _propose_pparams_update( prev_action_rec=prev_action_rec, ) + def _check_models(cost_models: dict): + for m in ("PlutusV1", "PlutusV2", "PlutusV3"): + assert len(cost_models_in[m]) == len(cost_models[m]), f"Unexpected length for {m}" + # Make sure we have enough time to submit the proposal in one epoch clusterlib_utils.wait_for_epoch_interval( cluster_obj=cluster, start=1, stop=common.EPOCH_STOP_SEC_BUFFER @@ -1355,61 +1370,49 @@ def _propose_pparams_update( proposal_epoch = cluster.g_query.get_epoch() # Propose the action - fin_prop_rec = _propose_pparams_update( - name_template=f"{temp_template}_fin", proposals=proposals - ) - clusterlib_utils.check_updated_params( - update_proposals=fin_prop_rec.proposals, - protocol_params=fin_prop_rec.future_pparams, - ) + prop_rec = _propose_pparams_update(name_template=temp_template, proposals=proposals) + _check_models(prop_rec.future_pparams["costModels"]) - cluster.wait_for_epoch(epoch_no=proposal_epoch + 6, padding_seconds=5) + # Wait until the last epoch where it is still possible to vote + approve_epoch = proposal_epoch + cluster.conway_genesis["govActionLifetime"] + cluster.wait_for_epoch(epoch_no=approve_epoch, padding_seconds=5, future_is_ok=False) - # Vote & approve the "final" action by CC + # Vote & approve the action by CC conway_common.cast_vote( cluster_obj=cluster, governance_data=governance_data, - name_template=f"{temp_template}_fin_cc", + name_template=f"{temp_template}_cc", payment_addr=pool_user_lg.payment, - action_txid=fin_prop_rec.action_txid, - action_ix=fin_prop_rec.action_ix, + action_txid=prop_rec.action_txid, + action_ix=prop_rec.action_ix, approve_cc=True, ) - fin_approve_epoch = cluster.g_query.get_epoch() - - def _check_state(state: dict): - pparams = state.get("curPParams") or state.get("currentPParams") or {} - clusterlib_utils.check_updated_params( - update_proposals=proposals, protocol_params=pparams - ) # Check ratification - rat_epoch = cluster.wait_for_epoch(epoch_no=fin_approve_epoch + 1, padding_seconds=5) - - if rat_epoch == fin_approve_epoch + 1: - rat_gov_state = cluster.g_conway_governance.query.gov_state() - conway_common.save_gov_state( - gov_state=rat_gov_state, name_template=f"{temp_template}_rat_{rat_epoch}" - ) + rat_epoch = cluster.wait_for_epoch(epoch_no=approve_epoch + 1, padding_seconds=5) + rat_gov_state = cluster.g_conway_governance.query.gov_state() + conway_common.save_gov_state( + gov_state=rat_gov_state, name_template=f"{temp_template}_rat_{rat_epoch}" + ) - rat_action = governance_utils.lookup_ratified_actions( - gov_state=rat_gov_state, action_txid=fin_prop_rec.action_txid - ) - assert rat_action, "Action not found in ratified actions" + rat_action = governance_utils.lookup_ratified_actions( + gov_state=rat_gov_state, action_txid=prop_rec.action_txid + ) + assert rat_action, "Action not found in ratified actions" - next_rat_state = rat_gov_state["nextRatifyState"] - _check_state(next_rat_state["nextEnactState"]) - assert not next_rat_state["ratificationDelayed"], "Ratification is delayed unexpectedly" + next_rat_state = rat_gov_state["nextRatifyState"] + _check_models(next_rat_state["nextEnactState"]["curPParams"]["costModels"]) + assert not next_rat_state["ratificationDelayed"], "Ratification is delayed unexpectedly" # Check enactment enact_epoch = cluster.wait_for_epoch( - epoch_no=fin_approve_epoch + 2, padding_seconds=5, future_is_ok=False + epoch_no=approve_epoch + 2, padding_seconds=5, future_is_ok=False ) enact_gov_state = cluster.g_conway_governance.query.gov_state() conway_common.save_gov_state( gov_state=enact_gov_state, name_template=f"{temp_template}_enact_{enact_epoch}" ) - _check_state(enact_gov_state) + _check_models(enact_gov_state["currentPParams"]["costModels"]) # Check that deposit is returned for the enacted pparam proposal right after enactment. deposit_amt = cluster.conway_genesis["govActionDeposit"]