git.delta.rocks / unique-network / refs/commits / ae09c8df0c85

difftreelog

Merge branch 'develop' into feature/multi-assets-redone

Alexander Aksenov2022-09-15parents: #285030f #85b56f6.patch.diff
in: master

12 files changed

modified.github/workflows/ci-master.ymldiffbeforeafterboth
--- a/.github/workflows/ci-master.yml
+++ b/.github/workflows/ci-master.yml
@@ -18,16 +18,13 @@
     uses: ./.github/workflows/node-only-update_v2.yml
 
   forkless:
-    if: ${{ contains( github.event.pull_request.labels.*.name, 'forkless') }}
     uses: ./.github/workflows/forkless.yml
 
   canary:
-    if: ${{ contains( github.event.pull_request.labels.*.name, 'canary') }}
     uses: ./.github/workflows/canary.yml
     secrets: inherit # pass all secrets
 
   xcm:
-    if: ${{ contains( github.event.pull_request.labels.*.name, 'xcm') }}
     uses: ./.github/workflows/xcm.yml
     secrets: inherit # pass all secrets
 
deleted.github/workflows/market-test.ymldiffbeforeafterboth
before · .github/workflows/market-test.yml
1name: market api tests23# Controls when the action will run.4on:5 # Triggers the workflow on push or pull request events but only for the master branch6  pull_request:7    branches:8      - master9    types:10      - opened11      - reopened12      - synchronize   #commit(s) pushed to the pull request13      - ready_for_review1415  # Allows you to run this workflow manually from the Actions tab16  workflow_dispatch:171819concurrency:20  group: ${{ github.workflow }}-${{ github.ref }}21  cancel-in-progress: true2223# A workflow run is made up of one or more jobs that can run sequentially or in parallel24jobs:2526  market_test:27    # The type of runner that the job will run on28    runs-on: [self-hosted-ci,large]29    timeout-minutes: 138030    31    strategy:32      matrix:33        include:34          - network: "opal"35            features: "opal-runtime"36          - network: "quartz"37            features: "quartz-runtime"38          - network: "unique"39            features: "unique-runtime"4041    name: draft job4243    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.444546    steps:47#      - name: Skip if pull request is in Draft48        # `if: github.event.pull_request.draft == true` should be kept here, at49        # the step level, rather than at the job level. The latter is not50        # recommended because when the PR is moved from "Draft" to "Ready to51        # review" the workflow will immediately be passing (since it was skipped),52        # even though it hasn't actually ran, since it takes a few seconds for53        # the workflow to start. This is also disclosed in:54        # https://github.community/t/dont-run-actions-on-draft-pull-requests/16817/1755        # That scenario would open an opportunity for the check to be bypassed:56        # 1. Get your PR approved57        # 2. Move it to Draft58        # 3. Push whatever commits you want59        # 4. Move it to "Ready for review"; now the workflow is passing (it was60        #    skipped) and "Check reviews" is also passing (it won't be updated61        #    until the workflow is finished)62#        if: github.event.pull_request.draft == true63#        run: exit 16465      - name: Clean Workspace66        uses: AutoModality/action-clean@v1.1.06768      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it69      - name: Checkout master repo70        uses: actions/checkout@master71        with:72          ref: ${{ github.head_ref }}  #Checking out head commit7374      - name: Checkout Market e2e tests75        uses: actions/checkout@v376        with:77          repository: 'UniqueNetwork/market-e2e-tests'78          ssh-key: '${{ secrets.GH_PAT }}'79          path: 'qa-tests'80          ref: 'QA-65_maxandreev'8182      - name: Read .env file83        uses: xom9ikk/dotenv@v1.0.284      85      - name: Copy qa-tests/.env.example to qa-tests/.env86        working-directory: qa-tests87        run: cp .env.docker .env8889      - name: Show content of qa-test/.env90        working-directory: qa-tests91        run: cat .env9293      - name: Read qa -test .env file94        uses: xom9ikk/dotenv@v1.0.295        with:96          path: qa-tests/97        98      - name: Generate ENV related extend file for docker-compose99        uses: cuchi/jinja2-action@v1.2.0100        with:101          template: qa-tests/.docker/docker-compose.tmp-market.j2102          output_file: qa-tests/.docker/docker-compose.${{ matrix.network }}.yml103          variables: |104            REPO_URL=${{ github.server_url }}/${{ github.repository }}.git105            RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}106            POLKADOT_BUILD_BRANCH=${{ env.POLKADOT_BUILD_BRANCH }}107            FEATURE=${{ matrix.features }}108            BRANCH=${{ github.head_ref }}109110111      - name: Show build configuration112        working-directory: qa-tests113        run: cat .docker/docker-compose.${{ matrix.network }}.yml114115      - name: Start node-parachain116        working-directory: qa-tests117        run: docker-compose -f ".docker/docker-compose.market.yml" -f ".docker/docker-compose.${{ matrix.network }}.yml" up -d --build --remove-orphans --force-recreate node-parachain 118119      - name: Start nonce-app120        working-directory: qa-tests121        run: docker-compose -f ".docker/docker-compose.market.yml" up -d --build --remove-orphans --force-recreate nonce-app 122     123      - uses: actions/setup-node@v3124        with:125          node-version: 16126127      - name: Setup TypeScript128        working-directory: qa-tests129        run: |130          npm install131          npm install -g ts-node132133      - name: Copy qa-tests/.env.example to qa-tests/.env134        working-directory: qa-tests135        run: | 136          rm -rf .env137          cp .env.example .env138      139     140      - name: Show content of qa-test/.env141        working-directory: qa-tests142        run: cat .env143144145      - name: Read qa -test .env file146        uses: xom9ikk/dotenv@v1.0.2147        with:148          path: qa-tests/149150      - name: Generate accounts151        working-directory: qa-tests152        run: ts-node ./src/scripts/create-market-accounts.ts153154      - name: Deploy contracts155        run: |156          cd qa-tests157          ts-node ./src/scripts/deploy-contract.ts158159      - name: Import test data160        working-directory: qa-tests161        run: ts-node ./src/scripts/create-test-collections.ts162163      - name: Show content of qa-test .env164        working-directory: qa-tests165        run: cat .env166167      - name: Copy qa-tests/.env.example to qa-tests/.env168        working-directory: qa-tests169        run: |170          rm -rf .env.docker171          cp .env .env.docker172          sed -i '/UNIQUE_WS_ENDPOINT/c UNIQUE_WS_ENDPOINT=ws://node-parachain:9944' .env.docker173174      - name: Read qa -test .env file175        uses: xom9ikk/dotenv@v1.0.2176        with:177          path: qa-tests/178179      - name: local-market:start180        run: docker-compose -f "qa-tests/.docker/docker-compose.market.yml" -f "qa-tests/.docker/docker-compose.${{ matrix.network }}.yml" up -d --build181182      - name: Wait for market readyness183        working-directory: qa-tests184        run: src/scripts/wait-market-ready.sh185        shell: bash186187      - name: Install dependecies188        working-directory: qa-tests189        run: |190          npm ci191          npm install -D @playwright/test192          npx playwright install-deps193          npx playwright install194          195      - name: 196        working-directory: qa-tests197        run: |198          npx playwright test --workers=8 --quiet .*.api.test.ts --reporter=github --config playwright.config.ts199200      - name: Show env variables201        if: success() || failure()202        run: printenv203204      - name: look up for report205        if: success() || failure()206        run: |207          ls -la 208          ls -la qa-tests/209210211      - name: Stop running containers212        if: always()                   # run this step always213        run: docker-compose -f "qa-tests/.docker/docker-compose.market.yml" -f "qa-tests/.docker/docker-compose.${{ matrix.network }}.yml" down --volumes214215      - name: Remove builder cache216        if: always()                   # run this step always217        run: |218          docker builder prune -f219          docker system prune -f220221      - name: Clean Workspace222        if: always()223        uses: AutoModality/action-clean@v1.1.0224225226227
modified.github/workflows/market-test_v2.ymldiffbeforeafterboth
--- a/.github/workflows/market-test_v2.yml
+++ b/.github/workflows/market-test_v2.yml
@@ -45,7 +45,7 @@
           repository: 'UniqueNetwork/market-e2e-tests'
           ssh-key: ${{ secrets.GH_PAT }}
           path: 'qa-tests'
