From f086b8d9f15e1a85cdfe9f5646c42fc254ac6380 Mon Sep 17 00:00:00 2001 From: Martin Kourim Date: Tue, 20 Jan 2026 12:11:46 +0100 Subject: [PATCH 1/6] refactor: centralize protocol version retrieval logic Move protocol version major number retrieval to a new utility function `get_protocol_version` in `clusterlib_utils.py`. Refactor all usages across the codebase to use this function instead of directly accessing the protocol parameters dictionary. This improves code readability and maintainability by reducing duplication and encapsulating the logic in one place. --- cardano_node_tests/tests/plutus_common.py | 2 +- cardano_node_tests/tests/tests_conway/conway_common.py | 3 +-- .../tests/tests_plutus_v2/test_mint_secp256k1_build.py | 5 +++-- .../tests/tests_plutus_v2/test_mint_secp256k1_raw.py | 3 ++- cardano_node_tests/utils/clusterlib_utils.py | 8 ++++++++ cardano_node_tests/utils/governance_setup.py | 5 +---- 6 files changed, 16 insertions(+), 10 deletions(-) diff --git a/cardano_node_tests/tests/plutus_common.py b/cardano_node_tests/tests/plutus_common.py index 936f3c250..b94166371 100644 --- a/cardano_node_tests/tests/plutus_common.py +++ b/cardano_node_tests/tests/plutus_common.py @@ -875,7 +875,7 @@ def check_return_collateral(cluster_obj: clusterlib.ClusterLib, tx_output: clust def xfail_on_secp_error(cluster_obj: clusterlib.ClusterLib, algorithm: str, err_msg: str): """Xfail a test based on error message when using SECP functions.""" - before_pv8 = cluster_obj.g_query.get_protocol_params()["protocolVersion"]["major"] < 8 + before_pv8 = clusterlib_utils.get_protocol_version(cluster_obj=cluster_obj) < 8 # The SECP256k1 functions should work from PV8. # Before PV8 the SECP256k1 is blocked or limited by high cost model diff --git a/cardano_node_tests/tests/tests_conway/conway_common.py b/cardano_node_tests/tests/tests_conway/conway_common.py index 697eb2134..909bacd35 100644 --- a/cardano_node_tests/tests/tests_conway/conway_common.py +++ b/cardano_node_tests/tests/tests_conway/conway_common.py @@ -31,8 +31,7 @@ def is_in_bootstrap( cluster_obj: clusterlib.ClusterLib, ) -> bool: """Check if the cluster is in bootstrap period.""" - pv = cluster_obj.g_query.get_protocol_params()["protocolVersion"]["major"] - return bool(pv == 9) + return bool(clusterlib_utils.get_protocol_version(cluster_obj=cluster_obj) == 9) def get_committee_val(data: dict[str, tp.Any]) -> dict[str, tp.Any]: diff --git a/cardano_node_tests/tests/tests_plutus_v2/test_mint_secp256k1_build.py b/cardano_node_tests/tests/tests_plutus_v2/test_mint_secp256k1_build.py index 8e0a27771..821a8cd0f 100644 --- a/cardano_node_tests/tests/tests_plutus_v2/test_mint_secp256k1_build.py +++ b/cardano_node_tests/tests/tests_plutus_v2/test_mint_secp256k1_build.py @@ -12,6 +12,7 @@ from cardano_node_tests.tests import common from cardano_node_tests.tests import plutus_common from cardano_node_tests.tests.tests_plutus_v2 import mint_build +from cardano_node_tests.utils import clusterlib_utils from cardano_node_tests.utils import helpers LOGGER = logging.getLogger(__name__) @@ -167,7 +168,7 @@ def test_use_secp_builtin_functions( redeemer_file=redeemer_file, ) except clusterlib.CLIError as err: - before_pv8 = cluster.g_query.get_protocol_params()["protocolVersion"]["major"] < 8 + before_pv8 = clusterlib_utils.get_protocol_version(cluster_obj=cluster) < 8 # The SECP256k1 functions should work from protocol version 8 if not before_pv8: @@ -233,7 +234,7 @@ def test_negative_secp_builtin_functions( redeemer_file = redeemer_dir / f"{test_vector}.redeemer" - before_pv8 = cluster.g_query.get_protocol_params()["protocolVersion"]["major"] < 8 + before_pv8 = clusterlib_utils.get_protocol_version(cluster_obj=cluster) < 8 with pytest.raises(clusterlib.CLIError) as excinfo: self._fund_issuer_mint_token( diff --git a/cardano_node_tests/tests/tests_plutus_v2/test_mint_secp256k1_raw.py b/cardano_node_tests/tests/tests_plutus_v2/test_mint_secp256k1_raw.py index deef42755..b26621e70 100644 --- a/cardano_node_tests/tests/tests_plutus_v2/test_mint_secp256k1_raw.py +++ b/cardano_node_tests/tests/tests_plutus_v2/test_mint_secp256k1_raw.py @@ -13,6 +13,7 @@ from cardano_node_tests.tests import common from cardano_node_tests.tests import plutus_common from cardano_node_tests.tests.tests_plutus_v2 import mint_raw +from cardano_node_tests.utils import clusterlib_utils from cardano_node_tests.utils import helpers LOGGER = logging.getLogger(__name__) @@ -212,7 +213,7 @@ def test_negative_secp_builtin_functions( redeemer_file = redeemer_dir / f"{test_vector}.redeemer" - before_pv8 = cluster.g_query.get_protocol_params()["protocolVersion"]["major"] < 8 + before_pv8 = clusterlib_utils.get_protocol_version(cluster_obj=cluster) < 8 with pytest.raises(clusterlib.CLIError) as excinfo: self._fund_issuer_mint_token( diff --git a/cardano_node_tests/utils/clusterlib_utils.py b/cardano_node_tests/utils/clusterlib_utils.py index 44e9dbb04..823ecf2f7 100644 --- a/cardano_node_tests/utils/clusterlib_utils.py +++ b/cardano_node_tests/utils/clusterlib_utils.py @@ -1615,3 +1615,11 @@ def get_just_lovelace_utxos( return cl_txtools._get_usable_utxos( address_utxos=address_utxos, coins={clusterlib.DEFAULT_COIN} ) + + +def get_protocol_version( + cluster_obj: clusterlib.ClusterLib, +) -> int: + """Get the protocol version major number.""" + pv = int(cluster_obj.g_query.get_protocol_params()["protocolVersion"]["major"]) + return pv diff --git a/cardano_node_tests/utils/governance_setup.py b/cardano_node_tests/utils/governance_setup.py index 3db214dc3..b2d47704a 100644 --- a/cardano_node_tests/utils/governance_setup.py +++ b/cardano_node_tests/utils/governance_setup.py @@ -243,10 +243,7 @@ def setup( # When using "fast" cluster, we need to wait for at least epoch 1 for DReps # to be usable. DReps don't vote in PV9. - if ( - drep_reg_records - and cluster_obj.g_query.get_protocol_params()["protocolVersion"]["major"] >= 10 - ): + if drep_reg_records and clusterlib_utils.get_protocol_version(cluster_obj=cluster_obj) >= 10: cluster_obj.wait_for_epoch(epoch_no=1, padding_seconds=5) drep1_rec = cluster_obj.g_query.get_drep_stake_distribution( From 8192b7a7e683a38de4fc681ba2167c8e98d1eca5 Mon Sep 17 00:00:00 2001 From: Martin Kourim Date: Tue, 20 Jan 2026 12:15:02 +0100 Subject: [PATCH 2/6] feat(conway): support dynamic protocol version in hardfork test Update the Conway hardfork test to dynamically determine the initial and target protocol versions instead of hardcoding them. Add checks for the experimental hard-forks flag in the cluster config. Adjust DRep voting logic and assertions to handle protocol version changes, ensuring compatibility with future protocol upgrades. --- .../tests/tests_conway/test_hardfork.py | 69 ++++++++++++------- 1 file changed, 44 insertions(+), 25 deletions(-) diff --git a/cardano_node_tests/tests/tests_conway/test_hardfork.py b/cardano_node_tests/tests/tests_conway/test_hardfork.py index 7535aedeb..93724357f 100644 --- a/cardano_node_tests/tests/tests_conway/test_hardfork.py +++ b/cardano_node_tests/tests/tests_conway/test_hardfork.py @@ -1,5 +1,6 @@ """Tests for Conway hard-fork.""" +import json import logging import allure @@ -10,6 +11,7 @@ from cardano_node_tests.tests import common from cardano_node_tests.tests import reqs_conway as reqc from cardano_node_tests.tests.tests_conway import conway_common +from cardano_node_tests.utils import cluster_nodes from cardano_node_tests.utils import clusterlib_utils from cardano_node_tests.utils import governance_utils from cardano_node_tests.utils import helpers @@ -55,7 +57,6 @@ def test_hardfork( """Test hardfork action. * create a "hardfork" action - * check that DReps cannot vote during the bootstrap period * vote to disapprove the action * vote to approve the action * check that the action is ratified @@ -66,8 +67,21 @@ def test_hardfork( cluster, governance_data = cluster_lock_governance temp_template = common.get_test_id(cluster) - if not conway_common.is_in_bootstrap(cluster_obj=cluster): - pytest.skip("The major protocol version needs to be 9.") + prot_ver_init = clusterlib_utils.get_protocol_version(cluster_obj=cluster) + prot_ver_target = prot_ver_init + 1 + + if prot_ver_init >= VERSIONS.LAST_KNOWN_PROTOCOL_VERSION: + pytest.skip( + "The major protocol version needs to be at most " + f"{VERSIONS.LAST_KNOWN_PROTOCOL_VERSION - 1}." + ) + + with open( + cluster_nodes.get_cluster_env().state_dir / "config-pool1.json", encoding="utf-8" + ) as in_json: + is_experimental_enabled = bool(json.load(in_json).get("ExperimentalHardForksEnabled")) + if not is_experimental_enabled: + pytest.skip("Experimental hard-forks are not enabled on the cluster.") init_return_account_balance = cluster.g_query.get_stake_addr_info( pool_user_lg.stake.address @@ -92,7 +106,7 @@ def test_hardfork( deposit_amt=deposit_amt, anchor_url=anchor_data.url, anchor_data_hash=anchor_data.hash, - protocol_major_version=10, + protocol_major_version=prot_ver_target, protocol_minor_version=0, prev_action_txid=prev_action_rec.txid, prev_action_ix=prev_action_rec.ix, @@ -149,23 +163,24 @@ def test_hardfork( action_ix = prop_action["actionId"]["govActionIx"] # Check that DReps cannot vote - reqc.cip026_04.start(url=helpers.get_vcs_link()) - with pytest.raises(clusterlib.CLIError) as excinfo: - conway_common.cast_vote( - cluster_obj=cluster, - governance_data=governance_data, - name_template=f"{temp_template}_no", - payment_addr=pool_user_lg.payment, - action_txid=action_txid, - action_ix=action_ix, - approve_cc=False, - approve_drep=False, - approve_spo=False, - ) - exc_value = str(excinfo.value) - with common.allow_unstable_error_messages(): - assert "DisallowedVotesDuringBootstrap ((DRepVoter" in exc_value, exc_value - reqc.cip026_04.success() + if prot_ver_init == 9: + reqc.cip026_04.start(url=helpers.get_vcs_link()) + with pytest.raises(clusterlib.CLIError) as excinfo: + conway_common.cast_vote( + cluster_obj=cluster, + governance_data=governance_data, + name_template=f"{temp_template}_no", + payment_addr=pool_user_lg.payment, + action_txid=action_txid, + action_ix=action_ix, + approve_cc=False, + approve_drep=False, + approve_spo=False, + ) + exc_value = str(excinfo.value) + with common.allow_unstable_error_messages(): + assert "DisallowedVotesDuringBootstrap ((DRepVoter" in exc_value, exc_value + reqc.cip026_04.success() # Vote & disapprove the action reqc.cip043_01.start(url=helpers.get_vcs_link()) @@ -177,6 +192,7 @@ def test_hardfork( action_txid=action_txid, action_ix=action_ix, approve_cc=False, + approve_drep=False if prot_ver_init > 9 else None, approve_spo=False, ) reqc.cli019.success() @@ -190,6 +206,7 @@ def test_hardfork( action_txid=action_txid, action_ix=action_ix, approve_cc=True, + approve_drep=True if prot_ver_init > 9 else None, approve_spo=True, ) @@ -221,18 +238,19 @@ def test_hardfork( action_txid=action_txid, action_ix=action_ix, approve_cc=False, + approve_drep=False if prot_ver_init > 9 else None, approve_spo=False, ) assert rat_gov_state["nextRatifyState"]["ratificationDelayed"], "Ratification not delayed" reqc.cip038_07.success() - assert rat_gov_state["currentPParams"]["protocolVersion"]["major"] == 9, ( + assert rat_gov_state["currentPParams"]["protocolVersion"]["major"] == prot_ver_init, ( "Incorrect major version" ) # Check enactment - expected_msgs = [("pool1.stdout", r"ProtVer \{pvMajor = Version 10")] + expected_msgs = [("pool1.stdout", rf"ProtVer \{{pvMajor = Version {prot_ver_target}")] with logfiles.expect_messages(expected_msgs): enact_epoch = cluster.wait_for_epoch(epoch_no=init_epoch + 2, padding_seconds=15) @@ -240,7 +258,7 @@ def test_hardfork( conway_common.save_gov_state( gov_state=enact_gov_state, name_template=f"{temp_template}_enact_{enact_epoch}" ) - assert enact_gov_state["currentPParams"]["protocolVersion"]["major"] == 10, ( + assert enact_gov_state["currentPParams"]["protocolVersion"]["major"] == prot_ver_target, ( "Incorrect major version" ) @@ -268,7 +286,8 @@ def test_hardfork( payment_addr=pool_user_lg.payment, action_txid=action_txid, action_ix=action_ix, - approve_drep=False, + approve_cc=False, + approve_drep=False if prot_ver_init > 9 else None, approve_spo=False, ) exc_value = str(excinfo.value) From 060e2b41737055e300acfd61b83c1e0fcd3531f1 Mon Sep 17 00:00:00 2001 From: Martin Kourim Date: Tue, 20 Jan 2026 12:17:05 +0100 Subject: [PATCH 3/6] feat(upgrade): make upgrade hardfork test protocol-version agnostic Refactor the `test_hardfork` test to dynamically determine the initial and target protocol versions instead of hardcoding them. Add checks to skip the test if the protocol version is already at or above the last known version, and if experimental hard-forks are not enabled. Adjust assertions and approval logic to use the determined protocol versions, improving test robustness and reusability across protocol upgrades. --- cardano_node_tests/tests/test_node_upgrade.py | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/cardano_node_tests/tests/test_node_upgrade.py b/cardano_node_tests/tests/test_node_upgrade.py index be474e22f..654594079 100644 --- a/cardano_node_tests/tests/test_node_upgrade.py +++ b/cardano_node_tests/tests/test_node_upgrade.py @@ -1,5 +1,6 @@ """Tests for node upgrade.""" +import json import logging import os import pathlib as pl @@ -13,6 +14,7 @@ from cardano_node_tests.cluster_management import cluster_management from cardano_node_tests.tests import common from cardano_node_tests.tests.tests_conway import conway_common +from cardano_node_tests.utils import cluster_nodes from cardano_node_tests.utils import clusterlib_utils from cardano_node_tests.utils import governance_setup from cardano_node_tests.utils import governance_utils @@ -105,7 +107,6 @@ def test_ignore_log_errors( ) @allure.link(helpers.get_vcs_link()) - @pytest.mark.disabled(reason="The test is not needed when we are already in PV10 on mainnet") @pytest.mark.skipif(UPGRADE_TESTS_STEP != 2, reason="runs only on step 2 of upgrade testing") def test_update_cost_models( self, @@ -130,7 +131,6 @@ def test_update_cost_models( ) @allure.link(helpers.get_vcs_link()) - @pytest.mark.disabled(reason="The test is not needed when we are already in PV10 on mainnet") @pytest.mark.skipif(UPGRADE_TESTS_STEP != 3, reason="runs only on step 3 of upgrade testing") def test_hardfork( self, @@ -142,6 +142,22 @@ def test_hardfork( cluster = cluster_singleton temp_template = common.get_test_id(cluster) + prot_ver_init = clusterlib_utils.get_protocol_version(cluster_obj=cluster) + prot_ver_target = prot_ver_init + 1 + + if prot_ver_init >= VERSIONS.LAST_KNOWN_PROTOCOL_VERSION: + pytest.skip( + "The major protocol version needs to be at most " + f"{VERSIONS.LAST_KNOWN_PROTOCOL_VERSION - 1}." + ) + + with open( + cluster_nodes.get_cluster_env().state_dir / "config-pool1.json", encoding="utf-8" + ) as in_json: + is_experimental_enabled = bool(json.load(in_json).get("ExperimentalHardForksEnabled")) + if not is_experimental_enabled: + pytest.skip("Experimental hard-forks are not enabled on the cluster.") + governance_data = governance_setup.get_default_governance( cluster_manager=cluster_manager, cluster_obj=cluster ) @@ -160,7 +176,7 @@ def test_hardfork( deposit_amt=deposit_amt, anchor_url=anchor_data.url, anchor_data_hash=anchor_data.hash, - protocol_major_version=10, + protocol_major_version=prot_ver_target, protocol_minor_version=0, prev_action_txid=prev_action_rec.txid, prev_action_ix=prev_action_rec.ix, @@ -214,6 +230,7 @@ def test_hardfork( action_txid=action_txid, action_ix=action_ix, approve_cc=True, + approve_drep=True if prot_ver_init > 9 else None, approve_spo=True, ) @@ -232,7 +249,7 @@ def test_hardfork( ) assert rat_action, "Action not found in ratified actions" - assert rat_gov_state["currentPParams"]["protocolVersion"]["major"] == 9, ( + assert rat_gov_state["currentPParams"]["protocolVersion"]["major"] == prot_ver_init, ( "Incorrect major version" ) @@ -242,7 +259,7 @@ def test_hardfork( conway_common.save_gov_state( gov_state=enact_gov_state, name_template=f"{temp_template}_enact_{enact_epoch}" ) - assert enact_gov_state["currentPParams"]["protocolVersion"]["major"] == 10, ( + assert enact_gov_state["currentPParams"]["protocolVersion"]["major"] == prot_ver_target, ( "Incorrect major version" ) From d0e8211135fbaa10528905fd1a23a361d5de0c3c Mon Sep 17 00:00:00 2001 From: Martin Kourim Date: Tue, 20 Jan 2026 12:21:55 +0100 Subject: [PATCH 4/6] feat(env): enable experimental features in CI envs Add ENABLE_EXPERIMENTAL=true to all nightly and regression environment files to ensure experimental features are enabled during CI runs. This prepares the test environments for upcoming hard-fork testing. --- .github/env_nightly | 1 + .github/env_nightly_cli | 1 + .github/env_nightly_dbsync | 1 + .github/env_regression | 1 + .github/env_regression_dbsync | 1 + 5 files changed, 5 insertions(+) diff --git a/.github/env_nightly b/.github/env_nightly index 6deac0586..d3799322c 100644 --- a/.github/env_nightly +++ b/.github/env_nightly @@ -1,2 +1,3 @@ CLUSTER_ERA=conway COMMAND_ERA=conway +ENABLE_EXPERIMENTAL=true diff --git a/.github/env_nightly_cli b/.github/env_nightly_cli index 417d6224f..b0a45f687 100644 --- a/.github/env_nightly_cli +++ b/.github/env_nightly_cli @@ -1,3 +1,4 @@ CLUSTER_ERA=conway COMMAND_ERA=conway CARDANO_CLI_REV=master +ENABLE_EXPERIMENTAL=true diff --git a/.github/env_nightly_dbsync b/.github/env_nightly_dbsync index 8cee02fed..c0aa7e8e2 100644 --- a/.github/env_nightly_dbsync +++ b/.github/env_nightly_dbsync @@ -5,3 +5,4 @@ DBSYNC_REV=13.6.0.5 DBSYNC_TAR_URL=https://github.com/IntersectMBO/cardano-db-sync/releases/download/13.6.0.5/cardano-db-sync-13.6.0.5-linux.tar.gz SMASH=true DBSYNC_SKIP_INDEXES=true +ENABLE_EXPERIMENTAL=true diff --git a/.github/env_regression b/.github/env_regression index e69de29bb..def922a62 100644 --- a/.github/env_regression +++ b/.github/env_regression @@ -0,0 +1 @@ +ENABLE_EXPERIMENTAL=true diff --git a/.github/env_regression_dbsync b/.github/env_regression_dbsync index dfc9a4dde..ab396da20 100644 --- a/.github/env_regression_dbsync +++ b/.github/env_regression_dbsync @@ -1 +1,2 @@ DBSYNC_SKIP_INDEXES=true +ENABLE_EXPERIMENTAL=true From ec169ecc5448f302f4e15001d35479334d2cb0fb Mon Sep 17 00:00:00 2001 From: Martin Kourim Date: Thu, 22 Jan 2026 13:20:30 +0100 Subject: [PATCH 5/6] feat(upgrade): add Dijkstra era support to upgrade script Extend the node upgrade pytest script to handle the Dijkstra era. This includes updating genesis file handling, hashes, and configuration generation for the new era. Also, improve DRY_RUN flag usage and ensure step1 binaries are initialized only when needed. --- .github/node_upgrade_pytest.sh | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/.github/node_upgrade_pytest.sh b/.github/node_upgrade_pytest.sh index 3f21c5ae1..520721de7 100755 --- a/.github/node_upgrade_pytest.sh +++ b/.github/node_upgrade_pytest.sh @@ -6,16 +6,15 @@ trap 'echo "Error at line $LINENO"' ERR retval=0 export CARDANO_NODE_SOCKET_PATH="$CARDANO_NODE_SOCKET_PATH_CI" +STATE_CLUSTER="${CARDANO_NODE_SOCKET_PATH_CI%/*}" +# default era to use, can be overridden in each step if needed export CLUSTER_ERA="${CLUSTER_ERA:-"conway"}" -export COMMAND_ERA="$CLUSTER_ERA" - +export COMMAND_ERA="${COMMAND_ERA:-"$CLUSTER_ERA"}" CLUSTER_SCRIPTS_DIR="$WORKDIR/cluster0_${CLUSTER_ERA}" -STATE_CLUSTER="${CARDANO_NODE_SOCKET_PATH_CI%/*}" # init dir for step1 binaries STEP1_BIN="$WORKDIR/step1-bin" -mkdir -p "$STEP1_BIN" # init reports dir before each step export REPORTS_DIR="${REPORTS_DIR:-".reports"}" @@ -71,6 +70,7 @@ if [ "$1" = "step1" ]; then "$CLUSTER_SCRIPTS_DIR/start-cluster" || exit 6 # backup the original cardano binaries + mkdir -p "$STEP1_BIN" ln -s "$(command -v cardano-node)" "$STEP1_BIN/cardano-node-step1" ln -s "$(command -v cardano-cli)" "$STEP1_BIN/cardano-cli-step1" @@ -119,7 +119,7 @@ elif [ "$1" = "step2" ]; then # re-generate config and topology files CARDANO_NODE_SOCKET_PATH="$WORKDIR/dry_config_step2/state-cluster0/bft1.socket" \ - DRY_RUN=1 \ + DRY_RUN=true \ "$CLUSTER_SCRIPTS_DIR/start-cluster" # copy newly generated topology files to the cluster state dir @@ -137,7 +137,7 @@ elif [ "$1" = "step2" ]; then "$WORKDIR/dry_config_step2/state-cluster0/shelley/genesis.conway.json" > "$STATE_CLUSTER/shelley/genesis.conway.json" fi - # use the original Shelley and Byron genesis files + # use the original Byron, Shelley and Dijkstra genesis files BYRON_GENESIS_HASH="$(jq -r ".ByronGenesisHash" "$STATE_CLUSTER/config-bft1.json")" SHELLEY_GENESIS_HASH="$(jq -r ".ShelleyGenesisHash" "$STATE_CLUSTER/config-bft1.json")" # hashes of the original alonzo and conway genesis files @@ -274,7 +274,8 @@ elif [ "$1" = "step3" ]; then # re-generate config and topology files CARDANO_NODE_SOCKET_PATH="$WORKDIR/dry_config_step3/state-cluster0/bft1.socket" \ - DRY_RUN=1 \ + ENABLE_EXPERIMENTAL=true \ + DRY_RUN=true \ "$CLUSTER_SCRIPTS_DIR/start-cluster" # copy newly generated topology files to the cluster state dir @@ -285,6 +286,12 @@ elif [ "$1" = "step3" ]; then SHELLEY_GENESIS_HASH="$(jq -r ".ShelleyGenesisHash" "$STATE_CLUSTER/config-bft1.json")" ALONZO_GENESIS_HASH="$(jq -r ".AlonzoGenesisHash" "$STATE_CLUSTER/config-bft1.json")" CONWAY_GENESIS_HASH="$(jq -r ".ConwayGenesisHash" "$STATE_CLUSTER/config-bft1.json")" + DIJKSTRA_GENESIS_HASH="$(jq -r ".DijkstraGenesisHash" "$STATE_CLUSTER/config-bft1.json")" + if [ -z "$DIJKSTRA_GENESIS_HASH" ] || [ "$DIJKSTRA_GENESIS_HASH" = "null" ]; then + cp -f "$WORKDIR/dry_config_step3/state-cluster0/shelley/genesis.dijkstra.json" "$STATE_CLUSTER/shelley" + DIJKSTRA_GENESIS_HASH="$(cardano-cli latest genesis hash --genesis \ + "$STATE_CLUSTER/shelley/genesis.dijkstra.json")" + fi for conf in "$WORKDIR"/dry_config_step3/state-cluster0/config-*.json; do fname="${conf##*/}" jq \ @@ -292,10 +299,12 @@ elif [ "$1" = "step3" ]; then --arg shelley_hash "$SHELLEY_GENESIS_HASH" \ --arg alonzo_hash "$ALONZO_GENESIS_HASH" \ --arg conway_hash "$CONWAY_GENESIS_HASH" \ + --arg dijkstra_hash "$DIJKSTRA_GENESIS_HASH" \ '.ByronGenesisHash = $byron_hash | .ShelleyGenesisHash = $shelley_hash | .AlonzoGenesisHash = $alonzo_hash - | .ConwayGenesisHash = $conway_hash' \ + | .ConwayGenesisHash = $conway_hash + | .DijkstraGenesisHash = $dijkstra_hash' \ "$conf" > "$STATE_CLUSTER/$fname" done From 3b3cb9d3b798bf8e06de36d5ff07ec5827a285ef Mon Sep 17 00:00:00 2001 From: Martin Kourim Date: Thu, 22 Jan 2026 13:23:16 +0100 Subject: [PATCH 6/6] docs(test_results): update nightly upgrade test steps Clarify protocol version references in nightly upgrade test documentation. Specify "Conway protocol version 10" in step 1, add "cost model update" to step 2, and note "hard-fork to Conway protocol version 11" in step 3. Improves clarity of upgrade process and test coverage. --- .../source/test_results/nightly_system_tests.rst | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src_docs/source/test_results/nightly_system_tests.rst b/src_docs/source/test_results/nightly_system_tests.rst index 5d0ed4ee0..639dea0c9 100644 --- a/src_docs/source/test_results/nightly_system_tests.rst +++ b/src_docs/source/test_results/nightly_system_tests.rst @@ -24,13 +24,13 @@ Nightly results * network in Conway era * protocol version 10 * P2P network topology - * Constitutional Commitee has 5 members + * Constitutional Committee has 5 members * cluster starts directly in Conway era * `nightly-dbsync `__: |nightly-dbsync-badge| * network in Conway era * protocol version 10 * P2P network topology - * Constitutional Commitee has 5 members + * Constitutional Committee has 5 members * cluster starts directly in Conway era * DB Sync testing enabled * `nightly-cli `__: |nightly-cli-badge| @@ -38,7 +38,7 @@ Nightly results * network in Conway era * protocol version 10 * P2P network topology - * Constitutional Commitee has 5 members + * Constitutional Committee has 5 members * cluster starts directly in Conway era Nightly upgrade testing @@ -46,16 +46,17 @@ Nightly upgrade testing * `Step 1 `__: |nightly-upgrade-step1-badge| * use the `latest cardano-node release `__ for Mainnet - * network in Conway era - * protocol version 10 - * Constitutional Commitee has 5 members + * Conway protocol version 10 + * Constitutional Committee has 5 members * smoke tests * governance info action test * `Step 2 `__: |nightly-upgrade-step2-badge| * upgrade all nodes except one to the latest cardano-node master + * cost model update * smoke tests * `Step 3 `__: |nightly-upgrade-step3-badge| * upgrade the last remaining node to latest cardano-node master + * hard-fork to Conway protocol version 11 * smoke tests * governance treasury withdrawal action test