diff --git a/.docker/Dockerfile-parachain b/.docker/Dockerfile-parachain new file mode 100644 index 0000000000..fb84f75a48 --- /dev/null +++ b/.docker/Dockerfile-parachain @@ -0,0 +1,78 @@ +ARG POLKADOT_BUILD_BRANCH +FROM uniquenetwork/builder-polkadot:${POLKADOT_BUILD_BRANCH} as polkadot + +# ===== Rust builder ===== +FROM ubuntu:20.04 as rust-builder +LABEL maintainer="Unique.Network" + +ARG RUST_TOOLCHAIN= + +ENV RUST_TOOLCHAIN $RUST_TOOLCHAIN +ENV CARGO_HOME="/cargo-home" +ENV PATH="/cargo-home/bin:$PATH" +ENV TZ=UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update && \ + apt-get install -y curl cmake pkg-config libssl-dev git clang protobuf-compiler && \ + apt-get clean && \ + rm -r /var/lib/apt/lists/* + +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none + +RUN rustup toolchain uninstall $(rustup toolchain list) && \ + rustup toolchain install $RUST_TOOLCHAIN && \ + rustup default $RUST_TOOLCHAIN && \ + rustup target list --installed && \ + rustup show +RUN rustup target add wasm32-unknown-unknown --toolchain $RUST_TOOLCHAIN + +RUN mkdir /unique_parachain +WORKDIR /unique_parachain + + +# ===== BUILD ====== +FROM rust-builder as builder-unique + +ARG PROFILE=release +ARG FEATURE= +ARG REPO_URL= +ARG BRANCH= + +WORKDIR /unique_parachain + +RUN git clone $REPO_URL -b $BRANCH . && \ + cargo build --features=$FEATURE --$PROFILE + +# ===== RUN ====== + +FROM ubuntu:20.04 + +ARG POLKADOT_BUILD_BRANCH= +ENV POLKADOT_BUILD_BRANCH $POLKADOT_BUILD_BRANCH + +RUN apt-get -y update && \ + apt-get -y install curl git && \ + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash && \ + export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + nvm install v16.16.0 && \ + nvm use v16.16.0 + +RUN git clone https://github.com/uniquenetwork/polkadot-launch -b unique-network + +RUN export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + cd /polkadot-launch && \ + npm install --global yarn && \ + yarn install + +COPY --from=builder-unique /unique_parachain/target/release/unique-collator /unique-chain/target/release/ +COPY --from=builder-unique /unique_parachain/launch-config.json /polkadot-launch/launch-config.json + +COPY --from=polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ + +CMD export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + cd /polkadot-launch && \ + yarn start launch-config.json diff --git a/.docker/Dockerfile-parachain-upgrade b/.docker/Dockerfile-parachain-upgrade new file mode 100644 index 0000000000..4c60f106ab --- /dev/null +++ b/.docker/Dockerfile-parachain-upgrade @@ -0,0 +1,97 @@ +ARG POLKADOT_BUILD_BRANCH +FROM uniquenetwork/builder-polkadot:${POLKADOT_BUILD_BRANCH} as polkadot + +# ===== Rust builder ===== +FROM ubuntu:20.04 as rust-builder +LABEL maintainer="Unique.Network" + +ARG RUST_TOOLCHAIN= + +ENV RUST_TOOLCHAIN $RUST_TOOLCHAIN +ENV CARGO_HOME="/cargo-home" +ENV PATH="/cargo-home/bin:$PATH" +ENV TZ=UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update && \ + apt-get install -y curl cmake pkg-config libssl-dev git clang protobuf-compiler && \ + apt-get clean && \ + rm -r /var/lib/apt/lists/* + +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none + +RUN rustup toolchain uninstall $(rustup toolchain list) && \ + rustup toolchain install $RUST_TOOLCHAIN && \ + rustup default $RUST_TOOLCHAIN && \ + rustup target list --installed && \ + rustup show +RUN rustup target add wasm32-unknown-unknown --toolchain $RUST_TOOLCHAIN + +RUN mkdir /unique_parachain +WORKDIR /unique_parachain + +# ===== BUILD current version ====== +FROM rust-builder as builder-unique-current + +ARG PROFILE=release +ARG FEATURE= +ARG MAINNET_BRANCH= +ARG REPO_URL= + +WORKDIR /unique_parachain + +RUN git clone $REPO_URL -b $MAINNET_BRANCH . && \ + cargo build --features=$FEATURE --$PROFILE + +# ===== BUILD target version ====== +FROM rust-builder as builder-unique-target + +ARG PROFILE=release +ARG FEATURE= +ARG BRANCH= +ARG REPO_URL= + +COPY . /unique_parachain +WORKDIR /unique_parachain + +RUN cargo build --features=$FEATURE --$PROFILE + +# ===== RUN ====== + +FROM ubuntu:20.04 + +ARG RUNTIME= +ENV RUNTIME $RUNTIME +ARG POLKADOT_BUILD_BRANCH= +ENV POLKADOT_BUILD_BRANCH $POLKADOT_BUILD_BRANCH + +RUN apt-get -y update && \ + apt-get -y install curl git && \ + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash && \ + export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + nvm install v16.16.0 && \ + nvm use v16.16.0 + +RUN git clone https://github.com/uniquenetwork/polkadot-launch -b unique-network + +RUN export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + cd /polkadot-launch && \ + npm install --global yarn && \ + yarn install + +RUN echo "$RUNTIME" +RUN echo "$POLKADOT_BUILD_BRANCH" + +COPY --from=builder-unique-current /unique_parachain/target/release/unique-collator /unique-chain/current/release/ +COPY --from=builder-unique-target /unique_parachain/target/release/unique-collator /unique-chain/target/release/ +COPY --from=builder-unique-target /unique_parachain/target/release/wbuild/"$RUNTIME"-runtime/"$RUNTIME"_runtime.compact.compressed.wasm /unique-chain/target/release/wbuild/"$RUNTIME"-runtime/"$RUNTIME"_runtime.compact.compressed.wasm + +COPY --from=polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ +COPY --from=polkadot /unique_parachain/polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm /polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm + +CMD export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + cd /polkadot-launch && \ + yarn start launch-config.json --test-upgrade-parachains \ No newline at end of file diff --git a/.docker/Dockerfile-parachain-upgrade-data b/.docker/Dockerfile-parachain-upgrade-data new file mode 100644 index 0000000000..010ec5738a --- /dev/null +++ b/.docker/Dockerfile-parachain-upgrade-data @@ -0,0 +1,102 @@ +ARG POLKADOT_BUILD_BRANCH +FROM uniquenetwork/builder-polkadot:${POLKADOT_BUILD_BRANCH} as polkadot + +# ===== Rust builder ===== +FROM ubuntu:20.04 as rust-builder +LABEL maintainer="Unique.Network" + +ARG RUST_TOOLCHAIN= + +ENV RUST_TOOLCHAIN $RUST_TOOLCHAIN +ENV CARGO_HOME="/cargo-home" +ENV PATH="/cargo-home/bin:$PATH" +ENV TZ=UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update && \ + apt-get install -y curl cmake pkg-config libssl-dev git clang protobuf-compiler && \ + apt-get clean && \ + rm -r /var/lib/apt/lists/* + +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none + +RUN rustup toolchain uninstall $(rustup toolchain list) && \ + rustup toolchain install $RUST_TOOLCHAIN && \ + rustup default $RUST_TOOLCHAIN && \ + rustup target list --installed && \ + rustup show +RUN rustup target add wasm32-unknown-unknown --toolchain $RUST_TOOLCHAIN + +RUN mkdir /unique_parachain +WORKDIR /unique_parachain + +# ===== BUILD current version ====== +FROM rust-builder as builder-unique-current + +ARG PROFILE=release +ARG FEATURE= +ARG MAINNET_BRANCH= +ARG REPO_URL= + +WORKDIR /unique_parachain + +RUN git clone $REPO_URL -b $MAINNET_BRANCH . && \ + cargo build --features=$FEATURE --$PROFILE + +# ===== BUILD target version ====== +FROM rust-builder as builder-unique-target + +ARG PROFILE=release +ARG FEATURE= +ARG BRANCH= +ARG REPO_URL= + +COPY . /unique_parachain +WORKDIR /unique_parachain + +RUN cargo build --features=$FEATURE --$PROFILE + +# ===== RUN ====== + +FROM ubuntu:20.04 + +ARG RUNTIME= +ENV RUNTIME $RUNTIME +ARG REPLICA_FROM= +ENV REPLICA_FROM=$REPLICA_FROM +ARG POLKADOT_BUILD_BRANCH= +ENV POLKADOT_BUILD_BRANCH $POLKADOT_BUILD_BRANCH + +RUN apt-get -y update && \ + apt-get -y install curl git && \ + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash && \ + export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + nvm install v16.16.0 && \ + nvm use v16.16.0 + +RUN git clone https://github.com/uniquenetwork/polkadot-launch.git -b unique-network + +RUN export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + cd /polkadot-launch && \ + npm install --global yarn && \ + yarn install + +RUN echo "$RUNTIME" +RUN echo "$REPLICA_FROM" +RUN echo "$POLKADOT_BUILD_BRANCH" + +COPY --from=builder-unique-current /unique_parachain/target/release/unique-collator /unique-chain/current/release/ +COPY --from=builder-unique-target /unique_parachain/target/release/unique-collator /unique-chain/target/release/ +COPY --from=builder-unique-target /unique_parachain/target/release/wbuild/"$RUNTIME"-runtime/"$RUNTIME"_runtime.compact.compressed.wasm /unique-chain/target/release/wbuild/"$RUNTIME"-runtime/"$RUNTIME"_runtime.compact.compressed.wasm + +COPY --from=uniquenetwork/builder-chainql:latest /chainql/target/release/chainql /chainql/target/release/ + +COPY --from=polkadot /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ +COPY --from=polkadot /unique_parachain/polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm /polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm + +CMD export NVM_DIR="$HOME/.nvm" PATH="$PATH:/chainql/target/release" REPLICA_FROM && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + cd /polkadot-launch && \ + yarn start launch-config.json --test-upgrade-parachains \ No newline at end of file diff --git a/.docker/Dockerfile-testnet.j2 b/.docker/Dockerfile-testnet.j2 new file mode 100644 index 0000000000..733ecaa06d --- /dev/null +++ b/.docker/Dockerfile-testnet.j2 @@ -0,0 +1,73 @@ +# ===== Rust builder ===== +FROM ubuntu:20.04 as rust-builder +LABEL maintainer="Unique.Network" + +ENV CARGO_HOME="/cargo-home" +ENV PATH="/cargo-home/bin:$PATH" +ENV TZ=UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update && \ + apt-get install -y curl cmake pkg-config libssl-dev git clang llvm libudev-dev protobuf-compiler && \ + apt-get clean && \ + rm -r /var/lib/apt/lists/* + +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none + +RUN rustup toolchain uninstall $(rustup toolchain list) && \ + rustup toolchain install {{ RUST_TOOLCHAIN }} && \ + rustup default {{ RUST_TOOLCHAIN }} && \ + rustup target list --installed && \ + rustup show +RUN rustup target add wasm32-unknown-unknown --toolchain {{ RUST_TOOLCHAIN }} + +RUN mkdir /unique_parachain +WORKDIR /unique_parachain + +# ===== BUILD ====== +FROM rust-builder as builder-unique + +ARG PROFILE=release + +WORKDIR /unique_parachain + +RUN git clone -b {{ BRANCH }} https://github.com/UniqueNetwork/unique-chain.git && \ + cd unique-chain && \ + cargo build --features={{ FEATURE }} --$PROFILE + +# ===== RUN ====== + +FROM ubuntu:20.04 + +RUN apt-get -y update && \ + apt-get -y install curl git && \ + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash && \ + export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + nvm install v16.16.0 && \ + nvm use v16.16.0 + +RUN git clone https://github.com/uniquenetwork/polkadot-launch -b {{ POLKADOT_LAUNCH_BRANCH }} + +RUN export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + cd /polkadot-launch && \ + npm install --global yarn && \ + yarn install + +COPY --from=builder-unique /unique_parachain/unique-chain/.docker/testnet-config/launch-config.json /polkadot-launch/launch-config.json +COPY --from=builder-unique /unique_parachain/unique-chain/target/release/unique-collator /unique-chain/target/release/ + +COPY --from=uniquenetwork/builder-polkadot:{{ POLKADOT_BUILD_BRANCH }} /unique_parachain/polkadot/target/release/polkadot /polkadot/target/release/ + +EXPOSE 9844 +EXPOSE 9944 +EXPOSE 9933 +EXPOSE 9833 +EXPOSE 40333 +EXPOSE 30333 + +CMD export NVM_DIR="$HOME/.nvm" && \ + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ + cd /polkadot-launch && \ + yarn start launch-config.json \ No newline at end of file diff --git a/.docker/Dockerfile-try-runtime b/.docker/Dockerfile-try-runtime new file mode 100644 index 0000000000..fc0437e5ce --- /dev/null +++ b/.docker/Dockerfile-try-runtime @@ -0,0 +1,51 @@ +# ===== Rust builder ===== +FROM ubuntu:20.04 as rust-builder +LABEL maintainer="Unique.Network" + +ARG RUST_TOOLCHAIN= + +ENV RUST_TOOLCHAIN $RUST_TOOLCHAIN +ENV CARGO_HOME="/cargo-home" +ENV PATH="/cargo-home/bin:$PATH" +ENV TZ=UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + + +RUN apt-get update && \ + apt-get install -y curl cmake pkg-config libssl-dev git clang protobuf-compiler && \ + apt-get clean && \ + rm -r /var/lib/apt/lists/* + +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none + +RUN rustup toolchain uninstall $(rustup toolchain list) && \ + rustup toolchain install $RUST_TOOLCHAIN && \ + rustup default $RUST_TOOLCHAIN && \ + rustup target list --installed && \ + rustup show +RUN rustup target add wasm32-unknown-unknown --toolchain $RUST_TOOLCHAIN + +RUN mkdir /unique_parachain +WORKDIR /unique_parachain + + +# ===== BUILD ====== +FROM rust-builder as builder-unique + +ARG PROFILE=release +ARG FEATURE= +ARG REPLICA_FROM= +ENV FEATURE $FEATURE +ENV REPLICA_FROM $REPLICA_FROM + +COPY . /unique_parachain +WORKDIR /unique_parachain + +RUN echo "[BE CAREFUL] applying disable-ic patch\n" && \ + git apply .docker/patch/disable-ic.patch + +RUN echo "Requested features: $FEATURE\n" && \ + echo "Fork from: $REPLICA_FROM\n" && \ + cargo build --features=try-runtime,$FEATURE --release + +CMD cargo run --features=try-runtime,$FEATURE --release -- try-runtime on-runtime-upgrade live --uri $REPLICA_FROM diff --git a/.docker/docker-compose-forkless.yml b/.docker/docker-compose-forkless.yml new file mode 100644 index 0000000000..d2a4e90f7a --- /dev/null +++ b/.docker/docker-compose-forkless.yml @@ -0,0 +1,24 @@ +version: "3.5" + +services: + node-parachain: + build: + context: ../ + dockerfile: .docker/Dockerfile-parachain-upgrade + image: node-parachain + container_name: node-parachain + volumes: + - type: bind + source: ./launch-config-forkless.json + target: /polkadot-launch/launch-config.json + read_only: true + expose: + - 9944 + - 9933 + ports: + - 127.0.0.1:9944:9944 + - 127.0.0.1:9933:9933 + logging: + options: + max-size: "1m" + max-file: "3" \ No newline at end of file diff --git a/.docker/docker-compose-try-runtime.yml b/.docker/docker-compose-try-runtime.yml new file mode 100644 index 0000000000..f3af2f137b --- /dev/null +++ b/.docker/docker-compose-try-runtime.yml @@ -0,0 +1,19 @@ +version: "3.5" + +services: + try-runtime: + build: + context: ../ + dockerfile: .docker/Dockerfile-try-runtime + image: try-runtime + container_name: try-runtime + expose: + - 9944 + - 9933 + ports: + - 127.0.0.1:9944:9944 + - 127.0.0.1:9933:9933 + logging: + options: + max-size: "1m" + max-file: "3" \ No newline at end of file diff --git a/.docker/docker-compose.tmp-forkless-data.j2 b/.docker/docker-compose.tmp-forkless-data.j2 new file mode 100644 index 0000000000..4637d9909b --- /dev/null +++ b/.docker/docker-compose.tmp-forkless-data.j2 @@ -0,0 +1,42 @@ +version: "3.5" + +services: + node-parachain: + build: + args: + - "RUST_TOOLCHAIN={{ RUST_TOOLCHAIN }}" + - "BRANCH={{ BRANCH }}" + - "REPO_URL={{ REPO_URL }}" + - "FEATURE={{ FEATURE }}" + - "RUNTIME={{ RUNTIME }}" + - "POLKADOT_BUILD_BRANCH={{ POLKADOT_BUILD_BRANCH }}" + - "MAINNET_TAG={{ MAINNET_TAG }}" + - "MAINNET_BRANCH={{ MAINNET_BRANCH }}" + - "REPLICA_FROM={{ REPLICA_FROM }}" + context: ../ + dockerfile: .docker/Dockerfile-parachain-upgrade-data + image: node-parachain + container_name: node-parachain + volumes: + - type: bind + source: ./launch-config-forkless-data.json + target: /polkadot-launch/launch-config.json + read_only: true + - type: bind + source: ./forkless-config/fork.jsonnet + target: /polkadot-launch/fork.jsonnet + read_only: true + - type: bind + source: ./forkless-config/typeNames.jsonnet + target: /polkadot-launch/typeNames.jsonnet + read_only: true + expose: + - 9944 + - 9933 + ports: + - 127.0.0.1:9944:9944 + - 127.0.0.1:9933:9933 + logging: + options: + max-size: "1m" + max-file: "3" \ No newline at end of file diff --git a/.docker/docker-compose.tmp-forkless-nodata.j2 b/.docker/docker-compose.tmp-forkless-nodata.j2 new file mode 100644 index 0000000000..7bcf5b58d6 --- /dev/null +++ b/.docker/docker-compose.tmp-forkless-nodata.j2 @@ -0,0 +1,33 @@ +version: "3.5" + +services: + node-parachain: + build: + args: + - "RUST_TOOLCHAIN={{ RUST_TOOLCHAIN }}" + - "BRANCH={{ BRANCH }}" + - "REPO_URL={{ REPO_URL }}" + - "FEATURE={{ FEATURE }}" + - "RUNTIME={{ RUNTIME }}" + - "POLKADOT_BUILD_BRANCH={{ POLKADOT_BUILD_BRANCH }}" + - "MAINNET_TAG={{ MAINNET_TAG }}" + - "MAINNET_BRANCH={{ MAINNET_BRANCH }}" + context: ../ + dockerfile: .docker/Dockerfile-parachain-upgrade + image: node-parachain + container_name: node-parachain + volumes: + - type: bind + source: ./launch-config-forkless-nodata.json + target: /polkadot-launch/launch-config.json + read_only: true + expose: + - 9944 + - 9933 + ports: + - 127.0.0.1:9944:9944 + - 127.0.0.1:9933:9933 + logging: + options: + max-size: "1m" + max-file: "3" \ No newline at end of file diff --git a/.docker/docker-compose.try-runtime.j2 b/.docker/docker-compose.try-runtime.j2 new file mode 100644 index 0000000000..41b1488957 --- /dev/null +++ b/.docker/docker-compose.try-runtime.j2 @@ -0,0 +1,9 @@ +version: "3.5" + +services: + try-runtime: + build: + args: + - "RUST_TOOLCHAIN={{ RUST_TOOLCHAIN }}" + - "FEATURE={{ FEATURE }}" + - "REPLICA_FROM={{ REPLICA_FROM }}" diff --git a/.docker/forkless-config/fork.jsonnet b/.docker/forkless-config/fork.jsonnet new file mode 100644 index 0000000000..375bcfed67 --- /dev/null +++ b/.docker/forkless-config/fork.jsonnet @@ -0,0 +1,96 @@ + +function(rawSpec, forkFrom) +local sourceChain = cql.chain(forkFrom).latest; + +local raw = local sourceRaw = sourceChain._raw._preloadKeys; { + [key]: cql.toHex(sourceRaw[key]) + for key in std.objectFields(sourceRaw) + if sourceRaw[key] != null +}; + +local typeNames = (import './typeNames.jsonnet')(sourceChain); + +local +auraKeys = [ + // AuraExt.Authorities, we don't have aura pallet enabled for some reason, to refer using cql api + '0x3c311d57d4daf52904616cf69648081e5e0621c4869aa60c02be9adcc98a0d1d', + // Aura.Authorities + '0x57f8dc2f5ab09467896f47300f0424385e0621c4869aa60c02be9adcc98a0d1d', +], + +// Keys, which should be migrated from passed spec, rather than from forked chain +wantedKeys = [ + sourceChain.ParachainInfo._key.ParachainId, + sourceChain.Sudo._key.Key, + sourceChain.System.BlockHash._key['0'], + sourceChain.System._key.ParentHash, +] + auraKeys, + +// Keys to remove from original chain +unwantedPrefixes = [ + // Aura.CurrentSlot + '0x57f8dc2f5ab09467896f47300f04243806155b3cd9a8c9e5e9a23fd5dc13a5ed', + // Ensure there will be no panics caused by unexpected kept state + sourceChain.ParachainSystem._key.ValidationData, + sourceChain.ParachainSystem._key.RelayStateProof, + sourceChain.ParachainSystem._key.HostConfiguration, + sourceChain.ParachainSystem._key.LastDmqMqcHead, + // Part of head + sourceChain.System._key.BlockHash, + sourceChain.System._key.Number, + sourceChain.System._key.Digest, +] + auraKeys, + +cleanupRaw(raw) = { + [key]: raw[key] + for key in std.objectFields(raw) + if std.all(std.map(function(prefix) !std.startsWith(key, prefix), unwantedPrefixes)) +}; + + +local originalRaw = rawSpec.genesis.raw.top; +local outSpec = rawSpec { + genesis+: { + raw+: { + top: cleanupRaw(raw) { + [key]: originalRaw[key] + for key in wantedKeys + if std.objectHas(originalRaw, key) + }, + }, + }, +}; + +local + aliceAccount = sourceChain.System._encodeKey.Account(['0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d']), + totalIssuance = sourceChain.Balances._encodeKey.TotalIssuance([]), + unique = cql.calc(["10", "18", "**"]), + Munique = cql.calc([unique, "10", "6", "**", "*"]), +; + +outSpec { + genesis+: { + raw+: { + top+: { + [totalIssuance]: cql.calc([ + Munique, + if std.objectHas(super, totalIssuance) then sourceChain._decode(typeNames.u128, super[totalIssuance]) else '0', + if std.objectHas(super, aliceAccount) then sourceChain._decode(typeNames.AccountInfo, super[aliceAccount]).data.free else '0', + '-', '+', + ]), + [aliceAccount]: sourceChain._encode(typeNames.AccountInfo, { + nonce: 0, + consumers: 3, + providers: 1, + sufficients: 0, + data: { + free: Munique, + reserved: "0", + misc_frozen: "0", + fee_frozen: "0", + }, + },) + }, + }, + }, +} \ No newline at end of file diff --git a/.docker/forkless-config/launch-config-forkless-data.j2 b/.docker/forkless-config/launch-config-forkless-data.j2 new file mode 100644 index 0000000000..f6b6bf65a0 --- /dev/null +++ b/.docker/forkless-config/launch-config-forkless-data.j2 @@ -0,0 +1,132 @@ +{ + "relaychain": { + "bin": "/polkadot/target/release/polkadot", + "upgradeBin": "/polkadot/target/release/polkadot", + "upgradeWasm": "/polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm", + "chain": "westend-local", + "nodes": [ + { + "name": "alice", + "wsPort": 9844, + "rpcPort": 9843, + "port": 30444, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "bob", + "wsPort": 9855, + "rpcPort": 9854, + "port": 30555, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "charlie", + "wsPort": 9866, + "rpcPort": 9865, + "port": 30666, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "dave", + "wsPort": 9877, + "rpcPort": 9876, + "port": 30777, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "eve", + "wsPort": 9888, + "rpcPort": 9887, + "port": 30888, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + } + ], + "genesis": { + "runtime": { + "runtime_genesis_config": { + "parachainsConfiguration": { + "config": { + "validation_upgrade_frequency": 1, + "validation_upgrade_delay": 1 + } + } + } + } + } + }, + "parachains": [ + { + "bin": "/unique-chain/current/release/unique-collator", + "upgradeBin": "/unique-chain/target/release/unique-collator", + "upgradeWasm": "/unique-chain/target/release/wbuild/{{ FEATURE }}/{{ RUNTIME }}_runtime.compact.compressed.wasm", + "id": "1000", + "balance": "1000000000000000000000000", + "chainRawInitializer": [ + "chainql", + "--ext-str=REPLICA_FROM", + "--tla-code=rawSpec=import '${rawSpec}'", + "--tla-code=forkFrom=std.extVar('REPLICA_FROM')", + "fork.jsonnet" + ], + "nodes": [ + { + "port": 31200, + "wsPort": 9944, + "rpcPort": 9933, + "name": "alice", + "flags": [ + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external", + "-lxcm=trace,parity_ws::handler=debug,jsonrpsee_core=trace,jsonrpsee-core=trace,jsonrpsee_ws_server=debug" + ] + }, + { + "port": 31201, + "wsPort": 9945, + "rpcPort": 9934, + "name": "bob", + "flags": [ + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external", + "-lxcm=trace,parity_ws::handler=debug,jsonrpsee_core=trace,jsonrpsee-core=trace,jsonrpsee_ws_server=debug" + ] + } + ] + } + ], + "simpleParachains": [], + "hrmpChannels": [], + "finalization": false +} \ No newline at end of file diff --git a/.docker/forkless-config/launch-config-forkless-nodata.j2 b/.docker/forkless-config/launch-config-forkless-nodata.j2 new file mode 100644 index 0000000000..beb1c3c898 --- /dev/null +++ b/.docker/forkless-config/launch-config-forkless-nodata.j2 @@ -0,0 +1,127 @@ +{ + "relaychain": { + "bin": "/polkadot/target/release/polkadot", + "upgradeBin": "/polkadot/target/release/polkadot", + "upgradeWasm": "/polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm", + "chain": "westend-local", + "nodes": [ + { + "name": "alice", + "wsPort": 9844, + "rpcPort": 9843, + "port": 30444, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "bob", + "wsPort": 9855, + "rpcPort": 9854, + "port": 30555, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "charlie", + "wsPort": 9866, + "rpcPort": 9865, + "port": 30666, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "dave", + "wsPort": 9877, + "rpcPort": 9876, + "port": 30777, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "eve", + "wsPort": 9888, + "rpcPort": 9887, + "port": 30888, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + } + ], + "genesis": { + "runtime": { + "runtime_genesis_config": { + "parachainsConfiguration": { + "config": { + "validation_upgrade_frequency": 1, + "validation_upgrade_delay": 1 + } + } + } + } + } + }, + "parachains": [ + { + "bin": "/unique-chain/current/release/unique-collator", + "upgradeBin": "/unique-chain/target/release/unique-collator", + "upgradeWasm": "/unique-chain/target/release/wbuild/{{ FEATURE }}/{{ RUNTIME }}_runtime.compact.compressed.wasm", + "id": "1000", + "balance": "1000000000000000000000000", + "nodes": [ + { + "port": 31200, + "wsPort": 9944, + "rpcPort": 9933, + "name": "alice", + "flags": [ + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external", + "-lxcm=trace,parity_ws::handler=debug,jsonrpsee_core=trace,jsonrpsee-core=trace,jsonrpsee_ws_server=debug", + "--ws-max-connections=1000" + ] + }, + { + "port": 31201, + "wsPort": 9945, + "rpcPort": 9934, + "name": "bob", + "flags": [ + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external", + "-lxcm=trace,parity_ws::handler=debug,jsonrpsee_core=trace,jsonrpsee-core=trace,jsonrpsee_ws_server=debug", + "--ws-max-connections=1000" + ] + } + ] + } + ], + "simpleParachains": [], + "hrmpChannels": [], + "finalization": false +} \ No newline at end of file diff --git a/.docker/forkless-config/launch-config-node-update-only-v3.j2 b/.docker/forkless-config/launch-config-node-update-only-v3.j2 new file mode 100644 index 0000000000..080d73ccc7 --- /dev/null +++ b/.docker/forkless-config/launch-config-node-update-only-v3.j2 @@ -0,0 +1,127 @@ +{ + "relaychain": { + "bin": "/polkadot/target/release/polkadot", + "upgradeBin": "/polkadot/target/release/polkadot", + "upgradeWasm": "/polkadot/target/release/wbuild/westend-runtime/westend_runtime.compact.compressed.wasm", + "chain": "rococo-local", + "nodes": [ + { + "name": "alice", + "wsPort": 9844, + "rpcPort": 9843, + "port": 30444, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "bob", + "wsPort": 9855, + "rpcPort": 9854, + "port": 30555, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "charlie", + "wsPort": 9866, + "rpcPort": 9865, + "port": 30666, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "dave", + "wsPort": 9877, + "rpcPort": 9876, + "port": 30777, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "eve", + "wsPort": 9888, + "rpcPort": 9887, + "port": 30888, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + } + ], + "genesis": { + "runtime": { + "runtime_genesis_config": { + "parachainsConfiguration": { + "config": { + "validation_upgrade_frequency": 1, + "validation_upgrade_delay": 1 + } + } + } + } + } + }, + "parachains": [ + { + "bin": "/unique-chain/current/release/unique-collator", + "upgradeBin": "/unique-chain/target/release/unique-collator", + "upgradeWasm": "/unique-chain/target/release/wbuild/{{ FEATURE }}/{{ RUNTIME }}_runtime.compact.compressed.wasm", + "id": "1000", + "balance": "1000000000000000000000000", + "nodes": [ + { + "port": 31200, + "wsPort": 9944, + "rpcPort": 9933, + "name": "alice", + "flags": [ + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external", + "-lxcm=trace,parity_ws::handler=debug,jsonrpsee_core=trace,jsonrpsee-core=trace,jsonrpsee_ws_server=debug", + "--ws-max-connections=1000" + ] + }, + { + "port": 31201, + "wsPort": 9945, + "rpcPort": 9934, + "name": "bob", + "flags": [ + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external", + "-lxcm=trace,parity_ws::handler=debug,jsonrpsee_core=trace,jsonrpsee-core=trace,jsonrpsee_ws_server=debug", + "--ws-max-connections=1000" + ] + } + ] + } + ], + "simpleParachains": [], + "hrmpChannels": [], + "finalization": false +} \ No newline at end of file diff --git a/.docker/forkless-config/typeNames.jsonnet b/.docker/forkless-config/typeNames.jsonnet new file mode 100644 index 0000000000..b463287e23 --- /dev/null +++ b/.docker/forkless-config/typeNames.jsonnet @@ -0,0 +1,51 @@ +function(chain) +local + typeName(id) = local + ty = chain._meta.types.types[id], + name = if std.objectHas(ty.type, "path") then + std.join('::', ty.type.path) + else if std.objectHas(ty.type.def, "primitive") then ty.type.def.primitive + else if std.objectHas(ty.type.def, "tuple") then "(" + std.join(', ', std.map(typeName, ty.type.def.tuple)) + ")" + else if std.objectHas(ty.type.def, "sequence") then "Vec<" + typeName(ty.type.def.sequence.type) + ">" + else if std.objectHas(ty.type.def, "array") then "[" + typeName(ty.type.def.array.type) + "; " + ty.type.def.array.len + "]" + else if std.objectHas(ty.type.def, "compact") then "Compact<" + typeName(ty.type.def.compact.type) + ">" + else error "Can't generate useable name for " + ty.type, + generics = if std.objectHas(ty.type, "params") then + '<' + std.join(', ', std.map(function(p) if p.type == null then 'Spec#'+id else typeName(p.type), ty.type.params)) + '>' + else '' + ; name + generics, + shortenPrefix(obj, prefix, short) = { + [short]: obj[field] + for field in std.objectFields(obj) + // There should be at most one element with this prefix + if std.startsWith(field, prefix) + }, +; + +local typesRaw = { + [typeName(id)]: id + for id in std.range(0, std.length(chain._meta.types.types)-1) +}; + +local types = typesRaw + shortenPrefix(typesRaw, 'frame_system::AccountInfo<', 'AccountInfo'); + +types +// local +// ; + +// local encoded = chain._encode(types['AccountInfo'], { +// nonce: 0, +// consumers: 3, +// providers: 1, +// sufficients: 0, +// data: { +// free: Munique, +// reserved: "0", +// misc_frozen: "0", +// fee_frozen: "0", +// }, +// }); + +// local systemAccount = chain._decode(types['AccountInfo'], encoded); + +// chain.System._encodeKey.Account(['0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d']) \ No newline at end of file diff --git a/.docker/patch/disable-ic.patch b/.docker/patch/disable-ic.patch new file mode 100644 index 0000000000..7b3cea5585 --- /dev/null +++ b/.docker/patch/disable-ic.patch @@ -0,0 +1,1972 @@ +diff --git a/Cargo.lock b/Cargo.lock +index 62c2493f..9236a3f3 100644 +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -420,7 +420,7 @@ dependencies = [ + [[package]] + name = "beefy-gadget" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "beefy-primitives", + "fnv", +@@ -454,7 +454,7 @@ dependencies = [ + [[package]] + name = "beefy-gadget-rpc" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "beefy-gadget", + "beefy-primitives", +@@ -474,12 +474,12 @@ dependencies = [ + [[package]] + name = "beefy-merkle-tree" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + + [[package]] + name = "beefy-primitives" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "parity-scale-codec 3.1.5", + "scale-info", +@@ -2682,7 +2682,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] + name = "fork-tree" + version = "3.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "parity-scale-codec 3.1.5", + ] +@@ -2776,7 +2776,7 @@ dependencies = [ + [[package]] + name = "frame-benchmarking" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-support", + "frame-system", +@@ -2798,7 +2798,7 @@ dependencies = [ + [[package]] + name = "frame-benchmarking-cli" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "Inflector", + "chrono", +@@ -2848,7 +2848,7 @@ dependencies = [ + [[package]] + name = "frame-election-provider-solution-type" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "proc-macro-crate", + "proc-macro2", +@@ -2859,7 +2859,7 @@ dependencies = [ + [[package]] + name = "frame-election-provider-support" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-election-provider-solution-type", + "frame-support", +@@ -2875,7 +2875,7 @@ dependencies = [ + [[package]] + name = "frame-executive" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-support", + "frame-system", +@@ -2903,7 +2903,7 @@ dependencies = [ + [[package]] + name = "frame-support" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "bitflags", + "frame-metadata", +@@ -2933,7 +2933,7 @@ dependencies = [ + [[package]] + name = "frame-support-procedural" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "Inflector", + "frame-support-procedural-tools", +@@ -2945,7 +2945,7 @@ dependencies = [ + [[package]] + name = "frame-support-procedural-tools" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-support-procedural-tools-derive", + "proc-macro-crate", +@@ -2957,7 +2957,7 @@ dependencies = [ + [[package]] + name = "frame-support-procedural-tools-derive" + version = "3.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "proc-macro2", + "quote", +@@ -2967,7 +2967,7 @@ dependencies = [ + [[package]] + name = "frame-system" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-support", + "log", +@@ -2984,7 +2984,7 @@ dependencies = [ + [[package]] + name = "frame-system-benchmarking" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -2999,7 +2999,7 @@ dependencies = [ + [[package]] + name = "frame-system-rpc-runtime-api" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "parity-scale-codec 3.1.5", + "sp-api", +@@ -3008,7 +3008,7 @@ dependencies = [ + [[package]] + name = "frame-try-runtime" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-support", + "sp-api", +@@ -5449,7 +5449,7 @@ dependencies = [ + [[package]] + name = "pallet-aura" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-support", + "frame-system", +@@ -5465,7 +5465,7 @@ dependencies = [ + [[package]] + name = "pallet-authority-discovery" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-support", + "frame-system", +@@ -5481,7 +5481,7 @@ dependencies = [ + [[package]] + name = "pallet-authorship" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-support", + "frame-system", +@@ -5496,7 +5496,7 @@ dependencies = [ + [[package]] + name = "pallet-babe" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -5520,7 +5520,7 @@ dependencies = [ + [[package]] + name = "pallet-bags-list" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", +@@ -5540,7 +5540,7 @@ dependencies = [ + [[package]] + name = "pallet-balances" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -5570,7 +5570,7 @@ dependencies = [ + [[package]] + name = "pallet-beefy" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "beefy-primitives", + "frame-support", +@@ -5586,7 +5586,7 @@ dependencies = [ + [[package]] + name = "pallet-beefy-mmr" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "beefy-merkle-tree", + "beefy-primitives", +@@ -5609,7 +5609,7 @@ dependencies = [ + [[package]] + name = "pallet-bounties" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -5687,7 +5687,7 @@ dependencies = [ + [[package]] + name = "pallet-child-bounties" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -5706,7 +5706,7 @@ dependencies = [ + [[package]] + name = "pallet-collective" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -5744,7 +5744,7 @@ dependencies = [ + [[package]] + name = "pallet-democracy" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -5760,7 +5760,7 @@ dependencies = [ + [[package]] + name = "pallet-election-provider-multi-phase" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", +@@ -5783,7 +5783,7 @@ dependencies = [ + [[package]] + name = "pallet-election-provider-support-benchmarking" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", +@@ -5796,7 +5796,7 @@ dependencies = [ + [[package]] + name = "pallet-elections-phragmen" + version = "5.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -5966,7 +5966,7 @@ dependencies = [ + [[package]] + name = "pallet-gilt" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -5981,7 +5981,7 @@ dependencies = [ + [[package]] + name = "pallet-grandpa" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -6004,7 +6004,7 @@ dependencies = [ + [[package]] + name = "pallet-identity" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "enumflags2", + "frame-benchmarking", +@@ -6020,7 +6020,7 @@ dependencies = [ + [[package]] + name = "pallet-im-online" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -6040,7 +6040,7 @@ dependencies = [ + [[package]] + name = "pallet-indices" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -6076,7 +6076,7 @@ dependencies = [ + [[package]] + name = "pallet-membership" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -6093,7 +6093,7 @@ dependencies = [ + [[package]] + name = "pallet-mmr" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "ckb-merkle-mountain-range", + "frame-benchmarking", +@@ -6111,7 +6111,7 @@ dependencies = [ + [[package]] + name = "pallet-mmr-rpc" + version = "3.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "jsonrpsee", + "parity-scale-codec 3.1.5", +@@ -6126,7 +6126,7 @@ dependencies = [ + [[package]] + name = "pallet-multisig" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -6141,7 +6141,7 @@ dependencies = [ + [[package]] + name = "pallet-nicks" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-support", + "frame-system", +@@ -6155,7 +6155,7 @@ dependencies = [ + [[package]] + name = "pallet-nomination-pools" + version = "1.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-support", + "frame-system", +@@ -6171,7 +6171,7 @@ dependencies = [ + [[package]] + name = "pallet-nomination-pools-benchmarking" + version = "1.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", +@@ -6212,7 +6212,7 @@ dependencies = [ + [[package]] + name = "pallet-offences" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-support", + "frame-system", +@@ -6229,7 +6229,7 @@ dependencies = [ + [[package]] + name = "pallet-offences-benchmarking" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", +@@ -6252,7 +6252,7 @@ dependencies = [ + [[package]] + name = "pallet-preimage" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -6268,7 +6268,7 @@ dependencies = [ + [[package]] + name = "pallet-proxy" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -6283,7 +6283,7 @@ dependencies = [ + [[package]] + name = "pallet-randomness-collective-flip" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-support", + "frame-system", +@@ -6297,7 +6297,7 @@ dependencies = [ + [[package]] + name = "pallet-recovery" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -6372,7 +6372,7 @@ dependencies = [ + [[package]] + name = "pallet-scheduler" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -6388,7 +6388,7 @@ dependencies = [ + [[package]] + name = "pallet-session" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-support", + "frame-system", +@@ -6409,7 +6409,7 @@ dependencies = [ + [[package]] + name = "pallet-session-benchmarking" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -6425,7 +6425,7 @@ dependencies = [ + [[package]] + name = "pallet-society" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-support", + "frame-system", +@@ -6439,7 +6439,7 @@ dependencies = [ + [[package]] + name = "pallet-staking" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-election-provider-support", +@@ -6462,7 +6462,7 @@ dependencies = [ + [[package]] + name = "pallet-staking-reward-curve" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "proc-macro-crate", + "proc-macro2", +@@ -6473,7 +6473,7 @@ dependencies = [ + [[package]] + name = "pallet-staking-reward-fn" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "log", + "sp-arithmetic", +@@ -6497,7 +6497,7 @@ dependencies = [ + [[package]] + name = "pallet-sudo" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-support", + "frame-system", +@@ -6531,7 +6531,7 @@ dependencies = [ + [[package]] + name = "pallet-timestamp" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -6549,7 +6549,7 @@ dependencies = [ + [[package]] + name = "pallet-tips" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -6568,7 +6568,7 @@ dependencies = [ + [[package]] + name = "pallet-transaction-payment" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-support", + "frame-system", +@@ -6584,7 +6584,7 @@ dependencies = [ + [[package]] + name = "pallet-transaction-payment-rpc" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "jsonrpsee", + "pallet-transaction-payment-rpc-runtime-api", +@@ -6599,7 +6599,7 @@ dependencies = [ + [[package]] + name = "pallet-transaction-payment-rpc-runtime-api" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "pallet-transaction-payment", + "parity-scale-codec 3.1.5", +@@ -6610,7 +6610,7 @@ dependencies = [ + [[package]] + name = "pallet-treasury" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -6669,7 +6669,7 @@ dependencies = [ + [[package]] + name = "pallet-utility" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -6685,7 +6685,7 @@ dependencies = [ + [[package]] + name = "pallet-vesting" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-benchmarking", + "frame-support", +@@ -8942,7 +8942,7 @@ dependencies = [ + [[package]] + name = "remote-externalities" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "env_logger", + "jsonrpsee", +@@ -9321,7 +9321,7 @@ dependencies = [ + [[package]] + name = "sc-allocator" + version = "4.1.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "log", + "sp-core", +@@ -9332,7 +9332,7 @@ dependencies = [ + [[package]] + name = "sc-authority-discovery" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "async-trait", + "futures 0.3.21", +@@ -9359,7 +9359,7 @@ dependencies = [ + [[package]] + name = "sc-basic-authorship" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "futures 0.3.21", + "futures-timer", +@@ -9382,7 +9382,7 @@ dependencies = [ + [[package]] + name = "sc-block-builder" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "parity-scale-codec 3.1.5", + "sc-client-api", +@@ -9398,7 +9398,7 @@ dependencies = [ + [[package]] + name = "sc-chain-spec" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "impl-trait-for-tuples", + "memmap2 0.5.5", +@@ -9415,7 +9415,7 @@ dependencies = [ + [[package]] + name = "sc-chain-spec-derive" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "proc-macro-crate", + "proc-macro2", +@@ -9426,7 +9426,7 @@ dependencies = [ + [[package]] + name = "sc-cli" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "chrono", + "clap", +@@ -9465,7 +9465,7 @@ dependencies = [ + [[package]] + name = "sc-client-api" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "fnv", + "futures 0.3.21", +@@ -9493,7 +9493,7 @@ dependencies = [ + [[package]] + name = "sc-client-db" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "hash-db", + "kvdb", +@@ -9518,7 +9518,7 @@ dependencies = [ + [[package]] + name = "sc-consensus" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "async-trait", + "futures 0.3.21", +@@ -9542,7 +9542,7 @@ dependencies = [ + [[package]] + name = "sc-consensus-aura" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "async-trait", + "futures 0.3.21", +@@ -9571,7 +9571,7 @@ dependencies = [ + [[package]] + name = "sc-consensus-babe" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "async-trait", + "fork-tree", +@@ -9614,7 +9614,7 @@ dependencies = [ + [[package]] + name = "sc-consensus-babe-rpc" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "futures 0.3.21", + "jsonrpsee", +@@ -9636,7 +9636,7 @@ dependencies = [ + [[package]] + name = "sc-consensus-epochs" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "fork-tree", + "parity-scale-codec 3.1.5", +@@ -9649,7 +9649,7 @@ dependencies = [ + [[package]] + name = "sc-consensus-manual-seal" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "assert_matches", + "async-trait", +@@ -9683,7 +9683,7 @@ dependencies = [ + [[package]] + name = "sc-consensus-slots" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "async-trait", + "futures 0.3.21", +@@ -9708,7 +9708,7 @@ dependencies = [ + [[package]] + name = "sc-consensus-uncles" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "sc-client-api", + "sp-authorship", +@@ -9719,7 +9719,7 @@ dependencies = [ + [[package]] + name = "sc-executor" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "lazy_static", + "lru 0.7.8", +@@ -9746,7 +9746,7 @@ dependencies = [ + [[package]] + name = "sc-executor-common" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "environmental", + "parity-scale-codec 3.1.5", +@@ -9763,7 +9763,7 @@ dependencies = [ + [[package]] + name = "sc-executor-wasmi" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "log", + "parity-scale-codec 3.1.5", +@@ -9778,7 +9778,7 @@ dependencies = [ + [[package]] + name = "sc-executor-wasmtime" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "cfg-if 1.0.0", + "libc", +@@ -9796,7 +9796,7 @@ dependencies = [ + [[package]] + name = "sc-finality-grandpa" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "ahash", + "async-trait", +@@ -9836,7 +9836,7 @@ dependencies = [ + [[package]] + name = "sc-finality-grandpa-rpc" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "finality-grandpa", + "futures 0.3.21", +@@ -9857,7 +9857,7 @@ dependencies = [ + [[package]] + name = "sc-informant" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "ansi_term", + "futures 0.3.21", +@@ -9874,7 +9874,7 @@ dependencies = [ + [[package]] + name = "sc-keystore" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "async-trait", + "hex", +@@ -9889,7 +9889,7 @@ dependencies = [ + [[package]] + name = "sc-network" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "async-trait", + "asynchronous-codec", +@@ -9941,7 +9941,7 @@ dependencies = [ + [[package]] + name = "sc-network-common" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "futures 0.3.21", + "libp2p", +@@ -9954,7 +9954,7 @@ dependencies = [ + [[package]] + name = "sc-network-gossip" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "ahash", + "futures 0.3.21", +@@ -9971,7 +9971,7 @@ dependencies = [ + [[package]] + name = "sc-network-light" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "futures 0.3.21", + "libp2p", +@@ -9991,7 +9991,7 @@ dependencies = [ + [[package]] + name = "sc-network-sync" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "bitflags", + "either", +@@ -10020,7 +10020,7 @@ dependencies = [ + [[package]] + name = "sc-offchain" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "bytes 1.2.0", + "fnv", +@@ -10048,7 +10048,7 @@ dependencies = [ + [[package]] + name = "sc-peerset" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "futures 0.3.21", + "libp2p", +@@ -10061,7 +10061,7 @@ dependencies = [ + [[package]] + name = "sc-proposer-metrics" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "log", + "substrate-prometheus-endpoint", +@@ -10070,7 +10070,7 @@ dependencies = [ + [[package]] + name = "sc-rpc" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "futures 0.3.21", + "hash-db", +@@ -10100,7 +10100,7 @@ dependencies = [ + [[package]] + name = "sc-rpc-api" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "futures 0.3.21", + "jsonrpsee", +@@ -10123,7 +10123,7 @@ dependencies = [ + [[package]] + name = "sc-rpc-server" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "futures 0.3.21", + "jsonrpsee", +@@ -10136,7 +10136,7 @@ dependencies = [ + [[package]] + name = "sc-service" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "async-trait", + "directories", +@@ -10201,7 +10201,7 @@ dependencies = [ + [[package]] + name = "sc-state-db" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "log", + "parity-scale-codec 3.1.5", +@@ -10215,7 +10215,7 @@ dependencies = [ + [[package]] + name = "sc-sync-state-rpc" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "jsonrpsee", + "parity-scale-codec 3.1.5", +@@ -10234,7 +10234,7 @@ dependencies = [ + [[package]] + name = "sc-sysinfo" + version = "6.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "futures 0.3.21", + "libc", +@@ -10253,7 +10253,7 @@ dependencies = [ + [[package]] + name = "sc-telemetry" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "chrono", + "futures 0.3.21", +@@ -10271,7 +10271,7 @@ dependencies = [ + [[package]] + name = "sc-tracing" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "ansi_term", + "atty", +@@ -10302,7 +10302,7 @@ dependencies = [ + [[package]] + name = "sc-tracing-proc-macro" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "proc-macro-crate", + "proc-macro2", +@@ -10313,7 +10313,7 @@ dependencies = [ + [[package]] + name = "sc-transaction-pool" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "futures 0.3.21", + "futures-timer", +@@ -10340,7 +10340,7 @@ dependencies = [ + [[package]] + name = "sc-transaction-pool-api" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "futures 0.3.21", + "log", +@@ -10353,7 +10353,7 @@ dependencies = [ + [[package]] + name = "sc-utils" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "futures 0.3.21", + "futures-timer", +@@ -10795,7 +10795,7 @@ dependencies = [ + [[package]] + name = "sp-api" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "hash-db", + "log", +@@ -10812,7 +10812,7 @@ dependencies = [ + [[package]] + name = "sp-api-proc-macro" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "blake2", + "proc-macro-crate", +@@ -10824,7 +10824,7 @@ dependencies = [ + [[package]] + name = "sp-application-crypto" + version = "6.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "parity-scale-codec 3.1.5", + "scale-info", +@@ -10837,7 +10837,7 @@ dependencies = [ + [[package]] + name = "sp-arithmetic" + version = "5.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "integer-sqrt", + "num-traits", +@@ -10852,7 +10852,7 @@ dependencies = [ + [[package]] + name = "sp-authority-discovery" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "parity-scale-codec 3.1.5", + "scale-info", +@@ -10865,7 +10865,7 @@ dependencies = [ + [[package]] + name = "sp-authorship" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "async-trait", + "parity-scale-codec 3.1.5", +@@ -10877,7 +10877,7 @@ dependencies = [ + [[package]] + name = "sp-block-builder" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "parity-scale-codec 3.1.5", + "sp-api", +@@ -10889,7 +10889,7 @@ dependencies = [ + [[package]] + name = "sp-blockchain" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "futures 0.3.21", + "log", +@@ -10907,7 +10907,7 @@ dependencies = [ + [[package]] + name = "sp-consensus" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "async-trait", + "futures 0.3.21", +@@ -10926,7 +10926,7 @@ dependencies = [ + [[package]] + name = "sp-consensus-aura" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "async-trait", + "parity-scale-codec 3.1.5", +@@ -10944,7 +10944,7 @@ dependencies = [ + [[package]] + name = "sp-consensus-babe" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "async-trait", + "merlin", +@@ -10967,7 +10967,7 @@ dependencies = [ + [[package]] + name = "sp-consensus-slots" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "parity-scale-codec 3.1.5", + "scale-info", +@@ -10981,7 +10981,7 @@ dependencies = [ + [[package]] + name = "sp-consensus-vrf" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "parity-scale-codec 3.1.5", + "scale-info", +@@ -10994,7 +10994,7 @@ dependencies = [ + [[package]] + name = "sp-core" + version = "6.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "base58", + "bitflags", +@@ -11040,7 +11040,7 @@ dependencies = [ + [[package]] + name = "sp-core-hashing" + version = "4.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "blake2", + "byteorder", +@@ -11054,7 +11054,7 @@ dependencies = [ + [[package]] + name = "sp-core-hashing-proc-macro" + version = "5.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "proc-macro2", + "quote", +@@ -11065,7 +11065,7 @@ dependencies = [ + [[package]] + name = "sp-database" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "kvdb", + "parking_lot 0.12.1", +@@ -11074,7 +11074,7 @@ dependencies = [ + [[package]] + name = "sp-debug-derive" + version = "4.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "proc-macro2", + "quote", +@@ -11084,7 +11084,7 @@ dependencies = [ + [[package]] + name = "sp-externalities" + version = "0.12.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "environmental", + "parity-scale-codec 3.1.5", +@@ -11095,7 +11095,7 @@ dependencies = [ + [[package]] + name = "sp-finality-grandpa" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "finality-grandpa", + "log", +@@ -11113,7 +11113,7 @@ dependencies = [ + [[package]] + name = "sp-inherents" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "async-trait", + "impl-trait-for-tuples", +@@ -11127,7 +11127,7 @@ dependencies = [ + [[package]] + name = "sp-io" + version = "6.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "futures 0.3.21", + "hash-db", +@@ -11152,7 +11152,7 @@ dependencies = [ + [[package]] + name = "sp-keyring" + version = "6.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "lazy_static", + "sp-core", +@@ -11163,7 +11163,7 @@ dependencies = [ + [[package]] + name = "sp-keystore" + version = "0.12.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "async-trait", + "futures 0.3.21", +@@ -11180,7 +11180,7 @@ dependencies = [ + [[package]] + name = "sp-maybe-compressed-blob" + version = "4.1.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "thiserror", + "zstd", +@@ -11189,7 +11189,7 @@ dependencies = [ + [[package]] + name = "sp-mmr-primitives" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "log", + "parity-scale-codec 3.1.5", +@@ -11204,7 +11204,7 @@ dependencies = [ + [[package]] + name = "sp-npos-elections" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "parity-scale-codec 3.1.5", + "scale-info", +@@ -11218,7 +11218,7 @@ dependencies = [ + [[package]] + name = "sp-offchain" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "sp-api", + "sp-core", +@@ -11228,7 +11228,7 @@ dependencies = [ + [[package]] + name = "sp-panic-handler" + version = "4.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "backtrace", + "lazy_static", +@@ -11238,7 +11238,7 @@ dependencies = [ + [[package]] + name = "sp-rpc" + version = "6.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "rustc-hash", + "serde", +@@ -11248,7 +11248,7 @@ dependencies = [ + [[package]] + name = "sp-runtime" + version = "6.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "either", + "hash256-std-hasher", +@@ -11270,7 +11270,7 @@ dependencies = [ + [[package]] + name = "sp-runtime-interface" + version = "6.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "impl-trait-for-tuples", + "parity-scale-codec 3.1.5", +@@ -11287,7 +11287,7 @@ dependencies = [ + [[package]] + name = "sp-runtime-interface-proc-macro" + version = "5.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "Inflector", + "proc-macro-crate", +@@ -11299,7 +11299,7 @@ dependencies = [ + [[package]] + name = "sp-sandbox" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "log", + "parity-scale-codec 3.1.5", +@@ -11313,7 +11313,7 @@ dependencies = [ + [[package]] + name = "sp-serializer" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "serde", + "serde_json", +@@ -11322,7 +11322,7 @@ dependencies = [ + [[package]] + name = "sp-session" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "parity-scale-codec 3.1.5", + "scale-info", +@@ -11336,7 +11336,7 @@ dependencies = [ + [[package]] + name = "sp-staking" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "parity-scale-codec 3.1.5", + "scale-info", +@@ -11347,7 +11347,7 @@ dependencies = [ + [[package]] + name = "sp-state-machine" + version = "0.12.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "hash-db", + "log", +@@ -11369,12 +11369,12 @@ dependencies = [ + [[package]] + name = "sp-std" + version = "4.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + + [[package]] + name = "sp-storage" + version = "6.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "impl-serde", + "parity-scale-codec 3.1.5", +@@ -11387,7 +11387,7 @@ dependencies = [ + [[package]] + name = "sp-tasks" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "log", + "sp-core", +@@ -11400,7 +11400,7 @@ dependencies = [ + [[package]] + name = "sp-timestamp" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "async-trait", + "futures-timer", +@@ -11416,7 +11416,7 @@ dependencies = [ + [[package]] + name = "sp-tracing" + version = "5.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "parity-scale-codec 3.1.5", + "sp-std", +@@ -11428,7 +11428,7 @@ dependencies = [ + [[package]] + name = "sp-transaction-pool" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "sp-api", + "sp-runtime", +@@ -11437,7 +11437,7 @@ dependencies = [ + [[package]] + name = "sp-transaction-storage-proof" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "async-trait", + "log", +@@ -11453,7 +11453,7 @@ dependencies = [ + [[package]] + name = "sp-trie" + version = "6.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "hash-db", + "memory-db", +@@ -11469,7 +11469,7 @@ dependencies = [ + [[package]] + name = "sp-version" + version = "5.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "impl-serde", + "parity-scale-codec 3.1.5", +@@ -11486,7 +11486,7 @@ dependencies = [ + [[package]] + name = "sp-version-proc-macro" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "parity-scale-codec 3.1.5", + "proc-macro2", +@@ -11497,7 +11497,7 @@ dependencies = [ + [[package]] + name = "sp-wasm-interface" + version = "6.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "impl-trait-for-tuples", + "log", +@@ -11652,7 +11652,7 @@ dependencies = [ + [[package]] + name = "substrate-build-script-utils" + version = "3.0.0" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "platforms", + ] +@@ -11660,7 +11660,7 @@ dependencies = [ + [[package]] + name = "substrate-frame-rpc-system" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "frame-system-rpc-runtime-api", + "futures 0.3.21", +@@ -11681,7 +11681,7 @@ dependencies = [ + [[package]] + name = "substrate-prometheus-endpoint" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "futures-util", + "hyper", +@@ -11694,7 +11694,7 @@ dependencies = [ + [[package]] + name = "substrate-state-trie-migration-rpc" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "jsonrpsee", + "log", +@@ -11715,7 +11715,7 @@ dependencies = [ + [[package]] + name = "substrate-test-client" + version = "2.0.1" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "async-trait", + "futures 0.3.21", +@@ -11741,7 +11741,7 @@ dependencies = [ + [[package]] + name = "substrate-test-utils" + version = "4.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "futures 0.3.21", + "substrate-test-utils-derive", +@@ -11751,7 +11751,7 @@ dependencies = [ + [[package]] + name = "substrate-test-utils-derive" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "proc-macro-crate", + "proc-macro2", +@@ -11762,7 +11762,7 @@ dependencies = [ + [[package]] + name = "substrate-wasm-builder" + version = "5.0.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "ansi_term", + "build-helper", +@@ -12197,10 +12197,8 @@ version = "0.1.3" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" + dependencies = [ +- "ahash", + "lazy_static", + "log", +- "lru 0.7.8", + "tracing-core", + ] + +@@ -12321,7 +12319,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" + [[package]] + name = "try-runtime-cli" + version = "0.10.0-dev" +-source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute#1fa76b0665d32b1e28c36da67e54da1816db3fa2" ++source = "git+https://github.com/uniquenetwork/substrate?branch=polkadot-v0.9.24-hack-substitute-disable-ic#6365b31efb056108a3ed28751d33332751220b39" + dependencies = [ + "clap", + "jsonrpsee", +diff --git a/Cargo.toml b/Cargo.toml +index 6a520f4b..f4619ddb 100644 +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -21,176 +21,176 @@ jsonrpsee-types = {git = "https://github.com/uniquenetwork/jsonrpsee", branch = + jsonrpsee-core = {git = "https://github.com/uniquenetwork/jsonrpsee", branch = "unique-v0.13.1-fix-unknown-fields"} + + [patch."https://github.com/paritytech/substrate"] +-beefy-gadget = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-beefy-gadget-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-beefy-merkle-tree = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-beefy-primitives = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-fork-tree = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-frame-benchmarking = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-frame-benchmarking-cli = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-frame-election-provider-solution-type = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-frame-election-provider-support = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-frame-executive = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-frame-support = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-frame-support-procedural = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-frame-support-procedural-tools = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-frame-support-procedural-tools-derive = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-frame-system = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-frame-system-benchmarking = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-frame-system-rpc-runtime-api = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-frame-try-runtime = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-aura = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-authority-discovery = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-authorship = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-babe = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-bags-list = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-balances = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-beefy = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-beefy-mmr = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-bounties = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-child-bounties = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-collective = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-democracy = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-election-provider-multi-phase = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-election-provider-support-benchmarking = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-elections-phragmen = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-gilt = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-grandpa = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-identity = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-im-online = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-indices = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-membership = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-mmr = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-mmr-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-multisig = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-nicks = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-nomination-pools = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-nomination-pools-benchmarking = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-offences = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-offences-benchmarking = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-preimage = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-proxy = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-randomness-collective-flip = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-recovery = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-scheduler = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-session = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-session-benchmarking = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-society = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-staking = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-staking-reward-curve = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-staking-reward-fn = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-sudo = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-timestamp = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-tips = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-transaction-payment = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-transaction-payment-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-transaction-payment-rpc-runtime-api = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-treasury = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-utility = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-pallet-vesting = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-remote-externalities = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-allocator = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-authority-discovery = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-basic-authorship = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-block-builder = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-chain-spec = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-chain-spec-derive = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-cli = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-client-api = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-client-db = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-consensus = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-consensus-aura = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-consensus-babe = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-consensus-babe-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-consensus-epochs = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-consensus-manual-seal = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-consensus-slots = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-consensus-uncles = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-executor = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-executor-common = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-executor-wasmi = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-executor-wasmtime = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-finality-grandpa = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-finality-grandpa-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-informant = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-keystore = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-network = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-network-common = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-network-gossip = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-network-light = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-network-sync = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-offchain = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-peerset = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-proposer-metrics = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-rpc-api = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-rpc-server = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-service = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-state-db = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-sync-state-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-sysinfo = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-telemetry = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-tracing = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-tracing-proc-macro = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-transaction-pool = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-transaction-pool-api = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sc-utils = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-api = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-api-proc-macro = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-application-crypto = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-arithmetic = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-authority-discovery = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-authorship = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-block-builder = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-blockchain = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-consensus = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-consensus-aura = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-consensus-babe = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-consensus-slots = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-consensus-vrf = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-core = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-core-hashing = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-core-hashing-proc-macro = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-database = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-debug-derive = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-externalities = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-finality-grandpa = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-inherents = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-io = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-keyring = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-keystore = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-maybe-compressed-blob = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-mmr-primitives = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-npos-elections = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-offchain = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-panic-handler = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-runtime = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-runtime-interface = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-runtime-interface-proc-macro = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-sandbox = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-serializer = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-session = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-staking = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-state-machine = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-std = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-storage = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-tasks = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-timestamp = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-tracing = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-transaction-pool = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-transaction-storage-proof = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-trie = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-version = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-version-proc-macro = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-sp-wasm-interface = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-substrate-build-script-utils = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-substrate-frame-rpc-system = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-substrate-prometheus-endpoint = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-substrate-state-trie-migration-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-substrate-test-client = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-substrate-test-utils = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-substrate-test-utils-derive = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-substrate-wasm-builder = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} +-try-runtime-cli = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute"} ++beefy-gadget = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++beefy-gadget-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++beefy-merkle-tree = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++beefy-primitives = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++fork-tree = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++frame-benchmarking = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++frame-benchmarking-cli = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++frame-election-provider-solution-type = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++frame-election-provider-support = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++frame-executive = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++frame-support = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++frame-support-procedural = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++frame-support-procedural-tools = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++frame-support-procedural-tools-derive = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++frame-system = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++frame-system-benchmarking = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++frame-system-rpc-runtime-api = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++frame-try-runtime = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-aura = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-authority-discovery = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-authorship = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-babe = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-bags-list = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-balances = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-beefy = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-beefy-mmr = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-bounties = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-child-bounties = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-collective = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-democracy = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-election-provider-multi-phase = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-election-provider-support-benchmarking = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-elections-phragmen = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-gilt = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-grandpa = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-identity = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-im-online = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-indices = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-membership = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-mmr = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-mmr-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-multisig = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-nicks = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-nomination-pools = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-nomination-pools-benchmarking = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-offences = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-offences-benchmarking = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-preimage = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-proxy = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-randomness-collective-flip = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-recovery = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-scheduler = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-session = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-session-benchmarking = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-society = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-staking = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-staking-reward-curve = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-staking-reward-fn = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-sudo = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-timestamp = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-tips = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-transaction-payment = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-transaction-payment-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-transaction-payment-rpc-runtime-api = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-treasury = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-utility = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++pallet-vesting = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++remote-externalities = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-allocator = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-authority-discovery = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-basic-authorship = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-block-builder = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-chain-spec = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-chain-spec-derive = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-cli = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-client-api = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-client-db = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-consensus = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-consensus-aura = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-consensus-babe = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-consensus-babe-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-consensus-epochs = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-consensus-manual-seal = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-consensus-slots = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-consensus-uncles = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-executor = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-executor-common = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-executor-wasmi = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-executor-wasmtime = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-finality-grandpa = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-finality-grandpa-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-informant = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-keystore = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-network = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-network-common = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-network-gossip = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-network-light = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-network-sync = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-offchain = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-peerset = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-proposer-metrics = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-rpc-api = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-rpc-server = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-service = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-state-db = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-sync-state-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-sysinfo = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-telemetry = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-tracing = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-tracing-proc-macro = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-transaction-pool = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-transaction-pool-api = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sc-utils = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-api = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-api-proc-macro = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-application-crypto = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-arithmetic = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-authority-discovery = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-authorship = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-block-builder = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-blockchain = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-consensus = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-consensus-aura = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-consensus-babe = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-consensus-slots = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-consensus-vrf = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-core = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-core-hashing = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-core-hashing-proc-macro = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-database = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-debug-derive = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-externalities = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-finality-grandpa = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-inherents = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-io = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-keyring = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-keystore = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-maybe-compressed-blob = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-mmr-primitives = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-npos-elections = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-offchain = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-panic-handler = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-runtime = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-runtime-interface = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-runtime-interface-proc-macro = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-sandbox = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-serializer = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-session = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-staking = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-state-machine = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-std = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-storage = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-tasks = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-timestamp = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-tracing = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-transaction-pool = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-transaction-storage-proof = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-trie = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-version = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-version-proc-macro = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++sp-wasm-interface = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++substrate-build-script-utils = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++substrate-frame-rpc-system = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++substrate-prometheus-endpoint = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++substrate-state-trie-migration-rpc = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++substrate-test-client = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++substrate-test-utils = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++substrate-test-utils-derive = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++substrate-wasm-builder = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} ++try-runtime-cli = {git = "https://github.com/uniquenetwork/substrate", branch = "polkadot-v0.9.24-hack-substitute-disable-ic"} + +diff --git a/node/cli/Cargo.toml b/node/cli/Cargo.toml +index 5ce0c106..8572c20b 100644 +--- a/node/cli/Cargo.toml ++++ b/node/cli/Cargo.toml +@@ -328,4 +328,8 @@ runtime-benchmarks = [ + 'opal-runtime/runtime-benchmarks', + 'polkadot-service/runtime-benchmarks', + ] +-try-runtime = [] ++try-runtime = [ ++ 'unique-runtime?/try-runtime', ++ 'quartz-runtime?/try-runtime', ++ 'opal-runtime/try-runtime', ++] +diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml +index 29924138..5e117c53 100644 +--- a/runtime/common/Cargo.toml ++++ b/runtime/common/Cargo.toml +@@ -32,6 +32,7 @@ runtime-benchmarks = [ + 'frame-support/runtime-benchmarks', + 'frame-system/runtime-benchmarks', + ] ++try-runtime = [] + + [dependencies.sp-core] + default-features = false +diff --git a/runtime/opal/Cargo.toml b/runtime/opal/Cargo.toml +index 678dfc3d..d2f9a24e 100644 +--- a/runtime/opal/Cargo.toml ++++ b/runtime/opal/Cargo.toml +@@ -46,6 +46,7 @@ try-runtime = [ + 'frame-try-runtime', + 'frame-executive/try-runtime', + 'frame-system/try-runtime', ++ 'unique-runtime-common/try-runtime', + ] + std = [ + 'codec/std', +diff --git a/runtime/quartz/Cargo.toml b/runtime/quartz/Cargo.toml +index 4c9425a5..885a22d2 100644 +--- a/runtime/quartz/Cargo.toml ++++ b/runtime/quartz/Cargo.toml +@@ -46,6 +46,7 @@ try-runtime = [ + 'frame-try-runtime', + 'frame-executive/try-runtime', + 'frame-system/try-runtime', ++ 'unique-runtime-common/try-runtime', + ] + std = [ + 'codec/std', +diff --git a/runtime/unique/Cargo.toml b/runtime/unique/Cargo.toml +index 631a1a12..ae00be67 100644 +--- a/runtime/unique/Cargo.toml ++++ b/runtime/unique/Cargo.toml +@@ -47,6 +47,7 @@ try-runtime = [ + 'frame-try-runtime', + 'frame-executive/try-runtime', + 'frame-system/try-runtime', ++ 'unique-runtime-common/try-runtime', + ] + std = [ + 'codec/std', diff --git a/.docker/testnet-config/launch-config.json b/.docker/testnet-config/launch-config.json new file mode 100644 index 0000000000..7e8fa5b30e --- /dev/null +++ b/.docker/testnet-config/launch-config.json @@ -0,0 +1,121 @@ +{ + "relaychain": { + "bin": "/polkadot/target/release/polkadot", + "chain": "rococo-local", + "nodes": [ + { + "name": "alice", + "wsPort": 9844, + "rpcPort": 9843, + "port": 30444, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "bob", + "wsPort": 9855, + "rpcPort": 9854, + "port": 30555, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "charlie", + "wsPort": 9866, + "rpcPort": 9865, + "port": 30666, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "dave", + "wsPort": 9877, + "rpcPort": 9876, + "port": 30777, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + }, + { + "name": "eve", + "wsPort": 9888, + "rpcPort": 9887, + "port": 30888, + "flags": [ + "-lparachain::candidate_validation=debug", + "-lxcm=trace", + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external" + ] + } + ], + "genesis": { + "runtime": { + "runtime_genesis_config": { + "parachainsConfiguration": { + "config": { + "validation_upgrade_frequency": 1, + "validation_upgrade_delay": 1 + } + } + } + } + } + }, + "parachains": [ + { + "bin": "/unique-chain/target/release/unique-collator", + "id": "1000", + "balance": "1000000000000000000000000", + "nodes": [ + { + "port": 31200, + "wsPort": 9944, + "rpcPort": 9933, + "name": "alice", + "flags": [ + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external", + "-lxcm=trace" + ] + }, + { + "port": 31201, + "wsPort": 9945, + "rpcPort": 9934, + "name": "bob", + "flags": [ + "--rpc-cors=all", + "--unsafe-rpc-external", + "--unsafe-ws-external", + "-lxcm=trace" + ] + } + ] + } + ], + "simpleParachains": [], + "hrmpChannels": [], + "finalization": false +} \ No newline at end of file diff --git a/.env b/.env index b988f9e491..276c2bec40 100644 --- a/.env +++ b/.env @@ -1,6 +1,21 @@ RUST_TOOLCHAIN=nightly-2022-05-11 RUST_C=1.62.0-nightly +# old POLKA_VERSION=release-v0.9.24 UNIQUE_BRANCH=develop USER=*** PASS=*** + +POLKADOT_BUILD_BRANCH=release-v0.9.30 +POLKADOT_MAINNET_BRANCH=release-v0.9.29 # unused within the current forkless setup + +UNIQUE_MAINNET_TAG=quartz-v924012-2-old-tests-fixes +UNIQUE_REPLICA_FROM=wss://eu-ws.unique.network:443 + +QUARTZ_MAINNET_TAG=quartz-v924012-2-old-tests-fixes +QUARTZ_REPLICA_FROM=wss://eu-ws-quartz.unique.network:443 + +OPAL_MAINNET_TAG=quartz-v924012-2-old-tests-fixes +OPAL_REPLICA_FROM=wss://eu-ws-opal.unique.network:443 + +POLKADOT_LAUNCH_BRANCH=unique-network \ No newline at end of file diff --git a/.github/workflows/ci-master.yml b/.github/workflows/ci-master.yml new file mode 100644 index 0000000000..9c6239b2d2 --- /dev/null +++ b/.github/workflows/ci-master.yml @@ -0,0 +1,22 @@ +# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2587656193/CI+Master +# Workflow which controls starts nested workflows. +name: master + +# Triger: PR at 'master' branch with following types of events. +on: + pull_request: + branches: [ 'master' ] + types: [ opened, reopened, synchronize, ready_for_review ] + +#Concurency group for control execution queue over github runners. +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref }} + cancel-in-progress: true + +# List of a jobs included into Workflow. +jobs: + forkless: + uses: ./.github/workflows/forkless.yml + + # codestyle: + # uses: ./.github/workflows/codestyle.yml \ No newline at end of file diff --git a/.github/workflows/forkless-update-data_v2.yml b/.github/workflows/forkless-update-data_v2.yml new file mode 100644 index 0000000000..117b1fff74 --- /dev/null +++ b/.github/workflows/forkless-update-data_v2.yml @@ -0,0 +1,168 @@ +# Forkless update with data replication +# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586869792/Forkless+update+with+data + +# Triger: only call from main workflow(re-usable workflows) +on: + workflow_call: + + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + + execution-marix: + + name: Prepare execution matrix + + runs-on: self-hosted-ci + outputs: + matrix: ${{ steps.create_matrix.outputs.matrix }} + + steps: + + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + with: + ref: ${{ github.head_ref }} #Checking out head commit + + - name: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Create Execution matrix + uses: CertainLach/create-matrix-action@v3 + id: create_matrix + with: + matrix: | + network {opal}, runtime {opal}, features {opal-runtime}, mainnet_branch {${{ env.OPAL_MAINNET_TAG }}}, replica_from_address {${{ env.OPAL_REPLICA_FROM }}} + network {quartz}, runtime {quartz}, features {quartz-runtime}, mainnet_branch {${{ env.QUARTZ_MAINNET_TAG }}}, replica_from_address {${{ env.QUARTZ_REPLICA_FROM }}} + network {unique}, runtime {unique}, features {unique-runtime}, mainnet_branch {${{ env.UNIQUE_MAINNET_TAG }}}, replica_from_address {${{ env.UNIQUE_REPLICA_FROM }}} + forkless-update-data: + needs: execution-marix + # The type of runner that the job will run on + runs-on: [self-hosted-ci,large] + timeout-minutes: 1380 + + name: ${{ matrix.network }}-data + strategy: + matrix: + include: ${{fromJson(needs.execution-marix.outputs.matrix)}} + + 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. + + + steps: + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + with: + ref: ${{ github.head_ref }} #Checking out head commit + + - name: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Generate ENV related extend file for docker-compose + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/docker-compose.tmp-forkless-data.j2 + output_file: .docker/docker-compose.${{ matrix.network }}.yml + variables: | + REPO_URL=${{ github.server_url }}/${{ github.repository }}.git + RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} + POLKADOT_BUILD_BRANCH=${{ env.POLKADOT_BUILD_BRANCH }} + POLKADOT_MAINNET_BRANCH=${{ env.POLKADOT_MAINNET_BRANCH }} + MAINNET_TAG=${{ matrix.mainnet_tag }} + MAINNET_BRANCH=${{ matrix.mainnet_branch }} + FEATURE=${{ matrix.features }} + RUNTIME=${{ matrix.runtime }} + BRANCH=${{ github.head_ref }} + REPLICA_FROM=${{ matrix.replica_from_address }} + - name: Show build configuration + run: cat .docker/docker-compose.${{ matrix.network }}.yml + + - name: Generate launch-config-forkless-data.json + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/forkless-config/launch-config-forkless-data.j2 + output_file: .docker/launch-config-forkless-data.json + variables: | + FEATURE=${{ matrix.features }} + RUNTIME=${{ matrix.runtime }} + - name: Show launch-config-forkless configuration + run: cat .docker/launch-config-forkless-data.json + + + - name: Build the stack + run: docker-compose -f ".docker/docker-compose-forkless.yml" -f ".docker/docker-compose.${{ matrix.network }}.yml" up -d --build --force-recreate --timeout 300 + + - name: Check if docker logs consist logs related to Runtime Upgrade testing. + if: success() + run: | + counter=160 + function check_container_status { + docker inspect -f {{.State.Running}} node-parachain + } + function do_docker_logs { + docker logs --details node-parachain 2>&1 + } + function is_started { + if [ "$(check_container_status)" == "true" ]; then + echo "Container: node-parachain RUNNING"; + echo "Check Docker logs" + DOCKER_LOGS=$(do_docker_logs) + if [[ ${DOCKER_LOGS} = *"🛸 PARACHAINS' RUNTIME UPGRADE TESTING COMPLETE 🛸"* ]];then + echo "🛸 PARACHAINS' RUNTIME UPGRADE TESTING COMPLETE 🛸" + return 0 + elif [[ ${DOCKER_LOGS} = *"🚧 PARACHAINS' RUNTIME UPGRADE TESTING FAILED 🚧"* ]];then + echo "🚧 PARACHAINS' RUNTIME UPGRADE TESTING FAILED 🚧" + return 1 + else + echo "Message not found in logs output, repeating..." + return 1 + fi + else + echo "Container node-parachain not RUNNING" + echo "Halting all future checks" + exit 1 + fi + exit 0 + } + while ! is_started; do + echo "Waiting for special message in log files " + sleep 30s + counter=$(( $counter - 1 )) + echo "Counter: $counter" + if [ "$counter" -gt "0" ]; then + continue + else + break + fi + done + echo "Halting script" + exit 0 + shell: bash + + - name: Collect Docker Logs + if: success() || failure() + uses: jwalton/gh-docker-logs@v2.2.0 + with: + dest: './forkless-parachain-upgrade-data-logs.${{ matrix.features }}' + images: 'node-parachain' + + - name: Show Docker logs + if: success() || failure() + run: cat './forkless-parachain-upgrade-data-logs.${{ matrix.features }}/node-parachain.log' + + - name: Stop running containers + if: always() # run this step always + run: docker-compose -f ".docker/docker-compose-forkless.yml" -f ".docker/docker-compose.${{ matrix.network }}.yml" down --volumes + + - name: Remove builder cache + if: always() # run this step always + run: | + docker builder prune -f -a + docker system prune -f + docker image prune -f -a \ No newline at end of file diff --git a/.github/workflows/forkless-update-nodata_v2.yml b/.github/workflows/forkless-update-nodata_v2.yml new file mode 100644 index 0000000000..77dfe5b9c6 --- /dev/null +++ b/.github/workflows/forkless-update-nodata_v2.yml @@ -0,0 +1,192 @@ +# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2586837021/Forkless+update+without+data +# Forkless update without data replication + +# Triger: only call from main workflow(re-usable workflows) +on: + workflow_call: + + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + execution-marix: + + name: Prepare execution matrix + + runs-on: self-hosted-ci + outputs: + matrix: ${{ steps.create_matrix.outputs.matrix }} + + steps: + + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + with: + ref: ${{ github.head_ref }} #Checking out head commit + + - name: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Create Execution matrix + uses: CertainLach/create-matrix-action@v3 + id: create_matrix + with: + matrix: | + network {opal}, runtime {opal}, features {opal-runtime}, mainnet_branch {${{ env.OPAL_MAINNET_TAG }}} + network {quartz}, runtime {quartz}, features {quartz-runtime}, mainnet_branch {${{ env.QUARTZ_MAINNET_TAG }}} + network {unique}, runtime {unique}, features {unique-runtime}, mainnet_branch {${{ env.UNIQUE_MAINNET_TAG }}} + forkless-update-nodata: + needs: execution-marix + # The type of runner that the job will run on + runs-on: [self-hosted-ci,large] + + timeout-minutes: 1380 + + name: ${{ matrix.network }}-nodata + + 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. + + strategy: + matrix: + include: ${{fromJson(needs.execution-marix.outputs.matrix)}} + + steps: + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + with: + ref: ${{ github.head_ref }} #Checking out head commit + + - name: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Generate ENV related extend file for docker-compose + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/docker-compose.tmp-forkless-nodata.j2 + output_file: .docker/docker-compose.${{ matrix.network }}.yml + variables: | + REPO_URL=${{ github.server_url }}/${{ github.repository }}.git + RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} + POLKADOT_BUILD_BRANCH=${{ env.POLKADOT_BUILD_BRANCH }} + POLKADOT_MAINNET_BRANCH=${{ env.POLKADOT_MAINNET_BRANCH }} + MAINNET_TAG=${{ matrix.mainnet_tag }} + MAINNET_BRANCH=${{ matrix.mainnet_branch }} + FEATURE=${{ matrix.features }} + RUNTIME=${{ matrix.runtime }} + BRANCH=${{ github.head_ref }} + - name: Show build configuration + run: cat .docker/docker-compose.${{ matrix.network }}.yml + + - name: Generate launch-config-forkless-nodata.json + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/forkless-config/launch-config-forkless-nodata.j2 + output_file: .docker/launch-config-forkless-nodata.json + variables: | + FEATURE=${{ matrix.features }} + RUNTIME=${{ matrix.runtime }} + - name: Show launch-config-forkless configuration + run: cat .docker/launch-config-forkless-nodata.json + + - uses: actions/setup-node@v3 + with: + node-version: 16 + + - name: Build the stack + run: docker-compose -f ".docker/docker-compose-forkless.yml" -f ".docker/docker-compose.${{ matrix.network }}.yml" up -d --build --force-recreate --timeout 300 + + - name: Check if docker logs consist logs related to Runtime Upgrade testing. + if: success() + run: | + counter=160 + function check_container_status { + docker inspect -f {{.State.Running}} node-parachain + } + function do_docker_logs { + docker logs --details node-parachain 2>&1 + } + function is_started { + if [ "$(check_container_status)" == "true" ]; then + echo "Container: node-parachain RUNNING"; + echo "Check Docker logs" + DOCKER_LOGS=$(do_docker_logs) + if [[ ${DOCKER_LOGS} = *"🛸 PARACHAINS' RUNTIME UPGRADE TESTING COMPLETE 🛸"* ]];then + echo "🛸 PARACHAINS' RUNTIME UPGRADE TESTING COMPLETE 🛸" + return 0 + elif [[ ${DOCKER_LOGS} = *"🚧 PARACHAINS' RUNTIME UPGRADE TESTING FAILED 🚧"* ]];then + echo "🚧 PARACHAINS' RUNTIME UPGRADE TESTING FAILED 🚧" + return 1 + else + echo "Message not found in logs output, repeating..." + return 1 + fi + else + echo "Container node-parachain not RUNNING" + echo "Halting all future checks" + exit 1 + fi + exit 0 + } + while ! is_started; do + echo "Waiting for special message in log files " + sleep 30s + counter=$(( $counter - 1 )) + echo "Counter: $counter" + if [ "$counter" -gt "0" ]; then + continue + else + break + fi + done + echo "Halting script" + exit 0 + shell: bash + + - name: Collect Docker Logs + if: success() || failure() + uses: jwalton/gh-docker-logs@v2.2.0 + with: + dest: './forkless-parachain-upgrade-nodata-logs.${{ matrix.features }}' + images: 'node-parachain' + + - name: Show docker logs + if: success() || failure() + run: cat './forkless-parachain-upgrade-nodata-logs.${{ matrix.features }}/node-parachain.log' + + - name: Run tests + working-directory: 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} + env: + RPC_URL: http://127.0.0.1:9933/ + + - name: Test Report + uses: phoenix-actions/test-reporting@v8 + id: test-report + if: success() || failure() # run this step even if previous step failed + with: + name: Report tests results - ${{ matrix.network }} # Name of the check run which will be created + path: tests/mochawesome-report/test-*.json # Path to test results + reporter: mochawesome-json + fail-on-error: 'false' + + - name: Stop running containers + if: always() # run this step always + run: docker-compose -f ".docker/docker-compose-forkless.yml" -f ".docker/docker-compose.${{ matrix.network }}.yml" down + + - name: Remove builder cache + if: always() # run this step always + run: | + docker builder prune -f -a + docker system prune -f + docker image prune -f -a \ No newline at end of file diff --git a/.github/workflows/forkless.yml b/.github/workflows/forkless.yml new file mode 100644 index 0000000000..8aa217eadf --- /dev/null +++ b/.github/workflows/forkless.yml @@ -0,0 +1,20 @@ +# Intermediate Nested Workflow for calling subworkflows as a parallel tasks. + +name: Nesting Forkless + +on: + workflow_call: + +jobs: + + forkless-update-data: + name: with data + uses: ./.github/workflows/forkless-update-data_v2.yml + + forkless-update-no-data: + name: no data + uses: ./.github/workflows/forkless-update-nodata_v2.yml + + try-runtime: + name: try-runtime + uses: ./.github/workflows/try-runtime_v2.yml \ No newline at end of file diff --git a/.github/workflows/testnet-build.yml b/.github/workflows/testnet-build.yml new file mode 100644 index 0000000000..9156685c17 --- /dev/null +++ b/.github/workflows/testnet-build.yml @@ -0,0 +1,139 @@ +name: testnet-build + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the master branch + pull_request: + branches: + - master + types: + - opened + - reopened + - synchronize #commit(s) pushed to the pull request + - ready_for_review + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +#Define Workflow variables +env: + REPO_URL: ${{ github.server_url }}/${{ github.repository }} + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + + prepare-execution-marix: + + name: Prepare execution matrix + + runs-on: [self-hosted-ci,medium] + outputs: + matrix: ${{ steps.create_matrix.outputs.matrix }} + + steps: + + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + with: + ref: ${{ github.head_ref }} #Checking out head commit + + - name: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Create Execution matrix + uses: fabiocaccamo/create-matrix-action@v2 + id: create_matrix + with: + matrix: | + network {opal}, runtime {opal}, features {opal-runtime} + network {quartz}, runtime {quartz}, features {quartz-runtime} + network {unique}, runtime {unique}, features {unique-runtime} + testnet-build: + needs: prepare-execution-marix + # The type of runner that the job will run on + runs-on: [self-hosted-ci,medium] + + timeout-minutes: 600 + + name: ${{ matrix.network }} + + 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. + + strategy: + matrix: + include: ${{fromJson(needs.prepare-execution-marix.outputs.matrix)}} + + steps: + - name: Skip if pull request is in Draft + if: github.event.pull_request.draft == true + run: exit 1 + + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + with: + ref: ${{ github.head_ref }} #Checking out head commit + + - name: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Generate ENV related extend file for docker-compose + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/Dockerfile-testnet.j2 + output_file: .docker/Dockerfile-testnet.${{ matrix.network }}.yml + variables: | + RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} + NETWORK=${{ matrix.network }} + POLKADOT_BUILD_BRANCH=${{ env.POLKADOT_BUILD_BRANCH }} + POLKADOT_LAUNCH_BRANCH=${{ env.POLKADOT_LAUNCH_BRANCH }} + FEATURE=${{ matrix.features }} + RUNTIME=${{ matrix.runtime }} + BRANCH=${{ github.head_ref }} + - name: Show build configuration + run: cat .docker/Dockerfile-testnet.${{ matrix.network }}.yml + + - name: Show launch-config configuration + run: cat launch-config.json + + - name: Run find-and-replace to remove slashes from branch name + uses: mad9000/actions-find-and-replace-string@2 + id: branchname + with: + source: ${{ github.head_ref }} + find: '/' + replace: '-' + + - name: Log in to Docker Hub + uses: docker/login-action@v2.0.0 + with: + username: ${{ secrets.CORE_DOCKERHUB_USERNAME }} + password: ${{ secrets.CORE_DOCKERHUB_TOKEN }} + + - name: Pull polkadot docker image + run: docker pull uniquenetwork/builder-polkadot:${{ env.POLKADOT_BUILD_BRANCH }} + + - name: Build the stack + run: cd .docker/ && docker build --file ./Dockerfile-testnet.${{ matrix.network }}.yml --tag uniquenetwork/${{ matrix.network }}-testnet-local-nightly:nightly-${{ steps.branchname.outputs.value }}-${{ github.sha }} . + + - name: Push docker version image + run: docker push uniquenetwork/${{ matrix.network }}-testnet-local-nightly:nightly-${{ steps.branchname.outputs.value }}-${{ github.sha }} + + - name: Clean Workspace + if: always() + uses: AutoModality/action-clean@v1.1.0 + + - name: Remove builder cache + if: always() # run this step always + run: | + docker builder prune -f + docker system prune -f \ No newline at end of file diff --git a/.github/workflows/try-runtime_v2.yml b/.github/workflows/try-runtime_v2.yml new file mode 100644 index 0000000000..aed4b13fb0 --- /dev/null +++ b/.github/workflows/try-runtime_v2.yml @@ -0,0 +1,78 @@ +# Try-runtime checks +# https://cryptousetech.atlassian.net/wiki/spaces/CI/pages/2587656213/Try+runtime + +# Triger: only call from main workflow(re-usable workflows) +on: + workflow_call: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + try-runtime: + # The type of runner that the job will run on + runs-on: self-hosted-ci + + name: ${{ matrix.network }}-try-runtime + + 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. + + strategy: + matrix: + include: + - network: opal + features: opal-runtime + replica_from_address: wss://eu-ws-opal.unique.network:443 + - network: quartz + features: quartz-runtime + replica_from_address: wss://eu-ws-quartz.unique.network:443 + - network: unique + features: unique-runtime + replica_from_address: wss://eu-ws.unique.network:443 + + steps: + + - name: Clean Workspace + uses: AutoModality/action-clean@v1.1.0 + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + with: + ref: ${{ github.head_ref }} #Checking out head commit + + - name: Read .env file + uses: xom9ikk/dotenv@v2 + + - name: Generate ENV related extend file for docker-compose + uses: cuchi/jinja2-action@v1.2.0 + with: + template: .docker/docker-compose.try-runtime.j2 + output_file: .docker/docker-compose.try-runtime.${{ matrix.network }}.yml + variables: | + RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }} + FEATURE=${{ matrix.features }} + REPLICA_FROM=${{ matrix.replica_from_address }} + - name: Show build configuration + run: cat .docker/docker-compose.try-runtime.${{ matrix.network }}.yml + + - name: Build the stack + run: docker-compose -f ".docker/docker-compose-try-runtime.yml" -f ".docker/docker-compose.try-runtime.${{ matrix.network }}.yml" up --build --force-recreate --timeout 300 --remove-orphans --exit-code-from try-runtime + + - name: Collect Docker Logs + if: success() || failure() + uses: jwalton/gh-docker-logs@v2.2.0 + with: + dest: './try-runtime-logs.${{ matrix.network }}' + images: 'try-runtime' + + - name: Show docker logs + run: cat './try-runtime-logs.${{ matrix.network }}/try-runtime.log' + + - name: Stop running containers + if: always() # run this step always + run: docker-compose -f ".docker/docker-compose-try-runtime.yml" -f ".docker/docker-compose.try-runtime.${{ matrix.network }}.yml" down + + - name: Remove builder cache + if: always() # run this step always + run: | + docker builder prune -f -a + docker system prune -f + docker image prune -f -a \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 62c2493f8d..66731bad2a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5316,6 +5316,7 @@ dependencies = [ "pallet-evm-transaction-payment", "pallet-fungible", "pallet-inflation", + "pallet-maintenance", "pallet-nonfungible", "pallet-randomness-collective-flip", "pallet-refungible", @@ -6073,6 +6074,18 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-maintenance" +version = "0.1.0" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec 3.1.5", + "scale-info", + "sp-std", +] + [[package]] name = "pallet-membership" version = "4.0.0-dev" @@ -8625,6 +8638,7 @@ dependencies = [ "pallet-evm-transaction-payment", "pallet-fungible", "pallet-inflation", + "pallet-maintenance", "pallet-nonfungible", "pallet-randomness-collective-flip", "pallet-refungible", @@ -12628,6 +12642,7 @@ dependencies = [ "pallet-evm-transaction-payment", "pallet-fungible", "pallet-inflation", + "pallet-maintenance", "pallet-nonfungible", "pallet-randomness-collective-flip", "pallet-refungible", diff --git a/Makefile b/Makefile index 6df32def75..152977c73f 100644 --- a/Makefile +++ b/Makefile @@ -105,5 +105,9 @@ bench-rmrk-core: bench-rmrk-equip: make _bench PALLET=proxy-rmrk-equip +.PHONY: bench-maintenance +bench-maintenance: + make _bench PALLET=maintenance + .PHONY: bench -bench: bench-evm-migration bench-unique bench-structure bench-fungible bench-refungible bench-nonfungible bench-scheduler bench-rmrk-core bench-rmrk-equip +bench: bench-evm-migration bench-unique bench-structure bench-fungible bench-refungible bench-nonfungible bench-scheduler bench-rmrk-core bench-rmrk-equip bench-maintenance diff --git a/node/cli/Cargo.toml b/node/cli/Cargo.toml index 5ce0c10616..5b860175f2 100644 --- a/node/cli/Cargo.toml +++ b/node/cli/Cargo.toml @@ -321,7 +321,7 @@ unique-rpc = { default-features = false, path = "../rpc" } rmrk-rpc = { path = "../../primitives/rmrk-rpc" } [features] -default = [] +default = ['opal-runtime/opal-runtime', 'quartz-runtime?/quartz-runtime'] runtime-benchmarks = [ 'unique-runtime?/runtime-benchmarks', 'quartz-runtime?/runtime-benchmarks', diff --git a/pallets/maintenance/Cargo.toml b/pallets/maintenance/Cargo.toml new file mode 100644 index 0000000000..6b54f5a98d --- /dev/null +++ b/pallets/maintenance/Cargo.toml @@ -0,0 +1,35 @@ +[package] +name = "pallet-maintenance" +version = "0.1.0" +authors = ["Unique Network "] +edition = "2021" +license = "GPLv3" +homepage = "https://unique.network" +repository = "https://github.com/UniqueNetwork/unique-chain" +description = "Unique Maintenance pallet" +readme = "README.md" + +[dependencies] +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } +scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24" } +frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24" } +frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24" } +sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24" } + +[features] +default = ["std"] +std = [ + "codec/std", + "scale-info/std", + "frame-support/std", + "frame-system/std", + "frame-benchmarking/std", + "sp-std/std", +] +runtime-benchmarks = [ + "frame-benchmarking", + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", +] +try-runtime = ["frame-support/try-runtime"] diff --git a/pallets/maintenance/src/benchmarking.rs b/pallets/maintenance/src/benchmarking.rs new file mode 100644 index 0000000000..a07b3ea429 --- /dev/null +++ b/pallets/maintenance/src/benchmarking.rs @@ -0,0 +1,37 @@ +// 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 . + +use super::*; +use crate::{Pallet as Maintenance, Config}; + +use frame_benchmarking::benchmarks; +use frame_system::RawOrigin; +use frame_support::ensure; + +benchmarks! { + enable { + }: _(RawOrigin::Root) + verify { + ensure!(>::get(), "didn't enable the MM"); + } + + disable { + Maintenance::::enable(RawOrigin::Root.into())?; + }: _(RawOrigin::Root) + verify { + ensure!(!>::get(), "didn't disable the MM"); + } +} diff --git a/pallets/maintenance/src/lib.rs b/pallets/maintenance/src/lib.rs new file mode 100644 index 0000000000..0baaed9aa5 --- /dev/null +++ b/pallets/maintenance/src/lib.rs @@ -0,0 +1,80 @@ +// 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 . + +#![cfg_attr(not(feature = "std"), no_std)] + +pub use pallet::*; + +#[cfg(feature = "runtime-benchmarks")] +pub mod benchmarking; + +pub mod weights; + +#[frame_support::pallet] +pub mod pallet { + use frame_support::pallet_prelude::*; + use frame_system::pallet_prelude::*; + use crate::weights::WeightInfo; + + #[pallet::config] + pub trait Config: frame_system::Config { + type Event: From> + IsType<::Event>; + type WeightInfo: WeightInfo; + } + + #[pallet::event] + #[pallet::generate_deposit(pub(super) fn deposit_event)] + pub enum Event { + MaintenanceEnabled, + MaintenanceDisabled, + } + + #[pallet::pallet] + #[pallet::generate_store(pub(super) trait Store)] + pub struct Pallet(_); + + #[pallet::storage] + #[pallet::getter(fn is_enabled)] + pub type Enabled = StorageValue<_, bool, ValueQuery>; + + #[pallet::error] + pub enum Error {} + + #[pallet::call] + impl Pallet { + #[pallet::weight(::WeightInfo::enable())] + pub fn enable(origin: OriginFor) -> DispatchResult { + ensure_root(origin)?; + + >::set(true); + + Self::deposit_event(Event::MaintenanceEnabled); + + Ok(()) + } + + #[pallet::weight(::WeightInfo::disable())] + pub fn disable(origin: OriginFor) -> DispatchResult { + ensure_root(origin)?; + + >::set(false); + + Self::deposit_event(Event::MaintenanceDisabled); + + Ok(()) + } + } +} diff --git a/pallets/maintenance/src/weights.rs b/pallets/maintenance/src/weights.rs new file mode 100644 index 0000000000..daa20850f6 --- /dev/null +++ b/pallets/maintenance/src/weights.rs @@ -0,0 +1,67 @@ +// Template adopted from https://github.com/paritytech/substrate/blob/master/.maintain/frame-weight-template.hbs + +//! Autogenerated weights for pallet_maintenance +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-11-01, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 + +// Executed Command: +// target/release/unique-collator +// benchmark +// pallet +// --pallet +// pallet-maintenance +// --wasm-execution +// compiled +// --extrinsic +// * +// --template +// .maintain/frame-weight-template.hbs +// --steps=50 +// --repeat=80 +// --heap-pages=4096 +// --output=./pallets/maintenance/src/weights.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] +#![allow(clippy::unnecessary_cast)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use sp_std::marker::PhantomData; + +/// Weight functions needed for pallet_maintenance. +pub trait WeightInfo { + fn enable() -> Weight; + fn disable() -> Weight; +} + +/// Weights for pallet_maintenance using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + // Storage: Maintenance Enabled (r:0 w:1) + fn enable() -> Weight { + (7_367_000 as Weight) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + // Storage: Maintenance Enabled (r:0 w:1) + fn disable() -> Weight { + (7_273_000 as Weight) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } +} + +// For backwards compatibility and tests +impl WeightInfo for () { + // Storage: Maintenance Enabled (r:0 w:1) + fn enable() -> Weight { + (7_367_000 as Weight) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + // Storage: Maintenance Enabled (r:0 w:1) + fn disable() -> Weight { + (7_273_000 as Weight) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } +} diff --git a/runtime/common/src/runtime_apis.rs b/runtime/common/src/runtime_apis.rs index 34dd5758f1..1b5ddfea15 100644 --- a/runtime/common/src/runtime_apis.rs +++ b/runtime/common/src/runtime_apis.rs @@ -461,6 +461,8 @@ macro_rules! impl_common_runtime_apis { #[cfg(not(feature = "unique-runtime"))] list_benchmark!(list, extra, pallet_proxy_rmrk_equip, RmrkEquip); + list_benchmark!(list, extra, pallet_maintenance, Maintenance); + // list_benchmark!(list, extra, pallet_evm_coder_substrate, EvmCoderSubstrate); let storage_info = AllPalletsReversedWithSystemFirst::storage_info(); @@ -512,6 +514,8 @@ macro_rules! impl_common_runtime_apis { #[cfg(not(feature = "unique-runtime"))] add_benchmark!(params, batches, pallet_proxy_rmrk_equip, RmrkEquip); + add_benchmark!(params, batches, pallet_maintenance, Maintenance); + // add_benchmark!(params, batches, pallet_evm_coder_substrate, EvmCoderSubstrate); if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) } diff --git a/runtime/opal/Cargo.toml b/runtime/opal/Cargo.toml index 678dfc3d61..c34621fd63 100644 --- a/runtime/opal/Cargo.toml +++ b/runtime/opal/Cargo.toml @@ -16,7 +16,7 @@ version = '0.9.24' targets = ['x86_64-unknown-linux-gnu'] [features] -default = ['std'] +default = ['std', 'opal-runtime'] runtime-benchmarks = [ 'hex-literal', 'frame-benchmarking', @@ -41,6 +41,7 @@ runtime-benchmarks = [ 'pallet-xcm/runtime-benchmarks', 'sp-runtime/runtime-benchmarks', 'xcm-builder/runtime-benchmarks', + 'pallet-maintenance/runtime-benchmarks', ] try-runtime = [ 'frame-try-runtime', @@ -117,8 +118,11 @@ std = [ 'rmrk-rpc/std', "orml-vesting/std", + + 'pallet-maintenance/std', ] limit-testing = ['pallet-unique/limit-testing', 'up-data-structs/limit-testing'] +opal-runtime = [] ################################################################################ # Substrate Dependencies @@ -426,6 +430,7 @@ pallet-ethereum = { default-features = false, git = "https://github.com/uniquene pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.24" } fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.24" } fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.24" } +pallet-maintenance = { default-features = false, path = "../../pallets/maintenance" } ################################################################################ # Build Dependencies diff --git a/runtime/opal/src/lib.rs b/runtime/opal/src/lib.rs index d055325a7f..09335581be 100644 --- a/runtime/opal/src/lib.rs +++ b/runtime/opal/src/lib.rs @@ -32,10 +32,16 @@ use fp_self_contained::*; // #[cfg(any(feature = "std", test))] // pub use sp_runtime::BuildStorage; +use scale_info::TypeInfo; use sp_runtime::{ Permill, Perbill, Percent, create_runtime_str, generic, impl_opaque_keys, - traits::{AccountIdLookup, BlakeTwo256, Block as BlockT, AccountIdConversion, Zero, Member}, - transaction_validity::{TransactionSource, TransactionValidity}, + traits::{ + AccountIdLookup, BlakeTwo256, Block as BlockT, AccountIdConversion, Zero, Member, + SignedExtension, + }, + transaction_validity::{ + TransactionSource, TransactionValidity, ValidTransaction, InvalidTransaction, + }, ApplyExtrinsicResult, RuntimeAppPublic, }; @@ -89,7 +95,6 @@ use sp_arithmetic::{ traits::{BaseArithmetic, Unsigned}, }; use smallvec::smallvec; -// use scale_info::TypeInfo; use codec::{Encode, Decode}; use fp_rpc::TransactionStatus; use sp_runtime::{ @@ -192,7 +197,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!(RUNTIME_NAME), impl_name: create_runtime_str!(RUNTIME_NAME), authoring_version: 1, - spec_version: 924012, + spec_version: 924013, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -958,6 +963,7 @@ fn get_signed_extras(from: ::AccountId) -> Sign from, )), frame_system::CheckWeight::::new(), + CheckMaintenance, // sponsoring transaction logic // pallet_charge_transaction::ChargeTransactionPayment::::new(0), ) @@ -1121,6 +1127,92 @@ impl pallet_evm_contract_helpers::Config for Runtime { type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit; } +impl pallet_maintenance::Config for Runtime { + type Event = Event; + type WeightInfo = pallet_maintenance::weights::SubstrateWeight; +} + +#[derive(Debug, Encode, Decode, PartialEq, Eq, Clone, TypeInfo)] +pub struct CheckMaintenance; + +impl SignedExtension for CheckMaintenance { + type AccountId = AccountId; + type Call = Call; + type AdditionalSigned = (); + type Pre = (); + + const IDENTIFIER: &'static str = "CheckMaintenance"; + + fn additional_signed(&self) -> Result { + Ok(()) + } + + fn pre_dispatch( + self, + who: &Self::AccountId, + call: &Self::Call, + info: &DispatchInfoOf, + len: usize, + ) -> Result { + self.validate(who, call, info, len).map(|_| ()) + } + + fn validate( + &self, + _who: &Self::AccountId, + call: &Self::Call, + _info: &DispatchInfoOf, + _len: usize, + ) -> TransactionValidity { + if Maintenance::is_enabled() { + match call { + Call::EvmMigration(_) + | Call::EVM(_) + | Call::Ethereum(_) + | Call::Inflation(_) + | Call::Maintenance(_) + | Call::Scheduler(_) + | Call::Structure(_) + | Call::Unique(_) => Err(TransactionValidityError::Invalid(InvalidTransaction::Call)), + + #[cfg(any(feature = "opal-runtime", feature = "quartz-runtime"))] + Call::RmrkCore(_) | Call::RmrkEquip(_) => { + Err(TransactionValidityError::Invalid(InvalidTransaction::Call)) + } + + _ => Ok(ValidTransaction::default()), + } + } else { + Ok(ValidTransaction::default()) + } + } + + fn pre_dispatch_unsigned( + call: &Self::Call, + info: &DispatchInfoOf, + len: usize, + ) -> Result<(), TransactionValidityError> { + Self::validate_unsigned(call, info, len).map(|_| ()) + } + + fn validate_unsigned( + call: &Self::Call, + _info: &DispatchInfoOf, + _len: usize, + ) -> TransactionValidity { + if Maintenance::is_enabled() { + match call { + Call::EVM(_) | Call::Ethereum(_) | Call::EvmMigration(_) => { + Err(TransactionValidityError::Invalid(InvalidTransaction::Call)) + } + _ => Ok(ValidTransaction::default()), + } + } else { + Ok(ValidTransaction::default()) + } + } +} + construct_runtime!( pub enum Runtime where Block = Block, @@ -1173,6 +1265,8 @@ construct_runtime!( EvmContractHelpers: pallet_evm_contract_helpers::{Pallet, Storage} = 151, EvmTransactionPayment: pallet_evm_transaction_payment::{Pallet} = 152, EvmMigration: pallet_evm_migration::{Pallet, Call, Storage} = 153, + + Maintenance: pallet_maintenance::{Pallet, Call, Storage, Event} = 154, } ); @@ -1218,6 +1312,7 @@ pub type SignedExtra = ( frame_system::CheckEra, frame_system::CheckNonce, frame_system::CheckWeight, + CheckMaintenance, ChargeTransactionPayment, //pallet_contract_helpers::ContractHelpersExtension, pallet_ethereum::FakeTransactionFinalizer, @@ -1228,6 +1323,7 @@ pub type SignedExtraScheduler = ( frame_system::CheckEra, frame_system::CheckNonce, frame_system::CheckWeight, + CheckMaintenance, ); /// Unchecked extrinsic type as expected by this runtime. pub type UncheckedExtrinsic = diff --git a/runtime/quartz/Cargo.toml b/runtime/quartz/Cargo.toml index 4c9425a5bd..e4e256cfcc 100644 --- a/runtime/quartz/Cargo.toml +++ b/runtime/quartz/Cargo.toml @@ -16,7 +16,7 @@ version = '0.9.24' targets = ['x86_64-unknown-linux-gnu'] [features] -default = ['std'] +default = ['std', 'quartz-runtime'] runtime-benchmarks = [ 'hex-literal', 'frame-benchmarking', @@ -41,6 +41,7 @@ runtime-benchmarks = [ 'pallet-xcm/runtime-benchmarks', 'sp-runtime/runtime-benchmarks', 'xcm-builder/runtime-benchmarks', + 'pallet-maintenance/runtime-benchmarks', ] try-runtime = [ 'frame-try-runtime', @@ -116,8 +117,11 @@ std = [ 'unique-runtime-common/std', "orml-vesting/std", + + 'pallet-maintenance/std', ] limit-testing = ['pallet-unique/limit-testing', 'up-data-structs/limit-testing'] +quartz-runtime = [] ################################################################################ # Substrate Dependencies @@ -432,6 +436,7 @@ pallet-ethereum = { default-features = false, git = "https://github.com/uniquene pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.24" } fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.24" } fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.24" } +pallet-maintenance = { default-features = false, path = "../../pallets/maintenance" } ################################################################################ # Build Dependencies diff --git a/runtime/quartz/src/lib.rs b/runtime/quartz/src/lib.rs index df1f9adcfc..fcb18ee4fa 100644 --- a/runtime/quartz/src/lib.rs +++ b/runtime/quartz/src/lib.rs @@ -32,10 +32,16 @@ use fp_self_contained::*; // #[cfg(any(feature = "std", test))] // pub use sp_runtime::BuildStorage; +use scale_info::TypeInfo; use sp_runtime::{ Permill, Perbill, Percent, create_runtime_str, generic, impl_opaque_keys, - traits::{AccountIdLookup, BlakeTwo256, Block as BlockT, AccountIdConversion, Zero, Member}, - transaction_validity::{TransactionSource, TransactionValidity}, + traits::{ + AccountIdLookup, BlakeTwo256, Block as BlockT, AccountIdConversion, Zero, Member, + SignedExtension, + }, + transaction_validity::{ + TransactionSource, TransactionValidity, ValidTransaction, InvalidTransaction, + }, ApplyExtrinsicResult, RuntimeAppPublic, }; @@ -191,7 +197,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!(RUNTIME_NAME), impl_name: create_runtime_str!(RUNTIME_NAME), authoring_version: 1, - spec_version: 924012, + spec_version: 924013, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -957,6 +963,7 @@ fn get_signed_extras(from: ::AccountId) -> Sign from, )), frame_system::CheckWeight::::new(), + CheckMaintenance, // sponsoring transaction logic // pallet_charge_transaction::ChargeTransactionPayment::::new(0), ) @@ -1119,6 +1126,92 @@ impl pallet_evm_contract_helpers::Config for Runtime { type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit; } +impl pallet_maintenance::Config for Runtime { + type Event = Event; + type WeightInfo = pallet_maintenance::weights::SubstrateWeight; +} + +#[derive(Debug, Encode, Decode, PartialEq, Eq, Clone, TypeInfo)] +pub struct CheckMaintenance; + +impl SignedExtension for CheckMaintenance { + type AccountId = AccountId; + type Call = Call; + type AdditionalSigned = (); + type Pre = (); + + const IDENTIFIER: &'static str = "CheckMaintenance"; + + fn additional_signed(&self) -> Result { + Ok(()) + } + + fn pre_dispatch( + self, + who: &Self::AccountId, + call: &Self::Call, + info: &DispatchInfoOf, + len: usize, + ) -> Result { + self.validate(who, call, info, len).map(|_| ()) + } + + fn validate( + &self, + _who: &Self::AccountId, + call: &Self::Call, + _info: &DispatchInfoOf, + _len: usize, + ) -> TransactionValidity { + if Maintenance::is_enabled() { + match call { + Call::EvmMigration(_) + | Call::EVM(_) + | Call::Ethereum(_) + | Call::Inflation(_) + | Call::Maintenance(_) + | Call::Scheduler(_) + | Call::Structure(_) + | Call::Unique(_) => Err(TransactionValidityError::Invalid(InvalidTransaction::Call)), + + #[cfg(any(feature = "opal-runtime", feature = "quartz-runtime"))] + Call::RmrkCore(_) | Call::RmrkEquip(_) => { + Err(TransactionValidityError::Invalid(InvalidTransaction::Call)) + } + + _ => Ok(ValidTransaction::default()), + } + } else { + Ok(ValidTransaction::default()) + } + } + + fn pre_dispatch_unsigned( + call: &Self::Call, + info: &DispatchInfoOf, + len: usize, + ) -> Result<(), TransactionValidityError> { + Self::validate_unsigned(call, info, len).map(|_| ()) + } + + fn validate_unsigned( + call: &Self::Call, + _info: &DispatchInfoOf, + _len: usize, + ) -> TransactionValidity { + if Maintenance::is_enabled() { + match call { + Call::EVM(_) | Call::Ethereum(_) | Call::EvmMigration(_) => { + Err(TransactionValidityError::Invalid(InvalidTransaction::Call)) + } + _ => Ok(ValidTransaction::default()), + } + } else { + Ok(ValidTransaction::default()) + } + } +} + construct_runtime!( pub enum Runtime where Block = Block, @@ -1171,6 +1264,8 @@ construct_runtime!( EvmContractHelpers: pallet_evm_contract_helpers::{Pallet, Storage} = 151, EvmTransactionPayment: pallet_evm_transaction_payment::{Pallet} = 152, EvmMigration: pallet_evm_migration::{Pallet, Call, Storage} = 153, + + Maintenance: pallet_maintenance::{Pallet, Call, Storage, Event} = 154, } ); @@ -1216,6 +1311,7 @@ pub type SignedExtra = ( frame_system::CheckEra, frame_system::CheckNonce, frame_system::CheckWeight, + CheckMaintenance, ChargeTransactionPayment, //pallet_contract_helpers::ContractHelpersExtension, pallet_ethereum::FakeTransactionFinalizer, @@ -1227,6 +1323,7 @@ pub type SignedExtraScheduler = ( frame_system::CheckEra, frame_system::CheckNonce, frame_system::CheckWeight, + CheckMaintenance, // pallet_charge_transaction::ChargeTransactionPayment, ); /// Unchecked extrinsic type as expected by this runtime. diff --git a/runtime/unique/Cargo.toml b/runtime/unique/Cargo.toml index 631a1a120b..bef2cb771b 100644 --- a/runtime/unique/Cargo.toml +++ b/runtime/unique/Cargo.toml @@ -42,6 +42,7 @@ runtime-benchmarks = [ 'sp-runtime/runtime-benchmarks', 'xcm-builder/runtime-benchmarks', 'up-data-structs/runtime-benchmarks', + 'pallet-maintenance/runtime-benchmarks', ] try-runtime = [ 'frame-try-runtime', @@ -117,6 +118,8 @@ std = [ 'unique-runtime-common/std', "orml-vesting/std", + + 'pallet-maintenance/std', ] limit-testing = ['pallet-unique/limit-testing', 'up-data-structs/limit-testing'] unique-runtime = [] @@ -427,6 +430,7 @@ pallet-base-fee = { default-features = false, git = "https://github.com/uniquene fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.24" } fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.24" } fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.24" } +pallet-maintenance = { default-features = false, path = "../../pallets/maintenance" } ################################################################################ # Build Dependencies diff --git a/runtime/unique/src/lib.rs b/runtime/unique/src/lib.rs index ebc927029d..31cc92c73f 100644 --- a/runtime/unique/src/lib.rs +++ b/runtime/unique/src/lib.rs @@ -32,10 +32,16 @@ use fp_self_contained::*; // #[cfg(any(feature = "std", test))] // pub use sp_runtime::BuildStorage; +use scale_info::TypeInfo; use sp_runtime::{ Permill, Perbill, Percent, create_runtime_str, generic, impl_opaque_keys, - traits::{AccountIdLookup, BlakeTwo256, Block as BlockT, AccountIdConversion, Zero, Member}, - transaction_validity::{TransactionSource, TransactionValidity}, + traits::{ + AccountIdLookup, BlakeTwo256, Block as BlockT, AccountIdConversion, Zero, Member, + SignedExtension, + }, + transaction_validity::{ + TransactionSource, TransactionValidity, ValidTransaction, InvalidTransaction, + }, ApplyExtrinsicResult, RuntimeAppPublic, }; @@ -190,7 +196,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!(RUNTIME_NAME), impl_name: create_runtime_str!(RUNTIME_NAME), authoring_version: 1, - spec_version: 924012, + spec_version: 924013, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -946,6 +952,7 @@ fn get_signed_extras(from: ::AccountId) -> Sign from, )), frame_system::CheckWeight::::new(), + CheckMaintenance, // sponsoring transaction logic // pallet_charge_transaction::ChargeTransactionPayment::::new(0), ) @@ -1108,6 +1115,92 @@ impl pallet_evm_contract_helpers::Config for Runtime { type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit; } +impl pallet_maintenance::Config for Runtime { + type Event = Event; + type WeightInfo = pallet_maintenance::weights::SubstrateWeight; +} + +#[derive(Debug, Encode, Decode, PartialEq, Eq, Clone, TypeInfo)] +pub struct CheckMaintenance; + +impl SignedExtension for CheckMaintenance { + type AccountId = AccountId; + type Call = Call; + type AdditionalSigned = (); + type Pre = (); + + const IDENTIFIER: &'static str = "CheckMaintenance"; + + fn additional_signed(&self) -> Result { + Ok(()) + } + + fn pre_dispatch( + self, + who: &Self::AccountId, + call: &Self::Call, + info: &DispatchInfoOf, + len: usize, + ) -> Result { + self.validate(who, call, info, len).map(|_| ()) + } + + fn validate( + &self, + _who: &Self::AccountId, + call: &Self::Call, + _info: &DispatchInfoOf, + _len: usize, + ) -> TransactionValidity { + if Maintenance::is_enabled() { + match call { + Call::EvmMigration(_) + | Call::EVM(_) + | Call::Ethereum(_) + | Call::Inflation(_) + | Call::Maintenance(_) + | Call::Scheduler(_) + | Call::Structure(_) + | Call::Unique(_) => Err(TransactionValidityError::Invalid(InvalidTransaction::Call)), + + #[cfg(any(feature = "opal-runtime", feature = "quartz-runtime"))] + Call::RmrkCore(_) | Call::RmrkEquip(_) => { + Err(TransactionValidityError::Invalid(InvalidTransaction::Call)) + } + + _ => Ok(ValidTransaction::default()), + } + } else { + Ok(ValidTransaction::default()) + } + } + + fn pre_dispatch_unsigned( + call: &Self::Call, + info: &DispatchInfoOf, + len: usize, + ) -> Result<(), TransactionValidityError> { + Self::validate_unsigned(call, info, len).map(|_| ()) + } + + fn validate_unsigned( + call: &Self::Call, + _info: &DispatchInfoOf, + _len: usize, + ) -> TransactionValidity { + if Maintenance::is_enabled() { + match call { + Call::EVM(_) | Call::Ethereum(_) | Call::EvmMigration(_) => { + Err(TransactionValidityError::Invalid(InvalidTransaction::Call)) + } + _ => Ok(ValidTransaction::default()), + } + } else { + Ok(ValidTransaction::default()) + } + } +} + construct_runtime!( pub enum Runtime where Block = Block, @@ -1158,6 +1251,8 @@ construct_runtime!( EvmContractHelpers: pallet_evm_contract_helpers::{Pallet, Storage} = 151, EvmTransactionPayment: pallet_evm_transaction_payment::{Pallet} = 152, EvmMigration: pallet_evm_migration::{Pallet, Call, Storage} = 153, + + Maintenance: pallet_maintenance::{Pallet, Call, Storage, Event} = 154, } ); @@ -1203,6 +1298,7 @@ pub type SignedExtra = ( frame_system::CheckEra, frame_system::CheckNonce, frame_system::CheckWeight, + CheckMaintenance, pallet_charge_transaction::ChargeTransactionPayment, //pallet_contract_helpers::ContractHelpersExtension, pallet_ethereum::FakeTransactionFinalizer, @@ -1213,6 +1309,7 @@ pub type SignedExtraScheduler = ( frame_system::CheckEra, frame_system::CheckNonce, frame_system::CheckWeight, + CheckMaintenance, // pallet_charge_transaction::ChargeTransactionPayment, ); /// Unchecked extrinsic type as expected by this runtime. diff --git a/tests/package.json b/tests/package.json index 804105848d..a8bb72be05 100644 --- a/tests/package.json +++ b/tests/package.json @@ -74,6 +74,7 @@ "testScheduler": "mocha --timeout 9999999 -r ts-node/register ./**/scheduler.test.ts", "testSchedulingEVM": "mocha --timeout 9999999 -r ts-node/register ./**/eth/scheduling.test.ts", "testXcmTransfer": "mocha --timeout 9999999 -r ts-node/register ./**/xcmTransfer.test.ts", + "testMaintenance": "mocha --timeout 9999999 -r ts-node/register ./**/maintenanceMode.test.ts", "testPalletPresence": "mocha --timeout 9999999 -r ts-node/register ./**/pallet-presence.test.ts", "testBlockProduction": "mocha --timeout 9999999 -r ts-node/register ./**/block-production.test.ts", "testEnableDisableTransfers": "mocha --timeout 9999999 -r ts-node/register ./**/enableDisableTransfer.test.ts", diff --git a/tests/scripts/readyness.js b/tests/scripts/readyness.js new file mode 100644 index 0000000000..3bf5b3313d --- /dev/null +++ b/tests/scripts/readyness.js @@ -0,0 +1,36 @@ +const { ApiPromise, WsProvider } = require('@polkadot/api'); + +const connect = async () => { + const wsEndpoint = 'ws://127.0.0.1:9944'; + const api = new ApiPromise({provider: new WsProvider(wsEndpoint)}); + await api.isReadyOrError; + + const head = (await api.rpc.chain.getHeader()).number.toNumber(); + await api.disconnect(); + if(head < 1) throw Error('No block #1'); + +} + +const sleep = time => { + return new Promise(resolve => { + setTimeout(() => resolve(), time); + }); +}; + +const main = async () => { + while(true) { + try { + await connect(); + break; + } + catch(e) { + await sleep(10000); + console.log(e); + } + } +} + +main().then(() => process.exit(0)).catch(e => { + console.error(e); + process.exit(1); +}); diff --git a/tests/src/interfaces/augment-api-errors.ts b/tests/src/interfaces/augment-api-errors.ts index 19a06cea37..d6b6b2cedf 100644 --- a/tests/src/interfaces/augment-api-errors.ts +++ b/tests/src/interfaces/augment-api-errors.ts @@ -301,6 +301,12 @@ declare module '@polkadot/api-base/types/errors' { **/ [key: string]: AugmentedError; }; + maintenance: { + /** + * Generic error + **/ + [key: string]: AugmentedError; + }; nonfungible: { /** * Unable to burn NFT with children diff --git a/tests/src/interfaces/augment-api-events.ts b/tests/src/interfaces/augment-api-events.ts index 6698d664fd..a3fe7f9a9b 100644 --- a/tests/src/interfaces/augment-api-events.ts +++ b/tests/src/interfaces/augment-api-events.ts @@ -13,45 +13,45 @@ declare module '@polkadot/api-base/types/events' { /** * A balance was set by root. **/ - BalanceSet: AugmentedEvent; + BalanceSet: AugmentedEvent; /** * Some amount was deposited (e.g. for transaction fees). **/ - Deposit: AugmentedEvent; + Deposit: AugmentedEvent; /** * An account was removed whose balance was non-zero but below ExistentialDeposit, * resulting in an outright loss. **/ - DustLost: AugmentedEvent; + DustLost: AugmentedEvent; /** * An account was created with some free balance. **/ - Endowed: AugmentedEvent; + Endowed: AugmentedEvent; /** * Some balance was reserved (moved from free to reserved). **/ - Reserved: AugmentedEvent; + Reserved: AugmentedEvent; /** * Some balance was moved from the reserve of the first account to the second account. * Final argument indicates the destination balance type. **/ - ReserveRepatriated: AugmentedEvent; + ReserveRepatriated: AugmentedEvent; /** * Some amount was removed from the account (e.g. for misbehavior). **/ - Slashed: AugmentedEvent; + Slashed: AugmentedEvent; /** * Transfer succeeded. **/ - Transfer: AugmentedEvent; + Transfer: AugmentedEvent; /** * Some balance was unreserved (moved from reserved to free). **/ - Unreserved: AugmentedEvent; + Unreserved: AugmentedEvent; /** * Some amount was withdrawn from the account (e.g. for transaction fees). **/ - Withdraw: AugmentedEvent; + Withdraw: AugmentedEvent; /** * Generic event **/ @@ -167,27 +167,27 @@ declare module '@polkadot/api-base/types/events' { /** * Downward message executed with the given outcome. **/ - ExecutedDownward: AugmentedEvent; + ExecutedDownward: AugmentedEvent; /** * Downward message is invalid XCM. **/ - InvalidFormat: AugmentedEvent; + InvalidFormat: AugmentedEvent; /** * Downward message is overweight and was placed in the overweight queue. **/ - OverweightEnqueued: AugmentedEvent; + OverweightEnqueued: AugmentedEvent; /** * Downward message from the overweight queue was executed. **/ - OverweightServiced: AugmentedEvent; + OverweightServiced: AugmentedEvent; /** * Downward message is unsupported version of XCM. **/ - UnsupportedVersion: AugmentedEvent; + UnsupportedVersion: AugmentedEvent; /** * The weight limit for handling downward messages was reached. **/ - WeightExhausted: AugmentedEvent; + WeightExhausted: AugmentedEvent; /** * Generic event **/ @@ -237,23 +237,31 @@ declare module '@polkadot/api-base/types/events' { **/ [key: string]: AugmentedEvent; }; + maintenance: { + MaintenanceDisabled: AugmentedEvent; + MaintenanceEnabled: AugmentedEvent; + /** + * Generic event + **/ + [key: string]: AugmentedEvent; + }; parachainSystem: { /** * Downward messages were processed using the given weight. **/ - DownwardMessagesProcessed: AugmentedEvent; + DownwardMessagesProcessed: AugmentedEvent; /** * Some downward messages have been received and will be processed. **/ - DownwardMessagesReceived: AugmentedEvent; + DownwardMessagesReceived: AugmentedEvent; /** * An upgrade has been authorized. **/ - UpgradeAuthorized: AugmentedEvent; + UpgradeAuthorized: AugmentedEvent; /** * The validation function was applied as of the contained relay chain block number. **/ - ValidationFunctionApplied: AugmentedEvent; + ValidationFunctionApplied: AugmentedEvent; /** * The relay-chain aborted the upgrade process. **/ @@ -390,29 +398,29 @@ declare module '@polkadot/api-base/types/events' { [key: string]: AugmentedEvent; }; rmrkCore: { - CollectionCreated: AugmentedEvent; - CollectionDestroyed: AugmentedEvent; - CollectionLocked: AugmentedEvent; - IssuerChanged: AugmentedEvent; - NFTAccepted: AugmentedEvent; - NFTBurned: AugmentedEvent; - NftMinted: AugmentedEvent; - NFTRejected: AugmentedEvent; - NFTSent: AugmentedEvent; - PrioritySet: AugmentedEvent; - PropertySet: AugmentedEvent, Bytes, Bytes]>; - ResourceAccepted: AugmentedEvent; - ResourceAdded: AugmentedEvent; - ResourceRemoval: AugmentedEvent; - ResourceRemovalAccepted: AugmentedEvent; + CollectionCreated: AugmentedEvent; + CollectionDestroyed: AugmentedEvent; + CollectionLocked: AugmentedEvent; + IssuerChanged: AugmentedEvent; + NFTAccepted: AugmentedEvent; + NFTBurned: AugmentedEvent; + NftMinted: AugmentedEvent; + NFTRejected: AugmentedEvent; + NFTSent: AugmentedEvent; + PrioritySet: AugmentedEvent; + PropertySet: AugmentedEvent, key: Bytes, value: Bytes], { collectionId: u32, maybeNftId: Option, key: Bytes, value: Bytes }>; + ResourceAccepted: AugmentedEvent; + ResourceAdded: AugmentedEvent; + ResourceRemoval: AugmentedEvent; + ResourceRemovalAccepted: AugmentedEvent; /** * Generic event **/ [key: string]: AugmentedEvent; }; rmrkEquip: { - BaseCreated: AugmentedEvent; - EquippablesUpdated: AugmentedEvent; + BaseCreated: AugmentedEvent; + EquippablesUpdated: AugmentedEvent; /** * Generic event **/ @@ -422,19 +430,19 @@ declare module '@polkadot/api-base/types/events' { /** * The call for the provided hash was not found so the task has been aborted. **/ - CallLookupFailed: AugmentedEvent, Option, FrameSupportScheduleLookupError]>; + CallLookupFailed: AugmentedEvent, id: Option, error: FrameSupportScheduleLookupError], { task: ITuple<[u32, u32]>, id: Option, error: FrameSupportScheduleLookupError }>; /** * Canceled some task. **/ - Canceled: AugmentedEvent; + Canceled: AugmentedEvent; /** * Dispatched some task. **/ - Dispatched: AugmentedEvent, Option, Result]>; + Dispatched: AugmentedEvent, id: Option, result: Result], { task: ITuple<[u32, u32]>, id: Option, result: Result }>; /** * Scheduled some task. **/ - Scheduled: AugmentedEvent; + Scheduled: AugmentedEvent; /** * Generic event **/ @@ -454,15 +462,15 @@ declare module '@polkadot/api-base/types/events' { /** * The \[sudoer\] just switched identity; the old key is supplied if one existed. **/ - KeyChanged: AugmentedEvent]>; + KeyChanged: AugmentedEvent], { oldSudoer: Option }>; /** * A sudo just took place. \[result\] **/ - Sudid: AugmentedEvent]>; + Sudid: AugmentedEvent], { sudoResult: Result }>; /** * A sudo just took place. \[result\] **/ - SudoAsDone: AugmentedEvent]>; + SudoAsDone: AugmentedEvent], { sudoResult: Result }>; /** * Generic event **/ @@ -476,23 +484,23 @@ declare module '@polkadot/api-base/types/events' { /** * An extrinsic failed. **/ - ExtrinsicFailed: AugmentedEvent; + ExtrinsicFailed: AugmentedEvent; /** * An extrinsic completed successfully. **/ - ExtrinsicSuccess: AugmentedEvent; + ExtrinsicSuccess: AugmentedEvent; /** * An account was reaped. **/ - KilledAccount: AugmentedEvent; + KilledAccount: AugmentedEvent; /** * A new account was created. **/ - NewAccount: AugmentedEvent; + NewAccount: AugmentedEvent; /** * On on-chain remark happened. **/ - Remarked: AugmentedEvent; + Remarked: AugmentedEvent; /** * Generic event **/ @@ -502,31 +510,31 @@ declare module '@polkadot/api-base/types/events' { /** * Some funds have been allocated. **/ - Awarded: AugmentedEvent; + Awarded: AugmentedEvent; /** * Some of our funds have been burnt. **/ - Burnt: AugmentedEvent; + Burnt: AugmentedEvent; /** * Some funds have been deposited. **/ - Deposit: AugmentedEvent; + Deposit: AugmentedEvent; /** * New proposal. **/ - Proposed: AugmentedEvent; + Proposed: AugmentedEvent; /** * A proposal was rejected; funds were slashed. **/ - Rejected: AugmentedEvent; + Rejected: AugmentedEvent; /** * Spending has finished; this is the amount that rolls over until next spend. **/ - Rollover: AugmentedEvent; + Rollover: AugmentedEvent; /** * We have ended a spend period and will now allocate funds. **/ - Spending: AugmentedEvent; + Spending: AugmentedEvent; /** * Generic event **/ @@ -629,15 +637,15 @@ declare module '@polkadot/api-base/types/events' { /** * Claimed vesting. **/ - Claimed: AugmentedEvent; + Claimed: AugmentedEvent; /** * Added new vesting schedule. **/ - VestingScheduleAdded: AugmentedEvent; + VestingScheduleAdded: AugmentedEvent; /** * Updated vesting schedules. **/ - VestingSchedulesUpdated: AugmentedEvent; + VestingSchedulesUpdated: AugmentedEvent; /** * Generic event **/ diff --git a/tests/src/interfaces/augment-api-query.ts b/tests/src/interfaces/augment-api-query.ts index 6ed2a40ec5..89ad50061d 100644 --- a/tests/src/interfaces/augment-api-query.ts +++ b/tests/src/interfaces/augment-api-query.ts @@ -221,6 +221,13 @@ declare module '@polkadot/api-base/types/storage' { **/ [key: string]: QueryableStorageEntry; }; + maintenance: { + enabled: AugmentedQuery Observable, []> & QueryableStorageEntry; + /** + * Generic query + **/ + [key: string]: QueryableStorageEntry; + }; nonfungible: { accountBalance: AugmentedQuery Observable, [u32, PalletEvmAccountBasicCrossAccountIdRepr]> & QueryableStorageEntry; allowance: AugmentedQuery Observable>, [u32, u32]> & QueryableStorageEntry; diff --git a/tests/src/interfaces/augment-api-runtime.ts b/tests/src/interfaces/augment-api-runtime.ts new file mode 100644 index 0000000000..7eb79bd3b4 --- /dev/null +++ b/tests/src/interfaces/augment-api-runtime.ts @@ -0,0 +1,248 @@ +// Auto-generated via `yarn polkadot-types-from-chain`, do not edit +/* eslint-disable */ + +// import type lookup before we augment - in some environments +// this is required to allow for ambient/previous definitions +import '@polkadot/api-base/types/calls'; + +import type { ApiTypes, AugmentedCall, DecoratedCallBase } from '@polkadot/api-base/types'; +import type { Bytes, Null, Option, Result, U256, Vec, bool, u256, u32, u64 } from '@polkadot/types-codec'; +import type { AnyNumber, ITuple } from '@polkadot/types-codec/types'; +import type { CheckInherentsResult, InherentData } from '@polkadot/types/interfaces/blockbuilder'; +import type { BlockHash } from '@polkadot/types/interfaces/chain'; +import type { AuthorityId } from '@polkadot/types/interfaces/consensus'; +import type { CollationInfo } from '@polkadot/types/interfaces/cumulus'; +import type { BlockV2, EthReceiptV3, EthTransactionStatus, TransactionV2 } from '@polkadot/types/interfaces/eth'; +import type { EvmAccount, EvmCallInfo, EvmCreateInfo } from '@polkadot/types/interfaces/evm'; +import type { Extrinsic } from '@polkadot/types/interfaces/extrinsics'; +import type { OpaqueMetadata } from '@polkadot/types/interfaces/metadata'; +import type { FeeDetails, RuntimeDispatchInfo } from '@polkadot/types/interfaces/payment'; +import type { AccountId, Block, H160, H256, Header, Index, KeyTypeId, Permill, SlotDuration } from '@polkadot/types/interfaces/runtime'; +import type { RuntimeVersion } from '@polkadot/types/interfaces/state'; +import type { ApplyExtrinsicResult, DispatchError } from '@polkadot/types/interfaces/system'; +import type { TransactionSource, TransactionValidity } from '@polkadot/types/interfaces/txqueue'; +import type { IExtrinsic, Observable } from '@polkadot/types/types'; + +export type __AugmentedCall = AugmentedCall; +export type __DecoratedCallBase = DecoratedCallBase; + +declare module '@polkadot/api-base/types/calls' { + interface AugmentedCalls { + /** 0xbc9d89904f5b923f/1 */ + accountNonceApi: { + /** + * The API to query account nonce (aka transaction index) + **/ + accountNonce: AugmentedCall Observable>; + /** + * Generic call + **/ + [key: string]: DecoratedCallBase; + }; + /** 0xdd718d5cc53262d4/1 */ + auraApi: { + /** + * Return the current set of authorities. + **/ + authorities: AugmentedCall Observable>>; + /** + * Returns the slot duration for Aura. + **/ + slotDuration: AugmentedCall Observable>; + /** + * Generic call + **/ + [key: string]: DecoratedCallBase; + }; + /** 0x40fe3ad401f8959a/6 */ + blockBuilder: { + /** + * Apply the given extrinsic. + **/ + applyExtrinsic: AugmentedCall Observable>; + /** + * Check that the inherents are valid. + **/ + checkInherents: AugmentedCall Observable>; + /** + * Finish the current block. + **/ + finalizeBlock: AugmentedCall Observable
>; + /** + * Generate inherent extrinsics. + **/ + inherentExtrinsics: AugmentedCall Observable>>; + /** + * Generic call + **/ + [key: string]: DecoratedCallBase; + }; + /** 0xea93e3f16f3d6962/2 */ + collectCollationInfo: { + /** + * Collect information about a collation. + **/ + collectCollationInfo: AugmentedCall Observable>; + /** + * Generic call + **/ + [key: string]: DecoratedCallBase; + }; + /** 0xe65b00e46cedd0aa/2 */ + convertTransactionRuntimeApi: { + /** + * Converts an Ethereum-style transaction to Extrinsic + **/ + convertTransaction: AugmentedCall Observable>; + /** + * Generic call + **/ + [key: string]: DecoratedCallBase; + }; + /** 0xdf6acb689907609b/4 */ + core: { + /** + * Execute the given block. + **/ + executeBlock: AugmentedCall Observable>; + /** + * Initialize a block with the given header. + **/ + initializeBlock: AugmentedCall Observable>; + /** + * Returns the version of the runtime. + **/ + version: AugmentedCall Observable>; + /** + * Generic call + **/ + [key: string]: DecoratedCallBase; + }; + /** 0x582211f65bb14b89/4 */ + ethereumRuntimeRPCApi: { + /** + * Returns pallet_evm::Accounts by address. + **/ + accountBasic: AugmentedCall Observable>; + /** + * For a given account address, returns pallet_evm::AccountCodes. + **/ + accountCodeAt: AugmentedCall Observable>; + /** + * Returns the converted FindAuthor::find_author authority id. + **/ + author: AugmentedCall Observable>; + /** + * Returns a frame_ethereum::call response. If `estimate` is true, + **/ + call: AugmentedCall | null | Uint8Array | U256 | AnyNumber, maxPriorityFeePerGas: Option | null | Uint8Array | U256 | AnyNumber, nonce: Option | null | Uint8Array | U256 | AnyNumber, estimate: bool | boolean | Uint8Array, accessList: Option]>>> | null | Uint8Array | Vec]>> | ([H160 | string | Uint8Array, Vec | (H256 | string | Uint8Array)[]])[]) => Observable>>; + /** + * Returns runtime defined pallet_evm::ChainId. + **/ + chainId: AugmentedCall Observable>; + /** + * Returns a frame_ethereum::call response. If `estimate` is true, + **/ + create: AugmentedCall | null | Uint8Array | U256 | AnyNumber, maxPriorityFeePerGas: Option | null | Uint8Array | U256 | AnyNumber, nonce: Option | null | Uint8Array | U256 | AnyNumber, estimate: bool | boolean | Uint8Array, accessList: Option]>>> | null | Uint8Array | Vec]>> | ([H160 | string | Uint8Array, Vec | (H256 | string | Uint8Array)[]])[]) => Observable>>; + /** + * Return all the current data for a block in a single runtime call. + **/ + currentAll: AugmentedCall Observable, Option>, Option>]>>>; + /** + * Return the current block. + **/ + currentBlock: AugmentedCall Observable>; + /** + * Return the current receipt. + **/ + currentReceipts: AugmentedCall Observable>>>; + /** + * Return the current transaction status. + **/ + currentTransactionStatuses: AugmentedCall Observable>>>; + /** + * Return the elasticity multiplier. + **/ + elasticity: AugmentedCall Observable>>; + /** + * Receives a `Vec` and filters all the ethereum transactions. + **/ + extrinsicFilter: AugmentedCall | (Extrinsic | IExtrinsic | string | Uint8Array)[]) => Observable>>; + /** + * Returns FixedGasPrice::min_gas_price + **/ + gasPrice: AugmentedCall Observable>; + /** + * For a given account address and index, returns pallet_evm::AccountStorages. + **/ + storageAt: AugmentedCall Observable>; + /** + * Generic call + **/ + [key: string]: DecoratedCallBase; + }; + /** 0x37e397fc7c91f5e4/1 */ + metadata: { + /** + * Returns the metadata of a runtime + **/ + metadata: AugmentedCall Observable>; + /** + * Generic call + **/ + [key: string]: DecoratedCallBase; + }; + /** 0xf78b278be53f454c/2 */ + offchainWorkerApi: { + /** + * Starts the off-chain task for given block header. + **/ + offchainWorker: AugmentedCall Observable>; + /** + * Generic call + **/ + [key: string]: DecoratedCallBase; + }; + /** 0xab3c0572291feb8b/1 */ + sessionKeys: { + /** + * Decode the given public session keys. + **/ + decodeSessionKeys: AugmentedCall Observable>>>>; + /** + * Generate a set of session keys with optionally using the given seed. + **/ + generateSessionKeys: AugmentedCall | null | Uint8Array | Bytes | string) => Observable>; + /** + * Generic call + **/ + [key: string]: DecoratedCallBase; + }; + /** 0xd2bc9897eed08f15/3 */ + taggedTransactionQueue: { + /** + * Validate the transaction. + **/ + validateTransaction: AugmentedCall Observable>; + /** + * Generic call + **/ + [key: string]: DecoratedCallBase; + }; + /** 0x37c8bb1350a9a2a8/1 */ + transactionPaymentApi: { + /** + * The transaction fee details + **/ + queryFeeDetails: AugmentedCall Observable>; + /** + * The transaction info + **/ + queryInfo: AugmentedCall Observable>; + /** + * Generic call + **/ + [key: string]: DecoratedCallBase; + }; + } // AugmentedCalls +} // declare module diff --git a/tests/src/interfaces/augment-api-tx.ts b/tests/src/interfaces/augment-api-tx.ts index 42a78fd5a1..3bd2143e52 100644 --- a/tests/src/interfaces/augment-api-tx.ts +++ b/tests/src/interfaces/augment-api-tx.ts @@ -193,6 +193,14 @@ declare module '@polkadot/api-base/types/submittable' { **/ [key: string]: SubmittableExtrinsicFunction; }; + maintenance: { + disable: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + enable: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + /** + * Generic tx + **/ + [key: string]: SubmittableExtrinsicFunction; + }; parachainSystem: { authorizeUpgrade: AugmentedSubmittable<(codeHash: H256 | string | Uint8Array) => SubmittableExtrinsic, [H256]>; enactAuthorizedUpgrade: AugmentedSubmittable<(code: Bytes | string | Uint8Array) => SubmittableExtrinsic, [Bytes]>; diff --git a/tests/src/interfaces/augment-types.ts b/tests/src/interfaces/augment-types.ts index e0d8942652..3a4a2f6b0f 100644 --- a/tests/src/interfaces/augment-types.ts +++ b/tests/src/interfaces/augment-types.ts @@ -1,7 +1,7 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportScheduleLookupError, FrameSupportScheduleMaybeHashed, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletUniqueSchedulerCall, PalletUniqueSchedulerError, PalletUniqueSchedulerEvent, PalletUniqueSchedulerScheduledV3, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from './default'; +import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportScheduleLookupError, FrameSupportScheduleMaybeHashed, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeCheckMaintenance, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletMaintenanceCall, PalletMaintenanceError, PalletMaintenanceEvent, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletUniqueSchedulerCall, PalletUniqueSchedulerError, PalletUniqueSchedulerEvent, PalletUniqueSchedulerScheduledV3, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from './default'; import type { Data, StorageKey } from '@polkadot/types'; import type { BitVec, Bool, Bytes, I128, I16, I256, I32, I64, I8, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, i128, i16, i256, i32, i64, i8, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec'; import type { AssetApproval, AssetApprovalKey, AssetBalance, AssetDestroyWitness, AssetDetails, AssetMetadata, TAssetBalance, TAssetDepositBalance } from '@polkadot/types/interfaces/assets'; @@ -719,6 +719,7 @@ declare module '@polkadot/types/types/registry' { OffchainAccuracyCompact: OffchainAccuracyCompact; OffenceDetails: OffenceDetails; Offender: Offender; + OpalRuntimeCheckMaintenance: OpalRuntimeCheckMaintenance; OpalRuntimeOriginCaller: OpalRuntimeOriginCaller; OpalRuntimeRuntime: OpalRuntimeRuntime; OpaqueCall: OpaqueCall; @@ -786,6 +787,9 @@ declare module '@polkadot/types/types/registry' { PalletFungibleError: PalletFungibleError; PalletId: PalletId; PalletInflationCall: PalletInflationCall; + PalletMaintenanceCall: PalletMaintenanceCall; + PalletMaintenanceError: PalletMaintenanceError; + PalletMaintenanceEvent: PalletMaintenanceEvent; PalletMetadataLatest: PalletMetadataLatest; PalletMetadataV14: PalletMetadataV14; PalletNonfungibleError: PalletNonfungibleError; diff --git a/tests/src/interfaces/default/types.ts b/tests/src/interfaces/default/types.ts index c0788206cc..569c605e01 100644 --- a/tests/src/interfaces/default/types.ts +++ b/tests/src/interfaces/default/types.ts @@ -706,6 +706,9 @@ export interface FrameSystemPhase extends Enum { readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization'; } +/** @name OpalRuntimeCheckMaintenance */ +export interface OpalRuntimeCheckMaintenance extends Null {} + /** @name OpalRuntimeOriginCaller */ export interface OpalRuntimeOriginCaller extends Enum { readonly isVoid: boolean; @@ -1177,6 +1180,23 @@ export interface PalletInflationCall extends Enum { readonly type: 'StartInflation'; } +/** @name PalletMaintenanceCall */ +export interface PalletMaintenanceCall extends Enum { + readonly isEnable: boolean; + readonly isDisable: boolean; + readonly type: 'Enable' | 'Disable'; +} + +/** @name PalletMaintenanceError */ +export interface PalletMaintenanceError extends Null {} + +/** @name PalletMaintenanceEvent */ +export interface PalletMaintenanceEvent extends Enum { + readonly isMaintenanceEnabled: boolean; + readonly isMaintenanceDisabled: boolean; + readonly type: 'MaintenanceEnabled' | 'MaintenanceDisabled'; +} + /** @name PalletNonfungibleError */ export interface PalletNonfungibleError extends Enum { readonly isNotNonfungibleDataUsedToMintFungibleCollectionToken: boolean; diff --git a/tests/src/interfaces/lookup.ts b/tests/src/interfaces/lookup.ts index 52a0c267e4..79f5365e5c 100644 --- a/tests/src/interfaces/lookup.ts +++ b/tests/src/interfaces/lookup.ts @@ -1934,7 +1934,13 @@ export default { } }, /** - * Lookup258: pallet_sudo::pallet::Event + * Lookup258: pallet_maintenance::pallet::Call + **/ + PalletMaintenanceCall: { + _enum: ['enable', 'disable'] + }, + /** + * Lookup259: pallet_sudo::pallet::Event **/ PalletSudoEvent: { _enum: { @@ -1950,7 +1956,7 @@ export default { } }, /** - * Lookup260: sp_runtime::DispatchError + * Lookup261: sp_runtime::DispatchError **/ SpRuntimeDispatchError: { _enum: { @@ -1967,38 +1973,38 @@ export default { } }, /** - * Lookup261: sp_runtime::ModuleError + * Lookup262: sp_runtime::ModuleError **/ SpRuntimeModuleError: { index: 'u8', error: '[u8;4]' }, /** - * Lookup262: sp_runtime::TokenError + * Lookup263: sp_runtime::TokenError **/ SpRuntimeTokenError: { _enum: ['NoFunds', 'WouldDie', 'BelowMinimum', 'CannotCreate', 'UnknownAsset', 'Frozen', 'Unsupported'] }, /** - * Lookup263: sp_runtime::ArithmeticError + * Lookup264: sp_runtime::ArithmeticError **/ SpRuntimeArithmeticError: { _enum: ['Underflow', 'Overflow', 'DivisionByZero'] }, /** - * Lookup264: sp_runtime::TransactionalError + * Lookup265: sp_runtime::TransactionalError **/ SpRuntimeTransactionalError: { _enum: ['LimitReached', 'NoLayer'] }, /** - * Lookup265: pallet_sudo::pallet::Error + * Lookup266: pallet_sudo::pallet::Error **/ PalletSudoError: { _enum: ['RequireSudo'] }, /** - * Lookup266: frame_system::AccountInfo> + * Lookup267: frame_system::AccountInfo> **/ FrameSystemAccountInfo: { nonce: 'u32', @@ -2008,7 +2014,7 @@ export default { data: 'PalletBalancesAccountData' }, /** - * Lookup267: frame_support::weights::PerDispatchClass + * Lookup268: frame_support::weights::PerDispatchClass **/ FrameSupportWeightsPerDispatchClassU64: { normal: 'u64', @@ -2016,13 +2022,13 @@ export default { mandatory: 'u64' }, /** - * Lookup268: sp_runtime::generic::digest::Digest + * Lookup269: sp_runtime::generic::digest::Digest **/ SpRuntimeDigest: { logs: 'Vec' }, /** - * Lookup270: sp_runtime::generic::digest::DigestItem + * Lookup271: sp_runtime::generic::digest::DigestItem **/ SpRuntimeDigestDigestItem: { _enum: { @@ -2038,7 +2044,7 @@ export default { } }, /** - * Lookup272: frame_system::EventRecord + * Lookup273: frame_system::EventRecord **/ FrameSystemEventRecord: { phase: 'FrameSystemPhase', @@ -2046,7 +2052,7 @@ export default { topics: 'Vec' }, /** - * Lookup274: frame_system::pallet::Event + * Lookup275: frame_system::pallet::Event **/ FrameSystemEvent: { _enum: { @@ -2074,7 +2080,7 @@ export default { } }, /** - * Lookup275: frame_support::weights::DispatchInfo + * Lookup276: frame_support::weights::DispatchInfo **/ FrameSupportWeightsDispatchInfo: { weight: 'u64', @@ -2082,19 +2088,19 @@ export default { paysFee: 'FrameSupportWeightsPays' }, /** - * Lookup276: frame_support::weights::DispatchClass + * Lookup277: frame_support::weights::DispatchClass **/ FrameSupportWeightsDispatchClass: { _enum: ['Normal', 'Operational', 'Mandatory'] }, /** - * Lookup277: frame_support::weights::Pays + * Lookup278: frame_support::weights::Pays **/ FrameSupportWeightsPays: { _enum: ['Yes', 'No'] }, /** - * Lookup278: orml_vesting::module::Event + * Lookup279: orml_vesting::module::Event **/ OrmlVestingModuleEvent: { _enum: { @@ -2113,7 +2119,7 @@ export default { } }, /** - * Lookup279: cumulus_pallet_xcmp_queue::pallet::Event + * Lookup280: cumulus_pallet_xcmp_queue::pallet::Event **/ CumulusPalletXcmpQueueEvent: { _enum: { @@ -2128,7 +2134,7 @@ export default { } }, /** - * Lookup280: pallet_xcm::pallet::Event + * Lookup281: pallet_xcm::pallet::Event **/ PalletXcmEvent: { _enum: { @@ -2151,7 +2157,7 @@ export default { } }, /** - * Lookup281: xcm::v2::traits::Outcome + * Lookup282: xcm::v2::traits::Outcome **/ XcmV2TraitsOutcome: { _enum: { @@ -2161,7 +2167,7 @@ export default { } }, /** - * Lookup283: cumulus_pallet_xcm::pallet::Event + * Lookup284: cumulus_pallet_xcm::pallet::Event **/ CumulusPalletXcmEvent: { _enum: { @@ -2171,7 +2177,7 @@ export default { } }, /** - * Lookup284: cumulus_pallet_dmp_queue::pallet::Event + * Lookup285: cumulus_pallet_dmp_queue::pallet::Event **/ CumulusPalletDmpQueueEvent: { _enum: { @@ -2202,7 +2208,7 @@ export default { } }, /** - * Lookup285: pallet_unique::RawEvent> + * Lookup286: pallet_unique::RawEvent> **/ PalletUniqueRawEvent: { _enum: { @@ -2219,7 +2225,7 @@ export default { } }, /** - * Lookup286: pallet_unique_scheduler::pallet::Event + * Lookup287: pallet_unique_scheduler::pallet::Event **/ PalletUniqueSchedulerEvent: { _enum: { @@ -2244,13 +2250,13 @@ export default { } }, /** - * Lookup288: frame_support::traits::schedule::LookupError + * Lookup289: frame_support::traits::schedule::LookupError **/ FrameSupportScheduleLookupError: { _enum: ['Unknown', 'BadFormat'] }, /** - * Lookup289: pallet_common::pallet::Event + * Lookup290: pallet_common::pallet::Event **/ PalletCommonEvent: { _enum: { @@ -2268,7 +2274,7 @@ export default { } }, /** - * Lookup290: pallet_structure::pallet::Event + * Lookup291: pallet_structure::pallet::Event **/ PalletStructureEvent: { _enum: { @@ -2276,7 +2282,7 @@ export default { } }, /** - * Lookup291: pallet_rmrk_core::pallet::Event + * Lookup292: pallet_rmrk_core::pallet::Event **/ PalletRmrkCoreEvent: { _enum: { @@ -2353,7 +2359,7 @@ export default { } }, /** - * Lookup292: pallet_rmrk_equip::pallet::Event + * Lookup293: pallet_rmrk_equip::pallet::Event **/ PalletRmrkEquipEvent: { _enum: { @@ -2368,7 +2374,7 @@ export default { } }, /** - * Lookup293: pallet_evm::pallet::Event + * Lookup294: pallet_evm::pallet::Event **/ PalletEvmEvent: { _enum: { @@ -2382,7 +2388,7 @@ export default { } }, /** - * Lookup294: ethereum::log::Log + * Lookup295: ethereum::log::Log **/ EthereumLog: { address: 'H160', @@ -2390,7 +2396,7 @@ export default { data: 'Bytes' }, /** - * Lookup295: pallet_ethereum::pallet::Event + * Lookup296: pallet_ethereum::pallet::Event **/ PalletEthereumEvent: { _enum: { @@ -2398,7 +2404,7 @@ export default { } }, /** - * Lookup296: evm_core::error::ExitReason + * Lookup297: evm_core::error::ExitReason **/ EvmCoreErrorExitReason: { _enum: { @@ -2409,13 +2415,13 @@ export default { } }, /** - * Lookup297: evm_core::error::ExitSucceed + * Lookup298: evm_core::error::ExitSucceed **/ EvmCoreErrorExitSucceed: { _enum: ['Stopped', 'Returned', 'Suicided'] }, /** - * Lookup298: evm_core::error::ExitError + * Lookup299: evm_core::error::ExitError **/ EvmCoreErrorExitError: { _enum: { @@ -2437,13 +2443,13 @@ export default { } }, /** - * Lookup301: evm_core::error::ExitRevert + * Lookup302: evm_core::error::ExitRevert **/ EvmCoreErrorExitRevert: { _enum: ['Reverted'] }, /** - * Lookup302: evm_core::error::ExitFatal + * Lookup303: evm_core::error::ExitFatal **/ EvmCoreErrorExitFatal: { _enum: { @@ -2454,7 +2460,13 @@ export default { } }, /** - * Lookup303: frame_system::Phase + * Lookup304: pallet_maintenance::pallet::Event + **/ + PalletMaintenanceEvent: { + _enum: ['MaintenanceEnabled', 'MaintenanceDisabled'] + }, + /** + * Lookup305: frame_system::Phase **/ FrameSystemPhase: { _enum: { @@ -2464,14 +2476,14 @@ export default { } }, /** - * Lookup305: frame_system::LastRuntimeUpgradeInfo + * Lookup307: frame_system::LastRuntimeUpgradeInfo **/ FrameSystemLastRuntimeUpgradeInfo: { specVersion: 'Compact', specName: 'Text' }, /** - * Lookup306: frame_system::limits::BlockWeights + * Lookup308: frame_system::limits::BlockWeights **/ FrameSystemLimitsBlockWeights: { baseBlock: 'u64', @@ -2479,7 +2491,7 @@ export default { perClass: 'FrameSupportWeightsPerDispatchClassWeightsPerClass' }, /** - * Lookup307: frame_support::weights::PerDispatchClass + * Lookup309: frame_support::weights::PerDispatchClass **/ FrameSupportWeightsPerDispatchClassWeightsPerClass: { normal: 'FrameSystemLimitsWeightsPerClass', @@ -2487,7 +2499,7 @@ export default { mandatory: 'FrameSystemLimitsWeightsPerClass' }, /** - * Lookup308: frame_system::limits::WeightsPerClass + * Lookup310: frame_system::limits::WeightsPerClass **/ FrameSystemLimitsWeightsPerClass: { baseExtrinsic: 'u64', @@ -2496,13 +2508,13 @@ export default { reserved: 'Option' }, /** - * Lookup310: frame_system::limits::BlockLength + * Lookup312: frame_system::limits::BlockLength **/ FrameSystemLimitsBlockLength: { max: 'FrameSupportWeightsPerDispatchClassU32' }, /** - * Lookup311: frame_support::weights::PerDispatchClass + * Lookup313: frame_support::weights::PerDispatchClass **/ FrameSupportWeightsPerDispatchClassU32: { normal: 'u32', @@ -2510,14 +2522,14 @@ export default { mandatory: 'u32' }, /** - * Lookup312: frame_support::weights::RuntimeDbWeight + * Lookup314: frame_support::weights::RuntimeDbWeight **/ FrameSupportWeightsRuntimeDbWeight: { read: 'u64', write: 'u64' }, /** - * Lookup313: sp_version::RuntimeVersion + * Lookup315: sp_version::RuntimeVersion **/ SpVersionRuntimeVersion: { specName: 'Text', @@ -2530,19 +2542,19 @@ export default { stateVersion: 'u8' }, /** - * Lookup317: frame_system::pallet::Error + * Lookup319: frame_system::pallet::Error **/ FrameSystemError: { _enum: ['InvalidSpecName', 'SpecVersionNeedsToIncrease', 'FailedToExtractRuntimeVersion', 'NonDefaultComposite', 'NonZeroRefCount', 'CallFiltered'] }, /** - * Lookup319: orml_vesting::module::Error + * Lookup321: orml_vesting::module::Error **/ OrmlVestingModuleError: { _enum: ['ZeroVestingPeriod', 'ZeroVestingPeriodCount', 'InsufficientBalanceToLock', 'TooManyVestingSchedules', 'AmountLow', 'MaxVestingSchedulesExceeded'] }, /** - * Lookup321: cumulus_pallet_xcmp_queue::InboundChannelDetails + * Lookup323: cumulus_pallet_xcmp_queue::InboundChannelDetails **/ CumulusPalletXcmpQueueInboundChannelDetails: { sender: 'u32', @@ -2550,19 +2562,19 @@ export default { messageMetadata: 'Vec<(u32,PolkadotParachainPrimitivesXcmpMessageFormat)>' }, /** - * Lookup322: cumulus_pallet_xcmp_queue::InboundState + * Lookup324: cumulus_pallet_xcmp_queue::InboundState **/ CumulusPalletXcmpQueueInboundState: { _enum: ['Ok', 'Suspended'] }, /** - * Lookup325: polkadot_parachain::primitives::XcmpMessageFormat + * Lookup327: polkadot_parachain::primitives::XcmpMessageFormat **/ PolkadotParachainPrimitivesXcmpMessageFormat: { _enum: ['ConcatenatedVersionedXcm', 'ConcatenatedEncodedBlob', 'Signals'] }, /** - * Lookup328: cumulus_pallet_xcmp_queue::OutboundChannelDetails + * Lookup330: cumulus_pallet_xcmp_queue::OutboundChannelDetails **/ CumulusPalletXcmpQueueOutboundChannelDetails: { recipient: 'u32', @@ -2572,13 +2584,13 @@ export default { lastIndex: 'u16' }, /** - * Lookup329: cumulus_pallet_xcmp_queue::OutboundState + * Lookup331: cumulus_pallet_xcmp_queue::OutboundState **/ CumulusPalletXcmpQueueOutboundState: { _enum: ['Ok', 'Suspended'] }, /** - * Lookup331: cumulus_pallet_xcmp_queue::QueueConfigData + * Lookup333: cumulus_pallet_xcmp_queue::QueueConfigData **/ CumulusPalletXcmpQueueQueueConfigData: { suspendThreshold: 'u32', @@ -2589,29 +2601,29 @@ export default { xcmpMaxIndividualWeight: 'u64' }, /** - * Lookup333: cumulus_pallet_xcmp_queue::pallet::Error + * Lookup335: cumulus_pallet_xcmp_queue::pallet::Error **/ CumulusPalletXcmpQueueError: { _enum: ['FailedToSend', 'BadXcmOrigin', 'BadXcm', 'BadOverweightIndex', 'WeightOverLimit'] }, /** - * Lookup334: pallet_xcm::pallet::Error + * Lookup336: pallet_xcm::pallet::Error **/ PalletXcmError: { _enum: ['Unreachable', 'SendFailure', 'Filtered', 'UnweighableMessage', 'DestinationNotInvertible', 'Empty', 'CannotReanchor', 'TooManyAssets', 'InvalidOrigin', 'BadVersion', 'BadLocation', 'NoSubscription', 'AlreadySubscribed'] }, /** - * Lookup335: cumulus_pallet_xcm::pallet::Error + * Lookup337: cumulus_pallet_xcm::pallet::Error **/ CumulusPalletXcmError: 'Null', /** - * Lookup336: cumulus_pallet_dmp_queue::ConfigData + * Lookup338: cumulus_pallet_dmp_queue::ConfigData **/ CumulusPalletDmpQueueConfigData: { maxIndividual: 'u64' }, /** - * Lookup337: cumulus_pallet_dmp_queue::PageIndexData + * Lookup339: cumulus_pallet_dmp_queue::PageIndexData **/ CumulusPalletDmpQueuePageIndexData: { beginUsed: 'u32', @@ -2619,19 +2631,19 @@ export default { overweightCount: 'u64' }, /** - * Lookup340: cumulus_pallet_dmp_queue::pallet::Error + * Lookup342: cumulus_pallet_dmp_queue::pallet::Error **/ CumulusPalletDmpQueueError: { _enum: ['Unknown', 'OverLimit'] }, /** - * Lookup344: pallet_unique::Error + * Lookup346: pallet_unique::Error **/ PalletUniqueError: { _enum: ['CollectionDecimalPointLimitExceeded', 'ConfirmUnsetSponsorFail', 'EmptyArgument', 'RepartitionCalledOnNonRefungibleCollection'] }, /** - * Lookup347: pallet_unique_scheduler::ScheduledV3, BlockNumber, opal_runtime::OriginCaller, sp_core::crypto::AccountId32> + * Lookup349: pallet_unique_scheduler::ScheduledV3, BlockNumber, opal_runtime::OriginCaller, sp_core::crypto::AccountId32> **/ PalletUniqueSchedulerScheduledV3: { maybeId: 'Option<[u8;16]>', @@ -2641,7 +2653,7 @@ export default { origin: 'OpalRuntimeOriginCaller' }, /** - * Lookup348: opal_runtime::OriginCaller + * Lookup350: opal_runtime::OriginCaller **/ OpalRuntimeOriginCaller: { _enum: { @@ -2750,7 +2762,7 @@ export default { } }, /** - * Lookup349: frame_support::dispatch::RawOrigin + * Lookup351: frame_support::dispatch::RawOrigin **/ FrameSupportDispatchRawOrigin: { _enum: { @@ -2760,7 +2772,7 @@ export default { } }, /** - * Lookup350: pallet_xcm::pallet::Origin + * Lookup352: pallet_xcm::pallet::Origin **/ PalletXcmOrigin: { _enum: { @@ -2769,7 +2781,7 @@ export default { } }, /** - * Lookup351: cumulus_pallet_xcm::pallet::Origin + * Lookup353: cumulus_pallet_xcm::pallet::Origin **/ CumulusPalletXcmOrigin: { _enum: { @@ -2778,7 +2790,7 @@ export default { } }, /** - * Lookup352: pallet_ethereum::RawOrigin + * Lookup354: pallet_ethereum::RawOrigin **/ PalletEthereumRawOrigin: { _enum: { @@ -2786,17 +2798,17 @@ export default { } }, /** - * Lookup353: sp_core::Void + * Lookup355: sp_core::Void **/ SpCoreVoid: 'Null', /** - * Lookup354: pallet_unique_scheduler::pallet::Error + * Lookup356: pallet_unique_scheduler::pallet::Error **/ PalletUniqueSchedulerError: { _enum: ['FailedToSchedule', 'NotFound', 'TargetBlockNumberInPast', 'RescheduleNoChange'] }, /** - * Lookup355: up_data_structs::Collection + * Lookup357: up_data_structs::Collection **/ UpDataStructsCollection: { owner: 'AccountId32', @@ -2810,7 +2822,7 @@ export default { externalCollection: 'bool' }, /** - * Lookup356: up_data_structs::SponsorshipState + * Lookup358: up_data_structs::SponsorshipState **/ UpDataStructsSponsorshipState: { _enum: { @@ -2820,7 +2832,7 @@ export default { } }, /** - * Lookup357: up_data_structs::Properties + * Lookup359: up_data_structs::Properties **/ UpDataStructsProperties: { map: 'UpDataStructsPropertiesMapBoundedVec', @@ -2828,15 +2840,15 @@ export default { spaceLimit: 'u32' }, /** - * Lookup358: up_data_structs::PropertiesMap> + * Lookup360: up_data_structs::PropertiesMap> **/ UpDataStructsPropertiesMapBoundedVec: 'BTreeMap', /** - * Lookup363: up_data_structs::PropertiesMap + * Lookup365: up_data_structs::PropertiesMap **/ UpDataStructsPropertiesMapPropertyPermission: 'BTreeMap', /** - * Lookup370: up_data_structs::CollectionStats + * Lookup372: up_data_structs::CollectionStats **/ UpDataStructsCollectionStats: { created: 'u32', @@ -2844,25 +2856,25 @@ export default { alive: 'u32' }, /** - * Lookup371: up_data_structs::TokenChild + * Lookup373: up_data_structs::TokenChild **/ UpDataStructsTokenChild: { token: 'u32', collection: 'u32' }, /** - * Lookup372: PhantomType::up_data_structs + * Lookup374: PhantomType::up_data_structs **/ PhantomTypeUpDataStructs: '[(UpDataStructsTokenData,UpDataStructsRpcCollection,RmrkTraitsCollectionCollectionInfo,RmrkTraitsNftNftInfo,RmrkTraitsResourceResourceInfo,RmrkTraitsPropertyPropertyInfo,RmrkTraitsBaseBaseInfo,RmrkTraitsPartPartType,RmrkTraitsTheme,RmrkTraitsNftNftChild);0]', /** - * Lookup374: up_data_structs::TokenData> + * Lookup376: up_data_structs::TokenData> **/ UpDataStructsTokenData: { properties: 'Vec', owner: 'Option' }, /** - * Lookup376: up_data_structs::RpcCollection + * Lookup378: up_data_structs::RpcCollection **/ UpDataStructsRpcCollection: { owner: 'AccountId32', @@ -2878,7 +2890,7 @@ export default { readOnly: 'bool' }, /** - * Lookup377: rmrk_traits::collection::CollectionInfo, frame_support::storage::bounded_vec::BoundedVec, sp_core::crypto::AccountId32> + * Lookup379: rmrk_traits::collection::CollectionInfo, frame_support::storage::bounded_vec::BoundedVec, sp_core::crypto::AccountId32> **/ RmrkTraitsCollectionCollectionInfo: { issuer: 'AccountId32', @@ -2888,7 +2900,7 @@ export default { nftsCount: 'u32' }, /** - * Lookup378: rmrk_traits::nft::NftInfo> + * Lookup380: rmrk_traits::nft::NftInfo> **/ RmrkTraitsNftNftInfo: { owner: 'RmrkTraitsNftAccountIdOrCollectionNftTuple', @@ -2898,14 +2910,14 @@ export default { pending: 'bool' }, /** - * Lookup380: rmrk_traits::nft::RoyaltyInfo + * Lookup382: rmrk_traits::nft::RoyaltyInfo **/ RmrkTraitsNftRoyaltyInfo: { recipient: 'AccountId32', amount: 'Permill' }, /** - * Lookup381: rmrk_traits::resource::ResourceInfo, frame_support::storage::bounded_vec::BoundedVec> + * Lookup383: rmrk_traits::resource::ResourceInfo, frame_support::storage::bounded_vec::BoundedVec> **/ RmrkTraitsResourceResourceInfo: { id: 'u32', @@ -2914,14 +2926,14 @@ export default { pendingRemoval: 'bool' }, /** - * Lookup382: rmrk_traits::property::PropertyInfo, frame_support::storage::bounded_vec::BoundedVec> + * Lookup384: rmrk_traits::property::PropertyInfo, frame_support::storage::bounded_vec::BoundedVec> **/ RmrkTraitsPropertyPropertyInfo: { key: 'Bytes', value: 'Bytes' }, /** - * Lookup383: rmrk_traits::base::BaseInfo> + * Lookup385: rmrk_traits::base::BaseInfo> **/ RmrkTraitsBaseBaseInfo: { issuer: 'AccountId32', @@ -2929,80 +2941,80 @@ export default { symbol: 'Bytes' }, /** - * Lookup384: rmrk_traits::nft::NftChild + * Lookup386: rmrk_traits::nft::NftChild **/ RmrkTraitsNftNftChild: { collectionId: 'u32', nftId: 'u32' }, /** - * Lookup386: pallet_common::pallet::Error + * Lookup388: pallet_common::pallet::Error **/ PalletCommonError: { _enum: ['CollectionNotFound', 'MustBeTokenOwner', 'NoPermission', 'CantDestroyNotEmptyCollection', 'PublicMintingNotAllowed', 'AddressNotInAllowlist', 'CollectionNameLimitExceeded', 'CollectionDescriptionLimitExceeded', 'CollectionTokenPrefixLimitExceeded', 'TotalCollectionsLimitExceeded', 'CollectionAdminCountExceeded', 'CollectionLimitBoundsExceeded', 'OwnerPermissionsCantBeReverted', 'TransferNotAllowed', 'AccountTokenLimitExceeded', 'CollectionTokenLimitExceeded', 'MetadataFlagFrozen', 'TokenNotFound', 'TokenValueTooLow', 'ApprovedValueTooLow', 'CantApproveMoreThanOwned', 'AddressIsZero', 'UnsupportedOperation', 'NotSufficientFounds', 'UserIsNotAllowedToNest', 'SourceCollectionIsNotAllowedToNest', 'CollectionFieldSizeExceeded', 'NoSpaceForProperty', 'PropertyLimitReached', 'PropertyKeyIsTooLong', 'InvalidCharacterInPropertyKey', 'EmptyPropertyKey', 'CollectionIsExternal', 'CollectionIsInternal'] }, /** - * Lookup388: pallet_fungible::pallet::Error + * Lookup390: pallet_fungible::pallet::Error **/ PalletFungibleError: { _enum: ['NotFungibleDataUsedToMintFungibleCollectionToken', 'FungibleItemsHaveNoId', 'FungibleItemsDontHaveData', 'FungibleDisallowsNesting', 'SettingPropertiesNotAllowed'] }, /** - * Lookup389: pallet_refungible::ItemData + * Lookup391: pallet_refungible::ItemData **/ PalletRefungibleItemData: { constData: 'Bytes' }, /** - * Lookup393: pallet_refungible::pallet::Error + * Lookup395: pallet_refungible::pallet::Error **/ PalletRefungibleError: { _enum: ['NotRefungibleDataUsedToMintFungibleCollectionToken', 'WrongRefungiblePieces', 'RepartitionWhileNotOwningAllPieces', 'RefungibleDisallowsNesting', 'SettingPropertiesNotAllowed'] }, /** - * Lookup394: pallet_nonfungible::ItemData> + * Lookup396: pallet_nonfungible::ItemData> **/ PalletNonfungibleItemData: { owner: 'PalletEvmAccountBasicCrossAccountIdRepr' }, /** - * Lookup396: up_data_structs::PropertyScope + * Lookup398: up_data_structs::PropertyScope **/ UpDataStructsPropertyScope: { _enum: ['None', 'Rmrk'] }, /** - * Lookup398: pallet_nonfungible::pallet::Error + * Lookup400: pallet_nonfungible::pallet::Error **/ PalletNonfungibleError: { _enum: ['NotNonfungibleDataUsedToMintFungibleCollectionToken', 'NonfungibleItemsHaveNoAmount', 'CantBurnNftWithChildren'] }, /** - * Lookup399: pallet_structure::pallet::Error + * Lookup401: pallet_structure::pallet::Error **/ PalletStructureError: { _enum: ['OuroborosDetected', 'DepthLimit', 'BreadthLimit', 'TokenNotFound'] }, /** - * Lookup400: pallet_rmrk_core::pallet::Error + * Lookup402: pallet_rmrk_core::pallet::Error **/ PalletRmrkCoreError: { _enum: ['CorruptedCollectionType', 'NftTypeEncodeError', 'RmrkPropertyKeyIsTooLong', 'RmrkPropertyValueIsTooLong', 'RmrkPropertyIsNotFound', 'UnableToDecodeRmrkData', 'CollectionNotEmpty', 'NoAvailableCollectionId', 'NoAvailableNftId', 'CollectionUnknown', 'NoPermission', 'NonTransferable', 'CollectionFullOrLocked', 'ResourceDoesntExist', 'CannotSendToDescendentOrSelf', 'CannotAcceptNonOwnedNft', 'CannotRejectNonOwnedNft', 'CannotRejectNonPendingNft', 'ResourceNotPending', 'NoAvailableResourceId'] }, /** - * Lookup402: pallet_rmrk_equip::pallet::Error + * Lookup404: pallet_rmrk_equip::pallet::Error **/ PalletRmrkEquipError: { _enum: ['PermissionError', 'NoAvailableBaseId', 'NoAvailablePartId', 'BaseDoesntExist', 'NeedsDefaultThemeFirst', 'PartDoesntExist', 'NoEquippableOnFixedPart'] }, /** - * Lookup405: pallet_evm::pallet::Error + * Lookup407: pallet_evm::pallet::Error **/ PalletEvmError: { _enum: ['BalanceLow', 'FeeOverflow', 'PaymentOverflow', 'WithdrawFailed', 'GasPriceTooLow', 'InvalidNonce'] }, /** - * Lookup408: fp_rpc::TransactionStatus + * Lookup410: fp_rpc::TransactionStatus **/ FpRpcTransactionStatus: { transactionHash: 'H256', @@ -3014,11 +3026,11 @@ export default { logsBloom: 'EthbloomBloom' }, /** - * Lookup410: ethbloom::Bloom + * Lookup412: ethbloom::Bloom **/ EthbloomBloom: '[u8;256]', /** - * Lookup412: ethereum::receipt::ReceiptV3 + * Lookup414: ethereum::receipt::ReceiptV3 **/ EthereumReceiptReceiptV3: { _enum: { @@ -3028,7 +3040,7 @@ export default { } }, /** - * Lookup413: ethereum::receipt::EIP658ReceiptData + * Lookup415: ethereum::receipt::EIP658ReceiptData **/ EthereumReceiptEip658ReceiptData: { statusCode: 'u8', @@ -3037,7 +3049,7 @@ export default { logs: 'Vec' }, /** - * Lookup414: ethereum::block::Block + * Lookup416: ethereum::block::Block **/ EthereumBlock: { header: 'EthereumHeader', @@ -3045,7 +3057,7 @@ export default { ommers: 'Vec' }, /** - * Lookup415: ethereum::header::Header + * Lookup417: ethereum::header::Header **/ EthereumHeader: { parentHash: 'H256', @@ -3065,41 +3077,45 @@ export default { nonce: 'EthereumTypesHashH64' }, /** - * Lookup416: ethereum_types::hash::H64 + * Lookup418: ethereum_types::hash::H64 **/ EthereumTypesHashH64: '[u8;8]', /** - * Lookup421: pallet_ethereum::pallet::Error + * Lookup423: pallet_ethereum::pallet::Error **/ PalletEthereumError: { _enum: ['InvalidSignature', 'PreLogExists'] }, /** - * Lookup422: pallet_evm_coder_substrate::pallet::Error + * Lookup424: pallet_evm_coder_substrate::pallet::Error **/ PalletEvmCoderSubstrateError: { _enum: ['OutOfGas', 'OutOfFund'] }, /** - * Lookup423: pallet_evm_contract_helpers::SponsoringModeT + * Lookup425: pallet_evm_contract_helpers::SponsoringModeT **/ PalletEvmContractHelpersSponsoringModeT: { _enum: ['Disabled', 'Allowlisted', 'Generous'] }, /** - * Lookup425: pallet_evm_contract_helpers::pallet::Error + * Lookup427: pallet_evm_contract_helpers::pallet::Error **/ PalletEvmContractHelpersError: { _enum: ['NoPermission'] }, /** - * Lookup426: pallet_evm_migration::pallet::Error + * Lookup428: pallet_evm_migration::pallet::Error **/ PalletEvmMigrationError: { _enum: ['AccountNotEmpty', 'AccountIsNotMigrating'] }, /** - * Lookup428: sp_runtime::MultiSignature + * Lookup429: pallet_maintenance::pallet::Error + **/ + PalletMaintenanceError: 'Null', + /** + * Lookup431: sp_runtime::MultiSignature **/ SpRuntimeMultiSignature: { _enum: { @@ -3109,43 +3125,47 @@ export default { } }, /** - * Lookup429: sp_core::ed25519::Signature + * Lookup432: sp_core::ed25519::Signature **/ SpCoreEd25519Signature: '[u8;64]', /** - * Lookup431: sp_core::sr25519::Signature + * Lookup434: sp_core::sr25519::Signature **/ SpCoreSr25519Signature: '[u8;64]', /** - * Lookup432: sp_core::ecdsa::Signature + * Lookup435: sp_core::ecdsa::Signature **/ SpCoreEcdsaSignature: '[u8;65]', /** - * Lookup435: frame_system::extensions::check_spec_version::CheckSpecVersion + * Lookup438: frame_system::extensions::check_spec_version::CheckSpecVersion **/ FrameSystemExtensionsCheckSpecVersion: 'Null', /** - * Lookup436: frame_system::extensions::check_genesis::CheckGenesis + * Lookup439: frame_system::extensions::check_genesis::CheckGenesis **/ FrameSystemExtensionsCheckGenesis: 'Null', /** - * Lookup439: frame_system::extensions::check_nonce::CheckNonce + * Lookup442: frame_system::extensions::check_nonce::CheckNonce **/ FrameSystemExtensionsCheckNonce: 'Compact', /** - * Lookup440: frame_system::extensions::check_weight::CheckWeight + * Lookup443: frame_system::extensions::check_weight::CheckWeight **/ FrameSystemExtensionsCheckWeight: 'Null', /** - * Lookup441: pallet_template_transaction_payment::ChargeTransactionPayment + * Lookup444: opal_runtime::CheckMaintenance + **/ + OpalRuntimeCheckMaintenance: 'Null', + /** + * Lookup445: pallet_template_transaction_payment::ChargeTransactionPayment **/ PalletTemplateTransactionPaymentChargeTransactionPayment: 'Compact', /** - * Lookup442: opal_runtime::Runtime + * Lookup446: opal_runtime::Runtime **/ OpalRuntimeRuntime: 'Null', /** - * Lookup443: pallet_ethereum::FakeTransactionFinalizer + * Lookup447: pallet_ethereum::FakeTransactionFinalizer **/ PalletEthereumFakeTransactionFinalizer: 'Null' }; diff --git a/tests/src/interfaces/registry.ts b/tests/src/interfaces/registry.ts index 18e938ce8f..098e4a6486 100644 --- a/tests/src/interfaces/registry.ts +++ b/tests/src/interfaces/registry.ts @@ -1,7 +1,7 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportScheduleLookupError, FrameSupportScheduleMaybeHashed, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletUniqueSchedulerCall, PalletUniqueSchedulerError, PalletUniqueSchedulerEvent, PalletUniqueSchedulerScheduledV3, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; +import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportScheduleLookupError, FrameSupportScheduleMaybeHashed, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeCheckMaintenance, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletMaintenanceCall, PalletMaintenanceError, PalletMaintenanceEvent, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletUniqueSchedulerCall, PalletUniqueSchedulerError, PalletUniqueSchedulerEvent, PalletUniqueSchedulerScheduledV3, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup'; declare module '@polkadot/types/types/registry' { export interface InterfaceTypes { @@ -73,6 +73,7 @@ declare module '@polkadot/types/types/registry' { FrameSystemLimitsBlockWeights: FrameSystemLimitsBlockWeights; FrameSystemLimitsWeightsPerClass: FrameSystemLimitsWeightsPerClass; FrameSystemPhase: FrameSystemPhase; + OpalRuntimeCheckMaintenance: OpalRuntimeCheckMaintenance; OpalRuntimeOriginCaller: OpalRuntimeOriginCaller; OpalRuntimeRuntime: OpalRuntimeRuntime; OrmlVestingModuleCall: OrmlVestingModuleCall; @@ -105,6 +106,9 @@ declare module '@polkadot/types/types/registry' { PalletEvmMigrationError: PalletEvmMigrationError; PalletFungibleError: PalletFungibleError; PalletInflationCall: PalletInflationCall; + PalletMaintenanceCall: PalletMaintenanceCall; + PalletMaintenanceError: PalletMaintenanceError; + PalletMaintenanceEvent: PalletMaintenanceEvent; PalletNonfungibleError: PalletNonfungibleError; PalletNonfungibleItemData: PalletNonfungibleItemData; PalletRefungibleError: PalletRefungibleError; diff --git a/tests/src/interfaces/types-lookup.ts b/tests/src/interfaces/types-lookup.ts index 4a299d4fe2..3c7191e2ea 100644 --- a/tests/src/interfaces/types-lookup.ts +++ b/tests/src/interfaces/types-lookup.ts @@ -2065,7 +2065,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Begin' | 'SetData' | 'Finish'; } - /** @name PalletSudoEvent (258) */ + /** @name PalletMaintenanceCall (258) */ + export interface PalletMaintenanceCall extends Enum { + readonly isEnable: boolean; + readonly isDisable: boolean; + readonly type: 'Enable' | 'Disable'; + } + + /** @name PalletSudoEvent (259) */ export interface PalletSudoEvent extends Enum { readonly isSudid: boolean; readonly asSudid: { @@ -2082,7 +2089,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Sudid' | 'KeyChanged' | 'SudoAsDone'; } - /** @name SpRuntimeDispatchError (260) */ + /** @name SpRuntimeDispatchError (261) */ export interface SpRuntimeDispatchError extends Enum { readonly isOther: boolean; readonly isCannotLookup: boolean; @@ -2101,13 +2108,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional'; } - /** @name SpRuntimeModuleError (261) */ + /** @name SpRuntimeModuleError (262) */ export interface SpRuntimeModuleError extends Struct { readonly index: u8; readonly error: U8aFixed; } - /** @name SpRuntimeTokenError (262) */ + /** @name SpRuntimeTokenError (263) */ export interface SpRuntimeTokenError extends Enum { readonly isNoFunds: boolean; readonly isWouldDie: boolean; @@ -2119,7 +2126,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NoFunds' | 'WouldDie' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported'; } - /** @name SpRuntimeArithmeticError (263) */ + /** @name SpRuntimeArithmeticError (264) */ export interface SpRuntimeArithmeticError extends Enum { readonly isUnderflow: boolean; readonly isOverflow: boolean; @@ -2127,20 +2134,20 @@ declare module '@polkadot/types/lookup' { readonly type: 'Underflow' | 'Overflow' | 'DivisionByZero'; } - /** @name SpRuntimeTransactionalError (264) */ + /** @name SpRuntimeTransactionalError (265) */ export interface SpRuntimeTransactionalError extends Enum { readonly isLimitReached: boolean; readonly isNoLayer: boolean; readonly type: 'LimitReached' | 'NoLayer'; } - /** @name PalletSudoError (265) */ + /** @name PalletSudoError (266) */ export interface PalletSudoError extends Enum { readonly isRequireSudo: boolean; readonly type: 'RequireSudo'; } - /** @name FrameSystemAccountInfo (266) */ + /** @name FrameSystemAccountInfo (267) */ export interface FrameSystemAccountInfo extends Struct { readonly nonce: u32; readonly consumers: u32; @@ -2149,19 +2156,19 @@ declare module '@polkadot/types/lookup' { readonly data: PalletBalancesAccountData; } - /** @name FrameSupportWeightsPerDispatchClassU64 (267) */ + /** @name FrameSupportWeightsPerDispatchClassU64 (268) */ export interface FrameSupportWeightsPerDispatchClassU64 extends Struct { readonly normal: u64; readonly operational: u64; readonly mandatory: u64; } - /** @name SpRuntimeDigest (268) */ + /** @name SpRuntimeDigest (269) */ export interface SpRuntimeDigest extends Struct { readonly logs: Vec; } - /** @name SpRuntimeDigestDigestItem (270) */ + /** @name SpRuntimeDigestDigestItem (271) */ export interface SpRuntimeDigestDigestItem extends Enum { readonly isOther: boolean; readonly asOther: Bytes; @@ -2175,14 +2182,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Other' | 'Consensus' | 'Seal' | 'PreRuntime' | 'RuntimeEnvironmentUpdated'; } - /** @name FrameSystemEventRecord (272) */ + /** @name FrameSystemEventRecord (273) */ export interface FrameSystemEventRecord extends Struct { readonly phase: FrameSystemPhase; readonly event: Event; readonly topics: Vec; } - /** @name FrameSystemEvent (274) */ + /** @name FrameSystemEvent (275) */ export interface FrameSystemEvent extends Enum { readonly isExtrinsicSuccess: boolean; readonly asExtrinsicSuccess: { @@ -2210,14 +2217,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'ExtrinsicSuccess' | 'ExtrinsicFailed' | 'CodeUpdated' | 'NewAccount' | 'KilledAccount' | 'Remarked'; } - /** @name FrameSupportWeightsDispatchInfo (275) */ + /** @name FrameSupportWeightsDispatchInfo (276) */ export interface FrameSupportWeightsDispatchInfo extends Struct { readonly weight: u64; readonly class: FrameSupportWeightsDispatchClass; readonly paysFee: FrameSupportWeightsPays; } - /** @name FrameSupportWeightsDispatchClass (276) */ + /** @name FrameSupportWeightsDispatchClass (277) */ export interface FrameSupportWeightsDispatchClass extends Enum { readonly isNormal: boolean; readonly isOperational: boolean; @@ -2225,14 +2232,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Normal' | 'Operational' | 'Mandatory'; } - /** @name FrameSupportWeightsPays (277) */ + /** @name FrameSupportWeightsPays (278) */ export interface FrameSupportWeightsPays extends Enum { readonly isYes: boolean; readonly isNo: boolean; readonly type: 'Yes' | 'No'; } - /** @name OrmlVestingModuleEvent (278) */ + /** @name OrmlVestingModuleEvent (279) */ export interface OrmlVestingModuleEvent extends Enum { readonly isVestingScheduleAdded: boolean; readonly asVestingScheduleAdded: { @@ -2252,7 +2259,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'VestingScheduleAdded' | 'Claimed' | 'VestingSchedulesUpdated'; } - /** @name CumulusPalletXcmpQueueEvent (279) */ + /** @name CumulusPalletXcmpQueueEvent (280) */ export interface CumulusPalletXcmpQueueEvent extends Enum { readonly isSuccess: boolean; readonly asSuccess: Option; @@ -2273,7 +2280,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'UpwardMessageSent' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced'; } - /** @name PalletXcmEvent (280) */ + /** @name PalletXcmEvent (281) */ export interface PalletXcmEvent extends Enum { readonly isAttempted: boolean; readonly asAttempted: XcmV2TraitsOutcome; @@ -2310,7 +2317,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail'; } - /** @name XcmV2TraitsOutcome (281) */ + /** @name XcmV2TraitsOutcome (282) */ export interface XcmV2TraitsOutcome extends Enum { readonly isComplete: boolean; readonly asComplete: u64; @@ -2321,7 +2328,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Complete' | 'Incomplete' | 'Error'; } - /** @name CumulusPalletXcmEvent (283) */ + /** @name CumulusPalletXcmEvent (284) */ export interface CumulusPalletXcmEvent extends Enum { readonly isInvalidFormat: boolean; readonly asInvalidFormat: U8aFixed; @@ -2332,7 +2339,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward'; } - /** @name CumulusPalletDmpQueueEvent (284) */ + /** @name CumulusPalletDmpQueueEvent (285) */ export interface CumulusPalletDmpQueueEvent extends Enum { readonly isInvalidFormat: boolean; readonly asInvalidFormat: { @@ -2367,7 +2374,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced'; } - /** @name PalletUniqueRawEvent (285) */ + /** @name PalletUniqueRawEvent (286) */ export interface PalletUniqueRawEvent extends Enum { readonly isCollectionSponsorRemoved: boolean; readonly asCollectionSponsorRemoved: u32; @@ -2392,7 +2399,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'CollectionSponsorRemoved' | 'CollectionAdminAdded' | 'CollectionOwnedChanged' | 'CollectionSponsorSet' | 'SponsorshipConfirmed' | 'CollectionAdminRemoved' | 'AllowListAddressRemoved' | 'AllowListAddressAdded' | 'CollectionLimitSet' | 'CollectionPermissionSet'; } - /** @name PalletUniqueSchedulerEvent (286) */ + /** @name PalletUniqueSchedulerEvent (287) */ export interface PalletUniqueSchedulerEvent extends Enum { readonly isScheduled: boolean; readonly asScheduled: { @@ -2419,14 +2426,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'Scheduled' | 'Canceled' | 'Dispatched' | 'CallLookupFailed'; } - /** @name FrameSupportScheduleLookupError (288) */ + /** @name FrameSupportScheduleLookupError (289) */ export interface FrameSupportScheduleLookupError extends Enum { readonly isUnknown: boolean; readonly isBadFormat: boolean; readonly type: 'Unknown' | 'BadFormat'; } - /** @name PalletCommonEvent (289) */ + /** @name PalletCommonEvent (290) */ export interface PalletCommonEvent extends Enum { readonly isCollectionCreated: boolean; readonly asCollectionCreated: ITuple<[u32, u8, AccountId32]>; @@ -2453,14 +2460,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'ItemCreated' | 'ItemDestroyed' | 'Transfer' | 'Approved' | 'CollectionPropertySet' | 'CollectionPropertyDeleted' | 'TokenPropertySet' | 'TokenPropertyDeleted' | 'PropertyPermissionSet'; } - /** @name PalletStructureEvent (290) */ + /** @name PalletStructureEvent (291) */ export interface PalletStructureEvent extends Enum { readonly isExecuted: boolean; readonly asExecuted: Result; readonly type: 'Executed'; } - /** @name PalletRmrkCoreEvent (291) */ + /** @name PalletRmrkCoreEvent (292) */ export interface PalletRmrkCoreEvent extends Enum { readonly isCollectionCreated: boolean; readonly asCollectionCreated: { @@ -2550,7 +2557,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'IssuerChanged' | 'CollectionLocked' | 'NftMinted' | 'NftBurned' | 'NftSent' | 'NftAccepted' | 'NftRejected' | 'PropertySet' | 'ResourceAdded' | 'ResourceRemoval' | 'ResourceAccepted' | 'ResourceRemovalAccepted' | 'PrioritySet'; } - /** @name PalletRmrkEquipEvent (292) */ + /** @name PalletRmrkEquipEvent (293) */ export interface PalletRmrkEquipEvent extends Enum { readonly isBaseCreated: boolean; readonly asBaseCreated: { @@ -2565,7 +2572,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'BaseCreated' | 'EquippablesUpdated'; } - /** @name PalletEvmEvent (293) */ + /** @name PalletEvmEvent (294) */ export interface PalletEvmEvent extends Enum { readonly isLog: boolean; readonly asLog: EthereumLog; @@ -2584,21 +2591,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'Log' | 'Created' | 'CreatedFailed' | 'Executed' | 'ExecutedFailed' | 'BalanceDeposit' | 'BalanceWithdraw'; } - /** @name EthereumLog (294) */ + /** @name EthereumLog (295) */ export interface EthereumLog extends Struct { readonly address: H160; readonly topics: Vec; readonly data: Bytes; } - /** @name PalletEthereumEvent (295) */ + /** @name PalletEthereumEvent (296) */ export interface PalletEthereumEvent extends Enum { readonly isExecuted: boolean; readonly asExecuted: ITuple<[H160, H160, H256, EvmCoreErrorExitReason]>; readonly type: 'Executed'; } - /** @name EvmCoreErrorExitReason (296) */ + /** @name EvmCoreErrorExitReason (297) */ export interface EvmCoreErrorExitReason extends Enum { readonly isSucceed: boolean; readonly asSucceed: EvmCoreErrorExitSucceed; @@ -2611,7 +2618,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Succeed' | 'Error' | 'Revert' | 'Fatal'; } - /** @name EvmCoreErrorExitSucceed (297) */ + /** @name EvmCoreErrorExitSucceed (298) */ export interface EvmCoreErrorExitSucceed extends Enum { readonly isStopped: boolean; readonly isReturned: boolean; @@ -2619,7 +2626,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Stopped' | 'Returned' | 'Suicided'; } - /** @name EvmCoreErrorExitError (298) */ + /** @name EvmCoreErrorExitError (299) */ export interface EvmCoreErrorExitError extends Enum { readonly isStackUnderflow: boolean; readonly isStackOverflow: boolean; @@ -2640,13 +2647,13 @@ declare module '@polkadot/types/lookup' { readonly type: 'StackUnderflow' | 'StackOverflow' | 'InvalidJump' | 'InvalidRange' | 'DesignatedInvalid' | 'CallTooDeep' | 'CreateCollision' | 'CreateContractLimit' | 'OutOfOffset' | 'OutOfGas' | 'OutOfFund' | 'PcUnderflow' | 'CreateEmpty' | 'Other' | 'InvalidCode'; } - /** @name EvmCoreErrorExitRevert (301) */ + /** @name EvmCoreErrorExitRevert (302) */ export interface EvmCoreErrorExitRevert extends Enum { readonly isReverted: boolean; readonly type: 'Reverted'; } - /** @name EvmCoreErrorExitFatal (302) */ + /** @name EvmCoreErrorExitFatal (303) */ export interface EvmCoreErrorExitFatal extends Enum { readonly isNotSupported: boolean; readonly isUnhandledInterrupt: boolean; @@ -2657,7 +2664,14 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotSupported' | 'UnhandledInterrupt' | 'CallErrorAsFatal' | 'Other'; } - /** @name FrameSystemPhase (303) */ + /** @name PalletMaintenanceEvent (304) */ + export interface PalletMaintenanceEvent extends Enum { + readonly isMaintenanceEnabled: boolean; + readonly isMaintenanceDisabled: boolean; + readonly type: 'MaintenanceEnabled' | 'MaintenanceDisabled'; + } + + /** @name FrameSystemPhase (305) */ export interface FrameSystemPhase extends Enum { readonly isApplyExtrinsic: boolean; readonly asApplyExtrinsic: u32; @@ -2666,27 +2680,27 @@ declare module '@polkadot/types/lookup' { readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization'; } - /** @name FrameSystemLastRuntimeUpgradeInfo (305) */ + /** @name FrameSystemLastRuntimeUpgradeInfo (307) */ export interface FrameSystemLastRuntimeUpgradeInfo extends Struct { readonly specVersion: Compact; readonly specName: Text; } - /** @name FrameSystemLimitsBlockWeights (306) */ + /** @name FrameSystemLimitsBlockWeights (308) */ export interface FrameSystemLimitsBlockWeights extends Struct { readonly baseBlock: u64; readonly maxBlock: u64; readonly perClass: FrameSupportWeightsPerDispatchClassWeightsPerClass; } - /** @name FrameSupportWeightsPerDispatchClassWeightsPerClass (307) */ + /** @name FrameSupportWeightsPerDispatchClassWeightsPerClass (309) */ export interface FrameSupportWeightsPerDispatchClassWeightsPerClass extends Struct { readonly normal: FrameSystemLimitsWeightsPerClass; readonly operational: FrameSystemLimitsWeightsPerClass; readonly mandatory: FrameSystemLimitsWeightsPerClass; } - /** @name FrameSystemLimitsWeightsPerClass (308) */ + /** @name FrameSystemLimitsWeightsPerClass (310) */ export interface FrameSystemLimitsWeightsPerClass extends Struct { readonly baseExtrinsic: u64; readonly maxExtrinsic: Option; @@ -2694,25 +2708,25 @@ declare module '@polkadot/types/lookup' { readonly reserved: Option; } - /** @name FrameSystemLimitsBlockLength (310) */ + /** @name FrameSystemLimitsBlockLength (312) */ export interface FrameSystemLimitsBlockLength extends Struct { readonly max: FrameSupportWeightsPerDispatchClassU32; } - /** @name FrameSupportWeightsPerDispatchClassU32 (311) */ + /** @name FrameSupportWeightsPerDispatchClassU32 (313) */ export interface FrameSupportWeightsPerDispatchClassU32 extends Struct { readonly normal: u32; readonly operational: u32; readonly mandatory: u32; } - /** @name FrameSupportWeightsRuntimeDbWeight (312) */ + /** @name FrameSupportWeightsRuntimeDbWeight (314) */ export interface FrameSupportWeightsRuntimeDbWeight extends Struct { readonly read: u64; readonly write: u64; } - /** @name SpVersionRuntimeVersion (313) */ + /** @name SpVersionRuntimeVersion (315) */ export interface SpVersionRuntimeVersion extends Struct { readonly specName: Text; readonly implName: Text; @@ -2724,7 +2738,7 @@ declare module '@polkadot/types/lookup' { readonly stateVersion: u8; } - /** @name FrameSystemError (317) */ + /** @name FrameSystemError (319) */ export interface FrameSystemError extends Enum { readonly isInvalidSpecName: boolean; readonly isSpecVersionNeedsToIncrease: boolean; @@ -2735,7 +2749,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered'; } - /** @name OrmlVestingModuleError (319) */ + /** @name OrmlVestingModuleError (321) */ export interface OrmlVestingModuleError extends Enum { readonly isZeroVestingPeriod: boolean; readonly isZeroVestingPeriodCount: boolean; @@ -2746,21 +2760,21 @@ declare module '@polkadot/types/lookup' { readonly type: 'ZeroVestingPeriod' | 'ZeroVestingPeriodCount' | 'InsufficientBalanceToLock' | 'TooManyVestingSchedules' | 'AmountLow' | 'MaxVestingSchedulesExceeded'; } - /** @name CumulusPalletXcmpQueueInboundChannelDetails (321) */ + /** @name CumulusPalletXcmpQueueInboundChannelDetails (323) */ export interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct { readonly sender: u32; readonly state: CumulusPalletXcmpQueueInboundState; readonly messageMetadata: Vec>; } - /** @name CumulusPalletXcmpQueueInboundState (322) */ + /** @name CumulusPalletXcmpQueueInboundState (324) */ export interface CumulusPalletXcmpQueueInboundState extends Enum { readonly isOk: boolean; readonly isSuspended: boolean; readonly type: 'Ok' | 'Suspended'; } - /** @name PolkadotParachainPrimitivesXcmpMessageFormat (325) */ + /** @name PolkadotParachainPrimitivesXcmpMessageFormat (327) */ export interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum { readonly isConcatenatedVersionedXcm: boolean; readonly isConcatenatedEncodedBlob: boolean; @@ -2768,7 +2782,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'ConcatenatedVersionedXcm' | 'ConcatenatedEncodedBlob' | 'Signals'; } - /** @name CumulusPalletXcmpQueueOutboundChannelDetails (328) */ + /** @name CumulusPalletXcmpQueueOutboundChannelDetails (330) */ export interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct { readonly recipient: u32; readonly state: CumulusPalletXcmpQueueOutboundState; @@ -2777,14 +2791,14 @@ declare module '@polkadot/types/lookup' { readonly lastIndex: u16; } - /** @name CumulusPalletXcmpQueueOutboundState (329) */ + /** @name CumulusPalletXcmpQueueOutboundState (331) */ export interface CumulusPalletXcmpQueueOutboundState extends Enum { readonly isOk: boolean; readonly isSuspended: boolean; readonly type: 'Ok' | 'Suspended'; } - /** @name CumulusPalletXcmpQueueQueueConfigData (331) */ + /** @name CumulusPalletXcmpQueueQueueConfigData (333) */ export interface CumulusPalletXcmpQueueQueueConfigData extends Struct { readonly suspendThreshold: u32; readonly dropThreshold: u32; @@ -2794,7 +2808,7 @@ declare module '@polkadot/types/lookup' { readonly xcmpMaxIndividualWeight: u64; } - /** @name CumulusPalletXcmpQueueError (333) */ + /** @name CumulusPalletXcmpQueueError (335) */ export interface CumulusPalletXcmpQueueError extends Enum { readonly isFailedToSend: boolean; readonly isBadXcmOrigin: boolean; @@ -2804,7 +2818,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'FailedToSend' | 'BadXcmOrigin' | 'BadXcm' | 'BadOverweightIndex' | 'WeightOverLimit'; } - /** @name PalletXcmError (334) */ + /** @name PalletXcmError (336) */ export interface PalletXcmError extends Enum { readonly isUnreachable: boolean; readonly isSendFailure: boolean; @@ -2822,29 +2836,29 @@ declare module '@polkadot/types/lookup' { readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed'; } - /** @name CumulusPalletXcmError (335) */ + /** @name CumulusPalletXcmError (337) */ export type CumulusPalletXcmError = Null; - /** @name CumulusPalletDmpQueueConfigData (336) */ + /** @name CumulusPalletDmpQueueConfigData (338) */ export interface CumulusPalletDmpQueueConfigData extends Struct { readonly maxIndividual: u64; } - /** @name CumulusPalletDmpQueuePageIndexData (337) */ + /** @name CumulusPalletDmpQueuePageIndexData (339) */ export interface CumulusPalletDmpQueuePageIndexData extends Struct { readonly beginUsed: u32; readonly endUsed: u32; readonly overweightCount: u64; } - /** @name CumulusPalletDmpQueueError (340) */ + /** @name CumulusPalletDmpQueueError (342) */ export interface CumulusPalletDmpQueueError extends Enum { readonly isUnknown: boolean; readonly isOverLimit: boolean; readonly type: 'Unknown' | 'OverLimit'; } - /** @name PalletUniqueError (344) */ + /** @name PalletUniqueError (346) */ export interface PalletUniqueError extends Enum { readonly isCollectionDecimalPointLimitExceeded: boolean; readonly isConfirmUnsetSponsorFail: boolean; @@ -2853,7 +2867,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'CollectionDecimalPointLimitExceeded' | 'ConfirmUnsetSponsorFail' | 'EmptyArgument' | 'RepartitionCalledOnNonRefungibleCollection'; } - /** @name PalletUniqueSchedulerScheduledV3 (347) */ + /** @name PalletUniqueSchedulerScheduledV3 (349) */ export interface PalletUniqueSchedulerScheduledV3 extends Struct { readonly maybeId: Option; readonly priority: u8; @@ -2862,7 +2876,7 @@ declare module '@polkadot/types/lookup' { readonly origin: OpalRuntimeOriginCaller; } - /** @name OpalRuntimeOriginCaller (348) */ + /** @name OpalRuntimeOriginCaller (350) */ export interface OpalRuntimeOriginCaller extends Enum { readonly isVoid: boolean; readonly isSystem: boolean; @@ -2876,7 +2890,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Void' | 'System' | 'PolkadotXcm' | 'CumulusXcm' | 'Ethereum'; } - /** @name FrameSupportDispatchRawOrigin (349) */ + /** @name FrameSupportDispatchRawOrigin (351) */ export interface FrameSupportDispatchRawOrigin extends Enum { readonly isRoot: boolean; readonly isSigned: boolean; @@ -2885,7 +2899,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Root' | 'Signed' | 'None'; } - /** @name PalletXcmOrigin (350) */ + /** @name PalletXcmOrigin (352) */ export interface PalletXcmOrigin extends Enum { readonly isXcm: boolean; readonly asXcm: XcmV1MultiLocation; @@ -2894,7 +2908,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Xcm' | 'Response'; } - /** @name CumulusPalletXcmOrigin (351) */ + /** @name CumulusPalletXcmOrigin (353) */ export interface CumulusPalletXcmOrigin extends Enum { readonly isRelay: boolean; readonly isSiblingParachain: boolean; @@ -2902,17 +2916,17 @@ declare module '@polkadot/types/lookup' { readonly type: 'Relay' | 'SiblingParachain'; } - /** @name PalletEthereumRawOrigin (352) */ + /** @name PalletEthereumRawOrigin (354) */ export interface PalletEthereumRawOrigin extends Enum { readonly isEthereumTransaction: boolean; readonly asEthereumTransaction: H160; readonly type: 'EthereumTransaction'; } - /** @name SpCoreVoid (353) */ + /** @name SpCoreVoid (355) */ export type SpCoreVoid = Null; - /** @name PalletUniqueSchedulerError (354) */ + /** @name PalletUniqueSchedulerError (356) */ export interface PalletUniqueSchedulerError extends Enum { readonly isFailedToSchedule: boolean; readonly isNotFound: boolean; @@ -2921,7 +2935,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'FailedToSchedule' | 'NotFound' | 'TargetBlockNumberInPast' | 'RescheduleNoChange'; } - /** @name UpDataStructsCollection (355) */ + /** @name UpDataStructsCollection (357) */ export interface UpDataStructsCollection extends Struct { readonly owner: AccountId32; readonly mode: UpDataStructsCollectionMode; @@ -2934,7 +2948,7 @@ declare module '@polkadot/types/lookup' { readonly externalCollection: bool; } - /** @name UpDataStructsSponsorshipState (356) */ + /** @name UpDataStructsSponsorshipState (358) */ export interface UpDataStructsSponsorshipState extends Enum { readonly isDisabled: boolean; readonly isUnconfirmed: boolean; @@ -2944,42 +2958,42 @@ declare module '@polkadot/types/lookup' { readonly type: 'Disabled' | 'Unconfirmed' | 'Confirmed'; } - /** @name UpDataStructsProperties (357) */ + /** @name UpDataStructsProperties (359) */ export interface UpDataStructsProperties extends Struct { readonly map: UpDataStructsPropertiesMapBoundedVec; readonly consumedSpace: u32; readonly spaceLimit: u32; } - /** @name UpDataStructsPropertiesMapBoundedVec (358) */ + /** @name UpDataStructsPropertiesMapBoundedVec (360) */ export interface UpDataStructsPropertiesMapBoundedVec extends BTreeMap {} - /** @name UpDataStructsPropertiesMapPropertyPermission (363) */ + /** @name UpDataStructsPropertiesMapPropertyPermission (365) */ export interface UpDataStructsPropertiesMapPropertyPermission extends BTreeMap {} - /** @name UpDataStructsCollectionStats (370) */ + /** @name UpDataStructsCollectionStats (372) */ export interface UpDataStructsCollectionStats extends Struct { readonly created: u32; readonly destroyed: u32; readonly alive: u32; } - /** @name UpDataStructsTokenChild (371) */ + /** @name UpDataStructsTokenChild (373) */ export interface UpDataStructsTokenChild extends Struct { readonly token: u32; readonly collection: u32; } - /** @name PhantomTypeUpDataStructs (372) */ + /** @name PhantomTypeUpDataStructs (374) */ export interface PhantomTypeUpDataStructs extends Vec> {} - /** @name UpDataStructsTokenData (374) */ + /** @name UpDataStructsTokenData (376) */ export interface UpDataStructsTokenData extends Struct { readonly properties: Vec; readonly owner: Option; } - /** @name UpDataStructsRpcCollection (376) */ + /** @name UpDataStructsRpcCollection (378) */ export interface UpDataStructsRpcCollection extends Struct { readonly owner: AccountId32; readonly mode: UpDataStructsCollectionMode; @@ -2994,7 +3008,7 @@ declare module '@polkadot/types/lookup' { readonly readOnly: bool; } - /** @name RmrkTraitsCollectionCollectionInfo (377) */ + /** @name RmrkTraitsCollectionCollectionInfo (379) */ export interface RmrkTraitsCollectionCollectionInfo extends Struct { readonly issuer: AccountId32; readonly metadata: Bytes; @@ -3003,7 +3017,7 @@ declare module '@polkadot/types/lookup' { readonly nftsCount: u32; } - /** @name RmrkTraitsNftNftInfo (378) */ + /** @name RmrkTraitsNftNftInfo (380) */ export interface RmrkTraitsNftNftInfo extends Struct { readonly owner: RmrkTraitsNftAccountIdOrCollectionNftTuple; readonly royalty: Option; @@ -3012,13 +3026,13 @@ declare module '@polkadot/types/lookup' { readonly pending: bool; } - /** @name RmrkTraitsNftRoyaltyInfo (380) */ + /** @name RmrkTraitsNftRoyaltyInfo (382) */ export interface RmrkTraitsNftRoyaltyInfo extends Struct { readonly recipient: AccountId32; readonly amount: Permill; } - /** @name RmrkTraitsResourceResourceInfo (381) */ + /** @name RmrkTraitsResourceResourceInfo (383) */ export interface RmrkTraitsResourceResourceInfo extends Struct { readonly id: u32; readonly resource: RmrkTraitsResourceResourceTypes; @@ -3026,26 +3040,26 @@ declare module '@polkadot/types/lookup' { readonly pendingRemoval: bool; } - /** @name RmrkTraitsPropertyPropertyInfo (382) */ + /** @name RmrkTraitsPropertyPropertyInfo (384) */ export interface RmrkTraitsPropertyPropertyInfo extends Struct { readonly key: Bytes; readonly value: Bytes; } - /** @name RmrkTraitsBaseBaseInfo (383) */ + /** @name RmrkTraitsBaseBaseInfo (385) */ export interface RmrkTraitsBaseBaseInfo extends Struct { readonly issuer: AccountId32; readonly baseType: Bytes; readonly symbol: Bytes; } - /** @name RmrkTraitsNftNftChild (384) */ + /** @name RmrkTraitsNftNftChild (386) */ export interface RmrkTraitsNftNftChild extends Struct { readonly collectionId: u32; readonly nftId: u32; } - /** @name PalletCommonError (386) */ + /** @name PalletCommonError (388) */ export interface PalletCommonError extends Enum { readonly isCollectionNotFound: boolean; readonly isMustBeTokenOwner: boolean; @@ -3084,7 +3098,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'CollectionNotFound' | 'MustBeTokenOwner' | 'NoPermission' | 'CantDestroyNotEmptyCollection' | 'PublicMintingNotAllowed' | 'AddressNotInAllowlist' | 'CollectionNameLimitExceeded' | 'CollectionDescriptionLimitExceeded' | 'CollectionTokenPrefixLimitExceeded' | 'TotalCollectionsLimitExceeded' | 'CollectionAdminCountExceeded' | 'CollectionLimitBoundsExceeded' | 'OwnerPermissionsCantBeReverted' | 'TransferNotAllowed' | 'AccountTokenLimitExceeded' | 'CollectionTokenLimitExceeded' | 'MetadataFlagFrozen' | 'TokenNotFound' | 'TokenValueTooLow' | 'ApprovedValueTooLow' | 'CantApproveMoreThanOwned' | 'AddressIsZero' | 'UnsupportedOperation' | 'NotSufficientFounds' | 'UserIsNotAllowedToNest' | 'SourceCollectionIsNotAllowedToNest' | 'CollectionFieldSizeExceeded' | 'NoSpaceForProperty' | 'PropertyLimitReached' | 'PropertyKeyIsTooLong' | 'InvalidCharacterInPropertyKey' | 'EmptyPropertyKey' | 'CollectionIsExternal' | 'CollectionIsInternal'; } - /** @name PalletFungibleError (388) */ + /** @name PalletFungibleError (390) */ export interface PalletFungibleError extends Enum { readonly isNotFungibleDataUsedToMintFungibleCollectionToken: boolean; readonly isFungibleItemsHaveNoId: boolean; @@ -3094,12 +3108,12 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotFungibleDataUsedToMintFungibleCollectionToken' | 'FungibleItemsHaveNoId' | 'FungibleItemsDontHaveData' | 'FungibleDisallowsNesting' | 'SettingPropertiesNotAllowed'; } - /** @name PalletRefungibleItemData (389) */ + /** @name PalletRefungibleItemData (391) */ export interface PalletRefungibleItemData extends Struct { readonly constData: Bytes; } - /** @name PalletRefungibleError (393) */ + /** @name PalletRefungibleError (395) */ export interface PalletRefungibleError extends Enum { readonly isNotRefungibleDataUsedToMintFungibleCollectionToken: boolean; readonly isWrongRefungiblePieces: boolean; @@ -3109,19 +3123,19 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotRefungibleDataUsedToMintFungibleCollectionToken' | 'WrongRefungiblePieces' | 'RepartitionWhileNotOwningAllPieces' | 'RefungibleDisallowsNesting' | 'SettingPropertiesNotAllowed'; } - /** @name PalletNonfungibleItemData (394) */ + /** @name PalletNonfungibleItemData (396) */ export interface PalletNonfungibleItemData extends Struct { readonly owner: PalletEvmAccountBasicCrossAccountIdRepr; } - /** @name UpDataStructsPropertyScope (396) */ + /** @name UpDataStructsPropertyScope (398) */ export interface UpDataStructsPropertyScope extends Enum { readonly isNone: boolean; readonly isRmrk: boolean; readonly type: 'None' | 'Rmrk'; } - /** @name PalletNonfungibleError (398) */ + /** @name PalletNonfungibleError (400) */ export interface PalletNonfungibleError extends Enum { readonly isNotNonfungibleDataUsedToMintFungibleCollectionToken: boolean; readonly isNonfungibleItemsHaveNoAmount: boolean; @@ -3129,7 +3143,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'NotNonfungibleDataUsedToMintFungibleCollectionToken' | 'NonfungibleItemsHaveNoAmount' | 'CantBurnNftWithChildren'; } - /** @name PalletStructureError (399) */ + /** @name PalletStructureError (401) */ export interface PalletStructureError extends Enum { readonly isOuroborosDetected: boolean; readonly isDepthLimit: boolean; @@ -3138,7 +3152,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'OuroborosDetected' | 'DepthLimit' | 'BreadthLimit' | 'TokenNotFound'; } - /** @name PalletRmrkCoreError (400) */ + /** @name PalletRmrkCoreError (402) */ export interface PalletRmrkCoreError extends Enum { readonly isCorruptedCollectionType: boolean; readonly isNftTypeEncodeError: boolean; @@ -3163,7 +3177,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'CorruptedCollectionType' | 'NftTypeEncodeError' | 'RmrkPropertyKeyIsTooLong' | 'RmrkPropertyValueIsTooLong' | 'RmrkPropertyIsNotFound' | 'UnableToDecodeRmrkData' | 'CollectionNotEmpty' | 'NoAvailableCollectionId' | 'NoAvailableNftId' | 'CollectionUnknown' | 'NoPermission' | 'NonTransferable' | 'CollectionFullOrLocked' | 'ResourceDoesntExist' | 'CannotSendToDescendentOrSelf' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'CannotRejectNonPendingNft' | 'ResourceNotPending' | 'NoAvailableResourceId'; } - /** @name PalletRmrkEquipError (402) */ + /** @name PalletRmrkEquipError (404) */ export interface PalletRmrkEquipError extends Enum { readonly isPermissionError: boolean; readonly isNoAvailableBaseId: boolean; @@ -3175,7 +3189,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'PermissionError' | 'NoAvailableBaseId' | 'NoAvailablePartId' | 'BaseDoesntExist' | 'NeedsDefaultThemeFirst' | 'PartDoesntExist' | 'NoEquippableOnFixedPart'; } - /** @name PalletEvmError (405) */ + /** @name PalletEvmError (407) */ export interface PalletEvmError extends Enum { readonly isBalanceLow: boolean; readonly isFeeOverflow: boolean; @@ -3186,7 +3200,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'BalanceLow' | 'FeeOverflow' | 'PaymentOverflow' | 'WithdrawFailed' | 'GasPriceTooLow' | 'InvalidNonce'; } - /** @name FpRpcTransactionStatus (408) */ + /** @name FpRpcTransactionStatus (410) */ export interface FpRpcTransactionStatus extends Struct { readonly transactionHash: H256; readonly transactionIndex: u32; @@ -3197,10 +3211,10 @@ declare module '@polkadot/types/lookup' { readonly logsBloom: EthbloomBloom; } - /** @name EthbloomBloom (410) */ + /** @name EthbloomBloom (412) */ export interface EthbloomBloom extends U8aFixed {} - /** @name EthereumReceiptReceiptV3 (412) */ + /** @name EthereumReceiptReceiptV3 (414) */ export interface EthereumReceiptReceiptV3 extends Enum { readonly isLegacy: boolean; readonly asLegacy: EthereumReceiptEip658ReceiptData; @@ -3211,7 +3225,7 @@ declare module '@polkadot/types/lookup' { readonly type: 'Legacy' | 'Eip2930' | 'Eip1559'; } - /** @name EthereumReceiptEip658ReceiptData (413) */ + /** @name EthereumReceiptEip658ReceiptData (415) */ export interface EthereumReceiptEip658ReceiptData extends Struct { readonly statusCode: u8; readonly usedGas: U256; @@ -3219,14 +3233,14 @@ declare module '@polkadot/types/lookup' { readonly logs: Vec; } - /** @name EthereumBlock (414) */ + /** @name EthereumBlock (416) */ export interface EthereumBlock extends Struct { readonly header: EthereumHeader; readonly transactions: Vec; readonly ommers: Vec; } - /** @name EthereumHeader (415) */ + /** @name EthereumHeader (417) */ export interface EthereumHeader extends Struct { readonly parentHash: H256; readonly ommersHash: H256; @@ -3245,24 +3259,24 @@ declare module '@polkadot/types/lookup' { readonly nonce: EthereumTypesHashH64; } - /** @name EthereumTypesHashH64 (416) */ + /** @name EthereumTypesHashH64 (418) */ export interface EthereumTypesHashH64 extends U8aFixed {} - /** @name PalletEthereumError (421) */ + /** @name PalletEthereumError (423) */ export interface PalletEthereumError extends Enum { readonly isInvalidSignature: boolean; readonly isPreLogExists: boolean; readonly type: 'InvalidSignature' | 'PreLogExists'; } - /** @name PalletEvmCoderSubstrateError (422) */ + /** @name PalletEvmCoderSubstrateError (424) */ export interface PalletEvmCoderSubstrateError extends Enum { readonly isOutOfGas: boolean; readonly isOutOfFund: boolean; readonly type: 'OutOfGas' | 'OutOfFund'; } - /** @name PalletEvmContractHelpersSponsoringModeT (423) */ + /** @name PalletEvmContractHelpersSponsoringModeT (425) */ export interface PalletEvmContractHelpersSponsoringModeT extends Enum { readonly isDisabled: boolean; readonly isAllowlisted: boolean; @@ -3270,20 +3284,23 @@ declare module '@polkadot/types/lookup' { readonly type: 'Disabled' | 'Allowlisted' | 'Generous'; } - /** @name PalletEvmContractHelpersError (425) */ + /** @name PalletEvmContractHelpersError (427) */ export interface PalletEvmContractHelpersError extends Enum { readonly isNoPermission: boolean; readonly type: 'NoPermission'; } - /** @name PalletEvmMigrationError (426) */ + /** @name PalletEvmMigrationError (428) */ export interface PalletEvmMigrationError extends Enum { readonly isAccountNotEmpty: boolean; readonly isAccountIsNotMigrating: boolean; readonly type: 'AccountNotEmpty' | 'AccountIsNotMigrating'; } - /** @name SpRuntimeMultiSignature (428) */ + /** @name PalletMaintenanceError (429) */ + export type PalletMaintenanceError = Null; + + /** @name SpRuntimeMultiSignature (431) */ export interface SpRuntimeMultiSignature extends Enum { readonly isEd25519: boolean; readonly asEd25519: SpCoreEd25519Signature; @@ -3294,34 +3311,37 @@ declare module '@polkadot/types/lookup' { readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa'; } - /** @name SpCoreEd25519Signature (429) */ + /** @name SpCoreEd25519Signature (432) */ export interface SpCoreEd25519Signature extends U8aFixed {} - /** @name SpCoreSr25519Signature (431) */ + /** @name SpCoreSr25519Signature (434) */ export interface SpCoreSr25519Signature extends U8aFixed {} - /** @name SpCoreEcdsaSignature (432) */ + /** @name SpCoreEcdsaSignature (435) */ export interface SpCoreEcdsaSignature extends U8aFixed {} - /** @name FrameSystemExtensionsCheckSpecVersion (435) */ + /** @name FrameSystemExtensionsCheckSpecVersion (438) */ export type FrameSystemExtensionsCheckSpecVersion = Null; - /** @name FrameSystemExtensionsCheckGenesis (436) */ + /** @name FrameSystemExtensionsCheckGenesis (439) */ export type FrameSystemExtensionsCheckGenesis = Null; - /** @name FrameSystemExtensionsCheckNonce (439) */ + /** @name FrameSystemExtensionsCheckNonce (442) */ export interface FrameSystemExtensionsCheckNonce extends Compact {} - /** @name FrameSystemExtensionsCheckWeight (440) */ + /** @name FrameSystemExtensionsCheckWeight (443) */ export type FrameSystemExtensionsCheckWeight = Null; - /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (441) */ + /** @name OpalRuntimeCheckMaintenance (444) */ + export type OpalRuntimeCheckMaintenance = Null; + + /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (445) */ export interface PalletTemplateTransactionPaymentChargeTransactionPayment extends Compact {} - /** @name OpalRuntimeRuntime (442) */ + /** @name OpalRuntimeRuntime (446) */ export type OpalRuntimeRuntime = Null; - /** @name PalletEthereumFakeTransactionFinalizer (443) */ + /** @name PalletEthereumFakeTransactionFinalizer (447) */ export type PalletEthereumFakeTransactionFinalizer = Null; } // declare module diff --git a/tests/src/maintenanceMode.test.ts b/tests/src/maintenanceMode.test.ts new file mode 100644 index 0000000000..f97129e755 --- /dev/null +++ b/tests/src/maintenanceMode.test.ts @@ -0,0 +1,330 @@ +// 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 . + +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import {default as usingApi, executeTransaction, submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api'; +import {createCollection, createItemExpectSuccess, createItemExpectFailure, createCollectionWithPropsExpectSuccess, waitNewBlocks, getTokenOwner, scheduleTransferExpectSuccess} from './util/helpers'; +import {createEthAccount, createEthAccountWithBalance, evmCollection, evmCollectionHelpers, getCollectionAddressFromResult, itWeb3} from './eth/util/helpers'; +import {IKeyringPair} from '@polkadot/types/types'; +import {ApiPromise} from '@polkadot/api'; + +chai.use(chaiAsPromised); +const expect = chai.expect; + +// TODO:maintenance make it into seqtest + +async function maintenanceEnabled(api: ApiPromise): Promise { + return (await api.query.maintenance.enabled()).toJSON(); +} + +describe('Integration Test: Maintenance Mode', () => { + let superuser: IKeyringPair; + let bob: IKeyringPair; + + before(async () => { + await usingApi(async (api, privateKey) => { + superuser = privateKey('//Alice'); + bob = privateKey('//Bob'); + + if (await maintenanceEnabled(api)) { + console.warn('\tMaintenance mode was left enabled BEFORE the test suite! Disabling it now.'); + const sudoTx = api.tx.sudo.sudo(api.tx.maintenance.disable() as any); + await submitTransactionAsync(superuser, sudoTx); + } + }); + }); + + it('Allows superuser to enable and disable maintenance mode - and disallows anyone else', async () => { + await usingApi(async api => { + // Make sure non-sudo can't enable maintenance mode + const txEnable = api.tx.maintenance.enable(); + await expect(submitTransactionExpectFailAsync(bob, txEnable), 'on commoner enabling MM').to.be.rejected; //With(/NoPermission/); + + // Set maintenance mode + await submitTransactionAsync(superuser, api.tx.sudo.sudo(txEnable as any)); + expect(await maintenanceEnabled(api), 'MM is OFF when it should be ON').to.be.true; + + // Make sure non-sudo can't disable maintenance mode + const txDisable = api.tx.maintenance.disable(); + await expect(submitTransactionExpectFailAsync(bob, txDisable), 'on commoner disabling MM').to.be.rejected; //With(/NoPermission/); + + // Disable maintenance mode + await submitTransactionAsync(superuser, api.tx.sudo.sudo(txDisable as any)); + expect(await maintenanceEnabled(api), 'MM is ON when it should be OFF').to.be.false; + }); + }); + + it('MM blocks unique pallet calls', async () => { + await usingApi(async api => { + // Can create an NFT collection before enabling the MM + const nftCollectionId = await expect(createCollectionWithPropsExpectSuccess({ + mode: {type: 'NFT'}, + propPerm: [ + { + key: 'test', + permission: { + collectionAdmin: true, + tokenOwner: true, + mutable: true, + }, + }, + ], + })).to.be.fulfilled; + + // Can mint an NFT before enabling the MM + const nftId = await createItemExpectSuccess(superuser, nftCollectionId, 'NFT'); + + // Can create an FT collection before enabling the MM + const ftCollectionResult = await expect(createCollection(api, superuser, {mode: {type: 'Fungible', decimalPoints: 18}})).to.be.fulfilled; + const ftCollectionId = ftCollectionResult.collectionId; + + // Can mint an FT before enabling the MM + await createItemExpectSuccess(superuser, ftCollectionId, 'Fungible'); + + // Can create an RFT collection before enabling the MM + const rftCollectionResult = await expect(createCollection(api, superuser, {mode: {type: 'ReFungible'}})).to.be.fulfilled; + const rftCollectionId = rftCollectionResult.collectionId; + + // Can mint an RFT before enabling the MM + await createItemExpectSuccess(superuser, rftCollectionId, 'ReFungible'); + + const txEnable = api.tx.maintenance.enable(); + await submitTransactionAsync(superuser, api.tx.sudo.sudo(txEnable as any)); + expect(await maintenanceEnabled(api), 'MM is OFF when it should be ON').to.be.true; + + // Unable to create a collection when the MM is enabled + await expect(createCollection(api, superuser), 'cudo forbidden stuff').to.be.rejected; + + // Unable to set token properties when the MM is enabled + await expect(submitTransactionExpectFailAsync( + superuser, + api.tx.unique.setTokenProperties(nftCollectionId, nftId, [{key: 'test', value: 'test-val'}]), + )).to.be.rejected; + + // Unable to mint an NFT when the MM is enabled + await expect(createItemExpectFailure(superuser, nftCollectionId, 'NFT')).to.be.rejected; + + // Unable to mint an FT when the MM is enabled + await expect(createItemExpectFailure(superuser, ftCollectionId, 'Fungible')).to.be.rejected; + + // Unable to mint an RFT when the MM is enabled + await expect(createItemExpectFailure(superuser, rftCollectionId, 'ReFungible')).to.be.rejected; + + const txDisable = api.tx.maintenance.disable(); + await submitTransactionAsync(superuser, api.tx.sudo.sudo(txDisable as any)); + expect(await maintenanceEnabled(api), 'MM is ON when it should be OFF').to.be.false; + + // Can create a collection after disabling the MM + await expect(createCollection(api, superuser), 'MM is disabled, the collection should be created').to.be.fulfilled; + + // Can set token properties after disabling the MM + await submitTransactionAsync( + superuser, + api.tx.unique.setTokenProperties(nftCollectionId, nftId, [{key: 'test', value: 'test-val'}]), + ); + + // Can mint an NFT after disabling the MM + await createItemExpectSuccess(superuser, nftCollectionId, 'NFT'); + + // Can mint an FT after disabling the MM + await createItemExpectSuccess(superuser, ftCollectionId, 'Fungible'); + + // Can mint an RFT after disabling the MM + await createItemExpectSuccess(superuser, rftCollectionId, 'ReFungible'); + }); + }); + + it('MM allows native token transfers and RPC calls', async () => { + await usingApi(async api => { + // We can use RPC before the MM is enabled + const stats = (await api.rpc.unique.collectionStats()).toJSON(); + + // We can transfer funds before the MM is enabled + await expect(submitTransactionAsync( + superuser, + api.tx.balances.transfer(bob.address, 1n), + )).to.be.fulfilled; + + const txEnable = api.tx.maintenance.enable(); + await submitTransactionAsync(superuser, api.tx.sudo.sudo(txEnable as any)); + expect(await maintenanceEnabled(api), 'MM is OFF when it should be ON').to.be.true; + + // RPCs work while in maintenance + expect((await api.rpc.unique.collectionStats()).toJSON()).to.be.deep.equal(stats); + + // We still able to transfer funds + await expect(submitTransactionAsync( + superuser, + api.tx.balances.transfer(bob.address, 1n), + )).to.be.fulfilled; + + const txDisable = api.tx.maintenance.disable(); + await submitTransactionAsync(superuser, api.tx.sudo.sudo(txDisable as any)); + expect(await maintenanceEnabled(api), 'MM is ON when it should be OFF').to.be.false; + + // RPCs work after maintenance + expect((await api.rpc.unique.collectionStats()).toJSON()).to.be.deep.equal(stats); + + // Transfers work after maintenance + await expect(submitTransactionAsync( + superuser, + api.tx.balances.transfer(bob.address, 1n), + )).to.be.fulfilled; + }); + }); + + it('MM blocks scheduled calls and the scheduler itself', async () => { + await usingApi(async api => { + const collectionResult = await expect(createCollection(api, bob)).to.be.fulfilled; + const collectionId = collectionResult.collectionId; + + const nftBeforeMM = await createItemExpectSuccess(bob, collectionId, 'NFT'); + const nftDuringMM = await createItemExpectSuccess(bob, collectionId, 'NFT'); + const nftAfterMM = await createItemExpectSuccess(bob, collectionId, 'NFT'); + + const scheduledIdBeforeMM = '0x' + '0'.repeat(31) + '0'; + const scheduledIdDuringMM = '0x' + '0'.repeat(31) + '1'; + const scheduledIdAttemptDuringMM = '0x' + '0'.repeat(31) + '2'; + const scheduledIdAfterMM = '0x' + '0'.repeat(31) + '3'; + + const blocksToWait = 6; + + // Scheduling works before the maintenance + await scheduleTransferExpectSuccess( + collectionId, + nftBeforeMM, + bob, + superuser, + 1, + blocksToWait, + scheduledIdBeforeMM, + ); + + await waitNewBlocks(blocksToWait + 1); + + expect(await getTokenOwner(api, collectionId, nftBeforeMM)).to.be.deep.equal({Substrate: superuser.address}); + + // Schedule a transaction that should occur *during* the maintenance + await scheduleTransferExpectSuccess( + collectionId, + nftDuringMM, + bob, + superuser, + 1, + blocksToWait, + scheduledIdDuringMM, + ); + + const txEnable = api.tx.maintenance.enable(); + await executeTransaction(api, superuser, api.tx.sudo.sudo(txEnable as any)); + expect(await maintenanceEnabled(api), 'MM is OFF when it should be ON').to.be.true; + + await waitNewBlocks(blocksToWait + 1); + + // The owner should NOT change since the scheduled transaction should be rejected + expect(await getTokenOwner(api, collectionId, nftDuringMM)).to.be.deep.equal({Substrate: bob.address}); + + // Any attempts to schedule a tx during the MM should be rejected + await expect(scheduleTransferExpectSuccess( + collectionId, + nftDuringMM, + bob, + superuser, + 1, + blocksToWait, + scheduledIdAttemptDuringMM, + )).to.be.rejected; + + const txDisable = api.tx.maintenance.disable(); + await executeTransaction(api, superuser, api.tx.sudo.sudo(txDisable as any)); + expect(await maintenanceEnabled(api), 'MM is ON when it should be OFF').to.be.false; + + // Scheduling works after the maintenance + await scheduleTransferExpectSuccess( + collectionId, + nftAfterMM, + bob, + superuser, + 1, + blocksToWait, + scheduledIdAfterMM, + ); + + await waitNewBlocks(blocksToWait + 1); + + expect(await getTokenOwner(api, collectionId, nftAfterMM)).to.be.deep.equal({Substrate: superuser.address}); + }); + }); + + itWeb3('Disallows Ethereum transactions to execute while in maintenance', async ({api, web3, privateKeyWrapper}) => { + const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper); + const receiver = createEthAccount(web3); + const collectionHelper = evmCollectionHelpers(web3, owner); + + const {collectionIdAddress} = await getCollectionAddressFromResult(api, await collectionHelper.methods + .createNonfungibleCollection('A', 'B', 'C') + .send()); + + // Set maintenance mode + await submitTransactionAsync(superuser, api.tx.sudo.sudo(api.tx.maintenance.enable())); + expect(await maintenanceEnabled(api), 'MM is OFF when it should be ON').to.be.true; + + const contract = evmCollection(web3, owner, collectionIdAddress); + const tokenId = await contract.methods.nextTokenId().call(); + expect(tokenId).to.be.equal('1'); + + await expect(contract.methods.mintWithTokenURI( + receiver, + tokenId, + 'Test URI', + ).call({from: owner})); + + await expect(contract.methods.ownerOf(tokenId).call()).rejectedWith(/token not found/); + + // Disable maintenance mode + await submitTransactionAsync(superuser, api.tx.sudo.sudo(api.tx.maintenance.disable())); + expect(await maintenanceEnabled(api), 'MM is ON when it should be OFF').to.be.false; + }); + + it('Allows to enable and disable MM repeatedly', async () => { + await usingApi(async api => { + // Set maintenance mode + const sudoEnalbeTx = api.tx.sudo.sudo(api.tx.maintenance.enable()); + + await submitTransactionAsync(superuser, sudoEnalbeTx); + await submitTransactionAsync(superuser, sudoEnalbeTx); + + expect(await maintenanceEnabled(api), 'MM is OFF when it should be ON').to.be.true; + + // Disable maintenance mode + const sudoDisableTx = api.tx.sudo.sudo(api.tx.maintenance.disable()); + await submitTransactionAsync(superuser, sudoDisableTx); + await submitTransactionAsync(superuser, sudoDisableTx); + expect(await maintenanceEnabled(api), 'MM is ON when it should be OFF').to.be.false; + }); + }); + + afterEach(async () => { + await usingApi(async api => { + if (await maintenanceEnabled(api)) { + console.warn('\tMaintenance mode was left enabled AFTER a test has finished! Be careful. Disabling it now.'); + await submitTransactionAsync(superuser, api.tx.sudo.sudo(api.tx.maintenance.disable())); + } + expect(await maintenanceEnabled(api), 'Disastrous! Exited the test suite with maintenance mode on.').to.be.false; + }); + }); +}); diff --git a/tests/src/pallet-presence.test.ts b/tests/src/pallet-presence.test.ts index 1b43421d55..cecf67b5a7 100644 --- a/tests/src/pallet-presence.test.ts +++ b/tests/src/pallet-presence.test.ts @@ -52,6 +52,7 @@ const requiredPallets = [ 'refungible', 'scheduler', 'charging', + 'maintenance', ]; // Pallets that depend on consensus and governance configuration diff --git a/tests/src/rmrk/acceptNft.test.ts b/tests/src/rmrk/acceptNft.test.ts index f3e50f65e7..439f333cce 100644 --- a/tests/src/rmrk/acceptNft.test.ts +++ b/tests/src/rmrk/acceptNft.test.ts @@ -8,10 +8,14 @@ import { } from './util/tx'; import {NftIdTuple} from './util/fetch'; import {isNftChildOfAnother, expectTxFailure} from './util/helpers'; +import {Pallets, requirePallets} from '../util/helpers'; describe('integration test: accept NFT', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function() { + api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); + }); const alice = '//Alice'; const bob = '//Bob'; diff --git a/tests/src/rmrk/addResource.test.ts b/tests/src/rmrk/addResource.test.ts index 9798152053..cddfe8edf7 100644 --- a/tests/src/rmrk/addResource.test.ts +++ b/tests/src/rmrk/addResource.test.ts @@ -12,6 +12,7 @@ import { addNftComposableResource, } from './util/tx'; import {RmrkTraitsResourceResourceInfo as ResourceInfo} from '@polkadot/types/lookup'; +import {Pallets, requirePallets} from '../util/helpers'; describe('integration test: add NFT resource', () => { const Alice = '//Alice'; @@ -24,8 +25,9 @@ describe('integration test: add NFT resource', () => { const nonexistentId = 99999; let api: any; - before(async () => { + before(async function() { api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); }); it('add resource', async () => { diff --git a/tests/src/rmrk/addTheme.test.ts b/tests/src/rmrk/addTheme.test.ts index b2bb56e0ff..dad7b728d9 100644 --- a/tests/src/rmrk/addTheme.test.ts +++ b/tests/src/rmrk/addTheme.test.ts @@ -3,10 +3,14 @@ import {getApiConnection} from '../substrate/substrate-api'; import {createBase, addTheme} from './util/tx'; import {expectTxFailure} from './util/helpers'; import {getThemeNames} from './util/fetch'; +import {Pallets, requirePallets} from '../util/helpers'; describe('integration test: add Theme to Base', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function() { + api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); + }); const alice = '//Alice'; const bob = '//Bob'; diff --git a/tests/src/rmrk/burnNft.test.ts b/tests/src/rmrk/burnNft.test.ts index c640e625a6..29864a6709 100644 --- a/tests/src/rmrk/burnNft.test.ts +++ b/tests/src/rmrk/burnNft.test.ts @@ -2,6 +2,7 @@ import {getApiConnection} from '../substrate/substrate-api'; import {expectTxFailure} from './util/helpers'; import {NftIdTuple, getChildren} from './util/fetch'; import {burnNft, createCollection, sendNft, mintNft} from './util/tx'; +import {Pallets, requirePallets} from '../util/helpers'; import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; @@ -14,8 +15,9 @@ describe('integration test: burn nft', () => { const Bob = '//Bob'; let api: any; - before(async () => { + before(async function() { api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); }); it('burn nft', async () => { diff --git a/tests/src/rmrk/changeCollectionIssuer.test.ts b/tests/src/rmrk/changeCollectionIssuer.test.ts index 6d1afec7b0..6d2dd3714a 100644 --- a/tests/src/rmrk/changeCollectionIssuer.test.ts +++ b/tests/src/rmrk/changeCollectionIssuer.test.ts @@ -4,14 +4,16 @@ import { changeIssuer, createCollection, } from './util/tx'; +import {Pallets, requirePallets} from '../util/helpers'; describe('integration test: collection issuer', () => { const Alice = '//Alice'; const Bob = '//Bob'; let api: any; - before(async () => { + before(async function() { api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); }); it('change collection issuer', async () => { diff --git a/tests/src/rmrk/createBase.test.ts b/tests/src/rmrk/createBase.test.ts index 5d07489aa9..3f8234b100 100644 --- a/tests/src/rmrk/createBase.test.ts +++ b/tests/src/rmrk/createBase.test.ts @@ -1,9 +1,13 @@ import {getApiConnection} from '../substrate/substrate-api'; import {createCollection, createBase} from './util/tx'; +import {Pallets, requirePallets} from '../util/helpers'; describe('integration test: create new Base', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function() { + api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); + }); const alice = '//Alice'; diff --git a/tests/src/rmrk/createCollection.test.ts b/tests/src/rmrk/createCollection.test.ts index 22c879b2b2..c15e0fe65a 100644 --- a/tests/src/rmrk/createCollection.test.ts +++ b/tests/src/rmrk/createCollection.test.ts @@ -1,9 +1,13 @@ import {getApiConnection} from '../substrate/substrate-api'; import {createCollection} from './util/tx'; +import {Pallets, requirePallets} from '../util/helpers'; describe('Integration test: create new collection', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function() { + api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); + }); const alice = '//Alice'; diff --git a/tests/src/rmrk/deleteCollection.test.ts b/tests/src/rmrk/deleteCollection.test.ts index a6925c2c5b..9ee5e40d91 100644 --- a/tests/src/rmrk/deleteCollection.test.ts +++ b/tests/src/rmrk/deleteCollection.test.ts @@ -1,11 +1,13 @@ import {getApiConnection} from '../substrate/substrate-api'; import {expectTxFailure} from './util/helpers'; import {createCollection, deleteCollection} from './util/tx'; +import {Pallets, requirePallets} from '../util/helpers'; describe('integration test: delete collection', () => { let api: any; - before(async () => { + before(async function() { api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); }); const Alice = '//Alice'; diff --git a/tests/src/rmrk/equipNft.test.ts b/tests/src/rmrk/equipNft.test.ts index 76a8a988dd..c9242af73a 100644 --- a/tests/src/rmrk/equipNft.test.ts +++ b/tests/src/rmrk/equipNft.test.ts @@ -13,6 +13,7 @@ import { sendNft, unequipNft, } from './util/tx'; +import {Pallets, requirePallets} from '../util/helpers'; const Alice = '//Alice'; const Bob = '//Bob'; @@ -122,8 +123,9 @@ async function checkEquipStatus( describe.skip('integration test: Equip NFT', () => { let api: any; - before(async () => { + before(async function() { api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); }); it('equip nft', async () => { diff --git a/tests/src/rmrk/getOwnedNfts.test.ts b/tests/src/rmrk/getOwnedNfts.test.ts index 6fbf5499d1..039148ae92 100644 --- a/tests/src/rmrk/getOwnedNfts.test.ts +++ b/tests/src/rmrk/getOwnedNfts.test.ts @@ -2,10 +2,14 @@ import {expect} from 'chai'; import {getApiConnection} from '../substrate/substrate-api'; import {getOwnedNfts} from './util/fetch'; import {mintNft, createCollection} from './util/tx'; +import {Pallets, requirePallets} from '../util/helpers'; describe('integration test: get owned NFTs', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function() { + api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); + }); const alice = '//Alice'; diff --git a/tests/src/rmrk/lockCollection.test.ts b/tests/src/rmrk/lockCollection.test.ts index f23294a7e5..361088c96d 100644 --- a/tests/src/rmrk/lockCollection.test.ts +++ b/tests/src/rmrk/lockCollection.test.ts @@ -1,6 +1,7 @@ import {getApiConnection} from '../substrate/substrate-api'; import {expectTxFailure} from './util/helpers'; import {createCollection, lockCollection, mintNft} from './util/tx'; +import {Pallets, requirePallets} from '../util/helpers'; describe('integration test: lock collection', () => { const Alice = '//Alice'; @@ -8,8 +9,9 @@ describe('integration test: lock collection', () => { const Max = 5; let api: any; - before(async () => { + before(async function() { api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); }); it('lock collection', async () => { diff --git a/tests/src/rmrk/mintNft.test.ts b/tests/src/rmrk/mintNft.test.ts index 6f77b4ea7f..b0e49dae19 100644 --- a/tests/src/rmrk/mintNft.test.ts +++ b/tests/src/rmrk/mintNft.test.ts @@ -3,10 +3,14 @@ import {getApiConnection} from '../substrate/substrate-api'; import {getNft} from './util/fetch'; import {expectTxFailure} from './util/helpers'; import {createCollection, mintNft} from './util/tx'; +import {Pallets, requirePallets} from '../util/helpers'; describe('integration test: mint new NFT', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function() { + api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); + }); const alice = '//Alice'; const bob = '//Bob'; diff --git a/tests/src/rmrk/rejectNft.test.ts b/tests/src/rmrk/rejectNft.test.ts index 893866c8b3..4721370a5c 100644 --- a/tests/src/rmrk/rejectNft.test.ts +++ b/tests/src/rmrk/rejectNft.test.ts @@ -8,10 +8,14 @@ import { } from './util/tx'; import {getChildren, NftIdTuple} from './util/fetch'; import {isNftChildOfAnother, expectTxFailure} from './util/helpers'; +import {Pallets, requirePallets} from '../util/helpers'; describe('integration test: reject NFT', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function() { + api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); + }); const alice = '//Alice'; const bob = '//Bob'; diff --git a/tests/src/rmrk/removeResource.test.ts b/tests/src/rmrk/removeResource.test.ts index a76c5da796..7e78e120f0 100644 --- a/tests/src/rmrk/removeResource.test.ts +++ b/tests/src/rmrk/removeResource.test.ts @@ -9,16 +9,17 @@ import { createCollection, mintNft, removeNftResource, sendNft, } from './util/tx'; - +import {Pallets, requirePallets} from '../util/helpers'; describe('Integration test: remove nft resource', () => { let api: any; let ss58Format: string; - before(async () => { + before(async function() { api = await getApiConnection(); ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format; + await requirePallets(this, [Pallets.RmrkCore]); }); const Alice = '//Alice'; diff --git a/tests/src/rmrk/rmrkIsolation.test.ts b/tests/src/rmrk/rmrkIsolation.test.ts index 6ea368e20a..7fa7690a2b 100644 --- a/tests/src/rmrk/rmrkIsolation.test.ts +++ b/tests/src/rmrk/rmrkIsolation.test.ts @@ -11,6 +11,7 @@ import { import {IKeyringPair} from '@polkadot/types/types'; import {ApiPromise} from '@polkadot/api'; import {it} from 'mocha'; +import {Pallets, requirePallets} from '../util/helpers'; let alice: IKeyringPair; let bob: IKeyringPair; @@ -59,7 +60,8 @@ async function isUnique(): Promise { describe('RMRK External Integration Test', async () => { const it_rmrk = (await isUnique() ? it : it.skip); - before(async () => { + before(async function() { + await requirePallets(this, [Pallets.RmrkCore]); await usingApi(async (api, privateKeyWrapper) => { alice = privateKeyWrapper('//Alice'); diff --git a/tests/src/rmrk/sendNft.test.ts b/tests/src/rmrk/sendNft.test.ts index 178b1bccad..78a7c65721 100644 --- a/tests/src/rmrk/sendNft.test.ts +++ b/tests/src/rmrk/sendNft.test.ts @@ -3,10 +3,14 @@ import {getApiConnection} from '../substrate/substrate-api'; import {createCollection, mintNft, sendNft} from './util/tx'; import {NftIdTuple} from './util/fetch'; import {isNftChildOfAnother, expectTxFailure} from './util/helpers'; +import {Pallets, requirePallets} from '../util/helpers'; describe('integration test: send NFT', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function() { + api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); + }); const maxNftId = 0xFFFFFFFF; diff --git a/tests/src/rmrk/setCollectionProperty.test.ts b/tests/src/rmrk/setCollectionProperty.test.ts index 39bafa12fc..f19d5ed382 100644 --- a/tests/src/rmrk/setCollectionProperty.test.ts +++ b/tests/src/rmrk/setCollectionProperty.test.ts @@ -1,14 +1,16 @@ import {getApiConnection} from '../substrate/substrate-api'; import {expectTxFailure} from './util/helpers'; import {createCollection, setPropertyCollection} from './util/tx'; +import {Pallets, requirePallets} from '../util/helpers'; describe('integration test: set collection property', () => { const Alice = '//Alice'; const Bob = '//Bob'; let api: any; - before(async () => { + before(async function() { api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); }); it('set collection property', async () => { diff --git a/tests/src/rmrk/setEquippableList.test.ts b/tests/src/rmrk/setEquippableList.test.ts index d36ce98a33..5e6d3a009d 100644 --- a/tests/src/rmrk/setEquippableList.test.ts +++ b/tests/src/rmrk/setEquippableList.test.ts @@ -1,10 +1,14 @@ import {getApiConnection} from '../substrate/substrate-api'; import {expectTxFailure} from './util/helpers'; import {createCollection, createBase, setEquippableList} from './util/tx'; +import {Pallets, requirePallets} from '../util/helpers'; describe("integration test: set slot's Equippable List", () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function() { + api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); + }); const alice = '//Alice'; const bob = '//Bob'; diff --git a/tests/src/rmrk/setNftProperty.test.ts b/tests/src/rmrk/setNftProperty.test.ts index b1c8c69b0e..6b2ec7173a 100644 --- a/tests/src/rmrk/setNftProperty.test.ts +++ b/tests/src/rmrk/setNftProperty.test.ts @@ -2,10 +2,14 @@ import {getApiConnection} from '../substrate/substrate-api'; import {NftIdTuple} from './util/fetch'; import {expectTxFailure} from './util/helpers'; import {createCollection, mintNft, sendNft, setNftProperty} from './util/tx'; +import {Pallets, requirePallets} from '../util/helpers'; describe('integration test: set NFT property', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function() { + api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); + }); const alice = '//Alice'; const bob = '//Bob'; diff --git a/tests/src/rmrk/setResourcePriorities.test.ts b/tests/src/rmrk/setResourcePriorities.test.ts index 6f7f1503c7..c425abe68a 100644 --- a/tests/src/rmrk/setResourcePriorities.test.ts +++ b/tests/src/rmrk/setResourcePriorities.test.ts @@ -1,10 +1,14 @@ import {getApiConnection} from '../substrate/substrate-api'; import {expectTxFailure} from './util/helpers'; import {mintNft, createCollection, setResourcePriorities} from './util/tx'; +import {Pallets, requirePallets} from '../util/helpers'; describe('integration test: set NFT resource priorities', () => { let api: any; - before(async () => { api = await getApiConnection(); }); + before(async function() { + api = await getApiConnection(); + await requirePallets(this, [Pallets.RmrkCore]); + }); const alice = '//Alice'; const bob = '//Bob'; diff --git a/tests/src/substrate/substrate-api.ts b/tests/src/substrate/substrate-api.ts index cf6493cd73..2fba5c1e18 100644 --- a/tests/src/substrate/substrate-api.ts +++ b/tests/src/substrate/substrate-api.ts @@ -39,6 +39,10 @@ function defaultApiOptions(): ApiOptions { extrinsic: {}, payload: {}, }, + CheckMaintenance: { + extrinsic: {}, + payload: {}, + }, }, rpc: { unique: defs.unique.rpc, diff --git a/tests/src/util/helpers.ts b/tests/src/util/helpers.ts index a2c0ff054f..e6537c5035 100644 --- a/tests/src/util/helpers.ts +++ b/tests/src/util/helpers.ts @@ -28,6 +28,7 @@ import {default as usingApi, executeTransaction, submitTransactionAsync, submitT import {hexToStr, strToUTF16, utf16ToStr} from './util'; import {UpDataStructsRpcCollection, UpDataStructsCreateItemData, UpDataStructsProperty} from '@polkadot/types/lookup'; import {UpDataStructsTokenChild} from '../interfaces'; +import { Context } from 'mocha'; chai.use(chaiAsPromised); const expect = chai.expect; @@ -38,6 +39,66 @@ export type CrossAccountId = { Ethereum: string, }; +export enum Pallets { + Inflation = 'inflation', + RmrkCore = 'rmrkcore', + RmrkEquip = 'rmrkequip', + ReFungible = 'refungible', + Fungible = 'fungible', + NFT = 'nonfungible', + Scheduler = 'scheduler', + AppPromotion = 'apppromotion', +} + +export async function isUnique(): Promise { + return usingApi(async api => { + const chain = await api.rpc.system.chain(); + + return chain.eq('UNIQUE'); + }); +} + +export async function isQuartz(): Promise { + return usingApi(async api => { + const chain = await api.rpc.system.chain(); + + return chain.eq('QUARTZ'); + }); +} + +let modulesNames: any; +export function getModuleNames(api: ApiPromise): string[] { + if (typeof modulesNames === 'undefined') + modulesNames = api.runtimeMetadata.asLatest.pallets.map(m => m.name.toString().toLowerCase()); + return modulesNames; +} + +export async function missingRequiredPallets(requiredPallets: string[]): Promise { + return await usingApi(async api => { + const pallets = getModuleNames(api); + + return requiredPallets.filter(p => !pallets.includes(p)); + }); +} + +export async function checkPalletsPresence(requiredPallets: string[]): Promise { + return (await missingRequiredPallets(requiredPallets)).length == 0; +} + +export async function requirePallets(mocha: Context, requiredPallets: string[]) { + const missingPallets = await missingRequiredPallets(requiredPallets); + + if (missingPallets.length > 0) { + const skippingTestMsg = `\tSkipping test "${mocha.test?.title}".`; + const missingPalletsMsg = `\tThe following pallets are missing:\n\t- ${missingPallets.join('\n\t- ')}`; + const skipMsg = `${skippingTestMsg}\n${missingPalletsMsg}`; + + console.error('\x1b[38:5:208m%s\x1b[0m', skipMsg); + + mocha.skip(); + } +} + export function normalizeAccountId(input: string | AccountId | CrossAccountId | IKeyringPair): CrossAccountId { if (typeof input === 'string') { if (input.length >= 47) { diff --git a/tests/src/xcmTransfer.test.ts b/tests/src/xcmTransfer.test.ts index dae291f2a4..a1c6c336c8 100644 --- a/tests/src/xcmTransfer.test.ts +++ b/tests/src/xcmTransfer.test.ts @@ -32,7 +32,7 @@ const UNIQUE_CHAIN = 1000; const KARURA_CHAIN = 2000; const KARURA_PORT = '9946'; -describe('Integration test: Exchanging QTZ with Karura', () => { +describe.skip('Integration test: Exchanging QTZ with Karura', () => { let alice: IKeyringPair; before(async () => { @@ -184,4 +184,4 @@ describe('Integration test: Exchanging QTZ with Karura', () => { expect(balanceAfter > balanceBefore).to.be.true; }); }); -}); \ No newline at end of file +});