-          ref: 'ci_test_v2'
+          ref: 'master'
 
       - name: Read .env file
         uses: xom9ikk/dotenv@v1.0.2
modified.github/workflows/node-only-update_v2.ymldiffbeforeafterboth
--- a/.github/workflows/node-only-update_v2.yml
+++ b/.github/workflows/node-only-update_v2.yml
@@ -10,7 +10,7 @@
 # A workflow run is made up of one or more jobs that can run sequentially or in parallel
 jobs:
 
-  execution-marix:
+  nodes-execution-matrix:
 
     name: execution matrix
 
@@ -42,8 +42,8 @@
 
 
 
-  forkless-update-nodata:
-    needs: execution-marix
+  nodes-only-update:
+    needs: nodes-execution-matrix
     # The type of runner that the job will run on
     runs-on: [self-hosted-ci,large]
 
@@ -57,7 +57,7 @@
 
     strategy:
       matrix:
-        include: ${{fromJson(needs.prepare-execution-marix.outputs.matrix)}}
+        include: ${{fromJson(needs.nodes-execution-matrix.outputs.matrix)}}
 
     steps:
 
@@ -156,12 +156,18 @@
           exit 0
         shell: bash
 
+      - name: Checkout at '${{ matrix.mainnet_branch }}' branch
+        uses: actions/checkout@master
+        with:
+          ref: ${{ matrix.mainnet_branch }}  #Checking out head commit
+          path: ${{ matrix.mainnet_branch }}
+
+
       - name: Run tests before Node Parachain upgrade
