git.delta.rocks / unique-network / refs/commits / 1a650ecf2bf7

difftreelog

ci move nodeonly to baedeker

Yaroslav Bolyukin2023-09-03parent: #56c4087.patch.diff
in: master

10 files changed

added.baedeker/node-only.jsonnetdiffbeforeafterboth
--- /dev/null
+++ b/.baedeker/node-only.jsonnet
@@ -0,0 +1,43 @@
+local
+m = import 'baedeker-library/mixin/spec.libsonnet',
+;
+
+local relay = {
+	name: 'relay',
+	bin: 'bin/polkadot',
+	validatorIdAssignment: 'staking',
+	spec: {Genesis:{
+		chain: 'rococo-local',
+		modify:: m.genericRelay($),
+	}},
+	nodes: {
+		[name]: {
+			bin: $.bin,
+			wantedKeys: 'relay',
+		},
+		for name in ['alice', 'bob', 'charlie', 'dave', 'eve']
+	},
+};
+
+local unique = {
+	name: 'unique',
+	bin: 'bin/unique',
+	paraId: 1001,
+	spec: {Genesis:{
+		modify:: m.genericPara($),
+	}},
+	nodes: {
+		[name]: {
+			bin: $.bin,
+			wantedKeys: 'para',
+		},
+		for name in ['alice', 'bob']
+	},
+};
+
+relay + {
+	parachains: {
+		[para.name]: para,
+		for para in [unique]
+	},
+}
deleted.docker/Dockerfile-parachain-node-only.j2diffbeforeafterboth
--- a/.docker/Dockerfile-parachain-node-only.j2
+++ /dev/null
@@ -1,67 +0,0 @@
-# ===== Rust builder =====
-FROM uniquenetwork/services:latest as rust-builder
-ENV CARGO_HOME="/cargo-home"
-ENV PATH="/cargo-home/bin:$PATH"
-ENV TZ=UTC
-
-RUN rustup toolchain uninstall $(rustup toolchain list) && \
-    rustup toolchain install {{ RUST_TOOLCHAIN }} && \
-    rustup default {{ RUST_TOOLCHAIN }} && \
-    rustup target list --installed && \
-    rustup show
-RUN rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }}
-
-RUN mkdir /unique_parachain
-WORKDIR /unique_parachain
-
-
-# ===== BUILD current version ======
-FROM rust-builder as builder-unique-current
-
-ARG PROFILE=release
-
-WORKDIR /unique_parachain
-
-RUN git clone -b {{ MAINNET_BRANCH }} https://github.com/UniqueNetwork/unique-chain.git . && \
-    cargo build --features={{ NETWORK }}-runtime --$PROFILE
-
-# ===== BUILD target version ======
-FROM rust-builder as builder-unique-target
-
-ARG PROFILE=release
-
-COPY . /unique_parachain
-WORKDIR /unique_parachain
-
-RUN cargo build --features={{ NETWORK }}-runtime --$PROFILE
-
-# ===== RUN ======
-
-FROM ubuntu:22.04
-
-RUN apt-get -y update && \
-    apt-get -y install curl git && \
-    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash && \
-    export NVM_DIR="$HOME/.nvm" && \
-    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
-    nvm install v16.16.0 && \
-    nvm use v16.16.0
-
-RUN git clone https://github.com/uniquenetwork/polkadot-launch -b {{ POLKADOT_LAUNCH_BRANCH }}
-
-COPY --from=builder-unique-current /unique_parachain/target/release/unique-collator /unique-chain/current/release/
-
-COPY --from=builder-unique-target /unique_parachain/target/release/unique-collator /unique-chain/target/release/
-COPY --from=builder-unique-target /unique_parachain/target/release/wbuild/{{ WASM_NAME }}-runtime/{{ WASM_NAME }}_runtime.compact.compressed.wasm /unique-chain/target/release/wbuild/{{ WASM_NAME }}-runtime/{{ WASM_NAME }}_runtime.compact.compressed.wasm
-COPY --from=builder-unique-target /unique_parachain/.docker/forkless-config/launch-config-node-only.json /polkadot-launch/launch-config.json
-
-COPY --from=uniquenetwork/builder-polkadot:{{ POLKADOT_BUILD_BRANCH }} /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/
-COPY --from=uniquenetwork/builder-polkadot:{{ POLKADOT_BUILD_BRANCH }} /unique_parachain/polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm /polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm
-COPY --from=uniquenetwork/builder-polkadot:{{ POLKADOT_BUILD_BRANCH }} /unique_parachain/polkadot/target/release/wbuild/rococo-runtime/rococo_runtime.compact.compressed.wasm /polkadot/target/release/wbuild/rococo-runtime/rococo_runtime.compact.compressed.wasm
-
-CMD export NVM_DIR="$HOME/.nvm" && \
-    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
-    cd /polkadot-launch && \
-    npm install --global yarn && \
-    yarn install && \
-    yarn start launch-config.json --test-upgrade-parachains -w -n
added.docker/Dockerfile-unique-releasediffbeforeafterboth
--- /dev/null
+++ b/.docker/Dockerfile-unique-release
@@ -0,0 +1,49 @@
+# ===== Rust builder =====
+FROM ubuntu:22.04 as rust-builder
+LABEL maintainer="Unique.Network"
+
+ENV CARGO_HOME="/cargo-home"
+ENV PATH="/cargo-home/bin:$PATH"
+ENV TZ=UTC
+RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
+
+RUN apt-get update && \
+    apt-get install -y curl cmake pkg-config libssl-dev git clang llvm libudev-dev protobuf-compiler && \
+    apt-get clean && \
+    rm -r /var/lib/apt/lists/*
+
+RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none
+
+ARG RUST_TOOLCHAIN
+RUN echo "Using Rust '$RUST_TOOLCHAIN'" && \
+    rustup toolchain install $RUST_TOOLCHAIN && \
+    rustup target add wasm32-unknown-unknown --toolchain ${RUST_TOOLCHAIN} && \
+    rustup default $RUST_TOOLCHAIN && \
+    rustup target list --installed && \
+    rustup show
+
+RUN mkdir /unique_parachain
+WORKDIR /unique_parachain
+
+# ===== BUILD POLKADOT =====
+FROM rust-builder as builder-polkadot-bin
+
+WORKDIR /unique_parachain
+
+ARG UNIQUE_VERSION
+RUN git clone -b "$UNIQUE_VERSION" --depth 1 https://github.com/uniquenetwork/unique-chain.git
+
+ARG RUNTIME_FEATURES
+RUN --mount=type=cache,target=/cargo-home/registry \
+    --mount=type=cache,target=/cargo-home/git \
+    --mount=type=cache,target=/unique_parachain/polkadot/target \
+    cd unique-chain && \
+    CARGO_INCREMENTAL=0 cargo build --release --features="$RUNTIME_FEATURES" --locked && \
+    mv ./target/release/unique-collator /unique_parachain/unique-chain/
+
+# ===== BIN ======
+
+FROM ubuntu:22.04 as builder-polkadot
+
+COPY --from=builder-polkadot-bin /unique_parachain/unique-chain/unique-collator /bin/unique-collator
+ENTRYPOINT ["/bin/unique-collator"]
deleted.docker/docker-compose.node-only.j2diffbeforeafterboth
--- a/.docker/docker-compose.node-only.j2
+++ /dev/null
@@ -1,16 +0,0 @@
-version: "3.5"
-
-services:
-  node-only:
-    image: uniquenetwork/ci-node-only-local:{{ NETWORK }}-{{ BUILD_TAG }}
-    container_name: node-only
-    expose:
-      - 9944
-      - 9945
-      - 9933
-      - 9844
-    ports:
-      - 127.0.0.1:9944:9944
-      - 127.0.0.1:9945:9945
-      - 127.0.0.1:9933:9933
-      - 127.0.0.1:9844:9844
added.github/actions/buildContainer/action.ymldiffbeforeafterboth
--- /dev/null
+++ b/.github/actions/buildContainer/action.yml
@@ -0,0 +1,59 @@
+name: Build or pull container
+description: ''
+inputs:
+  container:
+    description: Which name to fetch/push
+    required: true
+  tag:
+    description: Which tag to fetch/push
+    required: true
+  context:
+    description: Container context
+    required: true
+    default: "."
+  dockerfile:
+    description: Path to dockerfile (relative to context)
+    required: true
+  args:
+    description: Docker build extra args
+    default: ''
+  dockerhub_username:
+    description: Secret
+  dockerhub_token:
+    description: Secret
+outputs:
+  name:
+    description: Full container name
+    value: ${{ steps.ensure.outputs.name }}
+runs:
+  using: "composite"
+  steps:
+    - name: Ensure have ${{ inputs.container }}:${{ inputs.tag }}
+      id: ensure
+      run: |
+        echo "Wanted container: ${{ inputs.container }}:${{ inputs.tag }}"
+
+        TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${{ inputs.dockerhub_username }}'", "password": "'${{ inputs.dockerhub_token }}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)
+
+        # Get TAGS from DOCKERHUB
+        TAGS=$(curl -s -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/${{ inputs.container }}/tags/?page_size=100 | jq -r '."results"[]["name"]' || echo "")
+
+        echo "Available tags:"
+        echo "$TAGS"
+
+        # Check correct version POLKADOT and build it if it doesn't exist in POLKADOT TAGS
+        if [[ ${TAGS[*]} =~ (^|[[:space:]])"${{ inputs.tag }}"($|[[:space:]]) ]]; then
+          echo "Repository has needed version, pulling";
+          docker pull ${{ inputs.container }}:${{ inputs.tag }}
+        else
+          echo "Repository had no needed version, so build it";
+          cd "${{ inputs.context }}" && docker build --file "${{ inputs.dockerfile }}" \
+            $BUILD_ARGS --tag ${{ inputs.container }}:${{ inputs.tag }} \
+            .
+          echo "Push built version to the repository";
+          docker push ${{ inputs.container }}:${{ inputs.tag }} || true
+        fi
+        echo "name=${{ inputs.container }}:${{ inputs.tag }}" >> $GITHUB_OUTPUT
+      env:
+        BUILD_ARGS: ${{ inputs.args }}
+      shell: bash
modified.github/workflows/node-only-update.ymldiffbeforeafterboth
after · .github/workflows/node-only-update.yml
1# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586837028/Nodes+only+update2# Node only update with restart polkadot-launch process.34name: nodes-only update56# Triger: only call from main workflow(re-usable workflows)7on:8  workflow_call:91011# A workflow run is made up of one or more jobs that can run sequentially or in parallel12jobs:1314  prepare-execution-matrix:1516    name: execution matrix1718    runs-on: self-hosted-ci19    outputs:20      matrix: ${{ steps.create_matrix.outputs.matrix }}2122    steps:2324      - name: Clean Workspace25        uses: AutoModality/action-clean@v1.1.02627      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it28      - uses: actions/checkout@v3.1.029        with:30          ref: ${{ github.head_ref }}  #Checking out head commit3132      - name: Read .env file33        uses: xom9ikk/dotenv@v23435      - name: Create Execution matrix36        uses: CertainLach/create-matrix-action@v437        id: create_matrix38        with:39          matrix: |40            network {opal}, mainnet_branch {${{ env.OPAL_MAINNET_BRANCH }}}, relay_branch {${{ env.UNIQUEWEST_MAINNET_BRANCH }}}, runtime_features {opal-runtime}41            network {sapphire}, mainnet_branch {${{ env.SAPPHIRE_MAINNET_BRANCH }}}, relay_branch {${{ env.UNIQUEEAST_MAINNET_BRANCH }}}, runtime_features {sapphire-runtime}42            network {quartz}, mainnet_branch {${{ env.QUARTZ_MAINNET_BRANCH }}}, relay_branch {${{ env.KUSAMA_MAINNET_BRANCH }}}, runtime_features {quartz-runtime}43            network {unique}, mainnet_branch {${{ env.UNIQUE_MAINNET_BRANCH }}}, relay_branch {${{ env.POLKADOT_MAINNET_BRANCH }}}, runtime_features {unique-runtime}4445  node-only-update-build:4647    needs: prepare-execution-matrix48    # The type of runner that the job will run on49    runs-on: [self-hosted-ci]5051    timeout-minutes: 2880           # 48 hours for execution jobs.5253    name: ${{ matrix.network }}-build5455    continue-on-error: true         #Do not stop testing of matrix runs failed.  As it decided during PR review - it required 50/50& Let's check it with false.5657    strategy:58      matrix:59        include: ${{fromJson(needs.prepare-execution-matrix.outputs.matrix)}}6061    steps:6263      - name: Skip if pull request is in Draft64        if: github.event.pull_request.draft == true65        run: exit 16667      - name: Clean Workspace68        uses: AutoModality/action-clean@v1.1.06970      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it71      - uses: actions/checkout@v3.1.072        with:73          ref: ${{ github.head_ref }}  #Checking out head commit7475      # Prepare SHA  76      - name: Prepare SHA77        uses: ./.github/actions/prepare7879      - name: Read .env file80        uses: xom9ikk/dotenv@v28182      - name: Log in to Docker Hub83        uses: docker/login-action@v2.1.084        with:85          username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}86          password: ${{ secrets.CORE_DOCKERHUB_TOKEN }}8788      - name: Generate ENV related extend Dockerfile file for POLKADOT89        uses: cuchi/jinja2-action@v1.2.090        with:91          template: .docker/Dockerfile-polkadot.j292          output_file: .docker/Dockerfile-polkadot.${{ matrix.relay_branch }}.yml93          variables: |94            RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}95            POLKADOT_BUILD_BRANCH=${{ matrix.relay_branch }}96      - name: Prepare polkadot97        uses: ./.github/actions/buildContainer98        id: polkadot99        with:100          container: uniquenetwork/builder-polkadot101          tag: ${{ matrix.relay_branch }}102          context: .docker103          dockerfile: Dockerfile-polkadot.${{ matrix.relay_branch }}.yml104          dockerhub_username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}105          dockerhub_token: ${{ secrets.CORE_DOCKERHUB_TOKEN }}106107      - name: Prepare mainnet108        uses: ./.github/actions/buildContainer109        id: mainnet110        with:111          container: uniquenetwork/ci-node-only-${{ matrix.network }}112          tag: ${{ matrix.mainnet_branch }}113          context: .docker114          dockerfile: Dockerfile-unique-release115          args: |116            --build-arg RUNTIME_FEATURES=${{ matrix.runtime_features }}117            --build-arg RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}118            --build-arg UNIQUE_VERSION=${{ matrix.mainnet_branch }}119          dockerhub_username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}120          dockerhub_token: ${{ secrets.CORE_DOCKERHUB_TOKEN }}121122      - name: Prepare latest123        uses: ./.github/actions/buildContainer124        id: latest125        with:126          container: uniquenetwork/ci-node-only-${{ matrix.network }}127          tag: ${{ env.REF_SLUG }}-${{ env.BUILD_SHA }}128          context: .129          dockerfile: .docker/Dockerfile-unique130          args: |131            --build-arg RUNTIME_FEATURES=${{ matrix.runtime_features }}132            --build-arg RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}133          dockerhub_username: ${{ secrets.CORE_DOCKERHUB_USERNAME }}134          dockerhub_token: ${{ secrets.CORE_DOCKERHUB_TOKEN }}135136      - name: Checkout at '${{ matrix.mainnet_branch }}' branch137        uses: actions/checkout@master138        with:139          ref: ${{ github.head_ref }}140          # ref: ${{ matrix.mainnet_branch }}  #Checking out head commit141          path: ${{ matrix.mainnet_branch }}142143      - uses: actions/setup-node@v3.5.1144        with:145          node-version: 16146147      - name: Install baedeker148        uses: UniqueNetwork/baedeker-action/setup@built149150      - name: Setup library151        run: mkdir -p .baedeker/vendor/ && git clone https://github.com/UniqueNetwork/baedeker-library .baedeker/vendor/baedeker-library152153      - name: Start network154        uses: UniqueNetwork/baedeker-action@built155        id: bdk156        with:157          jpath: |158            .baedeker/vendor159          tla-str: |160            relay_spec=westend-local161          inputs: |162            .baedeker/node-only.jsonnet163            snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/polkadot':{dockerImage:'${{ steps.polkadot.outputs.name }}'}})164            ephemeral:snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'${{ steps.mainnet.outputs.name }}'}}, extra_node_mixin = {legacyRpc: true})165166      - name: Run Parallel tests before Node Parachain upgrade167        working-directory: ${{ matrix.mainnet_branch }}/tests168        if: success() || failure()169        run: |170          yarn171          yarn add mochawesome172          ./scripts/wait_for_first_block.sh173          echo "Ready to start tests"174          NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW}175        env:176          RPC_URL: ${{ env.RELAY_UNIQUE_HTTP_URL }}177178      - name: Run Sequential tests before Node Parachain upgrade179        if: success() || failure()180        working-directory: ${{ matrix.mainnet_branch }}/tests181        run: NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW}182        env:183          RPC_URL: ${{ env.RELAY_UNIQUE_HTTP_URL }}184185      - name: "Reconcile: only one old node"186        if: success() || failure()187        uses: UniqueNetwork/baedeker-action/reconcile@built188        with:189          baedeker: ${{ steps.bdk.baedeker }}190          # Chain should always be built with the mainnet spec, this we first set binary for all nodes expect one, then set mainnet binary for the last node, and then force chainspec to be still generated from mainnet191          inputs: |192            snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'${{ steps.latest.outputs.name }}'}}, leave = 1, for_chain = false)193            snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'${{ steps.mainnet.outputs.name }}'}}, extra_node_mixin = {legacyRpc: true}, for_chain = false)194            snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'${{ steps.mainnet.outputs.name }}'}})195196      - name: Ensure network is alive197        if: success() || failure()    # run this step even if previous step failed198        run: |199          ./tests/scripts/wait_for_first_block.sh200        env:201          RPC_URL: ${{ env.RELAY_UNIQUE_HTTP_URL }}202203      - name: "Reconcile: all nodes are updated"204        if: success() || failure()205        uses: UniqueNetwork/baedeker-action/reconcile@built206        with:207          baedeker: ${{ steps.bdk.baedeker }}208          # Chain should always be built with the mainnet spec, this we first set binary for all nodes, and then force chainspec to be still generated from mainnet209          inputs: |210            snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'${{ steps.latest.outputs.name }}'}}, for_chain = false)211            snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/unique':{dockerImage:'${{ steps.mainnet.outputs.name }}'}})212213      - name: Run Parallel tests after Node Parachain upgrade214        working-directory: ${{ matrix.mainnet_branch }}/tests215        if: success() || failure()    # run this step even if previous step failed216        run: |217          yarn install218          yarn add mochawesome219          ./scripts/wait_for_first_block.sh220          echo "Ready to start tests"221          NOW=$(date +%s) && yarn testParallel --reporter mochawesome --reporter-options reportFilename=test-parallel-${NOW}222        env:223          RPC_URL: ${{ env.RELAY_UNIQUE_HTTP_URL }}224225      - name: Run Sequential tests after Node Parachain upgrade226        if: success() || failure()227        working-directory: ${{ matrix.mainnet_branch }}/tests228        run: NOW=$(date +%s) && yarn testSequential --reporter mochawesome --reporter-options reportFilename=test-sequential-${NOW}229        env:230          RPC_URL: ${{ env.RELAY_UNIQUE_HTTP_URL }}231232      - name: Remove builder cache233        if: always()                   # run this step always234        run: |235          docker system prune -f
modified.github/workflows/xcm.ymldiffbeforeafterboth
--- a/.github/workflows/xcm.yml
+++ b/.github/workflows/xcm.yml
@@ -312,7 +312,7 @@
           jpath: |
             .baedeker/vendor
           tla-str: |
-            relay_spec=rococo
+            relay_spec=westend-local
           inputs: |
             .baedeker/xcm-${{ matrix.network }}.jsonnet
             snippet:(import 'baedeker-library/ops/rewrites.libsonnet').rewriteNodePaths({'bin/polkadot':{dockerImage:'uniquenetwork/builder-polkadot:${{ matrix.relay_branch }}'}})
modifiedtests/scripts/wait_for_first_block.shdiffbeforeafterboth
--- a/tests/scripts/wait_for_first_block.sh
+++ b/tests/scripts/wait_for_first_block.sh
@@ -4,24 +4,40 @@
 
 . $DIR/functions.sh
 
-function is_started {
+last_block_id=0
+block_id=0
+function get_block {
 	block_id_hex=$(do_rpc chain_getHeader | jq -r .result.number)
 	block_id=$((${block_id_hex}))
 	echo Id = $block_id
-	if (( $block_id > 1 )); then
+}
+
+function had_new_block {
+	last_block_id=$block_id
+	get_block
+	if (( last_block_id != 0 && block_id > last_block_id )); then
 		return 0
 	fi
 	return 1
 }
 
-while ! is_started; do
-	echo "Waiting for first block..."
+function reset_check {
+	last_block_id=0
+	block_id=0
+}
+
+while ! had_new_block; do
+	echo "Waiting for next block..."
 	sleep 12
 done
+reset_check
+
 echo "Chain is running, but lets wait for another block after a minute, to avoid startup flakiness."
-sleep 120
-while ! is_started; do
-	echo "Waiting for second block..."
+sleep 60
+
+while ! had_new_block; do
+	echo "Waiting for another block..."
 	sleep 12
 done
+
 echo "Chain is running!"
modifiedtests/src/util/globalSetup.tsdiffbeforeafterboth
--- a/tests/src/util/globalSetup.ts
+++ b/tests/src/util/globalSetup.ts
@@ -112,4 +112,8 @@
     });
 };
 
-globalSetup().catch(() => process.exit(1));
+globalSetup().catch(e => {
+  console.error('Setup error');
+  console.error(e);
+  process.exit(1)
+});
modifiedtests/src/xcm/xcmQuartz.test.tsdiffbeforeafterboth
--- a/tests/src/xcm/xcmQuartz.test.ts
+++ b/tests/src/xcm/xcmQuartz.test.ts
@@ -481,7 +481,7 @@
 
     await usingKaruraPlaygrounds(karuraUrl, async (helper) => {
       const destination = {
-        V1: {
+        V2: {
           parents: 1,
           interior: {
             X1: {
@@ -591,7 +591,7 @@
   itSub('Should connect to Karura and send QTZ back', async ({helper}) => {
     await usingKaruraPlaygrounds(karuraUrl, async (helper) => {
       const destination = {
-        V1: {
+        V2: {
           parents: 1,
           interior: {
             X2: [
@@ -653,7 +653,7 @@
     const [targetAccount] = await helper.arrange.createAccounts([targetAccountBalance], alice);
 
     const quartzMultilocation = {
-      V1: {
+      V2: {
         parents: 1,
         interior: {
           X1: {Parachain: QUARTZ_CHAIN},
@@ -716,7 +716,7 @@
     const [targetAccount] = await helper.arrange.createAccounts([0n], alice);
 
     const quartzMultilocation = {
-      V1: {
+      V2: {
         parents: 1,
         interior: {
           X1: {
@@ -797,7 +797,6 @@
   let quartzParachainMultilocation: any;
   let quartzAccountMultilocation: any;
   let quartzCombinedMultilocation: any;
-  let quartzCombinedMultilocationKarura: any; // TODO remove it when Karura goes V2
 
   let messageSent: any;
 
@@ -835,15 +834,6 @@
 
       quartzCombinedMultilocation = {
         V2: {
-          parents: 1,
-          interior: {
-            X2: [quartzParachainJunction, quartzAccountJunction],
-          },
-        },
-      };
-
-      quartzCombinedMultilocationKarura = {
-        V1: {
           parents: 1,
           interior: {
             X2: [quartzParachainJunction, quartzAccountJunction],
@@ -871,7 +861,7 @@
       const id = {
         Token: 'KAR',
       };
-      const destination = quartzCombinedMultilocationKarura;
+      const destination = quartzCombinedMultilocation;
       await helper.xTokens.transfer(alice, id, testAmount, destination, 'Unlimited');
 
       messageSent = await helper.wait.expectEvent(maxWaitBlocks, Event.XcmpQueue.XcmpMessageSent);