git.delta.rocks / unique-network / refs/commits / 92cf6f17adaa

difftreelog

build upgrade polkadot to v0.9.30

Yaroslav Bolyukin2022-10-20parent: #8e0e4b0.patch.diff
in: master

69 files changed

modified.docker/additional/xcm-rococo/.envdiffbeforeafterboth
--- a/.docker/additional/xcm-rococo/.env
+++ b/.docker/additional/xcm-rococo/.env
@@ -1,7 +1,7 @@
 RUST_TOOLCHAIN=nightly-2022-07-24
 UNIQUE_BRANCH="develop"
 
-POLKADOT_BUILD_BRANCH=release-v0.9.29
+POLKADOT_BUILD_BRANCH=release-v0.9.30
 
 KARURA_BUILD_BRANCH=2.9.1
 ACALA_BUILD_BRANCH=2.9.2
modified.envdiffbeforeafterboth
--- a/.env
+++ b/.env
@@ -1,5 +1,5 @@
 RUST_TOOLCHAIN=nightly-2022-07-24
-POLKADOT_BUILD_BRANCH=release-v0.9.29
+POLKADOT_BUILD_BRANCH=release-v0.9.30
 
 POLKADOT_MAINNET_BRANCH=release-v0.9.28
 STATEMINT_BUILD_BRANCH=release-parachains-v9271
modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -43,7 +43,7 @@
 checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
 dependencies = [
  "cfg-if 1.0.0",
- "cipher",
+ "cipher 0.3.0",
  "cpufeatures",
  "opaque-debug 0.3.0",
 ]
@@ -56,7 +56,7 @@
 dependencies = [
  "aead",
  "aes",
- "cipher",
+ "cipher 0.3.0",
  "ctr",
  "ghash",
  "subtle",
@@ -136,6 +136,12 @@
 ]
 
 [[package]]
+name = "array-bytes"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a913633b0c922e6b745072795f50d90ebea78ba31a57e2ac8c2fc7b50950949"
+
+[[package]]
 name = "arrayref"
 version = "0.3.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -322,9 +328,9 @@
 
 [[package]]
 name = "async-trait"
-version = "0.1.57"
+version = "0.1.58"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f"
+checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -404,7 +410,7 @@
  "cfg-if 1.0.0",
  "libc",
  "miniz_oxide",
- "object 0.29.0",
+ "object",
  "rustc-demangle",
 ]
 
@@ -433,6 +439,12 @@
 checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
 
 [[package]]
+name = "base64ct"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf"
+
+[[package]]
 name = "beef"
 version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -444,14 +456,14 @@
 [[package]]
 name = "beefy-gadget"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
+ "array-bytes",
  "async-trait",
  "beefy-primitives",
  "fnv",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
- "hex",
  "log",
  "parity-scale-codec 3.2.1",
  "parking_lot 0.12.1",
@@ -461,6 +473,7 @@
  "sc-finality-grandpa",
  "sc-keystore",
  "sc-network",
+ "sc-network-common",
  "sc-network-gossip",
  "sc-utils",
  "sp-api",
@@ -480,11 +493,11 @@
 [[package]]
 name = "beefy-gadget-rpc"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "beefy-gadget",
  "beefy-primitives",
- "futures 0.3.24",
+ "futures 0.3.25",
  "jsonrpsee",
  "log",
  "parity-scale-codec 3.2.1",
@@ -500,7 +513,7 @@
 [[package]]
 name = "beefy-merkle-tree"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "beefy-primitives",
  "sp-api",
@@ -509,7 +522,7 @@
 [[package]]
 name = "beefy-primitives"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "scale-info",
@@ -645,7 +658,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
 dependencies = [
- "block-padding 0.1.5",
+ "block-padding",
  "byte-tools",
  "byteorder",
  "generic-array 0.12.4",
@@ -657,7 +670,6 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
 dependencies = [
- "block-padding 0.2.1",
  "generic-array 0.14.6",
 ]
 
@@ -678,12 +690,6 @@
 dependencies = [
  "byte-tools",
 ]
-
-[[package]]
-name = "block-padding"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae"
 
 [[package]]
 name = "blocking"
@@ -754,9 +760,9 @@
 
 [[package]]
 name = "bumpalo"
-version = "3.11.0"
+version = "3.11.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d"
+checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
 
 [[package]]
 name = "byte-slice-cast"
@@ -882,7 +888,7 @@
 checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6"
 dependencies = [
  "cfg-if 1.0.0",
- "cipher",
+ "cipher 0.3.0",
  "cpufeatures",
  "zeroize",
 ]
@@ -895,7 +901,7 @@
 dependencies = [
  "aead",
  "chacha20",
- "cipher",
+ "cipher 0.3.0",
  "poly1305",
  "zeroize",
 ]
@@ -938,6 +944,16 @@
 ]
 
 [[package]]
+name = "cipher"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e"
+dependencies = [
+ "crypto-common",
+ "inout",
+]
+
+[[package]]
 name = "ckb-merkle-mountain-range"
 version = "0.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1018,10 +1034,20 @@
 ]
 
 [[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
 name = "comfy-table"
-version = "6.1.0"
+version = "6.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85914173c2f558d61613bfbbf1911f14e630895087a7ed2fafc0f5319e1536e7"
+checksum = "7b3d16bb3da60be2f7c7acfc438f2ae6f3496897ce68c291d0509bb67b4e248e"
 dependencies = [
  "strum",
  "strum_macros",
@@ -1100,19 +1126,21 @@
 
 [[package]]
 name = "cranelift-bforest"
-version = "0.85.3"
+version = "0.88.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "749d0d6022c9038dccf480bdde2a38d435937335bf2bb0f14e815d94517cdce8"
+checksum = "44409ccf2d0f663920cab563d2b79fcd6b2e9a2bcc6e929fef76c8f82ad6c17a"
 dependencies = [
  "cranelift-entity",
 ]
 
 [[package]]
 name = "cranelift-codegen"
-version = "0.85.3"
+version = "0.88.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e94370cc7b37bf652ccd8bb8f09bd900997f7ccf97520edfc75554bb5c4abbea"
+checksum = "98de2018ad96eb97f621f7d6b900a0cc661aec8d02ea4a50e56ecb48e5a2fcaf"
 dependencies = [
+ "arrayvec 0.7.2",
+ "bumpalo",
  "cranelift-bforest",
  "cranelift-codegen-meta",
  "cranelift-codegen-shared",
@@ -1127,33 +1155,33 @@
 
 [[package]]
 name = "cranelift-codegen-meta"
-version = "0.85.3"
+version = "0.88.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e0a3cea8fdab90e44018c5b9a1dfd460d8ee265ac354337150222a354628bdb6"
+checksum = "5287ce36e6c4758fbaf298bd1a8697ad97a4f2375a3d1b61142ea538db4877e5"
 dependencies = [
  "cranelift-codegen-shared",
 ]
 
 [[package]]
 name = "cranelift-codegen-shared"
-version = "0.85.3"
+version = "0.88.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ac72f76f2698598951ab26d8c96eaa854810e693e7dd52523958b5909fde6b2"
+checksum = "2855c24219e2f08827f3f4ffb2da92e134ae8d8ecc185b11ec8f9878cf5f588e"
 
 [[package]]
 name = "cranelift-entity"
-version = "0.85.3"
+version = "0.88.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09eaeacfcd2356fe0e66b295e8f9d59fdd1ac3ace53ba50de14d628ec902f72d"
+checksum = "0b65673279d75d34bf11af9660ae2dbd1c22e6d28f163f5c72f4e1dc56d56103"
 dependencies = [
  "serde",
 ]
 
 [[package]]
 name = "cranelift-frontend"
-version = "0.85.3"
+version = "0.88.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dba69c9980d5ffd62c18a2bde927855fcd7c8dc92f29feaf8636052662cbd99c"
+checksum = "3ed2b3d7a4751163f6c4a349205ab1b7d9c00eecf19dcea48592ef1f7688eefc"
 dependencies = [
  "cranelift-codegen",
  "log",
@@ -1163,15 +1191,15 @@
 
 [[package]]
 name = "cranelift-isle"
-version = "0.85.3"
+version = "0.88.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2920dc1e05cac40304456ed3301fde2c09bd6a9b0210bcfa2f101398d628d5b"
+checksum = "3be64cecea9d90105fc6a2ba2d003e98c867c1d6c4c86cc878f97ad9fb916293"
 
 [[package]]
 name = "cranelift-native"
-version = "0.85.3"
+version = "0.88.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f04dfa45f9b2a6f587c564d6b63388e00cd6589d2df6ea2758cf79e1a13285e6"
+checksum = "c4a03a6ac1b063e416ca4b93f6247978c991475e8271465340caa6f92f3c16a4"
 dependencies = [
  "cranelift-codegen",
  "libc",
@@ -1180,9 +1208,9 @@
 
 [[package]]
 name = "cranelift-wasm"
-version = "0.85.3"
+version = "0.88.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31a46513ae6f26f3f267d8d75b5373d555fbbd1e68681f348d99df43f747ec54"
+checksum = "c699873f7b30bc5f20dd03a796b4183e073a46616c91704792ec35e45d13f913"
 dependencies = [
  "cranelift-codegen",
  "cranelift-entity",
@@ -1306,9 +1334,9 @@
 
 [[package]]
 name = "ctor"
-version = "0.1.23"
+version = "0.1.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cdffe87e1d521a10f9696f833fe502293ea446d7f256c06128293a4119bdf4cb"
+checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
 dependencies = [
  "quote",
  "syn",
@@ -1320,7 +1348,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea"
 dependencies = [
- "cipher",
+ "cipher 0.3.0",
 ]
 
 [[package]]
@@ -1337,7 +1365,7 @@
 [[package]]
 name = "cumulus-client-cli"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "clap",
  "parity-scale-codec 3.2.1",
@@ -1352,13 +1380,13 @@
 [[package]]
 name = "cumulus-client-collator"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "cumulus-client-consensus-common",
  "cumulus-client-network",
  "cumulus-primitives-core",
  "cumulus-relay-chain-interface",
- "futures 0.3.24",
+ "futures 0.3.25",
  "parity-scale-codec 3.2.1",
  "parking_lot 0.12.1",
  "polkadot-node-primitives",
@@ -1376,12 +1404,12 @@
 [[package]]
 name = "cumulus-client-consensus-aura"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "async-trait",
  "cumulus-client-consensus-common",
  "cumulus-primitives-core",
- "futures 0.3.24",
+ "futures 0.3.25",
  "parity-scale-codec 3.2.1",
  "sc-client-api",
  "sc-consensus",
@@ -1405,12 +1433,12 @@
 [[package]]
 name = "cumulus-client-consensus-common"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "async-trait",
  "cumulus-relay-chain-interface",
  "dyn-clone",
- "futures 0.3.24",
+ "futures 0.3.25",
  "parity-scale-codec 3.2.1",
  "polkadot-primitives",
  "sc-client-api",
@@ -1426,12 +1454,12 @@
 [[package]]
 name = "cumulus-client-network"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "async-trait",
  "cumulus-relay-chain-interface",
  "derive_more",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "parity-scale-codec 3.2.1",
  "parking_lot 0.12.1",
@@ -1451,11 +1479,11 @@
 [[package]]
 name = "cumulus-client-pov-recovery"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "cumulus-primitives-core",
  "cumulus-relay-chain-interface",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "parity-scale-codec 3.2.1",
  "polkadot-node-primitives",
@@ -1475,7 +1503,7 @@
 [[package]]
 name = "cumulus-client-service"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "cumulus-client-cli",
  "cumulus-client-collator",
@@ -1503,7 +1531,7 @@
 [[package]]
 name = "cumulus-pallet-aura-ext"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "frame-executive",
  "frame-support",
@@ -1521,7 +1549,7 @@
 [[package]]
 name = "cumulus-pallet-dmp-queue"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "cumulus-primitives-core",
  "frame-support",
@@ -1539,7 +1567,7 @@
 [[package]]
 name = "cumulus-pallet-parachain-system"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "bytes",
  "cumulus-pallet-parachain-system-proc-macro",
@@ -1570,7 +1598,7 @@
 [[package]]
 name = "cumulus-pallet-parachain-system-proc-macro"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
@@ -1581,7 +1609,7 @@
 [[package]]
 name = "cumulus-pallet-xcm"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "cumulus-primitives-core",
  "frame-support",
@@ -1598,7 +1626,7 @@
 [[package]]
 name = "cumulus-pallet-xcmp-queue"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "cumulus-primitives-core",
  "frame-support",
@@ -1616,7 +1644,7 @@
 [[package]]
 name = "cumulus-primitives-core"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "frame-support",
  "parity-scale-codec 3.2.1",
@@ -1632,7 +1660,7 @@
 [[package]]
 name = "cumulus-primitives-parachain-inherent"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "async-trait",
  "cumulus-primitives-core",
@@ -1655,10 +1683,10 @@
 [[package]]
 name = "cumulus-primitives-timestamp"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "cumulus-primitives-core",
- "futures 0.3.24",
+ "futures 0.3.25",
  "parity-scale-codec 3.2.1",
  "sp-inherents",
  "sp-std",
@@ -1668,7 +1696,7 @@
 [[package]]
 name = "cumulus-primitives-utility"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "cumulus-primitives-core",
  "frame-support",
@@ -1688,12 +1716,12 @@
 [[package]]
 name = "cumulus-relay-chain-inprocess-interface"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "async-trait",
  "cumulus-primitives-core",
  "cumulus-relay-chain-interface",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "polkadot-cli",
  "polkadot-client",
@@ -1717,12 +1745,12 @@
 [[package]]
 name = "cumulus-relay-chain-interface"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "async-trait",
  "cumulus-primitives-core",
  "derive_more",
- "futures 0.3.24",
+ "futures 0.3.25",
  "jsonrpsee-core",
  "parity-scale-codec 3.2.1",
  "parking_lot 0.12.1",
@@ -1740,13 +1768,13 @@
 [[package]]
 name = "cumulus-relay-chain-rpc-interface"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "async-trait",
  "backoff",
  "cumulus-primitives-core",
  "cumulus-relay-chain-interface",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "jsonrpsee",
  "parity-scale-codec 3.2.1",
@@ -1767,7 +1795,7 @@
 [[package]]
 name = "cumulus-test-relay-sproof-builder"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "cumulus-primitives-core",
  "parity-scale-codec 3.2.1",
@@ -1817,6 +1845,50 @@
 ]
 
 [[package]]
+name = "cxx"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f83d0ebf42c6eafb8d7c52f7e5f2d3003b89c7aa4fd2b79229209459a849af8"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07d050484b55975889284352b0ffc2ecbda25c0c55978017c132b29ba0818a86"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99d2199b00553eda8012dfec8d3b1c75fce747cf27c169a270b3b99e3448ab78"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcb67a6de1f602736dd7eaead0080cf3435df806c61b24b13328db128c58868f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
 name = "data-encoding"
 version = "2.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1963,9 +2035,9 @@
 
 [[package]]
 name = "dtoa"
-version = "1.0.3"
+version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6053ff46b5639ceb91756a85a4c8914668393a03170efd79c8884a529d80656"
+checksum = "f8a6eee2d5d0d113f015688310da018bd1d864d86bd567c8fca9c266889e1bfa"
 
 [[package]]
 name = "dyn-clonable"
@@ -2180,7 +2252,7 @@
  "rlp-derive",
  "scale-info",
  "serde",
- "sha3 0.10.5",
+ "sha3",
  "triehash",
 ]
 
@@ -2209,7 +2281,7 @@
 [[package]]
 name = "evm"
 version = "0.35.0"
-source = "git+https://github.com/uniquenetwork/evm?branch=unique-polkadot-v0.9.29#e9252ed42dc26fc85b6703b1ba50660a08209e55"
+source = "git+https://github.com/uniquenetwork/evm?branch=unique-polkadot-v0.9.30#e9252ed42dc26fc85b6703b1ba50660a08209e55"
 dependencies = [
  "auto_impl",
  "environmental",
@@ -2223,7 +2295,7 @@
  "rlp",
  "scale-info",
  "serde",
- "sha3 0.10.5",
+ "sha3",
 ]
 
 [[package]]
@@ -2249,14 +2321,14 @@
  "hex",
  "proc-macro2",
  "quote",
- "sha3 0.10.5",
+ "sha3",
  "syn",
 ]
 
 [[package]]
 name = "evm-core"
 version = "0.35.0"
-source = "git+https://github.com/uniquenetwork/evm?branch=unique-polkadot-v0.9.29#e9252ed42dc26fc85b6703b1ba50660a08209e55"
+source = "git+https://github.com/uniquenetwork/evm?branch=unique-polkadot-v0.9.30#e9252ed42dc26fc85b6703b1ba50660a08209e55"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "primitive-types",
@@ -2267,7 +2339,7 @@
 [[package]]
 name = "evm-gasometer"
 version = "0.35.0"
-source = "git+https://github.com/uniquenetwork/evm?branch=unique-polkadot-v0.9.29#e9252ed42dc26fc85b6703b1ba50660a08209e55"
+source = "git+https://github.com/uniquenetwork/evm?branch=unique-polkadot-v0.9.30#e9252ed42dc26fc85b6703b1ba50660a08209e55"
 dependencies = [
  "environmental",
  "evm-core",
@@ -2278,13 +2350,13 @@
 [[package]]
 name = "evm-runtime"
 version = "0.35.0"
-source = "git+https://github.com/uniquenetwork/evm?branch=unique-polkadot-v0.9.29#e9252ed42dc26fc85b6703b1ba50660a08209e55"
+source = "git+https://github.com/uniquenetwork/evm?branch=unique-polkadot-v0.9.30#e9252ed42dc26fc85b6703b1ba50660a08209e55"
 dependencies = [
  "auto_impl",
  "environmental",
  "evm-core",
  "primitive-types",
- "sha3 0.10.5",
+ "sha3",
 ]
 
 [[package]]
@@ -2293,7 +2365,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
 ]
 
 [[package]]
@@ -2370,7 +2442,7 @@
 [[package]]
 name = "fc-consensus"
 version = "2.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.29#852f994e82f9e5718dde75e8c4d877db5a44dd45"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.30#0ba6acff2003ee4798050120d006242949968dac"
 dependencies = [
  "async-trait",
  "fc-db",
@@ -2389,7 +2461,7 @@
 [[package]]
 name = "fc-db"
 version = "2.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.29#852f994e82f9e5718dde75e8c4d877db5a44dd45"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.30#0ba6acff2003ee4798050120d006242949968dac"
 dependencies = [
  "fp-storage",
  "kvdb-rocksdb",
@@ -2405,12 +2477,12 @@
 [[package]]
 name = "fc-mapping-sync"
 version = "2.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.29#852f994e82f9e5718dde75e8c4d877db5a44dd45"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.30#0ba6acff2003ee4798050120d006242949968dac"
 dependencies = [
  "fc-db",
  "fp-consensus",
  "fp-rpc",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "log",
  "sc-client-api",
@@ -2422,7 +2494,7 @@
 [[package]]
 name = "fc-rpc"
 version = "2.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.29#852f994e82f9e5718dde75e8c4d877db5a44dd45"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.30#0ba6acff2003ee4798050120d006242949968dac"
 dependencies = [
  "ethereum",
  "ethereum-types",
@@ -2431,7 +2503,7 @@
  "fc-rpc-core",
  "fp-rpc",
  "fp-storage",
- "futures 0.3.24",
+ "futures 0.3.25",
  "hex",
  "jsonrpsee",
  "libsecp256k1",
@@ -2464,7 +2536,7 @@
 [[package]]
 name = "fc-rpc-core"
 version = "1.1.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.29#852f994e82f9e5718dde75e8c4d877db5a44dd45"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.30#0ba6acff2003ee4798050120d006242949968dac"
 dependencies = [
  "ethereum",
  "ethereum-types",
@@ -2506,14 +2578,14 @@
 
 [[package]]
 name = "filetime"
-version = "0.2.17"
+version = "0.2.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c"
+checksum = "4b9663d381d07ae25dc88dbdf27df458faa83a9b25336bcac83d5e452b5fc9d3"
 dependencies = [
  "cfg-if 1.0.0",
  "libc",
  "redox_syscall",
- "windows-sys",
+ "windows-sys 0.42.0",
 ]
 
 [[package]]
@@ -2523,7 +2595,7 @@
 checksum = "b22349c6a11563a202d95772a68e0fcf56119e74ea8a2a19cf2301460fcd0df5"
 dependencies = [
  "either",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "log",
  "num-traits",
@@ -2587,7 +2659,7 @@
 [[package]]
 name = "fork-tree"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "parity-scale-codec 3.2.1",
 ]
@@ -2604,7 +2676,7 @@
 [[package]]
 name = "fp-consensus"
 version = "2.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.29#852f994e82f9e5718dde75e8c4d877db5a44dd45"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.30#0ba6acff2003ee4798050120d006242949968dac"
 dependencies = [
  "ethereum",
  "parity-scale-codec 3.2.1",
@@ -2616,7 +2688,7 @@
 [[package]]
 name = "fp-evm"
 version = "3.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.29#852f994e82f9e5718dde75e8c4d877db5a44dd45"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.30#0ba6acff2003ee4798050120d006242949968dac"
 dependencies = [
  "evm",
  "frame-support",
@@ -2630,7 +2702,7 @@
 [[package]]
 name = "fp-evm-mapping"
 version = "0.1.0"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.29#852f994e82f9e5718dde75e8c4d877db5a44dd45"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.30#0ba6acff2003ee4798050120d006242949968dac"
 dependencies = [
  "frame-support",
  "sp-core",
@@ -2639,7 +2711,7 @@
 [[package]]
 name = "fp-rpc"
 version = "3.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.29#852f994e82f9e5718dde75e8c4d877db5a44dd45"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.30#0ba6acff2003ee4798050120d006242949968dac"
 dependencies = [
  "ethereum",
  "ethereum-types",
@@ -2656,7 +2728,7 @@
 [[package]]
 name = "fp-self-contained"
 version = "1.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.29#852f994e82f9e5718dde75e8c4d877db5a44dd45"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.30#0ba6acff2003ee4798050120d006242949968dac"
 dependencies = [
  "ethereum",
  "frame-support",
@@ -2672,7 +2744,7 @@
 [[package]]
 name = "fp-storage"
 version = "2.0.0"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.29#852f994e82f9e5718dde75e8c4d877db5a44dd45"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.30#0ba6acff2003ee4798050120d006242949968dac"
 dependencies = [
  "parity-scale-codec 3.2.1",
 ]
@@ -2680,7 +2752,7 @@
 [[package]]
 name = "frame-benchmarking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -2703,9 +2775,10 @@
 [[package]]
 name = "frame-benchmarking-cli"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "Inflector",
+ "array-bytes",
  "chrono",
  "clap",
  "comfy-table",
@@ -2715,7 +2788,6 @@
  "gethostname",
  "handlebars",
  "hash-db",
- "hex",
  "itertools",
  "kvdb",
  "lazy_static",
@@ -2754,7 +2826,7 @@
 [[package]]
 name = "frame-election-provider-solution-type"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
@@ -2765,7 +2837,7 @@
 [[package]]
 name = "frame-election-provider-support"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-election-provider-solution-type",
  "frame-support",
@@ -2781,7 +2853,7 @@
 [[package]]
 name = "frame-executive"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -2810,7 +2882,7 @@
 [[package]]
 name = "frame-support"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "bitflags",
  "frame-metadata",
@@ -2835,13 +2907,14 @@
  "sp-state-machine",
  "sp-std",
  "sp-tracing",
+ "sp-weights",
  "tt-call",
 ]
 
 [[package]]
 name = "frame-support-procedural"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "Inflector",
  "cfg-expr",
@@ -2855,7 +2928,7 @@
 [[package]]
 name = "frame-support-procedural-tools"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-support-procedural-tools-derive",
  "proc-macro-crate",
@@ -2867,7 +2940,7 @@
 [[package]]
 name = "frame-support-procedural-tools-derive"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2877,7 +2950,7 @@
 [[package]]
 name = "frame-system"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-support",
  "log",
@@ -2889,12 +2962,13 @@
  "sp-runtime",
  "sp-std",
  "sp-version",
+ "sp-weights",
 ]
 
 [[package]]
 name = "frame-system-benchmarking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -2909,7 +2983,7 @@
 [[package]]
 name = "frame-system-rpc-runtime-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "sp-api",
@@ -2918,7 +2992,7 @@
 [[package]]
 name = "frame-try-runtime"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-support",
  "parity-scale-codec 3.2.1",
@@ -2981,9 +3055,9 @@
 
 [[package]]
 name = "futures"
-version = "0.3.24"
+version = "0.3.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c"
+checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0"
 dependencies = [
  "futures-channel",
  "futures-core",
@@ -2996,9 +3070,9 @@
 
 [[package]]
 name = "futures-channel"
-version = "0.3.24"
+version = "0.3.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050"
+checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed"
 dependencies = [
  "futures-core",
  "futures-sink",
@@ -3006,15 +3080,15 @@
 
 [[package]]
 name = "futures-core"
-version = "0.3.24"
+version = "0.3.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf"
+checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
 
 [[package]]
 name = "futures-executor"
-version = "0.3.24"
+version = "0.3.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab"
+checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2"
 dependencies = [
  "futures-core",
  "futures-task",
@@ -3024,9 +3098,9 @@
 
 [[package]]
 name = "futures-io"
-version = "0.3.24"
+version = "0.3.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68"
+checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb"
 
 [[package]]
 name = "futures-lite"
@@ -3045,9 +3119,9 @@
 
 [[package]]
 name = "futures-macro"
-version = "0.3.24"
+version = "0.3.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17"
+checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -3067,15 +3141,15 @@
 
 [[package]]
 name = "futures-sink"
-version = "0.3.24"
+version = "0.3.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56"
+checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9"
 
 [[package]]
 name = "futures-task"
-version = "0.3.24"
+version = "0.3.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1"
+checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea"
 
 [[package]]
 name = "futures-timer"
@@ -3085,9 +3159,9 @@
 
 [[package]]
 name = "futures-util"
-version = "0.3.24"
+version = "0.3.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90"
+checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6"
 dependencies = [
  "futures 0.1.31",
  "futures-channel",
@@ -3248,9 +3322,9 @@
 
 [[package]]
 name = "handlebars"
-version = "4.3.4"
+version = "4.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56b224eaa4987c03c30b251de7ef0c15a6a59f34222905850dbc3026dfb24d5f"
+checksum = "433e4ab33f1213cdc25b5fa45c76881240cfe79284cf2b395e8b9e312a30a2fd"
 dependencies = [
  "log",
  "pest",
@@ -3277,15 +3351,6 @@
 
 [[package]]
 name = "hashbrown"
-version = "0.11.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
-dependencies = [
- "ahash",
-]
-
-[[package]]
-name = "hashbrown"
 version = "0.12.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
@@ -3376,7 +3441,7 @@
 dependencies = [
  "bytes",
  "fnv",
- "itoa 1.0.3",
+ "itoa",
 ]
 
 [[package]]
@@ -3423,7 +3488,7 @@
  "http-body",
  "httparse",
  "httpdate",
- "itoa 1.0.3",
+ "itoa",
  "pin-project-lite 0.2.9",
  "socket2",
  "tokio",
@@ -3449,18 +3514,29 @@
 
 [[package]]
 name = "iana-time-zone"
-version = "0.1.50"
+version = "0.1.51"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd911b35d940d2bd0bea0f9100068e5b97b51a1cbe13d13382f132e0365257a0"
+checksum = "f5a6ef98976b22b3b7f2f3a806f858cb862044cfa66805aa3ad84cb3d3b785ed"
 dependencies = [
  "android_system_properties",
  "core-foundation-sys",
+ "iana-time-zone-haiku",
  "js-sys",
  "wasm-bindgen",
  "winapi",
 ]
 
 [[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
 name = "idna"
 version = "0.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3500,7 +3576,7 @@
  "async-io",
  "core-foundation",
  "fnv",
- "futures 0.3.24",
+ "futures 0.3.25",
  "if-addrs",
  "ipnet",
  "log",
@@ -3554,11 +3630,20 @@
 checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
 dependencies = [
  "autocfg",
- "hashbrown 0.12.3",
+ "hashbrown",
  "serde",
 ]
 
 [[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "generic-array 0.14.6",
+]
+
+[[package]]
 name = "instant"
 version = "0.1.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3584,12 +3669,6 @@
 
 [[package]]
 name = "io-lifetimes"
-version = "0.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec58677acfea8a15352d42fc87d11d63596ade9239e0a7c9352914417515dbe6"
-
-[[package]]
-name = "io-lifetimes"
 version = "0.7.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1ea37f355c05dde75b84bba2d767906ad522e97cd9e2eef2be7a4ab7fb442c06"
@@ -3626,18 +3705,12 @@
 dependencies = [
  "either",
 ]
-
-[[package]]
-name = "itoa"
-version = "0.4.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
 
 [[package]]
 name = "itoa"
-version = "1.0.3"
+version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754"
+checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
 
 [[package]]
 name = "jobserver"
@@ -3821,8 +3894,8 @@
 
 [[package]]
 name = "kusama-runtime"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "beefy-primitives",
  "bitvec 1.0.1",
@@ -3849,6 +3922,7 @@
  "pallet-election-provider-multi-phase",
  "pallet-election-provider-support-benchmarking",
  "pallet-elections-phragmen",
+ "pallet-fast-unstake",
  "pallet-gilt",
  "pallet-grandpa",
  "pallet-identity",
@@ -3914,8 +3988,8 @@
 
 [[package]]
 name = "kusama-runtime-constants"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "frame-support",
  "polkadot-primitives",
@@ -3986,9 +4060,9 @@
 
 [[package]]
 name = "libc"
-version = "0.2.134"
+version = "0.2.135"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "329c933548736bc49fd575ee68c89e8be4d260064184389a5b77517cddd99ffb"
+checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c"
 
 [[package]]
 name = "libloading"
@@ -4023,7 +4097,7 @@
 checksum = "81327106887e42d004fbdab1fef93675be2e2e07c1b95fce45e2cc813485611d"
 dependencies = [
  "bytes",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "getrandom 0.2.7",
  "instant",
@@ -4067,15 +4141,15 @@
 checksum = "4decc51f3573653a9f4ecacb31b1b922dd20c25a6322bb15318ec04287ec46f9"
 dependencies = [
  "async-trait",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "instant",
  "libp2p-core",
  "libp2p-request-response",
  "libp2p-swarm",
  "log",
- "prost",
- "prost-build",
+ "prost 0.10.4",
+ "prost-build 0.10.4",
  "rand 0.8.5",
 ]
 
@@ -4090,7 +4164,7 @@
  "ed25519-dalek",
  "either",
  "fnv",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "instant",
  "lazy_static",
@@ -4101,8 +4175,8 @@
  "multistream-select",
  "parking_lot 0.12.1",
  "pin-project",
- "prost",
- "prost-build",
+ "prost 0.10.4",
+ "prost-build 0.10.4",
  "rand 0.8.5",
  "ring",
  "rw-stream-sink",
@@ -4121,7 +4195,7 @@
 checksum = "d0183dc2a3da1fbbf85e5b6cf51217f55b14f5daea0c455a9536eef646bfec71"
 dependencies = [
  "flate2",
- "futures 0.3.24",
+ "futures 0.3.25",
  "libp2p-core",
 ]
 
@@ -4132,7 +4206,7 @@
 checksum = "6cbf54723250fa5d521383be789bf60efdabe6bacfb443f87da261019a49b4b5"
 dependencies = [
  "async-std-resolver",
- "futures 0.3.24",
+ "futures 0.3.25",
  "libp2p-core",
  "log",
  "parking_lot 0.12.1",
@@ -4148,12 +4222,12 @@
 dependencies = [
  "cuckoofilter",
  "fnv",
- "futures 0.3.24",
+ "futures 0.3.25",
  "libp2p-core",
  "libp2p-swarm",
  "log",
- "prost",
- "prost-build",
+ "prost 0.10.4",
+ "prost-build 0.10.4",
  "rand 0.7.3",
  "smallvec",
 ]
@@ -4169,15 +4243,15 @@
  "byteorder",
  "bytes",
  "fnv",
- "futures 0.3.24",
+ "futures 0.3.25",
  "hex_fmt",
  "instant",
  "libp2p-core",
  "libp2p-swarm",
  "log",
  "prometheus-client",
- "prost",
- "prost-build",
+ "prost 0.10.4",
+ "prost-build 0.10.4",
  "rand 0.7.3",
  "regex",
  "sha2 0.10.6",
@@ -4193,14 +4267,14 @@
 checksum = "c50b585518f8efd06f93ac2f976bd672e17cdac794644b3117edd078e96bda06"
 dependencies = [
  "asynchronous-codec",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "libp2p-core",
  "libp2p-swarm",
  "log",
  "lru 0.7.8",
- "prost",
- "prost-build",
+ "prost 0.10.4",
+ "prost-build 0.10.4",
  "prost-codec",
  "smallvec",
  "thiserror",
@@ -4218,14 +4292,14 @@
  "bytes",
  "either",
  "fnv",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "instant",
  "libp2p-core",
  "libp2p-swarm",
  "log",
- "prost",
- "prost-build",
+ "prost 0.10.4",
+ "prost-build 0.10.4",
  "rand 0.7.3",
  "sha2 0.10.6",
  "smallvec",
@@ -4244,7 +4318,7 @@
  "async-io",
  "data-encoding",
  "dns-parser",
- "futures 0.3.24",
+ "futures 0.3.25",
  "if-watch",
  "lazy_static",
  "libp2p-core",
@@ -4280,7 +4354,7 @@
 dependencies = [
  "asynchronous-codec",
  "bytes",
- "futures 0.3.24",
+ "futures 0.3.25",
  "libp2p-core",
  "log",
  "nohash-hasher",
@@ -4298,12 +4372,12 @@
 dependencies = [
  "bytes",
  "curve25519-dalek 3.2.0",
- "futures 0.3.24",
+ "futures 0.3.25",
  "lazy_static",
  "libp2p-core",
  "log",
- "prost",
- "prost-build",
+ "prost 0.10.4",
+ "prost-build 0.10.4",
  "rand 0.8.5",
  "sha2 0.10.6",
  "snow",
@@ -4318,7 +4392,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "100a6934ae1dbf8a693a4e7dd1d730fd60b774dafc45688ed63b554497c6c925"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "instant",
  "libp2p-core",
@@ -4336,27 +4410,27 @@
 dependencies = [
  "asynchronous-codec",
  "bytes",
- "futures 0.3.24",
+ "futures 0.3.25",
  "libp2p-core",
  "log",
- "prost",
- "prost-build",
+ "prost 0.10.4",
+ "prost-build 0.10.4",
  "unsigned-varint",
  "void",
 ]
 
 [[package]]
 name = "libp2p-pnet"
-version = "0.22.0"
+version = "0.22.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f1a458bbda880107b5b36fcb9b5a1ef0c329685da0e203ed692a8ebe64cc92c"
+checksum = "1a5a702574223aa55d8878bdc8bf55c84a6086f87ddaddc28ce730b4caa81538"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "log",
  "pin-project",
- "rand 0.7.3",
+ "rand 0.8.5",
  "salsa20",
- "sha3 0.9.1",
+ "sha3",
 ]
 
 [[package]]
@@ -4368,15 +4442,15 @@
  "asynchronous-codec",
  "bytes",
  "either",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "instant",
  "libp2p-core",
  "libp2p-swarm",
  "log",
  "pin-project",
- "prost",
- "prost-build",
+ "prost 0.10.4",
+ "prost-build 0.10.4",
  "prost-codec",
  "rand 0.8.5",
  "smallvec",
@@ -4393,14 +4467,14 @@
 dependencies = [
  "asynchronous-codec",
  "bimap",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "instant",
  "libp2p-core",
  "libp2p-swarm",
  "log",
- "prost",
- "prost-build",
+ "prost 0.10.4",
+ "prost-build 0.10.4",
  "rand 0.8.5",
  "sha2 0.10.6",
  "thiserror",
@@ -4416,7 +4490,7 @@
 dependencies = [
  "async-trait",
  "bytes",
- "futures 0.3.24",
+ "futures 0.3.25",
  "instant",
  "libp2p-core",
  "libp2p-swarm",
@@ -4434,7 +4508,7 @@
 dependencies = [
  "either",
  "fnv",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "instant",
  "libp2p-core",
@@ -4463,7 +4537,7 @@
 checksum = "8a6771dc19aa3c65d6af9a8c65222bfc8fcd446630ddca487acd161fa6096f3b"
 dependencies = [
  "async-io",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "if-watch",
  "ipnet",
@@ -4480,7 +4554,7 @@
 checksum = "d125e3e5f0d58f3c6ac21815b20cf4b6a88b8db9dc26368ea821838f4161fd4d"
 dependencies = [
  "async-std",
- "futures 0.3.24",
+ "futures 0.3.25",
  "libp2p-core",
  "log",
 ]
@@ -4491,7 +4565,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ec894790eec3c1608f8d1a8a0bdf0dbeb79ed4de2dce964222011c2896dfa05a"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "js-sys",
  "libp2p-core",
  "parity-send-wrapper",
@@ -4506,7 +4580,7 @@
 checksum = "9808e57e81be76ff841c106b4c5974fb4d41a233a7bdd2afbf1687ac6def3818"
 dependencies = [
  "either",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-rustls",
  "libp2p-core",
  "log",
@@ -4524,7 +4598,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c6dea686217a06072033dc025631932810e2f6ad784e4fafa42e27d311c7a81c"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "libp2p-core",
  "parking_lot 0.12.1",
  "thiserror",
@@ -4606,6 +4680,15 @@
 ]
 
 [[package]]
+name = "link-cplusplus"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369"
+dependencies = [
+ "cc",
+]
+
+[[package]]
 name = "linked-hash-map"
 version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4632,12 +4715,6 @@
 
 [[package]]
 name = "linux-raw-sys"
-version = "0.0.42"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5284f00d480e1c39af34e72f8ad60b94f47007e3481cd3b731c1d67190ddc7b7"
-
-[[package]]
-name = "linux-raw-sys"
 version = "0.0.46"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d"
@@ -4678,7 +4755,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a"
 dependencies = [
- "hashbrown 0.12.3",
+ "hashbrown",
 ]
 
 [[package]]
@@ -4687,7 +4764,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909"
 dependencies = [
- "hashbrown 0.12.3",
+ "hashbrown",
 ]
 
 [[package]]
@@ -4766,11 +4843,11 @@
 
 [[package]]
 name = "memfd"
-version = "0.4.1"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6627dc657574b49d6ad27105ed671822be56e0d2547d413bfbf3e8d8fa92e7a"
+checksum = "480b5a5de855d11ff13195950bdc8b98b5e942ef47afc447f6615cdcc4e15d80"
 dependencies = [
- "libc",
+ "rustix",
 ]
 
 [[package]]
@@ -4798,7 +4875,7 @@
 checksum = "6566c70c1016f525ced45d7b7f97730a2bafb037c788211d0c186ef5b2189f0a"
 dependencies = [
  "hash-db",
- "hashbrown 0.12.3",
+ "hashbrown",
  "parity-util-mem",
 ]
 
@@ -4813,9 +4890,9 @@
 
 [[package]]
 name = "memory_units"
-version = "0.3.0"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882"
+checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3"
 
 [[package]]
 name = "merlin"
@@ -4835,7 +4912,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "69672161530e8aeca1d1400fbf3f1a1747ff60ea604265a4e906c2442df20532"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "rand 0.8.5",
  "thrift",
 ]
@@ -4864,14 +4941,8 @@
  "libc",
  "log",
  "wasi 0.11.0+wasi-snapshot-preview1",
- "windows-sys",
+ "windows-sys 0.36.1",
 ]
-
-[[package]]
-name = "more-asserts"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389"
 
 [[package]]
 name = "multiaddr"
@@ -4915,7 +4986,7 @@
  "digest 0.10.5",
  "multihash-derive",
  "sha2 0.10.6",
- "sha3 0.10.5",
+ "sha3",
  "unsigned-varint",
 ]
 
@@ -4946,7 +5017,7 @@
 checksum = "363a84be6453a70e63513660f4894ef815daf88e3356bffcda9ca27d810ce83b"
 dependencies = [
  "bytes",
- "futures 0.3.24",
+ "futures 0.3.25",
  "log",
  "pin-project",
  "smallvec",
@@ -5042,7 +5113,7 @@
 checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6"
 dependencies = [
  "bytes",
- "futures 0.3.24",
+ "futures 0.3.25",
  "log",
  "netlink-packet-core",
  "netlink-sys",
@@ -5058,7 +5129,7 @@
 dependencies = [
  "async-io",
  "bytes",
- "futures 0.3.24",
+ "futures 0.3.25",
  "libc",
  "log",
 ]
@@ -5108,6 +5179,17 @@
 ]
 
 [[package]]
+name = "num-bigint"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
 name = "num-complex"
 version = "0.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -5118,12 +5200,12 @@
 
 [[package]]
 name = "num-format"
-version = "0.4.0"
+version = "0.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bafe4179722c2894288ee77a9f044f02811c86af699344c498b0840c698a2465"
+checksum = "54b862ff8df690cf089058c98b183676a7ed0f974cc08b426800093227cbff3b"
 dependencies = [
- "arrayvec 0.4.12",
- "itoa 0.4.8",
+ "arrayvec 0.7.2",
+ "itoa",
 ]
 
 [[package]]
@@ -5143,7 +5225,7 @@
 checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"
 dependencies = [
  "autocfg",
- "num-bigint",
+ "num-bigint 0.2.6",
  "num-integer",
  "num-traits",
 ]
@@ -5155,6 +5237,7 @@
 checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
 dependencies = [
  "autocfg",
+ "num-bigint 0.4.3",
  "num-integer",
  "num-traits",
 ]
@@ -5190,22 +5273,13 @@
 
 [[package]]
 name = "object"
-version = "0.28.4"
+version = "0.29.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424"
+checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53"
 dependencies = [
  "crc32fast",
- "hashbrown 0.11.2",
+ "hashbrown",
  "indexmap",
- "memchr",
-]
-
-[[package]]
-name = "object"
-version = "0.29.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53"
-dependencies = [
  "memchr",
 ]
 
@@ -5217,7 +5291,7 @@
 
 [[package]]
 name = "opal-runtime"
-version = "0.9.29"
+version = "0.9.30"
 dependencies = [
  "app-promotion-rpc",
  "cumulus-pallet-aura-ext",
@@ -5329,11 +5403,11 @@
 [[package]]
 name = "orchestra"
 version = "0.0.1"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "async-trait",
  "dyn-clonable",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "orchestra-proc-macro",
  "pin-project",
@@ -5345,7 +5419,7 @@
 [[package]]
 name = "orchestra-proc-macro"
 version = "0.0.1"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "expander 0.0.6",
  "itertools",
@@ -5368,7 +5442,7 @@
 [[package]]
 name = "orml-tokens"
 version = "0.4.1-dev"
-source = "git+https://github.com/UniqueNetwork/open-runtime-module-library?branch=polkadot-v0.9.29#2caeb6621a59cbf37829d6a80bc2b89195959d45"
+source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=polkadot-v0.9.30#4020ff64cfcad3dcc7f4f090cc9bc7699a78cc9c"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5383,7 +5457,7 @@
 [[package]]
 name = "orml-traits"
 version = "0.4.1-dev"
-source = "git+https://github.com/UniqueNetwork/open-runtime-module-library?branch=polkadot-v0.9.29#2caeb6621a59cbf37829d6a80bc2b89195959d45"
+source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=polkadot-v0.9.30#4020ff64cfcad3dcc7f4f090cc9bc7699a78cc9c"
 dependencies = [
  "frame-support",
  "impl-trait-for-tuples",
@@ -5401,7 +5475,7 @@
 [[package]]
 name = "orml-utilities"
 version = "0.4.1-dev"
-source = "git+https://github.com/UniqueNetwork/open-runtime-module-library?branch=polkadot-v0.9.29#2caeb6621a59cbf37829d6a80bc2b89195959d45"
+source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=polkadot-v0.9.30#4020ff64cfcad3dcc7f4f090cc9bc7699a78cc9c"
 dependencies = [
  "frame-support",
  "parity-scale-codec 3.2.1",
@@ -5415,7 +5489,7 @@
 [[package]]
 name = "orml-vesting"
 version = "0.4.1-dev"
-source = "git+https://github.com/UniqueNetwork/open-runtime-module-library?branch=polkadot-v0.9.29#2caeb6621a59cbf37829d6a80bc2b89195959d45"
+source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=polkadot-v0.9.30#4020ff64cfcad3dcc7f4f090cc9bc7699a78cc9c"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5430,7 +5504,7 @@
 [[package]]
 name = "orml-xcm-support"
 version = "0.4.1-dev"
-source = "git+https://github.com/UniqueNetwork/open-runtime-module-library?branch=polkadot-v0.9.29#2caeb6621a59cbf37829d6a80bc2b89195959d45"
+source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=polkadot-v0.9.30#4020ff64cfcad3dcc7f4f090cc9bc7699a78cc9c"
 dependencies = [
  "frame-support",
  "orml-traits",
@@ -5444,7 +5518,7 @@
 [[package]]
 name = "orml-xtokens"
 version = "0.4.1-dev"
-source = "git+https://github.com/UniqueNetwork/open-runtime-module-library?branch=polkadot-v0.9.29#2caeb6621a59cbf37829d6a80bc2b89195959d45"
+source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=polkadot-v0.9.30#4020ff64cfcad3dcc7f4f090cc9bc7699a78cc9c"
 dependencies = [
  "cumulus-primitives-core",
  "frame-support",
@@ -5505,7 +5579,7 @@
 [[package]]
 name = "pallet-aura"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5521,7 +5595,7 @@
 [[package]]
 name = "pallet-authority-discovery"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5537,7 +5611,7 @@
 [[package]]
 name = "pallet-authorship"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5552,7 +5626,7 @@
 [[package]]
 name = "pallet-babe"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5576,7 +5650,7 @@
 [[package]]
 name = "pallet-bags-list"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -5596,7 +5670,7 @@
 [[package]]
 name = "pallet-balances"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5611,7 +5685,7 @@
 [[package]]
 name = "pallet-base-fee"
 version = "1.0.0"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.29#852f994e82f9e5718dde75e8c4d877db5a44dd45"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.30#0ba6acff2003ee4798050120d006242949968dac"
 dependencies = [
  "fp-evm",
  "frame-support",
@@ -5626,7 +5700,7 @@
 [[package]]
 name = "pallet-beefy"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "beefy-primitives",
  "frame-support",
@@ -5642,13 +5716,13 @@
 [[package]]
 name = "pallet-beefy-mmr"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
+ "array-bytes",
  "beefy-merkle-tree",
  "beefy-primitives",
  "frame-support",
  "frame-system",
- "hex",
  "log",
  "pallet-beefy",
  "pallet-mmr",
@@ -5665,7 +5739,7 @@
 [[package]]
 name = "pallet-bounties"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5683,7 +5757,7 @@
 [[package]]
 name = "pallet-child-bounties"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5702,7 +5776,7 @@
 [[package]]
 name = "pallet-collective"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5756,7 +5830,7 @@
 [[package]]
 name = "pallet-democracy"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5772,13 +5846,14 @@
 [[package]]
 name = "pallet-election-provider-multi-phase"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
  "frame-support",
  "frame-system",
  "log",
+ "pallet-election-provider-support-benchmarking",
  "parity-scale-codec 3.2.1",
  "rand 0.7.3",
  "scale-info",
@@ -5795,7 +5870,7 @@
 [[package]]
 name = "pallet-election-provider-support-benchmarking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -5808,7 +5883,7 @@
 [[package]]
 name = "pallet-elections-phragmen"
 version = "5.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5826,7 +5901,7 @@
 [[package]]
 name = "pallet-ethereum"
 version = "4.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.29#852f994e82f9e5718dde75e8c4d877db5a44dd45"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.30#0ba6acff2003ee4798050120d006242949968dac"
 dependencies = [
  "ethereum",
  "ethereum-types",
@@ -5846,7 +5921,7 @@
  "rlp",
  "scale-info",
  "serde",
- "sha3 0.10.5",
+ "sha3",
  "sp-io",
  "sp-runtime",
  "sp-std",
@@ -5855,7 +5930,7 @@
 [[package]]
 name = "pallet-evm"
 version = "6.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.29#852f994e82f9e5718dde75e8c4d877db5a44dd45"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.30#0ba6acff2003ee4798050120d006242949968dac"
 dependencies = [
  "evm",
  "fp-evm",
@@ -5872,7 +5947,7 @@
  "rlp",
  "scale-info",
  "serde",
- "sha3 0.10.5",
+ "sha3",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -5957,6 +6032,27 @@
 ]
 
 [[package]]
+name = "pallet-fast-unstake"
+version = "4.0.0-dev"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
+dependencies = [
+ "frame-benchmarking",
+ "frame-election-provider-support",
+ "frame-support",
+ "frame-system",
+ "log",
+ "pallet-balances",
+ "pallet-staking",
+ "pallet-timestamp",
+ "parity-scale-codec 3.2.1",
+ "scale-info",
+ "sp-io",
+ "sp-runtime",
+ "sp-staking",
+ "sp-std",
+]
+
+[[package]]
 name = "pallet-foreign-assets"
 version = "0.1.0"
 dependencies = [
@@ -6008,7 +6104,7 @@
 [[package]]
 name = "pallet-gilt"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6023,7 +6119,7 @@
 [[package]]
 name = "pallet-grandpa"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6046,7 +6142,7 @@
 [[package]]
 name = "pallet-identity"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "enumflags2",
  "frame-benchmarking",
@@ -6062,7 +6158,7 @@
 [[package]]
 name = "pallet-im-online"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6082,7 +6178,7 @@
 [[package]]
 name = "pallet-indices"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6118,7 +6214,7 @@
 [[package]]
 name = "pallet-membership"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6135,7 +6231,7 @@
 [[package]]
 name = "pallet-mmr"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "ckb-merkle-mountain-range",
  "frame-benchmarking",
@@ -6153,7 +6249,7 @@
 [[package]]
 name = "pallet-mmr-rpc"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "jsonrpsee",
  "parity-scale-codec 3.2.1",
@@ -6168,7 +6264,7 @@
 [[package]]
 name = "pallet-multisig"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6183,7 +6279,7 @@
 [[package]]
 name = "pallet-nomination-pools"
 version = "1.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -6200,7 +6296,7 @@
 [[package]]
 name = "pallet-nomination-pools-benchmarking"
 version = "1.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -6212,6 +6308,7 @@
  "parity-scale-codec 3.2.1",
  "scale-info",
  "sp-runtime",
+ "sp-runtime-interface",
  "sp-staking",
  "sp-std",
 ]
@@ -6219,7 +6316,7 @@
 [[package]]
 name = "pallet-nomination-pools-runtime-api"
 version = "1.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "sp-api",
@@ -6251,7 +6348,7 @@
 [[package]]
 name = "pallet-offences"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -6268,7 +6365,7 @@
 [[package]]
 name = "pallet-offences-benchmarking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -6291,7 +6388,7 @@
 [[package]]
 name = "pallet-preimage"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6307,7 +6404,7 @@
 [[package]]
 name = "pallet-proxy"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6322,7 +6419,7 @@
 [[package]]
 name = "pallet-randomness-collective-flip"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -6336,7 +6433,7 @@
 [[package]]
 name = "pallet-recovery"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6415,7 +6512,7 @@
 [[package]]
 name = "pallet-scheduler"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6431,7 +6528,7 @@
 [[package]]
 name = "pallet-session"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -6452,7 +6549,7 @@
 [[package]]
 name = "pallet-session-benchmarking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6468,7 +6565,7 @@
 [[package]]
 name = "pallet-society"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -6482,7 +6579,7 @@
 [[package]]
 name = "pallet-staking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -6505,7 +6602,7 @@
 [[package]]
 name = "pallet-staking-reward-curve"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
@@ -6516,7 +6613,7 @@
 [[package]]
 name = "pallet-staking-reward-fn"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "log",
  "sp-arithmetic",
@@ -6540,7 +6637,7 @@
 [[package]]
 name = "pallet-sudo"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -6554,7 +6651,7 @@
 [[package]]
 name = "pallet-template-transaction-payment"
 version = "3.0.0"
-source = "git+https://github.com/uniquenetwork/pallet-sponsoring?branch=polkadot-v0.9.29#2917e3c58a51d3654788326197cb3e1eab7febae"
+source = "git+https://github.com/uniquenetwork/pallet-sponsoring?branch=polkadot-v0.9.30#39dd82158d6caa9d89105441bf2f7111a6e686e5"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6574,7 +6671,7 @@
 [[package]]
 name = "pallet-timestamp"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6592,7 +6689,7 @@
 [[package]]
 name = "pallet-tips"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6611,7 +6708,7 @@
 [[package]]
 name = "pallet-transaction-payment"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -6627,7 +6724,7 @@
 [[package]]
 name = "pallet-transaction-payment-rpc"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "jsonrpsee",
  "pallet-transaction-payment-rpc-runtime-api",
@@ -6642,7 +6739,7 @@
 [[package]]
 name = "pallet-transaction-payment-rpc-runtime-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "pallet-transaction-payment",
  "parity-scale-codec 3.2.1",
@@ -6653,7 +6750,7 @@
 [[package]]
 name = "pallet-treasury"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6713,7 +6810,7 @@
 [[package]]
 name = "pallet-utility"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6729,7 +6826,7 @@
 [[package]]
 name = "pallet-vesting"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6743,8 +6840,8 @@
 
 [[package]]
 name = "pallet-xcm"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -6761,8 +6858,8 @@
 
 [[package]]
 name = "pallet-xcm-benchmarks"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6779,7 +6876,7 @@
 [[package]]
 name = "parachain-info"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.29#2fa95572487cfcf8dbe6941bf93545c39d47f784"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.30#7b1fc0ed107fe42bb7e6a5dfefb586f4c3ae4328"
 dependencies = [
  "cumulus-primitives-core",
  "frame-support",
@@ -6875,7 +6972,7 @@
 dependencies = [
  "cfg-if 1.0.0",
  "ethereum-types",
- "hashbrown 0.12.3",
+ "hashbrown",
  "impl-trait-for-tuples",
  "lru 0.7.8",
  "parity-util-mem-derive",
@@ -6907,9 +7004,9 @@
 
 [[package]]
 name = "parity-wasm"
-version = "0.42.2"
+version = "0.45.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be5e13c266502aadf83426d87d81a0f5d1ef45b8027f5a471c360abfe4bfae92"
+checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304"
 
 [[package]]
 name = "parking"
@@ -6935,7 +7032,7 @@
 checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
 dependencies = [
  "lock_api",
- "parking_lot_core 0.9.3",
+ "parking_lot_core 0.9.4",
 ]
 
 [[package]]
@@ -6954,15 +7051,15 @@
 
 [[package]]
 name = "parking_lot_core"
-version = "0.9.3"
+version = "0.9.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929"
+checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0"
 dependencies = [
  "cfg-if 1.0.0",
  "libc",
  "redox_syscall",
  "smallvec",
- "windows-sys",
+ "windows-sys 0.42.0",
 ]
 
 [[package]]
@@ -7094,6 +7191,17 @@
 checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
 
 [[package]]
+name = "pkcs8"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0"
+dependencies = [
+ "der",
+ "spki",
+ "zeroize",
+]
+
+[[package]]
 name = "pkg-config"
 version = "0.3.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -7107,10 +7215,10 @@
 
 [[package]]
 name = "polkadot-approval-distribution"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "polkadot-node-network-protocol",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -7122,10 +7230,10 @@
 
 [[package]]
 name = "polkadot-availability-bitfield-distribution"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "polkadot-node-network-protocol",
  "polkadot-node-subsystem",
  "polkadot-node-subsystem-util",
@@ -7136,12 +7244,12 @@
 
 [[package]]
 name = "polkadot-availability-distribution"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "derive_more",
  "fatality",
- "futures 0.3.24",
+ "futures 0.3.25",
  "lru 0.7.8",
  "parity-scale-codec 3.2.1",
  "polkadot-erasure-coding",
@@ -7159,11 +7267,11 @@
 
 [[package]]
 name = "polkadot-availability-recovery"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "fatality",
- "futures 0.3.24",
+ "futures 0.3.25",
  "lru 0.7.8",
  "parity-scale-codec 3.2.1",
  "polkadot-erasure-coding",
@@ -7180,12 +7288,12 @@
 
 [[package]]
 name = "polkadot-cli"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "clap",
  "frame-benchmarking-cli",
- "futures 0.3.24",
+ "futures 0.3.25",
  "log",
  "polkadot-client",
  "polkadot-node-core-pvf",
@@ -7206,8 +7314,8 @@
 
 [[package]]
 name = "polkadot-client"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "beefy-primitives",
  "frame-benchmarking",
@@ -7246,12 +7354,12 @@
 
 [[package]]
 name = "polkadot-collator-protocol"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "always-assert",
  "fatality",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "polkadot-node-network-protocol",
  "polkadot-node-primitives",
@@ -7267,8 +7375,8 @@
 
 [[package]]
 name = "polkadot-core-primitives"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "parity-util-mem",
@@ -7280,12 +7388,12 @@
 
 [[package]]
 name = "polkadot-dispute-distribution"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "derive_more",
  "fatality",
- "futures 0.3.24",
+ "futures 0.3.25",
  "lru 0.7.8",
  "parity-scale-codec 3.2.1",
  "polkadot-erasure-coding",
@@ -7303,8 +7411,8 @@
 
 [[package]]
 name = "polkadot-erasure-coding"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "polkadot-node-primitives",
@@ -7317,10 +7425,10 @@
 
 [[package]]
 name = "polkadot-gossip-support"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "polkadot-node-network-protocol",
  "polkadot-node-subsystem",
@@ -7337,14 +7445,14 @@
 
 [[package]]
 name = "polkadot-network-bridge"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "always-assert",
  "async-trait",
  "bytes",
  "fatality",
- "futures 0.3.24",
+ "futures 0.3.25",
  "parity-scale-codec 3.2.1",
  "parking_lot 0.12.1",
  "polkadot-node-network-protocol",
@@ -7361,10 +7469,10 @@
 
 [[package]]
 name = "polkadot-node-collation-generation"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "parity-scale-codec 3.2.1",
  "polkadot-erasure-coding",
  "polkadot-node-primitives",
@@ -7379,12 +7487,12 @@
 
 [[package]]
 name = "polkadot-node-core-approval-voting"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "bitvec 1.0.1",
  "derive_more",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "kvdb",
  "lru 0.7.8",
@@ -7408,11 +7516,11 @@
 
 [[package]]
 name = "polkadot-node-core-av-store"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "bitvec 1.0.1",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "kvdb",
  "parity-scale-codec 3.2.1",
@@ -7428,12 +7536,12 @@
 
 [[package]]
 name = "polkadot-node-core-backing"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "bitvec 1.0.1",
  "fatality",
- "futures 0.3.24",
+ "futures 0.3.25",
  "polkadot-erasure-coding",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -7447,10 +7555,10 @@
 
 [[package]]
 name = "polkadot-node-core-bitfield-signing"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "polkadot-node-subsystem",
  "polkadot-node-subsystem-util",
  "polkadot-primitives",
@@ -7462,11 +7570,11 @@
 
 [[package]]
 name = "polkadot-node-core-candidate-validation"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "async-trait",
- "futures 0.3.24",
+ "futures 0.3.25",
  "parity-scale-codec 3.2.1",
  "polkadot-node-core-pvf",
  "polkadot-node-primitives",
@@ -7480,10 +7588,10 @@
 
 [[package]]
 name = "polkadot-node-core-chain-api"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "polkadot-node-subsystem",
  "polkadot-node-subsystem-util",
  "polkadot-primitives",
@@ -7495,10 +7603,10 @@
 
 [[package]]
 name = "polkadot-node-core-chain-selection"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "kvdb",
  "parity-scale-codec 3.2.1",
@@ -7512,11 +7620,11 @@
 
 [[package]]
 name = "polkadot-node-core-dispute-coordinator"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "fatality",
- "futures 0.3.24",
+ "futures 0.3.25",
  "kvdb",
  "lru 0.7.8",
  "parity-scale-codec 3.2.1",
@@ -7531,11 +7639,11 @@
 
 [[package]]
 name = "polkadot-node-core-parachains-inherent"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "async-trait",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "polkadot-node-subsystem",
  "polkadot-primitives",
@@ -7548,12 +7656,12 @@
 
 [[package]]
 name = "polkadot-node-core-provisioner"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "bitvec 1.0.1",
  "fatality",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -7566,19 +7674,19 @@
 
 [[package]]
 name = "polkadot-node-core-pvf"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "always-assert",
  "assert_matches",
  "async-process",
  "async-std",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "parity-scale-codec 3.2.1",
  "pin-project",
  "polkadot-core-primitives",
- "polkadot-node-subsystem-util",
+ "polkadot-node-metrics",
  "polkadot-parachain",
  "rand 0.8.5",
  "rayon",
@@ -7598,10 +7706,10 @@
 
 [[package]]
 name = "polkadot-node-core-pvf-checker"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
  "polkadot-node-subsystem-util",
@@ -7614,10 +7722,10 @@
 
 [[package]]
 name = "polkadot-node-core-runtime-api"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "memory-lru",
  "parity-util-mem",
  "polkadot-node-subsystem",
@@ -7630,8 +7738,8 @@
 
 [[package]]
 name = "polkadot-node-jaeger"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "async-std",
  "lazy_static",
@@ -7648,11 +7756,11 @@
 
 [[package]]
 name = "polkadot-node-metrics"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "bs58",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "log",
  "parity-scale-codec 3.2.1",
@@ -7667,13 +7775,13 @@
 
 [[package]]
 name = "polkadot-node-network-protocol"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "async-trait",
  "derive_more",
  "fatality",
- "futures 0.3.24",
+ "futures 0.3.25",
  "hex",
  "parity-scale-codec 3.2.1",
  "polkadot-node-jaeger",
@@ -7682,6 +7790,7 @@
  "rand 0.8.5",
  "sc-authority-discovery",
  "sc-network",
+ "sc-network-common",
  "strum",
  "thiserror",
  "tracing-gum",
@@ -7689,11 +7798,11 @@
 
 [[package]]
 name = "polkadot-node-primitives"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "bounded-vec",
- "futures 0.3.24",
+ "futures 0.3.25",
  "parity-scale-codec 3.2.1",
  "polkadot-parachain",
  "polkadot-primitives",
@@ -7711,8 +7820,8 @@
 
 [[package]]
 name = "polkadot-node-subsystem"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "polkadot-node-jaeger",
  "polkadot-node-subsystem-types",
@@ -7721,12 +7830,12 @@
 
 [[package]]
 name = "polkadot-node-subsystem-types"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "async-trait",
  "derive_more",
- "futures 0.3.24",
+ "futures 0.3.25",
  "orchestra",
  "polkadot-node-jaeger",
  "polkadot-node-network-protocol",
@@ -7744,13 +7853,13 @@
 
 [[package]]
 name = "polkadot-node-subsystem-util"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "async-trait",
  "derive_more",
  "fatality",
- "futures 0.3.24",
+ "futures 0.3.25",
  "itertools",
  "kvdb",
  "lru 0.7.8",
@@ -7777,11 +7886,11 @@
 
 [[package]]
 name = "polkadot-overseer"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "async-trait",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "lru 0.7.8",
  "orchestra",
@@ -7800,8 +7909,8 @@
 
 [[package]]
 name = "polkadot-parachain"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "derive_more",
  "frame-support",
@@ -7817,8 +7926,8 @@
 
 [[package]]
 name = "polkadot-performance-test"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "env_logger",
  "kusama-runtime",
@@ -7832,8 +7941,8 @@
 
 [[package]]
 name = "polkadot-primitives"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "bitvec 1.0.1",
  "frame-system",
@@ -7862,8 +7971,8 @@
 
 [[package]]
 name = "polkadot-rpc"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "beefy-gadget",
  "beefy-gadget-rpc",
@@ -7894,8 +8003,8 @@
 
 [[package]]
 name = "polkadot-runtime"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "beefy-primitives",
  "bitvec 1.0.1",
@@ -7921,6 +8030,7 @@
  "pallet-election-provider-multi-phase",
  "pallet-election-provider-support-benchmarking",
  "pallet-elections-phragmen",
+ "pallet-fast-unstake",
  "pallet-grandpa",
  "pallet-identity",
  "pallet-im-online",
@@ -7982,8 +8092,8 @@
 
 [[package]]
 name = "polkadot-runtime-common"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "beefy-primitives",
  "bitvec 1.0.1",
@@ -8029,8 +8139,8 @@
 
 [[package]]
 name = "polkadot-runtime-constants"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "frame-support",
  "polkadot-primitives",
@@ -8041,8 +8151,8 @@
 
 [[package]]
 name = "polkadot-runtime-metrics"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "bs58",
  "parity-scale-codec 3.2.1",
@@ -8053,8 +8163,8 @@
 
 [[package]]
 name = "polkadot-runtime-parachains"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "bitflags",
  "bitvec 1.0.1",
@@ -8096,15 +8206,15 @@
 
 [[package]]
 name = "polkadot-service"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "async-trait",
  "beefy-gadget",
  "beefy-primitives",
  "frame-support",
  "frame-system-rpc-runtime-api",
- "futures 0.3.24",
+ "futures 0.3.25",
  "hex-literal",
  "kusama-runtime",
  "kvdb",
@@ -8200,12 +8310,12 @@
 
 [[package]]
 name = "polkadot-statement-distribution"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "arrayvec 0.5.2",
  "fatality",
- "futures 0.3.24",
+ "futures 0.3.25",
  "indexmap",
  "parity-scale-codec 3.2.1",
  "polkadot-node-network-protocol",
@@ -8221,8 +8331,8 @@
 
 [[package]]
 name = "polkadot-statement-table"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "polkadot-primitives",
@@ -8231,8 +8341,8 @@
 
 [[package]]
 name = "polkadot-test-runtime"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "beefy-primitives",
  "bitvec 1.0.1",
@@ -8292,12 +8402,12 @@
 
 [[package]]
 name = "polkadot-test-service"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "frame-benchmarking",
  "frame-system",
- "futures 0.3.24",
+ "futures 0.3.25",
  "hex",
  "pallet-balances",
  "pallet-staking",
@@ -8404,12 +8514,12 @@
 [[package]]
 name = "prioritized-metered-channel"
 version = "0.2.0"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "coarsetime",
  "crossbeam-queue",
  "derive_more",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "nanorand",
  "thiserror",
@@ -8453,9 +8563,9 @@
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.46"
+version = "1.0.47"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b"
+checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
 dependencies = [
  "unicode-ident",
 ]
@@ -8481,7 +8591,7 @@
 checksum = "ac1abe0255c04d15f571427a2d1e00099016506cf3297b53853acd2b7eb87825"
 dependencies = [
  "dtoa",
- "itoa 1.0.3",
+ "itoa",
  "owning_ref",
  "prometheus-client-derive-text-encode",
 ]
@@ -8504,10 +8614,20 @@
 checksum = "71adf41db68aa0daaefc69bb30bcd68ded9b9abaad5d1fbb6304c4fb390e083e"
 dependencies = [
  "bytes",
- "prost-derive",
+ "prost-derive 0.10.1",
 ]
 
 [[package]]
+name = "prost"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "399c3c31cdec40583bb68f0b18403400d01ec4289c383aa047560439952c4dd7"
+dependencies = [
+ "bytes",
+ "prost-derive 0.11.0",
+]
+
+[[package]]
 name = "prost-build"
 version = "0.10.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -8522,8 +8642,28 @@
  "log",
  "multimap",
  "petgraph",
- "prost",
- "prost-types",
+ "prost 0.10.4",
+ "prost-types 0.10.1",
+ "regex",
+ "tempfile",
+ "which",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f835c582e6bd972ba8347313300219fed5bfa52caf175298d860b61ff6069bb"
+dependencies = [
+ "bytes",
+ "heck",
+ "itertools",
+ "lazy_static",
+ "log",
+ "multimap",
+ "petgraph",
+ "prost 0.11.0",
+ "prost-types 0.11.1",
  "regex",
  "tempfile",
  "which",
@@ -8537,7 +8677,7 @@
 dependencies = [
  "asynchronous-codec",
  "bytes",
- "prost",
+ "prost 0.10.4",
  "thiserror",
  "unsigned-varint",
 ]
@@ -8556,16 +8696,39 @@
 ]
 
 [[package]]
+name = "prost-derive"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7345d5f0e08c0536d7ac7229952590239e77abf0a0100a1b1d890add6ea96364"
+dependencies = [
+ "anyhow",
+ "itertools",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
 name = "prost-types"
 version = "0.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2d0a014229361011dc8e69c8a1ec6c2e8d0f2af7c91e3ea3f5b2170298461e68"
 dependencies = [
  "bytes",
- "prost",
+ "prost 0.10.4",
 ]
 
 [[package]]
+name = "prost-types"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dfaa718ad76a44b3415e6c4d53b17c8f99160dcb3a99b10470fce8ad43f6e3e"
+dependencies = [
+ "bytes",
+ "prost 0.11.0",
+]
+
+[[package]]
 name = "psm"
 version = "0.1.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -8576,7 +8739,7 @@
 
 [[package]]
 name = "quartz-runtime"
-version = "0.9.29"
+version = "0.9.30"
 dependencies = [
  "app-promotion-rpc",
  "cumulus-pallet-aura-ext",
@@ -8864,24 +9027,24 @@
  "derive_more",
  "fs-err",
  "itertools",
- "static_init",
+ "static_init 0.5.2",
  "thiserror",
 ]
 
 [[package]]
 name = "ref-cast"
-version = "1.0.9"
+version = "1.0.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed13bcd201494ab44900a96490291651d200730904221832b9547d24a87d332b"
+checksum = "12a733f1746c929b4913fe48f8697fcf9c55e3304ba251a79ffb41adfeaf49c2"
 dependencies = [
  "ref-cast-impl",
 ]
 
 [[package]]
 name = "ref-cast-impl"
-version = "1.0.9"
+version = "1.0.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5234cd6063258a5e32903b53b1b6ac043a0541c8adc1f610f67b0326c7a578fa"
+checksum = "5887de4a01acafd221861463be6113e6e87275e79804e56779f4cdc131c60368"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -8890,9 +9053,9 @@
 
 [[package]]
 name = "regalloc2"
-version = "0.2.3"
+version = "0.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4a8d23b35d7177df3b9d31ed8a9ab4bf625c668be77a319d4f5efd4a5257701c"
+checksum = "d43a209257d978ef079f3d446331d0f1794f5e0fc19b306a199983857833a779"
 dependencies = [
  "fxhash",
  "log",
@@ -8925,23 +9088,11 @@
 version = "0.6.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
-
-[[package]]
-name = "region"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "877e54ea2adcd70d80e9179344c97f93ef0dffd6b03e1f4529e6e83ab2fa9ae0"
-dependencies = [
- "bitflags",
- "libc",
- "mach",
- "winapi",
-]
 
 [[package]]
 name = "remote-externalities"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "env_logger",
  "jsonrpsee",
@@ -9055,8 +9206,8 @@
 
 [[package]]
 name = "rococo-runtime"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "beefy-merkle-tree",
  "beefy-primitives",
@@ -9074,23 +9225,37 @@
  "pallet-balances",
  "pallet-beefy",
  "pallet-beefy-mmr",
+ "pallet-bounties",
+ "pallet-child-bounties",
  "pallet-collective",
+ "pallet-democracy",
+ "pallet-elections-phragmen",
+ "pallet-gilt",
  "pallet-grandpa",
+ "pallet-identity",
  "pallet-im-online",
  "pallet-indices",
  "pallet-membership",
  "pallet-mmr",
  "pallet-multisig",
  "pallet-offences",
+ "pallet-preimage",
  "pallet-proxy",
+ "pallet-recovery",
+ "pallet-scheduler",
  "pallet-session",
+ "pallet-society",
  "pallet-staking",
  "pallet-sudo",
  "pallet-timestamp",
+ "pallet-tips",
  "pallet-transaction-payment",
  "pallet-transaction-payment-rpc-runtime-api",
+ "pallet-treasury",
  "pallet-utility",
+ "pallet-vesting",
  "pallet-xcm",
+ "pallet-xcm-benchmarks",
  "parity-scale-codec 3.2.1",
  "polkadot-parachain",
  "polkadot-primitives",
@@ -9116,6 +9281,7 @@
  "sp-std",
  "sp-transaction-pool",
  "sp-version",
+ "static_assertions",
  "substrate-wasm-builder",
  "xcm",
  "xcm-builder",
@@ -9124,8 +9290,8 @@
 
 [[package]]
 name = "rococo-runtime-constants"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "frame-support",
  "polkadot-primitives",
@@ -9136,9 +9302,9 @@
 
 [[package]]
 name = "rpassword"
-version = "7.0.0"
+version = "7.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26b763cb66df1c928432cc35053f8bd4cec3335d8559fc16010017d16b3c1680"
+checksum = "20c9f5d2a0c3e2ea729ab3706d22217177770654c3ef5056b68b69d07332d3f5"
 dependencies = [
  "libc",
  "winapi",
@@ -9151,7 +9317,7 @@
 checksum = "322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0"
 dependencies = [
  "async-global-executor",
- "futures 0.3.24",
+ "futures 0.3.25",
  "log",
  "netlink-packet-route",
  "netlink-proto",
@@ -9197,37 +9363,23 @@
 
 [[package]]
 name = "rustix"
-version = "0.33.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "938a344304321a9da4973b9ff4f9f8db9caf4597dfd9dda6a60b523340a0fff0"
-dependencies = [
- "bitflags",
- "errno",
- "io-lifetimes 0.5.3",
- "libc",
- "linux-raw-sys 0.0.42",
- "winapi",
-]
-
-[[package]]
-name = "rustix"
 version = "0.35.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "fbb2fda4666def1433b1b05431ab402e42a1084285477222b72d6c564c417cef"
 dependencies = [
  "bitflags",
  "errno",
- "io-lifetimes 0.7.3",
+ "io-lifetimes",
  "libc",
- "linux-raw-sys 0.0.46",
- "windows-sys",
+ "linux-raw-sys",
+ "windows-sys 0.36.1",
 ]
 
 [[package]]
 name = "rustls"
-version = "0.20.6"
+version = "0.20.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033"
+checksum = "539a2bfe908f471bfa933876bd1eb6a19cf2176d375f82ef7f99530a40e48c2c"
 dependencies = [
  "log",
  "ring",
@@ -9268,7 +9420,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "26338f5e09bb721b85b135ea05af7767c90b52f6de4f087d4f4a3a9d64e7dc04"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "pin-project",
  "static_assertions",
 ]
@@ -9290,11 +9442,11 @@
 
 [[package]]
 name = "salsa20"
-version = "0.9.0"
+version = "0.10.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c0fbb5f676da676c260ba276a8f43a8dc67cf02d1438423aeb1c677a7212686"
+checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213"
 dependencies = [
- "cipher",
+ "cipher 0.4.3",
 ]
 
 [[package]]
@@ -9309,7 +9461,7 @@
 [[package]]
 name = "sc-allocator"
 version = "4.1.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "log",
  "sp-core",
@@ -9320,17 +9472,17 @@
 [[package]]
 name = "sc-authority-discovery"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "async-trait",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "ip_network",
  "libp2p",
  "log",
  "parity-scale-codec 3.2.1",
- "prost",
- "prost-build",
+ "prost 0.10.4",
+ "prost-build 0.10.4",
  "rand 0.7.3",
  "sc-client-api",
  "sc-network-common",
@@ -9347,9 +9499,9 @@
 [[package]]
 name = "sc-basic-authorship"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "log",
  "parity-scale-codec 3.2.1",
@@ -9370,7 +9522,7 @@
 [[package]]
 name = "sc-block-builder"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "sc-client-api",
@@ -9386,7 +9538,7 @@
 [[package]]
 name = "sc-chain-spec"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "impl-trait-for-tuples",
  "memmap2",
@@ -9403,7 +9555,7 @@
 [[package]]
 name = "sc-chain-spec-derive"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
@@ -9414,13 +9566,13 @@
 [[package]]
 name = "sc-cli"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
+ "array-bytes",
  "chrono",
  "clap",
  "fdlimit",
- "futures 0.3.24",
- "hex",
+ "futures 0.3.25",
  "libp2p",
  "log",
  "names",
@@ -9432,6 +9584,7 @@
  "sc-client-db",
  "sc-keystore",
  "sc-network",
+ "sc-network-common",
  "sc-service",
  "sc-telemetry",
  "sc-tracing",
@@ -9453,10 +9606,10 @@
 [[package]]
 name = "sc-client-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "fnv",
- "futures 0.3.24",
+ "futures 0.3.25",
  "hash-db",
  "log",
  "parity-scale-codec 3.2.1",
@@ -9481,7 +9634,7 @@
 [[package]]
 name = "sc-client-db"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "hash-db",
  "kvdb",
@@ -9506,10 +9659,10 @@
 [[package]]
 name = "sc-consensus"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "async-trait",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "libp2p",
  "log",
@@ -9530,10 +9683,10 @@
 [[package]]
 name = "sc-consensus-aura"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "async-trait",
- "futures 0.3.24",
+ "futures 0.3.25",
  "log",
  "parity-scale-codec 3.2.1",
  "sc-block-builder",
@@ -9559,14 +9712,14 @@
 [[package]]
 name = "sc-consensus-babe"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "async-trait",
  "fork-tree",
- "futures 0.3.24",
+ "futures 0.3.25",
  "log",
  "merlin",
- "num-bigint",
+ "num-bigint 0.2.6",
  "num-rational 0.2.4",
  "num-traits",
  "parity-scale-codec 3.2.1",
@@ -9601,9 +9754,9 @@
 [[package]]
 name = "sc-consensus-babe-rpc"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "jsonrpsee",
  "sc-consensus-babe",
  "sc-consensus-epochs",
@@ -9623,7 +9776,7 @@
 [[package]]
 name = "sc-consensus-epochs"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "fork-tree",
  "parity-scale-codec 3.2.1",
@@ -9636,11 +9789,11 @@
 [[package]]
 name = "sc-consensus-manual-seal"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "assert_matches",
  "async-trait",
- "futures 0.3.24",
+ "futures 0.3.25",
  "jsonrpsee",
  "log",
  "parity-scale-codec 3.2.1",
@@ -9670,10 +9823,10 @@
 [[package]]
 name = "sc-consensus-slots"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "async-trait",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "log",
  "parity-scale-codec 3.2.1",
@@ -9688,14 +9841,13 @@
  "sp-inherents",
  "sp-runtime",
  "sp-state-machine",
- "sp-timestamp",
  "thiserror",
 ]
 
 [[package]]
 name = "sc-executor"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "lazy_static",
  "lru 0.7.8",
@@ -9722,7 +9874,7 @@
 [[package]]
 name = "sc-executor-common"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "environmental",
  "parity-scale-codec 3.2.1",
@@ -9738,7 +9890,7 @@
 [[package]]
 name = "sc-executor-wasmi"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "log",
  "parity-scale-codec 3.2.1",
@@ -9753,16 +9905,15 @@
 [[package]]
 name = "sc-executor-wasmtime"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "cfg-if 1.0.0",
  "libc",
  "log",
  "once_cell",
  "parity-scale-codec 3.2.1",
- "parity-wasm 0.42.2",
- "rustix 0.33.7",
- "rustix 0.35.11",
+ "parity-wasm 0.45.0",
+ "rustix",
  "sc-allocator",
  "sc-executor-common",
  "sp-runtime-interface",
@@ -9774,16 +9925,16 @@
 [[package]]
 name = "sc-finality-grandpa"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "ahash",
+ "array-bytes",
  "async-trait",
  "dyn-clone",
  "finality-grandpa",
  "fork-tree",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
- "hex",
  "log",
  "parity-scale-codec 3.2.1",
  "parking_lot 0.12.1",
@@ -9815,10 +9966,10 @@
 [[package]]
 name = "sc-finality-grandpa-rpc"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "finality-grandpa",
- "futures 0.3.24",
+ "futures 0.3.25",
  "jsonrpsee",
  "log",
  "parity-scale-codec 3.2.1",
@@ -9836,10 +9987,10 @@
 [[package]]
 name = "sc-informant"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "ansi_term",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "log",
  "parity-util-mem",
@@ -9853,10 +10004,10 @@
 [[package]]
 name = "sc-keystore"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
+ "array-bytes",
  "async-trait",
- "hex",
  "parking_lot 0.12.1",
  "serde_json",
  "sp-application-crypto",
@@ -9868,8 +10019,9 @@
 [[package]]
 name = "sc-network"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
+ "array-bytes",
  "async-trait",
  "asynchronous-codec",
  "bitflags",
@@ -9878,9 +10030,8 @@
  "either",
  "fnv",
  "fork-tree",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
- "hex",
  "ip_network",
  "libp2p",
  "linked-hash-map",
@@ -9890,8 +10041,7 @@
  "parity-scale-codec 3.2.1",
  "parking_lot 0.12.1",
  "pin-project",
- "prost",
- "prost-build",
+ "prost 0.10.4",
  "rand 0.7.3",
  "sc-block-builder",
  "sc-client-api",
@@ -9910,22 +10060,43 @@
  "substrate-prometheus-endpoint",
  "thiserror",
  "unsigned-varint",
+ "zeroize",
+]
+
+[[package]]
+name = "sc-network-bitswap"
+version = "0.10.0-dev"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
+dependencies = [
+ "cid",
+ "futures 0.3.25",
+ "libp2p",
+ "log",
+ "prost 0.11.0",
+ "prost-build 0.11.1",
+ "sc-client-api",
+ "sc-network-common",
+ "sp-blockchain",
+ "sp-runtime",
+ "thiserror",
+ "unsigned-varint",
  "void",
- "zeroize",
 ]
 
 [[package]]
 name = "sc-network-common"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "async-trait",
  "bitflags",
  "bytes",
- "futures 0.3.24",
+ "futures 0.3.25",
+ "futures-timer",
  "libp2p",
+ "linked_hash_set",
  "parity-scale-codec 3.2.1",
- "prost-build",
+ "prost-build 0.10.4",
  "sc-consensus",
  "sc-peerset",
  "serde",
@@ -9934,16 +10105,17 @@
  "sp-consensus",
  "sp-finality-grandpa",
  "sp-runtime",
+ "substrate-prometheus-endpoint",
  "thiserror",
 ]
 
 [[package]]
 name = "sc-network-gossip"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "ahash",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "libp2p",
  "log",
@@ -9958,15 +10130,15 @@
 [[package]]
 name = "sc-network-light"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
- "futures 0.3.24",
- "hex",
+ "array-bytes",
+ "futures 0.3.25",
  "libp2p",
  "log",
  "parity-scale-codec 3.2.1",
- "prost",
- "prost-build",
+ "prost 0.10.4",
+ "prost-build 0.10.4",
  "sc-client-api",
  "sc-network-common",
  "sc-peerset",
@@ -9979,17 +10151,17 @@
 [[package]]
 name = "sc-network-sync"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
+ "array-bytes",
  "fork-tree",
- "futures 0.3.24",
- "hex",
+ "futures 0.3.25",
  "libp2p",
  "log",
  "lru 0.7.8",
  "parity-scale-codec 3.2.1",
- "prost",
- "prost-build",
+ "prost 0.10.4",
+ "prost-build 0.10.4",
  "sc-client-api",
  "sc-consensus",
  "sc-network-common",
@@ -10005,15 +10177,34 @@
 ]
 
 [[package]]
+name = "sc-network-transactions"
+version = "0.10.0-dev"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
+dependencies = [
+ "array-bytes",
+ "futures 0.3.25",
+ "hex",
+ "libp2p",
+ "log",
+ "parity-scale-codec 3.2.1",
+ "pin-project",
+ "sc-network-common",
+ "sc-peerset",
+ "sp-consensus",
+ "sp-runtime",
+ "substrate-prometheus-endpoint",
+]
+
+[[package]]
 name = "sc-offchain"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
+ "array-bytes",
  "bytes",
  "fnv",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
- "hex",
  "hyper",
  "hyper-rustls",
  "libp2p",
@@ -10037,9 +10228,9 @@
 [[package]]
 name = "sc-peerset"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "libp2p",
  "log",
  "sc-utils",
@@ -10050,7 +10241,7 @@
 [[package]]
 name = "sc-proposer-metrics"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "log",
  "substrate-prometheus-endpoint",
@@ -10059,9 +10250,9 @@
 [[package]]
 name = "sc-rpc"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "hash-db",
  "jsonrpsee",
  "log",
@@ -10089,9 +10280,9 @@
 [[package]]
 name = "sc-rpc-api"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "jsonrpsee",
  "log",
  "parity-scale-codec 3.2.1",
@@ -10112,9 +10303,9 @@
 [[package]]
 name = "sc-rpc-server"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "jsonrpsee",
  "log",
  "serde_json",
@@ -10125,12 +10316,12 @@
 [[package]]
 name = "sc-service"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "async-trait",
  "directories",
  "exit-future",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "hash-db",
  "jsonrpsee",
@@ -10149,9 +10340,11 @@
  "sc-informant",
  "sc-keystore",
  "sc-network",
+ "sc-network-bitswap",
  "sc-network-common",
  "sc-network-light",
  "sc-network-sync",
+ "sc-network-transactions",
  "sc-offchain",
  "sc-rpc",
  "sc-rpc-server",
@@ -10181,6 +10374,7 @@
  "sp-transaction-storage-proof",
  "sp-trie",
  "sp-version",
+ "static_init 1.0.3",
  "substrate-prometheus-endpoint",
  "tempfile",
  "thiserror",
@@ -10192,7 +10386,7 @@
 [[package]]
 name = "sc-state-db"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "log",
  "parity-scale-codec 3.2.1",
@@ -10206,7 +10400,7 @@
 [[package]]
 name = "sc-sync-state-rpc"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "jsonrpsee",
  "parity-scale-codec 3.2.1",
@@ -10225,9 +10419,9 @@
 [[package]]
 name = "sc-sysinfo"
 version = "6.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "libc",
  "log",
  "rand 0.7.3",
@@ -10244,10 +10438,10 @@
 [[package]]
 name = "sc-telemetry"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "chrono",
- "futures 0.3.24",
+ "futures 0.3.25",
  "libp2p",
  "log",
  "parking_lot 0.12.1",
@@ -10262,7 +10456,7 @@
 [[package]]
 name = "sc-tracing"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "ansi_term",
  "atty",
@@ -10293,7 +10487,7 @@
 [[package]]
 name = "sc-tracing-proc-macro"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
@@ -10304,9 +10498,9 @@
 [[package]]
 name = "sc-transaction-pool"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "linked-hash-map",
  "log",
@@ -10330,9 +10524,9 @@
 [[package]]
 name = "sc-transaction-pool-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "log",
  "serde",
  "sp-blockchain",
@@ -10343,9 +10537,9 @@
 [[package]]
 name = "sc-utils"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "lazy_static",
  "log",
@@ -10386,7 +10580,7 @@
 checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
 dependencies = [
  "lazy_static",
- "windows-sys",
+ "windows-sys 0.36.1",
 ]
 
 [[package]]
@@ -10414,6 +10608,12 @@
 checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
 
 [[package]]
+name = "scratch"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898"
+
+[[package]]
 name = "sct"
 version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -10431,6 +10631,7 @@
 dependencies = [
  "der",
  "generic-array 0.14.6",
+ "pkcs8",
  "subtle",
  "zeroize",
 ]
@@ -10446,9 +10647,9 @@
 
 [[package]]
 name = "secp256k1-sys"
-version = "0.6.0"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7058dc8eaf3f2810d7828680320acda0b25a288f6d288e19278e249bbf74226b"
+checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b"
 dependencies = [
  "cc",
 ]
@@ -10540,11 +10741,11 @@
 
 [[package]]
 name = "serde_json"
-version = "1.0.85"
+version = "1.0.87"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44"
+checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45"
 dependencies = [
- "itoa 1.0.3",
+ "itoa",
  "ryu",
  "serde",
 ]
@@ -10616,25 +10817,13 @@
  "cfg-if 1.0.0",
  "cpufeatures",
  "digest 0.10.5",
-]
-
-[[package]]
-name = "sha3"
-version = "0.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809"
-dependencies = [
- "block-buffer 0.9.0",
- "digest 0.9.0",
- "keccak",
- "opaque-debug 0.3.0",
 ]
 
 [[package]]
 name = "sha3"
-version = "0.10.5"
+version = "0.10.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2904bea16a1ae962b483322a1c7b81d976029203aea1f461e51cd7705db7ba9"
+checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9"
 dependencies = [
  "digest 0.10.5",
  "keccak",
@@ -10713,8 +10902,8 @@
 
 [[package]]
 name = "slot-range-helper"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "enumn",
  "parity-scale-codec 3.2.1",
@@ -10780,7 +10969,7 @@
  "base64",
  "bytes",
  "flate2",
- "futures 0.3.24",
+ "futures 0.3.25",
  "httparse",
  "log",
  "rand 0.8.5",
@@ -10790,7 +10979,7 @@
 [[package]]
 name = "sp-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "hash-db",
  "log",
@@ -10808,7 +10997,7 @@
 [[package]]
 name = "sp-api-proc-macro"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "blake2",
  "proc-macro-crate",
@@ -10820,7 +11009,7 @@
 [[package]]
 name = "sp-application-crypto"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "scale-info",
@@ -10833,7 +11022,7 @@
 [[package]]
 name = "sp-arithmetic"
 version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "integer-sqrt",
  "num-traits",
@@ -10848,7 +11037,7 @@
 [[package]]
 name = "sp-authority-discovery"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "scale-info",
@@ -10861,7 +11050,7 @@
 [[package]]
 name = "sp-authorship"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "async-trait",
  "parity-scale-codec 3.2.1",
@@ -10873,7 +11062,7 @@
 [[package]]
 name = "sp-block-builder"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "sp-api",
@@ -10885,9 +11074,9 @@
 [[package]]
 name = "sp-blockchain"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "log",
  "lru 0.7.8",
  "parity-scale-codec 3.2.1",
@@ -10903,10 +11092,10 @@
 [[package]]
 name = "sp-consensus"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "async-trait",
- "futures 0.3.24",
+ "futures 0.3.25",
  "futures-timer",
  "log",
  "parity-scale-codec 3.2.1",
@@ -10922,7 +11111,7 @@
 [[package]]
 name = "sp-consensus-aura"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "async-trait",
  "parity-scale-codec 3.2.1",
@@ -10940,7 +11129,7 @@
 [[package]]
 name = "sp-consensus-babe"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "async-trait",
  "merlin",
@@ -10963,7 +11152,7 @@
 [[package]]
 name = "sp-consensus-slots"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "scale-info",
@@ -10977,7 +11166,7 @@
 [[package]]
 name = "sp-consensus-vrf"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "scale-info",
@@ -10990,18 +11179,18 @@
 [[package]]
 name = "sp-core"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
+ "array-bytes",
  "base58",
  "bitflags",
- "blake2-rfc",
+ "blake2",
  "byteorder",
  "dyn-clonable",
  "ed25519-zebra",
- "futures 0.3.24",
+ "futures 0.3.25",
  "hash-db",
  "hash256-std-hasher",
- "hex",
  "impl-serde",
  "lazy_static",
  "libsecp256k1",
@@ -11036,13 +11225,13 @@
 [[package]]
 name = "sp-core-hashing"
 version = "4.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "blake2",
  "byteorder",
  "digest 0.10.5",
  "sha2 0.10.6",
- "sha3 0.10.5",
+ "sha3",
  "sp-std",
  "twox-hash",
 ]
@@ -11050,7 +11239,7 @@
 [[package]]
 name = "sp-core-hashing-proc-macro"
 version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -11061,7 +11250,7 @@
 [[package]]
 name = "sp-database"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "kvdb",
  "parking_lot 0.12.1",
@@ -11070,7 +11259,7 @@
 [[package]]
 name = "sp-debug-derive"
 version = "4.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -11080,7 +11269,7 @@
 [[package]]
 name = "sp-externalities"
 version = "0.12.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "environmental",
  "parity-scale-codec 3.2.1",
@@ -11091,7 +11280,7 @@
 [[package]]
 name = "sp-finality-grandpa"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "finality-grandpa",
  "log",
@@ -11109,7 +11298,7 @@
 [[package]]
 name = "sp-inherents"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "async-trait",
  "impl-trait-for-tuples",
@@ -11123,10 +11312,10 @@
 [[package]]
 name = "sp-io"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "bytes",
- "futures 0.3.24",
+ "futures 0.3.25",
  "hash-db",
  "libsecp256k1",
  "log",
@@ -11149,7 +11338,7 @@
 [[package]]
 name = "sp-keyring"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "lazy_static",
  "sp-core",
@@ -11160,10 +11349,10 @@
 [[package]]
 name = "sp-keystore"
 version = "0.12.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "async-trait",
- "futures 0.3.24",
+ "futures 0.3.25",
  "merlin",
  "parity-scale-codec 3.2.1",
  "parking_lot 0.12.1",
@@ -11177,7 +11366,7 @@
 [[package]]
 name = "sp-maybe-compressed-blob"
 version = "4.1.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "thiserror",
  "zstd",
@@ -11186,7 +11375,7 @@
 [[package]]
 name = "sp-mmr-primitives"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "log",
  "parity-scale-codec 3.2.1",
@@ -11201,7 +11390,7 @@
 [[package]]
 name = "sp-npos-elections"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "scale-info",
@@ -11215,7 +11404,7 @@
 [[package]]
 name = "sp-offchain"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "sp-api",
  "sp-core",
@@ -11225,7 +11414,7 @@
 [[package]]
 name = "sp-panic-handler"
 version = "4.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "backtrace",
  "lazy_static",
@@ -11235,7 +11424,7 @@
 [[package]]
 name = "sp-rpc"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "rustc-hash",
  "serde",
@@ -11245,7 +11434,7 @@
 [[package]]
 name = "sp-runtime"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "either",
  "hash256-std-hasher",
@@ -11262,12 +11451,13 @@
  "sp-core",
  "sp-io",
  "sp-std",
+ "sp-weights",
 ]
 
 [[package]]
 name = "sp-runtime-interface"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "bytes",
  "impl-trait-for-tuples",
@@ -11285,7 +11475,7 @@
 [[package]]
 name = "sp-runtime-interface-proc-macro"
 version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "Inflector",
  "proc-macro-crate",
@@ -11297,7 +11487,7 @@
 [[package]]
 name = "sp-sandbox"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "log",
  "parity-scale-codec 3.2.1",
@@ -11311,7 +11501,7 @@
 [[package]]
 name = "sp-session"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "scale-info",
@@ -11325,7 +11515,7 @@
 [[package]]
 name = "sp-staking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "scale-info",
@@ -11336,7 +11526,7 @@
 [[package]]
 name = "sp-state-machine"
 version = "0.12.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "hash-db",
  "log",
@@ -11358,12 +11548,12 @@
 [[package]]
 name = "sp-std"
 version = "4.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 
 [[package]]
 name = "sp-storage"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "impl-serde",
  "parity-scale-codec 3.2.1",
@@ -11376,7 +11566,7 @@
 [[package]]
 name = "sp-tasks"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "log",
  "sp-core",
@@ -11389,7 +11579,7 @@
 [[package]]
 name = "sp-timestamp"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "async-trait",
  "futures-timer",
@@ -11405,7 +11595,7 @@
 [[package]]
 name = "sp-tracing"
 version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "sp-std",
@@ -11417,7 +11607,7 @@
 [[package]]
 name = "sp-transaction-pool"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "sp-api",
  "sp-runtime",
@@ -11426,7 +11616,7 @@
 [[package]]
 name = "sp-transaction-storage-proof"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "async-trait",
  "log",
@@ -11442,11 +11632,11 @@
 [[package]]
 name = "sp-trie"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "ahash",
  "hash-db",
- "hashbrown 0.12.3",
+ "hashbrown",
  "lazy_static",
  "lru 0.7.8",
  "memory-db",
@@ -11465,11 +11655,11 @@
 [[package]]
 name = "sp-version"
 version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "impl-serde",
  "parity-scale-codec 3.2.1",
- "parity-wasm 0.42.2",
+ "parity-wasm 0.45.0",
  "scale-info",
  "serde",
  "sp-core-hashing-proc-macro",
@@ -11482,7 +11672,7 @@
 [[package]]
 name = "sp-version-proc-macro"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "parity-scale-codec 3.2.1",
  "proc-macro2",
@@ -11493,7 +11683,7 @@
 [[package]]
 name = "sp-wasm-interface"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "impl-trait-for-tuples",
  "log",
@@ -11504,16 +11694,42 @@
 ]
 
 [[package]]
+name = "sp-weights"
+version = "4.0.0"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
+dependencies = [
+ "impl-trait-for-tuples",
+ "parity-scale-codec 3.2.1",
+ "scale-info",
+ "serde",
+ "smallvec",
+ "sp-arithmetic",
+ "sp-core",
+ "sp-debug-derive",
+ "sp-std",
+]
+
+[[package]]
 name = "spin"
 version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
 
 [[package]]
+name = "spki"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27"
+dependencies = [
+ "base64ct",
+ "der",
+]
+
+[[package]]
 name = "ss58-registry"
-version = "1.31.0"
+version = "1.33.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1de151faef619cb7b5c26b32d42bc7ddccac0d202beb7a84344b44e9232b92f7"
+checksum = "3ab7554f8a8b6f8d71cd5a8e6536ef116e2ce0504cf97ebf16311d58065dc8a6"
 dependencies = [
  "Inflector",
  "num-format",
@@ -11545,7 +11761,22 @@
  "cfg_aliases",
  "libc",
  "parking_lot 0.11.2",
- "static_init_macro",
+ "static_init_macro 0.5.0",
+]
+
+[[package]]
+name = "static_init"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6"
+dependencies = [
+ "bitflags",
+ "cfg_aliases",
+ "libc",
+ "parking_lot 0.11.2",
+ "parking_lot_core 0.8.5",
+ "static_init_macro 1.0.2",
+ "winapi",
 ]
 
 [[package]]
@@ -11562,6 +11793,19 @@
 ]
 
 [[package]]
+name = "static_init_macro"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70a2595fc3aa78f2d0e45dd425b22282dd863273761cc77780914b2cf3003acf"
+dependencies = [
+ "cfg_aliases",
+ "memchr",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
 name = "statrs"
 version = "0.15.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -11626,7 +11870,7 @@
 [[package]]
 name = "substrate-build-script-utils"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "platforms",
 ]
@@ -11634,10 +11878,10 @@
 [[package]]
 name = "substrate-frame-rpc-system"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "frame-system-rpc-runtime-api",
- "futures 0.3.24",
+ "futures 0.3.25",
  "jsonrpsee",
  "log",
  "parity-scale-codec 3.2.1",
@@ -11655,7 +11899,7 @@
 [[package]]
 name = "substrate-prometheus-endpoint"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "futures-util",
  "hyper",
@@ -11668,7 +11912,7 @@
 [[package]]
 name = "substrate-state-trie-migration-rpc"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "jsonrpsee",
  "log",
@@ -11689,11 +11933,11 @@
 [[package]]
 name = "substrate-test-client"
 version = "2.0.1"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
+ "array-bytes",
  "async-trait",
- "futures 0.3.24",
- "hex",
+ "futures 0.3.25",
  "parity-scale-codec 3.2.1",
  "sc-client-api",
  "sc-client-db",
@@ -11715,9 +11959,9 @@
 [[package]]
 name = "substrate-test-utils"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "substrate-test-utils-derive",
  "tokio",
 ]
@@ -11725,7 +11969,7 @@
 [[package]]
 name = "substrate-test-utils-derive"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
@@ -11736,7 +11980,7 @@
 [[package]]
 name = "substrate-wasm-builder"
 version = "5.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "ansi_term",
  "build-helper",
@@ -11758,9 +12002,9 @@
 
 [[package]]
 name = "syn"
-version = "1.0.101"
+version = "1.0.102"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e90cde112c4b9690b8cbe810cba9ddd8bc1d7472e2cae317b69e9438c1cba7d2"
+checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -11837,8 +12081,8 @@
 
 [[package]]
 name = "test-runtime-constants"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "frame-support",
  "polkadot-primitives",
@@ -11968,7 +12212,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd"
 dependencies = [
- "itoa 1.0.3",
+ "itoa",
  "libc",
  "num_threads",
  "time-macros",
@@ -12067,9 +12311,9 @@
 
 [[package]]
 name = "tokio-stream"
-version = "0.1.10"
+version = "0.1.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6edf2d6bc038a43d31353570e27270603f4648d18f5ed10c0e179abe43255af"
+checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce"
 dependencies = [
  "futures-core",
  "pin-project-lite 0.2.9",
@@ -12108,9 +12352,9 @@
 
 [[package]]
 name = "tracing"
-version = "0.1.36"
+version = "0.1.37"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
 dependencies = [
  "cfg-if 1.0.0",
  "pin-project-lite 0.2.9",
@@ -12120,9 +12364,9 @@
 
 [[package]]
 name = "tracing-attributes"
-version = "0.1.22"
+version = "0.1.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2"
+checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -12131,9 +12375,9 @@
 
 [[package]]
 name = "tracing-core"
-version = "0.1.29"
+version = "0.1.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
 dependencies = [
  "once_cell",
  "valuable",
@@ -12151,8 +12395,8 @@
 
 [[package]]
 name = "tracing-gum"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "polkadot-node-jaeger",
  "polkadot-primitives",
@@ -12162,8 +12406,8 @@
 
 [[package]]
 name = "tracing-gum-proc-macro"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "expander 0.0.6",
  "proc-macro-crate",
@@ -12223,7 +12467,7 @@
 checksum = "004e1e8f92535694b4cb1444dc5a8073ecf0815e3357f729638b9f8fc4062908"
 dependencies = [
  "hash-db",
- "hashbrown 0.12.3",
+ "hashbrown",
  "log",
  "rustc-hex",
  "smallvec",
@@ -12300,7 +12544,7 @@
 [[package]]
 name = "try-runtime-cli"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.29#cc370aa61e15c18d23a2f686b812fd576a630afe"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.30#a3ed0119c45cdd0d571ad34e5b3ee7518c8cef8d"
 dependencies = [
  "clap",
  "frame-try-runtime",
@@ -12402,9 +12646,9 @@
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.4"
+version = "1.0.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd"
+checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
 
 [[package]]
 name = "unicode-normalization"
@@ -12429,7 +12673,7 @@
 
 [[package]]
 name = "unique-node"
-version = "0.9.29"
+version = "0.9.30"
 dependencies = [
  "app-promotion-rpc",
  "clap",
@@ -12453,7 +12697,7 @@
  "fp-rpc",
  "frame-benchmarking",
  "frame-benchmarking-cli",
- "futures 0.3.24",
+ "futures 0.3.25",
  "jsonrpsee",
  "log",
  "opal-runtime",
@@ -12527,7 +12771,7 @@
  "fc-rpc-core",
  "fp-rpc",
  "fp-storage",
- "futures 0.3.24",
+ "futures 0.3.25",
  "jsonrpsee",
  "pallet-common",
  "pallet-ethereum",
@@ -12568,7 +12812,7 @@
 
 [[package]]
 name = "unique-runtime"
-version = "0.9.29"
+version = "0.9.30"
 dependencies = [
  "app-promotion-rpc",
  "cumulus-pallet-aura-ext",
@@ -12689,7 +12933,7 @@
 
 [[package]]
 name = "up-common"
-version = "0.9.29"
+version = "0.9.30"
 dependencies = [
  "fp-rpc",
  "frame-support",
@@ -12736,7 +12980,7 @@
 [[package]]
 name = "up-sponsorship"
 version = "0.1.0"
-source = "git+https://github.com/uniquenetwork/pallet-sponsoring?branch=polkadot-v0.9.29#2917e3c58a51d3654788326197cb3e1eab7febae"
+source = "git+https://github.com/uniquenetwork/pallet-sponsoring?branch=polkadot-v0.9.30#39dd82158d6caa9d89105441bf2f7111a6e686e5"
 dependencies = [
  "impl-trait-for-tuples",
 ]
@@ -12910,11 +13154,11 @@
 
 [[package]]
 name = "wasm-instrument"
-version = "0.1.1"
+version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "962e5b0401bbb6c887f54e69b8c496ea36f704df65db73e81fd5ff8dc3e63a9f"
+checksum = "aa1dafb3e60065305741e83db35c6c2584bb3725b692b5b66148a38d72ace6cd"
 dependencies = [
- "parity-wasm 0.42.2",
+ "parity-wasm 0.45.0",
 ]
 
 [[package]]
@@ -12923,7 +13167,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "js-sys",
  "parking_lot 0.11.2",
  "pin-utils",
@@ -12934,58 +13178,63 @@
 
 [[package]]
 name = "wasmi"
-version = "0.9.1"
+version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca00c5147c319a8ec91ec1a0edbec31e566ce2c9cc93b3f9bb86a9efd0eb795d"
+checksum = "06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422"
 dependencies = [
- "downcast-rs",
- "libc",
- "libm",
- "memory_units",
- "num-rational 0.2.4",
- "num-traits",
- "parity-wasm 0.42.2",
+ "parity-wasm 0.45.0",
  "wasmi-validation",
+ "wasmi_core",
 ]
 
 [[package]]
 name = "wasmi-validation"
-version = "0.4.1"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ff416ad1ff0c42e5a926ed5d5fab74c0f098749aa0ad8b2a34b982ce0e867b"
+dependencies = [
+ "parity-wasm 0.45.0",
+]
+
+[[package]]
+name = "wasmi_core"
+version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "165343ecd6c018fc09ebcae280752702c9a2ef3e6f8d02f1cfcbdb53ef6d7937"
+checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7"
 dependencies = [
- "parity-wasm 0.42.2",
+ "downcast-rs",
+ "libm",
+ "memory_units",
+ "num-rational 0.4.1",
+ "num-traits",
 ]
 
 [[package]]
 name = "wasmparser"
-version = "0.85.0"
+version = "0.89.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "570460c58b21e9150d2df0eaaedbb7816c34bcec009ae0dcc976e40ba81463e7"
+checksum = "ab5d3e08b13876f96dd55608d03cd4883a0545884932d5adf11925876c96daef"
 dependencies = [
  "indexmap",
 ]
 
 [[package]]
 name = "wasmtime"
-version = "0.38.3"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f50eadf868ab6a04b7b511460233377d0bfbb92e417b2f6a98b98fef2e098f5"
+checksum = "f1f511c4917c83d04da68333921107db75747c4e11a2f654a8e909cc5e0520dc"
 dependencies = [
  "anyhow",
- "backtrace",
  "bincode",
  "cfg-if 1.0.0",
  "indexmap",
- "lazy_static",
  "libc",
  "log",
- "object 0.28.4",
+ "object",
  "once_cell",
  "paste",
  "psm",
  "rayon",
- "region",
  "serde",
  "target-lexicon",
  "wasmparser",
@@ -12994,14 +13243,23 @@
  "wasmtime-environ",
  "wasmtime-jit",
  "wasmtime-runtime",
- "winapi",
+ "windows-sys 0.36.1",
 ]
 
 [[package]]
+name = "wasmtime-asm-macros"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39bf3debfe744bf19dd3732990ce6f8c0ced7439e2370ba4e1d8f5a3660a3178"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
 name = "wasmtime-cache"
-version = "0.38.3"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d1df23c642e1376892f3b72f311596976979cbf8b85469680cdd3a8a063d12a2"
+checksum = "ece42fa4676a263f7558cdaaf5a71c2592bebcbac22a0580e33cf3406c103da2"
 dependencies = [
  "anyhow",
  "base64",
@@ -13009,19 +13267,19 @@
  "directories-next",
  "file-per-thread-logger",
  "log",
- "rustix 0.33.7",
+ "rustix",
  "serde",
  "sha2 0.9.9",
  "toml",
- "winapi",
+ "windows-sys 0.36.1",
  "zstd",
 ]
 
 [[package]]
 name = "wasmtime-cranelift"
-version = "0.38.3"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f264ff6b4df247d15584f2f53d009fbc90032cfdc2605b52b961bffc71b6eccd"
+checksum = "058217e28644b012bdcdf0e445f58d496d78c2e0b6a6dd93558e701591dad705"
 dependencies = [
  "anyhow",
  "cranelift-codegen",
@@ -13031,8 +13289,7 @@
  "cranelift-wasm",
  "gimli",
  "log",
- "more-asserts",
- "object 0.28.4",
+ "object",
  "target-lexicon",
  "thiserror",
  "wasmparser",
@@ -13041,17 +13298,16 @@
 
 [[package]]
 name = "wasmtime-environ"
-version = "0.38.3"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "839d2820e4b830f4b9e7aa08d4c0acabf4a5036105d639f6dfa1c6891c73bdc6"
+checksum = "c7af06848df28b7661471d9a80d30a973e0f401f2e3ed5396ad7e225ed217047"
 dependencies = [
  "anyhow",
  "cranelift-entity",
  "gimli",
  "indexmap",
  "log",
- "more-asserts",
- "object 0.28.4",
+ "object",
  "serde",
  "target-lexicon",
  "thiserror",
@@ -13061,9 +13317,9 @@
 
 [[package]]
 name = "wasmtime-jit"
-version = "0.38.3"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef0a0bcbfa18b946d890078ba0e1bc76bcc53eccfb40806c0020ec29dcd1bd49"
+checksum = "9028fb63a54185b3c192b7500ef8039c7bb8d7f62bfc9e7c258483a33a3d13bb"
 dependencies = [
  "addr2line",
  "anyhow",
@@ -13072,38 +13328,36 @@
  "cpp_demangle",
  "gimli",
  "log",
- "object 0.28.4",
- "region",
+ "object",
  "rustc-demangle",
- "rustix 0.33.7",
+ "rustix",
  "serde",
  "target-lexicon",
  "thiserror",
  "wasmtime-environ",
  "wasmtime-jit-debug",
  "wasmtime-runtime",
- "winapi",
+ "windows-sys 0.36.1",
 ]
 
 [[package]]
 name = "wasmtime-jit-debug"
-version = "0.38.3"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f4779d976206c458edd643d1ac622b6c37e4a0800a8b1d25dfbf245ac2f2cac"
+checksum = "25e82d4ef93296785de7efca92f7679dc67fe68a13b625a5ecc8d7503b377a37"
 dependencies = [
- "lazy_static",
- "object 0.28.4",
- "rustix 0.33.7",
+ "object",
+ "once_cell",
+ "rustix",
 ]
 
 [[package]]
 name = "wasmtime-runtime"
-version = "0.38.3"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7eb6ffa169eb5dcd18ac9473c817358cd57bc62c244622210566d473397954a"
+checksum = "9f0e9bea7d517d114fe66b930b2124ee086516ee93eeebfd97f75f366c5b0553"
 dependencies = [
  "anyhow",
- "backtrace",
  "cc",
  "cfg-if 1.0.0",
  "indexmap",
@@ -13112,21 +13366,21 @@
  "mach",
  "memfd",
  "memoffset",
- "more-asserts",
+ "paste",
  "rand 0.8.5",
- "region",
- "rustix 0.33.7",
+ "rustix",
  "thiserror",
+ "wasmtime-asm-macros",
  "wasmtime-environ",
  "wasmtime-jit-debug",
- "winapi",
+ "windows-sys 0.36.1",
 ]
 
 [[package]]
 name = "wasmtime-types"
-version = "0.38.3"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d932b0ac5336f7308d869703dd225610a6a3aeaa8e968c52b43eed96cefb1c2"
+checksum = "69b83e93ed41b8fdc936244cfd5e455480cf1eca1fd60c78a0040038b4ce5075"
 dependencies = [
  "cranelift-entity",
  "serde",
@@ -13174,8 +13428,8 @@
 
 [[package]]
 name = "westend-runtime"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "beefy-primitives",
  "bitvec 1.0.1",
@@ -13199,6 +13453,7 @@
  "pallet-election-provider-multi-phase",
  "pallet-election-provider-support-benchmarking",
  "pallet-elections-phragmen",
+ "pallet-fast-unstake",
  "pallet-grandpa",
  "pallet-identity",
  "pallet-im-online",
@@ -13263,8 +13518,8 @@
 
 [[package]]
 name = "westend-runtime-constants"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "frame-support",
  "polkadot-primitives",
@@ -13348,6 +13603,27 @@
 ]
 
 [[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc 0.42.0",
+ "windows_i686_gnu 0.42.0",
+ "windows_i686_msvc 0.42.0",
+ "windows_x86_64_gnu 0.42.0",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc 0.42.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e"
+
+[[package]]
 name = "windows_aarch64_msvc"
 version = "0.34.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -13360,6 +13636,12 @@
 checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
 
 [[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4"
+
+[[package]]
 name = "windows_i686_gnu"
 version = "0.34.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -13372,6 +13654,12 @@
 checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
 
 [[package]]
+name = "windows_i686_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7"
+
+[[package]]
 name = "windows_i686_msvc"
 version = "0.34.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -13384,6 +13672,12 @@
 checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
 
 [[package]]
+name = "windows_i686_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246"
+
+[[package]]
 name = "windows_x86_64_gnu"
 version = "0.34.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -13396,6 +13690,18 @@
 checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
 
 [[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028"
+
+[[package]]
 name = "windows_x86_64_msvc"
 version = "0.34.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -13408,6 +13714,12 @@
 checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
 
 [[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
+
+[[package]]
 name = "winreg"
 version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -13444,8 +13756,8 @@
 
 [[package]]
 name = "xcm"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "derivative",
  "impl-trait-for-tuples",
@@ -13458,8 +13770,8 @@
 
 [[package]]
 name = "xcm-builder"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -13478,8 +13790,8 @@
 
 [[package]]
 name = "xcm-executor"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -13496,8 +13808,8 @@
 
 [[package]]
 name = "xcm-procedural"
-version = "0.9.29"
-source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.29#94078b44fb6c9767bf60ffcaaa3be40681be5a76"
+version = "0.9.30"
+source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.30#064536093f5ff70d867f4bbce8d4c41a406d317a"
 dependencies = [
  "Inflector",
  "proc-macro2",
@@ -13511,7 +13823,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e5d9ba232399af1783a58d8eb26f6b5006fbefe2dc9ef36bd283324792d03ea5"
 dependencies = [
- "futures 0.3.24",
+ "futures 0.3.25",
  "log",
  "nohash-hasher",
  "parking_lot 0.12.1",
modifiedCargo.tomldiffbeforeafterboth
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -14,3 +14,23 @@
 default-members = ['node/*', 'runtime/opal']
 [profile.release]
 panic = 'unwind'
+
+[workspace.dependencies.orml-vesting]
+git = "https://github.com/uniquenetwork/open-runtime-module-library"
+branch = "polkadot-v0.9.30"
+default-features = false
+
+[workspace.dependencies.orml-xtokens]
+git = "https://github.com/uniquenetwork/open-runtime-module-library"
+branch = "polkadot-v0.9.30"
+default-features = false
+
+[workspace.dependencies.orml-tokens]
+git = "https://github.com/uniquenetwork/open-runtime-module-library"
+branch = "polkadot-v0.9.30"
+default-features = false
+
+[workspace.dependencies.orml-traits]
+git = "https://github.com/uniquenetwork/open-runtime-module-library"
+branch = "polkadot-v0.9.30"
+default-features = false
modifiedREADME.mddiffbeforeafterboth
--- a/README.md
+++ b/README.md
@@ -92,7 +92,7 @@
 ```
 git clone https://github.com/paritytech/polkadot.git
 cd polkadot
-git checkout release-v0.9.29
+git checkout release-v0.9.30
 cargo build --release
 ```
 
modifiedclient/rpc/Cargo.tomldiffbeforeafterboth
--- a/client/rpc/Cargo.toml
+++ b/client/rpc/Cargo.toml
@@ -14,9 +14,9 @@
 jsonrpsee = { version = "0.15.1", features = ["server", "macros"] }
 anyhow = "1.0.57"
 
-sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-blockchain = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-rpc = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-blockchain = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-rpc = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
modifiedcrates/evm-coder/Cargo.tomldiffbeforeafterboth
--- a/crates/evm-coder/Cargo.toml
+++ b/crates/evm-coder/Cargo.toml
@@ -11,10 +11,10 @@
 primitive-types = { version = "0.11.1", default-features = false }
 # Evm doesn't have reexports for log and others
 ethereum = { version = "0.12.0", default-features = false }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 # Error types for execution
-evm-core = { default-features = false , git = "https://github.com/uniquenetwork/evm", branch = "unique-polkadot-v0.9.29" }
+evm-core = { default-features = false , git = "https://github.com/uniquenetwork/evm", branch = "unique-polkadot-v0.9.30" }
 # We have tuple-heavy code in solidity.rs
 impl-trait-for-tuples = "0.2.2"
 
modifiednode/cli/Cargo.tomldiffbeforeafterboth
--- a/node/cli/Cargo.toml
+++ b/node/cli/Cargo.toml
@@ -3,7 +3,7 @@
 
 [build-dependencies.substrate-build-script-utils]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 ################################################################################
 # Substrate Dependecies
@@ -16,158 +16,158 @@
 
 [dependencies.frame-benchmarking]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-benchmarking-cli]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.try-runtime-cli]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-transaction-payment-rpc]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.substrate-prometheus-endpoint]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sc-basic-authorship]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sc-chain-spec]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sc-cli]
 features = ['wasmtime']
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sc-client-api]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sc-consensus]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sc-consensus-aura]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sc-executor]
 features = ['wasmtime']
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sc-finality-grandpa]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sc-keystore]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sc-rpc]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sc-rpc-api]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sc-service]
 features = ['wasmtime']
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sc-telemetry]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sc-transaction-pool]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sc-tracing]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sc-sysinfo]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-block-builder]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-api]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-blockchain]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-consensus]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-consensus-aura]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-core]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-finality-grandpa]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-inherents]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-keystore]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-offchain]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-runtime]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-session]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-timestamp]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-transaction-pool]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-trie]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.substrate-frame-rpc-system]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sc-network]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.serde]
 features = ['derive']
@@ -178,76 +178,76 @@
 
 [dependencies.sc-consensus-manual-seal]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 ################################################################################
 # Cumulus dependencies
 
 [dependencies.cumulus-client-consensus-aura]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.cumulus-client-consensus-common]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.cumulus-client-collator]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.cumulus-client-cli]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.cumulus-client-network]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.cumulus-primitives-core]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.cumulus-primitives-parachain-inherent]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.cumulus-client-service]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.cumulus-relay-chain-interface]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.cumulus-relay-chain-inprocess-interface]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.cumulus-relay-chain-rpc-interface]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 ################################################################################
 # Polkadot dependencies
 [dependencies.polkadot-primitives]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
+branch = "release-v0.9.30"
 
 [dependencies.polkadot-service]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
+branch = "release-v0.9.30"
 
 [dependencies.polkadot-cli]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
+branch = "release-v0.9.30"
 
 [dependencies.polkadot-test-service]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
+branch = "release-v0.9.30"
 
 [dependencies.polkadot-parachain]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
+branch = "release-v0.9.30"
 
 
 ################################################################################
@@ -277,7 +277,7 @@
 
 [dependencies.pallet-transaction-payment-rpc-runtime-api]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 ################################################################################
 # Package
@@ -291,7 +291,7 @@
 license = 'GPLv3'
 name = 'unique-node'
 repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = "0.9.29"
+version = "0.9.30"
 
 [[bin]]
 name = 'unique-collator'
@@ -309,16 +309,16 @@
 jsonrpsee = { version = "0.15.1", features = ["server", "macros"] }
 tokio = { version = "1.19.2", features = ["time"] }
 
-fc-rpc-core = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fc-consensus = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fc-mapping-sync = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fc-rpc = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fc-db = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fp-rpc = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-pallet-ethereum = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+fc-rpc-core = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fc-consensus = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fc-mapping-sync = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fc-rpc = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fc-db = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fp-rpc = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+pallet-ethereum = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 
 unique-rpc = { default-features = false, path = "../rpc" }
-app-promotion-rpc = { path = "../../primitives/app_promotion_rpc", default-features = false}
+app-promotion-rpc = { path = "../../primitives/app_promotion_rpc", default-features = false }
 rmrk-rpc = { path = "../../primitives/rmrk-rpc" }
 
 [features]
@@ -328,6 +328,7 @@
     'quartz-runtime?/runtime-benchmarks',
     'opal-runtime/runtime-benchmarks',
     'polkadot-service/runtime-benchmarks',
+    'sc-service/runtime-benchmarks',
 ]
 try-runtime = [
     'unique-runtime?/try-runtime',
modifiednode/cli/src/cli.rsdiffbeforeafterboth
--- a/node/cli/src/cli.rs
+++ b/node/cli/src/cli.rs
@@ -52,6 +52,7 @@
 
 	/// The custom benchmark subcommmand benchmarking runtime pallets.
 	#[clap(subcommand)]
+	#[cfg(feature = "runtime-benchmarks")]
 	Benchmark(frame_benchmarking_cli::BenchmarkCmd),
 
 	/// Try runtime
modifiednode/cli/src/command.rsdiffbeforeafterboth
--- a/node/cli/src/command.rs
+++ b/node/cli/src/command.rs
@@ -371,19 +371,14 @@
 				cmd.run(&*spec)
 			})
 		}
+		#[cfg(feature = "runtime-benchmarks")]
 		Some(Subcommand::Benchmark(cmd)) => {
 			use frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE};
 			let runner = cli.create_runner(cmd)?;
 			// Switch on the concrete benchmark sub-command-
 			match cmd {
 				BenchmarkCmd::Pallet(cmd) => {
-					if cfg!(feature = "runtime-benchmarks") {
-						runner.sync_run(|config| cmd.run::<Block, DefaultRuntimeExecutor>(config))
-					} else {
-						Err("Benchmarking wasn't enabled when building the node. \
-					You can enable it with `--features runtime-benchmarks`."
-							.into())
-					}
+					runner.sync_run(|config| cmd.run::<Block, DefaultRuntimeExecutor>(config))
 				}
 				BenchmarkCmd::Block(cmd) => runner.sync_run(|config| {
 					let partials = new_partial::<
modifiednode/cli/src/service.rsdiffbeforeafterboth
--- a/node/cli/src/service.rs
+++ b/node/cli/src/service.rs
@@ -438,7 +438,7 @@
 	let transaction_pool = params.transaction_pool.clone();
 	let import_queue = cumulus_client_service::SharedImportQueue::new(params.import_queue);
 
-	let (network, system_rpc_tx, start_network) =
+	let (network, system_rpc_tx, tx_handler_controller, start_network) =
 		sc_service::build_network(sc_service::BuildNetworkParams {
 			config: &parachain_config,
 			client: client.clone(),
@@ -521,6 +521,7 @@
 		network: network.clone(),
 		system_rpc_tx,
 		telemetry: telemetry.as_mut(),
+		tx_handler_controller,
 	})?;
 
 	if let Some(hwbench) = hwbench {
@@ -538,7 +539,9 @@
 
 	let announce_block = {
 		let network = network.clone();
-		Arc::new(move |hash, data| network.announce_block(hash, data))
+		Arc::new(Box::new(move |hash, data| {
+			network.announce_block(hash, data)
+		}))
 	};
 
 	let relay_chain_slot_duration = Duration::from_secs(6);
@@ -623,7 +626,6 @@
 		_,
 		_,
 		_,
-		_,
 	>(cumulus_client_consensus_aura::ImportQueueParams {
 		block_import: client.clone(),
 		client: client.clone(),
@@ -636,10 +638,9 @@
 					slot_duration,
 				);
 
-			Ok((time, slot))
+			Ok((slot, time))
 		},
 		registry: config.prometheus_registry(),
-		can_author_with: sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone()),
 		spawner: &task_manager.spawn_essential_handle(),
 		telemetry,
 	})
@@ -747,7 +748,7 @@
 								"Failed to create parachain inherent",
 							)
 						})?;
-						Ok((time, slot, parachain_inherent))
+						Ok((slot, time, parachain_inherent))
 					}
 				},
 				block_import: client.clone(),
@@ -861,7 +862,7 @@
 		prometheus_registry.clone(),
 	));
 
-	let (network, system_rpc_tx, network_starter) =
+	let (network, system_rpc_tx, tx_handler_controller, network_starter) =
 		sc_service::build_network(sc_service::BuildNetworkParams {
 			config: &config,
 			client: client.clone(),
@@ -952,12 +953,14 @@
 							current_para_block,
 							relay_offset: 1000,
 							relay_blocks_per_para_block: 2,
+							para_blocks_per_relay_epoch: 0,
 							xcm_config: cumulus_primitives_parachain_inherent::MockXcmConfig::new(
 								&*client_for_xcm,
 								block,
 								Default::default(),
 								Default::default(),
 							),
+							relay_randomness_config: (),
 							raw_downward_messages: vec![],
 							raw_horizontal_messages: vec![],
 						};
@@ -1034,6 +1037,7 @@
 		system_rpc_tx,
 		config,
 		telemetry: None,
+		tx_handler_controller,
 	})?;
 
 	network_starter.start_network();
modifiednode/rpc/Cargo.tomldiffbeforeafterboth
--- a/node/rpc/Cargo.toml
+++ b/node/rpc/Cargo.toml
@@ -13,40 +13,40 @@
 futures = { version = "0.3.17", features = ["compat"] }
 jsonrpsee = { version = "0.15.1", features = ["server", "macros"] }
 # pallet-contracts-rpc = { git = 'https://github.com/paritytech/substrate', branch = 'master' }
-pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sc-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sc-consensus-epochs = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sc-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sc-finality-grandpa-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-storage = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-substrate-frame-rpc-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sc-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sc-consensus-epochs = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sc-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sc-finality-grandpa-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-storage = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+substrate-frame-rpc-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 tokio = { version = "1.19.2", features = ["macros", "sync"] }
 
-pallet-ethereum = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fp-storage = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fc-db = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fc-mapping-sync = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+pallet-ethereum = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fp-storage = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fc-db = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fc-mapping-sync = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 
 pallet-common = { default-features = false, path = "../../pallets/common" }
 up-common = { path = "../../primitives/common" }
modifiedpallets/app-promotion/Cargo.tomldiffbeforeafterboth
--- a/pallets/app-promotion/Cargo.toml
+++ b/pallets/app-promotion/Cargo.toml
@@ -48,17 +48,17 @@
 # Substrate Dependencies
 
 codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = '3.1.2' }
-frame-benchmarking = {default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-system ={ default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-pallet-balances ={ default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-pallet-timestamp ={ default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-pallet-randomness-collective-flip ={ default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-pallet-evm ={ default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-sp-std ={ default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-io ={ default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+frame-benchmarking = {default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-system ={ default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+pallet-balances ={ default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+pallet-timestamp ={ default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+pallet-randomness-collective-flip ={ default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+pallet-evm ={ default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+sp-std ={ default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-io ={ default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 serde = { default-features = false, features = ['derive'], version = '1.0.130' }
 
 ################################################################################
modifiedpallets/app-promotion/src/lib.rsdiffbeforeafterboth
--- a/pallets/app-promotion/src/lib.rs
+++ b/pallets/app-promotion/src/lib.rs
@@ -27,8 +27,8 @@
 //! The App Promotion pallet allows fund holders to stake at a certain daily rate of return.
 //! The mechanics implemented in the pallet allow it to act as a sponsor for collections / contracts,
 //! the list of which is set by the pallet administrator.
-//!  
 //!
+//!
 //! ## Interface
 //!	The pallet provides interfaces for funds, collection/contract operations (see [types] module).
 
@@ -146,7 +146,7 @@
 		type RelayBlockNumberProvider: BlockNumberProvider<BlockNumber = Self::BlockNumber>;
 
 		/// Events compatible with [`frame_system::Config::Event`].
-		type Event: IsType<<Self as frame_system::Config>::Event> + From<Event<Self>>;
+		type RuntimeEvent: IsType<<Self as frame_system::Config>::RuntimeEvent> + From<Event<Self>>;
 	}
 
 	#[pallet::pallet]
modifiedpallets/common/Cargo.tomldiffbeforeafterboth
--- a/pallets/common/Cargo.toml
+++ b/pallets/common/Cargo.toml
@@ -11,18 +11,18 @@
 version = '3.1.2'
 
 [dependencies]
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 up-data-structs = { default-features = false, path = '../../primitives/data-structs' }
 pallet-evm-coder-substrate = { default-features = false, path = '../../pallets/evm-coder-substrate' }
 evm-coder = { default-features = false, path = '../../crates/evm-coder' }
 ethereum = { version = "0.12.0", default-features = false }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 
 serde = { version = "1.0.130", default-features = false }
 scale-info = { version = "2.0.1", default-features = false, features = [
modifiedpallets/common/src/dispatch.rsdiffbeforeafterboth
--- a/pallets/common/src/dispatch.rs
+++ b/pallets/common/src/dispatch.rs
@@ -5,7 +5,7 @@
 		DispatchResultWithPostInfo, PostDispatchInfo, Weight, DispatchErrorWithPostInfo,
 		DispatchResult,
 	},
-	weights::Pays,
+	dispatch::Pays,
 	traits::Get,
 };
 use sp_runtime::DispatchError;
modifiedpallets/common/src/lib.rsdiffbeforeafterboth
--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -62,7 +62,7 @@
 	dispatch::{DispatchErrorWithPostInfo, DispatchResultWithPostInfo, Weight, PostDispatchInfo},
 	ensure,
 	traits::{Imbalance, Get, Currency, WithdrawReasons, ExistenceRequirement},
-	weights::Pays,
+	dispatch::Pays,
 	transactional,
 };
 use pallet_evm::GasWeightMapping;
@@ -363,7 +363,7 @@
 		type WeightInfo: WeightInfo;
 
 		/// Events compatible with [`frame_system::Config::Event`].
-		type Event: IsType<<Self as frame_system::Config>::Event> + From<Event<Self>>;
+		type RuntimeEvent: IsType<<Self as frame_system::Config>::RuntimeEvent> + From<Event<Self>>;
 
 		/// Handler of accounts and payment.
 		type Currency: Currency<Self::AccountId>;
modifiedpallets/configuration/Cargo.tomldiffbeforeafterboth
--- a/pallets/configuration/Cargo.toml
+++ b/pallets/configuration/Cargo.toml
@@ -10,13 +10,13 @@
 scale-info = { version = "2.0.1", default-features = false, features = [
 	"derive",
 ] }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-arithmetic = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-arithmetic = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 smallvec = "1.6.1"
 
 [features]
modifiedpallets/evm-coder-substrate/Cargo.tomldiffbeforeafterboth
--- a/pallets/evm-coder-substrate/Cargo.toml
+++ b/pallets/evm-coder-substrate/Cargo.toml
@@ -8,15 +8,15 @@
 scale-info = { version = "2.0.1", default-features = false, features = [
     "derive",
 ] }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 ethereum = { version = "0.12.0", default-features = false }
 evm-coder = { default-features = false, path = "../../crates/evm-coder" }
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 up-data-structs = { default-features = false, path = "../../primitives/data-structs" }
 
 [dependencies.codec]
modifiedpallets/evm-contract-helpers/Cargo.tomldiffbeforeafterboth
--- a/pallets/evm-contract-helpers/Cargo.toml
+++ b/pallets/evm-contract-helpers/Cargo.toml
@@ -12,16 +12,16 @@
 ethereum = { version = "0.12.0", default-features = false }
 
 # Substrate
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 
 # Unique
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.29" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.30" }
 
 # Locals
 evm-coder = { default-features = false, path = '../../crates/evm-coder' }
modifiedpallets/evm-contract-helpers/src/lib.rsdiffbeforeafterboth
--- a/pallets/evm-contract-helpers/src/lib.rs
+++ b/pallets/evm-contract-helpers/src/lib.rs
@@ -44,7 +44,7 @@
 		frame_system::Config + pallet_evm_coder_substrate::Config + pallet_evm::account::Config
 	{
 		/// Overarching event type.
-		type Event: IsType<<Self as frame_system::Config>::Event> + From<Event<Self>>;
+		type RuntimeEvent: IsType<<Self as frame_system::Config>::RuntimeEvent> + From<Event<Self>>;
 
 		/// Address, under which magic contract will be available
 		type ContractAddress: Get<H160>;
modifiedpallets/evm-contract-helpers/src/stubs/ContractHelpers.rawdiffbeforeafterboth

binary blob — no preview

modifiedpallets/evm-migration/Cargo.tomldiffbeforeafterboth
--- a/pallets/evm-migration/Cargo.toml
+++ b/pallets/evm-migration/Cargo.toml
@@ -8,15 +8,15 @@
 scale-info = { version = "2.0.1", default-features = false, features = [
     "derive",
 ] }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 
 [dependencies.codec]
 default-features = false
modifiedpallets/evm-transaction-payment/Cargo.tomldiffbeforeafterboth
--- a/pallets/evm-transaction-payment/Cargo.toml
+++ b/pallets/evm-transaction-payment/Cargo.toml
@@ -8,17 +8,17 @@
 scale-info = { version = "2.0.1", default-features = false, features = [
     "derive",
 ] }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.29" }
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.30" }
+fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 
 [dependencies.codec]
 default-features = false
modifiedpallets/foreign-assets/Cargo.tomldiffbeforeafterboth
--- a/pallets/foreign-assets/Cargo.toml
+++ b/pallets/foreign-assets/Cargo.toml
@@ -9,28 +9,27 @@
 serde = { version = "1.0.136", optional = true }
 scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
 codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false }
-sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29", default-features = false }
-sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29", default-features = false  }
-frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29", default-features = false }
-frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29", default-features = false }
+sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30", default-features = false }
+sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30", default-features = false  }
+frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30", default-features = false }
+frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30", default-features = false }
 up-data-structs = { default-features = false, path = '../../primitives/data-structs' }
-pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29", default-features = false }
+pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30", default-features = false }
 pallet-common = { default-features = false, path = '../common' }
 pallet-fungible = { default-features = false, path = '../fungible' }
-xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.29", default-features = false }
-xcm-builder = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.29", default-features = false }
-xcm-executor = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.29", default-features = false }
-#orml-tokens = { git = 'https://github.com/UniqueNetwork/open-runtime-module-library', branch = 'unique-polkadot-v0.9.24', version = "0.4.1-dev", default-features = false }
-orml-tokens = { git = "https://github.com/UniqueNetwork/open-runtime-module-library", branch = "polkadot-v0.9.29", version = "0.4.1-dev", default-features = false }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.30", default-features = false }
+xcm-builder = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.30", default-features = false }
+xcm-executor = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.30", default-features = false }
+orml-tokens.workspace = true
+frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 
 [dev-dependencies]
 serde_json = "1.0.68"
 hex = { version = "0.4" }
-sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 
 [features]
 default = ["std"]
modifiedpallets/foreign-assets/src/lib.rsdiffbeforeafterboth
--- a/pallets/foreign-assets/src/lib.rs
+++ b/pallets/foreign-assets/src/lib.rs
@@ -180,13 +180,13 @@
 		+ pallet_balances::Config
 	{
 		/// The overarching event type.
-		type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>;
+		type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;
 
 		/// Currency type for withdraw and balance storage.
 		type Currency: Currency<Self::AccountId>;
 
 		/// Required origin for registering asset.
-		type RegisterOrigin: EnsureOrigin<Self::Origin>;
+		type RegisterOrigin: EnsureOrigin<Self::RuntimeOrigin>;
 
 		/// Weight information for the extrinsics in this module.
 		type WeightInfo: WeightInfo;
modifiedpallets/fungible/Cargo.tomldiffbeforeafterboth
--- a/pallets/fungible/Cargo.toml
+++ b/pallets/fungible/Cargo.toml
@@ -11,19 +11,19 @@
 version = '3.1.2'
 
 [dependencies]
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 pallet-common = { default-features = false, path = '../common' }
 pallet-structure = { default-features = false, path = '../structure' }
 up-data-structs = { default-features = false, path = '../../primitives/data-structs' }
 evm-coder = { default-features = false, path = '../../crates/evm-coder' }
 pallet-evm-coder-substrate = { default-features = false, path = '../evm-coder-substrate' }
 ethereum = { version = "0.12.0", default-features = false }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 scale-info = { version = "2.0.1", default-features = false, features = [
     "derive",
 ] }
modifiedpallets/fungible/src/stubs/UniqueFungible.rawdiffbeforeafterboth

binary blob — no preview

modifiedpallets/inflation/Cargo.tomldiffbeforeafterboth
--- a/pallets/inflation/Cargo.toml
+++ b/pallets/inflation/Cargo.toml
@@ -44,37 +44,37 @@
 default-features = false
 optional = true
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-support]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-system]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-balances]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-timestamp]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-randomness-collective-flip]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-std]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.serde]
 default-features = false
@@ -84,17 +84,17 @@
 [dependencies.sp-runtime]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-core]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-io]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies]
 scale-info = { version = "2.0.1", default-features = false, features = [
modifiedpallets/inflation/src/tests.rsdiffbeforeafterboth
--- a/pallets/inflation/src/tests.rs
+++ b/pallets/inflation/src/tests.rs
@@ -47,7 +47,7 @@
 	type AccountStore = System;
 	type Balance = u64;
 	type DustRemoval = ();
-	type Event = ();
+	type RuntimeEvent = ();
 	type ExistentialDeposit = ExistentialDeposit;
 	type WeightInfo = ();
 	type MaxLocks = MaxLocks;
@@ -79,8 +79,8 @@
 	type BlockWeights = ();
 	type BlockLength = ();
 	type DbWeight = ();
-	type Origin = Origin;
-	type Call = Call;
+	type RuntimeOrigin = RuntimeOrigin;
+	type RuntimeCall = RuntimeCall;
 	type Index = u64;
 	type BlockNumber = u64;
 	type Hash = H256;
@@ -88,7 +88,7 @@
 	type AccountId = u64;
 	type Lookup = IdentityLookup<Self::AccountId>;
 	type Header = Header;
-	type Event = ();
+	type RuntimeEvent = ();
 	type BlockHashCount = BlockHashCount;
 	type Version = ();
 	type PalletInfo = PalletInfo;
modifiedpallets/nonfungible/Cargo.tomldiffbeforeafterboth
--- a/pallets/nonfungible/Cargo.toml
+++ b/pallets/nonfungible/Cargo.toml
@@ -11,19 +11,19 @@
 version = '3.1.2'
 
 [dependencies]
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 pallet-common = { default-features = false, path = '../common' }
 pallet-structure = { default-features = false, path = '../structure' }
 up-data-structs = { default-features = false, path = '../../primitives/data-structs' }
 evm-coder = { default-features = false, path = '../../crates/evm-coder' }
 pallet-evm-coder-substrate = { default-features = false, path = '../evm-coder-substrate' }
 ethereum = { version = "0.12.0", default-features = false }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 scale-info = { version = "2.0.1", default-features = false, features = [
     "derive",
 ] }
modifiedpallets/nonfungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -97,7 +97,7 @@
 	storage::with_transaction,
 	pallet_prelude::DispatchResultWithPostInfo,
 	pallet_prelude::Weight,
-	weights::{PostDispatchInfo, Pays},
+	dispatch::{PostDispatchInfo, Pays},
 };
 use up_data_structs::{
 	AccessMode, CollectionId, CollectionFlags, CustomDataLimit, TokenId, CreateCollectionData,
modifiedpallets/proxy-rmrk-core/Cargo.tomldiffbeforeafterboth
--- a/pallets/proxy-rmrk-core/Cargo.toml
+++ b/pallets/proxy-rmrk-core/Cargo.toml
@@ -11,17 +11,17 @@
 version = '3.1.2'
 
 [dependencies]
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 pallet-common = { default-features = false, path = '../common' }
 pallet-nonfungible = { default-features = false, path = "../../pallets/nonfungible" }
 pallet-structure = { default-features = false, path = "../../pallets/structure" }
 up-data-structs = { default-features = false, path = '../../primitives/data-structs' }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 rmrk-traits = { default-features = false, path = "../../primitives/rmrk-traits" }
 scale-info = { version = "2.0.1", default-features = false, features = [
     "derive",
modifiedpallets/proxy-rmrk-core/src/lib.rsdiffbeforeafterboth
--- a/pallets/proxy-rmrk-core/src/lib.rs
+++ b/pallets/proxy-rmrk-core/src/lib.rs
@@ -197,7 +197,7 @@
 		frame_system::Config + pallet_common::Config + pallet_nonfungible::Config + account::Config
 	{
 		/// Overarching event type.
-		type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>;
+		type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;
 
 		/// The weight information of this pallet.
 		type WeightInfo: WeightInfo;
modifiedpallets/proxy-rmrk-equip/Cargo.tomldiffbeforeafterboth
--- a/pallets/proxy-rmrk-equip/Cargo.toml
+++ b/pallets/proxy-rmrk-equip/Cargo.toml
@@ -11,16 +11,16 @@
 version = '3.1.2'
 
 [dependencies]
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 pallet-common = { default-features = false, path = '../common' }
 pallet-nonfungible = { default-features = false, path = "../../pallets/nonfungible" }
 up-data-structs = { default-features = false, path = '../../primitives/data-structs' }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 rmrk-traits = { default-features = false, path = "../../primitives/rmrk-traits" }
 scale-info = { version = "2.0.1", default-features = false, features = [
     "derive",
modifiedpallets/proxy-rmrk-equip/src/lib.rsdiffbeforeafterboth
--- a/pallets/proxy-rmrk-equip/src/lib.rs
+++ b/pallets/proxy-rmrk-equip/src/lib.rs
@@ -163,7 +163,7 @@
 	#[pallet::config]
 	pub trait Config: frame_system::Config + pallet_rmrk_core::Config {
 		/// Overarching event type.
-		type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>;
+		type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;
 
 		/// The weight information of this pallet.
 		type WeightInfo: WeightInfo;
modifiedpallets/refungible/Cargo.tomldiffbeforeafterboth
--- a/pallets/refungible/Cargo.toml
+++ b/pallets/refungible/Cargo.toml
@@ -11,17 +11,17 @@
 version = '3.1.2'
 
 [dependencies]
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 evm-coder = { default-features = false, path = '../../crates/evm-coder' }
 pallet-evm-coder-substrate = { default-features = false, path = '../../pallets/evm-coder-substrate' }
 pallet-common = { default-features = false, path = '../common' }
 pallet-structure = { default-features = false, path = '../structure' }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 
 struct-versioning = { path = "../../crates/struct-versioning" }
 up-data-structs = { default-features = false, path = '../../primitives/data-structs' }
modifiedpallets/scheduler/Cargo.tomldiffbeforeafterboth
--- a/pallets/scheduler/Cargo.toml
+++ b/pallets/scheduler/Cargo.toml
@@ -16,20 +16,20 @@
 	"derive",
 ] }
 
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-core = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.29' }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-core = { default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.30' }
+frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 
-up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.29" }
+up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.30" }
 log = { version = "0.4.16", default-features = false }
 
 [dev-dependencies]
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 
 [features]
 default = ["std"]
modifiedpallets/scheduler/src/lib.rsdiffbeforeafterboth
--- a/pallets/scheduler/src/lib.rs
+++ b/pallets/scheduler/src/lib.rs
@@ -86,13 +86,13 @@
 use sp_std::{borrow::Borrow, cmp::Ordering, marker::PhantomData, prelude::*};
 
 use frame_support::{
-	dispatch::{DispatchError, DispatchResult, Dispatchable, Parameter},
+	dispatch::{DispatchError, DispatchResult, Dispatchable, Parameter, GetDispatchInfo},
 	traits::{
 		schedule::{self, DispatchTime, MaybeHashed},
 		NamedReservableCurrency, EnsureOrigin, Get, IsType, OriginTrait, PrivilegeCmp,
 		StorageVersion,
 	},
-	weights::{GetDispatchInfo, Weight},
+	weights::{Weight},
 };
 
 pub use weights::WeightInfo;
@@ -104,7 +104,8 @@
 pub const MAX_TASK_ID_LENGTH_IN_BYTES: u8 = 16;
 
 type ScheduledId = [u8; MAX_TASK_ID_LENGTH_IN_BYTES as usize];
-pub type CallOrHashOf<T> = MaybeHashed<<T as Config>::Call, <T as frame_system::Config>::Hash>;
+pub type CallOrHashOf<T> =
+	MaybeHashed<<T as Config>::RuntimeCall, <T as frame_system::Config>::Hash>;
 
 /// Information regarding an item to be executed in the future.
 #[cfg_attr(any(feature = "std", test), derive(PartialEq, Eq))]
@@ -209,12 +210,12 @@
 	#[pallet::config]
 	pub trait Config: frame_system::Config {
 		/// The overarching event type.
-		type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>;
+		type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;
 
 		/// The aggregated origin which the dispatch will take.
-		type Origin: OriginTrait<PalletsOrigin = Self::PalletsOrigin>
+		type RuntimeOrigin: OriginTrait<PalletsOrigin = Self::PalletsOrigin>
 			+ From<Self::PalletsOrigin>
-			+ IsType<<Self as system::Config>::Origin>;
+			+ IsType<<Self as system::Config>::RuntimeOrigin>;
 
 		/// The caller origin, overarching type of all pallets origins.
 		type PalletsOrigin: From<system::RawOrigin<Self::AccountId>> + Codec + Clone + Eq + TypeInfo;
@@ -222,9 +223,11 @@
 		type Currency: NamedReservableCurrency<Self::AccountId, ReserveIdentifier = ScheduledId>;
 
 		/// The aggregated call type.
-		type Call: Parameter
-			+ Dispatchable<Origin = <Self as Config>::Origin, PostInfo = PostDispatchInfo>
-			+ GetDispatchInfo
+		type RuntimeCall: Parameter
+			+ Dispatchable<
+				RuntimeOrigin = <Self as Config>::RuntimeOrigin,
+				PostInfo = PostDispatchInfo,
+			> + GetDispatchInfo
 			+ From<system::Call<Self>>;
 
 		/// The maximum weight that may be scheduled per block for any dispatchables of less
@@ -233,7 +236,7 @@
 		type MaximumWeight: Get<Weight>;
 
 		/// Required origin to schedule or cancel calls.
-		type ScheduleOrigin: EnsureOrigin<<Self as system::Config>::Origin>;
+		type ScheduleOrigin: EnsureOrigin<<Self as system::Config>::RuntimeOrigin>;
 
 		/// Compare the privileges of origins.
 		///
@@ -271,7 +274,7 @@
 		fn reserve_balance(
 			id: ScheduledId,
 			sponsor: <T as frame_system::Config>::AccountId,
-			call: <T as Config>::Call,
+			call: <T as Config>::RuntimeCall,
 			count: u32,
 		) -> Result<(), DispatchError>;
 
@@ -279,13 +282,13 @@
 		fn pay_for_call(
 			id: ScheduledId,
 			sponsor: <T as frame_system::Config>::AccountId,
-			call: <T as Config>::Call,
+			call: <T as Config>::RuntimeCall,
 		) -> Result<u128, DispatchError>;
 
 		/// Resolve the call dispatch, including any post-dispatch operations.
 		fn dispatch_call(
 			signer: T::AccountId,
-			function: <T as Config>::Call,
+			function: <T as Config>::RuntimeCall,
 		) -> Result<
 			Result<PostDispatchInfo, DispatchErrorWithPostInfo<PostDispatchInfo>>,
 			TransactionValidityError,
@@ -404,9 +407,10 @@
 				let periodic = s.maybe_periodic.is_some();
 				let call_weight = call.get_dispatch_info().weight;
 				let mut item_weight = T::WeightInfo::item(periodic, named, Some(resolved));
-				let origin =
-					<<T as Config>::Origin as From<T::PalletsOrigin>>::from(s.origin.clone())
-						.into();
+				let origin = <<T as Config>::RuntimeOrigin as From<T::PalletsOrigin>>::from(
+					s.origin.clone(),
+				)
+				.into();
 				if ensure_signed(origin).is_ok() {
 					// Weights of Signed dispatches expect their signing account to be whitelisted.
 					item_weight.saturating_accrue(T::DbWeight::get().reads_writes(1, 1));
@@ -420,7 +424,7 @@
 				let test_weight = total_weight
 					.saturating_add(call_weight)
 					.saturating_add(item_weight);
-				if !hard_deadline && order > 0 && test_weight > limit {
+				if !hard_deadline && order > 0 && test_weight.all_gt(limit) {
 					// Cannot be scheduled this block - postpone until next.
 					total_weight.saturating_accrue(T::WeightInfo::item(false, named, None));
 					if let Some(ref id) = s.maybe_id {
@@ -436,8 +440,10 @@
 				}
 
 				let sender = ensure_signed(
-					<<T as Config>::Origin as From<T::PalletsOrigin>>::from(s.origin.clone())
-						.into(),
+					<<T as Config>::RuntimeOrigin as From<T::PalletsOrigin>>::from(
+						s.origin.clone(),
+					)
+					.into(),
 				)
 				.unwrap();
 
@@ -514,7 +520,7 @@
 			call: Box<CallOrHashOf<T>>,
 		) -> DispatchResult {
 			T::ScheduleOrigin::ensure_origin(origin.clone())?;
-			let origin = <T as Config>::Origin::from(origin);
+			let origin = <T as Config>::RuntimeOrigin::from(origin);
 			Self::do_schedule_named(
 				id,
 				DispatchTime::At(when),
@@ -530,7 +536,7 @@
 		#[pallet::weight(<T as Config>::WeightInfo::cancel_named(T::MaxScheduledPerBlock::get()))]
 		pub fn cancel_named(origin: OriginFor<T>, id: ScheduledId) -> DispatchResult {
 			T::ScheduleOrigin::ensure_origin(origin.clone())?;
-			let origin = <T as Config>::Origin::from(origin);
+			let origin = <T as Config>::RuntimeOrigin::from(origin);
 			Self::do_cancel_named(Some(origin.caller().clone()), id)?;
 			Ok(())
 		}
@@ -550,7 +556,7 @@
 			call: Box<CallOrHashOf<T>>,
 		) -> DispatchResult {
 			T::ScheduleOrigin::ensure_origin(origin.clone())?;
-			let origin = <T as Config>::Origin::from(origin);
+			let origin = <T as Config>::RuntimeOrigin::from(origin);
 			Self::do_schedule_named(
 				id,
 				DispatchTime::After(after),
modifiedpallets/structure/Cargo.tomldiffbeforeafterboth
--- a/pallets/structure/Cargo.toml
+++ b/pallets/structure/Cargo.toml
@@ -4,10 +4,10 @@
 edition = "2021"
 
 [dependencies]
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 pallet-common = { path = "../common", default-features = false }
 parity-scale-codec = { version = "3.1.2", default-features = false, features = [
 	"derive",
@@ -16,7 +16,7 @@
 	"derive",
 ] }
 up-data-structs = { path = "../../primitives/data-structs", default-features = false }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 
 [features]
 default = ["std"]
modifiedpallets/structure/src/lib.rsdiffbeforeafterboth
--- a/pallets/structure/src/lib.rs
+++ b/pallets/structure/src/lib.rs
@@ -97,8 +97,10 @@
 	#[pallet::config]
 	pub trait Config: frame_system::Config + pallet_common::Config {
 		type WeightInfo: weights::WeightInfo;
-		type Event: IsType<<Self as frame_system::Config>::Event> + From<Event<Self>>;
-		type Call: Parameter + UnfilteredDispatchable<Origin = Self::Origin> + GetDispatchInfo;
+		type RuntimeEvent: IsType<<Self as frame_system::Config>::RuntimeEvent> + From<Event<Self>>;
+		type RuntimeCall: Parameter
+			+ UnfilteredDispatchable<RuntimeOrigin = Self::RuntimeOrigin>
+			+ GetDispatchInfo;
 	}
 
 	#[pallet::pallet]
modifiedpallets/unique/Cargo.tomldiffbeforeafterboth
--- a/pallets/unique/Cargo.toml
+++ b/pallets/unique/Cargo.toml
@@ -60,37 +60,37 @@
 default-features = false
 optional = true
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-support]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-system]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-std]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-runtime]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-core]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-io]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 ################################################################################
 # Local Dependencies
@@ -99,7 +99,7 @@
 scale-info = { version = "2.0.1", default-features = false, features = [
     "derive",
 ] }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 pallet-common = { default-features = false, path = "../common" }
 evm-coder = { default-features = false, path = '../../crates/evm-coder' }
 pallet-evm-coder-substrate = { default-features = false, path = '../../pallets/evm-coder-substrate' }
modifiedpallets/unique/src/eth/stubs/CollectionHelpers.rawdiffbeforeafterboth

binary blob — no preview

modifiedpallets/unique/src/lib.rsdiffbeforeafterboth
--- a/pallets/unique/src/lib.rs
+++ b/pallets/unique/src/lib.rs
@@ -122,7 +122,7 @@
 /// Configuration trait of this pallet.
 pub trait Config: system::Config + pallet_common::Config + Sized + TypeInfo {
 	/// Overarching event type.
-	type Event: From<Event<Self>> + Into<<Self as frame_system::Config>::Event>;
+	type RuntimeEvent: From<Event<Self>> + Into<<Self as frame_system::Config>::RuntimeEvent>;
 
 	/// Weight information for extrinsics in this pallet.
 	type WeightInfo: WeightInfo;
@@ -273,7 +273,7 @@
 	/// Type alias to Pallet, to be used by construct_runtime.
 	pub struct Module<T: Config> for enum Call
 	where
-		origin: T::Origin
+		origin: T::RuntimeOrigin
 	{
 		type Error = Error<T>;
 
modifiedprimitives/app_promotion_rpc/Cargo.tomldiffbeforeafterboth
--- a/primitives/app_promotion_rpc/Cargo.toml
+++ b/primitives/app_promotion_rpc/Cargo.toml
@@ -10,11 +10,11 @@
 codec = { package = "parity-scale-codec", version = "3.1.2", default-features = false, features = [
 	"derive",
 ] }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 
 [features]
 default = ["std"]
modifiedprimitives/common/Cargo.tomldiffbeforeafterboth
--- a/primitives/common/Cargo.toml
+++ b/primitives/common/Cargo.toml
@@ -6,7 +6,7 @@
 license = 'All Rights Reserved'
 name = 'up-common'
 repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = "0.9.29"
+version = "0.9.30"
 
 [features]
 default = ['std']
@@ -23,34 +23,34 @@
 [dependencies.sp-std]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-support]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-runtime]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-core]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-consensus-aura]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.fp-rpc]
 default-features = false
 git = "https://github.com/uniquenetwork/frontier"
-branch = "unique-polkadot-v0.9.29"
+branch = "unique-polkadot-v0.9.30"
 
 [dependencies.pallet-evm]
 default-features = false
 git = "https://github.com/uniquenetwork/frontier"
-branch = "unique-polkadot-v0.9.29"
+branch = "unique-polkadot-v0.9.30"
modifiedprimitives/data-structs/Cargo.tomldiffbeforeafterboth
--- a/primitives/data-structs/Cargo.toml
+++ b/primitives/data-structs/Cargo.toml
@@ -18,14 +18,14 @@
 serde = { version = "1.0.130", features = [
   'derive',
 ], default-features = false, optional = true }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 derivative = { version = "2.2.0", features = ["use_core"] }
 struct-versioning = { path = "../../crates/struct-versioning" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 rmrk-traits = { default-features = false, path = "../rmrk-traits" }
 bondrewd = { version = "0.1.14", features = ["derive"], default-features = false }
 
modifiedprimitives/rmrk-rpc/Cargo.tomldiffbeforeafterboth
--- a/primitives/rmrk-rpc/Cargo.toml
+++ b/primitives/rmrk-rpc/Cargo.toml
@@ -8,10 +8,10 @@
 codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = [
 	"derive",
 ] }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 serde = { version = "1.0.130", default-features = false, features = ["derive"] }
 rmrk-traits = { default-features = false, path = "../rmrk-traits" }
 
modifiedprimitives/rpc/Cargo.tomldiffbeforeafterboth
--- a/primitives/rpc/Cargo.toml
+++ b/primitives/rpc/Cargo.toml
@@ -10,11 +10,11 @@
 codec = { package = "parity-scale-codec", version = "3.1.2", default-features = false, features = [
 	"derive",
 ] }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 
 [features]
 default = ["std"]
modifiedruntime/common/config/ethereum.rsdiffbeforeafterboth
--- a/runtime/common/config/ethereum.rs
+++ b/runtime/common/config/ethereum.rs
@@ -10,7 +10,7 @@
 		dispatch::CollectionDispatchT, ethereum::sponsoring::EvmSponsorshipHandler,
 		config::sponsoring::DefaultSponsoringRateLimit, DealWithFees,
 	},
-	Runtime, Aura, Balances, Event, ChainId,
+	Runtime, Aura, Balances, RuntimeEvent, ChainId,
 };
 use pallet_evm::{EnsureAddressTruncated, HashedAddressMapping};
 use up_common::constants::*;
@@ -75,7 +75,7 @@
 	type PrecompilesType = ();
 	type PrecompilesValue = ();
 	type Currency = Balances;
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type OnMethodCall = (
 		pallet_evm_migration::OnMethodCall<Self>,
 		pallet_evm_contract_helpers::HelpersOnMethodCall<Self>,
@@ -95,7 +95,7 @@
 }
 
 impl pallet_ethereum::Config for Runtime {
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type StateRoot = pallet_ethereum::IntermediateStateRoot<Self>;
 }
 
@@ -112,7 +112,7 @@
 }
 
 impl pallet_evm_contract_helpers::Config for Runtime {
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type ContractAddress = HelpersContractAddress;
 	type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;
 }
modifiedruntime/common/config/orml.rsdiffbeforeafterboth
--- a/runtime/common/config/orml.rs
+++ b/runtime/common/config/orml.rs
@@ -28,7 +28,7 @@
 use sp_std::{vec, vec::Vec};
 use pallet_foreign_assets::{CurrencyId, NativeCurrency};
 use crate::{
-	Runtime, Event, RelayChainBlockNumberProvider,
+	Runtime, RuntimeEvent, RelayChainBlockNumberProvider,
 	runtime_common::config::{
 		xcm::{
 			SelfLocation, Weigher, XcmConfig, Ancestry,
@@ -96,7 +96,7 @@
 }
 
 impl orml_vesting::Config for Runtime {
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type Currency = pallet_balances::Pallet<Runtime>;
 	type MinVestedTransfer = MinVestedTransfer;
 	type VestedTransferOrigin = EnsureSigned<AccountId>;
@@ -106,13 +106,16 @@
 }
 
 impl orml_tokens::Config for Runtime {
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type Balance = Balance;
 	type Amount = Amount;
 	type CurrencyId = CurrencyId;
 	type WeightInfo = ();
 	type ExistentialDeposits = ExistentialDeposits;
 	type OnDust = orml_tokens::TransferDust<Runtime, TreasuryAccountId>;
+	type OnSlash = ();
+	type OnTransfer = ();
+	type OnDeposit = ();
 	type MaxLocks = MaxLocks;
 	type MaxReserves = MaxReserves;
 	// TODO: Add all module accounts
@@ -124,7 +127,7 @@
 }
 
 impl orml_xtokens::Config for Runtime {
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type Balance = Balance;
 	type CurrencyId = CurrencyId;
 	type CurrencyIdConvert = CurrencyIdConvert;
modifiedruntime/common/config/pallets/app_promotion.rsdiffbeforeafterboth
--- a/runtime/common/config/pallets/app_promotion.rs
+++ b/runtime/common/config/pallets/app_promotion.rs
@@ -16,7 +16,7 @@
 
 use crate::{
 	runtime_common::config::pallets::{TreasuryAccountId, RelayChainBlockNumberProvider},
-	Runtime, Balances, BlockNumber, Unique, Event, EvmContractHelpers,
+	Runtime, Balances, BlockNumber, Unique, RuntimeEvent, EvmContractHelpers,
 };
 
 use frame_support::{parameter_types, PalletId};
@@ -59,5 +59,5 @@
 	// type Day = Day;
 	type Nominal = Nominal;
 	type IntervalIncome = IntervalIncome;
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 }
modifiedruntime/common/config/pallets/foreign_asset.rsdiffbeforeafterboth
--- a/runtime/common/config/pallets/foreign_asset.rs
+++ b/runtime/common/config/pallets/foreign_asset.rs
@@ -1,8 +1,8 @@
-use crate::{Runtime, Event, Balances};
+use crate::{Runtime, RuntimeEvent, Balances};
 use up_common::types::AccountId;
 
 impl pallet_foreign_assets::Config for Runtime {
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type Currency = Balances;
 	type RegisterOrigin = frame_system::EnsureRoot<AccountId>;
 	type WeightInfo = pallet_foreign_assets::weights::SubstrateWeight<Self>;
modifiedruntime/common/config/pallets/mod.rsdiffbeforeafterboth
--- a/runtime/common/config/pallets/mod.rs
+++ b/runtime/common/config/pallets/mod.rs
@@ -23,7 +23,7 @@
 		weights::CommonWeights,
 		RelayChainBlockNumberProvider,
 	},
-	Runtime, Event, Call, Balances,
+	Runtime, RuntimeEvent, RuntimeCall, Balances,
 };
 use frame_support::traits::{ConstU32, ConstU64};
 use up_common::{
@@ -53,7 +53,7 @@
 
 impl pallet_common::Config for Runtime {
 	type WeightInfo = pallet_common::weights::SubstrateWeight<Self>;
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type Currency = Balances;
 	type CollectionCreationPrice = CollectionCreationPrice;
 	type TreasuryAccountId = TreasuryAccountId;
@@ -65,8 +65,8 @@
 }
 
 impl pallet_structure::Config for Runtime {
-	type Event = Event;
-	type Call = Call;
+	type RuntimeEvent = RuntimeEvent;
+	type RuntimeCall = RuntimeCall;
 	type WeightInfo = pallet_structure::weights::SubstrateWeight<Self>;
 }
 
@@ -93,7 +93,7 @@
 }
 
 impl pallet_unique::Config for Runtime {
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type WeightInfo = pallet_unique::weights::SubstrateWeight<Self>;
 	type CommonWeightInfo = CommonWeights<Self>;
 	type RefungibleExtensionsWeightInfo = CommonWeights<Self>;
modifiedruntime/common/config/pallets/rmrk.rsdiffbeforeafterboth
--- a/runtime/common/config/pallets/rmrk.rs
+++ b/runtime/common/config/pallets/rmrk.rs
@@ -14,14 +14,14 @@
 // You should have received a copy of the GNU General Public License
 // along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
-use crate::{Runtime, Event};
+use crate::{Runtime, RuntimeEvent};
 
 impl pallet_proxy_rmrk_core::Config for Runtime {
 	type WeightInfo = pallet_proxy_rmrk_core::weights::SubstrateWeight<Self>;
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 }
 
 impl pallet_proxy_rmrk_equip::Config for Runtime {
 	type WeightInfo = pallet_proxy_rmrk_equip::weights::SubstrateWeight<Self>;
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 }
modifiedruntime/common/config/pallets/scheduler.rsdiffbeforeafterboth
--- a/runtime/common/config/pallets/scheduler.rs
+++ b/runtime/common/config/pallets/scheduler.rs
@@ -43,11 +43,11 @@
 }
 
 impl pallet_unique_scheduler::Config for Runtime {
-	type Event = Event;
-	type Origin = Origin;
+	type RuntimeEvent = RuntimeEvent;
+	type RuntimeOrigin = RuntimeOrigin;
 	type Currency = Balances;
 	type PalletsOrigin = OriginCaller;
-	type Call = Call;
+	type RuntimeCall = RuntimeCall;
 	type MaximumWeight = MaximumSchedulerWeight;
 	type ScheduleOrigin = EnsureSigned<AccountId>;
 	type MaxScheduledPerBlock = MaxScheduledPerBlock;
modifiedruntime/common/config/parachain.rsdiffbeforeafterboth
--- a/runtime/common/config/parachain.rs
+++ b/runtime/common/config/parachain.rs
@@ -15,7 +15,7 @@
 // along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 use frame_support::{weights::Weight, parameter_types};
-use crate::{Runtime, Event, XcmpQueue, DmpQueue};
+use crate::{Runtime, RuntimeEvent, XcmpQueue, DmpQueue};
 use up_common::constants::*;
 
 parameter_types! {
@@ -24,7 +24,7 @@
 }
 
 impl cumulus_pallet_parachain_system::Config for Runtime {
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type SelfParaId = parachain_info::Pallet<Self>;
 	type OnSystemEvent = ();
 	// type DownwardMessageHandlers = cumulus_primitives_utility::UnqueuedDmpAsParent<
modifiedruntime/common/config/substrate.rsdiffbeforeafterboth
--- a/runtime/common/config/substrate.rs
+++ b/runtime/common/config/substrate.rs
@@ -18,8 +18,9 @@
 	traits::{Everything, ConstU32, NeverEnsureOrigin},
 	weights::{
 		constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight},
-		DispatchClass, ConstantMultiplier,
+		ConstantMultiplier,
 	},
+	dispatch::DispatchClass,
 	parameter_types, PalletId,
 };
 use sp_runtime::{
@@ -32,8 +33,8 @@
 	EnsureRoot,
 };
 use crate::{
-	runtime_common::DealWithFees, Runtime, Event, Call, Origin, PalletInfo, System, Balances,
-	Treasury, SS58Prefix, Version,
+	runtime_common::DealWithFees, Runtime, RuntimeEvent, RuntimeCall, RuntimeOrigin, PalletInfo,
+	System, Balances, Treasury, SS58Prefix, Version,
 };
 use up_common::{types::*, constants::*};
 
@@ -79,11 +80,11 @@
 	/// The weight of the overhead invoked on the block import process, independent of the extrinsics included in that block.
 	type BlockWeights = RuntimeBlockWeights;
 	/// The aggregated dispatch type that is available for extrinsics.
-	type Call = Call;
+	type RuntimeCall = RuntimeCall;
 	/// The weight of database operations that the runtime can invoke.
 	type DbWeight = RocksDbWeight;
 	/// The ubiquitous event type.
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	/// The type for hashing blocks and tries.
 	type Hash = Hash;
 	/// The hashing algorithm used.
@@ -100,7 +101,7 @@
 	type OnNewAccount = ();
 	type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode<Self>;
 	/// The ubiquitous origin type.
-	type Origin = Origin;
+	type RuntimeOrigin = RuntimeOrigin;
 	/// This type is being generated by `construct_runtime!`.
 	type PalletInfo = PalletInfo;
 	/// This is used as an identifier of the chain. 42 is the generic substrate prefix.
@@ -140,7 +141,7 @@
 	/// The type for recording an account's balance.
 	type Balance = Balance;
 	/// The ubiquitous event type.
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type DustRemoval = Treasury;
 	type ExistentialDeposit = ExistentialDeposit;
 	type AccountStore = System;
@@ -154,7 +155,7 @@
 }
 
 impl pallet_transaction_payment::Config for Runtime {
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter<Balances, DealWithFees>;
 	type LengthToFee = ConstantMultiplier<Balance, TransactionByteFee>;
 	type OperationalFeeMultiplier = OperationalFeeMultiplier;
@@ -188,7 +189,7 @@
 	type ApproveOrigin = EnsureRoot<AccountId>;
 	type RejectOrigin = EnsureRoot<AccountId>;
 	type SpendOrigin = NeverEnsureOrigin<u128>;
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type OnSlash = ();
 	type ProposalBond = ProposalBond;
 	type ProposalBondMinimum = ProposalBondMinimum;
@@ -202,8 +203,8 @@
 }
 
 impl pallet_sudo::Config for Runtime {
-	type Event = Event;
-	type Call = Call;
+	type RuntimeEvent = RuntimeEvent;
+	type RuntimeCall = RuntimeCall;
 }
 
 parameter_types! {
modifiedruntime/common/config/xcm/mod.rsdiffbeforeafterboth
--- a/runtime/common/config/xcm/mod.rs
+++ b/runtime/common/config/xcm/mod.rs
@@ -31,8 +31,8 @@
 use xcm_executor::{Config, XcmExecutor, traits::ShouldExecute};
 use sp_std::{marker::PhantomData, vec::Vec};
 use crate::{
-	Runtime, Call, Event, Origin, ParachainInfo, ParachainSystem, PolkadotXcm, XcmpQueue,
-	xcm_barrier::Barrier,
+	Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, ParachainInfo, ParachainSystem, PolkadotXcm,
+	XcmpQueue, xcm_barrier::Barrier,
 };
 
 use up_common::types::AccountId;
@@ -54,7 +54,7 @@
 parameter_types! {
 	pub const RelayLocation: MultiLocation = MultiLocation::parent();
 	pub const RelayNetwork: NetworkId = NetworkId::Polkadot;
-	pub RelayOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into();
+	pub RelayOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into();
 	pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into();
 	pub SelfLocation: MultiLocation = MultiLocation::new(1, X1(Parachain(ParachainInfo::get().into())));
 
@@ -76,7 +76,7 @@
 );
 
 /// No local origins on this chain are allowed to dispatch XCM sends/executions.
-pub type LocalOriginToLocation = (SignedToAccountId32<Origin, AccountId, RelayNetwork>,);
+pub type LocalOriginToLocation = (SignedToAccountId32<RuntimeOrigin, AccountId, RelayNetwork>,);
 
 /// The means for routing XCM messages which are not for local execution into the right message
 /// queues.
@@ -94,21 +94,21 @@
 	// Sovereign account converter; this attempts to derive an `AccountId` from the origin location
 	// using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for
 	// foreign chains who want to have a local sovereign account on this chain which they control.
-	SovereignSignedViaLocation<LocationToAccountId, Origin>,
+	SovereignSignedViaLocation<LocationToAccountId, RuntimeOrigin>,
 	// Native converter for Relay-chain (Parent) location; will converts to a `Relay` origin when
 	// recognised.
-	RelayChainAsNative<RelayOrigin, Origin>,
+	RelayChainAsNative<RelayOrigin, RuntimeOrigin>,
 	// Native converter for sibling Parachains; will convert to a `SiblingPara` origin when
 	// recognised.
-	SiblingParachainAsNative<cumulus_pallet_xcm::Origin, Origin>,
+	SiblingParachainAsNative<cumulus_pallet_xcm::Origin, RuntimeOrigin>,
 	// Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a
 	// transaction from the Root origin.
-	ParentAsSuperuser<Origin>,
+	ParentAsSuperuser<RuntimeOrigin>,
 	// Native signed account converter; this just converts an `AccountId32` origin into a normal
 	// `Origin::Signed` origin of the same 32-byte value.
-	SignedAccountId32AsNative<RelayNetwork, Origin>,
+	SignedAccountId32AsNative<RelayNetwork, RuntimeOrigin>,
 	// Xcm origins can be represented natively under the Xcm pallet's Xcm origin.
-	XcmPassthrough<Origin>,
+	XcmPassthrough<RuntimeOrigin>,
 );
 
 pub trait TryPass {
@@ -202,14 +202,14 @@
 	}
 }
 
-pub type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;
+pub type Weigher = FixedWeightBounds<UnitWeightCost, RuntimeCall, MaxInstructions>;
 
 pub struct XcmConfig<T>(PhantomData<T>);
 impl<T> Config for XcmConfig<T>
 where
 	T: pallet_configuration::Config,
 {
-	type Call = Call;
+	type RuntimeCall = RuntimeCall;
 	type XcmSender = XcmRouter;
 	// How to withdraw and deposit an asset.
 	type AssetTransactor = AssetTransactors;
@@ -228,30 +228,30 @@
 }
 
 impl pallet_xcm::Config for Runtime {
-	type Event = Event;
-	type SendXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;
+	type RuntimeEvent = RuntimeEvent;
+	type SendXcmOrigin = EnsureXcmOrigin<RuntimeOrigin, LocalOriginToLocation>;
 	type XcmRouter = XcmRouter;
-	type ExecuteXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;
+	type ExecuteXcmOrigin = EnsureXcmOrigin<RuntimeOrigin, LocalOriginToLocation>;
 	type XcmExecuteFilter = Everything;
 	type XcmExecutor = XcmExecutor<XcmConfig<Self>>;
 	type XcmTeleportFilter = Everything;
 	type XcmReserveTransferFilter = Everything;
-	type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;
+	type Weigher = FixedWeightBounds<UnitWeightCost, RuntimeCall, MaxInstructions>;
 	type LocationInverter = LocationInverter<Ancestry>;
-	type Origin = Origin;
-	type Call = Call;
+	type RuntimeOrigin = RuntimeOrigin;
+	type RuntimeCall = RuntimeCall;
 	const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100;
 	type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion;
 }
 
 impl cumulus_pallet_xcm::Config for Runtime {
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type XcmExecutor = XcmExecutor<XcmConfig<Self>>;
 }
 
 impl cumulus_pallet_xcmp_queue::Config for Runtime {
 	type WeightInfo = ();
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type XcmExecutor = XcmExecutor<XcmConfig<Self>>;
 	type ChannelInfo = ParachainSystem;
 	type VersionWrapper = ();
@@ -261,7 +261,7 @@
 }
 
 impl cumulus_pallet_dmp_queue::Config for Runtime {
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type XcmExecutor = XcmExecutor<XcmConfig<Self>>;
 	type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;
 }
modifiedruntime/common/ethereum/self_contained_call.rsdiffbeforeafterboth
--- a/runtime/common/ethereum/self_contained_call.rs
+++ b/runtime/common/ethereum/self_contained_call.rs
@@ -19,21 +19,21 @@
 	traits::{Dispatchable, DispatchInfoOf, PostDispatchInfoOf},
 	transaction_validity::{TransactionValidityError, TransactionValidity},
 };
-use crate::{Origin, Call};
+use crate::{RuntimeOrigin, RuntimeCall};
 
-impl fp_self_contained::SelfContainedCall for Call {
+impl fp_self_contained::SelfContainedCall for RuntimeCall {
 	type SignedInfo = H160;
 
 	fn is_self_contained(&self) -> bool {
 		match self {
-			Call::Ethereum(call) => call.is_self_contained(),
+			RuntimeCall::Ethereum(call) => call.is_self_contained(),
 			_ => false,
 		}
 	}
 
 	fn check_self_contained(&self) -> Option<Result<Self::SignedInfo, TransactionValidityError>> {
 		match self {
-			Call::Ethereum(call) => call.check_self_contained(),
+			RuntimeCall::Ethereum(call) => call.check_self_contained(),
 			_ => None,
 		}
 	}
@@ -41,11 +41,11 @@
 	fn validate_self_contained(
 		&self,
 		info: &Self::SignedInfo,
-		dispatch_info: &DispatchInfoOf<Call>,
+		dispatch_info: &DispatchInfoOf<RuntimeCall>,
 		len: usize,
 	) -> Option<TransactionValidity> {
 		match self {
-			Call::Ethereum(call) => call.validate_self_contained(info, dispatch_info, len),
+			RuntimeCall::Ethereum(call) => call.validate_self_contained(info, dispatch_info, len),
 			_ => None,
 		}
 	}
@@ -55,7 +55,7 @@
 		info: &Self::SignedInfo,
 	) -> Option<Result<(), TransactionValidityError>> {
 		match self {
-			Call::Ethereum(call) => call.pre_dispatch_self_contained(info),
+			RuntimeCall::Ethereum(call) => call.pre_dispatch_self_contained(info),
 			_ => None,
 		}
 	}
@@ -65,9 +65,11 @@
 		info: Self::SignedInfo,
 	) -> Option<sp_runtime::DispatchResultWithInfo<PostDispatchInfoOf<Self>>> {
 		match self {
-			call @ Call::Ethereum(pallet_ethereum::Call::transact { .. }) => Some(call.dispatch(
-				Origin::from(pallet_ethereum::RawOrigin::EthereumTransaction(info)),
-			)),
+			call @ RuntimeCall::Ethereum(pallet_ethereum::Call::transact { .. }) => {
+				Some(call.dispatch(RuntimeOrigin::from(
+					pallet_ethereum::RawOrigin::EthereumTransaction(info),
+				)))
+			}
 			_ => None,
 		}
 	}
modifiedruntime/common/mod.rsdiffbeforeafterboth
--- a/runtime/common/mod.rs
+++ b/runtime/common/mod.rs
@@ -42,7 +42,10 @@
 #[cfg(feature = "std")]
 use sp_version::NativeVersion;
 
-use crate::{Runtime, Call, Balances, Treasury, Aura, Signature, AllPalletsWithSystem, InherentDataExt};
+use crate::{
+	Runtime, RuntimeCall, Balances, Treasury, Aura, Signature, AllPalletsWithSystem,
+	InherentDataExt,
+};
 use up_common::types::{AccountId, BlockNumber};
 
 #[macro_export]
@@ -94,10 +97,11 @@
 
 /// Unchecked extrinsic type as expected by this runtime.
 pub type UncheckedExtrinsic =
-	fp_self_contained::UncheckedExtrinsic<Address, Call, Signature, SignedExtra>;
+	fp_self_contained::UncheckedExtrinsic<Address, RuntimeCall, Signature, SignedExtra>;
 
 /// Extrinsic type that has already been checked.
-pub type CheckedExtrinsic = fp_self_contained::CheckedExtrinsic<AccountId, Call, SignedExtra, H160>;
+pub type CheckedExtrinsic =
+	fp_self_contained::CheckedExtrinsic<AccountId, RuntimeCall, SignedExtra, H160>;
 
 /// Executive: handles dispatch to the various modules.
 pub type Executive = frame_executive::Executive<
modifiedruntime/common/runtime_apis.rsdiffbeforeafterboth
--- a/runtime/common/runtime_apis.rs
+++ b/runtime/common/runtime_apis.rs
@@ -558,7 +558,7 @@
 
                 fn extrinsic_filter(xts: Vec<<Block as sp_api::BlockT>::Extrinsic>) -> Vec<pallet_ethereum::Transaction> {
                     xts.into_iter().filter_map(|xt| match xt.0.function {
-                        Call::Ethereum(pallet_ethereum::Call::transact { transaction }) => Some(transaction),
+                        RuntimeCall::Ethereum(pallet_ethereum::Call::transact { transaction }) => Some(transaction),
                         _ => None
                     }).collect()
                 }
modifiedruntime/common/tests/xcm.rsdiffbeforeafterboth
--- a/runtime/common/tests/xcm.rs
+++ b/runtime/common/tests/xcm.rs
@@ -17,7 +17,7 @@
 use xcm_executor::traits::ShouldExecute;
 use xcm::latest::prelude::*;
 use logtest::Logger;
-use crate::Call;
+use crate::RuntimeCall;
 use super::new_test_ext;
 
 fn catch_xcm_barrier_log(logger: &mut Logger, expected_msg: &str) -> Result<(), String> {
@@ -51,7 +51,7 @@
 		call: fake_encoded_call.into(),
 	};
 
-	let mut xcm_program = Xcm::<Call>(vec![transact_inst]);
+	let mut xcm_program = Xcm::<RuntimeCall>(vec![transact_inst]);
 
 	let max_weight = 100_000;
 	let mut weight_credit = 100_000_000;
@@ -69,7 +69,7 @@
 fn xcm_execute<B: ShouldExecute>(
 	self_para_id: u32,
 	location: &MultiLocation,
-	xcm: &mut Xcm<Call>,
+	xcm: &mut Xcm<RuntimeCall>,
 ) -> Result<(), ()> {
 	new_test_ext(self_para_id).execute_with(|| {
 		let max_weight = 100_000;
@@ -87,7 +87,7 @@
 	multiasset.into()
 }
 
-fn make_transfer_reserve_asset(location: &MultiLocation) -> Xcm<Call> {
+fn make_transfer_reserve_asset(location: &MultiLocation) -> Xcm<RuntimeCall> {
 	let assets = make_multiassets(location);
 	let inst = TransferReserveAsset {
 		assets,
@@ -95,10 +95,10 @@
 		xcm: Xcm(vec![]),
 	};
 
-	Xcm::<Call>(vec![inst])
+	Xcm::<RuntimeCall>(vec![inst])
 }
 
-fn make_deposit_reserve_asset(location: &MultiLocation) -> Xcm<Call> {
+fn make_deposit_reserve_asset(location: &MultiLocation) -> Xcm<RuntimeCall> {
 	let assets = make_multiassets(location);
 	let inst = DepositReserveAsset {
 		assets: assets.into(),
@@ -107,14 +107,14 @@
 		xcm: Xcm(vec![]),
 	};
 
-	Xcm::<Call>(vec![inst])
+	Xcm::<RuntimeCall>(vec![inst])
 }
 
 fn expect_transfer_location_denied<B: ShouldExecute>(
 	logger: &mut Logger,
 	self_para_id: u32,
 	location: &MultiLocation,
-	xcm: &mut Xcm<Call>,
+	xcm: &mut Xcm<RuntimeCall>,
 ) -> Result<(), String> {
 	let result = xcm_execute::<B>(self_para_id, location, xcm);
 
modifiedruntime/opal/Cargo.tomldiffbeforeafterboth
--- a/runtime/opal/Cargo.toml
+++ b/runtime/opal/Cargo.toml
@@ -10,7 +10,7 @@
 license = 'GPLv3'
 name = 'opal-runtime'
 repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = "0.9.29"
+version = "0.9.30"
 
 [package.metadata.docs.rs]
 targets = ['x86_64-unknown-linux-gnu']
@@ -112,7 +112,6 @@
     'pallet-transaction-payment/std',
     'pallet-transaction-payment-rpc-runtime-api/std',
     'pallet-treasury/std',
-    # 'pallet-vesting/std',
     'pallet-evm/std',
     'pallet-evm-migration/std',
     'pallet-evm-contract-helpers/std',
@@ -165,7 +164,7 @@
     "orml-tokens/std",
     "orml-xtokens/std",
     "orml-traits/std",
-    "pallet-foreign-assets/std"
+    "pallet-foreign-assets/std",
 ]
 limit-testing = ['pallet-unique/limit-testing', 'up-data-structs/limit-testing']
 opal-runtime = ['refungible', 'rmrk', 'app-promotion', 'foreign-assets']
@@ -189,39 +188,39 @@
 default-features = false
 git = "https://github.com/paritytech/substrate"
 optional = true
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-try-runtime]
 default-features = false
 git = "https://github.com/paritytech/substrate"
 optional = true
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-executive]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-support]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-system]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-system-benchmarking]
 default-features = false
 git = "https://github.com/paritytech/substrate"
 optional = true
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-system-rpc-runtime-api]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.hex-literal]
 optional = true
@@ -236,12 +235,12 @@
 [dependencies.pallet-aura]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-balances]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 # Contracts specific packages
 # [dependencies.pallet-contracts]
@@ -265,102 +264,97 @@
 [dependencies.pallet-randomness-collective-flip]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-sudo]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-timestamp]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-transaction-payment]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-transaction-payment-rpc-runtime-api]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-treasury]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
-
-# [dependencies.pallet-vesting]
-# default-features = false
-# git = 'https://github.com/paritytech/substrate'
-# branch = 'master'
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-arithmetic]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-api]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-block-builder]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-core]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-consensus-aura]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-inherents]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-io]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-offchain]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-runtime]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-session]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-std]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-transaction-pool]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-version]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.smallvec]
 version = '1.6.1'
@@ -371,46 +365,46 @@
 [dependencies.parachain-info]
 default-features = false
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.cumulus-pallet-aura-ext]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-pallet-parachain-system]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-primitives-core]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-pallet-xcm]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-pallet-dmp-queue]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-pallet-xcmp-queue]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-primitives-utility]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-primitives-timestamp]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 ################################################################################
@@ -418,57 +412,38 @@
 
 [dependencies.polkadot-parachain]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
+branch = "release-v0.9.30"
 default-features = false
 
 [dependencies.xcm]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
+branch = "release-v0.9.30"
 default-features = false
 
 [dependencies.xcm-builder]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
+branch = "release-v0.9.30"
 default-features = false
 
 [dependencies.xcm-executor]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
+branch = "release-v0.9.30"
 default-features = false
 
 [dependencies.pallet-xcm]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
-default-features = false
-
-[dependencies.orml-vesting]
-git = "https://github.com/UniqueNetwork/open-runtime-module-library"
-branch = "polkadot-v0.9.29"
-version = "0.4.1-dev"
-default-features = false
-
-[dependencies.orml-xtokens]
-git = "https://github.com/UniqueNetwork/open-runtime-module-library"
-branch = "polkadot-v0.9.29"
-version = "0.4.1-dev"
-default-features = false
-
-[dependencies.orml-tokens]
-git = "https://github.com/UniqueNetwork/open-runtime-module-library"
-branch = "polkadot-v0.9.29"
-version = "0.4.1-dev"
-default-features = false
-
-[dependencies.orml-traits]
-git = "https://github.com/UniqueNetwork/open-runtime-module-library"
-branch = "polkadot-v0.9.29"
-version = "0.4.1-dev"
+branch = "release-v0.9.30"
 default-features = false
 
 ################################################################################
 # local dependencies
 
 [dependencies]
+orml-vesting.workspace = true
+orml-xtokens.workspace = true
+orml-tokens.workspace = true
+orml-traits.workspace = true
+
 log = { version = "0.4.16", default-features = false }
 up-common = { path = "../../primitives/common", default-features = false }
 scale-info = { version = "2.0.1", default-features = false, features = [
@@ -477,9 +452,9 @@
 derivative = "2.2.0"
 pallet-unique = { path = '../../pallets/unique', default-features = false }
 up-rpc = { path = "../../primitives/rpc", default-features = false }
-app-promotion-rpc = { path = "../../primitives/app_promotion_rpc", default-features = false}
+app-promotion-rpc = { path = "../../primitives/app_promotion_rpc", default-features = false }
 rmrk-rpc = { path = "../../primitives/rmrk-rpc", default-features = false }
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 pallet-inflation = { path = '../../pallets/inflation', default-features = false }
 pallet-app-promotion = { path = '../../pallets/app-promotion', default-features = false }
 up-data-structs = { path = '../../primitives/data-structs', default-features = false }
@@ -492,19 +467,18 @@
 pallet-proxy-rmrk-core = { default-features = false, path = "../../pallets/proxy-rmrk-core", package = "pallet-rmrk-core" }
 pallet-proxy-rmrk-equip = { default-features = false, path = "../../pallets/proxy-rmrk-equip", package = "pallet-rmrk-equip" }
 pallet-unique-scheduler = { path = '../../pallets/scheduler', default-features = false }
-# pallet-contract-helpers = { path = '../pallets/contract-helpers', default-features = false, version = '0.1.0' }
-pallet-charge-transaction = { git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.29", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
+pallet-charge-transaction = { git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.30", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
 pallet-evm-migration = { path = '../../pallets/evm-migration', default-features = false }
 pallet-evm-contract-helpers = { path = '../../pallets/evm-contract-helpers', default-features = false }
 pallet-evm-transaction-payment = { path = '../../pallets/evm-transaction-payment', default-features = false }
 pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 evm-coder = { default-features = false, path = '../../crates/evm-coder' }
-up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = 'polkadot-v0.9.29' }
+up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = 'polkadot-v0.9.30' }
 pallet-foreign-assets = { default-features = false, path = "../../pallets/foreign-assets" }
 
 ################################################################################
@@ -523,4 +497,4 @@
 
 [build-dependencies.substrate-wasm-builder]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
modifiedruntime/quartz/Cargo.tomldiffbeforeafterboth
--- a/runtime/quartz/Cargo.toml
+++ b/runtime/quartz/Cargo.toml
@@ -10,7 +10,7 @@
 license = 'GPLv3'
 name = 'quartz-runtime'
 repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = '0.9.29'
+version = '0.9.30'
 
 [package.metadata.docs.rs]
 targets = ['x86_64-unknown-linux-gnu']
@@ -111,7 +111,6 @@
     'pallet-transaction-payment/std',
     'pallet-transaction-payment-rpc-runtime-api/std',
     'pallet-treasury/std',
-    # 'pallet-vesting/std',
     'pallet-evm/std',
     'pallet-evm-migration/std',
     'pallet-evm-contract-helpers/std',
@@ -163,7 +162,7 @@
     "orml-tokens/std",
     "orml-xtokens/std",
     "orml-traits/std",
-    "pallet-foreign-assets/std"
+    "pallet-foreign-assets/std",
 ]
 limit-testing = ['pallet-unique/limit-testing', 'up-data-structs/limit-testing']
 quartz-runtime = ['refungible']
@@ -186,39 +185,39 @@
 default-features = false
 git = "https://github.com/paritytech/substrate"
 optional = true
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-try-runtime]
 default-features = false
 git = "https://github.com/paritytech/substrate"
 optional = true
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-executive]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-support]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-system]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-system-benchmarking]
 default-features = false
 git = "https://github.com/paritytech/substrate"
 optional = true
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-system-rpc-runtime-api]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.hex-literal]
 optional = true
@@ -233,12 +232,12 @@
 [dependencies.pallet-aura]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-balances]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 # Contracts specific packages
 # [dependencies.pallet-contracts]
@@ -262,102 +261,97 @@
 [dependencies.pallet-randomness-collective-flip]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-sudo]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-timestamp]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-transaction-payment]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-transaction-payment-rpc-runtime-api]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-treasury]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
-
-# [dependencies.pallet-vesting]
-# default-features = false
-# git = 'https://github.com/paritytech/substrate'
-# branch = 'master'
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-arithmetic]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-api]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-block-builder]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-core]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-consensus-aura]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-inherents]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-io]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-offchain]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-runtime]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-session]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-std]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-transaction-pool]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-version]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.smallvec]
 version = '1.6.1'
@@ -368,46 +362,46 @@
 [dependencies.parachain-info]
 default-features = false
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.cumulus-pallet-aura-ext]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-pallet-parachain-system]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-primitives-core]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-pallet-xcm]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-pallet-dmp-queue]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-pallet-xcmp-queue]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-primitives-utility]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-primitives-timestamp]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 ################################################################################
@@ -415,53 +409,28 @@
 
 [dependencies.polkadot-parachain]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
+branch = "release-v0.9.30"
 default-features = false
 
 [dependencies.xcm]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
+branch = "release-v0.9.30"
 default-features = false
 
 [dependencies.xcm-builder]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
+branch = "release-v0.9.30"
 default-features = false
 
 [dependencies.xcm-executor]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
+branch = "release-v0.9.30"
 default-features = false
 
 [dependencies.pallet-xcm]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
-default-features = false
-
-[dependencies.orml-vesting]
-git = "https://github.com/UniqueNetwork/open-runtime-module-library"
-branch = "polkadot-v0.9.29"
-version = "0.4.1-dev"
-default-features = false
-
-[dependencies.orml-xtokens]
-git = "https://github.com/UniqueNetwork/open-runtime-module-library"
-branch = "polkadot-v0.9.29"
-version = "0.4.1-dev"
-default-features = false
-
-[dependencies.orml-tokens]
-git = "https://github.com/UniqueNetwork/open-runtime-module-library"
-branch = "polkadot-v0.9.29"
-version = "0.4.1-dev"
-default-features = false
-
-[dependencies.orml-traits]
-git = "https://github.com/UniqueNetwork/open-runtime-module-library"
-branch = "polkadot-v0.9.29"
-version = "0.4.1-dev"
+branch = "release-v0.9.30"
 default-features = false
-
 
 ################################################################################
 # RMRK dependencies
@@ -475,6 +444,11 @@
 # local dependencies
 
 [dependencies]
+orml-vesting.workspace = true
+orml-xtokens.workspace = true
+orml-tokens.workspace = true
+orml-traits.workspace = true
+
 log = { version = "0.4.16", default-features = false }
 up-common = { path = "../../primitives/common", default-features = false }
 scale-info = { version = "2.0.1", default-features = false, features = [
@@ -483,8 +457,8 @@
 derivative = "2.2.0"
 pallet-unique = { path = '../../pallets/unique', default-features = false }
 up-rpc = { path = "../../primitives/rpc", default-features = false }
-app-promotion-rpc = { path = "../../primitives/app_promotion_rpc", default-features = false}
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+app-promotion-rpc = { path = "../../primitives/app_promotion_rpc", default-features = false }
+fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 pallet-inflation = { path = '../../pallets/inflation', default-features = false }
 pallet-app-promotion = { path = '../../pallets/app-promotion', default-features = false }
 up-data-structs = { path = '../../primitives/data-structs', default-features = false }
@@ -498,18 +472,18 @@
 pallet-proxy-rmrk-equip = { default-features = false, path = "../../pallets/proxy-rmrk-equip", package = "pallet-rmrk-equip" }
 pallet-unique-scheduler = { path = '../../pallets/scheduler', default-features = false }
 # pallet-contract-helpers = { path = '../pallets/contract-helpers', default-features = false, version = '0.1.0' }
-pallet-charge-transaction = { git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.29", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
+pallet-charge-transaction = { git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.30", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
 pallet-evm-migration = { path = '../../pallets/evm-migration', default-features = false }
 pallet-evm-contract-helpers = { path = '../../pallets/evm-contract-helpers', default-features = false }
 pallet-evm-transaction-payment = { path = '../../pallets/evm-transaction-payment', default-features = false }
 pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 evm-coder = { default-features = false, path = '../../crates/evm-coder' }
-up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = 'polkadot-v0.9.29' }
+up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = 'polkadot-v0.9.30' }
 pallet-foreign-assets = { default-features = false, path = "../../pallets/foreign-assets" }
 
 ################################################################################
@@ -528,4 +502,4 @@
 
 [build-dependencies.substrate-wasm-builder]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
modifiedruntime/tests/Cargo.tomldiffbeforeafterboth
--- a/runtime/tests/Cargo.toml
+++ b/runtime/tests/Cargo.toml
@@ -11,22 +11,22 @@
 [dependencies]
 up-data-structs = { default-features = false, path = '../../primitives/data-structs' }
 
-sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 
-frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 
-pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
-pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.29" }
+pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
+pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.30" }
 
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 
 pallet-common = { path = '../../pallets/common' }
 pallet-structure = { path = '../../pallets/structure' }
@@ -43,4 +43,4 @@
 scale-info = "*"
 
 evm-coder = { default-features = false, path = '../../crates/evm-coder' }
-up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.29" }
+up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.30" }
modifiedruntime/tests/src/lib.rsdiffbeforeafterboth
--- a/runtime/tests/src/lib.rs
+++ b/runtime/tests/src/lib.rs
@@ -80,13 +80,13 @@
 }
 
 impl system::Config for Test {
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type BaseCallFilter = Everything;
 	type BlockWeights = ();
 	type BlockLength = ();
 	type DbWeight = ();
-	type Origin = Origin;
-	type Call = Call;
+	type RuntimeOrigin = RuntimeOrigin;
+	type RuntimeCall = RuntimeCall;
 	type Index = u64;
 	type BlockNumber = u64;
 	type Hash = H256;
@@ -112,7 +112,7 @@
 }
 //frame_system::Module<Test>;
 impl pallet_balances::Config for Test {
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type AccountStore = System;
 	type Balance = u64;
 	type DustRemoval = ();
@@ -128,7 +128,7 @@
 }
 
 impl pallet_transaction_payment::Config for Test {
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type OnChargeTransaction = CurrencyAdapter<pallet_balances::Pallet<Test>, ()>;
 	type LengthToFee = IdentityFee<u64>;
 	type WeightToFee = IdentityFee<u64>;
@@ -205,12 +205,12 @@
 }
 
 impl pallet_ethereum::Config for Test {
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type StateRoot = pallet_ethereum::IntermediateStateRoot<Self>;
 }
 
 impl pallet_evm::Config for Test {
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type FeeCalculator = ();
 	type GasWeightMapping = ();
 	type CallOrigin = EnsureAddressNever<Self::CrossAccountId>;
@@ -233,7 +233,7 @@
 
 impl pallet_common::Config for Test {
 	type WeightInfo = ();
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type Currency = Balances;
 	type CollectionCreationPrice = CollectionCreationPrice;
 	type TreasuryAccountId = TreasuryAccountId;
@@ -252,8 +252,8 @@
 
 impl pallet_structure::Config for Test {
 	type WeightInfo = ();
-	type Event = Event;
-	type Call = Call;
+	type RuntimeEvent = RuntimeEvent;
+	type RuntimeCall = RuntimeCall;
 }
 impl pallet_fungible::Config for Test {
 	type WeightInfo = ();
@@ -273,7 +273,7 @@
 }
 
 impl pallet_unique::Config for Test {
-	type Event = Event;
+	type RuntimeEvent = RuntimeEvent;
 	type WeightInfo = ();
 	type CommonWeightInfo = CommonWeights<Self>;
 	type RefungibleExtensionsWeightInfo = CommonWeights<Self>;
modifiedruntime/tests/src/tests.rsdiffbeforeafterboth
before · runtime/tests/src/tests.rs
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617// Tests to be written here18use crate::{Test, TestCrossAccountId, CollectionCreationPrice, Origin, Unique, new_test_ext};19use up_data_structs::{20	COLLECTION_NUMBER_LIMIT, CollectionId, CreateItemData, CreateFungibleData, CreateNftData,21	CreateReFungibleData, MAX_DECIMAL_POINTS, COLLECTION_ADMINS_LIMIT, TokenId,22	MAX_TOKEN_OWNERSHIP, CreateCollectionData, CollectionMode, AccessMode, CollectionPermissions,23	PropertyKeyPermission, PropertyPermission, Property, CollectionPropertiesVec,24	CollectionPropertiesPermissionsVec,25};26use frame_support::{assert_noop, assert_ok, assert_err};27use sp_std::convert::TryInto;28use pallet_evm::account::CrossAccountId;29use pallet_common::Error as CommonError;30use pallet_unique::Error as UniqueError;3132fn add_balance(user: u64, value: u64) {33	const DONOR_USER: u64 = 999;34	assert_ok!(<pallet_balances::Pallet<Test>>::set_balance(35		Origin::root(),36		DONOR_USER,37		value,38		039	));40	assert_ok!(<pallet_balances::Pallet<Test>>::force_transfer(41		Origin::root(),42		DONOR_USER,43		user,44		value45	));46}4748fn default_nft_data() -> CreateNftData {49	CreateNftData {50		properties: vec![Property {51			key: b"test-prop".to_vec().try_into().unwrap(),52			value: b"test-nft-prop".to_vec().try_into().unwrap(),53		}]54		.try_into()55		.unwrap(),56	}57}5859fn default_fungible_data() -> CreateFungibleData {60	CreateFungibleData { value: 5 }61}6263fn default_re_fungible_data() -> CreateReFungibleData {64	CreateReFungibleData {65		pieces: 1023,66		properties: vec![Property {67			key: b"test-prop".to_vec().try_into().unwrap(),68			value: b"test-nft-prop".to_vec().try_into().unwrap(),69		}]70		.try_into()71		.unwrap(),72	}73}7475fn create_test_collection_for_owner(76	mode: &CollectionMode,77	owner: u64,78	id: CollectionId,79) -> CollectionId {80	add_balance(owner, CollectionCreationPrice::get() as u64 + 1);8182	let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();83	let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();84	let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();85	let token_property_permissions: CollectionPropertiesPermissionsVec =86		vec![PropertyKeyPermission {87			key: b"test-prop".to_vec().try_into().unwrap(),88			permission: PropertyPermission {89				mutable: true,90				collection_admin: false,91				token_owner: true,92			},93		}]94		.try_into()95		.unwrap();96	let properties: CollectionPropertiesVec = vec![Property {97		key: b"test-collection-prop".to_vec().try_into().unwrap(),98		value: b"test-collection-value".to_vec().try_into().unwrap(),99	}]100	.try_into()101	.unwrap();102103	let data: CreateCollectionData<u64> = CreateCollectionData {104		name: col_name1.try_into().unwrap(),105		description: col_desc1.try_into().unwrap(),106		token_prefix: token_prefix1.try_into().unwrap(),107		mode: mode.clone(),108		token_property_permissions: token_property_permissions.clone(),109		properties: properties.clone(),110		..Default::default()111	};112113	let origin1 = Origin::signed(owner);114	assert_ok!(Unique::create_collection_ex(origin1, data));115116	let saved_col_name: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();117	let saved_description: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();118	let saved_prefix: Vec<u8> = b"token_prefix1\0".to_vec();119	assert_eq!(120		<pallet_common::CollectionById<Test>>::get(id)121			.unwrap()122			.owner,123		owner124	);125	assert_eq!(126		<pallet_common::CollectionById<Test>>::get(id).unwrap().name,127		saved_col_name128	);129	assert_eq!(130		<pallet_common::CollectionById<Test>>::get(id).unwrap().mode,131		*mode132	);133	assert_eq!(134		<pallet_common::CollectionById<Test>>::get(id)135			.unwrap()136			.description,137		saved_description138	);139	assert_eq!(140		<pallet_common::CollectionById<Test>>::get(id)141			.unwrap()142			.token_prefix,143		saved_prefix144	);145	assert_eq!(146		get_collection_property_permissions(id).as_slice(),147		token_property_permissions.as_slice()148	);149	assert_eq!(150		get_collection_properties(id).as_slice(),151		properties.as_slice()152	);153	id154}155156fn get_collection_property_permissions(collection_id: CollectionId) -> Vec<PropertyKeyPermission> {157	<pallet_common::Pallet<Test>>::property_permissions(collection_id)158		.into_iter()159		.map(|(key, permission)| PropertyKeyPermission { key, permission })160		.collect()161}162163fn get_collection_properties(collection_id: CollectionId) -> Vec<Property> {164	<pallet_common::Pallet<Test>>::collection_properties(collection_id)165		.into_iter()166		.map(|(key, value)| Property { key, value })167		.collect()168}169170fn get_token_properties(collection_id: CollectionId, token_id: TokenId) -> Vec<Property> {171	<pallet_nonfungible::Pallet<Test>>::token_properties((collection_id, token_id))172		.into_iter()173		.map(|(key, value)| Property { key, value })174		.collect()175}176177fn create_test_collection(mode: &CollectionMode, id: CollectionId) -> CollectionId {178	create_test_collection_for_owner(&mode, 1, id)179}180181fn create_test_item(collection_id: CollectionId, data: &CreateItemData) {182	let origin1 = Origin::signed(1);183	assert_ok!(Unique::create_item(184		origin1,185		collection_id,186		account(1),187		data.clone()188	));189}190191fn account(sub: u64) -> TestCrossAccountId {192	TestCrossAccountId::from_sub(sub)193}194195// Use cases tests region196// #region197198#[test]199fn check_not_sufficient_founds() {200	new_test_ext().execute_with(|| {201		let acc: u64 = 1;202		<pallet_balances::Pallet<Test>>::set_balance(Origin::root(), acc, 0, 0).unwrap();203204		let name: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();205		let description: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();206		let token_prefix: Vec<u8> = b"token_prefix1\0".to_vec();207208		let data: CreateCollectionData<<Test as frame_system::Config>::AccountId> =209			CreateCollectionData {210				name: name.try_into().unwrap(),211				description: description.try_into().unwrap(),212				token_prefix: token_prefix.try_into().unwrap(),213				mode: CollectionMode::NFT,214				..Default::default()215			};216217		let result = Unique::create_collection_ex(Origin::signed(acc), data);218		assert_err!(result, <CommonError<Test>>::NotSufficientFounds);219	});220}221222#[test]223fn create_fungible_collection_fails_with_large_decimal_numbers() {224	new_test_ext().execute_with(|| {225		let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();226		let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();227		let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();228229		let data: CreateCollectionData<u64> = CreateCollectionData {230			name: col_name1.try_into().unwrap(),231			description: col_desc1.try_into().unwrap(),232			token_prefix: token_prefix1.try_into().unwrap(),233			mode: CollectionMode::Fungible(MAX_DECIMAL_POINTS + 1),234			..Default::default()235		};236237		let origin1 = Origin::signed(1);238		assert_noop!(239			Unique::create_collection_ex(origin1, data),240			UniqueError::<Test>::CollectionDecimalPointLimitExceeded241		);242	});243}244245#[test]246fn create_nft_item() {247	new_test_ext().execute_with(|| {248		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));249250		let data = default_nft_data();251		create_test_item(collection_id, &data.clone().into());252253		assert_eq!(254			get_token_properties(collection_id, TokenId(1)).as_slice(),255			data.properties.as_slice(),256		);257	});258}259260// Use cases tests region261// #region262#[test]263fn create_nft_multiple_items() {264	new_test_ext().execute_with(|| {265		create_test_collection(&CollectionMode::NFT, CollectionId(1));266267		let origin1 = Origin::signed(1);268269		let items_data = vec![default_nft_data(), default_nft_data(), default_nft_data()];270271		assert_ok!(Unique::create_multiple_items(272			origin1,273			CollectionId(1),274			account(1),275			items_data276				.clone()277				.into_iter()278				.map(|d| { d.into() })279				.collect()280		));281		for (index, data) in items_data.into_iter().enumerate() {282			assert_eq!(283				get_token_properties(CollectionId(1), TokenId(index as u32 + 1)).as_slice(),284				data.properties.as_slice()285			);286		}287	});288}289290#[test]291fn create_refungible_item() {292	new_test_ext().execute_with(|| {293		let collection_id = create_test_collection(&CollectionMode::ReFungible, CollectionId(1));294295		let data = default_re_fungible_data();296		create_test_item(collection_id, &data.clone().into());297		let item = <pallet_refungible::TokenData<Test>>::get((collection_id, TokenId(1)));298		let balance =299			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1)));300		assert_eq!(balance, 1023);301	});302}303304#[test]305fn create_multiple_refungible_items() {306	new_test_ext().execute_with(|| {307		create_test_collection(&CollectionMode::ReFungible, CollectionId(1));308309		let origin1 = Origin::signed(1);310311		let items_data = vec![312			default_re_fungible_data(),313			default_re_fungible_data(),314			default_re_fungible_data(),315		];316317		assert_ok!(Unique::create_multiple_items(318			origin1,319			CollectionId(1),320			account(1),321			items_data322				.clone()323				.into_iter()324				.map(|d| { d.into() })325				.collect()326		));327		for (index, data) in items_data.into_iter().enumerate() {328			let item = <pallet_refungible::TokenData<Test>>::get((329				CollectionId(1),330				TokenId((index + 1) as u32),331			));332			let balance =333				<pallet_refungible::Balance<Test>>::get((CollectionId(1), TokenId(1), account(1)));334			assert_eq!(balance, 1023);335		}336	});337}338339#[test]340fn create_fungible_item() {341	new_test_ext().execute_with(|| {342		let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));343344		let data = default_fungible_data();345		create_test_item(collection_id, &data.into());346347		assert_eq!(348			<pallet_fungible::Balance<Test>>::get((collection_id, account(1))),349			5350		);351	});352}353354//#[test]355// fn create_multiple_fungible_items() {356//     new_test_ext().execute_with(|| {357//         default_limits();358359//         create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));360361//         let origin1 = Origin::signed(1);362363//         let items_data = vec![default_fungible_data(), default_fungible_data(), default_fungible_data()];364365//         assert_ok!(Unique::create_multiple_items(366//             origin1.clone(),367//             1,368//             1,369//             items_data.clone().into_iter().map(|d| { d.into() }).collect()370//         ));371372//         for (index, _) in items_data.iter().enumerate() {373//             assert_eq!(Unique::fungible_item_id(1, (index + 1) as TokenId).value, 5);374//         }375//         assert_eq!(Unique::balance_count(1, 1), 3000);376//         assert_eq!(Unique::address_tokens(1, 1), [1, 2, 3]);377//     });378// }379380#[test]381fn transfer_fungible_item() {382	new_test_ext().execute_with(|| {383		let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));384385		let origin1 = Origin::signed(1);386		let origin2 = Origin::signed(2);387388		let data = default_fungible_data();389		create_test_item(collection_id, &data.into());390391		assert_eq!(392			<pallet_fungible::Balance<Test>>::get((CollectionId(1), account(1))),393			5394		);395396		// change owner scenario397		assert_ok!(Unique::transfer(398			origin1,399			account(2),400			CollectionId(1),401			TokenId(0),402			5403		));404		assert_eq!(405			<pallet_fungible::Balance<Test>>::get((CollectionId(1), account(1))),406			0407		);408409		// split item scenario410		assert_ok!(Unique::transfer(411			origin2.clone(),412			account(3),413			CollectionId(1),414			TokenId(0),415			3416		));417418		// split item and new owner has account scenario419		assert_ok!(Unique::transfer(420			origin2,421			account(3),422			CollectionId(1),423			TokenId(0),424			1425		));426		assert_eq!(427			<pallet_fungible::Balance<Test>>::get((CollectionId(1), account(2))),428			1429		);430		assert_eq!(431			<pallet_fungible::Balance<Test>>::get((CollectionId(1), account(3))),432			4433		);434	});435}436437#[test]438fn transfer_refungible_item() {439	new_test_ext().execute_with(|| {440		let collection_id = create_test_collection(&CollectionMode::ReFungible, CollectionId(1));441442		// Create RFT 1 in 1023 pieces for account 1443		let data = default_re_fungible_data();444		create_test_item(collection_id, &data.clone().into());445		let item = <pallet_refungible::TokenData<Test>>::get((collection_id, TokenId(1)));446		assert_eq!(447			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),448			1449		);450		assert_eq!(451			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),452			1023453		);454		assert_eq!(455			<pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),456			true457		);458459		// Account 1 transfers all 1023 pieces of RFT 1 to account 2460		let origin1 = Origin::signed(1);461		let origin2 = Origin::signed(2);462		assert_ok!(Unique::transfer(463			origin1,464			account(2),465			CollectionId(1),466			TokenId(1),467			1023468		));469		assert_eq!(470			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(2))),471			1023472		);473		assert_eq!(474			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),475			0476		);477		assert_eq!(478			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(2))),479			1480		);481		assert_eq!(482			<pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),483			false484		);485		assert_eq!(486			<pallet_refungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),487			true488		);489490		// Account 2 transfers 500 pieces of RFT 1 to account 3491		assert_ok!(Unique::transfer(492			origin2.clone(),493			account(3),494			CollectionId(1),495			TokenId(1),496			500497		));498		assert_eq!(499			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(2))),500			523501		);502		assert_eq!(503			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(3))),504			500505		);506		assert_eq!(507			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(2))),508			1509		);510		assert_eq!(511			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(3))),512			1513		);514		assert_eq!(515			<pallet_refungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),516			true517		);518		assert_eq!(519			<pallet_refungible::Owned<Test>>::get((collection_id, account(3), TokenId(1))),520			true521		);522523		// Account 2 transfers 200 more pieces of RFT 1 to account 3 with pre-existing balance524		assert_ok!(Unique::transfer(525			origin2,526			account(3),527			CollectionId(1),528			TokenId(1),529			200530		));531		assert_eq!(532			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(2))),533			323534		);535		assert_eq!(536			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(3))),537			700538		);539		assert_eq!(540			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(2))),541			1542		);543		assert_eq!(544			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(3))),545			1546		);547		assert_eq!(548			<pallet_refungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),549			true550		);551		assert_eq!(552			<pallet_refungible::Owned<Test>>::get((collection_id, account(3), TokenId(1))),553			true554		);555	});556}557558#[test]559fn transfer_nft_item() {560	new_test_ext().execute_with(|| {561		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));562563		let data = default_nft_data();564		create_test_item(collection_id, &data.into());565		assert_eq!(566			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),567			1568		);569		assert_eq!(570			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),571			true572		);573574		let origin1 = Origin::signed(1);575		// default scenario576		assert_ok!(Unique::transfer(577			origin1,578			account(2),579			CollectionId(1),580			TokenId(1),581			1582		));583		assert_eq!(584			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),585			0586		);587		assert_eq!(588			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(2))),589			1590		);591		assert_eq!(592			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),593			false594		);595		assert_eq!(596			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),597			true598		);599	});600}601602#[test]603fn transfer_nft_item_wrong_value() {604	new_test_ext().execute_with(|| {605		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));606607		let data = default_nft_data();608		create_test_item(collection_id, &data.into());609		assert_eq!(610			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),611			1612		);613		assert_eq!(614			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),615			true616		);617618		let origin1 = Origin::signed(1);619620		assert_noop!(621			Unique::transfer(origin1, account(2), CollectionId(1), TokenId(1), 2)622				.map_err(|e| e.error),623			<pallet_nonfungible::Error::<Test>>::NonfungibleItemsHaveNoAmount624		);625	});626}627628#[test]629fn transfer_nft_item_zero_value() {630	new_test_ext().execute_with(|| {631		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));632633		let data = default_nft_data();634		create_test_item(collection_id, &data.into());635		assert_eq!(636			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),637			1638		);639		assert_eq!(640			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),641			true642		);643644		let origin1 = Origin::signed(1);645646		// Transferring 0 amount works on NFT...647		assert_ok!(Unique::transfer(648			origin1,649			account(2),650			CollectionId(1),651			TokenId(1),652			0653		));654		// ... and results in no transfer655		assert_eq!(656			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),657			1658		);659		assert_eq!(660			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),661			true662		);663	});664}665666#[test]667fn nft_approve_and_transfer_from() {668	new_test_ext().execute_with(|| {669		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));670671		let data = default_nft_data();672		create_test_item(collection_id, &data.into());673674		let origin1 = Origin::signed(1);675		let origin2 = Origin::signed(2);676677		assert_eq!(678			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),679			1680		);681		assert_eq!(682			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),683			true684		);685686		// neg transfer_from687		assert_noop!(688			Unique::transfer_from(689				origin2.clone(),690				account(1),691				account(2),692				CollectionId(1),693				TokenId(1),694				1695			)696			.map_err(|e| e.error),697			CommonError::<Test>::ApprovedValueTooLow698		);699700		// do approve701		assert_ok!(Unique::approve(702			origin1,703			account(2),704			CollectionId(1),705			TokenId(1),706			1707		));708		assert_eq!(709			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),710			account(2)711		);712713		assert_ok!(Unique::transfer_from(714			origin2,715			account(1),716			account(3),717			CollectionId(1),718			TokenId(1),719			1720		));721		assert!(722			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).is_none()723		);724	});725}726727#[test]728fn nft_approve_and_transfer_from_allow_list() {729	new_test_ext().execute_with(|| {730		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));731732		let origin1 = Origin::signed(1);733		let origin2 = Origin::signed(2);734735		// Create NFT 1 for account 1736		let data = default_nft_data();737		create_test_item(collection_id, &data.clone().into());738		assert_eq!(739			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),740			1741		);742		assert_eq!(743			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),744			true745		);746747		// Allow allow-list users to mint and add accounts 1, 2, and 3 to allow-list748		assert_ok!(Unique::set_collection_permissions(749			origin1.clone(),750			CollectionId(1),751			CollectionPermissions {752				mint_mode: Some(true),753				access: Some(AccessMode::AllowList),754				nesting: None,755			}756		));757		assert_ok!(Unique::add_to_allow_list(758			origin1.clone(),759			CollectionId(1),760			account(1)761		));762		assert_ok!(Unique::add_to_allow_list(763			origin1.clone(),764			CollectionId(1),765			account(2)766		));767		assert_ok!(Unique::add_to_allow_list(768			origin1.clone(),769			CollectionId(1),770			account(3)771		));772773		// Account 1 approves account 2 for NFT 1774		assert_ok!(Unique::approve(775			origin1.clone(),776			account(2),777			CollectionId(1),778			TokenId(1),779			1780		));781		assert_eq!(782			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),783			account(2)784		);785786		// Account 2 transfers NFT 1 from account 1 to account 3787		assert_ok!(Unique::transfer_from(788			origin2,789			account(1),790			account(3),791			CollectionId(1),792			TokenId(1),793			1794		));795		assert!(796			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).is_none()797		);798	});799}800801#[test]802fn refungible_approve_and_transfer_from() {803	new_test_ext().execute_with(|| {804		let collection_id = create_test_collection(&CollectionMode::ReFungible, CollectionId(1));805806		let origin1 = Origin::signed(1);807		let origin2 = Origin::signed(2);808809		// Create RFT 1 in 1023 pieces for account 1810		let data = default_re_fungible_data();811		create_test_item(collection_id, &data.into());812813		assert_eq!(814			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),815			1816		);817		assert_eq!(818			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),819			1023820		);821		assert_eq!(822			<pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),823			true824		);825826		// Allow public minting, enable allow-list and add accounts 1, 2, 3 to allow-list827		assert_ok!(Unique::set_collection_permissions(828			origin1.clone(),829			CollectionId(1),830			CollectionPermissions {831				mint_mode: Some(true),832				access: Some(AccessMode::AllowList),833				nesting: None,834			}835		));836		assert_ok!(Unique::add_to_allow_list(837			origin1.clone(),838			CollectionId(1),839			account(1)840		));841		assert_ok!(Unique::add_to_allow_list(842			origin1.clone(),843			CollectionId(1),844			account(2)845		));846		assert_ok!(Unique::add_to_allow_list(847			origin1.clone(),848			CollectionId(1),849			account(3)850		));851852		// Account 1 approves account 2 for 1023 pieces of RFT 1853		assert_ok!(Unique::approve(854			origin1,855			account(2),856			CollectionId(1),857			TokenId(1),858			1023859		));860		assert_eq!(861			<pallet_refungible::Allowance<Test>>::get((862				CollectionId(1),863				TokenId(1),864				account(1),865				account(2)866			)),867			1023868		);869870		// Account 2 transfers 100 pieces of RFT 1 from account 1 to account 3871		assert_ok!(Unique::transfer_from(872			origin2,873			account(1),874			account(3),875			CollectionId(1),876			TokenId(1),877			100878		));879		assert_eq!(880			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),881			1882		);883		assert_eq!(884			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(3))),885			1886		);887		assert_eq!(888			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),889			923890		);891		assert_eq!(892			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(3))),893			100894		);895		assert_eq!(896			<pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),897			true898		);899		assert_eq!(900			<pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),901			true902		);903		assert_eq!(904			<pallet_refungible::Allowance<Test>>::get((905				CollectionId(1),906				TokenId(1),907				account(1),908				account(2)909			)),910			923911		);912	});913}914915#[test]916fn fungible_approve_and_transfer_from() {917	new_test_ext().execute_with(|| {918		let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));919920		let data = default_fungible_data();921		create_test_item(collection_id, &data.into());922923		let origin1 = Origin::signed(1);924		let origin2 = Origin::signed(2);925926		assert_ok!(Unique::set_collection_permissions(927			origin1.clone(),928			CollectionId(1),929			CollectionPermissions {930				mint_mode: Some(true),931				access: Some(AccessMode::AllowList),932				nesting: None,933			}934		));935		assert_ok!(Unique::add_to_allow_list(936			origin1.clone(),937			CollectionId(1),938			account(1)939		));940		assert_ok!(Unique::add_to_allow_list(941			origin1.clone(),942			CollectionId(1),943			account(2)944		));945		assert_ok!(Unique::add_to_allow_list(946			origin1.clone(),947			CollectionId(1),948			account(3)949		));950951		// do approve952		assert_ok!(Unique::approve(953			origin1.clone(),954			account(2),955			CollectionId(1),956			TokenId(0),957			5958		));959		assert_eq!(960			<pallet_fungible::Allowance<Test>>::get((CollectionId(1), account(1), account(2))),961			5962		);963		assert_ok!(Unique::approve(964			origin1,965			account(3),966			CollectionId(1),967			TokenId(0),968			5969		));970		assert_eq!(971			<pallet_fungible::Allowance<Test>>::get((CollectionId(1), account(1), account(2))),972			5973		);974		assert_eq!(975			<pallet_fungible::Allowance<Test>>::get((CollectionId(1), account(1), account(3))),976			5977		);978979		assert_ok!(Unique::transfer_from(980			origin2.clone(),981			account(1),982			account(3),983			CollectionId(1),984			TokenId(0),985			4986		));987988		assert_eq!(989			<pallet_fungible::Allowance<Test>>::get((CollectionId(1), account(1), account(2))),990			1991		);992993		assert_noop!(994			Unique::transfer_from(995				origin2,996				account(1),997				account(3),998				CollectionId(1),999				TokenId(0),1000				41001			)1002			.map_err(|e| e.error),1003			CommonError::<Test>::ApprovedValueTooLow1004		);1005	});1006}10071008#[test]1009fn change_collection_owner() {1010	new_test_ext().execute_with(|| {1011		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));10121013		let origin1 = Origin::signed(1);1014		assert_ok!(Unique::change_collection_owner(origin1, collection_id, 2));1015		assert_eq!(1016			<pallet_common::CollectionById<Test>>::get(collection_id)1017				.unwrap()1018				.owner,1019			21020		);1021	});1022}10231024#[test]1025fn destroy_collection() {1026	new_test_ext().execute_with(|| {1027		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));10281029		let origin1 = Origin::signed(1);1030		assert_ok!(Unique::destroy_collection(origin1, collection_id));1031	});1032}10331034#[test]1035fn burn_nft_item() {1036	new_test_ext().execute_with(|| {1037		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));10381039		let origin1 = Origin::signed(1);10401041		let data = default_nft_data();1042		create_test_item(collection_id, &data.into());10431044		// check balance (collection with id = 1, user id = 1)1045		assert_eq!(1046			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),1047			11048		);10491050		// burn item1051		assert_ok!(Unique::burn_item(1052			origin1.clone(),1053			collection_id,1054			TokenId(1),1055			11056		));1057		assert_eq!(1058			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),1059			01060		);1061	});1062}10631064#[test]1065fn burn_same_nft_item_twice() {1066	new_test_ext().execute_with(|| {1067		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));10681069		let origin1 = Origin::signed(1);10701071		let data = default_nft_data();1072		create_test_item(collection_id, &data.into());10731074		// check balance (collection with id = 1, user id = 1)1075		assert_eq!(1076			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),1077			11078		);10791080		// burn item1081		assert_ok!(Unique::burn_item(1082			origin1.clone(),1083			collection_id,1084			TokenId(1),1085			11086		));10871088		// burn item again1089		assert_noop!(1090			Unique::burn_item(origin1, collection_id, TokenId(1), 1).map_err(|e| e.error),1091			CommonError::<Test>::TokenNotFound1092		);10931094		assert_eq!(1095			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),1096			01097		);1098	});1099}11001101#[test]1102fn burn_fungible_item() {1103	new_test_ext().execute_with(|| {1104		let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));11051106		let origin1 = Origin::signed(1);1107		assert_ok!(Unique::add_collection_admin(1108			origin1.clone(),1109			collection_id,1110			account(2)1111		));11121113		let data = default_fungible_data();1114		create_test_item(collection_id, &data.into());11151116		// check balance (collection with id = 1, user id = 1)1117		assert_eq!(1118			<pallet_fungible::Balance<Test>>::get((collection_id, account(1))),1119			51120		);11211122		// burn item1123		assert_ok!(Unique::burn_item(1124			origin1.clone(),1125			CollectionId(1),1126			TokenId(0),1127			51128		));1129		assert_noop!(1130			Unique::burn_item(origin1, CollectionId(1), TokenId(0), 5).map_err(|e| e.error),1131			CommonError::<Test>::TokenValueTooLow1132		);11331134		assert_eq!(1135			<pallet_fungible::Balance<Test>>::get((collection_id, account(1))),1136			01137		);1138	});1139}11401141#[test]1142fn burn_fungible_item_with_token_id() {1143	new_test_ext().execute_with(|| {1144		let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));11451146		let origin1 = Origin::signed(1);1147		assert_ok!(Unique::add_collection_admin(1148			origin1.clone(),1149			collection_id,1150			account(2)1151		));11521153		let data = default_fungible_data();1154		create_test_item(collection_id, &data.into());11551156		// check balance (collection with id = 1, user id = 1)1157		assert_eq!(1158			<pallet_fungible::Balance<Test>>::get((collection_id, account(1))),1159			51160		);11611162		// Try to burn item using Token ID1163		assert_noop!(1164			Unique::burn_item(origin1, CollectionId(1), TokenId(1), 5).map_err(|e| e.error),1165			<pallet_fungible::Error::<Test>>::FungibleItemsHaveNoId1166		);1167	});1168}1169#[test]1170fn burn_refungible_item() {1171	new_test_ext().execute_with(|| {1172		let collection_id = create_test_collection(&CollectionMode::ReFungible, CollectionId(1));1173		let origin1 = Origin::signed(1);11741175		assert_ok!(Unique::set_collection_permissions(1176			origin1.clone(),1177			collection_id,1178			CollectionPermissions {1179				mint_mode: Some(true),1180				access: Some(AccessMode::AllowList),1181				nesting: None,1182			}1183		));1184		assert_ok!(Unique::add_to_allow_list(1185			origin1.clone(),1186			collection_id,1187			account(1)1188		));11891190		assert_ok!(Unique::add_collection_admin(1191			origin1.clone(),1192			collection_id,1193			account(2)1194		));11951196		let data = default_re_fungible_data();1197		create_test_item(collection_id, &data.into());11981199		// check balance (collection with id = 1, user id = 2)1200		assert_eq!(1201			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),1202			11203		);1204		assert_eq!(1205			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),1206			10231207		);12081209		// burn item1210		assert_ok!(Unique::burn_item(1211			origin1.clone(),1212			collection_id,1213			TokenId(1),1214			10231215		));1216		assert_noop!(1217			Unique::burn_item(origin1, collection_id, TokenId(1), 1023).map_err(|e| e.error),1218			CommonError::<Test>::TokenValueTooLow1219		);12201221		assert_eq!(1222			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),1223			01224		);1225	});1226}12271228#[test]1229fn add_collection_admin() {1230	new_test_ext().execute_with(|| {1231		let collection1_id =1232			create_test_collection_for_owner(&CollectionMode::NFT, 1, CollectionId(1));1233		let origin1 = Origin::signed(1);12341235		// Add collection admins1236		assert_ok!(Unique::add_collection_admin(1237			origin1.clone(),1238			collection1_id,1239			account(2)1240		));1241		assert_ok!(Unique::add_collection_admin(1242			origin1,1243			collection1_id,1244			account(3)1245		));12461247		// Owner is not an admin by default1248		assert_eq!(1249			<pallet_common::IsAdmin<Test>>::get((CollectionId(1), account(1))),1250			false1251		);1252		assert!(<pallet_common::IsAdmin<Test>>::get((1253			CollectionId(1),1254			account(2)1255		)));1256		assert!(<pallet_common::IsAdmin<Test>>::get((1257			CollectionId(1),1258			account(3)1259		)));1260	});1261}12621263#[test]1264fn remove_collection_admin() {1265	new_test_ext().execute_with(|| {1266		let collection1_id =1267			create_test_collection_for_owner(&CollectionMode::NFT, 1, CollectionId(1));1268		let origin1 = Origin::signed(1);12691270		// Add collection admins 2 and 31271		assert_ok!(Unique::add_collection_admin(1272			origin1.clone(),1273			collection1_id,1274			account(2)1275		));1276		assert_ok!(Unique::add_collection_admin(1277			origin1.clone(),1278			collection1_id,1279			account(3)1280		));12811282		assert!(<pallet_common::IsAdmin<Test>>::get((1283			CollectionId(1),1284			account(2)1285		)));1286		assert!(<pallet_common::IsAdmin<Test>>::get((1287			CollectionId(1),1288			account(3)1289		)));12901291		// remove admin 31292		assert_ok!(Unique::remove_collection_admin(1293			origin1,1294			CollectionId(1),1295			account(3)1296		));12971298		// 2 is still admin, 3 is not an admin anymore1299		assert!(<pallet_common::IsAdmin<Test>>::get((1300			CollectionId(1),1301			account(2)1302		)));1303		assert_eq!(1304			<pallet_common::IsAdmin<Test>>::get((CollectionId(1), account(3))),1305			false1306		);1307	});1308}13091310#[test]1311fn balance_of() {1312	new_test_ext().execute_with(|| {1313		let nft_collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1314		let fungible_collection_id =1315			create_test_collection(&CollectionMode::Fungible(3), CollectionId(2));1316		let re_fungible_collection_id =1317			create_test_collection(&CollectionMode::ReFungible, CollectionId(3));13181319		// check balance before1320		assert_eq!(1321			<pallet_nonfungible::AccountBalance<Test>>::get((nft_collection_id, account(1))),1322			01323		);1324		assert_eq!(1325			<pallet_fungible::Balance<Test>>::get((fungible_collection_id, account(1))),1326			01327		);1328		assert_eq!(1329			<pallet_refungible::AccountBalance<Test>>::get((re_fungible_collection_id, account(1))),1330			01331		);13321333		let nft_data = default_nft_data();1334		create_test_item(nft_collection_id, &nft_data.into());13351336		let fungible_data = default_fungible_data();1337		create_test_item(fungible_collection_id, &fungible_data.into());13381339		let re_fungible_data = default_re_fungible_data();1340		create_test_item(re_fungible_collection_id, &re_fungible_data.into());13411342		// check balance (collection with id = 1, user id = 1)1343		assert_eq!(1344			<pallet_nonfungible::AccountBalance<Test>>::get((nft_collection_id, account(1))),1345			11346		);1347		assert_eq!(1348			<pallet_fungible::Balance<Test>>::get((fungible_collection_id, account(1))),1349			51350		);1351		assert_eq!(1352			<pallet_refungible::AccountBalance<Test>>::get((re_fungible_collection_id, account(1))),1353			11354		);13551356		assert_eq!(1357			<pallet_nonfungible::Owned<Test>>::get((nft_collection_id, account(1), TokenId(1))),1358			true1359		);1360		assert_eq!(1361			<pallet_refungible::Owned<Test>>::get((1362				re_fungible_collection_id,1363				account(1),1364				TokenId(1)1365			)),1366			true1367		);1368	});1369}13701371#[test]1372fn approve() {1373	new_test_ext().execute_with(|| {1374		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));13751376		let data = default_nft_data();1377		create_test_item(collection_id, &data.into());13781379		let origin1 = Origin::signed(1);13801381		// approve1382		assert_ok!(Unique::approve(1383			origin1,1384			account(2),1385			CollectionId(1),1386			TokenId(1),1387			11388		));1389		assert_eq!(1390			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),1391			account(2)1392		);1393	});1394}13951396#[test]1397fn transfer_from() {1398	new_test_ext().execute_with(|| {1399		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1400		let origin1 = Origin::signed(1);1401		let origin2 = Origin::signed(2);14021403		let data = default_nft_data();1404		create_test_item(collection_id, &data.into());14051406		// approve1407		assert_ok!(Unique::approve(1408			origin1.clone(),1409			account(2),1410			CollectionId(1),1411			TokenId(1),1412			11413		));1414		assert_eq!(1415			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),1416			account(2)1417		);14181419		assert_ok!(Unique::set_collection_permissions(1420			origin1.clone(),1421			CollectionId(1),1422			CollectionPermissions {1423				mint_mode: Some(true),1424				access: Some(AccessMode::AllowList),1425				nesting: None,1426			}1427		));1428		assert_ok!(Unique::add_to_allow_list(1429			origin1.clone(),1430			CollectionId(1),1431			account(1)1432		));1433		assert_ok!(Unique::add_to_allow_list(1434			origin1.clone(),1435			CollectionId(1),1436			account(2)1437		));1438		assert_ok!(Unique::add_to_allow_list(1439			origin1,1440			CollectionId(1),1441			account(3)1442		));14431444		assert_ok!(Unique::transfer_from(1445			origin2,1446			account(1),1447			account(2),1448			CollectionId(1),1449			TokenId(1),1450			11451		));14521453		// after transfer1454		assert_eq!(1455			<pallet_nonfungible::AccountBalance<Test>>::get((CollectionId(1), account(1))),1456			01457		);1458		assert_eq!(1459			<pallet_nonfungible::AccountBalance<Test>>::get((CollectionId(1), account(2))),1460			11461		);1462	});1463}14641465// #endregion14661467// Coverage tests region1468// #region14691470#[test]1471fn owner_can_add_address_to_allow_list() {1472	new_test_ext().execute_with(|| {1473		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));14741475		let origin1 = Origin::signed(1);1476		assert_ok!(Unique::add_to_allow_list(1477			origin1,1478			collection_id,1479			account(2)1480		));1481		assert!(<pallet_common::Allowlist<Test>>::get((1482			collection_id,1483			account(2)1484		)));1485	});1486}14871488#[test]1489fn admin_can_add_address_to_allow_list() {1490	new_test_ext().execute_with(|| {1491		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1492		let origin1 = Origin::signed(1);1493		let origin2 = Origin::signed(2);14941495		assert_ok!(Unique::add_collection_admin(1496			origin1,1497			collection_id,1498			account(2)1499		));1500		assert_ok!(Unique::add_to_allow_list(1501			origin2,1502			collection_id,1503			account(3)1504		));1505		assert!(<pallet_common::Allowlist<Test>>::get((1506			collection_id,1507			account(3)1508		)));1509	});1510}15111512#[test]1513fn nonprivileged_user_cannot_add_address_to_allow_list() {1514	new_test_ext().execute_with(|| {1515		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));15161517		let origin2 = Origin::signed(2);1518		assert_noop!(1519			Unique::add_to_allow_list(origin2, collection_id, account(3)),1520			CommonError::<Test>::NoPermission1521		);1522	});1523}15241525#[test]1526fn nobody_can_add_address_to_allow_list_of_nonexisting_collection() {1527	new_test_ext().execute_with(|| {1528		let origin1 = Origin::signed(1);15291530		assert_noop!(1531			Unique::add_to_allow_list(origin1, CollectionId(1), account(2)),1532			CommonError::<Test>::CollectionNotFound1533		);1534	});1535}15361537#[test]1538fn nobody_can_add_address_to_allow_list_of_deleted_collection() {1539	new_test_ext().execute_with(|| {1540		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));15411542		let origin1 = Origin::signed(1);1543		assert_ok!(Unique::destroy_collection(origin1.clone(), collection_id));1544		assert_noop!(1545			Unique::add_to_allow_list(origin1, collection_id, account(2)),1546			CommonError::<Test>::CollectionNotFound1547		);1548	});1549}15501551// If address is already added to allow list, nothing happens1552#[test]1553fn address_is_already_added_to_allow_list() {1554	new_test_ext().execute_with(|| {1555		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1556		let origin1 = Origin::signed(1);15571558		assert_ok!(Unique::add_to_allow_list(1559			origin1.clone(),1560			collection_id,1561			account(2)1562		));1563		assert_ok!(Unique::add_to_allow_list(1564			origin1,1565			collection_id,1566			account(2)1567		));1568		assert!(<pallet_common::Allowlist<Test>>::get((1569			collection_id,1570			account(2)1571		)));1572	});1573}15741575#[test]1576fn owner_can_remove_address_from_allow_list() {1577	new_test_ext().execute_with(|| {1578		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));15791580		let origin1 = Origin::signed(1);1581		assert_ok!(Unique::add_to_allow_list(1582			origin1.clone(),1583			collection_id,1584			account(2)1585		));1586		assert_ok!(Unique::remove_from_allow_list(1587			origin1,1588			collection_id,1589			account(2)1590		));1591		assert_eq!(1592			<pallet_common::Allowlist<Test>>::get((collection_id, account(2))),1593			false1594		);1595	});1596}15971598#[test]1599fn admin_can_remove_address_from_allow_list() {1600	new_test_ext().execute_with(|| {1601		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1602		let origin1 = Origin::signed(1);1603		let origin2 = Origin::signed(2);16041605		// Owner adds admin1606		assert_ok!(Unique::add_collection_admin(1607			origin1.clone(),1608			collection_id,1609			account(2)1610		));16111612		// Owner adds address 3 to allow list1613		assert_ok!(Unique::add_to_allow_list(1614			origin1,1615			collection_id,1616			account(3)1617		));16181619		// Admin removes address 3 from allow list1620		assert_ok!(Unique::remove_from_allow_list(1621			origin2,1622			collection_id,1623			account(3)1624		));1625		assert_eq!(1626			<pallet_common::Allowlist<Test>>::get((collection_id, account(3))),1627			false1628		);1629	});1630}16311632#[test]1633fn nonprivileged_user_cannot_remove_address_from_allow_list() {1634	new_test_ext().execute_with(|| {1635		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1636		let origin1 = Origin::signed(1);1637		let origin2 = Origin::signed(2);16381639		assert_ok!(Unique::add_to_allow_list(1640			origin1,1641			collection_id,1642			account(2)1643		));1644		assert_noop!(1645			Unique::remove_from_allow_list(origin2, collection_id, account(2)),1646			CommonError::<Test>::NoPermission1647		);1648		assert!(<pallet_common::Allowlist<Test>>::get((1649			collection_id,1650			account(2)1651		)));1652	});1653}16541655#[test]1656fn nobody_can_remove_address_from_allow_list_of_nonexisting_collection() {1657	new_test_ext().execute_with(|| {1658		let origin1 = Origin::signed(1);16591660		assert_noop!(1661			Unique::remove_from_allow_list(origin1, CollectionId(1), account(2)),1662			CommonError::<Test>::CollectionNotFound1663		);1664	});1665}16661667#[test]1668fn nobody_can_remove_address_from_allow_list_of_deleted_collection() {1669	new_test_ext().execute_with(|| {1670		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1671		let origin1 = Origin::signed(1);1672		let origin2 = Origin::signed(2);16731674		// Add account 2 to allow list1675		assert_ok!(Unique::add_to_allow_list(1676			origin1.clone(),1677			collection_id,1678			account(2)1679		));16801681		// Account 2 is in collection allow-list1682		assert!(<pallet_common::Allowlist<Test>>::get((1683			collection_id,1684			account(2)1685		)));16861687		// Destroy collection1688		assert_ok!(Unique::destroy_collection(origin1, collection_id));16891690		// Attempt to remove account 2 from collection allow-list => error1691		assert_noop!(1692			Unique::remove_from_allow_list(origin2, collection_id, account(2)),1693			CommonError::<Test>::CollectionNotFound1694		);16951696		// Account 2 is not found in collection allow-list anyway1697		assert_eq!(1698			<pallet_common::Allowlist<Test>>::get((collection_id, account(2))),1699			false1700		);1701	});1702}17031704// If address is already removed from allow list, nothing happens1705#[test]1706fn address_is_already_removed_from_allow_list() {1707	new_test_ext().execute_with(|| {1708		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1709		let origin1 = Origin::signed(1);17101711		assert_ok!(Unique::add_to_allow_list(1712			origin1.clone(),1713			collection_id,1714			account(2)1715		));1716		assert_ok!(Unique::remove_from_allow_list(1717			origin1.clone(),1718			collection_id,1719			account(2)1720		));1721		assert_eq!(1722			<pallet_common::Allowlist<Test>>::get((collection_id, account(2))),1723			false1724		);1725		assert_ok!(Unique::remove_from_allow_list(1726			origin1,1727			collection_id,1728			account(2)1729		));1730		assert_eq!(1731			<pallet_common::Allowlist<Test>>::get((collection_id, account(2))),1732			false1733		);1734	});1735}17361737// If Public Access mode is set to AllowList, tokens can’t be transferred from a non-allowlisted address with transfer or transferFrom (2 tests)1738#[test]1739fn allow_list_test_1() {1740	new_test_ext().execute_with(|| {1741		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));17421743		let origin1 = Origin::signed(1);17441745		let data = default_nft_data();1746		create_test_item(collection_id, &data.into());17471748		assert_ok!(Unique::set_collection_permissions(1749			origin1.clone(),1750			collection_id,1751			CollectionPermissions {1752				mint_mode: None,1753				access: Some(AccessMode::AllowList),1754				nesting: None,1755			}1756		));1757		assert_ok!(Unique::add_to_allow_list(1758			origin1.clone(),1759			collection_id,1760			account(2)1761		));17621763		assert_noop!(1764			Unique::transfer(origin1, account(3), CollectionId(1), TokenId(1), 1)1765				.map_err(|e| e.error),1766			CommonError::<Test>::AddressNotInAllowlist1767		);1768	});1769}17701771#[test]1772fn allow_list_test_2() {1773	new_test_ext().execute_with(|| {1774		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1775		let origin1 = Origin::signed(1);17761777		let data = default_nft_data();1778		create_test_item(collection_id, &data.into());17791780		assert_ok!(Unique::set_collection_permissions(1781			origin1.clone(),1782			collection_id,1783			CollectionPermissions {1784				mint_mode: None,1785				access: Some(AccessMode::AllowList),1786				nesting: None,1787			}1788		));1789		assert_ok!(Unique::add_to_allow_list(1790			origin1.clone(),1791			collection_id,1792			account(1)1793		));1794		assert_ok!(Unique::add_to_allow_list(1795			origin1.clone(),1796			collection_id,1797			account(2)1798		));17991800		// do approve1801		assert_ok!(Unique::approve(1802			origin1.clone(),1803			account(1),1804			collection_id,1805			TokenId(1),1806			11807		));1808		assert_eq!(1809			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),1810			account(1)1811		);18121813		assert_ok!(Unique::remove_from_allow_list(1814			origin1.clone(),1815			collection_id,1816			account(1)1817		));18181819		assert_noop!(1820			Unique::transfer_from(1821				origin1,1822				account(1),1823				account(3),1824				CollectionId(1),1825				TokenId(1),1826				11827			)1828			.map_err(|e| e.error),1829			CommonError::<Test>::AddressNotInAllowlist1830		);1831	});1832}18331834// If Public Access mode is set to AllowList, tokens can’t be transferred to a non-allowlisted address with transfer or transferFrom (2 tests)1835#[test]1836fn allow_list_test_3() {1837	new_test_ext().execute_with(|| {1838		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));18391840		let origin1 = Origin::signed(1);18411842		let data = default_nft_data();1843		create_test_item(collection_id, &data.into());18441845		assert_ok!(Unique::set_collection_permissions(1846			origin1.clone(),1847			collection_id,1848			CollectionPermissions {1849				mint_mode: None,1850				access: Some(AccessMode::AllowList),1851				nesting: None,1852			}1853		));1854		assert_ok!(Unique::add_to_allow_list(1855			origin1.clone(),1856			collection_id,1857			account(1)1858		));18591860		assert_noop!(1861			Unique::transfer(origin1, account(3), collection_id, TokenId(1), 1)1862				.map_err(|e| e.error),1863			CommonError::<Test>::AddressNotInAllowlist1864		);1865	});1866}18671868#[test]1869fn allow_list_test_4() {1870	new_test_ext().execute_with(|| {1871		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));18721873		let origin1 = Origin::signed(1);18741875		let data = default_nft_data();1876		create_test_item(collection_id, &data.into());18771878		assert_ok!(Unique::set_collection_permissions(1879			origin1.clone(),1880			collection_id,1881			CollectionPermissions {1882				mint_mode: None,1883				access: Some(AccessMode::AllowList),1884				nesting: None,1885			}1886		));1887		assert_ok!(Unique::add_to_allow_list(1888			origin1.clone(),1889			collection_id,1890			account(1)1891		));1892		assert_ok!(Unique::add_to_allow_list(1893			origin1.clone(),1894			collection_id,1895			account(2)1896		));18971898		// do approve1899		assert_ok!(Unique::approve(1900			origin1.clone(),1901			account(1),1902			collection_id,1903			TokenId(1),1904			11905		));1906		assert_eq!(1907			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),1908			account(1)1909		);19101911		assert_ok!(Unique::remove_from_allow_list(1912			origin1.clone(),1913			collection_id,1914			account(2)1915		));19161917		assert_noop!(1918			Unique::transfer_from(1919				origin1,1920				account(1),1921				account(3),1922				collection_id,1923				TokenId(1),1924				11925			)1926			.map_err(|e| e.error),1927			CommonError::<Test>::AddressNotInAllowlist1928		);1929	});1930}19311932// If Public Access mode is set to AllowList, tokens can’t be destroyed by a non-allowlisted address (even if it owned them before enabling AllowList mode)1933#[test]1934fn allow_list_test_5() {1935	new_test_ext().execute_with(|| {1936		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));19371938		let origin1 = Origin::signed(1);19391940		let data = default_nft_data();1941		create_test_item(collection_id, &data.into());19421943		assert_ok!(Unique::set_collection_permissions(1944			origin1.clone(),1945			collection_id,1946			CollectionPermissions {1947				mint_mode: None,1948				access: Some(AccessMode::AllowList),1949				nesting: None,1950			}1951		));1952		assert_noop!(1953			Unique::burn_item(origin1.clone(), CollectionId(1), TokenId(1), 1).map_err(|e| e.error),1954			CommonError::<Test>::AddressNotInAllowlist1955		);1956	});1957}19581959// If Public Access mode is set to AllowList, token transfers can’t be Approved by a non-allowlisted address (see Approve method).1960#[test]1961fn allow_list_test_6() {1962	new_test_ext().execute_with(|| {1963		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));19641965		let origin1 = Origin::signed(1);19661967		let data = default_nft_data();1968		create_test_item(collection_id, &data.into());19691970		assert_ok!(Unique::set_collection_permissions(1971			origin1.clone(),1972			collection_id,1973			CollectionPermissions {1974				mint_mode: None,1975				access: Some(AccessMode::AllowList),1976				nesting: None,1977			}1978		));19791980		// do approve1981		assert_noop!(1982			Unique::approve(origin1, account(1), CollectionId(1), TokenId(1), 1)1983				.map_err(|e| e.error),1984			CommonError::<Test>::AddressNotInAllowlist1985		);1986	});1987}19881989// If Public Access mode is set to AllowList, tokens can be transferred from a allowlisted address with transfer or transferFrom (2 tests) and1990//          tokens can be transferred from a allowlisted address with transfer or transferFrom (2 tests)1991#[test]1992fn allow_list_test_7() {1993	new_test_ext().execute_with(|| {1994		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));19951996		let data = default_nft_data();1997		create_test_item(collection_id, &data.into());19981999		let origin1 = Origin::signed(1);20002001		assert_ok!(Unique::set_collection_permissions(2002			origin1.clone(),2003			collection_id,2004			CollectionPermissions {2005				mint_mode: None,2006				access: Some(AccessMode::AllowList),2007				nesting: None,2008			}2009		));2010		assert_ok!(Unique::add_to_allow_list(2011			origin1.clone(),2012			collection_id,2013			account(1)2014		));2015		assert_ok!(Unique::add_to_allow_list(2016			origin1.clone(),2017			collection_id,2018			account(2)2019		));20202021		assert_ok!(Unique::transfer(2022			origin1,2023			account(2),2024			CollectionId(1),2025			TokenId(1),2026			12027		));2028	});2029}20302031#[test]2032fn allow_list_test_8() {2033	new_test_ext().execute_with(|| {2034		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));20352036		// Create NFT for account 12037		let data = default_nft_data();2038		create_test_item(collection_id, &data.into());20392040		let origin1 = Origin::signed(1);20412042		// Toggle Allow List mode and add accounts 1 and 22043		assert_ok!(Unique::set_collection_permissions(2044			origin1.clone(),2045			collection_id,2046			CollectionPermissions {2047				mint_mode: None,2048				access: Some(AccessMode::AllowList),2049				nesting: None,2050			}2051		));2052		assert_ok!(Unique::add_to_allow_list(2053			origin1.clone(),2054			collection_id,2055			account(1)2056		));2057		assert_ok!(Unique::add_to_allow_list(2058			origin1.clone(),2059			collection_id,2060			account(2)2061		));20622063		// Sself-approve account 1 for NFT 12064		assert_ok!(Unique::approve(2065			origin1.clone(),2066			account(1),2067			CollectionId(1),2068			TokenId(1),2069			12070		));2071		assert_eq!(2072			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),2073			account(1)2074		);20752076		// Transfer from 1 to 22077		assert_ok!(Unique::transfer_from(2078			origin1,2079			account(1),2080			account(2),2081			CollectionId(1),2082			TokenId(1),2083			12084		));2085	});2086}20872088// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by owner.2089#[test]2090fn allow_list_test_9() {2091	new_test_ext().execute_with(|| {2092		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));2093		let origin1 = Origin::signed(1);20942095		assert_ok!(Unique::set_collection_permissions(2096			origin1.clone(),2097			collection_id,2098			CollectionPermissions {2099				mint_mode: Some(false),2100				access: Some(AccessMode::AllowList),2101				nesting: None,2102			}2103		));21042105		let data = default_nft_data();2106		create_test_item(collection_id, &data.into());2107	});2108}21092110// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by admin.2111#[test]2112fn allow_list_test_10() {2113	new_test_ext().execute_with(|| {2114		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));21152116		let origin1 = Origin::signed(1);2117		let origin2 = Origin::signed(2);21182119		assert_ok!(Unique::set_collection_permissions(2120			origin1.clone(),2121			collection_id,2122			CollectionPermissions {2123				mint_mode: Some(false),2124				access: Some(AccessMode::AllowList),2125				nesting: None,2126			}2127		));21282129		assert_ok!(Unique::add_collection_admin(2130			origin1,2131			collection_id,2132			account(2)2133		));21342135		assert_ok!(Unique::create_item(2136			origin2,2137			collection_id,2138			account(2),2139			default_nft_data().into()2140		));2141	});2142}21432144// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and allow listed address.2145#[test]2146fn allow_list_test_11() {2147	new_test_ext().execute_with(|| {2148		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));21492150		let origin1 = Origin::signed(1);2151		let origin2 = Origin::signed(2);21522153		assert_ok!(Unique::set_collection_permissions(2154			origin1.clone(),2155			collection_id,2156			CollectionPermissions {2157				mint_mode: Some(false),2158				access: Some(AccessMode::AllowList),2159				nesting: None,2160			}2161		));2162		assert_ok!(Unique::add_to_allow_list(2163			origin1,2164			collection_id,2165			account(2)2166		));21672168		assert_noop!(2169			Unique::create_item(2170				origin2,2171				CollectionId(1),2172				account(2),2173				default_nft_data().into()2174			)2175			.map_err(|e| e.error),2176			CommonError::<Test>::PublicMintingNotAllowed2177		);2178	});2179}21802181// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and non-allow listed address.2182#[test]2183fn allow_list_test_12() {2184	new_test_ext().execute_with(|| {2185		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));21862187		let origin1 = Origin::signed(1);2188		let origin2 = Origin::signed(2);21892190		assert_ok!(Unique::set_collection_permissions(2191			origin1.clone(),2192			collection_id,2193			CollectionPermissions {2194				mint_mode: Some(false),2195				access: Some(AccessMode::AllowList),2196				nesting: None,2197			}2198		));21992200		assert_noop!(2201			Unique::create_item(2202				origin2,2203				CollectionId(1),2204				account(2),2205				default_nft_data().into()2206			)2207			.map_err(|e| e.error),2208			CommonError::<Test>::PublicMintingNotAllowed2209		);2210	});2211}22122213// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by owner.2214#[test]2215fn allow_list_test_13() {2216	new_test_ext().execute_with(|| {2217		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));22182219		let origin1 = Origin::signed(1);22202221		assert_ok!(Unique::set_collection_permissions(2222			origin1.clone(),2223			collection_id,2224			CollectionPermissions {2225				mint_mode: Some(true),2226				access: Some(AccessMode::AllowList),2227				nesting: None,2228			}2229		));22302231		let data = default_nft_data();2232		create_test_item(collection_id, &data.into());2233	});2234}22352236// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by admin.2237#[test]2238fn allow_list_test_14() {2239	new_test_ext().execute_with(|| {2240		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));22412242		let origin1 = Origin::signed(1);2243		let origin2 = Origin::signed(2);22442245		assert_ok!(Unique::set_collection_permissions(2246			origin1.clone(),2247			collection_id,2248			CollectionPermissions {2249				mint_mode: Some(true),2250				access: Some(AccessMode::AllowList),2251				nesting: None,2252			}2253		));22542255		assert_ok!(Unique::add_collection_admin(2256			origin1,2257			collection_id,2258			account(2)2259		));22602261		assert_ok!(Unique::create_item(2262			origin2,2263			collection_id,2264			account(2),2265			default_nft_data().into()2266		));2267	});2268}22692270// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens cannot be created by non-privileged and non-allow listed address.2271#[test]2272fn allow_list_test_15() {2273	new_test_ext().execute_with(|| {2274		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));22752276		let origin1 = Origin::signed(1);2277		let origin2 = Origin::signed(2);22782279		assert_ok!(Unique::set_collection_permissions(2280			origin1.clone(),2281			collection_id,2282			CollectionPermissions {2283				mint_mode: Some(true),2284				access: Some(AccessMode::AllowList),2285				nesting: None,2286			}2287		));22882289		assert_noop!(2290			Unique::create_item(2291				origin2,2292				collection_id,2293				account(2),2294				default_nft_data().into()2295			)2296			.map_err(|e| e.error),2297			CommonError::<Test>::AddressNotInAllowlist2298		);2299	});2300}23012302// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by non-privileged and allow listed address.2303#[test]2304fn allow_list_test_16() {2305	new_test_ext().execute_with(|| {2306		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));23072308		let origin1 = Origin::signed(1);2309		let origin2 = Origin::signed(2);23102311		assert_ok!(Unique::set_collection_permissions(2312			origin1.clone(),2313			collection_id,2314			CollectionPermissions {2315				mint_mode: Some(true),2316				access: Some(AccessMode::AllowList),2317				nesting: None,2318			}2319		));2320		assert_ok!(Unique::add_to_allow_list(2321			origin1,2322			collection_id,2323			account(2)2324		));23252326		assert_ok!(Unique::create_item(2327			origin2,2328			collection_id,2329			account(2),2330			default_nft_data().into()2331		));2332	});2333}23342335// Total number of collections. Positive test2336#[test]2337fn total_number_collections_bound() {2338	new_test_ext().execute_with(|| {2339		create_test_collection(&CollectionMode::NFT, CollectionId(1));2340	});2341}23422343#[test]2344fn create_max_collections() {2345	new_test_ext().execute_with(|| {2346		for i in 1..COLLECTION_NUMBER_LIMIT {2347			create_test_collection(&CollectionMode::NFT, CollectionId(i));2348		}2349	});2350}23512352// Total number of collections. Negative test2353#[test]2354fn total_number_collections_bound_neg() {2355	new_test_ext().execute_with(|| {2356		let origin1 = Origin::signed(1);23572358		for i in 1..=COLLECTION_NUMBER_LIMIT {2359			create_test_collection(&CollectionMode::NFT, CollectionId(i));2360		}23612362		let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2363		let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2364		let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();23652366		let data: CreateCollectionData<u64> = CreateCollectionData {2367			name: col_name1.try_into().unwrap(),2368			description: col_desc1.try_into().unwrap(),2369			token_prefix: token_prefix1.try_into().unwrap(),2370			mode: CollectionMode::NFT,2371			..Default::default()2372		};23732374		// 11-th collection in chain. Expects error2375		assert_noop!(2376			Unique::create_collection_ex(origin1, data),2377			CommonError::<Test>::TotalCollectionsLimitExceeded2378		);2379	});2380}23812382// Owned tokens by a single address. Positive test2383#[test]2384fn owned_tokens_bound() {2385	new_test_ext().execute_with(|| {2386		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));23872388		let data = default_nft_data();2389		create_test_item(collection_id, &data.clone().into());2390		create_test_item(collection_id, &data.into());2391	});2392}23932394// Owned tokens by a single address. Negotive test2395#[test]2396fn owned_tokens_bound_neg() {2397	new_test_ext().execute_with(|| {2398		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));23992400		let origin1 = Origin::signed(1);24012402		for _ in 1..=MAX_TOKEN_OWNERSHIP {2403			let data = default_nft_data();2404			create_test_item(collection_id, &data.clone().into());2405		}24062407		let data = default_nft_data();2408		assert_noop!(2409			Unique::create_item(origin1, CollectionId(1), account(1), data.into())2410				.map_err(|e| e.error),2411			CommonError::<Test>::AccountTokenLimitExceeded2412		);2413	});2414}24152416// Number of collection admins. Positive test2417#[test]2418fn collection_admins_bound() {2419	new_test_ext().execute_with(|| {2420		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));24212422		let origin1 = Origin::signed(1);24232424		assert_ok!(Unique::add_collection_admin(2425			origin1.clone(),2426			collection_id,2427			account(2)2428		));2429		assert_ok!(Unique::add_collection_admin(2430			origin1,2431			collection_id,2432			account(3)2433		));2434	});2435}24362437// Number of collection admins. Negotive test2438#[test]2439fn collection_admins_bound_neg() {2440	new_test_ext().execute_with(|| {2441		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));24422443		let origin1 = Origin::signed(1);24442445		for i in 0..COLLECTION_ADMINS_LIMIT {2446			assert_ok!(Unique::add_collection_admin(2447				origin1.clone(),2448				collection_id,2449				account((2 + i).into())2450			));2451		}2452		assert_noop!(2453			Unique::add_collection_admin(2454				origin1,2455				collection_id,2456				account((3 + COLLECTION_ADMINS_LIMIT).into())2457			),2458			CommonError::<Test>::CollectionAdminCountExceeded2459		);2460	});2461}2462// #endregion24632464#[test]2465fn collection_transfer_flag_works() {2466	new_test_ext().execute_with(|| {2467		let origin1 = Origin::signed(1);24682469		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));2470		assert_ok!(Unique::set_transfers_enabled_flag(2471			origin1,2472			collection_id,2473			true2474		));24752476		let data = default_nft_data();2477		create_test_item(collection_id, &data.into());2478		assert_eq!(2479			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),2480			12481		);2482		assert_eq!(2483			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),2484			true2485		);24862487		let origin1 = Origin::signed(1);24882489		// default scenario2490		assert_ok!(Unique::transfer(2491			origin1,2492			account(2),2493			collection_id,2494			TokenId(1),2495			12496		));2497		assert_eq!(2498			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),2499			false2500		);2501		assert_eq!(2502			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),2503			true2504		);2505		assert_eq!(2506			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),2507			02508		);2509		assert_eq!(2510			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(2))),2511			12512		);2513	});2514}25152516#[test]2517fn collection_transfer_flag_works_neg() {2518	new_test_ext().execute_with(|| {2519		let origin1 = Origin::signed(1);25202521		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));2522		assert_ok!(Unique::set_transfers_enabled_flag(2523			origin1,2524			collection_id,2525			false2526		));25272528		let data = default_nft_data();2529		create_test_item(collection_id, &data.into());2530		assert_eq!(2531			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),2532			12533		);2534		assert_eq!(2535			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),2536			true2537		);25382539		let origin1 = Origin::signed(1);25402541		// default scenario2542		assert_noop!(2543			Unique::transfer(origin1, account(2), CollectionId(1), TokenId(1), 1)2544				.map_err(|e| e.error),2545			CommonError::<Test>::TransferNotAllowed2546		);2547		assert_eq!(2548			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),2549			12550		);2551		assert_eq!(2552			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(2))),2553			02554		);2555		assert_eq!(2556			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),2557			true2558		);2559		assert_eq!(2560			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),2561			false2562		);2563	});2564}25652566#[test]2567fn collection_sponsoring() {2568	new_test_ext().execute_with(|| {2569		// default_limits();2570		let user1 = 1_u64;2571		let user2 = 777_u64;2572		let origin1 = Origin::signed(user1);2573		let origin2 = Origin::signed(user2);2574		let account2 = account(user2);25752576		let collection_id =2577			create_test_collection_for_owner(&CollectionMode::NFT, user1, CollectionId(1));2578		assert_ok!(Unique::set_collection_sponsor(2579			origin1.clone(),2580			collection_id,2581			user12582		));2583		assert_ok!(Unique::confirm_sponsorship(origin1.clone(), collection_id));25842585		// Expect error while have no permissions2586		assert!(Unique::create_item(2587			origin2.clone(),2588			collection_id,2589			account2.clone(),2590			default_nft_data().into()2591		)2592		.is_err());25932594		assert_ok!(Unique::set_collection_permissions(2595			origin1.clone(),2596			collection_id,2597			CollectionPermissions {2598				mint_mode: Some(true),2599				access: Some(AccessMode::AllowList),2600				nesting: None,2601			}2602		));2603		assert_ok!(Unique::add_to_allow_list(2604			origin1.clone(),2605			collection_id,2606			account2.clone()2607		));26082609		assert_ok!(Unique::create_item(2610			origin2,2611			collection_id,2612			account2,2613			default_nft_data().into()2614		));2615	});2616}
after · runtime/tests/src/tests.rs
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617// Tests to be written here18use crate::{Test, TestCrossAccountId, CollectionCreationPrice, RuntimeOrigin, Unique, new_test_ext};19use up_data_structs::{20	COLLECTION_NUMBER_LIMIT, CollectionId, CreateItemData, CreateFungibleData, CreateNftData,21	CreateReFungibleData, MAX_DECIMAL_POINTS, COLLECTION_ADMINS_LIMIT, TokenId,22	MAX_TOKEN_OWNERSHIP, CreateCollectionData, CollectionMode, AccessMode, CollectionPermissions,23	PropertyKeyPermission, PropertyPermission, Property, CollectionPropertiesVec,24	CollectionPropertiesPermissionsVec,25};26use frame_support::{assert_noop, assert_ok, assert_err};27use sp_std::convert::TryInto;28use pallet_evm::account::CrossAccountId;29use pallet_common::Error as CommonError;30use pallet_unique::Error as UniqueError;3132fn add_balance(user: u64, value: u64) {33	const DONOR_USER: u64 = 999;34	assert_ok!(<pallet_balances::Pallet<Test>>::set_balance(35		RuntimeOrigin::root(),36		DONOR_USER,37		value,38		039	));40	assert_ok!(<pallet_balances::Pallet<Test>>::force_transfer(41		RuntimeOrigin::root(),42		DONOR_USER,43		user,44		value45	));46}4748fn default_nft_data() -> CreateNftData {49	CreateNftData {50		properties: vec![Property {51			key: b"test-prop".to_vec().try_into().unwrap(),52			value: b"test-nft-prop".to_vec().try_into().unwrap(),53		}]54		.try_into()55		.unwrap(),56	}57}5859fn default_fungible_data() -> CreateFungibleData {60	CreateFungibleData { value: 5 }61}6263fn default_re_fungible_data() -> CreateReFungibleData {64	CreateReFungibleData {65		pieces: 1023,66		properties: vec![Property {67			key: b"test-prop".to_vec().try_into().unwrap(),68			value: b"test-nft-prop".to_vec().try_into().unwrap(),69		}]70		.try_into()71		.unwrap(),72	}73}7475fn create_test_collection_for_owner(76	mode: &CollectionMode,77	owner: u64,78	id: CollectionId,79) -> CollectionId {80	add_balance(owner, CollectionCreationPrice::get() as u64 + 1);8182	let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();83	let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();84	let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();85	let token_property_permissions: CollectionPropertiesPermissionsVec =86		vec![PropertyKeyPermission {87			key: b"test-prop".to_vec().try_into().unwrap(),88			permission: PropertyPermission {89				mutable: true,90				collection_admin: false,91				token_owner: true,92			},93		}]94		.try_into()95		.unwrap();96	let properties: CollectionPropertiesVec = vec![Property {97		key: b"test-collection-prop".to_vec().try_into().unwrap(),98		value: b"test-collection-value".to_vec().try_into().unwrap(),99	}]100	.try_into()101	.unwrap();102103	let data: CreateCollectionData<u64> = CreateCollectionData {104		name: col_name1.try_into().unwrap(),105		description: col_desc1.try_into().unwrap(),106		token_prefix: token_prefix1.try_into().unwrap(),107		mode: mode.clone(),108		token_property_permissions: token_property_permissions.clone(),109		properties: properties.clone(),110		..Default::default()111	};112113	let origin1 = RuntimeOrigin::signed(owner);114	assert_ok!(Unique::create_collection_ex(origin1, data));115116	let saved_col_name: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();117	let saved_description: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();118	let saved_prefix: Vec<u8> = b"token_prefix1\0".to_vec();119	assert_eq!(120		<pallet_common::CollectionById<Test>>::get(id)121			.unwrap()122			.owner,123		owner124	);125	assert_eq!(126		<pallet_common::CollectionById<Test>>::get(id).unwrap().name,127		saved_col_name128	);129	assert_eq!(130		<pallet_common::CollectionById<Test>>::get(id).unwrap().mode,131		*mode132	);133	assert_eq!(134		<pallet_common::CollectionById<Test>>::get(id)135			.unwrap()136			.description,137		saved_description138	);139	assert_eq!(140		<pallet_common::CollectionById<Test>>::get(id)141			.unwrap()142			.token_prefix,143		saved_prefix144	);145	assert_eq!(146		get_collection_property_permissions(id).as_slice(),147		token_property_permissions.as_slice()148	);149	assert_eq!(150		get_collection_properties(id).as_slice(),151		properties.as_slice()152	);153	id154}155156fn get_collection_property_permissions(collection_id: CollectionId) -> Vec<PropertyKeyPermission> {157	<pallet_common::Pallet<Test>>::property_permissions(collection_id)158		.into_iter()159		.map(|(key, permission)| PropertyKeyPermission { key, permission })160		.collect()161}162163fn get_collection_properties(collection_id: CollectionId) -> Vec<Property> {164	<pallet_common::Pallet<Test>>::collection_properties(collection_id)165		.into_iter()166		.map(|(key, value)| Property { key, value })167		.collect()168}169170fn get_token_properties(collection_id: CollectionId, token_id: TokenId) -> Vec<Property> {171	<pallet_nonfungible::Pallet<Test>>::token_properties((collection_id, token_id))172		.into_iter()173		.map(|(key, value)| Property { key, value })174		.collect()175}176177fn create_test_collection(mode: &CollectionMode, id: CollectionId) -> CollectionId {178	create_test_collection_for_owner(&mode, 1, id)179}180181fn create_test_item(collection_id: CollectionId, data: &CreateItemData) {182	let origin1 = RuntimeOrigin::signed(1);183	assert_ok!(Unique::create_item(184		origin1,185		collection_id,186		account(1),187		data.clone()188	));189}190191fn account(sub: u64) -> TestCrossAccountId {192	TestCrossAccountId::from_sub(sub)193}194195// Use cases tests region196// #region197198#[test]199fn check_not_sufficient_founds() {200	new_test_ext().execute_with(|| {201		let acc: u64 = 1;202		<pallet_balances::Pallet<Test>>::set_balance(RuntimeOrigin::root(), acc, 0, 0).unwrap();203204		let name: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();205		let description: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();206		let token_prefix: Vec<u8> = b"token_prefix1\0".to_vec();207208		let data: CreateCollectionData<<Test as frame_system::Config>::AccountId> =209			CreateCollectionData {210				name: name.try_into().unwrap(),211				description: description.try_into().unwrap(),212				token_prefix: token_prefix.try_into().unwrap(),213				mode: CollectionMode::NFT,214				..Default::default()215			};216217		let result = Unique::create_collection_ex(RuntimeOrigin::signed(acc), data);218		assert_err!(result, <CommonError<Test>>::NotSufficientFounds);219	});220}221222#[test]223fn create_fungible_collection_fails_with_large_decimal_numbers() {224	new_test_ext().execute_with(|| {225		let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();226		let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();227		let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();228229		let data: CreateCollectionData<u64> = CreateCollectionData {230			name: col_name1.try_into().unwrap(),231			description: col_desc1.try_into().unwrap(),232			token_prefix: token_prefix1.try_into().unwrap(),233			mode: CollectionMode::Fungible(MAX_DECIMAL_POINTS + 1),234			..Default::default()235		};236237		let origin1 = RuntimeOrigin::signed(1);238		assert_noop!(239			Unique::create_collection_ex(origin1, data),240			UniqueError::<Test>::CollectionDecimalPointLimitExceeded241		);242	});243}244245#[test]246fn create_nft_item() {247	new_test_ext().execute_with(|| {248		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));249250		let data = default_nft_data();251		create_test_item(collection_id, &data.clone().into());252253		assert_eq!(254			get_token_properties(collection_id, TokenId(1)).as_slice(),255			data.properties.as_slice(),256		);257	});258}259260// Use cases tests region261// #region262#[test]263fn create_nft_multiple_items() {264	new_test_ext().execute_with(|| {265		create_test_collection(&CollectionMode::NFT, CollectionId(1));266267		let origin1 = RuntimeOrigin::signed(1);268269		let items_data = vec![default_nft_data(), default_nft_data(), default_nft_data()];270271		assert_ok!(Unique::create_multiple_items(272			origin1,273			CollectionId(1),274			account(1),275			items_data276				.clone()277				.into_iter()278				.map(|d| { d.into() })279				.collect()280		));281		for (index, data) in items_data.into_iter().enumerate() {282			assert_eq!(283				get_token_properties(CollectionId(1), TokenId(index as u32 + 1)).as_slice(),284				data.properties.as_slice()285			);286		}287	});288}289290#[test]291fn create_refungible_item() {292	new_test_ext().execute_with(|| {293		let collection_id = create_test_collection(&CollectionMode::ReFungible, CollectionId(1));294295		let data = default_re_fungible_data();296		create_test_item(collection_id, &data.clone().into());297		let item = <pallet_refungible::TokenData<Test>>::get((collection_id, TokenId(1)));298		let balance =299			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1)));300		assert_eq!(balance, 1023);301	});302}303304#[test]305fn create_multiple_refungible_items() {306	new_test_ext().execute_with(|| {307		create_test_collection(&CollectionMode::ReFungible, CollectionId(1));308309		let origin1 = RuntimeOrigin::signed(1);310311		let items_data = vec![312			default_re_fungible_data(),313			default_re_fungible_data(),314			default_re_fungible_data(),315		];316317		assert_ok!(Unique::create_multiple_items(318			origin1,319			CollectionId(1),320			account(1),321			items_data322				.clone()323				.into_iter()324				.map(|d| { d.into() })325				.collect()326		));327		for (index, data) in items_data.into_iter().enumerate() {328			let item = <pallet_refungible::TokenData<Test>>::get((329				CollectionId(1),330				TokenId((index + 1) as u32),331			));332			let balance =333				<pallet_refungible::Balance<Test>>::get((CollectionId(1), TokenId(1), account(1)));334			assert_eq!(balance, 1023);335		}336	});337}338339#[test]340fn create_fungible_item() {341	new_test_ext().execute_with(|| {342		let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));343344		let data = default_fungible_data();345		create_test_item(collection_id, &data.into());346347		assert_eq!(348			<pallet_fungible::Balance<Test>>::get((collection_id, account(1))),349			5350		);351	});352}353354//#[test]355// fn create_multiple_fungible_items() {356//     new_test_ext().execute_with(|| {357//         default_limits();358359//         create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));360361//         let origin1 = RuntimeOrigin::signed(1);362363//         let items_data = vec![default_fungible_data(), default_fungible_data(), default_fungible_data()];364365//         assert_ok!(Unique::create_multiple_items(366//             origin1.clone(),367//             1,368//             1,369//             items_data.clone().into_iter().map(|d| { d.into() }).collect()370//         ));371372//         for (index, _) in items_data.iter().enumerate() {373//             assert_eq!(Unique::fungible_item_id(1, (index + 1) as TokenId).value, 5);374//         }375//         assert_eq!(Unique::balance_count(1, 1), 3000);376//         assert_eq!(Unique::address_tokens(1, 1), [1, 2, 3]);377//     });378// }379380#[test]381fn transfer_fungible_item() {382	new_test_ext().execute_with(|| {383		let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));384385		let origin1 = RuntimeOrigin::signed(1);386		let origin2 = RuntimeOrigin::signed(2);387388		let data = default_fungible_data();389		create_test_item(collection_id, &data.into());390391		assert_eq!(392			<pallet_fungible::Balance<Test>>::get((CollectionId(1), account(1))),393			5394		);395396		// change owner scenario397		assert_ok!(Unique::transfer(398			origin1,399			account(2),400			CollectionId(1),401			TokenId(0),402			5403		));404		assert_eq!(405			<pallet_fungible::Balance<Test>>::get((CollectionId(1), account(1))),406			0407		);408409		// split item scenario410		assert_ok!(Unique::transfer(411			origin2.clone(),412			account(3),413			CollectionId(1),414			TokenId(0),415			3416		));417418		// split item and new owner has account scenario419		assert_ok!(Unique::transfer(420			origin2,421			account(3),422			CollectionId(1),423			TokenId(0),424			1425		));426		assert_eq!(427			<pallet_fungible::Balance<Test>>::get((CollectionId(1), account(2))),428			1429		);430		assert_eq!(431			<pallet_fungible::Balance<Test>>::get((CollectionId(1), account(3))),432			4433		);434	});435}436437#[test]438fn transfer_refungible_item() {439	new_test_ext().execute_with(|| {440		let collection_id = create_test_collection(&CollectionMode::ReFungible, CollectionId(1));441442		// Create RFT 1 in 1023 pieces for account 1443		let data = default_re_fungible_data();444		create_test_item(collection_id, &data.clone().into());445		let item = <pallet_refungible::TokenData<Test>>::get((collection_id, TokenId(1)));446		assert_eq!(447			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),448			1449		);450		assert_eq!(451			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),452			1023453		);454		assert_eq!(455			<pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),456			true457		);458459		// Account 1 transfers all 1023 pieces of RFT 1 to account 2460		let origin1 = RuntimeOrigin::signed(1);461		let origin2 = RuntimeOrigin::signed(2);462		assert_ok!(Unique::transfer(463			origin1,464			account(2),465			CollectionId(1),466			TokenId(1),467			1023468		));469		assert_eq!(470			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(2))),471			1023472		);473		assert_eq!(474			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),475			0476		);477		assert_eq!(478			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(2))),479			1480		);481		assert_eq!(482			<pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),483			false484		);485		assert_eq!(486			<pallet_refungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),487			true488		);489490		// Account 2 transfers 500 pieces of RFT 1 to account 3491		assert_ok!(Unique::transfer(492			origin2.clone(),493			account(3),494			CollectionId(1),495			TokenId(1),496			500497		));498		assert_eq!(499			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(2))),500			523501		);502		assert_eq!(503			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(3))),504			500505		);506		assert_eq!(507			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(2))),508			1509		);510		assert_eq!(511			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(3))),512			1513		);514		assert_eq!(515			<pallet_refungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),516			true517		);518		assert_eq!(519			<pallet_refungible::Owned<Test>>::get((collection_id, account(3), TokenId(1))),520			true521		);522523		// Account 2 transfers 200 more pieces of RFT 1 to account 3 with pre-existing balance524		assert_ok!(Unique::transfer(525			origin2,526			account(3),527			CollectionId(1),528			TokenId(1),529			200530		));531		assert_eq!(532			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(2))),533			323534		);535		assert_eq!(536			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(3))),537			700538		);539		assert_eq!(540			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(2))),541			1542		);543		assert_eq!(544			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(3))),545			1546		);547		assert_eq!(548			<pallet_refungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),549			true550		);551		assert_eq!(552			<pallet_refungible::Owned<Test>>::get((collection_id, account(3), TokenId(1))),553			true554		);555	});556}557558#[test]559fn transfer_nft_item() {560	new_test_ext().execute_with(|| {561		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));562563		let data = default_nft_data();564		create_test_item(collection_id, &data.into());565		assert_eq!(566			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),567			1568		);569		assert_eq!(570			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),571			true572		);573574		let origin1 = RuntimeOrigin::signed(1);575		// default scenario576		assert_ok!(Unique::transfer(577			origin1,578			account(2),579			CollectionId(1),580			TokenId(1),581			1582		));583		assert_eq!(584			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),585			0586		);587		assert_eq!(588			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(2))),589			1590		);591		assert_eq!(592			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),593			false594		);595		assert_eq!(596			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),597			true598		);599	});600}601602#[test]603fn transfer_nft_item_wrong_value() {604	new_test_ext().execute_with(|| {605		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));606607		let data = default_nft_data();608		create_test_item(collection_id, &data.into());609		assert_eq!(610			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),611			1612		);613		assert_eq!(614			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),615			true616		);617618		let origin1 = RuntimeOrigin::signed(1);619620		assert_noop!(621			Unique::transfer(origin1, account(2), CollectionId(1), TokenId(1), 2)622				.map_err(|e| e.error),623			<pallet_nonfungible::Error::<Test>>::NonfungibleItemsHaveNoAmount624		);625	});626}627628#[test]629fn transfer_nft_item_zero_value() {630	new_test_ext().execute_with(|| {631		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));632633		let data = default_nft_data();634		create_test_item(collection_id, &data.into());635		assert_eq!(636			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),637			1638		);639		assert_eq!(640			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),641			true642		);643644		let origin1 = RuntimeOrigin::signed(1);645646		// Transferring 0 amount works on NFT...647		assert_ok!(Unique::transfer(648			origin1,649			account(2),650			CollectionId(1),651			TokenId(1),652			0653		));654		// ... and results in no transfer655		assert_eq!(656			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),657			1658		);659		assert_eq!(660			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),661			true662		);663	});664}665666#[test]667fn nft_approve_and_transfer_from() {668	new_test_ext().execute_with(|| {669		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));670671		let data = default_nft_data();672		create_test_item(collection_id, &data.into());673674		let origin1 = RuntimeOrigin::signed(1);675		let origin2 = RuntimeOrigin::signed(2);676677		assert_eq!(678			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),679			1680		);681		assert_eq!(682			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),683			true684		);685686		// neg transfer_from687		assert_noop!(688			Unique::transfer_from(689				origin2.clone(),690				account(1),691				account(2),692				CollectionId(1),693				TokenId(1),694				1695			)696			.map_err(|e| e.error),697			CommonError::<Test>::ApprovedValueTooLow698		);699700		// do approve701		assert_ok!(Unique::approve(702			origin1,703			account(2),704			CollectionId(1),705			TokenId(1),706			1707		));708		assert_eq!(709			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),710			account(2)711		);712713		assert_ok!(Unique::transfer_from(714			origin2,715			account(1),716			account(3),717			CollectionId(1),718			TokenId(1),719			1720		));721		assert!(722			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).is_none()723		);724	});725}726727#[test]728fn nft_approve_and_transfer_from_allow_list() {729	new_test_ext().execute_with(|| {730		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));731732		let origin1 = RuntimeOrigin::signed(1);733		let origin2 = RuntimeOrigin::signed(2);734735		// Create NFT 1 for account 1736		let data = default_nft_data();737		create_test_item(collection_id, &data.clone().into());738		assert_eq!(739			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),740			1741		);742		assert_eq!(743			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),744			true745		);746747		// Allow allow-list users to mint and add accounts 1, 2, and 3 to allow-list748		assert_ok!(Unique::set_collection_permissions(749			origin1.clone(),750			CollectionId(1),751			CollectionPermissions {752				mint_mode: Some(true),753				access: Some(AccessMode::AllowList),754				nesting: None,755			}756		));757		assert_ok!(Unique::add_to_allow_list(758			origin1.clone(),759			CollectionId(1),760			account(1)761		));762		assert_ok!(Unique::add_to_allow_list(763			origin1.clone(),764			CollectionId(1),765			account(2)766		));767		assert_ok!(Unique::add_to_allow_list(768			origin1.clone(),769			CollectionId(1),770			account(3)771		));772773		// Account 1 approves account 2 for NFT 1774		assert_ok!(Unique::approve(775			origin1.clone(),776			account(2),777			CollectionId(1),778			TokenId(1),779			1780		));781		assert_eq!(782			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),783			account(2)784		);785786		// Account 2 transfers NFT 1 from account 1 to account 3787		assert_ok!(Unique::transfer_from(788			origin2,789			account(1),790			account(3),791			CollectionId(1),792			TokenId(1),793			1794		));795		assert!(796			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).is_none()797		);798	});799}800801#[test]802fn refungible_approve_and_transfer_from() {803	new_test_ext().execute_with(|| {804		let collection_id = create_test_collection(&CollectionMode::ReFungible, CollectionId(1));805806		let origin1 = RuntimeOrigin::signed(1);807		let origin2 = RuntimeOrigin::signed(2);808809		// Create RFT 1 in 1023 pieces for account 1810		let data = default_re_fungible_data();811		create_test_item(collection_id, &data.into());812813		assert_eq!(814			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),815			1816		);817		assert_eq!(818			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),819			1023820		);821		assert_eq!(822			<pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),823			true824		);825826		// Allow public minting, enable allow-list and add accounts 1, 2, 3 to allow-list827		assert_ok!(Unique::set_collection_permissions(828			origin1.clone(),829			CollectionId(1),830			CollectionPermissions {831				mint_mode: Some(true),832				access: Some(AccessMode::AllowList),833				nesting: None,834			}835		));836		assert_ok!(Unique::add_to_allow_list(837			origin1.clone(),838			CollectionId(1),839			account(1)840		));841		assert_ok!(Unique::add_to_allow_list(842			origin1.clone(),843			CollectionId(1),844			account(2)845		));846		assert_ok!(Unique::add_to_allow_list(847			origin1.clone(),848			CollectionId(1),849			account(3)850		));851852		// Account 1 approves account 2 for 1023 pieces of RFT 1853		assert_ok!(Unique::approve(854			origin1,855			account(2),856			CollectionId(1),857			TokenId(1),858			1023859		));860		assert_eq!(861			<pallet_refungible::Allowance<Test>>::get((862				CollectionId(1),863				TokenId(1),864				account(1),865				account(2)866			)),867			1023868		);869870		// Account 2 transfers 100 pieces of RFT 1 from account 1 to account 3871		assert_ok!(Unique::transfer_from(872			origin2,873			account(1),874			account(3),875			CollectionId(1),876			TokenId(1),877			100878		));879		assert_eq!(880			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),881			1882		);883		assert_eq!(884			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(3))),885			1886		);887		assert_eq!(888			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),889			923890		);891		assert_eq!(892			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(3))),893			100894		);895		assert_eq!(896			<pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),897			true898		);899		assert_eq!(900			<pallet_refungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),901			true902		);903		assert_eq!(904			<pallet_refungible::Allowance<Test>>::get((905				CollectionId(1),906				TokenId(1),907				account(1),908				account(2)909			)),910			923911		);912	});913}914915#[test]916fn fungible_approve_and_transfer_from() {917	new_test_ext().execute_with(|| {918		let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));919920		let data = default_fungible_data();921		create_test_item(collection_id, &data.into());922923		let origin1 = RuntimeOrigin::signed(1);924		let origin2 = RuntimeOrigin::signed(2);925926		assert_ok!(Unique::set_collection_permissions(927			origin1.clone(),928			CollectionId(1),929			CollectionPermissions {930				mint_mode: Some(true),931				access: Some(AccessMode::AllowList),932				nesting: None,933			}934		));935		assert_ok!(Unique::add_to_allow_list(936			origin1.clone(),937			CollectionId(1),938			account(1)939		));940		assert_ok!(Unique::add_to_allow_list(941			origin1.clone(),942			CollectionId(1),943			account(2)944		));945		assert_ok!(Unique::add_to_allow_list(946			origin1.clone(),947			CollectionId(1),948			account(3)949		));950951		// do approve952		assert_ok!(Unique::approve(953			origin1.clone(),954			account(2),955			CollectionId(1),956			TokenId(0),957			5958		));959		assert_eq!(960			<pallet_fungible::Allowance<Test>>::get((CollectionId(1), account(1), account(2))),961			5962		);963		assert_ok!(Unique::approve(964			origin1,965			account(3),966			CollectionId(1),967			TokenId(0),968			5969		));970		assert_eq!(971			<pallet_fungible::Allowance<Test>>::get((CollectionId(1), account(1), account(2))),972			5973		);974		assert_eq!(975			<pallet_fungible::Allowance<Test>>::get((CollectionId(1), account(1), account(3))),976			5977		);978979		assert_ok!(Unique::transfer_from(980			origin2.clone(),981			account(1),982			account(3),983			CollectionId(1),984			TokenId(0),985			4986		));987988		assert_eq!(989			<pallet_fungible::Allowance<Test>>::get((CollectionId(1), account(1), account(2))),990			1991		);992993		assert_noop!(994			Unique::transfer_from(995				origin2,996				account(1),997				account(3),998				CollectionId(1),999				TokenId(0),1000				41001			)1002			.map_err(|e| e.error),1003			CommonError::<Test>::ApprovedValueTooLow1004		);1005	});1006}10071008#[test]1009fn change_collection_owner() {1010	new_test_ext().execute_with(|| {1011		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));10121013		let origin1 = RuntimeOrigin::signed(1);1014		assert_ok!(Unique::change_collection_owner(origin1, collection_id, 2));1015		assert_eq!(1016			<pallet_common::CollectionById<Test>>::get(collection_id)1017				.unwrap()1018				.owner,1019			21020		);1021	});1022}10231024#[test]1025fn destroy_collection() {1026	new_test_ext().execute_with(|| {1027		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));10281029		let origin1 = RuntimeOrigin::signed(1);1030		assert_ok!(Unique::destroy_collection(origin1, collection_id));1031	});1032}10331034#[test]1035fn burn_nft_item() {1036	new_test_ext().execute_with(|| {1037		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));10381039		let origin1 = RuntimeOrigin::signed(1);10401041		let data = default_nft_data();1042		create_test_item(collection_id, &data.into());10431044		// check balance (collection with id = 1, user id = 1)1045		assert_eq!(1046			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),1047			11048		);10491050		// burn item1051		assert_ok!(Unique::burn_item(1052			origin1.clone(),1053			collection_id,1054			TokenId(1),1055			11056		));1057		assert_eq!(1058			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),1059			01060		);1061	});1062}10631064#[test]1065fn burn_same_nft_item_twice() {1066	new_test_ext().execute_with(|| {1067		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));10681069		let origin1 = RuntimeOrigin::signed(1);10701071		let data = default_nft_data();1072		create_test_item(collection_id, &data.into());10731074		// check balance (collection with id = 1, user id = 1)1075		assert_eq!(1076			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),1077			11078		);10791080		// burn item1081		assert_ok!(Unique::burn_item(1082			origin1.clone(),1083			collection_id,1084			TokenId(1),1085			11086		));10871088		// burn item again1089		assert_noop!(1090			Unique::burn_item(origin1, collection_id, TokenId(1), 1).map_err(|e| e.error),1091			CommonError::<Test>::TokenNotFound1092		);10931094		assert_eq!(1095			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),1096			01097		);1098	});1099}11001101#[test]1102fn burn_fungible_item() {1103	new_test_ext().execute_with(|| {1104		let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));11051106		let origin1 = RuntimeOrigin::signed(1);1107		assert_ok!(Unique::add_collection_admin(1108			origin1.clone(),1109			collection_id,1110			account(2)1111		));11121113		let data = default_fungible_data();1114		create_test_item(collection_id, &data.into());11151116		// check balance (collection with id = 1, user id = 1)1117		assert_eq!(1118			<pallet_fungible::Balance<Test>>::get((collection_id, account(1))),1119			51120		);11211122		// burn item1123		assert_ok!(Unique::burn_item(1124			origin1.clone(),1125			CollectionId(1),1126			TokenId(0),1127			51128		));1129		assert_noop!(1130			Unique::burn_item(origin1, CollectionId(1), TokenId(0), 5).map_err(|e| e.error),1131			CommonError::<Test>::TokenValueTooLow1132		);11331134		assert_eq!(1135			<pallet_fungible::Balance<Test>>::get((collection_id, account(1))),1136			01137		);1138	});1139}11401141#[test]1142fn burn_fungible_item_with_token_id() {1143	new_test_ext().execute_with(|| {1144		let collection_id = create_test_collection(&CollectionMode::Fungible(3), CollectionId(1));11451146		let origin1 = RuntimeOrigin::signed(1);1147		assert_ok!(Unique::add_collection_admin(1148			origin1.clone(),1149			collection_id,1150			account(2)1151		));11521153		let data = default_fungible_data();1154		create_test_item(collection_id, &data.into());11551156		// check balance (collection with id = 1, user id = 1)1157		assert_eq!(1158			<pallet_fungible::Balance<Test>>::get((collection_id, account(1))),1159			51160		);11611162		// Try to burn item using Token ID1163		assert_noop!(1164			Unique::burn_item(origin1, CollectionId(1), TokenId(1), 5).map_err(|e| e.error),1165			<pallet_fungible::Error::<Test>>::FungibleItemsHaveNoId1166		);1167	});1168}1169#[test]1170fn burn_refungible_item() {1171	new_test_ext().execute_with(|| {1172		let collection_id = create_test_collection(&CollectionMode::ReFungible, CollectionId(1));1173		let origin1 = RuntimeOrigin::signed(1);11741175		assert_ok!(Unique::set_collection_permissions(1176			origin1.clone(),1177			collection_id,1178			CollectionPermissions {1179				mint_mode: Some(true),1180				access: Some(AccessMode::AllowList),1181				nesting: None,1182			}1183		));1184		assert_ok!(Unique::add_to_allow_list(1185			origin1.clone(),1186			collection_id,1187			account(1)1188		));11891190		assert_ok!(Unique::add_collection_admin(1191			origin1.clone(),1192			collection_id,1193			account(2)1194		));11951196		let data = default_re_fungible_data();1197		create_test_item(collection_id, &data.into());11981199		// check balance (collection with id = 1, user id = 2)1200		assert_eq!(1201			<pallet_refungible::AccountBalance<Test>>::get((collection_id, account(1))),1202			11203		);1204		assert_eq!(1205			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),1206			10231207		);12081209		// burn item1210		assert_ok!(Unique::burn_item(1211			origin1.clone(),1212			collection_id,1213			TokenId(1),1214			10231215		));1216		assert_noop!(1217			Unique::burn_item(origin1, collection_id, TokenId(1), 1023).map_err(|e| e.error),1218			CommonError::<Test>::TokenValueTooLow1219		);12201221		assert_eq!(1222			<pallet_refungible::Balance<Test>>::get((collection_id, TokenId(1), account(1))),1223			01224		);1225	});1226}12271228#[test]1229fn add_collection_admin() {1230	new_test_ext().execute_with(|| {1231		let collection1_id =1232			create_test_collection_for_owner(&CollectionMode::NFT, 1, CollectionId(1));1233		let origin1 = RuntimeOrigin::signed(1);12341235		// Add collection admins1236		assert_ok!(Unique::add_collection_admin(1237			origin1.clone(),1238			collection1_id,1239			account(2)1240		));1241		assert_ok!(Unique::add_collection_admin(1242			origin1,1243			collection1_id,1244			account(3)1245		));12461247		// Owner is not an admin by default1248		assert_eq!(1249			<pallet_common::IsAdmin<Test>>::get((CollectionId(1), account(1))),1250			false1251		);1252		assert!(<pallet_common::IsAdmin<Test>>::get((1253			CollectionId(1),1254			account(2)1255		)));1256		assert!(<pallet_common::IsAdmin<Test>>::get((1257			CollectionId(1),1258			account(3)1259		)));1260	});1261}12621263#[test]1264fn remove_collection_admin() {1265	new_test_ext().execute_with(|| {1266		let collection1_id =1267			create_test_collection_for_owner(&CollectionMode::NFT, 1, CollectionId(1));1268		let origin1 = RuntimeOrigin::signed(1);12691270		// Add collection admins 2 and 31271		assert_ok!(Unique::add_collection_admin(1272			origin1.clone(),1273			collection1_id,1274			account(2)1275		));1276		assert_ok!(Unique::add_collection_admin(1277			origin1.clone(),1278			collection1_id,1279			account(3)1280		));12811282		assert!(<pallet_common::IsAdmin<Test>>::get((1283			CollectionId(1),1284			account(2)1285		)));1286		assert!(<pallet_common::IsAdmin<Test>>::get((1287			CollectionId(1),1288			account(3)1289		)));12901291		// remove admin 31292		assert_ok!(Unique::remove_collection_admin(1293			origin1,1294			CollectionId(1),1295			account(3)1296		));12971298		// 2 is still admin, 3 is not an admin anymore1299		assert!(<pallet_common::IsAdmin<Test>>::get((1300			CollectionId(1),1301			account(2)1302		)));1303		assert_eq!(1304			<pallet_common::IsAdmin<Test>>::get((CollectionId(1), account(3))),1305			false1306		);1307	});1308}13091310#[test]1311fn balance_of() {1312	new_test_ext().execute_with(|| {1313		let nft_collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1314		let fungible_collection_id =1315			create_test_collection(&CollectionMode::Fungible(3), CollectionId(2));1316		let re_fungible_collection_id =1317			create_test_collection(&CollectionMode::ReFungible, CollectionId(3));13181319		// check balance before1320		assert_eq!(1321			<pallet_nonfungible::AccountBalance<Test>>::get((nft_collection_id, account(1))),1322			01323		);1324		assert_eq!(1325			<pallet_fungible::Balance<Test>>::get((fungible_collection_id, account(1))),1326			01327		);1328		assert_eq!(1329			<pallet_refungible::AccountBalance<Test>>::get((re_fungible_collection_id, account(1))),1330			01331		);13321333		let nft_data = default_nft_data();1334		create_test_item(nft_collection_id, &nft_data.into());13351336		let fungible_data = default_fungible_data();1337		create_test_item(fungible_collection_id, &fungible_data.into());13381339		let re_fungible_data = default_re_fungible_data();1340		create_test_item(re_fungible_collection_id, &re_fungible_data.into());13411342		// check balance (collection with id = 1, user id = 1)1343		assert_eq!(1344			<pallet_nonfungible::AccountBalance<Test>>::get((nft_collection_id, account(1))),1345			11346		);1347		assert_eq!(1348			<pallet_fungible::Balance<Test>>::get((fungible_collection_id, account(1))),1349			51350		);1351		assert_eq!(1352			<pallet_refungible::AccountBalance<Test>>::get((re_fungible_collection_id, account(1))),1353			11354		);13551356		assert_eq!(1357			<pallet_nonfungible::Owned<Test>>::get((nft_collection_id, account(1), TokenId(1))),1358			true1359		);1360		assert_eq!(1361			<pallet_refungible::Owned<Test>>::get((1362				re_fungible_collection_id,1363				account(1),1364				TokenId(1)1365			)),1366			true1367		);1368	});1369}13701371#[test]1372fn approve() {1373	new_test_ext().execute_with(|| {1374		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));13751376		let data = default_nft_data();1377		create_test_item(collection_id, &data.into());13781379		let origin1 = RuntimeOrigin::signed(1);13801381		// approve1382		assert_ok!(Unique::approve(1383			origin1,1384			account(2),1385			CollectionId(1),1386			TokenId(1),1387			11388		));1389		assert_eq!(1390			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),1391			account(2)1392		);1393	});1394}13951396#[test]1397fn transfer_from() {1398	new_test_ext().execute_with(|| {1399		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1400		let origin1 = RuntimeOrigin::signed(1);1401		let origin2 = RuntimeOrigin::signed(2);14021403		let data = default_nft_data();1404		create_test_item(collection_id, &data.into());14051406		// approve1407		assert_ok!(Unique::approve(1408			origin1.clone(),1409			account(2),1410			CollectionId(1),1411			TokenId(1),1412			11413		));1414		assert_eq!(1415			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),1416			account(2)1417		);14181419		assert_ok!(Unique::set_collection_permissions(1420			origin1.clone(),1421			CollectionId(1),1422			CollectionPermissions {1423				mint_mode: Some(true),1424				access: Some(AccessMode::AllowList),1425				nesting: None,1426			}1427		));1428		assert_ok!(Unique::add_to_allow_list(1429			origin1.clone(),1430			CollectionId(1),1431			account(1)1432		));1433		assert_ok!(Unique::add_to_allow_list(1434			origin1.clone(),1435			CollectionId(1),1436			account(2)1437		));1438		assert_ok!(Unique::add_to_allow_list(1439			origin1,1440			CollectionId(1),1441			account(3)1442		));14431444		assert_ok!(Unique::transfer_from(1445			origin2,1446			account(1),1447			account(2),1448			CollectionId(1),1449			TokenId(1),1450			11451		));14521453		// after transfer1454		assert_eq!(1455			<pallet_nonfungible::AccountBalance<Test>>::get((CollectionId(1), account(1))),1456			01457		);1458		assert_eq!(1459			<pallet_nonfungible::AccountBalance<Test>>::get((CollectionId(1), account(2))),1460			11461		);1462	});1463}14641465// #endregion14661467// Coverage tests region1468// #region14691470#[test]1471fn owner_can_add_address_to_allow_list() {1472	new_test_ext().execute_with(|| {1473		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));14741475		let origin1 = RuntimeOrigin::signed(1);1476		assert_ok!(Unique::add_to_allow_list(1477			origin1,1478			collection_id,1479			account(2)1480		));1481		assert!(<pallet_common::Allowlist<Test>>::get((1482			collection_id,1483			account(2)1484		)));1485	});1486}14871488#[test]1489fn admin_can_add_address_to_allow_list() {1490	new_test_ext().execute_with(|| {1491		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1492		let origin1 = RuntimeOrigin::signed(1);1493		let origin2 = RuntimeOrigin::signed(2);14941495		assert_ok!(Unique::add_collection_admin(1496			origin1,1497			collection_id,1498			account(2)1499		));1500		assert_ok!(Unique::add_to_allow_list(1501			origin2,1502			collection_id,1503			account(3)1504		));1505		assert!(<pallet_common::Allowlist<Test>>::get((1506			collection_id,1507			account(3)1508		)));1509	});1510}15111512#[test]1513fn nonprivileged_user_cannot_add_address_to_allow_list() {1514	new_test_ext().execute_with(|| {1515		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));15161517		let origin2 = RuntimeOrigin::signed(2);1518		assert_noop!(1519			Unique::add_to_allow_list(origin2, collection_id, account(3)),1520			CommonError::<Test>::NoPermission1521		);1522	});1523}15241525#[test]1526fn nobody_can_add_address_to_allow_list_of_nonexisting_collection() {1527	new_test_ext().execute_with(|| {1528		let origin1 = RuntimeOrigin::signed(1);15291530		assert_noop!(1531			Unique::add_to_allow_list(origin1, CollectionId(1), account(2)),1532			CommonError::<Test>::CollectionNotFound1533		);1534	});1535}15361537#[test]1538fn nobody_can_add_address_to_allow_list_of_deleted_collection() {1539	new_test_ext().execute_with(|| {1540		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));15411542		let origin1 = RuntimeOrigin::signed(1);1543		assert_ok!(Unique::destroy_collection(origin1.clone(), collection_id));1544		assert_noop!(1545			Unique::add_to_allow_list(origin1, collection_id, account(2)),1546			CommonError::<Test>::CollectionNotFound1547		);1548	});1549}15501551// If address is already added to allow list, nothing happens1552#[test]1553fn address_is_already_added_to_allow_list() {1554	new_test_ext().execute_with(|| {1555		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1556		let origin1 = RuntimeOrigin::signed(1);15571558		assert_ok!(Unique::add_to_allow_list(1559			origin1.clone(),1560			collection_id,1561			account(2)1562		));1563		assert_ok!(Unique::add_to_allow_list(1564			origin1,1565			collection_id,1566			account(2)1567		));1568		assert!(<pallet_common::Allowlist<Test>>::get((1569			collection_id,1570			account(2)1571		)));1572	});1573}15741575#[test]1576fn owner_can_remove_address_from_allow_list() {1577	new_test_ext().execute_with(|| {1578		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));15791580		let origin1 = RuntimeOrigin::signed(1);1581		assert_ok!(Unique::add_to_allow_list(1582			origin1.clone(),1583			collection_id,1584			account(2)1585		));1586		assert_ok!(Unique::remove_from_allow_list(1587			origin1,1588			collection_id,1589			account(2)1590		));1591		assert_eq!(1592			<pallet_common::Allowlist<Test>>::get((collection_id, account(2))),1593			false1594		);1595	});1596}15971598#[test]1599fn admin_can_remove_address_from_allow_list() {1600	new_test_ext().execute_with(|| {1601		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1602		let origin1 = RuntimeOrigin::signed(1);1603		let origin2 = RuntimeOrigin::signed(2);16041605		// Owner adds admin1606		assert_ok!(Unique::add_collection_admin(1607			origin1.clone(),1608			collection_id,1609			account(2)1610		));16111612		// Owner adds address 3 to allow list1613		assert_ok!(Unique::add_to_allow_list(1614			origin1,1615			collection_id,1616			account(3)1617		));16181619		// Admin removes address 3 from allow list1620		assert_ok!(Unique::remove_from_allow_list(1621			origin2,1622			collection_id,1623			account(3)1624		));1625		assert_eq!(1626			<pallet_common::Allowlist<Test>>::get((collection_id, account(3))),1627			false1628		);1629	});1630}16311632#[test]1633fn nonprivileged_user_cannot_remove_address_from_allow_list() {1634	new_test_ext().execute_with(|| {1635		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1636		let origin1 = RuntimeOrigin::signed(1);1637		let origin2 = RuntimeOrigin::signed(2);16381639		assert_ok!(Unique::add_to_allow_list(1640			origin1,1641			collection_id,1642			account(2)1643		));1644		assert_noop!(1645			Unique::remove_from_allow_list(origin2, collection_id, account(2)),1646			CommonError::<Test>::NoPermission1647		);1648		assert!(<pallet_common::Allowlist<Test>>::get((1649			collection_id,1650			account(2)1651		)));1652	});1653}16541655#[test]1656fn nobody_can_remove_address_from_allow_list_of_nonexisting_collection() {1657	new_test_ext().execute_with(|| {1658		let origin1 = RuntimeOrigin::signed(1);16591660		assert_noop!(1661			Unique::remove_from_allow_list(origin1, CollectionId(1), account(2)),1662			CommonError::<Test>::CollectionNotFound1663		);1664	});1665}16661667#[test]1668fn nobody_can_remove_address_from_allow_list_of_deleted_collection() {1669	new_test_ext().execute_with(|| {1670		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1671		let origin1 = RuntimeOrigin::signed(1);1672		let origin2 = RuntimeOrigin::signed(2);16731674		// Add account 2 to allow list1675		assert_ok!(Unique::add_to_allow_list(1676			origin1.clone(),1677			collection_id,1678			account(2)1679		));16801681		// Account 2 is in collection allow-list1682		assert!(<pallet_common::Allowlist<Test>>::get((1683			collection_id,1684			account(2)1685		)));16861687		// Destroy collection1688		assert_ok!(Unique::destroy_collection(origin1, collection_id));16891690		// Attempt to remove account 2 from collection allow-list => error1691		assert_noop!(1692			Unique::remove_from_allow_list(origin2, collection_id, account(2)),1693			CommonError::<Test>::CollectionNotFound1694		);16951696		// Account 2 is not found in collection allow-list anyway1697		assert_eq!(1698			<pallet_common::Allowlist<Test>>::get((collection_id, account(2))),1699			false1700		);1701	});1702}17031704// If address is already removed from allow list, nothing happens1705#[test]1706fn address_is_already_removed_from_allow_list() {1707	new_test_ext().execute_with(|| {1708		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1709		let origin1 = RuntimeOrigin::signed(1);17101711		assert_ok!(Unique::add_to_allow_list(1712			origin1.clone(),1713			collection_id,1714			account(2)1715		));1716		assert_ok!(Unique::remove_from_allow_list(1717			origin1.clone(),1718			collection_id,1719			account(2)1720		));1721		assert_eq!(1722			<pallet_common::Allowlist<Test>>::get((collection_id, account(2))),1723			false1724		);1725		assert_ok!(Unique::remove_from_allow_list(1726			origin1,1727			collection_id,1728			account(2)1729		));1730		assert_eq!(1731			<pallet_common::Allowlist<Test>>::get((collection_id, account(2))),1732			false1733		);1734	});1735}17361737// If Public Access mode is set to AllowList, tokens can’t be transferred from a non-allowlisted address with transfer or transferFrom (2 tests)1738#[test]1739fn allow_list_test_1() {1740	new_test_ext().execute_with(|| {1741		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));17421743		let origin1 = RuntimeOrigin::signed(1);17441745		let data = default_nft_data();1746		create_test_item(collection_id, &data.into());17471748		assert_ok!(Unique::set_collection_permissions(1749			origin1.clone(),1750			collection_id,1751			CollectionPermissions {1752				mint_mode: None,1753				access: Some(AccessMode::AllowList),1754				nesting: None,1755			}1756		));1757		assert_ok!(Unique::add_to_allow_list(1758			origin1.clone(),1759			collection_id,1760			account(2)1761		));17621763		assert_noop!(1764			Unique::transfer(origin1, account(3), CollectionId(1), TokenId(1), 1)1765				.map_err(|e| e.error),1766			CommonError::<Test>::AddressNotInAllowlist1767		);1768	});1769}17701771#[test]1772fn allow_list_test_2() {1773	new_test_ext().execute_with(|| {1774		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));1775		let origin1 = RuntimeOrigin::signed(1);17761777		let data = default_nft_data();1778		create_test_item(collection_id, &data.into());17791780		assert_ok!(Unique::set_collection_permissions(1781			origin1.clone(),1782			collection_id,1783			CollectionPermissions {1784				mint_mode: None,1785				access: Some(AccessMode::AllowList),1786				nesting: None,1787			}1788		));1789		assert_ok!(Unique::add_to_allow_list(1790			origin1.clone(),1791			collection_id,1792			account(1)1793		));1794		assert_ok!(Unique::add_to_allow_list(1795			origin1.clone(),1796			collection_id,1797			account(2)1798		));17991800		// do approve1801		assert_ok!(Unique::approve(1802			origin1.clone(),1803			account(1),1804			collection_id,1805			TokenId(1),1806			11807		));1808		assert_eq!(1809			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),1810			account(1)1811		);18121813		assert_ok!(Unique::remove_from_allow_list(1814			origin1.clone(),1815			collection_id,1816			account(1)1817		));18181819		assert_noop!(1820			Unique::transfer_from(1821				origin1,1822				account(1),1823				account(3),1824				CollectionId(1),1825				TokenId(1),1826				11827			)1828			.map_err(|e| e.error),1829			CommonError::<Test>::AddressNotInAllowlist1830		);1831	});1832}18331834// If Public Access mode is set to AllowList, tokens can’t be transferred to a non-allowlisted address with transfer or transferFrom (2 tests)1835#[test]1836fn allow_list_test_3() {1837	new_test_ext().execute_with(|| {1838		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));18391840		let origin1 = RuntimeOrigin::signed(1);18411842		let data = default_nft_data();1843		create_test_item(collection_id, &data.into());18441845		assert_ok!(Unique::set_collection_permissions(1846			origin1.clone(),1847			collection_id,1848			CollectionPermissions {1849				mint_mode: None,1850				access: Some(AccessMode::AllowList),1851				nesting: None,1852			}1853		));1854		assert_ok!(Unique::add_to_allow_list(1855			origin1.clone(),1856			collection_id,1857			account(1)1858		));18591860		assert_noop!(1861			Unique::transfer(origin1, account(3), collection_id, TokenId(1), 1)1862				.map_err(|e| e.error),1863			CommonError::<Test>::AddressNotInAllowlist1864		);1865	});1866}18671868#[test]1869fn allow_list_test_4() {1870	new_test_ext().execute_with(|| {1871		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));18721873		let origin1 = RuntimeOrigin::signed(1);18741875		let data = default_nft_data();1876		create_test_item(collection_id, &data.into());18771878		assert_ok!(Unique::set_collection_permissions(1879			origin1.clone(),1880			collection_id,1881			CollectionPermissions {1882				mint_mode: None,1883				access: Some(AccessMode::AllowList),1884				nesting: None,1885			}1886		));1887		assert_ok!(Unique::add_to_allow_list(1888			origin1.clone(),1889			collection_id,1890			account(1)1891		));1892		assert_ok!(Unique::add_to_allow_list(1893			origin1.clone(),1894			collection_id,1895			account(2)1896		));18971898		// do approve1899		assert_ok!(Unique::approve(1900			origin1.clone(),1901			account(1),1902			collection_id,1903			TokenId(1),1904			11905		));1906		assert_eq!(1907			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),1908			account(1)1909		);19101911		assert_ok!(Unique::remove_from_allow_list(1912			origin1.clone(),1913			collection_id,1914			account(2)1915		));19161917		assert_noop!(1918			Unique::transfer_from(1919				origin1,1920				account(1),1921				account(3),1922				collection_id,1923				TokenId(1),1924				11925			)1926			.map_err(|e| e.error),1927			CommonError::<Test>::AddressNotInAllowlist1928		);1929	});1930}19311932// If Public Access mode is set to AllowList, tokens can’t be destroyed by a non-allowlisted address (even if it owned them before enabling AllowList mode)1933#[test]1934fn allow_list_test_5() {1935	new_test_ext().execute_with(|| {1936		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));19371938		let origin1 = RuntimeOrigin::signed(1);19391940		let data = default_nft_data();1941		create_test_item(collection_id, &data.into());19421943		assert_ok!(Unique::set_collection_permissions(1944			origin1.clone(),1945			collection_id,1946			CollectionPermissions {1947				mint_mode: None,1948				access: Some(AccessMode::AllowList),1949				nesting: None,1950			}1951		));1952		assert_noop!(1953			Unique::burn_item(origin1.clone(), CollectionId(1), TokenId(1), 1).map_err(|e| e.error),1954			CommonError::<Test>::AddressNotInAllowlist1955		);1956	});1957}19581959// If Public Access mode is set to AllowList, token transfers can’t be Approved by a non-allowlisted address (see Approve method).1960#[test]1961fn allow_list_test_6() {1962	new_test_ext().execute_with(|| {1963		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));19641965		let origin1 = RuntimeOrigin::signed(1);19661967		let data = default_nft_data();1968		create_test_item(collection_id, &data.into());19691970		assert_ok!(Unique::set_collection_permissions(1971			origin1.clone(),1972			collection_id,1973			CollectionPermissions {1974				mint_mode: None,1975				access: Some(AccessMode::AllowList),1976				nesting: None,1977			}1978		));19791980		// do approve1981		assert_noop!(1982			Unique::approve(origin1, account(1), CollectionId(1), TokenId(1), 1)1983				.map_err(|e| e.error),1984			CommonError::<Test>::AddressNotInAllowlist1985		);1986	});1987}19881989// If Public Access mode is set to AllowList, tokens can be transferred from a allowlisted address with transfer or transferFrom (2 tests) and1990//          tokens can be transferred from a allowlisted address with transfer or transferFrom (2 tests)1991#[test]1992fn allow_list_test_7() {1993	new_test_ext().execute_with(|| {1994		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));19951996		let data = default_nft_data();1997		create_test_item(collection_id, &data.into());19981999		let origin1 = RuntimeOrigin::signed(1);20002001		assert_ok!(Unique::set_collection_permissions(2002			origin1.clone(),2003			collection_id,2004			CollectionPermissions {2005				mint_mode: None,2006				access: Some(AccessMode::AllowList),2007				nesting: None,2008			}2009		));2010		assert_ok!(Unique::add_to_allow_list(2011			origin1.clone(),2012			collection_id,2013			account(1)2014		));2015		assert_ok!(Unique::add_to_allow_list(2016			origin1.clone(),2017			collection_id,2018			account(2)2019		));20202021		assert_ok!(Unique::transfer(2022			origin1,2023			account(2),2024			CollectionId(1),2025			TokenId(1),2026			12027		));2028	});2029}20302031#[test]2032fn allow_list_test_8() {2033	new_test_ext().execute_with(|| {2034		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));20352036		// Create NFT for account 12037		let data = default_nft_data();2038		create_test_item(collection_id, &data.into());20392040		let origin1 = RuntimeOrigin::signed(1);20412042		// Toggle Allow List mode and add accounts 1 and 22043		assert_ok!(Unique::set_collection_permissions(2044			origin1.clone(),2045			collection_id,2046			CollectionPermissions {2047				mint_mode: None,2048				access: Some(AccessMode::AllowList),2049				nesting: None,2050			}2051		));2052		assert_ok!(Unique::add_to_allow_list(2053			origin1.clone(),2054			collection_id,2055			account(1)2056		));2057		assert_ok!(Unique::add_to_allow_list(2058			origin1.clone(),2059			collection_id,2060			account(2)2061		));20622063		// Sself-approve account 1 for NFT 12064		assert_ok!(Unique::approve(2065			origin1.clone(),2066			account(1),2067			CollectionId(1),2068			TokenId(1),2069			12070		));2071		assert_eq!(2072			<pallet_nonfungible::Allowance<Test>>::get((CollectionId(1), TokenId(1))).unwrap(),2073			account(1)2074		);20752076		// Transfer from 1 to 22077		assert_ok!(Unique::transfer_from(2078			origin1,2079			account(1),2080			account(2),2081			CollectionId(1),2082			TokenId(1),2083			12084		));2085	});2086}20872088// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by owner.2089#[test]2090fn allow_list_test_9() {2091	new_test_ext().execute_with(|| {2092		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));2093		let origin1 = RuntimeOrigin::signed(1);20942095		assert_ok!(Unique::set_collection_permissions(2096			origin1.clone(),2097			collection_id,2098			CollectionPermissions {2099				mint_mode: Some(false),2100				access: Some(AccessMode::AllowList),2101				nesting: None,2102			}2103		));21042105		let data = default_nft_data();2106		create_test_item(collection_id, &data.into());2107	});2108}21092110// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens can be created by admin.2111#[test]2112fn allow_list_test_10() {2113	new_test_ext().execute_with(|| {2114		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));21152116		let origin1 = RuntimeOrigin::signed(1);2117		let origin2 = RuntimeOrigin::signed(2);21182119		assert_ok!(Unique::set_collection_permissions(2120			origin1.clone(),2121			collection_id,2122			CollectionPermissions {2123				mint_mode: Some(false),2124				access: Some(AccessMode::AllowList),2125				nesting: None,2126			}2127		));21282129		assert_ok!(Unique::add_collection_admin(2130			origin1,2131			collection_id,2132			account(2)2133		));21342135		assert_ok!(Unique::create_item(2136			origin2,2137			collection_id,2138			account(2),2139			default_nft_data().into()2140		));2141	});2142}21432144// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and allow listed address.2145#[test]2146fn allow_list_test_11() {2147	new_test_ext().execute_with(|| {2148		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));21492150		let origin1 = RuntimeOrigin::signed(1);2151		let origin2 = RuntimeOrigin::signed(2);21522153		assert_ok!(Unique::set_collection_permissions(2154			origin1.clone(),2155			collection_id,2156			CollectionPermissions {2157				mint_mode: Some(false),2158				access: Some(AccessMode::AllowList),2159				nesting: None,2160			}2161		));2162		assert_ok!(Unique::add_to_allow_list(2163			origin1,2164			collection_id,2165			account(2)2166		));21672168		assert_noop!(2169			Unique::create_item(2170				origin2,2171				CollectionId(1),2172				account(2),2173				default_nft_data().into()2174			)2175			.map_err(|e| e.error),2176			CommonError::<Test>::PublicMintingNotAllowed2177		);2178	});2179}21802181// If Public Access mode is set to AllowList, and Mint Permission is set to false, tokens cannot be created by non-privileged and non-allow listed address.2182#[test]2183fn allow_list_test_12() {2184	new_test_ext().execute_with(|| {2185		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));21862187		let origin1 = RuntimeOrigin::signed(1);2188		let origin2 = RuntimeOrigin::signed(2);21892190		assert_ok!(Unique::set_collection_permissions(2191			origin1.clone(),2192			collection_id,2193			CollectionPermissions {2194				mint_mode: Some(false),2195				access: Some(AccessMode::AllowList),2196				nesting: None,2197			}2198		));21992200		assert_noop!(2201			Unique::create_item(2202				origin2,2203				CollectionId(1),2204				account(2),2205				default_nft_data().into()2206			)2207			.map_err(|e| e.error),2208			CommonError::<Test>::PublicMintingNotAllowed2209		);2210	});2211}22122213// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by owner.2214#[test]2215fn allow_list_test_13() {2216	new_test_ext().execute_with(|| {2217		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));22182219		let origin1 = RuntimeOrigin::signed(1);22202221		assert_ok!(Unique::set_collection_permissions(2222			origin1.clone(),2223			collection_id,2224			CollectionPermissions {2225				mint_mode: Some(true),2226				access: Some(AccessMode::AllowList),2227				nesting: None,2228			}2229		));22302231		let data = default_nft_data();2232		create_test_item(collection_id, &data.into());2233	});2234}22352236// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by admin.2237#[test]2238fn allow_list_test_14() {2239	new_test_ext().execute_with(|| {2240		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));22412242		let origin1 = RuntimeOrigin::signed(1);2243		let origin2 = RuntimeOrigin::signed(2);22442245		assert_ok!(Unique::set_collection_permissions(2246			origin1.clone(),2247			collection_id,2248			CollectionPermissions {2249				mint_mode: Some(true),2250				access: Some(AccessMode::AllowList),2251				nesting: None,2252			}2253		));22542255		assert_ok!(Unique::add_collection_admin(2256			origin1,2257			collection_id,2258			account(2)2259		));22602261		assert_ok!(Unique::create_item(2262			origin2,2263			collection_id,2264			account(2),2265			default_nft_data().into()2266		));2267	});2268}22692270// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens cannot be created by non-privileged and non-allow listed address.2271#[test]2272fn allow_list_test_15() {2273	new_test_ext().execute_with(|| {2274		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));22752276		let origin1 = RuntimeOrigin::signed(1);2277		let origin2 = RuntimeOrigin::signed(2);22782279		assert_ok!(Unique::set_collection_permissions(2280			origin1.clone(),2281			collection_id,2282			CollectionPermissions {2283				mint_mode: Some(true),2284				access: Some(AccessMode::AllowList),2285				nesting: None,2286			}2287		));22882289		assert_noop!(2290			Unique::create_item(2291				origin2,2292				collection_id,2293				account(2),2294				default_nft_data().into()2295			)2296			.map_err(|e| e.error),2297			CommonError::<Test>::AddressNotInAllowlist2298		);2299	});2300}23012302// If Public Access mode is set to AllowList, and Mint Permission is set to true, tokens can be created by non-privileged and allow listed address.2303#[test]2304fn allow_list_test_16() {2305	new_test_ext().execute_with(|| {2306		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));23072308		let origin1 = RuntimeOrigin::signed(1);2309		let origin2 = RuntimeOrigin::signed(2);23102311		assert_ok!(Unique::set_collection_permissions(2312			origin1.clone(),2313			collection_id,2314			CollectionPermissions {2315				mint_mode: Some(true),2316				access: Some(AccessMode::AllowList),2317				nesting: None,2318			}2319		));2320		assert_ok!(Unique::add_to_allow_list(2321			origin1,2322			collection_id,2323			account(2)2324		));23252326		assert_ok!(Unique::create_item(2327			origin2,2328			collection_id,2329			account(2),2330			default_nft_data().into()2331		));2332	});2333}23342335// Total number of collections. Positive test2336#[test]2337fn total_number_collections_bound() {2338	new_test_ext().execute_with(|| {2339		create_test_collection(&CollectionMode::NFT, CollectionId(1));2340	});2341}23422343#[test]2344fn create_max_collections() {2345	new_test_ext().execute_with(|| {2346		for i in 1..COLLECTION_NUMBER_LIMIT {2347			create_test_collection(&CollectionMode::NFT, CollectionId(i));2348		}2349	});2350}23512352// Total number of collections. Negative test2353#[test]2354fn total_number_collections_bound_neg() {2355	new_test_ext().execute_with(|| {2356		let origin1 = RuntimeOrigin::signed(1);23572358		for i in 1..=COLLECTION_NUMBER_LIMIT {2359			create_test_collection(&CollectionMode::NFT, CollectionId(i));2360		}23612362		let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();2363		let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();2364		let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();23652366		let data: CreateCollectionData<u64> = CreateCollectionData {2367			name: col_name1.try_into().unwrap(),2368			description: col_desc1.try_into().unwrap(),2369			token_prefix: token_prefix1.try_into().unwrap(),2370			mode: CollectionMode::NFT,2371			..Default::default()2372		};23732374		// 11-th collection in chain. Expects error2375		assert_noop!(2376			Unique::create_collection_ex(origin1, data),2377			CommonError::<Test>::TotalCollectionsLimitExceeded2378		);2379	});2380}23812382// Owned tokens by a single address. Positive test2383#[test]2384fn owned_tokens_bound() {2385	new_test_ext().execute_with(|| {2386		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));23872388		let data = default_nft_data();2389		create_test_item(collection_id, &data.clone().into());2390		create_test_item(collection_id, &data.into());2391	});2392}23932394// Owned tokens by a single address. Negotive test2395#[test]2396fn owned_tokens_bound_neg() {2397	new_test_ext().execute_with(|| {2398		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));23992400		let origin1 = RuntimeOrigin::signed(1);24012402		for _ in 1..=MAX_TOKEN_OWNERSHIP {2403			let data = default_nft_data();2404			create_test_item(collection_id, &data.clone().into());2405		}24062407		let data = default_nft_data();2408		assert_noop!(2409			Unique::create_item(origin1, CollectionId(1), account(1), data.into())2410				.map_err(|e| e.error),2411			CommonError::<Test>::AccountTokenLimitExceeded2412		);2413	});2414}24152416// Number of collection admins. Positive test2417#[test]2418fn collection_admins_bound() {2419	new_test_ext().execute_with(|| {2420		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));24212422		let origin1 = RuntimeOrigin::signed(1);24232424		assert_ok!(Unique::add_collection_admin(2425			origin1.clone(),2426			collection_id,2427			account(2)2428		));2429		assert_ok!(Unique::add_collection_admin(2430			origin1,2431			collection_id,2432			account(3)2433		));2434	});2435}24362437// Number of collection admins. Negotive test2438#[test]2439fn collection_admins_bound_neg() {2440	new_test_ext().execute_with(|| {2441		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));24422443		let origin1 = RuntimeOrigin::signed(1);24442445		for i in 0..COLLECTION_ADMINS_LIMIT {2446			assert_ok!(Unique::add_collection_admin(2447				origin1.clone(),2448				collection_id,2449				account((2 + i).into())2450			));2451		}2452		assert_noop!(2453			Unique::add_collection_admin(2454				origin1,2455				collection_id,2456				account((3 + COLLECTION_ADMINS_LIMIT).into())2457			),2458			CommonError::<Test>::CollectionAdminCountExceeded2459		);2460	});2461}2462// #endregion24632464#[test]2465fn collection_transfer_flag_works() {2466	new_test_ext().execute_with(|| {2467		let origin1 = RuntimeOrigin::signed(1);24682469		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));2470		assert_ok!(Unique::set_transfers_enabled_flag(2471			origin1,2472			collection_id,2473			true2474		));24752476		let data = default_nft_data();2477		create_test_item(collection_id, &data.into());2478		assert_eq!(2479			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),2480			12481		);2482		assert_eq!(2483			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),2484			true2485		);24862487		let origin1 = RuntimeOrigin::signed(1);24882489		// default scenario2490		assert_ok!(Unique::transfer(2491			origin1,2492			account(2),2493			collection_id,2494			TokenId(1),2495			12496		));2497		assert_eq!(2498			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),2499			false2500		);2501		assert_eq!(2502			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),2503			true2504		);2505		assert_eq!(2506			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),2507			02508		);2509		assert_eq!(2510			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(2))),2511			12512		);2513	});2514}25152516#[test]2517fn collection_transfer_flag_works_neg() {2518	new_test_ext().execute_with(|| {2519		let origin1 = RuntimeOrigin::signed(1);25202521		let collection_id = create_test_collection(&CollectionMode::NFT, CollectionId(1));2522		assert_ok!(Unique::set_transfers_enabled_flag(2523			origin1,2524			collection_id,2525			false2526		));25272528		let data = default_nft_data();2529		create_test_item(collection_id, &data.into());2530		assert_eq!(2531			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),2532			12533		);2534		assert_eq!(2535			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),2536			true2537		);25382539		let origin1 = RuntimeOrigin::signed(1);25402541		// default scenario2542		assert_noop!(2543			Unique::transfer(origin1, account(2), CollectionId(1), TokenId(1), 1)2544				.map_err(|e| e.error),2545			CommonError::<Test>::TransferNotAllowed2546		);2547		assert_eq!(2548			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(1))),2549			12550		);2551		assert_eq!(2552			<pallet_nonfungible::AccountBalance<Test>>::get((collection_id, account(2))),2553			02554		);2555		assert_eq!(2556			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(1), TokenId(1))),2557			true2558		);2559		assert_eq!(2560			<pallet_nonfungible::Owned<Test>>::get((collection_id, account(2), TokenId(1))),2561			false2562		);2563	});2564}25652566#[test]2567fn collection_sponsoring() {2568	new_test_ext().execute_with(|| {2569		// default_limits();2570		let user1 = 1_u64;2571		let user2 = 777_u64;2572		let origin1 = RuntimeOrigin::signed(user1);2573		let origin2 = RuntimeOrigin::signed(user2);2574		let account2 = account(user2);25752576		let collection_id =2577			create_test_collection_for_owner(&CollectionMode::NFT, user1, CollectionId(1));2578		assert_ok!(Unique::set_collection_sponsor(2579			origin1.clone(),2580			collection_id,2581			user12582		));2583		assert_ok!(Unique::confirm_sponsorship(origin1.clone(), collection_id));25842585		// Expect error while have no permissions2586		assert!(Unique::create_item(2587			origin2.clone(),2588			collection_id,2589			account2.clone(),2590			default_nft_data().into()2591		)2592		.is_err());25932594		assert_ok!(Unique::set_collection_permissions(2595			origin1.clone(),2596			collection_id,2597			CollectionPermissions {2598				mint_mode: Some(true),2599				access: Some(AccessMode::AllowList),2600				nesting: None,2601			}2602		));2603		assert_ok!(Unique::add_to_allow_list(2604			origin1.clone(),2605			collection_id,2606			account2.clone()2607		));26082609		assert_ok!(Unique::create_item(2610			origin2,2611			collection_id,2612			account2,2613			default_nft_data().into()2614		));2615	});2616}
modifiedruntime/unique/Cargo.tomldiffbeforeafterboth
--- a/runtime/unique/Cargo.toml
+++ b/runtime/unique/Cargo.toml
@@ -10,7 +10,7 @@
 license = 'GPLv3'
 name = 'unique-runtime'
 repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = '0.9.29'
+version = '0.9.30'
 
 [package.metadata.docs.rs]
 targets = ['x86_64-unknown-linux-gnu']
@@ -112,7 +112,6 @@
     'pallet-transaction-payment/std',
     'pallet-transaction-payment-rpc-runtime-api/std',
     'pallet-treasury/std',
-    # 'pallet-vesting/std',
     'pallet-evm/std',
     'pallet-evm-migration/std',
     'pallet-evm-contract-helpers/std',
@@ -164,7 +163,7 @@
     "orml-tokens/std",
     "orml-xtokens/std",
     "orml-traits/std",
-    "pallet-foreign-assets/std"
+    "pallet-foreign-assets/std",
 ]
 limit-testing = ['pallet-unique/limit-testing', 'up-data-structs/limit-testing']
 unique-runtime = []
@@ -187,39 +186,39 @@
 default-features = false
 git = "https://github.com/paritytech/substrate"
 optional = true
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-try-runtime]
 default-features = false
 git = "https://github.com/paritytech/substrate"
 optional = true
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-executive]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-support]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-system]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-system-benchmarking]
 default-features = false
 git = "https://github.com/paritytech/substrate"
 optional = true
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.frame-system-rpc-runtime-api]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.hex-literal]
 optional = true
@@ -234,12 +233,12 @@
 [dependencies.pallet-aura]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-balances]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 # Contracts specific packages
 # [dependencies.pallet-contracts]
@@ -263,102 +262,97 @@
 [dependencies.pallet-randomness-collective-flip]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-sudo]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-timestamp]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-transaction-payment]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-transaction-payment-rpc-runtime-api]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.pallet-treasury]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
-
-# [dependencies.pallet-vesting]
-# default-features = false
-# git = 'https://github.com/paritytech/substrate'
-# branch = 'master'
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-arithmetic]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-api]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-block-builder]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-core]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-consensus-aura]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-inherents]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-io]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-offchain]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-runtime]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-session]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-std]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-transaction-pool]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.sp-version]
 default-features = false
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.smallvec]
 version = '1.6.1'
@@ -369,46 +363,46 @@
 [dependencies.parachain-info]
 default-features = false
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 
 [dependencies.cumulus-pallet-aura-ext]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-pallet-parachain-system]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-primitives-core]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-pallet-xcm]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-pallet-dmp-queue]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-pallet-xcmp-queue]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-primitives-utility]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 [dependencies.cumulus-primitives-timestamp]
 git = "https://github.com/paritytech/cumulus"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"
 default-features = false
 
 ################################################################################
@@ -416,56 +410,38 @@
 
 [dependencies.polkadot-parachain]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
+branch = "release-v0.9.30"
 default-features = false
 
 [dependencies.xcm]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
+branch = "release-v0.9.30"
 default-features = false
 
 [dependencies.xcm-builder]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
+branch = "release-v0.9.30"
 default-features = false
 
 [dependencies.xcm-executor]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
+branch = "release-v0.9.30"
 default-features = false
 
 [dependencies.pallet-xcm]
 git = "https://github.com/paritytech/polkadot"
-branch = "release-v0.9.29"
-default-features = false
-
-[dependencies.orml-vesting]
-git = "https://github.com/UniqueNetwork/open-runtime-module-library"
-branch = "polkadot-v0.9.29"
-version = "0.4.1-dev"
-default-features = false
-
-[dependencies.orml-xtokens]
-git = "https://github.com/UniqueNetwork/open-runtime-module-library"
-branch = "polkadot-v0.9.29"
-version = "0.4.1-dev"
-default-features = false
-
-[dependencies.orml-tokens]
-git = "https://github.com/UniqueNetwork/open-runtime-module-library"
-branch = "polkadot-v0.9.29"
-version = "0.4.1-dev"
+branch = "release-v0.9.30"
 default-features = false
 
-[dependencies.orml-traits]
-git = "https://github.com/UniqueNetwork/open-runtime-module-library"
-branch = "polkadot-v0.9.29"
-version = "0.4.1-dev"
-default-features = false
 ################################################################################
 # local dependencies
 
 [dependencies]
+orml-vesting.workspace = true
+orml-xtokens.workspace = true
+orml-tokens.workspace = true
+orml-traits.workspace = true
+
 log = { version = "0.4.16", default-features = false }
 up-common = { path = "../../primitives/common", default-features = false }
 scale-info = { version = "2.0.1", default-features = false, features = [
@@ -474,7 +450,7 @@
 derivative = "2.2.0"
 pallet-unique = { path = '../../pallets/unique', default-features = false }
 up-rpc = { path = "../../primitives/rpc", default-features = false }
-app-promotion-rpc = { path = "../../primitives/app_promotion_rpc", default-features = false}
+app-promotion-rpc = { path = "../../primitives/app_promotion_rpc", default-features = false }
 rmrk-rpc = { path = "../../primitives/rmrk-rpc", default-features = false }
 pallet-inflation = { path = '../../pallets/inflation', default-features = false }
 pallet-app-promotion = { path = '../../pallets/app-promotion', default-features = false }
@@ -489,19 +465,19 @@
 pallet-proxy-rmrk-equip = { default-features = false, path = "../../pallets/proxy-rmrk-equip", package = "pallet-rmrk-equip" }
 pallet-unique-scheduler = { path = '../../pallets/scheduler', default-features = false }
 # pallet-contract-helpers = { path = '../pallets/contract-helpers', default-features = false, version = '0.1.0' }
-pallet-charge-transaction = { git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.29", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
+pallet-charge-transaction = { git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.30", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
 pallet-evm-migration = { path = '../../pallets/evm-migration', default-features = false }
 pallet-evm-contract-helpers = { path = '../../pallets/evm-contract-helpers', default-features = false }
 pallet-evm-transaction-payment = { path = '../../pallets/evm-transaction-payment', default-features = false }
 pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.29" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
+fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.30" }
 evm-coder = { default-features = false, path = '../../crates/evm-coder' }
-up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = 'polkadot-v0.9.29' }
+up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = 'polkadot-v0.9.30' }
 pallet-foreign-assets = { default-features = false, path = "../../pallets/foreign-assets" }
 
 ################################################################################
@@ -520,4 +496,4 @@
 
 [build-dependencies.substrate-wasm-builder]
 git = "https://github.com/paritytech/substrate"
-branch = "polkadot-v0.9.29"
+branch = "polkadot-v0.9.30"