-        working-directory: tests
+        working-directory: ${{ matrix.mainnet_branch }}/tests
         run: |
           yarn install
           yarn add mochawesome
-          node scripts/readyness.js
           echo "Ready to start tests"
           yarn polkadot-types
           NOW=$(date +%s) && yarn test --reporter mochawesome --reporter-options reportFilename=test-${NOW}
@@ -174,7 +180,7 @@
         if: success() || failure()    # run this step even if previous step failed
         with:
           name: Tests before node upgrade ${{ matrix.network }}            # Name of the check run which will be created
-          path: tests/mochawesome-report/test-*.json    # Path to test results
+          path: ${{ matrix.mainnet_branch }}/tests/mochawesome-report/test-*.json    # Path to test results
           reporter: mochawesome-json
           fail-on-error: 'false'
 
@@ -263,8 +269,9 @@
       - name: Remove builder cache
         if: always()                   # run this step always
         run: |
-          docker builder prune -f
+          docker builder prune -f -a
           docker system prune -f
+          docker image prune -f -a
 
       - name: Clean Workspace
         if: always()
modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -6600,7 +6600,7 @@
 
 [[package]]
 name = "pallet-unique"
-version = "0.1.4"
+version = "0.2.0"
 dependencies = [
  "ethereum",
  "evm-coder",
modifiedpallets/app-promotion/src/lib.rsdiffbeforeafterboth
--- a/pallets/app-promotion/src/lib.rs
+++ b/pallets/app-promotion/src/lib.rs
@@ -594,14 +594,14 @@
 								last_id,
 								*income_acc.borrow(),
 								ExistenceRequirement::KeepAlive,
-							)
-							.and_then(|_| {
-								Self::add_lock_balance(last_id, *income_acc.borrow())?;
-								<TotalStaked<T>>::try_mutate(|staked| {
-									staked
-										.checked_add(&*income_acc.borrow())
-										.ok_or(ArithmeticError::Overflow.into())
-								})
+							)?;
+
+							Self::add_lock_balance(last_id, *income_acc.borrow())?;
+							<TotalStaked<T>>::try_mutate(|staked| -> DispatchResult {
+								*staked = staked
+									.checked_add(&*income_acc.borrow())
+									.ok_or(ArithmeticError::Overflow)?;
+								Ok(())
 							})?;
 
 							Self::deposit_event(Event::StakingRecalculation(
modifiedruntime/common/mod.rsdiffbeforeafterboth
--- a/runtime/common/mod.rs
+++ b/runtime/common/mod.rs
@@ -82,7 +82,7 @@
 
 pub type SignedExtra = (
 	frame_system::CheckSpecVersion<Runtime>,
-	// system::CheckTxVersion<Runtime>,
+	frame_system::CheckTxVersion<Runtime>,
 	frame_system::CheckGenesis<Runtime>,
 	frame_system::CheckEra<Runtime>,
 	frame_system::CheckNonce<Runtime>,
modifiedruntime/opal/src/lib.rsdiffbeforeafterboth
--- a/runtime/opal/src/lib.rs
+++ b/runtime/opal/src/lib.rs
@@ -50,7 +50,7 @@
 	spec_name: create_runtime_str!(RUNTIME_NAME),
 	impl_name: create_runtime_str!(RUNTIME_NAME),
 	authoring_version: 1,
-	spec_version: 927020,
+	spec_version: 927030,
 	impl_version: 0,
 	apis: RUNTIME_API_VERSIONS,
 	transaction_version: 2,
modifiedruntime/quartz/src/lib.rsdiffbeforeafterboth
--- a/runtime/quartz/src/lib.rs
+++ b/runtime/quartz/src/lib.rs
@@ -50,7 +50,7 @@
 	spec_name: create_runtime_str!(RUNTIME_NAME),
 	impl_name: create_runtime_str!(RUNTIME_NAME),
 	authoring_version: 1,
-	spec_version: 927020,
+	spec_version: 927030,
 	impl_version: 0,
 	apis: RUNTIME_API_VERSIONS,
 	transaction_version: 2,
modifiedruntime/unique/src/lib.rsdiffbeforeafterboth
--- a/runtime/unique/src/lib.rs
+++ b/runtime/unique/src/lib.rs
@@ -50,7 +50,7 @@
 	spec_name: create_runtime_str!(RUNTIME_NAME),
 	impl_name: create_runtime_str!(RUNTIME_NAME),
 	authoring_version: 1,
-	spec_version: 927020,
+	spec_version: 927030,
 	impl_version: 0,
 	apis: RUNTIME_API_VERSIONS,
 	transaction_version: 2,
modifiedtests/src/app-promotion.test.tsdiffbeforeafterboth
--- a/tests/src/app-promotion.test.ts
+++ b/tests/src/app-promotion.test.ts
@@ -661,6 +661,26 @@
     });
   });
 
