diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9ae09fdebd..6bf62d6d89 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -253,83 +253,39 @@ jobs: VERSION: ${{ github.ref }} BUILD_TYPE: "${{ matrix.options.build-type }}" run: ./housekeeping/docker/kagome/build_and_push.sh - - Push-self-hosted-PR: - if: ${{ contains( github.event.pull_request.labels.*.name, 'Non-master push') }} - strategy: - fail-fast: false - matrix: - options: - - name: "Self-hosted: Push Debug Docker image" - build-type: "Debug" - - name: "Self-hosted: Push Release Docker image" - build-type: "Release" - - name: "Self-hosted: Push RelWithDebInfo Docker image" - build-type: "RelWithDebInfo" - runs-on: [ actions-runner-controller ] - timeout-minutes: 120 - container: qdrvm/kagome-dev:9-minideb - steps: - - uses: actions/checkout@dc323e67f16fb5f7663d20ff7941f27f5809e9b6 - with: - ref: ${{ github.event.pull_request.head.sha }} - - uses: actions/cache@937d24475381cd9c75ae6db12cb4e79714b926ed - with: - path: ${{ env.CACHE_PATHS }} - key: ${{ github.job }}-${{ env.CACHE_VERSION }} - - run: git config --global --add safe.directory /__w/kagome/kagome - - run: git fetch --prune --unshallow - - name: build - env: - BUILD_TYPE: "${{ matrix.options.build-type }}" - run: ./housekeeping/docker/kagome-dev/make.sh - - uses: azure/docker-login@83efeb77770c98b620c73055fbb59b2847e17dc0 - with: - login-server: https://index.docker.io/v1/ - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_TOKEN }} - - name: docker pack and push - env: - VERSION: ${{ github.ref }} - BUILD_TYPE: "${{ matrix.options.build-type }}" - run: ./housekeeping/docker/kagome/build_and_push.sh zombie-tests: - if: false + if: true strategy: fail-fast: false matrix: options: - - name: "Parachains smoke test" - test: "test0001" - - name: "Parachains smoke test kagome" - test: "test0001_kagome" - - name: "Parachains upgrade smoke test" - test: "test0002" - - name: "Parachains upgrade smoke test kagome" - test: "test0002_kagome" - - name: "Parachains smoke test cumulus" - test: "test0003" - - name: "Parachains smoke test cumulus kagome" - test: "test0003_kagome" - - name: "Runtime upgrade" - test: "test0004" - - name: "Runtime upgrade kagome" - test: "test0004_kagome" - - name: "Dispute valid block" - test: "test0005" - - name: "Parachains disputes" - test: "test0006" - - name: "Deregister register validator smoke" - test: "test0008" - - name: "Basic warp sync" - test: "test0009" - - name: "Validators warp sync" - test: "test0010" - - name: "Block building warp sync" - test: "test0011" + - name: "PVF preparation & execution time" + test: "test-polkadot-functional-0001-parachains-pvf" + - name: "Disputes initiation, conclusion and lag" + test: "test-polkadot-functional-0002-parachains-disputes" + - name: "BEEFY voting and finality, test MMR proofs. Assumes Rococo sessions of 1 minute" + test: "test-polkadot-functional-0003-beefy-and-mmr" + - name: "Dispute finality lag when 1/3 of parachain validators always attempt to include an invalid block" + test: "test-polkadot-functional-0004-parachains-garbage-candidate" + - name: "Past-session dispute slashing" + test: "test-polkadot-functional-0005-parachains-disputes-past-session" + - name: "Test if parachains make progress with most of approvals being tranch0" + test: "test-polkadot-functional-0006-parachains-max-tranche0" + - name: "Test if disputes triggered on finalized blocks within scope always end as valid" + test: "test-polkadot-functional-0007-dispute-freshly-finalized" + - name: "Test if disputes triggered on finalized blocks out of scope never get to be confirmed and concluded" + test: "test-polkadot-functional-0008-dispute-old-finalized" + - name: "Approval voting coalescing does not lag finality" + test: "test-polkadot-functional-0009-approval-voting-coalescing" + - name: "Test validator disabling effects" + test: "test-polkadot-functional-0010-validator-disabling" + - name: "Test we are producing blocks at 6 seconds clip" + test: "test-polkadot-functional-0011-async-backing-6-seconds-rate" runs-on: [ actions-runner-controller ] timeout-minutes: 120 + env: + BRANCH_NAME: ${{ github.head_ref }} needs: [Push-self-hosted] steps: - name: Set owner of working dir recurively @@ -337,7 +293,7 @@ jobs: - uses: actions/checkout@dc323e67f16fb5f7663d20ff7941f27f5809e9b6 - name: build zombie-tester working-directory: ./zombienet/docker - run: make tester + run: make tester BRANCH_NAME=${{ env.BRANCH_NAME }} - name: Run test working-directory: ./zombienet/docker run: make ${{ matrix.options.test }} diff --git a/.github/workflows/zombie-tests.yaml b/.github/workflows/zombie-tests.yaml index df645b0759..d202dcfa06 100644 --- a/.github/workflows/zombie-tests.yaml +++ b/.github/workflows/zombie-tests.yaml @@ -7,51 +7,141 @@ name: Zombie-Tests on: - workflow_dispatch: + workflow_dispatch: + +env: + CACHE_VERSION: v07 + CACHE_PATHS: | + ~/Library/Caches/pip + ~/.cargo + ~/.ccache + ~/.hunter + ~/.rustup jobs: - zombie-tests: + Prepare-Kagome-Docker: strategy: fail-fast: false matrix: options: - - name: "Parachains smoke test" - test: "test0001" - - name: "Parachains smoke test kagome" - test: "test0001_kagome" - - name: "Parachains upgrade smoke test" - test: "test0002" - - name: "Parachains upgrade smoke test kagome" - test: "test0002_kagome" - - name: "Parachains smoke test cumulus" - test: "test0003" - - name: "Parachains smoke test cumulus kagome" - test: "test0003_kagome" - - name: "Runtime upgrade" - test: "test0004" - - name: "Runtime upgrade kagome" - test: "test0004_kagome" - - name: "Dispute valid block" - test: "test0005" - - name: "Parachains disputes" - test: "test0006" - - name: "Deregister register validator smoke" - test: "test0008" - - name: "Basic warp sync" - test: "test0009" - - name: "Validators warp sync" - test: "test0010" - - name: "Block building warp sync" - test: "test0011" +# - name: "Self-hosted: Debug Docker image" +# build-type: "Debug" + - name: "Self-hosted: Release Docker image" + build-type: "Release" +# - name: "Self-hosted: RelWithDebInfo Docker image" +# build-type: "RelWithDebInfo" + runs-on: [ actions-runner-controller ] + timeout-minutes: 120 + container: qdrvm/kagome-dev:9-minideb + steps: + - uses: actions/checkout@dc323e67f16fb5f7663d20ff7941f27f5809e9b6 + - uses: actions/cache@937d24475381cd9c75ae6db12cb4e79714b926ed + with: + path: ${{ env.CACHE_PATHS }} + key: ${{ github.job }}-${{ matrix.options.name }}-${{ env.CACHE_VERSION }} + - run: git config --global --add safe.directory /__w/kagome/kagome + - run: git fetch --prune --unshallow + - name: Build Kagome + env: + BUILD_TYPE: "${{ matrix.options.build-type }}" + KAGOME_ROOT: /__w/kagome/kagome + run: bash -c "cd $KAGOME_ROOT && source /venv/bin/activate && ./housekeeping/docker/kagome-dev/make.sh" + - name: Copy Kagome + env: + KAGOME_BUILD_DIR: /__w/kagome/kagome/build + run: bash -c "mkdir -p ${KAGOME_BUILD_DIR}/docker_context && cp -a ${KAGOME_BUILD_DIR}/node/kagome ${KAGOME_BUILD_DIR}/docker_context" + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Build Docker Image + uses: docker/build-push-action@v5 + with: + tags: kagome-dev:${{ github.run_number }} + file: ./housekeeping/docker/kagome/minideb-release.Dockerfile + context: /__w/kagome/kagome/build/docker_context + outputs: type=docker,dest=/tmp/kagome_dev.tar + - name: upload artifact + uses: actions/upload-artifact@v4 + with: + name: kagome-dev + path: /tmp/kagome_dev.tar + + Prepare-Zombie-Tests-Docker: runs-on: [ actions-runner-controller ] timeout-minutes: 60 + needs: [Prepare-Kagome-Docker] steps: - - name: Set owner of working dir recurively + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: kagome-dev + path: /tmp + - name: Load image + run: | + docker load --input /tmp/kagome_dev.tar + docker image ls -a + - name: Set owner of working dir recursively run: sudo chown -R $(whoami) . - uses: actions/checkout@dc323e67f16fb5f7663d20ff7941f27f5809e9b6 - - name: build zombie-tester + - name: Extract branch name + shell: bash + run: | + branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}} + echo "branch=${branch}" >> $GITHUB_OUTPUT + echo "Branch name: ${branch}" + id: extract_branch + - name: Build zombie-tester working-directory: ./zombienet/docker - run: make tester + run: make tester BRANCH_NAME=${{ steps.extract_branch.outputs.branch }} KAGOME_IMAGE=kagome-dev:${{ github.run_number }} + - name: Archive zombie-tester + shell: bash + run: docker save -o /tmp/zombie-tester.tar zombie-tester:latest + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: zombie-tester + path: /tmp/zombie-tester.tar + + Zombie-Tests: + runs-on: [ actions-runner-controller ] + timeout-minutes: 60 + needs: [Prepare-Zombie-Tests-Docker] + strategy: + fail-fast: false + matrix: + options: + - name: "PVF preparation & execution time" + test: "test-polkadot-functional-0001-parachains-pvf" + - name: "Disputes initiation, conclusion and lag" + test: "test-polkadot-functional-0002-parachains-disputes" + - name: "BEEFY voting and finality, test MMR proofs. Assumes Rococo sessions of 1 minute" + test: "test-polkadot-functional-0003-beefy-and-mmr" + - name: "Dispute finality lag when 1/3 of parachain validators always attempt to include an invalid block" + test: "test-polkadot-functional-0004-parachains-garbage-candidate" + - name: "Past-session dispute slashing" + test: "test-polkadot-functional-0005-parachains-disputes-past-session" + - name: "Test if parachains make progress with most of approvals being tranch0" + test: "test-polkadot-functional-0006-parachains-max-tranche0" + - name: "Test if disputes triggered on finalized blocks within scope always end as valid" + test: "test-polkadot-functional-0007-dispute-freshly-finalized" + - name: "Test if disputes triggered on finalized blocks out of scope never get to be confirmed and concluded" + test: "test-polkadot-functional-0008-dispute-old-finalized" + - name: "Approval voting coalescing does not lag finality" + test: "test-polkadot-functional-0009-approval-voting-coalescing" + - name: "Test validator disabling effects" + test: "test-polkadot-functional-0010-validator-disabling" + - name: "Test we are producing blocks at 6 seconds clip" + test: "test-polkadot-functional-0011-async-backing-6-seconds-rate" + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: zombie-tester + path: /tmp + - name: Load image + run: | + docker load --input /tmp/zombie-tester.tar + docker image ls -a + - uses: actions/checkout@dc323e67f16fb5f7663d20ff7941f27f5809e9b6 - name: Run test working-directory: ./zombienet/docker - run: make ${{ matrix.options.test }} + run: make ${{ matrix.options.test }} ZOMBIE_TESTER_IMAGE=zombie-tester:latest diff --git a/core/application/impl/app_configuration_impl.cpp b/core/application/impl/app_configuration_impl.cpp index 7b2ddd47d6..2c21215b2e 100644 --- a/core/application/impl/app_configuration_impl.cpp +++ b/core/application/impl/app_configuration_impl.cpp @@ -805,6 +805,7 @@ namespace kagome::application { po::options_description desc("General options"); desc.add_options() ("help,h", "show this help message") + ("version,v", "show version information") ("log,l", po::value>(), "Sets a custom logging filter. Syntax is `=`, e.g. -llibp2p=off.\n" "Log levels (most to least verbose) are trace, debug, verbose, info, warn, error, critical, off. By default, all targets log `info`.\n" @@ -944,6 +945,10 @@ namespace kagome::application { std::cout << desc << std::endl; return false; } + if (vm.count("version") > 0) { + std::cout << "Kagome version " << buildVersion() << std::endl; + return false; + } try { // second-run parse to gather all known options diff --git a/housekeeping/docker/kagome-dev/build_and_push.sh b/housekeeping/docker/kagome-dev/build_and_push.sh index bf0a4ba7e2..e5ee0f9f9f 100755 --- a/housekeeping/docker/kagome-dev/build_and_push.sh +++ b/housekeeping/docker/kagome-dev/build_and_push.sh @@ -6,6 +6,7 @@ # cd "$(dirname "$0")" +echo "Building in $(pwd)" VERSION=${VERSION:-5} TAG=qdrvm/kagome-dev:$VERSION diff --git a/housekeeping/docker/kagome-dev/make.sh b/housekeeping/docker/kagome-dev/make.sh index a68a713afa..05ce2b2860 100755 --- a/housekeeping/docker/kagome-dev/make.sh +++ b/housekeeping/docker/kagome-dev/make.sh @@ -36,6 +36,7 @@ fi git submodule update --init cd "$(dirname $0)/../../.." +echo "Building in $(pwd)" cmake . -B"${BUILD_DIR}" -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" -DBACKWARD=OFF cmake --build "${BUILD_DIR}" --target kagome -- -j${BUILD_THREADS} diff --git a/housekeeping/docker/kagome/build_and_push.sh b/housekeeping/docker/kagome/build_and_push.sh index 658ee271f1..8bdd3f58e8 100755 --- a/housekeeping/docker/kagome/build_and_push.sh +++ b/housekeeping/docker/kagome/build_and_push.sh @@ -14,11 +14,13 @@ if [[ "${KAGOME_IN_DOCKER}" = 1 ]]; then fi KAGOME_ROOT="$(dirname "$0")/../../.." +echo "KAGOME_ROOT: $KAGOME_ROOT" # cd to kagome source root cd "$KAGOME_ROOT" BUILD_DIR="${BUILD_DIR:-$(pwd)/build}" +echo "BUILD_DIR: $BUILD_DIR" BUILD_TYPE="${BUILD_TYPE:?BUILD_TYPE variable is not defined}" @@ -54,6 +56,7 @@ else fi CTX_DIR="${BUILD_DIR}/docker_context" +echo "CTX_DIR: $CTX_DIR" # Cleanup docker context rm -Rf ${CTX_DIR} diff --git a/zombienet/docker/Makefile b/zombienet/docker/Makefile index e894074759..fb42b6e0e5 100644 --- a/zombienet/docker/Makefile +++ b/zombienet/docker/Makefile @@ -1,3 +1,7 @@ +BRANCH_NAME ?= master +KAGOME_IMAGE ?= qdrvm/kagome:latest +ZOMBIE_TESTER_IMAGE ?= qdrvm/zombie-tester:latest + builder_last: python version.py https://github.com/paritytech/polkadot-sdk && \ python version.py https://github.com/paritytech/zombienet && \ @@ -35,14 +39,18 @@ tester: python3 version.py https://github.com/paritytech/polkadot-sdk && \ if [ -f polkadot-sdk-versions.txt ]; then \ POLKADOT_SDK_RELEASE=$$(grep 'polkadot_format_version:' polkadot-sdk-versions.txt | cut -d ' ' -f 2); \ - DOCKER_BUILDKIT=0 docker build --no-cache -t qdrvm/zombie-tester:latest -f tester.Dockerfile \ + BRANCH_NAME="$(BRANCH_NAME)" \ + KAGOME_IMAGE="$(KAGOME_IMAGE)" \ + DOCKER_BUILDKIT=0 docker build --platform linux/amd64 --no-cache -t qdrvm/zombie-tester:latest -t zombie-tester:latest -f tester.Dockerfile \ + --build-arg BRANCH_NAME=$$BRANCH_NAME \ + --build-arg KAGOME_IMAGE=$$KAGOME_IMAGE \ --build-arg POLKADOT_SDK_RELEASE=$$POLKADOT_SDK_RELEASE . ; \ else \ echo "One or more files are missing."; \ fi tests: - docker run -it qdrvm/zombie-tester:latest + docker run --platform linux/amd64 -it qdrvm/zombie-tester:latest bash test0001: docker run qdrvm/zombie-tester:latest zombienet-linux-x64 test -p native kagome/zombienet/0001-parachains-smoke-test/0001-parachains-smoke-test.zndsl @@ -85,3 +93,47 @@ test0010: test0011: docker run qdrvm/zombie-tester:latest zombienet-linux-x64 test -p native kagome/zombienet/0011-block-building-warp-sync/0011-block-building-warp-sync.zndsl + +test-polkadot-functional-0001-parachains-pvf: + ZOMBIE_TESTER_IMAGE=$(ZOMBIE_TESTER_IMAGE) + docker run --platform linux/amd64 $$ZOMBIE_TESTER_IMAGE zombienet-linux-x64 test -p native kagome/zombienet/polkadot/functional/0001-parachains-pvf.zndsl + +test-polkadot-functional-0002-parachains-disputes: + ZOMBIE_TESTER_IMAGE=$(ZOMBIE_TESTER_IMAGE) + docker run $$ZOMBIE_TESTER_IMAGE zombienet-linux-x64 test -p native kagome/zombienet/polkadot/functional/0002-parachains-disputes.zndsl + +test-polkadot-functional-0003-beefy-and-mmr: + ZOMBIE_TESTER_IMAGE=$(ZOMBIE_TESTER_IMAGE) + docker run $$ZOMBIE_TESTER_IMAGE zombienet-linux-x64 test -p native kagome/zombienet/polkadot/functional/0003-beefy-and-mmr.zndsl + +test-polkadot-functional-0004-parachains-garbage-candidate: + ZOMBIE_TESTER_IMAGE=$(ZOMBIE_TESTER_IMAGE) + docker run $$ZOMBIE_TESTER_IMAGE zombienet-linux-x64 test -p native kagome/zombienet/polkadot/functional/0004-parachains-garbage-candidate.zndsl + +test-polkadot-functional-0005-parachains-disputes-past-session: + ZOMBIE_TESTER_IMAGE=$(ZOMBIE_TESTER_IMAGE) + docker run $$ZOMBIE_TESTER_IMAGE zombienet-linux-x64 test -p native kagome/zombienet/polkadot/functional/0005-parachains-disputes-past-session.zndsl + +test-polkadot-functional-0006-parachains-max-tranche0: + ZOMBIE_TESTER_IMAGE=$(ZOMBIE_TESTER_IMAGE) + docker run $$ZOMBIE_TESTER_IMAGE zombienet-linux-x64 test -p native kagome/zombienet/polkadot/functional/0006-parachains-max-tranche0.zndsl + +test-polkadot-functional-0007-dispute-freshly-finalized: + ZOMBIE_TESTER_IMAGE=$(ZOMBIE_TESTER_IMAGE) + docker run $$ZOMBIE_TESTER_IMAGE zombienet-linux-x64 test -p native kagome/zombienet/polkadot/functional/0007-dispute-freshly-finalized.zndsl + +test-polkadot-functional-0008-dispute-old-finalized: + ZOMBIE_TESTER_IMAGE=$(ZOMBIE_TESTER_IMAGE) + docker run $$ZOMBIE_TESTER_IMAGE zombienet-linux-x64 test -p native kagome/zombienet/polkadot/functional/0008-dispute-old-finalized.zndsl + +test-polkadot-functional-0009-approval-voting-coalescing: + ZOMBIE_TESTER_IMAGE=$(ZOMBIE_TESTER_IMAGE) + docker run $$ZOMBIE_TESTER_IMAGE zombienet-linux-x64 test -p native kagome/zombienet/polkadot/functional/0009-approval-voting-coalescing.zndsl + +test-polkadot-functional-0010-validator-disabling: + ZOMBIE_TESTER_IMAGE=$(ZOMBIE_TESTER_IMAGE) + docker run $$ZOMBIE_TESTER_IMAGE zombienet-linux-x64 test -p native kagome/zombienet/polkadot/functional/0010-validator-disabling.zndsl + +test-polkadot-functional-0011-async-backing-6-seconds-rate: + ZOMBIE_TESTER_IMAGE=$(ZOMBIE_TESTER_IMAGE) + docker run $$ZOMBIE_TESTER_IMAGE zombienet-linux-x64 test -p native kagome/zombienet/polkadot/functional/0011-async-backing-6-seconds-rate.zndsl diff --git a/zombienet/docker/tester.Dockerfile b/zombienet/docker/tester.Dockerfile index a812af3b89..8626279e9c 100644 --- a/zombienet/docker/tester.Dockerfile +++ b/zombienet/docker/tester.Dockerfile @@ -1,14 +1,22 @@ ARG POLKADOT_SDK_RELEASE +ARG BRANCH_NAME +ARG KAGOME_IMAGE -FROM qdrvm/kagome:latest as kagome +FROM $KAGOME_IMAGE as kagome FROM qdrvm/zombie-builder:$POLKADOT_SDK_RELEASE AS tester +ARG BRANCH_NAME +ENV BRANCH_NAME=${BRANCH_NAME} + COPY --from=kagome /usr/local/bin/kagome /home/nonroot/bin -RUN git clone https://github.com/qdrvm/kagome.git + +RUN echo "Cloning branch: ${BRANCH_NAME}" +RUN git clone https://github.com/qdrvm/kagome.git -b ${BRANCH_NAME} + +RUN mkdir /tmp/kagome +RUN cd kagome/zombienet && ./precompile.sh + RUN mkdir /home/nonroot/.local && \ - chown nonroot:nonroot /home/nonroot/.local && \ - chown nonroot:nonroot /tmp + chown nonroot:nonroot /home/nonroot/.local && \ + chown -R nonroot:nonroot /tmp USER nonroot -CMD zombienet-linux-x64 test -p native kagome/zombienet/0001-parachains-smoke-test/0001-parachains-smoke-test.zndsl && \ - zombienet-linux-x64 test -p native kagome/zombienet/0002-parachains-upgrade-smoke-tests/0002-parachains-upgrade-smoke-test.zndsl && \ - zombienet-linux-x64 test -p native kagome/zombienet/0003-parachains-smoke-test-cumulus/0003-parachains-smoke-test-cumulus.zndsl diff --git a/zombienet/0000-validator-disabling/0000-validator-disabling.toml b/zombienet/old/0000-validator-disabling/0000-validator-disabling.toml similarity index 100% rename from zombienet/0000-validator-disabling/0000-validator-disabling.toml rename to zombienet/old/0000-validator-disabling/0000-validator-disabling.toml diff --git a/zombienet/0000-validator-disabling/0000-validator-disabling.zndsl b/zombienet/old/0000-validator-disabling/0000-validator-disabling.zndsl similarity index 100% rename from zombienet/0000-validator-disabling/0000-validator-disabling.zndsl rename to zombienet/old/0000-validator-disabling/0000-validator-disabling.zndsl diff --git a/zombienet/0001-parachains-smoke-test-kagome/0001-parachains-smoke-test-kagome.toml b/zombienet/old/0001-parachains-smoke-test-kagome/0001-parachains-smoke-test-kagome.toml similarity index 100% rename from zombienet/0001-parachains-smoke-test-kagome/0001-parachains-smoke-test-kagome.toml rename to zombienet/old/0001-parachains-smoke-test-kagome/0001-parachains-smoke-test-kagome.toml diff --git a/zombienet/0001-parachains-smoke-test-kagome/0001-parachains-smoke-test-kagome.zndsl b/zombienet/old/0001-parachains-smoke-test-kagome/0001-parachains-smoke-test-kagome.zndsl similarity index 100% rename from zombienet/0001-parachains-smoke-test-kagome/0001-parachains-smoke-test-kagome.zndsl rename to zombienet/old/0001-parachains-smoke-test-kagome/0001-parachains-smoke-test-kagome.zndsl diff --git a/zombienet/0001-parachains-smoke-test/0001-parachains-smoke-test.toml b/zombienet/old/0001-parachains-smoke-test/0001-parachains-smoke-test.toml similarity index 100% rename from zombienet/0001-parachains-smoke-test/0001-parachains-smoke-test.toml rename to zombienet/old/0001-parachains-smoke-test/0001-parachains-smoke-test.toml diff --git a/zombienet/0001-parachains-smoke-test/0001-parachains-smoke-test.zndsl b/zombienet/old/0001-parachains-smoke-test/0001-parachains-smoke-test.zndsl similarity index 100% rename from zombienet/0001-parachains-smoke-test/0001-parachains-smoke-test.zndsl rename to zombienet/old/0001-parachains-smoke-test/0001-parachains-smoke-test.zndsl diff --git a/zombienet/0002-parachains-upgrade-smoke-tests-kagome/0002-parachains-upgrade-smoke-test-kagome.toml b/zombienet/old/0002-parachains-upgrade-smoke-tests-kagome/0002-parachains-upgrade-smoke-test-kagome.toml similarity index 100% rename from zombienet/0002-parachains-upgrade-smoke-tests-kagome/0002-parachains-upgrade-smoke-test-kagome.toml rename to zombienet/old/0002-parachains-upgrade-smoke-tests-kagome/0002-parachains-upgrade-smoke-test-kagome.toml diff --git a/zombienet/0002-parachains-upgrade-smoke-tests-kagome/0002-parachains-upgrade-smoke-test-kagome.zndsl b/zombienet/old/0002-parachains-upgrade-smoke-tests-kagome/0002-parachains-upgrade-smoke-test-kagome.zndsl similarity index 100% rename from zombienet/0002-parachains-upgrade-smoke-tests-kagome/0002-parachains-upgrade-smoke-test-kagome.zndsl rename to zombienet/old/0002-parachains-upgrade-smoke-tests-kagome/0002-parachains-upgrade-smoke-test-kagome.zndsl diff --git a/zombienet/0002-parachains-upgrade-smoke-tests/0002-parachains-upgrade-smoke-test.toml b/zombienet/old/0002-parachains-upgrade-smoke-tests/0002-parachains-upgrade-smoke-test.toml similarity index 100% rename from zombienet/0002-parachains-upgrade-smoke-tests/0002-parachains-upgrade-smoke-test.toml rename to zombienet/old/0002-parachains-upgrade-smoke-tests/0002-parachains-upgrade-smoke-test.toml diff --git a/zombienet/0002-parachains-upgrade-smoke-tests/0002-parachains-upgrade-smoke-test.zndsl b/zombienet/old/0002-parachains-upgrade-smoke-tests/0002-parachains-upgrade-smoke-test.zndsl similarity index 100% rename from zombienet/0002-parachains-upgrade-smoke-tests/0002-parachains-upgrade-smoke-test.zndsl rename to zombienet/old/0002-parachains-upgrade-smoke-tests/0002-parachains-upgrade-smoke-test.zndsl diff --git a/zombienet/0003-parachains-smoke-test-cumulus-kagome/0003-parachains-smoke-test-cumulus-kagome.toml b/zombienet/old/0003-parachains-smoke-test-cumulus-kagome/0003-parachains-smoke-test-cumulus-kagome.toml similarity index 100% rename from zombienet/0003-parachains-smoke-test-cumulus-kagome/0003-parachains-smoke-test-cumulus-kagome.toml rename to zombienet/old/0003-parachains-smoke-test-cumulus-kagome/0003-parachains-smoke-test-cumulus-kagome.toml diff --git a/zombienet/0003-parachains-smoke-test-cumulus-kagome/0003-parachains-smoke-test-cumulus-kagome.zndsl b/zombienet/old/0003-parachains-smoke-test-cumulus-kagome/0003-parachains-smoke-test-cumulus-kagome.zndsl similarity index 100% rename from zombienet/0003-parachains-smoke-test-cumulus-kagome/0003-parachains-smoke-test-cumulus-kagome.zndsl rename to zombienet/old/0003-parachains-smoke-test-cumulus-kagome/0003-parachains-smoke-test-cumulus-kagome.zndsl diff --git a/zombienet/0003-parachains-smoke-test-cumulus/0003-parachains-smoke-test-cumulus.toml b/zombienet/old/0003-parachains-smoke-test-cumulus/0003-parachains-smoke-test-cumulus.toml similarity index 100% rename from zombienet/0003-parachains-smoke-test-cumulus/0003-parachains-smoke-test-cumulus.toml rename to zombienet/old/0003-parachains-smoke-test-cumulus/0003-parachains-smoke-test-cumulus.toml diff --git a/zombienet/0003-parachains-smoke-test-cumulus/0003-parachains-smoke-test-cumulus.zndsl b/zombienet/old/0003-parachains-smoke-test-cumulus/0003-parachains-smoke-test-cumulus.zndsl similarity index 100% rename from zombienet/0003-parachains-smoke-test-cumulus/0003-parachains-smoke-test-cumulus.zndsl rename to zombienet/old/0003-parachains-smoke-test-cumulus/0003-parachains-smoke-test-cumulus.zndsl diff --git a/zombienet/0004-runtime-upgrade-kagome/0004-runtime-upgrade-kagome.toml b/zombienet/old/0004-runtime-upgrade-kagome/0004-runtime-upgrade-kagome.toml similarity index 100% rename from zombienet/0004-runtime-upgrade-kagome/0004-runtime-upgrade-kagome.toml rename to zombienet/old/0004-runtime-upgrade-kagome/0004-runtime-upgrade-kagome.toml diff --git a/zombienet/0004-runtime-upgrade-kagome/0004-runtime-upgrade-kagome.zndsl b/zombienet/old/0004-runtime-upgrade-kagome/0004-runtime-upgrade-kagome.zndsl similarity index 100% rename from zombienet/0004-runtime-upgrade-kagome/0004-runtime-upgrade-kagome.zndsl rename to zombienet/old/0004-runtime-upgrade-kagome/0004-runtime-upgrade-kagome.zndsl diff --git a/zombienet/0004-runtime-upgrade-kagome/runtime_upgrade_cumulus.js b/zombienet/old/0004-runtime-upgrade-kagome/runtime_upgrade_cumulus.js similarity index 100% rename from zombienet/0004-runtime-upgrade-kagome/runtime_upgrade_cumulus.js rename to zombienet/old/0004-runtime-upgrade-kagome/runtime_upgrade_cumulus.js diff --git a/zombienet/0004-runtime-upgrade/0004-runtime-upgrade.toml b/zombienet/old/0004-runtime-upgrade/0004-runtime-upgrade.toml similarity index 100% rename from zombienet/0004-runtime-upgrade/0004-runtime-upgrade.toml rename to zombienet/old/0004-runtime-upgrade/0004-runtime-upgrade.toml diff --git a/zombienet/0004-runtime-upgrade/0004-runtime-upgrade.zndsl b/zombienet/old/0004-runtime-upgrade/0004-runtime-upgrade.zndsl similarity index 100% rename from zombienet/0004-runtime-upgrade/0004-runtime-upgrade.zndsl rename to zombienet/old/0004-runtime-upgrade/0004-runtime-upgrade.zndsl diff --git a/zombienet/0004-runtime-upgrade/runtime_upgrade_cumulus.js b/zombienet/old/0004-runtime-upgrade/runtime_upgrade_cumulus.js similarity index 100% rename from zombienet/0004-runtime-upgrade/runtime_upgrade_cumulus.js rename to zombienet/old/0004-runtime-upgrade/runtime_upgrade_cumulus.js diff --git a/zombienet/0005-dispute-valid-block-1-kagome/0005-dispute-valid-block-1-kagome.toml b/zombienet/old/0005-dispute-valid-block-1-kagome/0005-dispute-valid-block-1-kagome.toml similarity index 100% rename from zombienet/0005-dispute-valid-block-1-kagome/0005-dispute-valid-block-1-kagome.toml rename to zombienet/old/0005-dispute-valid-block-1-kagome/0005-dispute-valid-block-1-kagome.toml diff --git a/zombienet/0005-dispute-valid-block-1-kagome/0005-dispute-valid-block-1-kagome.zndsl b/zombienet/old/0005-dispute-valid-block-1-kagome/0005-dispute-valid-block-1-kagome.zndsl similarity index 100% rename from zombienet/0005-dispute-valid-block-1-kagome/0005-dispute-valid-block-1-kagome.zndsl rename to zombienet/old/0005-dispute-valid-block-1-kagome/0005-dispute-valid-block-1-kagome.zndsl diff --git a/zombienet/0006-parachains-disputes-1-kagome/0006-parachains-disputes-1-kagome.toml b/zombienet/old/0006-parachains-disputes-1-kagome/0006-parachains-disputes-1-kagome.toml similarity index 100% rename from zombienet/0006-parachains-disputes-1-kagome/0006-parachains-disputes-1-kagome.toml rename to zombienet/old/0006-parachains-disputes-1-kagome/0006-parachains-disputes-1-kagome.toml diff --git a/zombienet/0006-parachains-disputes-1-kagome/0006-parachains-disputes-1-kagome.zndsl b/zombienet/old/0006-parachains-disputes-1-kagome/0006-parachains-disputes-1-kagome.zndsl similarity index 100% rename from zombienet/0006-parachains-disputes-1-kagome/0006-parachains-disputes-1-kagome.zndsl rename to zombienet/old/0006-parachains-disputes-1-kagome/0006-parachains-disputes-1-kagome.zndsl diff --git a/zombienet/0007-parachains-disputes-invald/0007-parachains-garbage-candidate.toml b/zombienet/old/0007-parachains-disputes-invald/0007-parachains-garbage-candidate.toml similarity index 100% rename from zombienet/0007-parachains-disputes-invald/0007-parachains-garbage-candidate.toml rename to zombienet/old/0007-parachains-disputes-invald/0007-parachains-garbage-candidate.toml diff --git a/zombienet/0007-parachains-disputes-invald/0007-parachains-garbage-candidate.zndsl b/zombienet/old/0007-parachains-disputes-invald/0007-parachains-garbage-candidate.zndsl similarity index 100% rename from zombienet/0007-parachains-disputes-invald/0007-parachains-garbage-candidate.zndsl rename to zombienet/old/0007-parachains-disputes-invald/0007-parachains-garbage-candidate.zndsl diff --git a/zombienet/0008-deregister-register-validator-smoke/0008-deregister-register-validator-smoke.toml b/zombienet/old/0008-deregister-register-validator-smoke/0008-deregister-register-validator-smoke.toml similarity index 100% rename from zombienet/0008-deregister-register-validator-smoke/0008-deregister-register-validator-smoke.toml rename to zombienet/old/0008-deregister-register-validator-smoke/0008-deregister-register-validator-smoke.toml diff --git a/zombienet/0008-deregister-register-validator-smoke/0008-deregister-register-validator-smoke.zndsl b/zombienet/old/0008-deregister-register-validator-smoke/0008-deregister-register-validator-smoke.zndsl similarity index 100% rename from zombienet/0008-deregister-register-validator-smoke/0008-deregister-register-validator-smoke.zndsl rename to zombienet/old/0008-deregister-register-validator-smoke/0008-deregister-register-validator-smoke.zndsl diff --git a/zombienet/0008-deregister-register-validator-smoke/0008-deregister-register-validator.js b/zombienet/old/0008-deregister-register-validator-smoke/0008-deregister-register-validator.js similarity index 100% rename from zombienet/0008-deregister-register-validator-smoke/0008-deregister-register-validator.js rename to zombienet/old/0008-deregister-register-validator-smoke/0008-deregister-register-validator.js diff --git a/zombienet/0009-basic-warp-sync/0009-basic-warp-sync.toml b/zombienet/old/0009-basic-warp-sync/0009-basic-warp-sync.toml similarity index 100% rename from zombienet/0009-basic-warp-sync/0009-basic-warp-sync.toml rename to zombienet/old/0009-basic-warp-sync/0009-basic-warp-sync.toml diff --git a/zombienet/0009-basic-warp-sync/0009-basic-warp-sync.zndsl b/zombienet/old/0009-basic-warp-sync/0009-basic-warp-sync.zndsl similarity index 100% rename from zombienet/0009-basic-warp-sync/0009-basic-warp-sync.zndsl rename to zombienet/old/0009-basic-warp-sync/0009-basic-warp-sync.zndsl diff --git a/zombienet/0009-basic-warp-sync/gen-db-raw.json b/zombienet/old/0009-basic-warp-sync/gen-db-raw.json similarity index 100% rename from zombienet/0009-basic-warp-sync/gen-db-raw.json rename to zombienet/old/0009-basic-warp-sync/gen-db-raw.json diff --git a/zombienet/0010-validators-warp-sync/0010-validators-warp-sync.toml b/zombienet/old/0010-validators-warp-sync/0010-validators-warp-sync.toml similarity index 100% rename from zombienet/0010-validators-warp-sync/0010-validators-warp-sync.toml rename to zombienet/old/0010-validators-warp-sync/0010-validators-warp-sync.toml diff --git a/zombienet/0010-validators-warp-sync/0010-validators-warp-sync.zndsl b/zombienet/old/0010-validators-warp-sync/0010-validators-warp-sync.zndsl similarity index 100% rename from zombienet/0010-validators-warp-sync/0010-validators-warp-sync.zndsl rename to zombienet/old/0010-validators-warp-sync/0010-validators-warp-sync.zndsl diff --git a/zombienet/0010-validators-warp-sync/gen-db-raw.json b/zombienet/old/0010-validators-warp-sync/gen-db-raw.json similarity index 100% rename from zombienet/0010-validators-warp-sync/gen-db-raw.json rename to zombienet/old/0010-validators-warp-sync/gen-db-raw.json diff --git a/zombienet/0011-block-building-warp-sync/0011-block-building-warp-sync.toml b/zombienet/old/0011-block-building-warp-sync/0011-block-building-warp-sync.toml similarity index 100% rename from zombienet/0011-block-building-warp-sync/0011-block-building-warp-sync.toml rename to zombienet/old/0011-block-building-warp-sync/0011-block-building-warp-sync.toml diff --git a/zombienet/0011-block-building-warp-sync/0011-block-building-warp-sync.zndsl b/zombienet/old/0011-block-building-warp-sync/0011-block-building-warp-sync.zndsl similarity index 100% rename from zombienet/0011-block-building-warp-sync/0011-block-building-warp-sync.zndsl rename to zombienet/old/0011-block-building-warp-sync/0011-block-building-warp-sync.zndsl diff --git a/zombienet/0011-block-building-warp-sync/gen-db-raw.json b/zombienet/old/0011-block-building-warp-sync/gen-db-raw.json similarity index 100% rename from zombienet/0011-block-building-warp-sync/gen-db-raw.json rename to zombienet/old/0011-block-building-warp-sync/gen-db-raw.json diff --git a/zombienet/0012-parachains-pvf/0012-parachains-pvf.toml b/zombienet/old/0012-parachains-pvf/0012-parachains-pvf.toml similarity index 100% rename from zombienet/0012-parachains-pvf/0012-parachains-pvf.toml rename to zombienet/old/0012-parachains-pvf/0012-parachains-pvf.toml diff --git a/zombienet/0012-parachains-pvf/0012-parachains-pvf.zndsl b/zombienet/old/0012-parachains-pvf/0012-parachains-pvf.zndsl similarity index 100% rename from zombienet/0012-parachains-pvf/0012-parachains-pvf.zndsl rename to zombienet/old/0012-parachains-pvf/0012-parachains-pvf.zndsl diff --git a/zombienet/0013-beefy-and-mmr/0013-beefy-and-mmr.toml b/zombienet/old/0013-beefy-and-mmr/0013-beefy-and-mmr.toml similarity index 100% rename from zombienet/0013-beefy-and-mmr/0013-beefy-and-mmr.toml rename to zombienet/old/0013-beefy-and-mmr/0013-beefy-and-mmr.toml diff --git a/zombienet/0013-beefy-and-mmr/0013-beefy-and-mmr.zndsl b/zombienet/old/0013-beefy-and-mmr/0013-beefy-and-mmr.zndsl similarity index 100% rename from zombienet/0013-beefy-and-mmr/0013-beefy-and-mmr.zndsl rename to zombienet/old/0013-beefy-and-mmr/0013-beefy-and-mmr.zndsl diff --git a/zombienet/0013-beefy-and-mmr/0013-beefy-finalized-heads.js b/zombienet/old/0013-beefy-and-mmr/0013-beefy-finalized-heads.js similarity index 100% rename from zombienet/0013-beefy-and-mmr/0013-beefy-finalized-heads.js rename to zombienet/old/0013-beefy-and-mmr/0013-beefy-finalized-heads.js diff --git a/zombienet/0013-beefy-and-mmr/0013-common.js b/zombienet/old/0013-beefy-and-mmr/0013-common.js similarity index 100% rename from zombienet/0013-beefy-and-mmr/0013-common.js rename to zombienet/old/0013-beefy-and-mmr/0013-common.js diff --git a/zombienet/0013-beefy-and-mmr/0013-mmr-generate-and-verify-proof.js b/zombienet/old/0013-beefy-and-mmr/0013-mmr-generate-and-verify-proof.js similarity index 100% rename from zombienet/0013-beefy-and-mmr/0013-mmr-generate-and-verify-proof.js rename to zombienet/old/0013-beefy-and-mmr/0013-mmr-generate-and-verify-proof.js diff --git a/zombienet/0013-beefy-and-mmr/0013-mmr-leaves.js b/zombienet/old/0013-beefy-and-mmr/0013-mmr-leaves.js similarity index 100% rename from zombienet/0013-beefy-and-mmr/0013-mmr-leaves.js rename to zombienet/old/0013-beefy-and-mmr/0013-mmr-leaves.js diff --git a/zombienet/polkadot/functional/0001-parachains-pvf.toml b/zombienet/polkadot/functional/0001-parachains-pvf.toml new file mode 100644 index 0000000000..ca715e30c7 --- /dev/null +++ b/zombienet/polkadot/functional/0001-parachains-pvf.toml @@ -0,0 +1,130 @@ +[settings] +timeout = 1000 + +[relaychain] +chain = "rococo-local" + +[relaychain.default_resources] +limits = { memory = "4G", cpu = "2" } +requests = { memory = "2G", cpu = "1" } + + [[relaychain.nodes]] + name = "alice" + args = [ "--alice", "-lparachain=debug,runtime=debug" ] + + [[relaychain.nodes]] + name = "bob" + args = [ "--bob", "-lparachain=debug,runtime=debug" ] + + [[relaychain.nodes]] + name = "charlie" + args = [ "--charlie", "-lparachain=debug,runtime=debug" ] + + [[relaychain.nodes]] + name = "dave" + args = [ "--dave", "-lparachain=debug,runtime=debug" ] + + [[relaychain.nodes]] + name = "ferdie" + args = [ "--ferdie","-lparachain=debug,runtime=debug" ] + + [[relaychain.nodes]] + name = "eve" + args = [ "--eve", "-lparachain=debug,runtime=debug"] + + [[relaychain.nodes]] + name = "one" + command = "kagome" + prometheus_prefix = "kagome" + args = [ "--one", "--wasm-execution Compiled", "-lparachain=debug", "-lruntime=debug" ] + + [[relaychain.nodes]] + name = "two" + command = "kagome" + prometheus_prefix = "kagome" + args = [ "--two", "--wasm-execution Compiled", "-lparachain=debug", "-lruntime=debug"] + +[[parachains]] +id = 2000 +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size=100000 --pvf-complexity=1" + + [parachains.collator] + name = "collator01" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size=100000", "--pvf-complexity=1", "--parachain-id=2000"] + +[[parachains]] +id = 2001 +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size=100000 --pvf-complexity=10" + + [parachains.collator] + name = "collator02" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size=100000", "--parachain-id=2001", "--pvf-complexity=10"] + +[[parachains]] +id = 2002 +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size=100000 --pvf-complexity=100" + + [parachains.collator] + name = "collator03" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size=100000", "--parachain-id=2002", "--pvf-complexity=100"] + +[[parachains]] +id = 2003 +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size=20000 --pvf-complexity=300" + + [parachains.collator] + name = "collator04" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size=20000", "--parachain-id=2003", "--pvf-complexity=300"] + +[[parachains]] +id = 2004 +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size=100000 --pvf-complexity=300" + + [parachains.collator] + name = "collator05" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size=100000", "--parachain-id=2004", "--pvf-complexity=300"] + +[[parachains]] +id = 2005 +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size=20000 --pvf-complexity=400" + + [parachains.collator] + name = "collator06" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size=20000", "--pvf-complexity=400", "--parachain-id=2005"] + +[[parachains]] +id = 2006 +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size=100000 --pvf-complexity=300" + + [parachains.collator] + name = "collator07" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size=100000", "--pvf-complexity=300", "--parachain-id=2006"] + +[[parachains]] +id = 2007 +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size=100000 --pvf-complexity=300" + + [parachains.collator] + name = "collator08" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size=100000", "--pvf-complexity=300", "--parachain-id=2007"] + +[types.Header] +number = "u64" +parent_hash = "Hash" +post_state = "Hash" diff --git a/zombienet/polkadot/functional/0001-parachains-pvf.zndsl b/zombienet/polkadot/functional/0001-parachains-pvf.zndsl new file mode 100644 index 0000000000..a3279602ae --- /dev/null +++ b/zombienet/polkadot/functional/0001-parachains-pvf.zndsl @@ -0,0 +1,84 @@ +Description: PVF preparation & execution time +Network: ./0001-parachains-pvf.toml +Creds: config + +# Check authority status. +alice: reports node_roles is 4 +bob: reports node_roles is 4 +charlie: reports node_roles is 4 +dave: reports node_roles is 4 +eve: reports node_roles is 4 +ferdie: reports node_roles is 4 +one: reports node_roles is 4 +two: reports node_roles is 4 + +# Ensure parachains are registered. +alice: parachain 2000 is registered within 60 seconds +bob: parachain 2001 is registered within 60 seconds +charlie: parachain 2002 is registered within 60 seconds +dave: parachain 2003 is registered within 60 seconds +ferdie: parachain 2004 is registered within 60 seconds +eve: parachain 2005 is registered within 60 seconds +one: parachain 2006 is registered within 60 seconds +two: parachain 2007 is registered within 60 seconds + +# Ensure parachains made progress. +alice: parachain 2000 block height is at least 10 within 300 seconds +alice: parachain 2001 block height is at least 10 within 300 seconds +alice: parachain 2002 block height is at least 10 within 300 seconds +alice: parachain 2003 block height is at least 10 within 300 seconds +alice: parachain 2004 block height is at least 10 within 300 seconds +alice: parachain 2005 block height is at least 10 within 300 seconds +alice: parachain 2006 block height is at least 10 within 300 seconds +alice: parachain 2007 block height is at least 10 within 300 seconds + +alice: reports substrate_block_height{status="finalized"} is at least 30 within 400 seconds + +# Check preparation time is under 10s. +# Check all buckets <= 10. +alice: reports histogram polkadot_pvf_preparation_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2", "3", "10"] within 10 seconds +bob: reports histogram polkadot_pvf_preparation_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2", "3", "10"] within 10 seconds +charlie: reports histogram polkadot_pvf_preparation_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2", "3", "10"] within 10 seconds +dave: reports histogram polkadot_pvf_preparation_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2", "3", "10"] within 10 seconds +ferdie: reports histogram polkadot_pvf_preparation_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2", "3", "10"] within 10 seconds +eve: reports histogram polkadot_pvf_preparation_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2", "3", "10"] within 10 seconds +one: reports histogram kagome_pvf_preparation_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2", "3", "10"] within 10 seconds +two: reports histogram kagome_pvf_preparation_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2", "3", "10"] within 10 seconds + +# Check all buckets >= 20. +alice: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "120", "+Inf"] within 10 seconds +bob: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "120", "+Inf"] within 10 seconds +charlie: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "120", "+Inf"] within 10 seconds +dave: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "120", "+Inf"] within 10 seconds +ferdie: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "120", "+Inf"] within 10 seconds +eve: reports histogram polkadot_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "120", "+Inf"] within 10 seconds +one: reports histogram kagome_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "120", "+Inf"] within 10 seconds +two: reports histogram kagome_pvf_preparation_time has 0 samples in buckets ["20", "30", "60", "120", "+Inf"] within 10 seconds + +# Check execution time. +# There are two different timeout conditions: DEFAULT_BACKING_EXECUTION_TIMEOUT(2s) and +# DEFAULT_APPROVAL_EXECUTION_TIMEOUT(12s). Currently these are not differentiated by metrics +# because the metrics are defined in `polkadot-node-core-pvf` which is a level below +# the relevant subsystems. +# That being said, we will take the simplifying assumption of testing only the +# 2s timeout. +# We do this check by ensuring all executions fall into bucket le="2" or lower. +# First, check if we have at least 1 sample, but we should have many more. +alice: reports histogram polkadot_pvf_execution_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2"] within 10 seconds +bob: reports histogram polkadot_pvf_execution_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2"] within 10 seconds +charlie: reports histogram polkadot_pvf_execution_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2"] within 10 seconds +dave: reports histogram polkadot_pvf_execution_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2"] within 10 seconds +ferdie: reports histogram polkadot_pvf_execution_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2"] within 10 seconds +eve: reports histogram polkadot_pvf_execution_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2"] within 10 seconds +one: reports histogram kagome_pvf_execution_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2"] within 10 seconds +two: reports histogram kagome_pvf_execution_time has at least 1 samples in buckets ["0.1", "0.5", "1", "2"] within 10 seconds + +# Check if we have no samples > 2s. +alice: reports histogram polkadot_pvf_execution_time has 0 samples in buckets ["3", "4", "5", "6", "+Inf"] within 10 seconds +bob: reports histogram polkadot_pvf_execution_time has 0 samples in buckets ["3", "4", "5", "6", "+Inf"] within 10 seconds +charlie: reports histogram polkadot_pvf_execution_time has 0 samples in buckets ["3", "4", "5", "6", "+Inf"] within 10 seconds +dave: reports histogram polkadot_pvf_execution_time has 0 samples in buckets ["3", "4", "5", "6", "+Inf"] within 10 seconds +ferdie: reports histogram polkadot_pvf_execution_time has 0 samples in buckets ["3", "4", "5", "6", "+Inf"] within 10 seconds +eve: reports histogram polkadot_pvf_execution_time has 0 samples in buckets ["3", "4", "5", "6", "+Inf"] within 10 seconds +one: reports histogram kagome_pvf_execution_time has 0 samples in buckets ["3", "4", "5", "6", "+Inf"] within 10 seconds +two: reports histogram kagome_pvf_execution_time has 0 samples in buckets ["3", "4", "5", "6", "+Inf"] within 10 seconds diff --git a/zombienet/polkadot/functional/0002-parachains-disputes.toml b/zombienet/polkadot/functional/0002-parachains-disputes.toml new file mode 100644 index 0000000000..b3ef99b8a8 --- /dev/null +++ b/zombienet/polkadot/functional/0002-parachains-disputes.toml @@ -0,0 +1,76 @@ +[settings] +timeout = 1000 + +[relaychain.genesis.runtimeGenesis.patch.configuration.config] + needed_approvals = 8 + +[relaychain.genesis.runtimeGenesis.patch.configuration.config.scheduler_params] + max_validators_per_core = 5 + +[relaychain.genesis.runtimeGenesis.patch.configuration.config.approval_voting_params] + max_approval_coalesce_count = 5 + + +[relaychain] +chain = "rococo-local" +default_command = "polkadot" + +[relaychain.default_resources] +limits = { memory = "4G", cpu = "2" } +requests = { memory = "2G", cpu = "1" } + + [[relaychain.nodes]] + name = "alice" + command = "malus dispute-ancestor --fake-validation approval-invalid" + args = [ "--alice", " -lparachain=debug,MALUS=trace" ] + + [[relaychain.nodes]] + name = "bob" + command = "malus dispute-ancestor --fake-validation approval-invalid" + args = [ "--bob", "-lparachain=debug,MALUS=trace"] + + [[relaychain.nodes]] + name = "charlie" + command = "kagome" + prometheus_prefix = "kagome" + args = [ "--charlie", "-lparachain=debug", "--wasm-execution Compiled"] + + [[relaychain.nodes]] + name = "dave" + command = "kagome" + prometheus_prefix = "kagome" + args = [ "--dave", "-lparachain=debug", "--wasm-execution Compiled"] + + [[relaychain.nodes]] + name = "ferdie" + args = [ "--ferdie", "-lparachain=debug" ] + + [[relaychain.nodes]] + name = "eve" + args = [ "--eve", "-lparachain=debug"] + + [[relaychain.nodes]] + name = "one" + args = [ "--one", "-lparachain=debug" ] + + [[relaychain.nodes]] + name = "two" + args = [ "--two", "-lparachain=debug"] + +{% for id in range(2000,2004) %} +[[parachains]] +id = {{id}} +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size={{25000*(id-1999)}} --pvf-complexity={{id - 1999}}" + + [parachains.collator] + name = "collator" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size={{25000*(id-1999)}}", "--parachain-id={{id}}", "--pvf-complexity={{id - 1999}}"] + +{% endfor %} + +[types.Header] +number = "u64" +parent_hash = "Hash" +post_state = "Hash" diff --git a/zombienet/polkadot/functional/0002-parachains-disputes.zndsl b/zombienet/polkadot/functional/0002-parachains-disputes.zndsl new file mode 100644 index 0000000000..db6e902211 --- /dev/null +++ b/zombienet/polkadot/functional/0002-parachains-disputes.zndsl @@ -0,0 +1,58 @@ +Description: Disputes initiation, conclusion and lag +Network: ./0002-parachains-disputes.toml +Creds: config + +# Check authority status and peers. +alice: reports node_roles is 4 +bob: reports node_roles is 4 +charlie: reports node_roles is 4 +dave: reports node_roles is 4 +eve: reports node_roles is 4 +ferdie: reports node_roles is 4 +one: reports node_roles is 4 +two: reports node_roles is 4 + +# Ensure parachains are registered. +alice: parachain 2000 is registered within 30 seconds +bob: parachain 2001 is registered within 30 seconds +charlie: parachain 2002 is registered within 30 seconds +dave: parachain 2003 is registered within 30 seconds + +# Ensure parachains made progress. +alice: parachain 2000 block height is at least 10 within 200 seconds +alice: parachain 2001 block height is at least 10 within 200 seconds +alice: parachain 2002 block height is at least 10 within 200 seconds +alice: parachain 2003 block height is at least 10 within 200 seconds + +# Check if disputes are initiated and concluded. +# TODO: check if disputes are concluded faster than initiated. +eve: reports polkadot_parachain_candidate_disputes_total is at least 10 within 15 seconds +eve: reports polkadot_parachain_candidate_dispute_concluded{validity="valid"} is at least 10 within 15 seconds +eve: reports polkadot_parachain_candidate_dispute_concluded{validity="invalid"} is 0 within 15 seconds + +# As of , we don't slash on disputes +# with `valid` outcome, so there is no offence reported. +# alice: system event contains "There is an offence reported" within 60 seconds + +# Check lag - approval +alice: reports polkadot_parachain_approval_checking_finality_lag is 0 +bob: reports polkadot_parachain_approval_checking_finality_lag is 0 +charlie: reports kagome_parachain_approval_checking_finality_lag is 0 +dave: reports kagome_parachain_approval_checking_finality_lag is 0 +ferdie: reports polkadot_parachain_approval_checking_finality_lag is 0 +eve: reports polkadot_parachain_approval_checking_finality_lag is 0 +one: reports polkadot_parachain_approval_checking_finality_lag is 0 +two: reports polkadot_parachain_approval_checking_finality_lag is 0 + +# Check lag - dispute conclusion +alice: reports polkadot_parachain_disputes_finality_lag is 0 +bob: reports polkadot_parachain_disputes_finality_lag is 0 +charlie: reports kagome_parachain_disputes_finality_lag is 0 +dave: reports kagome_parachain_disputes_finality_lag is 0 +ferdie: reports polkadot_parachain_disputes_finality_lag is 0 +eve: reports polkadot_parachain_disputes_finality_lag is 0 +one: reports polkadot_parachain_disputes_finality_lag is 0 +two: reports polkadot_parachain_disputes_finality_lag is 0 + +# Check participating in the losing side of a dispute logged +alice: log line contains "Voted against a candidate that was concluded valid." within 180 seconds diff --git a/zombienet/polkadot/functional/0003-beefy-and-mmr.toml b/zombienet/polkadot/functional/0003-beefy-and-mmr.toml new file mode 100644 index 0000000000..5ece86bcd1 --- /dev/null +++ b/zombienet/polkadot/functional/0003-beefy-and-mmr.toml @@ -0,0 +1,22 @@ +[settings] +timeout = 1000 + +[relaychain] +chain = "rococo-local" +command = "polkadot" + +[[relaychain.node_groups]] +name = "validator" +count = 2 +args = ["--log=beefy=debug", "--enable-offchain-indexing=true"] + +[[relaychain.node_groups]] +name = "kagome-validator" +command = "kagome" +prometheus_prefix = "kagome" +count = 1 +args = ["--log=beefy=debug", "--enable-offchain-indexing=true", "--wasm-execution=Compiled"] + +[[relaychain.nodes]] +name = "validator-unstable" +args = ["--log=beefy=debug", "--enable-offchain-indexing=true"] diff --git a/zombienet/polkadot/functional/0003-beefy-and-mmr.zndsl b/zombienet/polkadot/functional/0003-beefy-and-mmr.zndsl new file mode 100644 index 0000000000..66664d9bdc --- /dev/null +++ b/zombienet/polkadot/functional/0003-beefy-and-mmr.zndsl @@ -0,0 +1,42 @@ +Description: Test BEEFY voting and finality, test MMR proofs. Assumes Rococo sessions of 1 minute. +Network: ./0003-beefy-and-mmr.toml +Creds: config + +# Check authority status. +validator: reports node_roles is 4 +validator-unstable: reports node_roles is 4 + +# BEEFY sanity checks. +validator: reports substrate_beefy_validator_set_id is 0 +validator-unstable: reports substrate_beefy_validator_set_id is 0 + +# Verify voting happens and 1st mandatory block is finalized within 1st session. +validator: reports substrate_beefy_best_block is at least 1 within 60 seconds +validator-unstable: reports substrate_beefy_best_block is at least 1 within 60 seconds + +# Pause validator-unstable and test chain is making progress without it. +validator-unstable: pause + +# Verify validator sets get changed on new sessions. +validator: reports substrate_beefy_validator_set_id is at least 1 within 70 seconds +kagome-validator: reports kagome_beefy_validator_set_id is at least 1 within 70 seconds +# Check next session too. +validator: reports substrate_beefy_validator_set_id is at least 2 within 130 seconds +kagome-validator: reports kagome_beefy_validator_set_id is at least 2 within 130 seconds + +# Verify voting happens and blocks are being finalized for new sessions too: +# since we verified we're at least in the 3rd session, verify BEEFY finalized mandatory #21. +validator: reports substrate_beefy_best_block is at least 21 within 130 seconds +kagome-validator: reports kagome_beefy_best_block is at least 21 within 130 seconds + +# Custom JS to test BEEFY RPCs. +validator-0: js-script ./0003-beefy-finalized-heads.js with "validator-0,validator-1,kagome-validator-0" return is 1 within 5 seconds + +# Custom JS to test MMR RPCs. +validator: js-script ./0003-mmr-leaves.js with "21" return is 1 within 5 seconds +validator: js-script ./0003-mmr-generate-and-verify-proof.js with "validator-0,validator-1,kagome-validator-0" return is 1 within 5 seconds + +# Resume validator-unstable and verify it imports all BEEFY justification and catches up. +validator-unstable: resume +validator-unstable: reports substrate_beefy_validator_set_id is at least 2 within 30 seconds +validator-unstable: reports substrate_beefy_best_block is at least 21 within 30 seconds diff --git a/zombienet/polkadot/functional/0003-beefy-finalized-heads.js b/zombienet/polkadot/functional/0003-beefy-finalized-heads.js new file mode 100644 index 0000000000..9696a540a1 --- /dev/null +++ b/zombienet/polkadot/functional/0003-beefy-finalized-heads.js @@ -0,0 +1,35 @@ +const common = require('./0003-common.js'); + +async function run(_, networkInfo, nodeNames) { + const apis = await common.getApis(networkInfo, nodeNames); + + const finalizedHeads = await Promise.all( + Object.entries(apis).map(async ([nodeName, api]) => { + const finalizedHead = await api.rpc.beefy.getFinalizedHead(); + return { nodeName, finalizedHead, finalizedHeight: await api.rpc.chain.getHeader(finalizedHead).then((header) => header.number) }; + }) + ); + + // select the node with the highest finalized height + const highestFinalizedHeight = finalizedHeads.reduce( + (acc, { nodeName, finalizedHeight }) => + finalizedHeight >= acc.finalizedHeight + ? { nodeName, finalizedHeight } + : acc, + { nodeName: 'validator', finalizedHeight: 0 } + ); + + // get all block hashes up until the highest finalized height + const blockHashes = []; + for (let blockNumber = 0; blockNumber <= highestFinalizedHeight.finalizedHeight; blockNumber++) { + const blockHash = await apis[highestFinalizedHeight.nodeName].rpc.chain.getBlockHash(blockNumber); + blockHashes.push(blockHash); + } + + // verify that height(finalized_head) is at least as high as the substrate_beefy_best_block test already verified + return finalizedHeads.every(({ finalizedHead, finalizedHeight }) => + finalizedHeight >= 21 && finalizedHead.toHex() === blockHashes[finalizedHeight].toHex() + ) +} + +module.exports = { run }; diff --git a/zombienet/polkadot/functional/0003-common.js b/zombienet/polkadot/functional/0003-common.js new file mode 100644 index 0000000000..743828ec6b --- /dev/null +++ b/zombienet/polkadot/functional/0003-common.js @@ -0,0 +1,16 @@ +async function getApis(networkInfo, nodeNames) { + const connectionPromises = nodeNames.map(async (nodeName) => { + const { wsUri, userDefinedTypes } = networkInfo.nodesByName[nodeName]; + const connection = await zombie.connect(wsUri, userDefinedTypes); + return { nodeName, connection }; + }); + + const connections = await Promise.all(connectionPromises); + + return connections.reduce((map, { nodeName, connection }) => { + map[nodeName] = connection; + return map; + }, {}); +} + +module.exports = { getApis }; diff --git a/zombienet/polkadot/functional/0003-mmr-generate-and-verify-proof.js b/zombienet/polkadot/functional/0003-mmr-generate-and-verify-proof.js new file mode 100644 index 0000000000..6583173e40 --- /dev/null +++ b/zombienet/polkadot/functional/0003-mmr-generate-and-verify-proof.js @@ -0,0 +1,26 @@ +const common = require('./0003-common.js'); + +async function run(nodeName, networkInfo, nodeNames) { + const apis = await common.getApis(networkInfo, nodeNames); + + const proof = await apis[nodeName].rpc.mmr.generateProof([1, 9, 20]); + + const root = await apis[nodeName].rpc.mmr.root() + + const proofVerifications = await Promise.all( + Object.values(apis).map(async (api) => { + return api.rpc.mmr.verifyProof(proof); + }) + ); + + const proofVerificationsStateless = await Promise.all( + Object.values(apis).map(async (api) => { + return api.rpc.mmr.verifyProofStateless(root, proof); + }) + ); + + // check that all nodes accepted the proof + return proofVerifications.every((proofVerification) => proofVerification) && proofVerificationsStateless.every((proofVerification) => proofVerification) +} + +module.exports = { run }; diff --git a/zombienet/polkadot/functional/0003-mmr-leaves.js b/zombienet/polkadot/functional/0003-mmr-leaves.js new file mode 100644 index 0000000000..df58194c57 --- /dev/null +++ b/zombienet/polkadot/functional/0003-mmr-leaves.js @@ -0,0 +1,9 @@ +async function run(nodeName, networkInfo, args) { + const { wsUri, userDefinedTypes } = networkInfo.nodesByName[nodeName]; + const api = await zombie.connect(wsUri, userDefinedTypes); + + const mmrLeaves = await api.query.mmr.numberOfLeaves(); + return mmrLeaves.toNumber() >= args[0] +} + +module.exports = { run }; diff --git a/zombienet/polkadot/functional/0004-parachains-garbage-candidate.toml b/zombienet/polkadot/functional/0004-parachains-garbage-candidate.toml new file mode 100644 index 0000000000..e393cf0617 --- /dev/null +++ b/zombienet/polkadot/functional/0004-parachains-garbage-candidate.toml @@ -0,0 +1,51 @@ +[settings] +timeout = 1000 +bootnode = true + +[relaychain.genesis.runtimeGenesis.patch.configuration.config.scheduler_params] + max_validators_per_core = 1 + +[relaychain.genesis.runtimeGenesis.patch.configuration.config] + needed_approvals = 2 + +[relaychain] +chain = "rococo-local" +default_command = "polkadot" + +[relaychain.default_resources] +limits = { memory = "4G", cpu = "2" } +requests = { memory = "2G", cpu = "1" } + + [[relaychain.node_groups]] + name = "honest-validator" + count = 2 + args = ["-lparachain=debug,runtime=debug"] + + [[relaychain.node_groups]] + name = "kagome-honest-validator" + command = "kagome" + prometheus_prefix = "kagome" + count = 1 + args = ["-lparachain=debug", "-lruntime=debug", "--wasm-execution=Compiled"] + + [[relaychain.node_groups]] + name = "malus-validator" + command = "malus suggest-garbage-candidate" + args = ["-lparachain=debug,MALUS=trace"] + count = 1 + +{% for id in range(2000,2003) %} +[[parachains]] +id = {{id}} +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size={{10000*(id-1999)}} --pvf-complexity={{id - 1999}}" + [parachains.collator] + name = "collator" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size={{10000*(id-1999)}}", "--parachain-id={{id}}", "--pvf-complexity={{id - 1999}}"] +{% endfor %} + +[types.Header] +number = "u64" +parent_hash = "Hash" +post_state = "Hash" diff --git a/zombienet/polkadot/functional/0004-parachains-garbage-candidate.zndsl b/zombienet/polkadot/functional/0004-parachains-garbage-candidate.zndsl new file mode 100644 index 0000000000..516c1f4954 --- /dev/null +++ b/zombienet/polkadot/functional/0004-parachains-garbage-candidate.zndsl @@ -0,0 +1,44 @@ +Description: Test dispute finality lag when 1/3 of parachain validators always attempt to include an invalid block +Network: ./0004-parachains-garbage-candidate.toml +Creds: config + +# Check authority status. +honest-validator-0: reports node_roles is 4 +honest-validator-1: reports node_roles is 4 +kagome-honest-validator-0: reports node_roles is 4 +malus-validator-0: reports node_roles is 4 + +# Parachains should be making progress even if we have up to 1/3 malicious validators. +honest-validator-0: parachain 2000 block height is at least 2 within 240 seconds +honest-validator-1: parachain 2001 block height is at least 2 within 180 seconds +kagome-honest-validator-0: parachain 2002 block height is at least 2 within 180 seconds + +# Check there is an offence report after dispute conclusion +honest-validator-0: system event contains "There is an offence reported" within 180 seconds +honest-validator-1: system event contains "There is an offence reported" within 180 seconds +kagome-honest-validator-0: system event contains "There is an offence reported" within 180 seconds + +# Check for chain reversion after dispute conclusion. +honest-validator-0: log line contains "reverted due to a bad parachain block" within 180 seconds +honest-validator-1: log line contains "reverted due to a bad parachain block" within 180 seconds +kagome-honest-validator-0: log line contains "reverted due to a bad parachain block" within 180 seconds + +# Check if disputes are concluded in less than 2 blocks. +honest-validator-0: reports polkadot_parachain_disputes_finality_lag is lower than 2 +honest-validator-1: reports polkadot_parachain_disputes_finality_lag is lower than 2 +kagome-honest-validator-0: reports polkadot_parachain_disputes_finality_lag is lower than 2 + +# Allow more time for malicious validator activity. +sleep 30 seconds + +# Check that garbage parachain blocks included by malicious validators are being disputed. +honest-validator-0: reports polkadot_parachain_candidate_disputes_total is at least 2 within 15 seconds +honest-validator-1: reports polkadot_parachain_candidate_disputes_total is at least 2 within 15 seconds +kagome-honest-validator-0: reports kagome_parachain_candidate_disputes_total is at least 2 within 15 seconds + +# Disputes should always end as "invalid" +honest-validator-0: reports polkadot_parachain_candidate_dispute_concluded{validity="invalid"} is at least 2 within 15 seconds +honest-validator-1: reports polkadot_parachain_candidate_dispute_concluded{validity="valid"} is 0 within 15 seconds + +# Check participating in the losing side of a dispute logged +malus-validator: log line contains "Voted for a candidate that was concluded invalid." within 180 seconds diff --git a/zombienet/polkadot/functional/0005-parachains-disputes-past-session.toml b/zombienet/polkadot/functional/0005-parachains-disputes-past-session.toml new file mode 100644 index 0000000000..ae7ada0a88 --- /dev/null +++ b/zombienet/polkadot/functional/0005-parachains-disputes-past-session.toml @@ -0,0 +1,46 @@ +[settings] +timeout = 1000 +bootnode = true + +[relaychain.genesis.runtimeGenesis.patch.configuration.config] + needed_approvals = 2 + +[relaychain.genesis.runtimeGenesis.patch.configuration.config.scheduler_params] + max_validators_per_core = 1 + group_rotation_frequency = 2 + +[relaychain] +chain = "westend-local" # using westend-local to enable slashing +default_command = "polkadot" + +[relaychain.default_resources] +limits = { memory = "4G", cpu = "2" } +requests = { memory = "2G", cpu = "1" } + + [[relaychain.node_groups]] + name = "honest-flaky-validator" + invulnerable = true # it will go offline, we don't want to disable it + count = 2 + args = ["-lparachain=debug"] + + [[relaychain.node_groups]] + name = "honest-validator" + command = "kagome" + prometheus_prefix = "kagome" + count = 1 + args = ["-lparachain=debug", "--wasm-execution=Compiled"] + + [[relaychain.node_groups]] + name = "malus-validator" + command = "malus suggest-garbage-candidate" + args = ["-lMALUS=trace"] + count = 1 + +[[parachains]] +id = 1000 +cumulus_based = true + + [parachains.collator] + name = "alice" + command = "polkadot-parachain" + args = ["-lparachain=debug"] diff --git a/zombienet/polkadot/functional/0005-parachains-disputes-past-session.zndsl b/zombienet/polkadot/functional/0005-parachains-disputes-past-session.zndsl new file mode 100644 index 0000000000..d92820391d --- /dev/null +++ b/zombienet/polkadot/functional/0005-parachains-disputes-past-session.zndsl @@ -0,0 +1,57 @@ +Description: Past-session dispute slashing +Network: ./0005-parachains-disputes-past-session.toml +Creds: config + +# Ensure nodes are up and running +honest-flaky-validator: reports node_roles is 4 + +# Stop issuing disputes for now +malus-validator: pause + +# Ensure parachain is registered +honest-validator: parachain 1000 is registered within 100 seconds + +# Ensure parachain made progress +honest-validator: parachain 1000 block height is at least 1 within 300 seconds + +# Start issuing disputes +malus-validator: resume + +# Wait for malus to back garbage candidate +malus-validator: log line matches "Suggesting malicious candidate" within 200 seconds + +# Pause first flaky node +# Availability will continue with 3/4 nodes online (incl. malus) +honest-flaky-validator-0: pause + +# Wait for the dispute +honest-flaky-validator-1: reports parachain_candidate_disputes_total is at least 1 within 60 seconds + +# Pause second flaky node so that we do not revert blocks due to f+1 invalid votes +# Availability and finality will stop +honest-flaky-validator-1: pause + +# Wait for 1 full session to pass after the last unconcluded dispute. +# +# TODO: replace with assertion for "New session detected" in logs. I think that +# would match on previous log lines, so we may need to programmatically wait for +# a specific session, requiring zombienet v2. +sleep 110 seconds + +# Now resume flaky validators +honest-flaky-validator: resume + +# Stop issuing disputes +malus-validator: pause + +# Disputes should start concluding now +honest-validator: reports polkadot_parachain_candidate_dispute_concluded{validity="invalid"} is at least 1 within 200 seconds + +# Disputes should always end as "invalid" +honest-validator: reports polkadot_parachain_candidate_dispute_concluded{validity="valid"} is 0 + +# Check an unsigned extrinsic is submitted +honest-validator: log line contains "Successfully reported pending slash" within 180 seconds + +# Finality should not lag after dispute resolution +honest-validator: reports block height minus finalised block is lower than 8 within 100 seconds diff --git a/zombienet/polkadot/functional/0006-parachains-max-tranche0.toml b/zombienet/polkadot/functional/0006-parachains-max-tranche0.toml new file mode 100644 index 0000000000..8e2b056591 --- /dev/null +++ b/zombienet/polkadot/functional/0006-parachains-max-tranche0.toml @@ -0,0 +1,46 @@ +[settings] +timeout = 1000 +bootnode = true + +[relaychain.genesis.runtimeGenesis.patch.configuration.config] + needed_approvals = 7 + relay_vrf_modulo_samples = 5 + +[relaychain.genesis.runtimeGenesis.patch.configuration.config.scheduler_params] + max_validators_per_core = 1 + +[relaychain] +chain = "rococo-local" +default_command = "polkadot" + +[relaychain.default_resources] +limits = { memory = "4G", cpu = "2" } +requests = { memory = "2G", cpu = "1" } + + [[relaychain.node_groups]] + name = "some-validator" + count = 4 + args = ["-lparachain=debug,runtime=debug"] + + [[relaychain.node_groups]] + name = "kagome-validator" + command = "kagome" + prometheus_prefix = "kagome" + count = 4 + args = ["-lparachain=debug", "-lruntime=debug", "--wasm-execution=Compiled"] + +{% for id in range(2000,2005) %} +[[parachains]] +id = {{id}} +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size={{10000*(id-1999)}} --pvf-complexity={{id - 1999}}" + [parachains.collator] + name = "collator" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size={{10000*(id-1999)}}", "--parachain-id={{id}}", "--pvf-complexity={{id - 1999}}"] +{% endfor %} + +[types.Header] +number = "u64" +parent_hash = "Hash" +post_state = "Hash" diff --git a/zombienet/polkadot/functional/0006-parachains-max-tranche0.zndsl b/zombienet/polkadot/functional/0006-parachains-max-tranche0.zndsl new file mode 100644 index 0000000000..6cec6c6679 --- /dev/null +++ b/zombienet/polkadot/functional/0006-parachains-max-tranche0.zndsl @@ -0,0 +1,27 @@ +Description: Test if parachains make progress with most of approvals being tranch0 +Network: ./0006-parachains-max-tranche0.toml +Creds: config + +# Check authority status. +some-validator-0: reports node_roles is 4 +some-validator-1: reports node_roles is 4 +some-validator-3: reports node_roles is 4 +some-validator-4: reports node_roles is 4 +some-validator-5: reports node_roles is 4 +some-validator-6: reports node_roles is 4 +some-validator-7: reports node_roles is 4 + +some-validator-0: parachain 2000 block height is at least 5 within 180 seconds +some-validator-1: parachain 2001 block height is at least 5 within 180 seconds +some-validator-2: parachain 2002 block height is at least 5 within 180 seconds +some-validator-3: parachain 2003 block height is at least 5 within 180 seconds +some-validator-4: parachain 2004 block height is at least 5 within 180 seconds + +some-validator-0: reports polkadot_parachain_approval_checking_finality_lag is lower than 2 +some-validator-1: reports polkadot_parachain_approval_checking_finality_lag is lower than 2 +some-validator-2: reports polkadot_parachain_approval_checking_finality_lag is lower than 2 +some-validator-3: reports polkadot_parachain_approval_checking_finality_lag is lower than 2 +some-validator-4: reports polkadot_parachain_approval_checking_finality_lag is lower than 2 +some-validator-5: reports polkadot_parachain_approval_checking_finality_lag is lower than 2 +some-validator-6: reports polkadot_parachain_approval_checking_finality_lag is lower than 2 +some-validator-7: reports polkadot_parachain_approval_checking_finality_lag is lower than 2 diff --git a/zombienet/polkadot/functional/0007-dispute-freshly-finalized.toml b/zombienet/polkadot/functional/0007-dispute-freshly-finalized.toml new file mode 100644 index 0000000000..e9c97031d1 --- /dev/null +++ b/zombienet/polkadot/functional/0007-dispute-freshly-finalized.toml @@ -0,0 +1,46 @@ +[settings] +timeout = 1000 + +[relaychain.genesis.runtimeGenesis.patch.configuration.config] + needed_approvals = 1 + +[relaychain.genesis.runtimeGenesis.patch.configuration.config.scheduler_params] + max_validators_per_core = 1 + +[relaychain] +chain = "rococo-local" +default_command = "polkadot" + +[relaychain.default_resources] +limits = { memory = "4G", cpu = "2" } +requests = { memory = "2G", cpu = "1" } + + [[relaychain.node_groups]] + name = "honest" + count = 3 + args = ["-lparachain=debug"] + + [[relaychain.node_groups]] + name = "kagome-honest" + command = "kagome" + prometheus_prefix = "kagome" + count = 3 + args = ["-lparachain=debug", "--wasm-execution=Compiled"] + + [[relaychain.nodes]] + name = "malus" + command = "malus dispute-finalized-candidates" + args = [ "--alice", "-lparachain=debug,MALUS=trace", "--dispute-offset=3" ] + +[[parachains]] +id = 2000 + + [parachains.collator] + name = "collator" + command = "undying-collator" + args = ["-lparachain=debug"] + +[types.Header] +number = "u64" +parent_hash = "Hash" +post_state = "Hash" diff --git a/zombienet/polkadot/functional/0007-dispute-freshly-finalized.zndsl b/zombienet/polkadot/functional/0007-dispute-freshly-finalized.zndsl new file mode 100644 index 0000000000..d1ed0250d4 --- /dev/null +++ b/zombienet/polkadot/functional/0007-dispute-freshly-finalized.zndsl @@ -0,0 +1,29 @@ +Description: Test if disputes triggered on finalized blocks within scope always end as valid. +Network: ./0007-dispute-freshly-finalized.toml +Creds: config + +# Check authority status and peers. +malus: reports node_roles is 4 +honest: reports node_roles is 4 + +# Ensure parachains are registered. +honest: parachain 2000 is registered within 30 seconds + +# Ensure parachains made progress. +honest: parachain 2000 block height is at least 10 within 200 seconds + +# Ensure that malus is already attempting to dispute +malus: log line contains "😈 Disputing candidate with hash:" within 180 seconds + +# Check if disputes are initiated and concluded. +honest: reports polkadot_parachain_candidate_disputes_total is at least 2 within 100 seconds +honest: reports polkadot_parachain_candidate_dispute_concluded{validity="valid"} is at least 2 within 100 seconds +honest: reports polkadot_parachain_candidate_dispute_concluded{validity="invalid"} is 0 within 100 seconds + +# Check lag - approval +honest: reports polkadot_parachain_approval_checking_finality_lag is lower than 2 + +# Check lag - dispute conclusion +honest: reports polkadot_parachain_disputes_finality_lag is lower than 2 + + diff --git a/zombienet/polkadot/functional/0008-dispute-old-finalized.toml b/zombienet/polkadot/functional/0008-dispute-old-finalized.toml new file mode 100644 index 0000000000..b7d202e4b8 --- /dev/null +++ b/zombienet/polkadot/functional/0008-dispute-old-finalized.toml @@ -0,0 +1,46 @@ +[settings] +timeout = 1000 + +[relaychain.genesis.runtimeGenesis.patch.configuration.config] + needed_approvals = 1 + +[relaychain.genesis.runtimeGenesis.patch.configuration.config.scheduler_params] + max_validators_per_core = 1 + +[relaychain] +chain = "rococo-local" +default_command = "polkadot" + +[relaychain.default_resources] +limits = { memory = "4G", cpu = "2" } +requests = { memory = "2G", cpu = "1" } + + [[relaychain.node_groups]] + name = "honest" + count = 3 + args = ["-lparachain=debug"] + + [[relaychain.node_groups]] + name = "kagome-honest" + command = "kagome" + prometheus_prefix = "kagome" + count = 3 + args = ["-lparachain=debug", "--wasm-execution=Compiled"] + + [[relaychain.nodes]] + name = "malus" + command = "malus dispute-finalized-candidates" + args = [ "--alice", "-lparachain=debug,MALUS=trace", "--dispute-offset=14" ] + +[[parachains]] +id = 2000 + + [parachains.collator] + name = "collator" + command = "undying-collator" + args = ["-lparachain=debug"] + +[types.Header] +number = "u64" +parent_hash = "Hash" +post_state = "Hash" diff --git a/zombienet/polkadot/functional/0008-dispute-old-finalized.zndsl b/zombienet/polkadot/functional/0008-dispute-old-finalized.zndsl new file mode 100644 index 0000000000..b30c5801a1 --- /dev/null +++ b/zombienet/polkadot/functional/0008-dispute-old-finalized.zndsl @@ -0,0 +1,21 @@ +Description: Test if disputes triggered on finalized blocks out of scope never get to be confirmed and concluded. +Network: ./0008-dispute-old-finalized.toml +Creds: config + +# Check authority status and peers. +malus: reports node_roles is 4 +honest: reports node_roles is 4 + + +# Ensure parachains are registered. +honest: parachain 2000 is registered within 30 seconds + +# Ensure parachains made progress. +honest: parachain 2000 block height is at least 20 within 300 seconds + +# Ensure that malus is already attempting to dispute +malus: log line contains "😈 Disputing candidate with hash:" within 180 seconds + +# Ensure that honest nodes don't participate and conclude any disputes +honest: count of log lines containing "Dispute on candidate concluded" is 0 within 100 seconds + diff --git a/zombienet/polkadot/functional/0009-approval-voting-coalescing.toml b/zombienet/polkadot/functional/0009-approval-voting-coalescing.toml new file mode 100644 index 0000000000..62d5e7bdaa --- /dev/null +++ b/zombienet/polkadot/functional/0009-approval-voting-coalescing.toml @@ -0,0 +1,113 @@ +[settings] +timeout = 1000 + +[relaychain] +chain = "rococo-local" + +[relaychain.genesis.runtimeGenesis.patch.configuration.config] + needed_approvals = 4 + relay_vrf_modulo_samples = 6 + +[relaychain.genesis.runtimeGenesis.patch.configuration.config.approval_voting_params] + max_approval_coalesce_count = 5 + +[relaychain.default_resources] +limits = { memory = "4G", cpu = "2" } +requests = { memory = "2G", cpu = "1" } + + [[relaychain.node_groups]] + name = "alice" + args = [ "-lparachain=trace,runtime=debug" ] + count = 6 + + [[relaychain.node_groups]] + name = "kagome-alice" + command = "kagome" + prometheus_prefix = "kagome" + args = [ "-lparachain=trace", "-lruntime=debug", "--wasm-execution=Compiled" ] + count = 7 + +[[parachains]] +id = 2000 +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size=100000 --pvf-complexity=1" + + [parachains.collator] + name = "collator01" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size=100000", "--pvf-complexity=1", "--parachain-id=2000"] + +[[parachains]] +id = 2001 +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size=100000 --pvf-complexity=10" + + [parachains.collator] + name = "collator02" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size=100000", "--parachain-id=2001", "--pvf-complexity=10"] + +[[parachains]] +id = 2002 +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size=100000 --pvf-complexity=100" + + [parachains.collator] + name = "collator03" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size=100000", "--parachain-id=2002", "--pvf-complexity=100"] + +[[parachains]] +id = 2003 +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size=20000 --pvf-complexity=300" + + [parachains.collator] + name = "collator04" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size=20000", "--parachain-id=2003", "--pvf-complexity=300"] + +[[parachains]] +id = 2004 +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size=100000 --pvf-complexity=300" + + [parachains.collator] + name = "collator05" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size=100000", "--parachain-id=2004", "--pvf-complexity=300"] + +[[parachains]] +id = 2005 +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size=20000 --pvf-complexity=400" + + [parachains.collator] + name = "collator06" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size=20000", "--pvf-complexity=400", "--parachain-id=2005"] + +[[parachains]] +id = 2006 +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size=100000 --pvf-complexity=300" + + [parachains.collator] + name = "collator07" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size=100000", "--pvf-complexity=300", "--parachain-id=2006"] + +[[parachains]] +id = 2007 +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size=100000 --pvf-complexity=300" + + [parachains.collator] + name = "collator08" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size=100000", "--pvf-complexity=300", "--parachain-id=2007"] + +[types.Header] +number = "u64" +parent_hash = "Hash" +post_state = "Hash" \ No newline at end of file diff --git a/zombienet/polkadot/functional/0009-approval-voting-coalescing.zndsl b/zombienet/polkadot/functional/0009-approval-voting-coalescing.zndsl new file mode 100644 index 0000000000..1fc4f67844 --- /dev/null +++ b/zombienet/polkadot/functional/0009-approval-voting-coalescing.zndsl @@ -0,0 +1,32 @@ +Description: Approval voting coalescing does not lag finality +Network: ./0009-approval-voting-coalescing.toml +Creds: config + +# Check authority status. +alice: reports node_roles is 4 + +# Ensure parachains are registered. +alice: parachain 2000 is registered within 60 seconds +alice: parachain 2001 is registered within 60 seconds +alice: parachain 2002 is registered within 60 seconds +alice: parachain 2003 is registered within 60 seconds +alice: parachain 2004 is registered within 60 seconds +alice: parachain 2005 is registered within 60 seconds +alice: parachain 2006 is registered within 60 seconds +alice: parachain 2007 is registered within 60 seconds + +# Ensure parachains made progress. +alice: parachain 2000 block height is at least 10 within 300 seconds +alice: parachain 2001 block height is at least 10 within 300 seconds +alice: parachain 2002 block height is at least 10 within 300 seconds +alice: parachain 2003 block height is at least 10 within 300 seconds +alice: parachain 2004 block height is at least 10 within 300 seconds +alice: parachain 2005 block height is at least 10 within 300 seconds +alice: parachain 2006 block height is at least 10 within 300 seconds +alice: parachain 2007 block height is at least 10 within 300 seconds + +alice: reports substrate_block_height{status="finalized"} is at least 30 within 400 seconds + +alice: reports polkadot_parachain_approval_checking_finality_lag < 3 + +alice: reports polkadot_parachain_approvals_no_shows_total < 3 within 10 seconds diff --git a/zombienet/polkadot/functional/0010-validator-disabling.toml b/zombienet/polkadot/functional/0010-validator-disabling.toml new file mode 100644 index 0000000000..313fca7b2c --- /dev/null +++ b/zombienet/polkadot/functional/0010-validator-disabling.toml @@ -0,0 +1,45 @@ +[settings] +timeout = 1000 +bootnode = true + +[relaychain.genesis.runtimeGenesis.patch.configuration.config] + needed_approvals = 2 + +[relaychain.genesis.runtimeGenesis.patch.configuration.config.scheduler_params] + max_validators_per_core = 1 + group_rotation_frequency = 10 + +[relaychain] +chain = "westend-local" # for the disabling to take an effect +default_command = "polkadot" + +[relaychain.default_resources] +limits = { memory = "4G", cpu = "2" } +requests = { memory = "2G", cpu = "1" } + + [[relaychain.node_groups]] + name = "honest-validator" + count = 2 + args = ["-lparachain=debug"] + + [[relaychain.node_groups]] + name = "kagome-honest-validator" + command = "kagome" + prometheus_prefix = "kagome" + count = 1 + args = ["-lparachain=debug", "--wasm-execution=Compiled"] + + [[relaychain.node_groups]] + name = "malus-validator" + command = "malus suggest-garbage-candidate" + args = ["-lMALUS=trace"] + count = 1 + +[[parachains]] +id = 1000 +cumulus_based = true + + [parachains.collator] + name = "alice" + command = "polkadot-parachain" + args = ["-lparachain=debug"] diff --git a/zombienet/polkadot/functional/0010-validator-disabling.zndsl b/zombienet/polkadot/functional/0010-validator-disabling.zndsl new file mode 100644 index 0000000000..c810266102 --- /dev/null +++ b/zombienet/polkadot/functional/0010-validator-disabling.zndsl @@ -0,0 +1,21 @@ +Description: Test validator disabling effects +Network: ./0010-validator-disabling.toml +Creds: config + +# Ensure nodes are up and running +honest-validator: reports node_roles is 4 + +# Ensure parachain is registered +honest-validator: parachain 1000 is registered within 100 seconds + +# Ensure parachain made progress +honest-validator: parachain 1000 block height is at least 1 within 300 seconds + +# Wait for the dispute +honest-validator-1: reports parachain_candidate_disputes_total is at least 1 within 600 seconds + +# Disputes should conclude +honest-validator: reports polkadot_parachain_candidate_dispute_concluded{validity="invalid"} is at least 1 within 200 seconds + +# Wait for a few blocks for the disabling to take place. +honest-validator: log line contains "Disabled validators detected" within 180 seconds diff --git a/zombienet/polkadot/functional/0011-async-backing-6-seconds-rate.toml b/zombienet/polkadot/functional/0011-async-backing-6-seconds-rate.toml new file mode 100644 index 0000000000..819b406a3b --- /dev/null +++ b/zombienet/polkadot/functional/0011-async-backing-6-seconds-rate.toml @@ -0,0 +1,58 @@ +[settings] +timeout = 1000 + +[relaychain] +chain = "rococo-local" + +[relaychain.genesis.runtimeGenesis.patch.configuration.config] + needed_approvals = 4 + relay_vrf_modulo_samples = 6 + +[relaychain.genesis.runtimeGenesis.patch.configuration.config.async_backing_params] + max_candidate_depth = 3 + allowed_ancestry_len = 2 + +[relaychain.genesis.runtimeGenesis.patch.configuration.config.scheduler_params] + lookahead = 2 + group_rotation_frequency = 4 + + +[relaychain.default_resources] +limits = { memory = "4G", cpu = "2" } +requests = { memory = "2G", cpu = "1" } + + [[relaychain.node_groups]] + name = "alice" + args = [ "-lparachain=debug" ] + count = 9 + + [[relaychain.node_groups]] + name = "bob" + command = "kagome" + prometheus_prefix = "kagome" + args = [ "-lparachain=debug", "--wasm-execution Compiled" ] + count = 3 + +[[parachains]] +id = 2000 +addToGenesis = true +genesis_state_generator = "undying-collator export-genesis-state --pov-size=100000 --pvf-complexity=1" + + [parachains.collator] + name = "collator01" + command = "undying-collator" + args = ["-lparachain=debug", "--pov-size=100000", "--pvf-complexity=1", "--parachain-id=2000"] + +[[parachains]] +id = 2001 +cumulus_based = true + + [parachains.collator] + name = "collator02" + command = "polkadot-parachain" + args = ["-lparachain=debug"] + +[types.Header] +number = "u64" +parent_hash = "Hash" +post_state = "Hash" \ No newline at end of file diff --git a/zombienet/polkadot/functional/0011-async-backing-6-seconds-rate.zndsl b/zombienet/polkadot/functional/0011-async-backing-6-seconds-rate.zndsl new file mode 100644 index 0000000000..6846dfcdec --- /dev/null +++ b/zombienet/polkadot/functional/0011-async-backing-6-seconds-rate.zndsl @@ -0,0 +1,24 @@ +Description: Test we are producing blocks at 6 seconds clip +Network: ./0011-async-backing-6-seconds-rate.toml +Creds: config + +# Check authority status. +alice: reports node_roles is 4 +bob: reports node_roles is 4 + +# Ensure parachains are registered. +alice: parachain 2000 is registered within 60 seconds +bob: parachain 2001 is registered within 60 seconds + +# Ensure parachains made progress. +alice: reports substrate_block_height{status="finalized"} is at least 10 within 100 seconds +bob: reports kagome_block_height{status="finalized"} is at least 10 within 100 seconds + +# This parachains should produce blocks at 6s clip, let's assume an 8s rate, allowing for +# some slots to be missed on slower machines +alice: parachain 2000 block height is at least 30 within 240 seconds +bob: parachain 2000 block height is at least 30 within 240 seconds +# This should already have produced the needed blocks +alice: parachain 2001 block height is at least 30 within 6 seconds +bob: parachain 2001 block height is at least 30 within 6 seconds + diff --git a/zombienet/precompile.sh b/zombienet/precompile.sh index ea527a8c1b..3496fcc4ed 100755 --- a/zombienet/precompile.sh +++ b/zombienet/precompile.sh @@ -23,5 +23,5 @@ kagome --tmp --chain $DIR/rococo-local.json \ kagome --tmp --chain $DIR/westend-local.json \ --precompile-para $DIR/polkadot-parachain.json -kagome --tmp --chain kagome/zombienet/0009-basic-warp-sync/gen-db-raw.json \ +kagome --tmp --chain ./old/0009-basic-warp-sync/gen-db-raw.json \ --precompile-relay