difftreelog
Merge branch 'develop' into feature/multi-assets-redone
in: master
12 files changed
.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
.github/workflows/market-test.ymldiffbeforeafterboth1name: 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.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
.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()
Cargo.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",
pallets/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(
runtime/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>,
runtime/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,
runtime/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,
runtime/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,
tests/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()!;
tests/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');
+ });
+});