+  it('should increase total staked', async() => {
+    await usingPlaygrounds(async (helper) => {
+      const staker = accounts.pop()!;
+      const totalStakedBefore = await helper.staking.getTotalStaked();
+      await helper.staking.stake(staker, 100n * nominal);
+
+      // Wait for rewards and pay
+      const stakedInBlock = (await helper.staking.getTotalStakedPerBlock({Substrate: staker.address}))[0][0];
+      await helper.wait.forRelayBlockNumber(rewardAvailableInBlock(stakedInBlock));
+      await helper.signTransaction(palletAdmin, helper.api!.tx.appPromotion.payoutStakers(100));
+
+      const totalStakedAfter = await helper.staking.getTotalStaked();
+      expect(totalStakedAfter >= totalStakedBefore + calculateIncome(100n * nominal, 10n)).to.be.true;
+
+      // staker can unstake
+      await helper.staking.unstake(staker);
+      expect(await helper.staking.getTotalStaked()).to.be.equal(totalStakedAfter - calculateIncome(100n * nominal, 10n));
+    });
+  });
+
   it('should credit 0.05% for staking period', async () => {    
     await usingPlaygrounds(async helper => {
       const staker = accounts.pop()!;
addedtests/src/tx-version-presence.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/tx-version-presence.test.ts
@@ -0,0 +1,32 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
+import { Metadata } from '@polkadot/types';
+import {itSub, usingPlaygrounds, expect} from './util/playgrounds';
+
+let metadata: Metadata;
+
+describe('TxVersion is present', () => {
+  before(async () => {
+    await usingPlaygrounds(async helper => {
+      metadata = await helper.api!.rpc.state.getMetadata();
+    });
+  });
+
+  itSub('Signed extension CheckTxVersion is present', async () => {
+    expect(metadata.asLatest.extrinsic.signedExtensions.map(se => se.identifier.toString())).to.include('CheckTxVersion');
+  });
+});