git.delta.rocks / unique-network / refs/commits / 63cdcd63f549

difftreelog

merge develop

Igor Kozyrev2022-06-21parents: #0911475 #3a0da55.patch.diff
in: master

91 files changed

modified.envdiffbeforeafterboth
--- a/.env
+++ b/.env
@@ -1,6 +1,6 @@
 RUST_TOOLCHAIN=nightly-2022-05-11
 RUST_C=1.62.0-nightly
-POLKA_VERSION=release-v0.9.22
+POLKA_VERSION=release-v0.9.23
 UNIQUE_BRANCH=develop
 USER=***
 PASS=***
modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -68,7 +68,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
 dependencies = [
- "getrandom 0.2.6",
+ "getrandom 0.2.7",
  "once_cell",
  "version_check",
 ]
@@ -99,9 +99,9 @@
 
 [[package]]
 name = "anyhow"
-version = "1.0.57"
+version = "1.0.58"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc"
+checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704"
 
 [[package]]
 name = "approx"
@@ -188,9 +188,9 @@
 
 [[package]]
 name = "async-global-executor"
-version = "2.1.0"
+version = "2.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd8b508d585e01084059b60f06ade4cb7415cd2e4084b71dd1cb44e7d3fb9880"
+checksum = "5262ed948da60dd8956c6c5aca4d4163593dddb7b32d73267c93dab7b2e98940"
 dependencies = [
  "async-channel",
  "async-executor",
@@ -198,6 +198,7 @@
  "async-lock",
  "blocking",
  "futures-lite",
+ "num_cpus",
  "once_cell",
 ]
 
@@ -248,9 +249,9 @@
 
 [[package]]
 name = "async-std"
-version = "1.11.0"
+version = "1.12.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52580991739c5cdb36cde8b2a516371c0a3b70dda36d916cc08b82372916808c"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
 dependencies = [
  "async-attributes",
  "async-channel",
@@ -267,7 +268,6 @@
  "kv-log-macro",
  "log",
  "memchr",
- "num_cpus",
  "once_cell",
  "pin-project-lite 0.2.9",
  "pin-utils",
@@ -371,7 +371,7 @@
 checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1"
 dependencies = [
  "futures-core",
- "getrandom 0.2.6",
+ "getrandom 0.2.7",
  "instant",
  "pin-project-lite 0.2.9",
  "rand 0.8.5",
@@ -429,7 +429,7 @@
 [[package]]
 name = "beefy-gadget"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "beefy-primitives",
  "fnv",
@@ -437,7 +437,7 @@
  "futures-timer",
  "hex",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "sc-chain-spec",
  "sc-client-api",
@@ -463,14 +463,14 @@
 [[package]]
 name = "beefy-gadget-rpc"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "beefy-gadget",
  "beefy-primitives",
  "futures 0.3.21",
  "jsonrpsee",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "sc-rpc",
  "sc-utils",
@@ -483,14 +483,14 @@
 [[package]]
 name = "beefy-merkle-tree"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 
 [[package]]
 name = "beefy-primitives"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-api",
  "sp-application-crypto",
@@ -695,7 +695,7 @@
  "bp-runtime",
  "finality-grandpa",
  "frame-support",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-core",
@@ -711,7 +711,7 @@
 dependencies = [
  "bp-runtime",
  "frame-support",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-std",
 ]
@@ -726,7 +726,7 @@
  "frame-support",
  "frame-system",
  "impl-trait-for-tuples",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-core",
@@ -742,7 +742,7 @@
  "bp-runtime",
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-api",
  "sp-core",
@@ -760,7 +760,7 @@
  "bp-polkadot-core",
  "bp-runtime",
  "frame-support",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "smallvec",
  "sp-api",
  "sp-runtime",
@@ -776,7 +776,7 @@
  "frame-support",
  "hash-db",
  "num-traits",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-io",
@@ -794,7 +794,7 @@
  "bp-header-chain",
  "ed25519-dalek",
  "finality-grandpa",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-application-crypto",
  "sp-finality-grandpa",
  "sp-runtime",
@@ -810,7 +810,7 @@
  "bp-polkadot-core",
  "bp-rococo",
  "bp-runtime",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-api",
  "sp-runtime",
  "sp-std",
@@ -831,7 +831,7 @@
  "pallet-bridge-grandpa",
  "pallet-bridge-messages",
  "pallet-transaction-payment",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-api",
  "sp-core",
@@ -1067,16 +1067,16 @@
 
 [[package]]
 name = "clap"
-version = "3.1.18"
+version = "3.2.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2dbdf4bdacb33466e854ce889eee8dfd5729abf7ccd7664d0a2d60cd384440b"
+checksum = "d53da17d37dba964b9b3ecb5c5a1f193a2762c700e6829201e645b9381c99dc7"
 dependencies = [
  "atty",
  "bitflags",
  "clap_derive",
  "clap_lex",
  "indexmap",
- "lazy_static",
+ "once_cell",
  "strsim",
  "termcolor",
  "textwrap",
@@ -1084,9 +1084,9 @@
 
 [[package]]
 name = "clap_derive"
-version = "3.1.18"
+version = "3.2.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25320346e922cffe59c0bbc5410c8d8784509efb321488971081313cb1e1a33c"
+checksum = "c11d40217d16aee8508cc8e5fde8b4ff24639758608e5374e731b53f85749fb9"
 dependencies = [
  "heck 0.4.0",
  "proc-macro-error",
@@ -1097,9 +1097,9 @@
 
 [[package]]
 name = "clap_lex"
-version = "0.2.0"
+version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a37c35f1112dad5e6e0b1adaff798507497a18fceeb30cceb3bae7d1427b9213"
+checksum = "5538cd660450ebeb4234cfecf8f2284b844ffc4c50531e66d584ad5b91293613"
 dependencies = [
  "os_str_bytes",
 ]
@@ -1297,9 +1297,9 @@
 
 [[package]]
 name = "crossbeam-channel"
-version = "0.5.4"
+version = "0.5.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53"
+checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c"
 dependencies = [
  "cfg-if 1.0.0",
  "crossbeam-utils",
@@ -1318,15 +1318,15 @@
 
 [[package]]
 name = "crossbeam-epoch"
-version = "0.9.8"
+version = "0.9.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c"
+checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d"
 dependencies = [
  "autocfg",
  "cfg-if 1.0.0",
  "crossbeam-utils",
- "lazy_static",
  "memoffset",
+ "once_cell",
  "scopeguard",
 ]
 
@@ -1342,12 +1342,12 @@
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.8.8"
+version = "0.8.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38"
+checksum = "8ff1f980957787286a554052d03c7aee98d99cc32e09f6d45f0a814133c87978"
 dependencies = [
  "cfg-if 1.0.0",
- "lazy_static",
+ "once_cell",
 ]
 
 [[package]]
@@ -1431,7 +1431,7 @@
 [[package]]
 name = "cumulus-client-cli"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "clap",
  "sc-cli",
@@ -1442,14 +1442,14 @@
 [[package]]
 name = "cumulus-client-collator"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "cumulus-client-consensus-common",
  "cumulus-client-network",
  "cumulus-primitives-core",
  "cumulus-relay-chain-interface",
  "futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -1466,13 +1466,13 @@
 [[package]]
 name = "cumulus-client-consensus-aura"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "async-trait",
  "cumulus-client-consensus-common",
  "cumulus-primitives-core",
  "futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sc-client-api",
  "sc-consensus",
  "sc-consensus-aura",
@@ -1495,13 +1495,13 @@
 [[package]]
 name = "cumulus-client-consensus-common"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "async-trait",
  "cumulus-relay-chain-interface",
  "dyn-clone",
  "futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-primitives",
  "sc-client-api",
  "sc-consensus",
@@ -1516,14 +1516,14 @@
 [[package]]
 name = "cumulus-client-network"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "async-trait",
  "cumulus-relay-chain-interface",
  "derive_more",
  "futures 0.3.21",
  "futures-timer",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "polkadot-node-primitives",
  "polkadot-parachain",
@@ -1541,13 +1541,13 @@
 [[package]]
 name = "cumulus-client-pov-recovery"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "cumulus-primitives-core",
  "cumulus-relay-chain-interface",
  "futures 0.3.21",
  "futures-timer",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
  "polkadot-overseer",
@@ -1565,7 +1565,7 @@
 [[package]]
 name = "cumulus-client-service"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "cumulus-client-cli",
  "cumulus-client-collator",
@@ -1573,7 +1573,7 @@
  "cumulus-client-pov-recovery",
  "cumulus-primitives-core",
  "cumulus-relay-chain-interface",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "polkadot-overseer",
  "polkadot-primitives",
@@ -1595,13 +1595,13 @@
 [[package]]
 name = "cumulus-pallet-aura-ext"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "frame-executive",
  "frame-support",
  "frame-system",
  "pallet-aura",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-application-crypto",
@@ -1613,13 +1613,13 @@
 [[package]]
 name = "cumulus-pallet-dmp-queue"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "cumulus-primitives-core",
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-io",
  "sp-runtime",
@@ -1631,7 +1631,7 @@
 [[package]]
 name = "cumulus-pallet-parachain-system"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "cumulus-pallet-parachain-system-proc-macro",
  "cumulus-primitives-core",
@@ -1642,7 +1642,7 @@
  "impl-trait-for-tuples",
  "log",
  "pallet-balances",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-parachain",
  "scale-info",
  "serde",
@@ -1661,7 +1661,7 @@
 [[package]]
 name = "cumulus-pallet-parachain-system-proc-macro"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
@@ -1672,12 +1672,12 @@
 [[package]]
 name = "cumulus-pallet-xcm"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "cumulus-primitives-core",
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-io",
@@ -1689,13 +1689,13 @@
 [[package]]
 name = "cumulus-pallet-xcmp-queue"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "cumulus-primitives-core",
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "rand_chacha 0.3.1",
  "scale-info",
  "sp-runtime",
@@ -1707,10 +1707,10 @@
 [[package]]
 name = "cumulus-primitives-core"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "frame-support",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-core-primitives",
  "polkadot-parachain",
  "polkadot-primitives",
@@ -1723,13 +1723,13 @@
 [[package]]
 name = "cumulus-primitives-parachain-inherent"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "async-trait",
  "cumulus-primitives-core",
  "cumulus-relay-chain-interface",
  "cumulus-test-relay-sproof-builder",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sc-client-api",
  "scale-info",
  "sp-api",
@@ -1746,11 +1746,11 @@
 [[package]]
 name = "cumulus-primitives-timestamp"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "cumulus-primitives-core",
  "futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-inherents",
  "sp-std",
  "sp-timestamp",
@@ -1759,11 +1759,11 @@
 [[package]]
 name = "cumulus-primitives-utility"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "cumulus-primitives-core",
  "frame-support",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-core-primitives",
  "polkadot-parachain",
  "polkadot-primitives",
@@ -1776,7 +1776,7 @@
 [[package]]
 name = "cumulus-relay-chain-inprocess-interface"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "async-trait",
  "cumulus-primitives-core",
@@ -1807,14 +1807,14 @@
 [[package]]
 name = "cumulus-relay-chain-interface"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "async-trait",
  "cumulus-primitives-core",
  "derive_more",
  "futures 0.3.21",
  "jsonrpsee-core",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "polkadot-overseer",
  "polkadot-service",
@@ -1831,7 +1831,7 @@
 [[package]]
 name = "cumulus-relay-chain-rpc-interface"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "async-trait",
  "backoff",
@@ -1840,7 +1840,7 @@
  "futures 0.3.21",
  "futures-timer",
  "jsonrpsee",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "polkadot-service",
  "sc-client-api",
@@ -1857,10 +1857,10 @@
 [[package]]
 name = "cumulus-test-relay-sproof-builder"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "cumulus-primitives-core",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-primitives",
  "sp-runtime",
  "sp-state-machine",
@@ -2115,9 +2115,9 @@
 
 [[package]]
 name = "dyn-clone"
-version = "1.0.5"
+version = "1.0.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21e50f3adc76d6a43f5ed73b698a87d0760ca74617f60f7c3b879003536fdd28"
+checksum = "140206b78fb2bc3edbcfc9b5ccbd0b30699cfe8d348b8b31b330e47df5291a5a"
 
 [[package]]
 name = "ecdsa"
@@ -2286,7 +2286,7 @@
  "ethereum-types",
  "hash-db",
  "hash256-std-hasher",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "rlp",
  "rlp-derive",
  "scale-info",
@@ -2329,7 +2329,7 @@
  "evm-gasometer",
  "evm-runtime",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "primitive-types",
  "rlp",
  "scale-info",
@@ -2368,7 +2368,7 @@
 version = "0.35.0"
 source = "git+https://github.com/uniquenetwork/evm?branch=unique-polkadot-v0.9.23#e9252ed42dc26fc85b6703b1ba50660a08209e55"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "primitive-types",
  "scale-info",
  "serde",
@@ -2504,7 +2504,7 @@
  "fp-storage",
  "kvdb-rocksdb",
  "parity-db",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "sc-client-db",
  "sp-core",
@@ -2546,8 +2546,8 @@
  "jsonrpsee",
  "libsecp256k1",
  "log",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
  "prometheus",
  "rand 0.8.5",
  "rlp",
@@ -2623,7 +2623,7 @@
  "futures-timer",
  "log",
  "num-traits",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.11.2",
  "scale-info",
 ]
@@ -2682,9 +2682,9 @@
 [[package]]
 name = "fork-tree"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
 ]
 
 [[package]]
@@ -2703,7 +2703,7 @@
 source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.23#29adc958b0541466d564c781aa70fb7e3ef263a2"
 dependencies = [
  "ethereum",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-core",
  "sp-runtime",
  "sp-std",
@@ -2717,7 +2717,7 @@
  "evm",
  "frame-support",
  "impl-trait-for-tuples",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "serde",
  "sp-core",
  "sp-std",
@@ -2740,7 +2740,7 @@
  "ethereum",
  "ethereum-types",
  "fp-evm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-api",
  "sp-core",
@@ -2756,7 +2756,7 @@
 dependencies = [
  "ethereum",
  "frame-support",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parity-util-mem",
  "scale-info",
  "serde",
@@ -2770,19 +2770,19 @@
 version = "2.0.0"
 source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.23#29adc958b0541466d564c781aa70fb7e3ef263a2"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
 ]
 
 [[package]]
 name = "frame-benchmarking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-support",
  "frame-system",
  "linregress",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "paste",
  "scale-info",
  "serde",
@@ -2798,7 +2798,7 @@
 [[package]]
 name = "frame-benchmarking-cli"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "Inflector",
  "chrono",
@@ -2816,7 +2816,7 @@
  "linked-hash-map",
  "log",
  "memory-db",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "rand 0.8.5",
  "rand_pcg 0.3.1",
  "sc-block-builder",
@@ -2848,7 +2848,7 @@
 [[package]]
 name = "frame-election-provider-solution-type"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
@@ -2859,12 +2859,12 @@
 [[package]]
 name = "frame-election-provider-support"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-election-provider-solution-type",
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-arithmetic",
  "sp-npos-elections",
@@ -2875,11 +2875,11 @@
 [[package]]
 name = "frame-executive"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-io",
@@ -2895,7 +2895,7 @@
 checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d"
 dependencies = [
  "cfg-if 1.0.0",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
 ]
@@ -2903,7 +2903,7 @@
 [[package]]
 name = "frame-support"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "bitflags",
  "frame-metadata",
@@ -2912,7 +2912,7 @@
  "k256",
  "log",
  "once_cell",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "paste",
  "scale-info",
  "serde",
@@ -2933,7 +2933,7 @@
 [[package]]
 name = "frame-support-procedural"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "Inflector",
  "frame-support-procedural-tools",
@@ -2945,7 +2945,7 @@
 [[package]]
 name = "frame-support-procedural-tools"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-support-procedural-tools-derive",
  "proc-macro-crate",
@@ -2957,7 +2957,7 @@
 [[package]]
 name = "frame-support-procedural-tools-derive"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2967,11 +2967,11 @@
 [[package]]
 name = "frame-system"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-support",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-core",
@@ -2984,12 +2984,12 @@
 [[package]]
 name = "frame-system-benchmarking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-runtime",
@@ -2999,16 +2999,16 @@
 [[package]]
 name = "frame-system-rpc-runtime-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-api",
 ]
 
 [[package]]
 name = "frame-try-runtime"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-support",
  "sp-api",
@@ -3225,13 +3225,13 @@
 
 [[package]]
 name = "getrandom"
-version = "0.2.6"
+version = "0.2.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"
+checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
 dependencies = [
  "cfg-if 1.0.0",
  "libc",
- "wasi 0.10.0+wasi-snapshot-preview1",
+ "wasi 0.11.0+wasi-snapshot-preview1",
 ]
 
 [[package]]
@@ -3263,9 +3263,9 @@
 
 [[package]]
 name = "globset"
-version = "0.4.8"
+version = "0.4.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd"
+checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a"
 dependencies = [
  "aho-corasick",
  "bstr",
@@ -3555,9 +3555,9 @@
 
 [[package]]
 name = "if-watch"
-version = "1.0.0"
+version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae8f4a3c3d4c89351ca83e120c1c00b27df945d38e05695668c9d4b4f7bc52f3"
+checksum = "774d59367a3d26965d21ac70a86fcb697d83405d1c4312d1d8a6855296af0cf7"
 dependencies = [
  "async-io",
  "core-foundation",
@@ -3577,7 +3577,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
 ]
 
 [[package]]
@@ -3611,12 +3611,12 @@
 
 [[package]]
 name = "indexmap"
-version = "1.8.2"
+version = "1.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6012d540c5baa3589337a98ce73408de9b5a25ec9fc2c6fd6be8f0d39e0ca5a"
+checksum = "6c6392766afd7964e2531940894cffe4bd8d7d17dbc3c1c4857040fd4b33bdb3"
 dependencies = [
  "autocfg",
- "hashbrown 0.11.2",
+ "hashbrown 0.12.1",
  "serde",
 ]
 
@@ -3706,9 +3706,9 @@
 
 [[package]]
 name = "js-sys"
-version = "0.3.57"
+version = "0.3.58"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397"
+checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27"
 dependencies = [
  "wasm-bindgen",
 ]
@@ -3927,7 +3927,7 @@
  "pallet-vesting",
  "pallet-xcm",
  "pallet-xcm-benchmarks",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-primitives",
  "polkadot-runtime-common",
  "polkadot-runtime-parachains",
@@ -4074,7 +4074,7 @@
  "bytes 1.1.0",
  "futures 0.3.21",
  "futures-timer",
- "getrandom 0.2.6",
+ "getrandom 0.2.7",
  "instant",
  "lazy_static",
  "libp2p-autonat",
@@ -4245,7 +4245,7 @@
  "libp2p-core",
  "libp2p-swarm",
  "log",
- "lru 0.7.6",
+ "lru 0.7.7",
  "prost 0.9.0",
  "prost-build",
  "smallvec",
@@ -4710,9 +4710,9 @@
 
 [[package]]
 name = "lru"
-version = "0.7.6"
+version = "0.7.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8015d95cb7b2ddd3c0d32ca38283ceb1eea09b4713ee380bceb942d85a244228"
+checksum = "c84e6fe5655adc6ce00787cf7dcaf8dc4f998a0565d23eafc207a8b08ca3349a"
 dependencies = [
  "hashbrown 0.11.2",
 ]
@@ -4899,9 +4899,9 @@
 
 [[package]]
 name = "mio"
-version = "0.8.3"
+version = "0.8.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799"
+checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf"
 dependencies = [
  "libc",
  "log",
@@ -5152,9 +5152,9 @@
 
 [[package]]
 name = "num-complex"
-version = "0.4.1"
+version = "0.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97fbc387afefefd5e9e39493299f3069e14a140dd34dc19b4c1c1a8fddb6a790"
+checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19"
 dependencies = [
  "num-traits",
 ]
@@ -5250,7 +5250,7 @@
 
 [[package]]
 name = "opal-runtime"
-version = "0.9.22"
+version = "0.9.23"
 dependencies = [
  "cumulus-pallet-aura-ext",
  "cumulus-pallet-dmp-queue",
@@ -5299,10 +5299,10 @@
  "pallet-transaction-payment-rpc-runtime-api",
  "pallet-treasury",
  "pallet-unique",
- "pallet-unq-scheduler",
+ "pallet-unique-scheduler",
  "pallet-xcm",
  "parachain-info",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-parachain",
  "rmrk-rpc",
  "scale-info",
@@ -5393,7 +5393,7 @@
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-io",
@@ -5419,12 +5419,12 @@
 [[package]]
 name = "pallet-aura"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-support",
  "frame-system",
  "pallet-timestamp",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-application-crypto",
  "sp-consensus-aura",
@@ -5435,12 +5435,12 @@
 [[package]]
 name = "pallet-authority-discovery"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-support",
  "frame-system",
  "pallet-session",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-application-crypto",
  "sp-authority-discovery",
@@ -5451,12 +5451,12 @@
 [[package]]
 name = "pallet-authorship"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-support",
  "frame-system",
  "impl-trait-for-tuples",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-authorship",
  "sp-runtime",
@@ -5466,7 +5466,7 @@
 [[package]]
 name = "pallet-babe"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5475,7 +5475,7 @@
  "pallet-authorship",
  "pallet-session",
  "pallet-timestamp",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-application-crypto",
  "sp-consensus-babe",
@@ -5490,7 +5490,7 @@
 [[package]]
 name = "pallet-bags-list"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -5498,7 +5498,7 @@
  "frame-system",
  "log",
  "pallet-balances",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-io",
@@ -5510,13 +5510,13 @@
 [[package]]
 name = "pallet-balances"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-runtime",
  "sp-std",
@@ -5530,7 +5530,7 @@
  "fp-evm",
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-core",
@@ -5540,13 +5540,13 @@
 [[package]]
 name = "pallet-beefy"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "beefy-primitives",
  "frame-support",
  "frame-system",
  "pallet-session",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-runtime",
@@ -5556,7 +5556,7 @@
 [[package]]
 name = "pallet-beefy-mmr"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "beefy-merkle-tree",
  "beefy-primitives",
@@ -5567,7 +5567,7 @@
  "pallet-beefy",
  "pallet-mmr",
  "pallet-session",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-core",
@@ -5579,14 +5579,14 @@
 [[package]]
 name = "pallet-bounties"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
  "log",
  "pallet-treasury",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-io",
@@ -5604,7 +5604,7 @@
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-runtime",
@@ -5624,7 +5624,7 @@
  "frame-system",
  "log",
  "num-traits",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-finality-grandpa",
@@ -5646,7 +5646,7 @@
  "frame-system",
  "log",
  "num-traits",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-core",
@@ -5657,7 +5657,7 @@
 [[package]]
 name = "pallet-child-bounties"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5665,7 +5665,7 @@
  "log",
  "pallet-bounties",
  "pallet-treasury",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-io",
@@ -5676,13 +5676,13 @@
 [[package]]
 name = "pallet-collective"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-io",
@@ -5702,7 +5702,7 @@
  "frame-system",
  "pallet-evm",
  "pallet-evm-coder-substrate",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-core",
@@ -5714,12 +5714,12 @@
 [[package]]
 name = "pallet-democracy"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-io",
@@ -5730,14 +5730,14 @@
 [[package]]
 name = "pallet-election-provider-multi-phase"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "rand 0.7.3",
  "scale-info",
  "sp-arithmetic",
@@ -5753,12 +5753,12 @@
 [[package]]
 name = "pallet-election-provider-support-benchmarking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-npos-elections",
  "sp-runtime",
 ]
@@ -5766,13 +5766,13 @@
 [[package]]
 name = "pallet-elections-phragmen"
 version = "5.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-io",
@@ -5800,7 +5800,7 @@
  "log",
  "pallet-evm",
  "pallet-timestamp",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "rlp",
  "scale-info",
  "serde",
@@ -5825,7 +5825,7 @@
  "impl-trait-for-tuples",
  "log",
  "pallet-timestamp",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "primitive-types",
  "rlp",
  "scale-info",
@@ -5848,7 +5848,7 @@
  "frame-system",
  "pallet-ethereum",
  "pallet-evm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-std",
@@ -5867,7 +5867,7 @@
  "pallet-common",
  "pallet-evm",
  "pallet-evm-coder-substrate",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-runtime",
@@ -5885,7 +5885,7 @@
  "frame-support",
  "frame-system",
  "pallet-evm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-io",
@@ -5903,7 +5903,7 @@
  "frame-system",
  "pallet-ethereum",
  "pallet-evm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-io",
@@ -5925,7 +5925,7 @@
  "pallet-evm",
  "pallet-evm-coder-substrate",
  "pallet-structure",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-runtime",
@@ -5936,12 +5936,12 @@
 [[package]]
 name = "pallet-gilt"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-arithmetic",
  "sp-runtime",
@@ -5951,7 +5951,7 @@
 [[package]]
 name = "pallet-grandpa"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5959,7 +5959,7 @@
  "log",
  "pallet-authorship",
  "pallet-session",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-application-crypto",
  "sp-core",
@@ -5974,13 +5974,13 @@
 [[package]]
 name = "pallet-identity"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "enumflags2",
  "frame-benchmarking",
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-io",
  "sp-runtime",
@@ -5990,14 +5990,14 @@
 [[package]]
 name = "pallet-im-online"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
  "log",
  "pallet-authorship",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-application-crypto",
  "sp-core",
@@ -6010,12 +6010,12 @@
 [[package]]
 name = "pallet-indices"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-io",
@@ -6034,7 +6034,7 @@
  "pallet-balances",
  "pallet-randomness-collective-flip",
  "pallet-timestamp",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-core",
@@ -6046,13 +6046,13 @@
 [[package]]
 name = "pallet-membership"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-io",
@@ -6063,13 +6063,13 @@
 [[package]]
 name = "pallet-mmr"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "ckb-merkle-mountain-range",
  "frame-benchmarking",
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-io",
@@ -6081,10 +6081,10 @@
 [[package]]
 name = "pallet-mmr-rpc"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "jsonrpsee",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "serde",
  "sp-api",
  "sp-blockchain",
@@ -6096,12 +6096,12 @@
 [[package]]
 name = "pallet-multisig"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-io",
  "sp-runtime",
@@ -6111,11 +6111,11 @@
 [[package]]
 name = "pallet-nicks"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-io",
  "sp-runtime",
@@ -6125,12 +6125,12 @@
 [[package]]
 name = "pallet-nomination-pools"
 version = "1.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-runtime",
@@ -6141,7 +6141,7 @@
 [[package]]
 name = "pallet-nomination-pools-benchmarking"
 version = "1.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -6150,7 +6150,7 @@
  "pallet-bags-list",
  "pallet-nomination-pools",
  "pallet-staking",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-runtime",
  "sp-staking",
@@ -6170,7 +6170,7 @@
  "pallet-evm",
  "pallet-evm-coder-substrate",
  "pallet-structure",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-runtime",
@@ -6182,13 +6182,13 @@
 [[package]]
 name = "pallet-offences"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-support",
  "frame-system",
  "log",
  "pallet-balances",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-runtime",
@@ -6199,7 +6199,7 @@
 [[package]]
 name = "pallet-offences-benchmarking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -6212,7 +6212,7 @@
  "pallet-offences",
  "pallet-session",
  "pallet-staking",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-runtime",
  "sp-staking",
@@ -6222,12 +6222,12 @@
 [[package]]
 name = "pallet-preimage"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-io",
@@ -6238,12 +6238,12 @@
 [[package]]
 name = "pallet-proxy"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-io",
  "sp-runtime",
@@ -6253,11 +6253,11 @@
 [[package]]
 name = "pallet-randomness-collective-flip"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "safe-mix",
  "scale-info",
  "sp-runtime",
@@ -6267,12 +6267,12 @@
 [[package]]
 name = "pallet-recovery"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-io",
  "sp-runtime",
@@ -6289,7 +6289,7 @@
  "pallet-common",
  "pallet-evm",
  "pallet-structure",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-runtime",
@@ -6310,7 +6310,7 @@
  "pallet-evm",
  "pallet-nonfungible",
  "pallet-structure",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "rmrk-traits",
  "scale-info",
  "sp-core",
@@ -6330,7 +6330,7 @@
  "pallet-evm",
  "pallet-nonfungible",
  "pallet-rmrk-core",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "rmrk-traits",
  "scale-info",
  "sp-core",
@@ -6342,13 +6342,13 @@
 [[package]]
 name = "pallet-scheduler"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-io",
  "sp-runtime",
@@ -6358,14 +6358,14 @@
 [[package]]
 name = "pallet-session"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-support",
  "frame-system",
  "impl-trait-for-tuples",
  "log",
  "pallet-timestamp",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-io",
@@ -6379,7 +6379,7 @@
 [[package]]
 name = "pallet-session-benchmarking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6395,11 +6395,11 @@
 [[package]]
 name = "pallet-society"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "rand_chacha 0.2.2",
  "scale-info",
  "sp-runtime",
@@ -6409,7 +6409,7 @@
 [[package]]
 name = "pallet-staking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-election-provider-support",
@@ -6418,7 +6418,7 @@
  "log",
  "pallet-authorship",
  "pallet-session",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "rand_chacha 0.2.2",
  "scale-info",
  "serde",
@@ -6432,7 +6432,7 @@
 [[package]]
 name = "pallet-staking-reward-curve"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
@@ -6443,7 +6443,7 @@
 [[package]]
 name = "pallet-staking-reward-fn"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "log",
  "sp-arithmetic",
@@ -6458,7 +6458,7 @@
  "frame-system",
  "pallet-common",
  "pallet-evm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-std",
  "up-data-structs",
@@ -6467,11 +6467,11 @@
 [[package]]
 name = "pallet-sudo"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-io",
  "sp-runtime",
@@ -6488,7 +6488,7 @@
  "frame-system",
  "pallet-balances",
  "pallet-transaction-payment",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-core",
@@ -6501,13 +6501,13 @@
 [[package]]
 name = "pallet-timestamp"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-inherents",
  "sp-io",
@@ -6519,14 +6519,14 @@
 [[package]]
 name = "pallet-tips"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
  "log",
  "pallet-treasury",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-core",
@@ -6538,11 +6538,11 @@
 [[package]]
 name = "pallet-transaction-payment"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-core",
@@ -6554,11 +6554,11 @@
 [[package]]
 name = "pallet-transaction-payment-rpc"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "jsonrpsee",
  "pallet-transaction-payment-rpc-runtime-api",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-api",
  "sp-blockchain",
  "sp-core",
@@ -6569,10 +6569,10 @@
 [[package]]
 name = "pallet-transaction-payment-rpc-runtime-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "pallet-transaction-payment",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-api",
  "sp-runtime",
 ]
@@ -6580,14 +6580,14 @@
 [[package]]
 name = "pallet-treasury"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
  "impl-trait-for-tuples",
  "pallet-balances",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-runtime",
@@ -6607,7 +6607,7 @@
  "pallet-evm",
  "pallet-evm-coder-substrate",
  "pallet-nonfungible",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-core",
@@ -6618,14 +6618,14 @@
 ]
 
 [[package]]
-name = "pallet-unq-scheduler"
+name = "pallet-unique-scheduler"
 version = "0.1.0"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-core",
@@ -6639,12 +6639,12 @@
 [[package]]
 name = "pallet-utility"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-io",
@@ -6655,13 +6655,13 @@
 [[package]]
 name = "pallet-vesting"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-runtime",
  "sp-std",
@@ -6675,7 +6675,7 @@
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-core",
@@ -6694,7 +6694,7 @@
  "frame-support",
  "frame-system",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-runtime",
  "sp-std",
@@ -6705,12 +6705,12 @@
 [[package]]
 name = "parachain-info"
 version = "0.1.0"
-source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"
+source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
 dependencies = [
  "cumulus-primitives-core",
  "frame-support",
  "frame-system",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
 ]
@@ -6750,15 +6750,15 @@
 
 [[package]]
 name = "parity-scale-codec"
-version = "3.1.2"
+version = "3.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8b44461635bbb1a0300f100a841e571e7d919c81c73075ef5d152ffdb521066"
+checksum = "9182e4a71cae089267ab03e67c99368db7cd877baf50f931e5d6d4b71e195ac0"
 dependencies = [
  "arrayvec 0.7.2",
  "bitvec 1.0.0",
  "byte-slice-cast",
  "impl-trait-for-tuples",
- "parity-scale-codec-derive 3.1.2",
+ "parity-scale-codec-derive 3.1.3",
  "serde",
 ]
 
@@ -6776,9 +6776,9 @@
 
 [[package]]
 name = "parity-scale-codec-derive"
-version = "3.1.2"
+version = "3.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c45ed1f39709f5a89338fab50e59816b2e8815f5bb58276e7ddf9afd495f73f8"
+checksum = "9299338969a3d2f491d65f140b00ddec470858402f888af98e8642fb5e8965cd"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
@@ -6802,7 +6802,7 @@
  "ethereum-types",
  "hashbrown 0.12.1",
  "impl-trait-for-tuples",
- "lru 0.7.6",
+ "lru 0.7.7",
  "parity-util-mem-derive",
  "parking_lot 0.12.1",
  "primitive-types",
@@ -7086,8 +7086,8 @@
  "derive_more",
  "fatality",
  "futures 0.3.21",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
  "polkadot-erasure-coding",
  "polkadot-node-network-protocol",
  "polkadot-node-primitives",
@@ -7108,8 +7108,8 @@
 dependencies = [
  "fatality",
  "futures 0.3.21",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
  "polkadot-erasure-coding",
  "polkadot-node-network-protocol",
  "polkadot-node-primitives",
@@ -7213,7 +7213,7 @@
 version = "0.9.23"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parity-util-mem",
  "scale-info",
  "sp-core",
@@ -7229,8 +7229,8 @@
  "derive_more",
  "fatality",
  "futures 0.3.21",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
  "polkadot-erasure-coding",
  "polkadot-node-network-protocol",
  "polkadot-node-primitives",
@@ -7249,7 +7249,7 @@
 version = "0.9.23"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-node-primitives",
  "polkadot-primitives",
  "reed-solomon-novelpoly",
@@ -7287,7 +7287,7 @@
  "async-trait",
  "bytes 1.1.0",
  "futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "polkadot-node-network-protocol",
  "polkadot-node-subsystem",
@@ -7305,7 +7305,7 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
 dependencies = [
  "futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-erasure-coding",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -7327,9 +7327,9 @@
  "futures 0.3.21",
  "futures-timer",
  "kvdb",
- "lru 0.7.6",
+ "lru 0.7.7",
  "merlin",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-node-jaeger",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -7355,7 +7355,7 @@
  "futures 0.3.21",
  "futures-timer",
  "kvdb",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-erasure-coding",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -7407,7 +7407,7 @@
 dependencies = [
  "async-trait",
  "futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-node-core-pvf",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -7441,7 +7441,7 @@
  "futures 0.3.21",
  "futures-timer",
  "kvdb",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
  "polkadot-node-subsystem-util",
@@ -7458,8 +7458,8 @@
  "fatality",
  "futures 0.3.21",
  "kvdb",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
  "polkadot-node-subsystem-util",
@@ -7515,7 +7515,7 @@
  "async-std",
  "futures 0.3.21",
  "futures-timer",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "pin-project 1.0.10",
  "polkadot-core-primitives",
  "polkadot-node-subsystem-util",
@@ -7577,7 +7577,7 @@
  "lazy_static",
  "log",
  "mick-jaeger",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "polkadot-node-primitives",
  "polkadot-primitives",
@@ -7595,7 +7595,7 @@
  "futures 0.3.21",
  "futures-timer",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-primitives",
  "prioritized-metered-channel",
  "sc-cli",
@@ -7614,14 +7614,14 @@
  "derive_more",
  "fatality",
  "futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-node-jaeger",
  "polkadot-node-primitives",
  "polkadot-primitives",
  "rand 0.8.5",
  "sc-authority-discovery",
  "sc-network",
- "strum 0.24.0",
+ "strum 0.24.1",
  "thiserror",
  "tracing-gum",
 ]
@@ -7633,7 +7633,7 @@
 dependencies = [
  "bounded-vec",
  "futures 0.3.21",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-parachain",
  "polkadot-primitives",
  "schnorrkel",
@@ -7688,9 +7688,9 @@
  "futures 0.3.21",
  "itertools",
  "kvdb",
- "lru 0.7.6",
+ "lru 0.7.7",
  "parity-db",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parity-util-mem",
  "parking_lot 0.11.2",
  "pin-project 1.0.10",
@@ -7717,7 +7717,7 @@
 dependencies = [
  "futures 0.3.21",
  "futures-timer",
- "lru 0.7.6",
+ "lru 0.7.7",
  "orchestra",
  "parity-util-mem",
  "parking_lot 0.12.1",
@@ -7739,7 +7739,7 @@
 dependencies = [
  "derive_more",
  "frame-support",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parity-util-mem",
  "polkadot-core-primitives",
  "scale-info",
@@ -7772,7 +7772,7 @@
  "bitvec 1.0.0",
  "frame-system",
  "hex-literal",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parity-util-mem",
  "polkadot-core-primitives",
  "polkadot-parachain",
@@ -7879,7 +7879,7 @@
  "pallet-utility",
  "pallet-vesting",
  "pallet-xcm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-primitives",
  "polkadot-runtime-common",
  "polkadot-runtime-constants",
@@ -7938,7 +7938,7 @@
  "pallet-transaction-payment",
  "pallet-treasury",
  "pallet-vesting",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-primitives",
  "polkadot-runtime-parachains",
  "rustc-hex",
@@ -7977,7 +7977,7 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
 dependencies = [
  "bs58",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-primitives",
  "sp-std",
  "sp-tracing",
@@ -8003,7 +8003,7 @@
  "pallet-staking",
  "pallet-timestamp",
  "pallet-vesting",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-primitives",
  "polkadot-runtime-metrics",
  "rand 0.8.5",
@@ -8040,7 +8040,7 @@
  "kusama-runtime",
  "kvdb",
  "kvdb-rocksdb",
- "lru 0.7.6",
+ "lru 0.7.7",
  "pallet-babe",
  "pallet-im-online",
  "pallet-staking",
@@ -8138,7 +8138,7 @@
  "fatality",
  "futures 0.3.21",
  "indexmap",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-node-network-protocol",
  "polkadot-node-primitives",
  "polkadot-node-subsystem",
@@ -8155,7 +8155,7 @@
 version = "0.9.23"
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-primitives",
  "sp-core",
 ]
@@ -8190,7 +8190,7 @@
  "pallet-transaction-payment-rpc-runtime-api",
  "pallet-vesting",
  "pallet-xcm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-parachain",
  "polkadot-primitives",
  "polkadot-runtime-common",
@@ -8383,9 +8383,9 @@
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.39"
+version = "1.0.40"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f"
+checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
 dependencies = [
  "unicode-ident",
 ]
@@ -8514,7 +8514,7 @@
 
 [[package]]
 name = "quartz-runtime"
-version = "0.9.22"
+version = "0.9.23"
 dependencies = [
  "cumulus-pallet-aura-ext",
  "cumulus-pallet-dmp-queue",
@@ -8528,11 +8528,14 @@
  "fp-evm-mapping",
  "fp-rpc",
  "fp-self-contained",
+ "frame-benchmarking",
  "frame-executive",
  "frame-support",
  "frame-system",
+ "frame-system-benchmarking",
  "frame-system-rpc-runtime-api",
  "frame-try-runtime",
+ "hex-literal",
  "log",
  "orml-vesting",
  "pallet-aura",
@@ -8560,10 +8563,10 @@
  "pallet-transaction-payment-rpc-runtime-api",
  "pallet-treasury",
  "pallet-unique",
- "pallet-unq-scheduler",
+ "pallet-unique-scheduler",
  "pallet-xcm",
  "parachain-info",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-parachain",
  "rmrk-rpc",
  "scale-info",
@@ -8610,9 +8613,9 @@
 
 [[package]]
 name = "quote"
-version = "1.0.18"
+version = "1.0.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1"
+checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
 dependencies = [
  "proc-macro2",
 ]
@@ -8689,7 +8692,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
 dependencies = [
- "getrandom 0.2.6",
+ "getrandom 0.2.7",
 ]
 
 [[package]]
@@ -8774,7 +8777,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
 dependencies = [
- "getrandom 0.2.6",
+ "getrandom 0.2.7",
  "redox_syscall",
  "thiserror",
 ]
@@ -8864,12 +8867,12 @@
 [[package]]
 name = "remote-externalities"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "env_logger",
  "jsonrpsee",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "serde",
  "serde_json",
  "sp-core",
@@ -8967,7 +8970,7 @@
 name = "rmrk-traits"
 version = "0.1.0"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
 ]
@@ -9028,7 +9031,7 @@
  "pallet-transaction-payment-rpc-runtime-api",
  "pallet-utility",
  "pallet-xcm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-parachain",
  "polkadot-primitives",
  "polkadot-runtime-common",
@@ -9181,9 +9184,9 @@
 
 [[package]]
 name = "rustversion"
-version = "1.0.6"
+version = "1.0.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f"
+checksum = "a0a5f7c728f5d284929a1cccb5bc19884422bfe6ef4d6c409da2c41838983fcf"
 
 [[package]]
 name = "rw-stream-sink"
@@ -9232,7 +9235,7 @@
 [[package]]
 name = "sc-allocator"
 version = "4.1.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "log",
  "sp-core",
@@ -9243,7 +9246,7 @@
 [[package]]
 name = "sc-authority-discovery"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "async-trait",
  "futures 0.3.21",
@@ -9251,7 +9254,7 @@
  "ip_network",
  "libp2p",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "prost 0.10.4",
  "prost-build",
  "rand 0.7.3",
@@ -9270,12 +9273,12 @@
 [[package]]
 name = "sc-basic-authorship"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "futures 0.3.21",
  "futures-timer",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sc-block-builder",
  "sc-client-api",
  "sc-proposer-metrics",
@@ -9293,9 +9296,9 @@
 [[package]]
 name = "sc-block-builder"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sc-client-api",
  "sp-api",
  "sp-block-builder",
@@ -9309,11 +9312,11 @@
 [[package]]
 name = "sc-chain-spec"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "impl-trait-for-tuples",
  "memmap2 0.5.4",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sc-chain-spec-derive",
  "sc-network",
  "sc-telemetry",
@@ -9326,7 +9329,7 @@
 [[package]]
 name = "sc-chain-spec-derive"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
@@ -9337,7 +9340,7 @@
 [[package]]
 name = "sc-cli"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "chrono",
  "clap",
@@ -9347,7 +9350,7 @@
  "libp2p",
  "log",
  "names",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "rand 0.7.3",
  "regex",
  "rpassword",
@@ -9376,13 +9379,13 @@
 [[package]]
 name = "sc-client-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "fnv",
  "futures 0.3.21",
  "hash-db",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "sc-executor",
  "sc-transaction-pool-api",
@@ -9404,7 +9407,7 @@
 [[package]]
 name = "sc-client-db"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "hash-db",
  "kvdb",
@@ -9413,7 +9416,7 @@
  "linked-hash-map",
  "log",
  "parity-db",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "sc-client-api",
  "sc-state-db",
@@ -9429,7 +9432,7 @@
 [[package]]
 name = "sc-consensus"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "async-trait",
  "futures 0.3.21",
@@ -9453,12 +9456,12 @@
 [[package]]
 name = "sc-consensus-aura"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "async-trait",
  "futures 0.3.21",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sc-block-builder",
  "sc-client-api",
  "sc-consensus",
@@ -9482,7 +9485,7 @@
 [[package]]
 name = "sc-consensus-babe"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "async-trait",
  "fork-tree",
@@ -9492,7 +9495,7 @@
  "num-bigint",
  "num-rational 0.2.4",
  "num-traits",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "rand 0.7.3",
  "retain_mut",
@@ -9525,7 +9528,7 @@
 [[package]]
 name = "sc-consensus-babe-rpc"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "futures 0.3.21",
  "jsonrpsee",
@@ -9547,10 +9550,10 @@
 [[package]]
 name = "sc-consensus-epochs"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "fork-tree",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sc-client-api",
  "sc-consensus",
  "sp-blockchain",
@@ -9560,14 +9563,14 @@
 [[package]]
 name = "sc-consensus-manual-seal"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "assert_matches",
  "async-trait",
  "futures 0.3.21",
  "jsonrpsee",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sc-client-api",
  "sc-consensus",
  "sc-consensus-aura",
@@ -9594,13 +9597,13 @@
 [[package]]
 name = "sc-consensus-slots"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "async-trait",
  "futures 0.3.21",
  "futures-timer",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sc-client-api",
  "sc-consensus",
  "sc-telemetry",
@@ -9619,7 +9622,7 @@
 [[package]]
 name = "sc-consensus-uncles"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "sc-client-api",
  "sp-authorship",
@@ -9630,11 +9633,11 @@
 [[package]]
 name = "sc-executor"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "lazy_static",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "sc-executor-common",
  "sc-executor-wasmi",
@@ -9657,10 +9660,10 @@
 [[package]]
 name = "sc-executor-common"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "environmental",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sc-allocator",
  "sp-maybe-compressed-blob",
  "sp-sandbox",
@@ -9674,10 +9677,10 @@
 [[package]]
 name = "sc-executor-wasmi"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sc-allocator",
  "sc-executor-common",
  "sp-runtime-interface",
@@ -9689,12 +9692,12 @@
 [[package]]
 name = "sc-executor-wasmtime"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "cfg-if 1.0.0",
  "libc",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parity-wasm 0.42.2",
  "sc-allocator",
  "sc-executor-common",
@@ -9707,7 +9710,7 @@
 [[package]]
 name = "sc-finality-grandpa"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "ahash",
  "async-trait",
@@ -9718,7 +9721,7 @@
  "futures-timer",
  "hex",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "rand 0.8.5",
  "sc-block-builder",
@@ -9747,13 +9750,13 @@
 [[package]]
 name = "sc-finality-grandpa-rpc"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "finality-grandpa",
  "futures 0.3.21",
  "jsonrpsee",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sc-client-api",
  "sc-finality-grandpa",
  "sc-rpc",
@@ -9768,7 +9771,7 @@
 [[package]]
 name = "sc-informant"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "ansi_term",
  "futures 0.3.21",
@@ -9785,7 +9788,7 @@
 [[package]]
 name = "sc-keystore"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "async-trait",
  "hex",
@@ -9800,7 +9803,7 @@
 [[package]]
 name = "sc-network"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "async-trait",
  "asynchronous-codec",
@@ -9818,8 +9821,8 @@
  "linked-hash-map",
  "linked_hash_set",
  "log",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "pin-project 1.0.10",
  "prost 0.10.4",
@@ -9852,11 +9855,11 @@
 [[package]]
 name = "sc-network-common"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "futures 0.3.21",
  "libp2p",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "prost-build",
  "sc-peerset",
  "smallvec",
@@ -9865,14 +9868,14 @@
 [[package]]
 name = "sc-network-gossip"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "ahash",
  "futures 0.3.21",
  "futures-timer",
  "libp2p",
  "log",
- "lru 0.7.6",
+ "lru 0.7.7",
  "sc-network",
  "sp-runtime",
  "substrate-prometheus-endpoint",
@@ -9882,12 +9885,12 @@
 [[package]]
 name = "sc-network-light"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "futures 0.3.21",
  "libp2p",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "prost 0.10.4",
  "prost-build",
  "sc-client-api",
@@ -9902,7 +9905,7 @@
 [[package]]
 name = "sc-network-sync"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "bitflags",
  "either",
@@ -9910,8 +9913,8 @@
  "futures 0.3.21",
  "libp2p",
  "log",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
  "prost 0.10.4",
  "prost-build",
  "sc-client-api",
@@ -9931,7 +9934,7 @@
 [[package]]
 name = "sc-offchain"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "bytes 1.1.0",
  "fnv",
@@ -9942,7 +9945,7 @@
  "hyper-rustls",
  "num_cpus",
  "once_cell",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "rand 0.7.3",
  "sc-client-api",
@@ -9959,7 +9962,7 @@
 [[package]]
 name = "sc-peerset"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "futures 0.3.21",
  "libp2p",
@@ -9972,7 +9975,7 @@
 [[package]]
 name = "sc-proposer-metrics"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "log",
  "substrate-prometheus-endpoint",
@@ -9981,13 +9984,13 @@
 [[package]]
 name = "sc-rpc"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "futures 0.3.21",
  "hash-db",
  "jsonrpsee",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "sc-block-builder",
  "sc-chain-spec",
@@ -10011,12 +10014,12 @@
 [[package]]
 name = "sc-rpc-api"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "futures 0.3.21",
  "jsonrpsee",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "sc-chain-spec",
  "sc-transaction-pool-api",
@@ -10034,7 +10037,7 @@
 [[package]]
 name = "sc-rpc-server"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "futures 0.3.21",
  "jsonrpsee",
@@ -10047,7 +10050,7 @@
 [[package]]
 name = "sc-service"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "async-trait",
  "directories",
@@ -10057,7 +10060,7 @@
  "hash-db",
  "jsonrpsee",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parity-util-mem",
  "parking_lot 0.12.1",
  "pin-project 1.0.10",
@@ -10112,10 +10115,10 @@
 [[package]]
 name = "sc-state-db"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parity-util-mem",
  "parity-util-mem-derive",
  "parking_lot 0.12.1",
@@ -10126,10 +10129,10 @@
 [[package]]
 name = "sc-sync-state-rpc"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "jsonrpsee",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sc-chain-spec",
  "sc-client-api",
  "sc-consensus-babe",
@@ -10145,7 +10148,7 @@
 [[package]]
 name = "sc-sysinfo"
 version = "6.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "futures 0.3.21",
  "libc",
@@ -10164,7 +10167,7 @@
 [[package]]
 name = "sc-telemetry"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "chrono",
  "futures 0.3.21",
@@ -10182,7 +10185,7 @@
 [[package]]
 name = "sc-tracing"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "ansi_term",
  "atty",
@@ -10213,7 +10216,7 @@
 [[package]]
 name = "sc-tracing-proc-macro"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
@@ -10224,13 +10227,13 @@
 [[package]]
 name = "sc-transaction-pool"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "futures 0.3.21",
  "futures-timer",
  "linked-hash-map",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parity-util-mem",
  "parking_lot 0.12.1",
  "retain_mut",
@@ -10251,7 +10254,7 @@
 [[package]]
 name = "sc-transaction-pool-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "futures 0.3.21",
  "log",
@@ -10264,7 +10267,7 @@
 [[package]]
 name = "sc-utils"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "futures 0.3.21",
  "futures-timer",
@@ -10283,7 +10286,7 @@
  "bitvec 1.0.0",
  "cfg-if 1.0.0",
  "derive_more",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info-derive",
  "serde",
 ]
@@ -10630,7 +10633,7 @@
 source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
 dependencies = [
  "enumn",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "paste",
  "sp-runtime",
  "sp-std",
@@ -10703,11 +10706,11 @@
 [[package]]
 name = "sp-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "hash-db",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-api-proc-macro",
  "sp-core",
  "sp-runtime",
@@ -10720,7 +10723,7 @@
 [[package]]
 name = "sp-api-proc-macro"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "blake2",
  "proc-macro-crate",
@@ -10732,9 +10735,9 @@
 [[package]]
 name = "sp-application-crypto"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-core",
@@ -10745,11 +10748,11 @@
 [[package]]
 name = "sp-arithmetic"
 version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "integer-sqrt",
  "num-traits",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-debug-derive",
@@ -10760,9 +10763,9 @@
 [[package]]
 name = "sp-authority-discovery"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-api",
  "sp-application-crypto",
@@ -10773,10 +10776,10 @@
 [[package]]
 name = "sp-authorship"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "async-trait",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-inherents",
  "sp-runtime",
  "sp-std",
@@ -10785,9 +10788,9 @@
 [[package]]
 name = "sp-block-builder"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-api",
  "sp-inherents",
  "sp-runtime",
@@ -10797,12 +10800,12 @@
 [[package]]
 name = "sp-blockchain"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "futures 0.3.21",
  "log",
- "lru 0.7.6",
- "parity-scale-codec 3.1.2",
+ "lru 0.7.7",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "sp-api",
  "sp-consensus",
@@ -10815,13 +10818,13 @@
 [[package]]
 name = "sp-consensus"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "async-trait",
  "futures 0.3.21",
  "futures-timer",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-core",
  "sp-inherents",
  "sp-runtime",
@@ -10834,10 +10837,10 @@
 [[package]]
 name = "sp-consensus-aura"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "async-trait",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-api",
  "sp-application-crypto",
@@ -10852,11 +10855,11 @@
 [[package]]
 name = "sp-consensus-babe"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "async-trait",
  "merlin",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-api",
@@ -10875,9 +10878,9 @@
 [[package]]
 name = "sp-consensus-slots"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-arithmetic",
@@ -10889,9 +10892,9 @@
 [[package]]
 name = "sp-consensus-vrf"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "schnorrkel",
  "sp-core",
@@ -10902,7 +10905,7 @@
 [[package]]
 name = "sp-core"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "base58",
  "bitflags",
@@ -10920,7 +10923,7 @@
  "log",
  "merlin",
  "num-traits",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parity-util-mem",
  "parking_lot 0.12.1",
  "primitive-types",
@@ -10948,7 +10951,7 @@
 [[package]]
 name = "sp-core-hashing"
 version = "4.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "blake2",
  "byteorder",
@@ -10962,7 +10965,7 @@
 [[package]]
 name = "sp-core-hashing-proc-macro"
 version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -10973,7 +10976,7 @@
 [[package]]
 name = "sp-database"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "kvdb",
  "parking_lot 0.12.1",
@@ -10982,7 +10985,7 @@
 [[package]]
 name = "sp-debug-derive"
 version = "4.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -10992,10 +10995,10 @@
 [[package]]
 name = "sp-externalities"
 version = "0.12.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "environmental",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-std",
  "sp-storage",
 ]
@@ -11003,11 +11006,11 @@
 [[package]]
 name = "sp-finality-grandpa"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "finality-grandpa",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-api",
@@ -11021,11 +11024,11 @@
 [[package]]
 name = "sp-inherents"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "async-trait",
  "impl-trait-for-tuples",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-core",
  "sp-runtime",
  "sp-std",
@@ -11035,13 +11038,13 @@
 [[package]]
 name = "sp-io"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "futures 0.3.21",
  "hash-db",
  "libsecp256k1",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "secp256k1",
  "sp-core",
@@ -11060,7 +11063,7 @@
 [[package]]
 name = "sp-keyring"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "lazy_static",
  "sp-core",
@@ -11071,12 +11074,12 @@
 [[package]]
 name = "sp-keystore"
 version = "0.12.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "async-trait",
  "futures 0.3.21",
  "merlin",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "schnorrkel",
  "serde",
@@ -11088,7 +11091,7 @@
 [[package]]
 name = "sp-maybe-compressed-blob"
 version = "4.1.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "thiserror",
  "zstd",
@@ -11097,10 +11100,10 @@
 [[package]]
 name = "sp-mmr-primitives"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "serde",
  "sp-api",
  "sp-core",
@@ -11112,9 +11115,9 @@
 [[package]]
 name = "sp-npos-elections"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "serde",
  "sp-arithmetic",
@@ -11126,7 +11129,7 @@
 [[package]]
 name = "sp-offchain"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "sp-api",
  "sp-core",
@@ -11136,7 +11139,7 @@
 [[package]]
 name = "sp-panic-handler"
 version = "4.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "backtrace",
  "lazy_static",
@@ -11146,7 +11149,7 @@
 [[package]]
 name = "sp-rpc"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "rustc-hash",
  "serde",
@@ -11156,13 +11159,13 @@
 [[package]]
 name = "sp-runtime"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "either",
  "hash256-std-hasher",
  "impl-trait-for-tuples",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parity-util-mem",
  "paste",
  "rand 0.7.3",
@@ -11178,10 +11181,10 @@
 [[package]]
 name = "sp-runtime-interface"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "impl-trait-for-tuples",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "primitive-types",
  "sp-externalities",
  "sp-runtime-interface-proc-macro",
@@ -11195,7 +11198,7 @@
 [[package]]
 name = "sp-runtime-interface-proc-macro"
 version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "Inflector",
  "proc-macro-crate",
@@ -11207,10 +11210,10 @@
 [[package]]
 name = "sp-sandbox"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-core",
  "sp-io",
  "sp-std",
@@ -11221,7 +11224,7 @@
 [[package]]
 name = "sp-serializer"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "serde",
  "serde_json",
@@ -11230,9 +11233,9 @@
 [[package]]
 name = "sp-session"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-api",
  "sp-core",
@@ -11244,9 +11247,9 @@
 [[package]]
 name = "sp-staking"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-runtime",
  "sp-std",
@@ -11255,12 +11258,12 @@
 [[package]]
 name = "sp-state-machine"
 version = "0.12.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "hash-db",
  "log",
  "num-traits",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.12.1",
  "rand 0.7.3",
  "smallvec",
@@ -11277,15 +11280,15 @@
 [[package]]
 name = "sp-std"
 version = "4.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 
 [[package]]
 name = "sp-storage"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "impl-serde",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "ref-cast",
  "serde",
  "sp-debug-derive",
@@ -11295,7 +11298,7 @@
 [[package]]
 name = "sp-tasks"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "log",
  "sp-core",
@@ -11308,12 +11311,12 @@
 [[package]]
 name = "sp-timestamp"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "async-trait",
  "futures-timer",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-api",
  "sp-inherents",
  "sp-runtime",
@@ -11324,9 +11327,9 @@
 [[package]]
 name = "sp-tracing"
 version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-std",
  "tracing",
  "tracing-core",
@@ -11336,7 +11339,7 @@
 [[package]]
 name = "sp-transaction-pool"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "sp-api",
  "sp-runtime",
@@ -11345,11 +11348,11 @@
 [[package]]
 name = "sp-transaction-storage-proof"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "async-trait",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-inherents",
@@ -11361,11 +11364,11 @@
 [[package]]
 name = "sp-trie"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "hash-db",
  "memory-db",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-std",
@@ -11377,10 +11380,10 @@
 [[package]]
 name = "sp-version"
 version = "5.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "impl-serde",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parity-wasm 0.42.2",
  "scale-info",
  "serde",
@@ -11394,9 +11397,9 @@
 [[package]]
 name = "sp-version-proc-macro"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "proc-macro2",
  "quote",
  "syn",
@@ -11405,11 +11408,11 @@
 [[package]]
 name = "sp-wasm-interface"
 version = "6.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "impl-trait-for-tuples",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-std",
  "wasmi",
  "wasmtime",
@@ -11511,9 +11514,9 @@
 
 [[package]]
 name = "strum"
-version = "0.24.0"
+version = "0.24.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e96acfc1b70604b8b2f1ffa4c57e59176c7dbb05d556c71ecd2f5498a1dee7f8"
+checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
 dependencies = [
  "strum_macros 0.24.0",
 ]
@@ -11560,7 +11563,7 @@
 [[package]]
 name = "substrate-build-script-utils"
 version = "3.0.0"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "platforms",
 ]
@@ -11568,13 +11571,13 @@
 [[package]]
 name = "substrate-frame-rpc-system"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "frame-system-rpc-runtime-api",
  "futures 0.3.21",
  "jsonrpsee",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sc-client-api",
  "sc-rpc-api",
  "sc-transaction-pool-api",
@@ -11589,7 +11592,7 @@
 [[package]]
 name = "substrate-prometheus-endpoint"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "futures-util",
  "hyper",
@@ -11602,11 +11605,11 @@
 [[package]]
 name = "substrate-state-trie-migration-rpc"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "jsonrpsee",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sc-client-api",
  "sc-rpc-api",
  "scale-info",
@@ -11623,12 +11626,12 @@
 [[package]]
 name = "substrate-test-client"
 version = "2.0.1"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "async-trait",
  "futures 0.3.21",
  "hex",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sc-client-api",
  "sc-client-db",
  "sc-consensus",
@@ -11649,7 +11652,7 @@
 [[package]]
 name = "substrate-test-utils"
 version = "4.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "futures 0.3.21",
  "substrate-test-utils-derive",
@@ -11659,7 +11662,7 @@
 [[package]]
 name = "substrate-test-utils-derive"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
@@ -11670,7 +11673,7 @@
 [[package]]
 name = "substrate-wasm-builder"
 version = "5.0.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "ansi_term",
  "build-helper",
@@ -11691,9 +11694,9 @@
 
 [[package]]
 name = "syn"
-version = "1.0.96"
+version = "1.0.98"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf"
+checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -11799,7 +11802,7 @@
  "pallet-timestamp",
  "pallet-transaction-payment",
  "pallet-unique",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "sp-core",
  "sp-io",
@@ -12028,9 +12031,9 @@
 
 [[package]]
 name = "tower-service"
-version = "0.3.1"
+version = "0.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
 
 [[package]]
 name = "tracing"
@@ -12107,7 +12110,7 @@
  "ahash",
  "lazy_static",
  "log",
- "lru 0.7.6",
+ "lru 0.7.7",
  "tracing-core",
 ]
 
@@ -12228,12 +12231,12 @@
 [[package]]
 name = "try-runtime-cli"
 version = "0.10.0-dev"
-source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"
+source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
 dependencies = [
  "clap",
  "jsonrpsee",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "remote-externalities",
  "sc-chain-spec",
  "sc-cli",
@@ -12282,7 +12285,7 @@
  "jsonrpsee",
  "pallet-common",
  "pallet-evm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "rmrk-rpc",
  "sp-api",
  "sp-blockchain",
@@ -12329,9 +12332,9 @@
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.0"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee"
+checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
 
 [[package]]
 name = "unicode-normalization"
@@ -12362,7 +12365,7 @@
 
 [[package]]
 name = "unique-node"
-version = "0.9.22"
+version = "0.9.23"
 dependencies = [
  "clap",
  "cumulus-client-cli",
@@ -12392,7 +12395,7 @@
  "pallet-ethereum",
  "pallet-transaction-payment-rpc",
  "pallet-transaction-payment-rpc-runtime-api",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "parking_lot 0.11.2",
  "polkadot-cli",
  "polkadot-parachain",
@@ -12499,7 +12502,7 @@
 
 [[package]]
 name = "unique-runtime"
-version = "0.9.22"
+version = "0.9.23"
 dependencies = [
  "cumulus-pallet-aura-ext",
  "cumulus-pallet-dmp-queue",
@@ -12548,10 +12551,10 @@
  "pallet-transaction-payment-rpc-runtime-api",
  "pallet-treasury",
  "pallet-unique",
- "pallet-unq-scheduler",
+ "pallet-unique-scheduler",
  "pallet-xcm",
  "parachain-info",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-parachain",
  "rmrk-rpc",
  "scale-info",
@@ -12581,7 +12584,7 @@
 
 [[package]]
 name = "unique-runtime-common"
-version = "0.9.22"
+version = "0.9.23"
 dependencies = [
  "evm-coder",
  "fp-rpc",
@@ -12593,7 +12596,8 @@
  "pallet-nonfungible",
  "pallet-refungible",
  "pallet-unique",
- "parity-scale-codec 3.1.2",
+ "pallet-unique-scheduler",
+ "parity-scale-codec 3.1.5",
  "rmrk-rpc",
  "scale-info",
  "sp-consensus-aura",
@@ -12640,7 +12644,7 @@
  "frame-support",
  "frame-system",
  "pallet-evm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "rmrk-traits",
  "scale-info",
  "serde",
@@ -12656,7 +12660,7 @@
 dependencies = [
  "pallet-common",
  "pallet-evm",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-api",
  "sp-core",
  "sp-runtime",
@@ -12765,9 +12769,9 @@
 
 [[package]]
 name = "wasm-bindgen"
-version = "0.2.80"
+version = "0.2.81"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad"
+checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994"
 dependencies = [
  "cfg-if 1.0.0",
  "wasm-bindgen-macro",
@@ -12775,9 +12779,9 @@
 
 [[package]]
 name = "wasm-bindgen-backend"
-version = "0.2.80"
+version = "0.2.81"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4"
+checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a"
 dependencies = [
  "bumpalo",
  "lazy_static",
@@ -12790,9 +12794,9 @@
 
 [[package]]
 name = "wasm-bindgen-futures"
-version = "0.4.30"
+version = "0.4.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2"
+checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f"
 dependencies = [
  "cfg-if 1.0.0",
  "js-sys",
@@ -12802,9 +12806,9 @@
 
 [[package]]
 name = "wasm-bindgen-macro"
-version = "0.2.80"
+version = "0.2.81"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5"
+checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa"
 dependencies = [
  "quote",
  "wasm-bindgen-macro-support",
@@ -12812,9 +12816,9 @@
 
 [[package]]
 name = "wasm-bindgen-macro-support"
-version = "0.2.80"
+version = "0.2.81"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b"
+checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -12825,9 +12829,9 @@
 
 [[package]]
 name = "wasm-bindgen-shared"
-version = "0.2.80"
+version = "0.2.81"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744"
+checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be"
 
 [[package]]
 name = "wasm-gc-api"
@@ -13065,9 +13069,9 @@
 
 [[package]]
 name = "web-sys"
-version = "0.3.57"
+version = "0.3.58"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283"
+checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90"
 dependencies = [
  "js-sys",
  "wasm-bindgen",
@@ -13157,7 +13161,7 @@
  "pallet-vesting",
  "pallet-xcm",
  "pallet-xcm-benchmarks",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-parachain",
  "polkadot-primitives",
  "polkadot-runtime-common",
@@ -13252,15 +13256,15 @@
 
 [[package]]
 name = "windows"
-version = "0.29.0"
+version = "0.34.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aac7fef12f4b59cd0a29339406cc9203ab44e440ddff6b3f5a41455349fa9cf3"
+checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f"
 dependencies = [
- "windows_aarch64_msvc 0.29.0",
- "windows_i686_gnu 0.29.0",
- "windows_i686_msvc 0.29.0",
- "windows_x86_64_gnu 0.29.0",
- "windows_x86_64_msvc 0.29.0",
+ "windows_aarch64_msvc 0.34.0",
+ "windows_i686_gnu 0.34.0",
+ "windows_i686_msvc 0.34.0",
+ "windows_x86_64_gnu 0.34.0",
+ "windows_x86_64_msvc 0.34.0",
 ]
 
 [[package]]
@@ -13278,9 +13282,9 @@
 
 [[package]]
 name = "windows_aarch64_msvc"
-version = "0.29.0"
+version = "0.34.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3d027175d00b01e0cbeb97d6ab6ebe03b12330a35786cbaca5252b1c4bf5d9b"
+checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d"
 
 [[package]]
 name = "windows_aarch64_msvc"
@@ -13290,9 +13294,9 @@
 
 [[package]]
 name = "windows_i686_gnu"
-version = "0.29.0"
+version = "0.34.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8793f59f7b8e8b01eda1a652b2697d87b93097198ae85f823b969ca5b89bba58"
+checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed"
 
 [[package]]
 name = "windows_i686_gnu"
@@ -13302,9 +13306,9 @@
 
 [[package]]
 name = "windows_i686_msvc"
-version = "0.29.0"
+version = "0.34.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8602f6c418b67024be2996c512f5f995de3ba417f4c75af68401ab8756796ae4"
+checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956"
 
 [[package]]
 name = "windows_i686_msvc"
@@ -13314,9 +13318,9 @@
 
 [[package]]
 name = "windows_x86_64_gnu"
-version = "0.29.0"
+version = "0.34.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3d615f419543e0bd7d2b3323af0d86ff19cbc4f816e6453f36a2c2ce889c354"
+checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4"
 
 [[package]]
 name = "windows_x86_64_gnu"
@@ -13326,9 +13330,9 @@
 
 [[package]]
 name = "windows_x86_64_msvc"
-version = "0.29.0"
+version = "0.34.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11d95421d9ed3672c280884da53201a5c46b7b2765ca6faf34b0d71cf34a3561"
+checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9"
 
 [[package]]
 name = "windows_x86_64_msvc"
@@ -13379,7 +13383,7 @@
  "derivative",
  "impl-trait-for-tuples",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "scale-info",
  "xcm-procedural",
 ]
@@ -13393,7 +13397,7 @@
  "frame-system",
  "log",
  "pallet-transaction-payment",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "polkadot-parachain",
  "scale-info",
  "sp-arithmetic",
@@ -13413,7 +13417,7 @@
  "frame-support",
  "impl-trait-for-tuples",
  "log",
- "parity-scale-codec 3.1.2",
+ "parity-scale-codec 3.1.5",
  "sp-arithmetic",
  "sp-core",
  "sp-io",
modifiedMakefilediffbeforeafterboth
--- a/Makefile
+++ b/Makefile
@@ -59,11 +59,11 @@
 
 .PHONY: _bench
 _bench:
-	cargo run --release --features runtime-benchmarks,unique-runtime -- \
-	benchmark pallet --pallet pallet-$(PALLET) \
+	cargo run --release --features runtime-benchmarks,$(RUNTIME) -- \
+	benchmark pallet --pallet pallet-$(if $(PALLET),$(PALLET),$(error Must set PALLET)) \
 	--wasm-execution compiled --extrinsic '*' \
-	--template .maintain/frame-weight-template.hbs --steps=50 --repeat=200 --heap-pages=4096 \
-	--output=./pallets/$(PALLET)/src/weights.rs
+	--template .maintain/frame-weight-template.hbs --steps=50 --repeat=80 --heap-pages=4096 \
+	--output=./pallets/$(if $(PALLET_DIR),$(PALLET_DIR),$(PALLET))/src/weights.rs
 
 .PHONY: bench-evm-migration
 bench-evm-migration:
@@ -93,9 +93,17 @@
 bench-structure:
 	make _bench PALLET=structure
 
+.PHONY: bench-scheduler
+bench-scheduler:
+	make _bench PALLET=unique-scheduler PALLET_DIR=scheduler
+
 .PHONY: bench-rmrk-core
 bench-rmrk-core:
 	make _bench PALLET=proxy-rmrk-core
 
+.PHONY: bench-rmrk-equip
+bench-rmrk-equip:
+	make _bench PALLET=proxy-rmrk-equip
+
 .PHONY: bench
-bench: bench-evm-migration bench-unique bench-structure bench-fungible bench-refungible bench-nonfungible bench-rmrk-core
+bench: bench-evm-migration bench-unique bench-structure bench-fungible bench-refungible bench-nonfungible bench-scheduler bench-rmrk-core bench-rmrk-equip
modifiednode/cli/Cargo.tomldiffbeforeafterboth
--- a/node/cli/Cargo.toml
+++ b/node/cli/Cargo.toml
@@ -291,7 +291,7 @@
 license = 'GPLv3'
 name = 'unique-node'
 repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = '0.9.22'
+version = '0.9.23'
 
 [[bin]]
 name = 'unique-collator'
@@ -323,7 +323,9 @@
 [features]
 default = []
 runtime-benchmarks = [
-    'unique-runtime/runtime-benchmarks',
+    'unique-runtime?/runtime-benchmarks',
+    'quartz-runtime?/runtime-benchmarks',
+    'opal-runtime/runtime-benchmarks',
     'polkadot-service/runtime-benchmarks',
 ]
 try-runtime = []
modifiednode/cli/src/chain_spec.rsdiffbeforeafterboth
--- a/node/cli/src/chain_spec.rs
+++ b/node/cli/src/chain_spec.rs
@@ -26,13 +26,13 @@
 use unique_runtime_common::types::*;
 
 #[cfg(feature = "unique-runtime")]
-use unique_runtime as default_runtime;
+pub use unique_runtime as default_runtime;
 
 #[cfg(all(not(feature = "unique-runtime"), feature = "quartz-runtime"))]
-use quartz_runtime as default_runtime;
+pub use quartz_runtime as default_runtime;
 
 #[cfg(all(not(feature = "unique-runtime"), not(feature = "quartz-runtime")))]
-use opal_runtime as default_runtime;
+pub use opal_runtime as default_runtime;
 
 /// The `ChainSpec` parameterized for the unique runtime.
 #[cfg(feature = "unique-runtime")]
modifiednode/cli/src/command.rsdiffbeforeafterboth
--- a/node/cli/src/command.rs
+++ b/node/cli/src/command.rs
@@ -33,7 +33,9 @@
 // limitations under the License.
 
 use crate::{
-	chain_spec::{self, RuntimeId, RuntimeIdentification, ServiceId, ServiceIdentification},
+	chain_spec::{
+		self, RuntimeId, RuntimeIdentification, ServiceId, ServiceIdentification, default_runtime,
+	},
 	cli::{Cli, RelayChainCli, Subcommand},
 	service::{new_partial, start_node, start_dev_node},
 };
@@ -44,7 +46,7 @@
 #[cfg(feature = "quartz-runtime")]
 use crate::service::QuartzRuntimeExecutor;
 
-use crate::service::OpalRuntimeExecutor;
+use crate::service::{OpalRuntimeExecutor, DefaultRuntimeExecutor};
 
 use codec::Encode;
 use cumulus_primitives_core::ParaId;
@@ -371,7 +373,6 @@
 
 			Ok(())
 		}
-		#[cfg(feature = "unique-runtime")]
 		Some(Subcommand::Benchmark(cmd)) => {
 			use frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE};
 			let runner = cli.create_runner(cmd)?;
@@ -379,7 +380,7 @@
 			match cmd {
 				BenchmarkCmd::Pallet(cmd) => {
 					if cfg!(feature = "runtime-benchmarks") {
-						runner.sync_run(|config| cmd.run::<Block, UniqueRuntimeExecutor>(config))
+						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`."
@@ -388,16 +389,16 @@
 				}
 				BenchmarkCmd::Block(cmd) => runner.sync_run(|config| {
 					let partials = new_partial::<
-						unique_runtime::RuntimeApi,
-						UniqueRuntimeExecutor,
+						default_runtime::RuntimeApi,
+						DefaultRuntimeExecutor,
 						_,
 					>(&config, crate::service::parachain_build_import_queue)?;
 					cmd.run(partials.client)
 				}),
 				BenchmarkCmd::Storage(cmd) => runner.sync_run(|config| {
 					let partials = new_partial::<
-						unique_runtime::RuntimeApi,
-						UniqueRuntimeExecutor,
+						default_runtime::RuntimeApi,
+						DefaultRuntimeExecutor,
 						_,
 					>(&config, crate::service::parachain_build_import_queue)?;
 					let db = partials.backend.expose_db();
@@ -410,10 +411,6 @@
 				}
 				BenchmarkCmd::Overhead(_) => Err("Unsupported benchmarking command".into()),
 			}
-		}
-		#[cfg(not(feature = "unique-runtime"))]
-		Some(Subcommand::Benchmark(..)) => {
-			Err("benchmarking is only available with unique runtime enabled".into())
 		}
 		Some(Subcommand::TryRuntime(cmd)) => {
 			if cfg!(feature = "try-runtime") {
modifiednode/cli/src/service.rsdiffbeforeafterboth
--- a/node/cli/src/service.rs
+++ b/node/cli/src/service.rs
@@ -77,13 +77,21 @@
 
 #[cfg(feature = "quartz-runtime")]
 /// Quartz native executor instance.
-
 pub struct QuartzRuntimeExecutor;
 
 /// Opal native executor instance.
 pub struct OpalRuntimeExecutor;
 
 #[cfg(feature = "unique-runtime")]
+pub type DefaultRuntimeExecutor = UniqueRuntimeExecutor;
+
+#[cfg(all(not(feature = "unique-runtime"), feature = "quartz-runtime"))]
+pub type DefaultRuntimeExecutor = QuartzRuntimeExecutor;
+
+#[cfg(all(not(feature = "unique-runtime"), not(feature = "quartz-runtime")))]
+pub type DefaultRuntimeExecutor = OpalRuntimeExecutor;
+
+#[cfg(feature = "unique-runtime")]
 impl NativeExecutionDispatch for UniqueRuntimeExecutor {
 	type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions;
 
modifiednode/rpc/Cargo.tomldiffbeforeafterboth
--- a/node/rpc/Cargo.toml
+++ b/node/rpc/Cargo.toml
@@ -63,3 +63,4 @@
 [features]
 default = []
 std = []
+unique-runtime = []
modifiednode/rpc/src/lib.rsdiffbeforeafterboth
--- a/node/rpc/src/lib.rs
+++ b/node/rpc/src/lib.rs
@@ -169,7 +169,11 @@
 		Eth, EthApiServer, EthDevSigner, EthFilter, EthFilterApiServer, EthPubSub,
 		EthPubSubApiServer, EthSigner, Net, NetApiServer, Web3, Web3ApiServer,
 	};
-	use uc_rpc::{UniqueApiServer, Unique, RmrkApiServer, Rmrk};
+	use uc_rpc::{UniqueApiServer, Unique};
+
+	#[cfg(not(feature = "unique-runtime"))]
+	use uc_rpc::{RmrkApiServer, Rmrk};
+
 	// use pallet_contracts_rpc::{Contracts, ContractsApi};
 	use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer};
 	use substrate_frame_rpc_system::{System, SystemApiServer};
@@ -223,6 +227,8 @@
 	)?;
 
 	io.merge(Unique::new(client.clone()).into_rpc())?;
+
+	#[cfg(not(feature = "unique-runtime"))]
 	io.merge(Rmrk::new(client.clone()).into_rpc())?;
 
 	if let Some(filter_pool) = filter_pool {
modifiedpallets/common/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/common/src/benchmarking.rs
+++ b/pallets/common/src/benchmarking.rs
@@ -96,10 +96,11 @@
 			permissions: Some(CollectionPermissions {
 				nesting: Some(NestingPermissions {
 					token_owner: false,
-					admin: false,
+					collection_admin: false,
 					restricted: None,
 					permissive: true,
 				}),
+				mint_mode: Some(true),
 				..Default::default()
 			}),
 			..Default::default()
modifiedpallets/common/src/erc.rsdiffbeforeafterboth
--- a/pallets/common/src/erc.rs
+++ b/pallets/common/src/erc.rs
@@ -22,7 +22,9 @@
 pub use pallet_evm::{PrecompileOutput, PrecompileResult, PrecompileHandle, account::CrossAccountId};
 use pallet_evm_coder_substrate::dispatch_to_evm;
 use sp_std::vec::Vec;
-use up_data_structs::{Property, SponsoringRateLimit, OwnerRestrictedSet, AccessMode};
+use up_data_structs::{
+	Property, SponsoringRateLimit, OwnerRestrictedSet, AccessMode, CollectionPermissions,
+};
 use alloc::format;
 
 use crate::{Pallet, CollectionHandle, Config, CollectionProperties};
@@ -47,10 +49,15 @@
 
 #[solidity_interface(name = "Collection")]
 impl<T: Config> CollectionHandle<T>
-// where
-// 	T::AccountId: From<H256>
+where
+	T::AccountId: From<[u8; 32]>,
 {
-	fn set_collection_property(&mut self, caller: caller, key: string, value: bytes) -> Result<()> {
+	fn set_collection_property(
+		&mut self,
+		caller: caller,
+		key: string,
+		value: bytes,
+	) -> Result<void> {
 		let caller = T::CrossAccountId::from_eth(caller);
 		let key = <Vec<u8>>::from(key)
 			.try_into()
@@ -83,7 +90,7 @@
 	}
 
 	fn set_collection_sponsor(&mut self, caller: caller, sponsor: address) -> Result<void> {
-		check_is_owner(caller, self)?;
+		check_is_owner_or_admin(caller, self)?;
 
 		let sponsor = T::CrossAccountId::from_eth(sponsor);
 		self.set_sponsor(sponsor.as_sub().clone())
@@ -97,14 +104,14 @@
 			.confirm_sponsorship(caller.as_sub())
 			.map_err(dispatch_to_evm::<T>)?
 		{
-			return Err(Error::Revert("Caller is not set as sponsor".into()));
+			return Err("caller is not set as sponsor".into());
 		}
 		save(self)
 	}
 
 	#[solidity(rename_selector = "setCollectionLimit")]
 	fn set_int_limit(&mut self, caller: caller, limit: string, value: uint32) -> Result<void> {
-		check_is_owner(caller, self)?;
+		check_is_owner_or_admin(caller, self)?;
 		let mut limits = self.limits.clone();
 
 		match limit.as_str() {
@@ -128,7 +135,7 @@
 			}
 			_ => {
 				return Err(Error::Revert(format!(
-					"Unknown integer limit \"{}\"",
+					"unknown integer limit \"{}\"",
 					limit
 				)))
 			}
@@ -140,7 +147,7 @@
 
 	#[solidity(rename_selector = "setCollectionLimit")]
 	fn set_bool_limit(&mut self, caller: caller, limit: string, value: bool) -> Result<void> {
-		check_is_owner(caller, self)?;
+		check_is_owner_or_admin(caller, self)?;
 		let mut limits = self.limits.clone();
 
 		match limit.as_str() {
@@ -155,7 +162,7 @@
 			}
 			_ => {
 				return Err(Error::Revert(format!(
-					"Unknown boolean limit \"{}\"",
+					"unknown boolean limit \"{}\"",
 					limit
 				)))
 			}
@@ -169,52 +176,48 @@
 		Ok(crate::eth::collection_id_to_address(self.id))
 	}
 
-	// fn add_admin_substrate(&self, caller: caller, new_admin: uint256) -> Result<void> {
-	// 	let mut new_admin_h256 = H256::default();
-	// 	new_admin.to_little_endian(&mut new_admin_h256.0);
-	// 	let account_id = T::AccountId::from(new_admin_h256);
-	// 	let caller = T::CrossAccountId::from_eth(caller);
-	// 	let new_admin = T::CrossAccountId::from_sub(account_id);
-	// 	<Pallet<T>>::toggle_admin(&self, &caller, &new_admin, true)
-	// 		.map_err(dispatch_to_evm::<T>)?;
-	// 	Ok(())
-	// }
+	fn add_collection_admin_substrate(&self, caller: caller, new_admin: uint256) -> Result<void> {
+		let caller = T::CrossAccountId::from_eth(caller);
+		let mut new_admin_arr: [u8; 32] = Default::default();
+		new_admin.to_big_endian(&mut new_admin_arr);
+		let account_id = T::AccountId::from(new_admin_arr);
+		let new_admin = T::CrossAccountId::from_sub(account_id);
+		<Pallet<T>>::toggle_admin(self, &caller, &new_admin, true).map_err(dispatch_to_evm::<T>)?;
+		Ok(())
+	}
 
-	// fn remove_admin_substrate(&self, caller: caller, new_admin: uint256) -> Result<void> {
-	// 	let mut new_admin_h256 = H256::default();
-	// 	new_admin.to_little_endian(&mut new_admin_h256.0);
-	// 	let account_id = T::AccountId::from(new_admin_h256);
-	// 	let caller = T::CrossAccountId::from_eth(caller);
-	// 	let new_admin = T::CrossAccountId::from_sub(account_id);
-	// 	<Pallet<T>>::toggle_admin(&self, &caller, &new_admin, false)
-	// 		.map_err(dispatch_to_evm::<T>)?;
-	// 	Ok(())
-	// }
+	fn remove_collection_admin_substrate(
+		&self,
+		caller: caller,
+		new_admin: uint256,
+	) -> Result<void> {
+		let caller = T::CrossAccountId::from_eth(caller);
+		let mut new_admin_arr: [u8; 32] = Default::default();
+		new_admin.to_big_endian(&mut new_admin_arr);
+		let account_id = T::AccountId::from(new_admin_arr);
+		let new_admin = T::CrossAccountId::from_sub(account_id);
+		<Pallet<T>>::toggle_admin(self, &caller, &new_admin, false)
+			.map_err(dispatch_to_evm::<T>)?;
+		Ok(())
+	}
 
 	fn add_collection_admin(&self, caller: caller, new_admin: address) -> Result<void> {
 		let caller = T::CrossAccountId::from_eth(caller);
-		self.check_is_owner_or_admin(&caller)
-			.map_err(dispatch_to_evm::<T>)?;
 		let new_admin = T::CrossAccountId::from_eth(new_admin);
-		<Pallet<T>>::toggle_admin(&self, &caller, &new_admin, true)
-			.map_err(dispatch_to_evm::<T>)?;
+		<Pallet<T>>::toggle_admin(self, &caller, &new_admin, true).map_err(dispatch_to_evm::<T>)?;
 		Ok(())
 	}
 
 	fn remove_collection_admin(&self, caller: caller, admin: address) -> Result<void> {
 		let caller = T::CrossAccountId::from_eth(caller);
-		self.check_is_owner_or_admin(&caller)
-			.map_err(dispatch_to_evm::<T>)?;
 		let admin = T::CrossAccountId::from_eth(admin);
-		<Pallet<T>>::toggle_admin(&self, &caller, &admin, false).map_err(dispatch_to_evm::<T>)?;
+		<Pallet<T>>::toggle_admin(self, &caller, &admin, false).map_err(dispatch_to_evm::<T>)?;
 		Ok(())
 	}
 
 	#[solidity(rename_selector = "setCollectionNesting")]
 	fn set_nesting_bool(&mut self, caller: caller, enable: bool) -> Result<void> {
-		let caller = T::CrossAccountId::from_eth(caller);
-		self.check_is_owner_or_admin(&caller)
-			.map_err(dispatch_to_evm::<T>)?;
+		check_is_owner_or_admin(caller, self)?;
 
 		let mut permissions = self.collection.permissions.clone();
 		let mut nesting = permissions.nesting().clone();
@@ -240,11 +243,9 @@
 		collections: Vec<address>,
 	) -> Result<void> {
 		if collections.is_empty() {
-			return Err("No addresses provided".into());
+			return Err("no addresses provided".into());
 		}
-		let caller = T::CrossAccountId::from_eth(caller);
-		self.check_is_owner_or_admin(&caller)
-			.map_err(dispatch_to_evm::<T>)?;
+		check_is_owner_or_admin(caller, self)?;
 
 		let mut permissions = self.collection.permissions.clone();
 		match enable {
@@ -280,27 +281,34 @@
 	}
 
 	fn set_collection_access(&mut self, caller: caller, mode: uint8) -> Result<void> {
-		let caller = T::CrossAccountId::from_eth(caller);
-		self.check_is_owner_or_admin(&caller)
-			.map_err(dispatch_to_evm::<T>)?;
-		self.collection.permissions.access = Some(match mode {
-			0 => AccessMode::Normal,
-			1 => AccessMode::AllowList,
-			_ => return Err("Not supported access mode".into()),
-		});
-		save(self)?;
-		Ok(())
+		check_is_owner_or_admin(caller, self)?;
+		let permissions = CollectionPermissions {
+			access: Some(match mode {
+				0 => AccessMode::Normal,
+				1 => AccessMode::AllowList,
+				_ => return Err("not supported access mode".into()),
+			}),
+			..Default::default()
+		};
+		self.collection.permissions = <Pallet<T>>::clamp_permissions(
+			self.collection.mode.clone(),
+			&self.collection.permissions,
+			permissions,
+		)
+		.map_err(dispatch_to_evm::<T>)?;
+
+		save(self)
 	}
 
 	fn add_to_collection_allow_list(&self, caller: caller, user: address) -> Result<void> {
-		let caller = check_is_owner_or_admin(caller, self)?;
+		let caller = T::CrossAccountId::from_eth(caller);
 		let user = T::CrossAccountId::from_eth(user);
 		<Pallet<T>>::toggle_allowlist(self, &caller, &user, true).map_err(dispatch_to_evm::<T>)?;
 		Ok(())
 	}
 
 	fn remove_from_collection_allow_list(&self, caller: caller, user: address) -> Result<void> {
-		let caller = check_is_owner_or_admin(caller, self)?;
+		let caller = T::CrossAccountId::from_eth(caller);
 		let user = T::CrossAccountId::from_eth(user);
 		<Pallet<T>>::toggle_allowlist(self, &caller, &user, false).map_err(dispatch_to_evm::<T>)?;
 		Ok(())
@@ -308,18 +316,19 @@
 
 	fn set_collection_mint_mode(&mut self, caller: caller, mode: bool) -> Result<void> {
 		check_is_owner_or_admin(caller, self)?;
-		self.collection.permissions.mint_mode = Some(mode);
-		save(self)?;
-		Ok(())
-	}
-}
+		let permissions = CollectionPermissions {
+			mint_mode: Some(mode),
+			..Default::default()
+		};
+		self.collection.permissions = <Pallet<T>>::clamp_permissions(
+			self.collection.mode.clone(),
+			&self.collection.permissions,
+			permissions,
+		)
+		.map_err(dispatch_to_evm::<T>)?;
 
-fn check_is_owner<T: Config>(caller: caller, collection: &CollectionHandle<T>) -> Result<void> {
-	let caller = T::CrossAccountId::from_eth(caller);
-	collection
-		.check_is_owner(&caller)
-		.map_err(pallet_evm_coder_substrate::dispatch_to_evm::<T>)?;
-	Ok(())
+		save(self)
+	}
 }
 
 fn check_is_owner_or_admin<T: Config>(
modifiedpallets/common/src/lib.rsdiffbeforeafterboth
--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -74,7 +74,7 @@
 	RmrkPropertyInfo,
 	RmrkBaseInfo,
 	RmrkPartType,
-	RmrkTheme,
+	RmrkBoundedTheme,
 	RmrkNftChild,
 	CollectionPermissions,
 	SchemaVersion,
@@ -148,7 +148,7 @@
 					.saturating_mul(writes),
 			))
 	}
-	pub fn save(self) -> Result<(), DispatchError> {
+	pub fn save(self) -> DispatchResult {
 		<CollectionById<T>>::insert(self.id, self.collection);
 		Ok(())
 	}
@@ -543,7 +543,7 @@
 				RmrkPropertyInfo,
 				RmrkBaseInfo<T::AccountId>,
 				RmrkPartType,
-				RmrkTheme,
+				RmrkBoundedTheme,
 				RmrkNftChild,
 			)>,
 		),
@@ -1019,7 +1019,7 @@
 	}
 
 	#[transactional]
-	pub fn set_property_permissions(
+	pub fn set_token_property_permissions(
 		collection: &CollectionHandle<T>,
 		sender: &T::CrossAccountId,
 		property_permissions: Vec<PropertyKeyPermission>,
@@ -1164,6 +1164,7 @@
 		old_limit: &CollectionLimits,
 		mut new_limit: CollectionLimits,
 	) -> Result<CollectionLimits, DispatchError> {
+		let limits = old_limit;
 		limit_default!(old_limit, new_limit,
 			account_token_ownership_limit => ensure!(
 				new_limit <= MAX_TOKEN_OWNERSHIP,
@@ -1190,6 +1191,7 @@
 			),
 			sponsor_approve_timeout => {},
 			owner_can_transfer => ensure!(
+				!limits.owner_can_transfer_instaled() ||
 				old_limit || !new_limit,
 				<Error<T>>::OwnerPermissionsCantBeReverted,
 			),
@@ -1210,11 +1212,14 @@
 		limit_default_clone!(old_limit, new_limit,
 			access => {},
 			mint_mode => {},
-			nesting => ensure!(
-				// Permissive is only allowed for tests and internal usage of chain for now
-				old_limit.permissive || !new_limit.permissive,
-				<Error<T>>::NoPermission,
-			),
+			nesting => {
+				#[cfg(not(feature = "runtime-benchmarks"))]
+				ensure!(
+					// Permissive is only allowed for tests and internal usage of chain for now
+					old_limit.permissive || !new_limit.permissive,
+					<Error<T>>::NoPermission,
+				)
+			},
 		);
 		Ok(new_limit)
 	}
@@ -1237,7 +1242,7 @@
 	fn delete_collection_properties(amount: u32) -> Weight;
 	fn set_token_properties(amount: u32) -> Weight;
 	fn delete_token_properties(amount: u32) -> Weight;
-	fn set_property_permissions(amount: u32) -> Weight;
+	fn set_token_property_permissions(amount: u32) -> Weight;
 	fn transfer() -> Weight;
 	fn approve() -> Weight;
 	fn transfer_from() -> Weight;
@@ -1316,7 +1321,7 @@
 		token_id: TokenId,
 		property_keys: Vec<PropertyKey>,
 	) -> DispatchResultWithPostInfo;
-	fn set_property_permissions(
+	fn set_token_property_permissions(
 		&self,
 		sender: &T::CrossAccountId,
 		property_permissions: Vec<PropertyKeyPermission>,
modifiedpallets/evm-migration/src/weights.rsdiffbeforeafterboth
--- a/pallets/evm-migration/src/weights.rs
+++ b/pallets/evm-migration/src/weights.rs
@@ -3,12 +3,13 @@
 //! Autogenerated weights for pallet_evm_migration
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-03-01, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-06-15, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
 // target/release/unique-collator
 // benchmark
+// pallet
 // --pallet
 // pallet-evm-migration
 // --wasm-execution
@@ -44,23 +45,23 @@
 	// Storage: System Account (r:1 w:0)
 	// Storage: EVM AccountCodes (r:1 w:0)
 	fn begin() -> Weight {
-		(6_441_000 as Weight)
+		(6_914_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: EvmMigration MigrationPending (r:1 w:0)
 	// Storage: EVM AccountStorages (r:0 w:1)
 	fn set_data(b: u32, ) -> Weight {
-		(3_424_000 as Weight)
+		(2_875_000 as Weight)
 			// Standard Error: 0
-			.saturating_add((973_000 as Weight).saturating_mul(b as Weight))
+			.saturating_add((794_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight)))
 	}
 	// Storage: EvmMigration MigrationPending (r:1 w:1)
 	// Storage: EVM AccountCodes (r:0 w:1)
 	fn finish(b: u32, ) -> Weight {
-		(4_702_000 as Weight)
+		(6_320_000 as Weight)
 			// Standard Error: 0
 			.saturating_add((2_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
@@ -74,23 +75,23 @@
 	// Storage: System Account (r:1 w:0)
 	// Storage: EVM AccountCodes (r:1 w:0)
 	fn begin() -> Weight {
-		(6_441_000 as Weight)
+		(6_914_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: EvmMigration MigrationPending (r:1 w:0)
 	// Storage: EVM AccountStorages (r:0 w:1)
 	fn set_data(b: u32, ) -> Weight {
-		(3_424_000 as Weight)
+		(2_875_000 as Weight)
 			// Standard Error: 0
-			.saturating_add((973_000 as Weight).saturating_mul(b as Weight))
+			.saturating_add((794_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(b as Weight)))
 	}
 	// Storage: EvmMigration MigrationPending (r:1 w:1)
 	// Storage: EVM AccountCodes (r:0 w:1)
 	fn finish(b: u32, ) -> Weight {
-		(4_702_000 as Weight)
+		(6_320_000 as Weight)
 			// Standard Error: 0
 			.saturating_add((2_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
modifiedpallets/fungible/src/common.rsdiffbeforeafterboth
--- a/pallets/fungible/src/common.rs
+++ b/pallets/fungible/src/common.rs
@@ -72,7 +72,7 @@
 		0
 	}
 
-	fn set_property_permissions(_amount: u32) -> Weight {
+	fn set_token_property_permissions(_amount: u32) -> Weight {
 		// Error
 		0
 	}
@@ -302,7 +302,7 @@
 		fail!(<Error<T>>::SettingPropertiesNotAllowed)
 	}
 
-	fn set_property_permissions(
+	fn set_token_property_permissions(
 		&self,
 		_sender: &T::CrossAccountId,
 		_property_permissions: Vec<PropertyKeyPermission>,
modifiedpallets/fungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/fungible/src/erc.rs
+++ b/pallets/fungible/src/erc.rs
@@ -152,12 +152,15 @@
 		via("CollectionHandle<T>", common_mut, Collection)
 	)
 )]
-impl<T: Config> FungibleHandle<T> {}
+impl<T: Config> FungibleHandle<T> where T::AccountId: From<[u8; 32]> {}
 
 generate_stubgen!(gen_impl, UniqueFungibleCall<()>, true);
 generate_stubgen!(gen_iface, UniqueFungibleCall<()>, false);
 
-impl<T: Config> CommonEvmHandler for FungibleHandle<T> {
+impl<T: Config> CommonEvmHandler for FungibleHandle<T>
+where
+	T::AccountId: From<[u8; 32]>,
+{
 	const CODE: &'static [u8] = include_bytes!("./stubs/UniqueFungible.raw");
 
 	fn call(self, handle: &mut impl PrecompileHandle) -> Option<PrecompileResult> {
modifiedpallets/fungible/src/weights.rsdiffbeforeafterboth
--- a/pallets/fungible/src/weights.rs
+++ b/pallets/fungible/src/weights.rs
@@ -3,12 +3,13 @@
 //! Autogenerated weights for pallet_fungible
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-03-01, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-06-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
 // target/release/unique-collator
 // benchmark
+// pallet
 // --pallet
 // pallet-fungible
 // --wasm-execution
@@ -18,7 +19,7 @@
 // --template
 // .maintain/frame-weight-template.hbs
 // --steps=50
-// --repeat=200
+// --repeat=80
 // --heap-pages=4096
 // --output=./pallets/fungible/src/weights.rs
 
@@ -47,16 +48,16 @@
 	// Storage: Fungible TotalSupply (r:1 w:1)
 	// Storage: Fungible Balance (r:1 w:1)
 	fn create_item() -> Weight {
-		(14_407_000 as Weight)
+		(17_828_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Fungible TotalSupply (r:1 w:1)
 	// Storage: Fungible Balance (r:4 w:4)
 	fn create_multiple_items_ex(b: u32, ) -> Weight {
-		(13_030_000 as Weight)
-			// Standard Error: 1_000
-			.saturating_add((3_779_000 as Weight).saturating_mul(b as Weight))
+		(17_574_000 as Weight)
+			// Standard Error: 3_000
+			.saturating_add((4_288_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
@@ -65,28 +66,27 @@
 	// Storage: Fungible TotalSupply (r:1 w:1)
 	// Storage: Fungible Balance (r:1 w:1)
 	fn burn_item() -> Weight {
-		(15_565_000 as Weight)
+		(18_417_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
-
 	// Storage: Fungible Balance (r:2 w:2)
 	fn transfer() -> Weight {
-		(17_713_000 as Weight)
+		(20_090_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Fungible Balance (r:1 w:0)
 	// Storage: Fungible Allowance (r:0 w:1)
 	fn approve() -> Weight {
-		(14_834_000 as Weight)
+		(17_532_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Fungible Allowance (r:1 w:1)
 	// Storage: Fungible Balance (r:2 w:2)
 	fn transfer_from() -> Weight {
-		(25_189_000 as Weight)
+		(29_869_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(3 as Weight))
 	}
@@ -94,7 +94,7 @@
 	// Storage: Fungible TotalSupply (r:1 w:1)
 	// Storage: Fungible Balance (r:1 w:1)
 	fn burn_from() -> Weight {
-		(24_065_000 as Weight)
+		(27_835_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(3 as Weight))
 	}
@@ -105,16 +105,16 @@
 	// Storage: Fungible TotalSupply (r:1 w:1)
 	// Storage: Fungible Balance (r:1 w:1)
 	fn create_item() -> Weight {
-		(14_407_000 as Weight)
+		(17_828_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Fungible TotalSupply (r:1 w:1)
 	// Storage: Fungible Balance (r:4 w:4)
 	fn create_multiple_items_ex(b: u32, ) -> Weight {
-		(13_030_000 as Weight)
-			// Standard Error: 1_000
-			.saturating_add((3_779_000 as Weight).saturating_mul(b as Weight))
+		(17_574_000 as Weight)
+			// Standard Error: 3_000
+			.saturating_add((4_288_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
@@ -123,28 +123,27 @@
 	// Storage: Fungible TotalSupply (r:1 w:1)
 	// Storage: Fungible Balance (r:1 w:1)
 	fn burn_item() -> Weight {
-		(15_565_000 as Weight)
+		(18_417_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
-
 	// Storage: Fungible Balance (r:2 w:2)
 	fn transfer() -> Weight {
-		(17_713_000 as Weight)
+		(20_090_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Fungible Balance (r:1 w:0)
 	// Storage: Fungible Allowance (r:0 w:1)
 	fn approve() -> Weight {
-		(14_834_000 as Weight)
+		(17_532_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Fungible Allowance (r:1 w:1)
 	// Storage: Fungible Balance (r:2 w:2)
 	fn transfer_from() -> Weight {
-		(25_189_000 as Weight)
+		(29_869_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
 	}
@@ -152,7 +151,7 @@
 	// Storage: Fungible TotalSupply (r:1 w:1)
 	// Storage: Fungible Balance (r:1 w:1)
 	fn burn_from() -> Weight {
-		(24_065_000 as Weight)
+		(27_835_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
 	}
modifiedpallets/nonfungible/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/benchmarking.rs
+++ b/pallets/nonfungible/src/benchmarking.rs
@@ -147,7 +147,7 @@
 		<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&burner))?;
 	}: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item, &Unlimited)?}
 
-	set_property_permissions {
+	set_token_property_permissions {
 		let b in 0..MAX_PROPERTIES_PER_ITEM;
 		bench_init!{
 			owner: sub; collection: collection(owner);
@@ -161,7 +161,7 @@
 				token_owner: false,
 			},
 		}).collect::<Vec<_>>();
-	}: {<Pallet<T>>::set_property_permissions(&collection, &owner, perms)?}
+	}: {<Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?}
 
 	set_token_properties {
 		let b in 0..MAX_PROPERTIES_PER_ITEM;
@@ -177,7 +177,7 @@
 				token_owner: true,
 			},
 		}).collect::<Vec<_>>();
-		<Pallet<T>>::set_property_permissions(&collection, &owner, perms)?;
+		<Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;
 		let props = (0..b).map(|k| Property {
 			key: property_key(k as usize),
 			value: property_value(),
@@ -199,7 +199,7 @@
 				token_owner: true,
 			},
 		}).collect::<Vec<_>>();
-		<Pallet<T>>::set_property_permissions(&collection, &owner, perms)?;
+		<Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;
 		let props = (0..b).map(|k| Property {
 			key: property_key(k as usize),
 			value: property_value(),
modifiedpallets/nonfungible/src/common.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/common.rs
+++ b/pallets/nonfungible/src/common.rs
@@ -89,8 +89,8 @@
 		<SelfWeightOf<T>>::delete_token_properties(amount)
 	}
 
-	fn set_property_permissions(amount: u32) -> Weight {
-		<SelfWeightOf<T>>::set_property_permissions(amount)
+	fn set_token_property_permissions(amount: u32) -> Weight {
+		<SelfWeightOf<T>>::set_token_property_permissions(amount)
 	}
 
 	fn transfer() -> Weight {
@@ -242,16 +242,16 @@
 		)
 	}
 
-	fn set_property_permissions(
+	fn set_token_property_permissions(
 		&self,
 		sender: &T::CrossAccountId,
 		property_permissions: Vec<PropertyKeyPermission>,
 	) -> DispatchResultWithPostInfo {
 		let weight =
-			<CommonWeights<T>>::set_property_permissions(property_permissions.len() as u32);
+			<CommonWeights<T>>::set_token_property_permissions(property_permissions.len() as u32);
 
 		with_weight(
-			<Pallet<T>>::set_property_permissions(self, sender, property_permissions),
+			<Pallet<T>>::set_token_property_permissions(self, sender, property_permissions),
 			weight,
 		)
 	}
modifiedpallets/nonfungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/erc.rs
+++ b/pallets/nonfungible/src/erc.rs
@@ -583,13 +583,16 @@
 		TokenProperties,
 	)
 )]
-impl<T: Config> NonfungibleHandle<T> {}
+impl<T: Config> NonfungibleHandle<T> where T::AccountId: From<[u8; 32]> {}
 
 // Not a tests, but code generators
 generate_stubgen!(gen_impl, UniqueNFTCall<()>, true);
 generate_stubgen!(gen_iface, UniqueNFTCall<()>, false);
 
-impl<T: Config> CommonEvmHandler for NonfungibleHandle<T> {
+impl<T: Config> CommonEvmHandler for NonfungibleHandle<T>
+where
+	T::AccountId: From<[u8; 32]>,
+{
 	const CODE: &'static [u8] = include_bytes!("./stubs/UniqueNFT.raw");
 
 	fn call(self, handle: &mut impl PrecompileHandle) -> Option<PrecompileResult> {
modifiedpallets/nonfungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -28,7 +28,7 @@
 use up_data_structs::{
 	AccessMode, CollectionId, CustomDataLimit, TokenId, CreateCollectionData, CreateNftExData,
 	mapping::TokenAddressMapping, budget::Budget, Property, PropertyPermission, PropertyKey,
-	PropertyKeyPermission, Properties, PropertyScope, TrySetProperty, TokenChild,
+	PropertyKeyPermission, Properties, PropertyScope, TrySetProperty, TokenChild, AuxPropertyValue,
 };
 use pallet_evm::{account::CrossAccountId, Pallet as PalletEvm};
 use pallet_common::{
@@ -124,6 +124,19 @@
 		OnEmpty = up_data_structs::TokenProperties,
 	>;
 
+	#[pallet::storage]
+	#[pallet::getter(fn token_aux_property)]
+	pub type TokenAuxProperties<T: Config> = StorageNMap<
+		Key = (
+			Key<Twox64Concat, CollectionId>,
+			Key<Twox64Concat, TokenId>,
+			Key<Twox64Concat, PropertyScope>,
+			Key<Twox64Concat, PropertyKey>,
+		),
+		Value = AuxPropertyValue,
+		QueryKind = OptionQuery,
+	>;
+
 	/// Used to enumerate tokens owned by account
 	#[pallet::storage]
 	pub type Owned<T: Config> = StorageNMap<
@@ -294,6 +307,33 @@
 		Ok(())
 	}
 
+	pub fn try_mutate_token_aux_property<R, E>(
+		collection_id: CollectionId,
+		token_id: TokenId,
+		scope: PropertyScope,
+		key: PropertyKey,
+		f: impl FnOnce(&mut Option<AuxPropertyValue>) -> Result<R, E>,
+	) -> Result<R, E> {
+		<TokenAuxProperties<T>>::try_mutate((collection_id, token_id, scope, key), f)
+	}
+
+	pub fn remove_token_aux_property(
+		collection_id: CollectionId,
+		token_id: TokenId,
+		scope: PropertyScope,
+		key: PropertyKey,
+	) {
+		<TokenAuxProperties<T>>::remove((collection_id, token_id, scope, key));
+	}
+
+	pub fn iterate_token_aux_properties(
+		collection_id: CollectionId,
+		token_id: TokenId,
+		scope: PropertyScope,
+	) -> impl Iterator<Item = (PropertyKey, AuxPropertyValue)> {
+		<TokenAuxProperties<T>>::iter_prefix((collection_id, token_id, scope))
+	}
+
 	pub fn current_token_id(collection_id: CollectionId) -> TokenId {
 		TokenId(<TokensMinted<T>>::get(collection_id))
 	}
@@ -375,6 +415,7 @@
 		<TokensBurnt<T>>::insert(collection.id, burnt);
 		<TokenData<T>>::remove((collection.id, token));
 		<TokenProperties<T>>::remove((collection.id, token));
+		<TokenAuxProperties<T>>::remove_prefix((collection.id, token), None);
 		let old_spender = <Allowance<T>>::take((collection.id, token));
 
 		if let Some(old_spender) = old_spender {
@@ -594,12 +635,12 @@
 		<PalletCommon<T>>::delete_collection_properties(collection, sender, property_keys)
 	}
 
-	pub fn set_property_permissions(
+	pub fn set_token_property_permissions(
 		collection: &CollectionHandle<T>,
 		sender: &T::CrossAccountId,
 		property_permissions: Vec<PropertyKeyPermission>,
 	) -> DispatchResult {
-		<PalletCommon<T>>::set_property_permissions(collection, sender, property_permissions)
+		<PalletCommon<T>>::set_token_property_permissions(collection, sender, property_permissions)
 	}
 
 	pub fn set_property_permission(
@@ -1008,7 +1049,7 @@
 				nesting_budget,
 			)? {
 			// Pass
-		} else if nesting.admin && handle.is_owner_or_admin(&sender) {
+		} else if nesting.collection_admin && handle.is_owner_or_admin(&sender) {
 			// Pass
 		} else {
 			fail!(<CommonError<T>>::UserIsNotAllowedToNest);
modifiedpallets/nonfungible/src/stubs/UniqueNFT.rawdiffbeforeafterboth

binary blob — no preview

modifiedpallets/nonfungible/src/stubs/UniqueNFT.soldiffbeforeafterboth
--- a/pallets/nonfungible/src/stubs/UniqueNFT.sol
+++ b/pallets/nonfungible/src/stubs/UniqueNFT.sol
@@ -297,7 +297,40 @@
 	}
 }
 
-// Selector: 6aea9834
+// Selector: 780e9d63
+contract ERC721Enumerable is Dummy, ERC165 {
+	// Selector: tokenByIndex(uint256) 4f6ccce7
+	function tokenByIndex(uint256 index) public view returns (uint256) {
+		require(false, stub_error);
+		index;
+		dummy;
+		return 0;
+	}
+
+	// Not implemented
+	//
+	// Selector: tokenOfOwnerByIndex(address,uint256) 2f745c59
+	function tokenOfOwnerByIndex(address owner, uint256 index)
+		public
+		view
+		returns (uint256)
+	{
+		require(false, stub_error);
+		owner;
+		index;
+		dummy;
+		return 0;
+	}
+
+	// Selector: totalSupply() 18160ddd
+	function totalSupply() public view returns (uint256) {
+		require(false, stub_error);
+		dummy;
+		return 0;
+	}
+}
+
+// Selector: 7d9262e6
 contract Collection is Dummy, ERC165 {
 	// Selector: setCollectionProperty(string,bytes) 2f073f66
 	function setCollectionProperty(string memory key, bytes memory value)
@@ -366,6 +399,20 @@
 		return 0x0000000000000000000000000000000000000000;
 	}
 
+	// Selector: addCollectionAdminSubstrate(uint256) 5730062b
+	function addCollectionAdminSubstrate(uint256 newAdmin) public view {
+		require(false, stub_error);
+		newAdmin;
+		dummy;
+	}
+
+	// Selector: removeCollectionAdminSubstrate(uint256) 4048fcf9
+	function removeCollectionAdminSubstrate(uint256 newAdmin) public view {
+		require(false, stub_error);
+		newAdmin;
+		dummy;
+	}
+
 	// Selector: addCollectionAdmin(address) 92e462c7
 	function addCollectionAdmin(address newAdmin) public view {
 		require(false, stub_error);
@@ -423,39 +470,6 @@
 		require(false, stub_error);
 		mode;
 		dummy = 0;
-	}
-}
-
-// Selector: 780e9d63
-contract ERC721Enumerable is Dummy, ERC165 {
-	// Selector: tokenByIndex(uint256) 4f6ccce7
-	function tokenByIndex(uint256 index) public view returns (uint256) {
-		require(false, stub_error);
-		index;
-		dummy;
-		return 0;
-	}
-
-	// Not implemented
-	//
-	// Selector: tokenOfOwnerByIndex(address,uint256) 2f745c59
-	function tokenOfOwnerByIndex(address owner, uint256 index)
-		public
-		view
-		returns (uint256)
-	{
-		require(false, stub_error);
-		owner;
-		index;
-		dummy;
-		return 0;
-	}
-
-	// Selector: totalSupply() 18160ddd
-	function totalSupply() public view returns (uint256) {
-		require(false, stub_error);
-		dummy;
-		return 0;
 	}
 }
 
modifiedpallets/nonfungible/src/weights.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/weights.rs
+++ b/pallets/nonfungible/src/weights.rs
@@ -3,12 +3,13 @@
 //! Autogenerated weights for pallet_nonfungible
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-03-01, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-06-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
 // target/release/unique-collator
 // benchmark
+// pallet
 // --pallet
 // pallet-nonfungible
 // --wasm-execution
@@ -18,7 +19,7 @@
 // --template
 // .maintain/frame-weight-template.hbs
 // --steps=50
-// --repeat=200
+// --repeat=80
 // --heap-pages=4096
 // --output=./pallets/nonfungible/src/weights.rs
 
@@ -42,9 +43,9 @@
 	fn approve() -> Weight;
 	fn transfer_from() -> Weight;
 	fn burn_from() -> Weight;
-	fn set_property_permissions(b: u32) -> Weight;
-	fn set_token_properties(b: u32) -> Weight;
-	fn delete_token_properties(b: u32) -> Weight;
+	fn set_token_property_permissions(b: u32, ) -> Weight;
+	fn set_token_properties(b: u32, ) -> Weight;
+	fn delete_token_properties(b: u32, ) -> Weight;
 }
 
 /// Weights for pallet_nonfungible using the Substrate node and recommended hardware.
@@ -55,7 +56,7 @@
 	// Storage: Nonfungible TokenData (r:0 w:1)
 	// Storage: Nonfungible Owned (r:0 w:1)
 	fn create_item() -> Weight {
-		(18_450_000 as Weight)
+		(24_135_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
@@ -64,9 +65,9 @@
 	// Storage: Nonfungible TokenData (r:0 w:4)
 	// Storage: Nonfungible Owned (r:0 w:4)
 	fn create_multiple_items(b: u32, ) -> Weight {
-		(10_228_000 as Weight)
-			// Standard Error: 1_000
-			.saturating_add((4_392_000 as Weight).saturating_mul(b as Weight))
+		(21_952_000 as Weight)
+			// Standard Error: 5_000
+			.saturating_add((4_727_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(b as Weight)))
@@ -76,23 +77,25 @@
 	// Storage: Nonfungible TokenData (r:0 w:4)
 	// Storage: Nonfungible Owned (r:0 w:4)
 	fn create_multiple_items_ex(b: u32, ) -> Weight {
-		(6_543_000 as Weight)
-			// Standard Error: 2_000
-			.saturating_add((7_175_000 as Weight).saturating_mul(b as Weight))
+		(10_432_000 as Weight)
+			// Standard Error: 6_000
+			.saturating_add((7_383_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(b as Weight)))
 	}
 	// Storage: Nonfungible TokenData (r:1 w:1)
+	// Storage: Nonfungible TokenChildren (r:1 w:0)
 	// Storage: Nonfungible TokensBurnt (r:1 w:1)
 	// Storage: Nonfungible AccountBalance (r:1 w:1)
 	// Storage: Nonfungible Allowance (r:1 w:0)
 	// Storage: Nonfungible Owned (r:0 w:1)
+	// Storage: Nonfungible TokenProperties (r:0 w:1)
 	fn burn_item() -> Weight {
-		(24_554_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(4 as Weight))
-			.saturating_add(T::DbWeight::get().writes(4 as Weight))
+		(29_798_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(5 as Weight))
+			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
 	// Storage: Nonfungible TokenChildren (r:1 w:0)
 	// Storage: Nonfungible TokenData (r:1 w:1)
@@ -102,7 +105,7 @@
 	// Storage: Nonfungible Owned (r:0 w:1)
 	// Storage: Nonfungible TokenProperties (r:0 w:1)
 	fn burn_recursively_self_raw() -> Weight {
-		(86_136_000 as Weight)
+		(37_955_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
@@ -116,11 +119,11 @@
 	// Storage: Common CollectionById (r:1 w:0)
 	fn burn_recursively_breadth_plus_self_plus_self_per_each_raw(b: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 42_828_000
-			.saturating_add((381_478_000 as Weight).saturating_mul(b as Weight))
-			.saturating_add(T::DbWeight::get().reads(6 as Weight))
+			// Standard Error: 1_349_000
+			.saturating_add((275_145_000 as Weight).saturating_mul(b as Weight))
+			.saturating_add(T::DbWeight::get().reads(7 as Weight))
 			.saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(b as Weight)))
-			.saturating_add(T::DbWeight::get().writes(5 as Weight))
+			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 			.saturating_add(T::DbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
 	}
 	// Storage: Nonfungible TokenData (r:1 w:1)
@@ -128,14 +131,14 @@
 	// Storage: Nonfungible Allowance (r:1 w:0)
 	// Storage: Nonfungible Owned (r:0 w:2)
 	fn transfer() -> Weight {
-		(28_339_000 as Weight)
+		(27_867_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
 	// Storage: Nonfungible TokenData (r:1 w:0)
 	// Storage: Nonfungible Allowance (r:1 w:1)
 	fn approve() -> Weight {
-		(17_616_000 as Weight)
+		(18_824_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -144,25 +147,27 @@
 	// Storage: Nonfungible AccountBalance (r:2 w:2)
 	// Storage: Nonfungible Owned (r:0 w:2)
 	fn transfer_from() -> Weight {
-		(32_196_000 as Weight)
+		(32_879_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Nonfungible Allowance (r:1 w:1)
 	// Storage: Nonfungible TokenData (r:1 w:1)
+	// Storage: Nonfungible TokenChildren (r:1 w:0)
 	// Storage: Nonfungible TokensBurnt (r:1 w:1)
 	// Storage: Nonfungible AccountBalance (r:1 w:1)
 	// Storage: Nonfungible Owned (r:0 w:1)
+	// Storage: Nonfungible TokenProperties (r:0 w:1)
 	fn burn_from() -> Weight {
-		(27_580_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(4 as Weight))
-			.saturating_add(T::DbWeight::get().writes(5 as Weight))
+		(37_061_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(5 as Weight))
+			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Common CollectionPropertyPermissions (r:1 w:1)
-	fn set_property_permissions(b: u32, ) -> Weight {
+	fn set_token_property_permissions(b: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 3_432_000
-			.saturating_add((126_888_000 as Weight).saturating_mul(b as Weight))
+			// Standard Error: 57_000
+			.saturating_add((15_149_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -171,8 +176,8 @@
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
 	fn set_token_properties(b: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 158_583_000
-			.saturating_add((4_707_700_000 as Weight).saturating_mul(b as Weight))
+			// Standard Error: 2_278_000
+			.saturating_add((409_613_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -181,8 +186,8 @@
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
 	fn delete_token_properties(b: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 169_018_000
-			.saturating_add((4_783_967_000 as Weight).saturating_mul(b as Weight))
+			// Standard Error: 2_234_000
+			.saturating_add((408_185_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -195,7 +200,7 @@
 	// Storage: Nonfungible TokenData (r:0 w:1)
 	// Storage: Nonfungible Owned (r:0 w:1)
 	fn create_item() -> Weight {
-		(18_450_000 as Weight)
+		(24_135_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
@@ -204,9 +209,9 @@
 	// Storage: Nonfungible TokenData (r:0 w:4)
 	// Storage: Nonfungible Owned (r:0 w:4)
 	fn create_multiple_items(b: u32, ) -> Weight {
-		(10_228_000 as Weight)
-			// Standard Error: 1_000
-			.saturating_add((4_392_000 as Weight).saturating_mul(b as Weight))
+		(21_952_000 as Weight)
+			// Standard Error: 5_000
+			.saturating_add((4_727_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes((2 as Weight).saturating_mul(b as Weight)))
@@ -216,23 +221,25 @@
 	// Storage: Nonfungible TokenData (r:0 w:4)
 	// Storage: Nonfungible Owned (r:0 w:4)
 	fn create_multiple_items_ex(b: u32, ) -> Weight {
-		(6_543_000 as Weight)
-			// Standard Error: 2_000
-			.saturating_add((7_175_000 as Weight).saturating_mul(b as Weight))
+		(10_432_000 as Weight)
+			// Standard Error: 6_000
+			.saturating_add((7_383_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes((3 as Weight).saturating_mul(b as Weight)))
 	}
 	// Storage: Nonfungible TokenData (r:1 w:1)
+	// Storage: Nonfungible TokenChildren (r:1 w:0)
 	// Storage: Nonfungible TokensBurnt (r:1 w:1)
 	// Storage: Nonfungible AccountBalance (r:1 w:1)
 	// Storage: Nonfungible Allowance (r:1 w:0)
 	// Storage: Nonfungible Owned (r:0 w:1)
+	// Storage: Nonfungible TokenProperties (r:0 w:1)
 	fn burn_item() -> Weight {
-		(24_554_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
+		(29_798_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
 	// Storage: Nonfungible TokenChildren (r:1 w:0)
 	// Storage: Nonfungible TokenData (r:1 w:1)
@@ -242,7 +249,7 @@
 	// Storage: Nonfungible Owned (r:0 w:1)
 	// Storage: Nonfungible TokenProperties (r:0 w:1)
 	fn burn_recursively_self_raw() -> Weight {
-		(86_136_000 as Weight)
+		(37_955_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
@@ -256,11 +263,11 @@
 	// Storage: Common CollectionById (r:1 w:0)
 	fn burn_recursively_breadth_plus_self_plus_self_per_each_raw(b: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 42_828_000
-			.saturating_add((381_478_000 as Weight).saturating_mul(b as Weight))
-			.saturating_add(RocksDbWeight::get().reads(6 as Weight))
+			// Standard Error: 1_349_000
+			.saturating_add((275_145_000 as Weight).saturating_mul(b as Weight))
+			.saturating_add(RocksDbWeight::get().reads(7 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((4 as Weight).saturating_mul(b as Weight)))
-			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 			.saturating_add(RocksDbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
 	}
 	// Storage: Nonfungible TokenData (r:1 w:1)
@@ -268,14 +275,14 @@
 	// Storage: Nonfungible Allowance (r:1 w:0)
 	// Storage: Nonfungible Owned (r:0 w:2)
 	fn transfer() -> Weight {
-		(28_339_000 as Weight)
+		(27_867_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
 	// Storage: Nonfungible TokenData (r:1 w:0)
 	// Storage: Nonfungible Allowance (r:1 w:1)
 	fn approve() -> Weight {
-		(17_616_000 as Weight)
+		(18_824_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
@@ -284,25 +291,27 @@
 	// Storage: Nonfungible AccountBalance (r:2 w:2)
 	// Storage: Nonfungible Owned (r:0 w:2)
 	fn transfer_from() -> Weight {
-		(32_196_000 as Weight)
+		(32_879_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Nonfungible Allowance (r:1 w:1)
 	// Storage: Nonfungible TokenData (r:1 w:1)
+	// Storage: Nonfungible TokenChildren (r:1 w:0)
 	// Storage: Nonfungible TokensBurnt (r:1 w:1)
 	// Storage: Nonfungible AccountBalance (r:1 w:1)
 	// Storage: Nonfungible Owned (r:0 w:1)
+	// Storage: Nonfungible TokenProperties (r:0 w:1)
 	fn burn_from() -> Weight {
-		(27_580_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
+		(37_061_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Common CollectionPropertyPermissions (r:1 w:1)
-	fn set_property_permissions(b: u32, ) -> Weight {
+	fn set_token_property_permissions(b: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 3_432_000
-			.saturating_add((126_888_000 as Weight).saturating_mul(b as Weight))
+			// Standard Error: 57_000
+			.saturating_add((15_149_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
@@ -311,8 +320,8 @@
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
 	fn set_token_properties(b: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 158_583_000
-			.saturating_add((4_707_700_000 as Weight).saturating_mul(b as Weight))
+			// Standard Error: 2_278_000
+			.saturating_add((409_613_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
@@ -321,8 +330,8 @@
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
 	fn delete_token_properties(b: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 169_018_000
-			.saturating_add((4_783_967_000 as Weight).saturating_mul(b as Weight))
+			// Standard Error: 2_234_000
+			.saturating_add((408_185_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
modifiedpallets/proxy-rmrk-core/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/proxy-rmrk-core/src/benchmarking.rs
+++ b/pallets/proxy-rmrk-core/src/benchmarking.rs
@@ -6,21 +6,523 @@
 	traits::{Currency, Get},
 	BoundedVec,
 };
+use sp_runtime::Permill;
+
+use up_data_structs::*;
 
-use crate::{Config, Pallet, Call};
+use super::*;
 
 const SEED: u32 = 1;
 
 fn create_data<S: Get<u32>>() -> BoundedVec<u8, S> {
+	vec![b'A'; S::get() as usize].try_into().expect("size == S")
+}
+
+fn create_u32_array<S: Get<u32>>() -> BoundedVec<u32, S> {
 	vec![0; S::get() as usize].try_into().expect("size == S")
 }
 
+fn create_basic_resource() -> RmrkBasicResource {
+	RmrkBasicResource {
+		src: Some(create_data()),
+		metadata: Some(create_data()),
+		license: Some(create_data()),
+		thumb: Some(create_data()),
+	}
+}
+
+fn create_composable_resource() -> RmrkComposableResource {
+	RmrkComposableResource {
+		parts: create_u32_array(),
+		base: 100,
+		src: Some(create_data()),
+		metadata: Some(create_data()),
+		license: Some(create_data()),
+		thumb: Some(create_data()),
+	}
+}
+
+fn create_slot_resource() -> RmrkSlotResource {
+	RmrkSlotResource {
+		base: 100,
+		slot: 200,
+		src: Some(create_data()),
+		metadata: Some(create_data()),
+		license: Some(create_data()),
+		thumb: Some(create_data()),
+	}
+}
+
+fn create_max_resource_types_array<S: Get<u32>>(num: usize) -> BoundedVec<RmrkResourceTypes, S> {
+	vec![RmrkResourceTypes::Composable(create_composable_resource()); num]
+		.try_into()
+		.expect("num <= S")
+}
+
+fn create_max_collection<T: Config>(owner: &T::AccountId) -> DispatchResult {
+	<T as pallet_common::Config>::Currency::deposit_creating(
+		owner,
+		T::CollectionCreationPrice::get(),
+	);
+
+	let metadata = create_data();
+	let max = None;
+	let symbol = create_data();
+
+	<Pallet<T>>::create_collection(
+		RawOrigin::Signed(owner.clone()).into(),
+		metadata,
+		max,
+		symbol,
+	)
+}
+
+fn create_nft<T: Config>(owner: &T::AccountId, collection_id: RmrkCollectionId) -> DispatchResult {
+	let royalty_recipient = Some(owner.clone());
+	let royalty_amount = Some(Permill::from_percent(25));
+	let metadata = create_data();
+	let transferable = true;
+
+	<Pallet<T>>::mint_nft(
+		RawOrigin::Signed(owner.clone()).into(),
+		None,
+		collection_id,
+		royalty_recipient,
+		royalty_amount,
+		metadata,
+		transferable,
+		None,
+	)
+}
+
+struct NftBuilder {
+	collection_id: RmrkCollectionId,
+	current_nft_id: RmrkNftId,
+}
+
+impl NftBuilder {
+	fn new(collection_id: RmrkCollectionId) -> Self {
+		Self {
+			collection_id,
+			current_nft_id: 0,
+		}
+	}
+
+	fn build<T: Config>(&mut self, owner: &T::AccountId) -> Result<RmrkNftId, DispatchError> {
+		create_nft::<T>(owner, self.collection_id)?;
+		self.current_nft_id += 1;
+
+		Ok(self.current_nft_id)
+	}
+
+	fn build_tower<T: Config>(
+		&mut self,
+		owner: &T::AccountId,
+		height: u32,
+	) -> Result<(RmrkNftId, RmrkNftId), DispatchError> {
+		self.build::<T>(owner)?;
+
+		let root_nft_id = self.current_nft_id;
+		let mut prev_nft_id = root_nft_id;
+
+		for _ in 0..height {
+			self.build::<T>(owner)?;
+
+			let new_owner =
+				<RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(
+					self.collection_id,
+					prev_nft_id,
+				);
+
+			<Pallet<T>>::send(
+				RawOrigin::Signed(owner.clone()).into(),
+				self.collection_id,
+				self.current_nft_id,
+				new_owner,
+			)?;
+
+			prev_nft_id = self.current_nft_id;
+		}
+
+		let deepest_nft_id = self.current_nft_id;
+
+		Ok((root_nft_id, deepest_nft_id))
+	}
+
+	fn build_wide_tree<T: Config>(
+		&mut self,
+		owner: &T::AccountId,
+		width: u32,
+	) -> Result<RmrkNftId, DispatchError> {
+		self.build::<T>(owner)?;
+
+		let root_nft_id = self.current_nft_id;
+
+		let root_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(
+			self.collection_id,
+			root_nft_id,
+		);
+
+		for _ in 0..width {
+			self.build::<T>(owner)?;
+
+			<Pallet<T>>::send(
+				RawOrigin::Signed(owner.clone()).into(),
+				self.collection_id,
+				self.current_nft_id,
+				root_owner.clone(),
+			)?;
+		}
+
+		Ok(root_nft_id)
+	}
+}
+
 benchmarks! {
 	create_collection {
 		let caller = account("caller", 0, SEED);
 		<T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());
 		let metadata = create_data();
-		// TODO: Fix CollectionTokenPrefixLimitExceeded with create_data
-		let symbol = vec![].try_into().expect("0 <= x");
-	}: _(RawOrigin::Signed(caller), metadata, None, symbol)
+		let max = None;
+		let symbol = create_data();
+	}: _(RawOrigin::Signed(caller), metadata, max, symbol)
+
+	destroy_collection {
+		let caller = account("caller", 0, SEED);
+
+		create_max_collection::<T>(&caller)?;
+		let collection_id = 0;
+	}: _(RawOrigin::Signed(caller), collection_id)
+
+	change_collection_issuer {
+		let caller: T::AccountId = account("caller", 0, SEED);
+
+		create_max_collection::<T>(&caller)?;
+		let collection_id = 0;
+
+		let new_owner: T::AccountId = account("new_owner", 0, SEED);
+
+		let new_owner_source = T::Lookup::unlookup(new_owner);
+	}: _(RawOrigin::Signed(caller), collection_id, new_owner_source)
+
+	lock_collection {
+		let caller: T::AccountId = account("caller", 0, SEED);
+
+		create_max_collection::<T>(&caller)?;
+		let collection_id = 0;
+	}: _(RawOrigin::Signed(caller), collection_id)
+
+	mint_nft {
+		let b in 0..100;
+
+		let caller: T::AccountId = account("caller", 0, SEED);
+
+		create_max_collection::<T>(&caller)?;
+		let collection_id = 0;
+		let owner = caller.clone();
+
+		let royalty_recipient = Some(caller.clone());
+		let royalty_amount = Some(Permill::from_percent(25));
+		let metadata = create_data();
+		let transferable = true;
+	}:  _(
+		RawOrigin::Signed(caller),
+		None,
+		collection_id,
+		royalty_recipient,
+		royalty_amount,
+		metadata,
+		transferable,
+		Some(create_max_resource_types_array(b as usize))
+	)
+
+	burn_nft {
+		let b in 0..200;
+
+		let caller: T::AccountId = account("caller", 0, SEED);
+		create_max_collection::<T>(&caller)?;
+		let collection_id = 0;
+
+		let mut nft_builder = NftBuilder::new(collection_id);
+		let root_nft_id  = nft_builder.build_wide_tree::<T>(&caller, b)?;
+		let max_burns = b + 1;
+	}: _(
+		RawOrigin::Signed(caller),
+		collection_id,
+		root_nft_id,
+		max_burns
+	)
+
+	send {
+		let caller: T::AccountId = account("caller", 0, SEED);
+		create_max_collection::<T>(&caller)?;
+		let collection_id = 0;
+
+		let mut nft_builder = NftBuilder::new(collection_id);
+		let src_nft_id = nft_builder.build::<T>(&caller)?;
+		let (_, target_nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 2)?;
+	}: _(
+		RawOrigin::Signed(caller),
+		collection_id,
+		src_nft_id,
+		<RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(collection_id, target_nft_id)
+	)
+
+	accept_nft {
+		let caller: T::AccountId = account("caller", 0, SEED);
+		let sender: T::AccountId = account("sender", 0, SEED);
+
+		create_max_collection::<T>(&sender)?;
+		let src_collection_id = 0;
+
+		create_max_collection::<T>(&caller)?;
+		let target_collection_id = 1;
+
+		let mut src_nft_builder = NftBuilder::new(src_collection_id);
+		let src_nft_id = src_nft_builder.build::<T>(&sender)?;
+
+		let mut target_nft_builder = NftBuilder::new(target_collection_id);
+		let fake_target_nft_id = target_nft_builder.build::<T>(&caller)?;
+		let (_, target_nft_id) = target_nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;
+
+		let new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(
+			target_collection_id,
+			fake_target_nft_id
+		);
+
+		let actual_new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(
+			target_collection_id,
+			target_nft_id
+		);
+
+		<Pallet<T>>::send(
+			RawOrigin::Signed(sender.clone()).into(),
+			src_collection_id,
+			src_nft_id,
+			new_owner,
+		)?;
+	}: _(
+		RawOrigin::Signed(caller),
+		src_collection_id,
+		src_nft_id,
+		actual_new_owner
+	)
+
+	reject_nft {
+		let caller: T::AccountId = account("caller", 0, SEED);
+		let sender: T::AccountId = account("sender", 0, SEED);
+
+		create_max_collection::<T>(&sender)?;
+		let src_collection_id = 0;
+
+		create_max_collection::<T>(&caller)?;
+		let target_collection_id = 1;
+
+		let mut src_nft_builder = NftBuilder::new(src_collection_id);
+		let (src_root_nft_id, _) = src_nft_builder.build_tower::<T>(&sender, NESTING_BUDGET - 1)?;
+
+		let mut target_nft_builder = NftBuilder::new(target_collection_id);
+		let target_nft_id = target_nft_builder.build::<T>(&caller)?;
+
+		let new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::CollectionAndNftTuple(
+			target_collection_id,
+			target_nft_id
+		);
+
+		<Pallet<T>>::send(
+			RawOrigin::Signed(sender.clone()).into(),
+			src_collection_id,
+			src_root_nft_id,
+			new_owner,
+		)?;
+	}: _(
+		RawOrigin::Signed(caller),
+		src_collection_id,
+		src_root_nft_id
+	)
+
+	set_property {
+		let caller: T::AccountId = account("caller", 0, SEED);
+		create_max_collection::<T>(&caller)?;
+		let collection_id = 0;
+
+		let mut nft_builder = NftBuilder::new(collection_id);
+		let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;
+
+		let key = create_data();
+		let value = create_data();
+	}: _(
+		RawOrigin::Signed(caller),
+		collection_id,
+		Some(nft_id),
+		key,
+		value
+	)
+
+	set_priority {
+		let caller: T::AccountId = account("caller", 0, SEED);
+		create_max_collection::<T>(&caller)?;
+		let collection_id = 0;
+
+		let mut nft_builder = NftBuilder::new(collection_id);
+		let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;
+		let priorities = create_u32_array();
+	}: _(
+		RawOrigin::Signed(caller),
+		collection_id,
+		nft_id,
+		priorities
+	)
+
+	add_basic_resource {
+		let caller: T::AccountId = account("caller", 0, SEED);
+
+		create_max_collection::<T>(&caller)?;
+		let collection_id = 0;
+
+		let mut nft_builder = NftBuilder::new(collection_id);
+		let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;
+		let resource = create_basic_resource();
+	}: _(
+		RawOrigin::Signed(caller),
+		collection_id,
+		nft_id,
+		resource
+	)
+
+	add_composable_resource {
+		let caller: T::AccountId = account("caller", 0, SEED);
+
+		create_max_collection::<T>(&caller)?;
+		let collection_id = 0;
+
+		let mut nft_builder = NftBuilder::new(collection_id);
+		let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;
+		let resource = create_composable_resource();
+	}: _(
+		RawOrigin::Signed(caller),
+		collection_id,
+		nft_id,
+		resource
+	)
+
+	add_slot_resource {
+		let caller: T::AccountId = account("caller", 0, SEED);
+
+		create_max_collection::<T>(&caller)?;
+		let collection_id = 0;
+
+		let mut nft_builder = NftBuilder::new(collection_id);
+		let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;
+		let resource = create_slot_resource();
+	}: _(
+		RawOrigin::Signed(caller),
+		collection_id,
+		nft_id,
+		resource
+	)
+
+	remove_resource {
+		let caller: T::AccountId = account("caller", 0, SEED);
+
+		create_max_collection::<T>(&caller)?;
+		let collection_id = 0;
+
+		let mut nft_builder = NftBuilder::new(collection_id);
+		let (_, nft_id) = nft_builder.build_tower::<T>(&caller, NESTING_BUDGET - 1)?;
+		let resource = create_basic_resource();
+
+		<Pallet<T>>::add_basic_resource(
+			RawOrigin::Signed(caller.clone()).into(),
+			collection_id,
+			nft_id,
+			resource
+		)?;
+
+		let resource_id = 0;
+	}: _(
+		RawOrigin::Signed(caller),
+		collection_id,
+		nft_id,
+		resource_id
+	)
+
+	accept_resource {
+		let caller: T::AccountId = account("caller", 0, SEED);
+		let admin: T::AccountId = account("admin", 0, SEED);
+
+		create_max_collection::<T>(&admin)?;
+		let collection_id = 0;
+
+		let mut nft_builder = NftBuilder::new(collection_id);
+		let root_nft_id = 1;
+		let (_, nested_nft_id) = nft_builder.build_tower::<T>(&admin, NESTING_BUDGET - 1)?;
+		let resource = create_basic_resource();
+
+		let new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::AccountId(caller.clone());
+
+		<Pallet<T>>::send(
+			RawOrigin::Signed(admin.clone()).into(),
+			collection_id,
+			root_nft_id,
+			new_owner,
+		)?;
+
+		<Pallet<T>>::add_basic_resource(
+			RawOrigin::Signed(admin.clone()).into(),
+			collection_id,
+			nested_nft_id,
+			resource
+		)?;
+
+		let resource_id = 0;
+	}: _(
+		RawOrigin::Signed(caller),
+		collection_id,
+		nested_nft_id,
+		resource_id
+	)
+
+	accept_resource_removal {
+		let caller: T::AccountId = account("caller", 0, SEED);
+		let admin: T::AccountId = account("admin", 0, SEED);
+
+		create_max_collection::<T>(&admin)?;
+		let collection_id = 0;
+
+		let mut nft_builder = NftBuilder::new(collection_id);
+		let root_nft_id = 1;
+		let (_, nested_nft_id) = nft_builder.build_tower::<T>(&admin, NESTING_BUDGET - 1)?;
+		let resource = create_basic_resource();
+
+		<Pallet<T>>::add_basic_resource(
+			RawOrigin::Signed(admin.clone()).into(),
+			collection_id,
+			nested_nft_id,
+			resource
+		)?;
+
+		let resource_id = 0;
+
+		let new_owner = <RmrkAccountIdOrCollectionNftTuple<T::AccountId>>::AccountId(caller.clone());
+
+		<Pallet<T>>::send(
+			RawOrigin::Signed(admin.clone()).into(),
+			collection_id,
+			root_nft_id,
+			new_owner,
+		)?;
+
+		<Pallet<T>>::remove_resource(
+			RawOrigin::Signed(admin).into(),
+			collection_id,
+			nested_nft_id,
+			resource_id
+		)?;
+	}: _(
+		RawOrigin::Signed(caller),
+		collection_id,
+		nested_nft_id,
+		resource_id
+	)
 }
modifiedpallets/proxy-rmrk-core/src/lib.rsdiffbeforeafterboth
--- a/pallets/proxy-rmrk-core/src/lib.rs
+++ b/pallets/proxy-rmrk-core/src/lib.rs
@@ -35,6 +35,7 @@
 pub mod benchmarking;
 pub mod misc;
 pub mod property;
+pub mod rpc;
 pub mod weights;
 
 pub type SelfWeightOf<T> = <T as Config>::WeightInfo;
@@ -45,7 +46,7 @@
 
 use RmrkProperty::*;
 
-const NESTING_BUDGET: u32 = 5;
+pub const NESTING_BUDGET: u32 = 5;
 
 #[frame_support::pallet]
 pub mod pallet {
@@ -67,10 +68,6 @@
 	#[pallet::storage]
 	pub type UniqueCollectionId<T: Config> =
 		StorageMap<_, Twox64Concat, RmrkCollectionId, CollectionId, ValueQuery>;
-
-	#[pallet::storage]
-	pub type RmrkInernalCollectionId<T: Config> =
-		StorageMap<_, Twox64Concat, CollectionId, RmrkCollectionId, ValueQuery>;
 
 	#[pallet::pallet]
 	#[pallet::generate_store(pub(super) trait Store)]
@@ -158,6 +155,8 @@
 		NftTypeEncodeError,
 		RmrkPropertyKeyIsTooLong,
 		RmrkPropertyValueIsTooLong,
+		RmrkPropertyIsNotFound,
+		UnableToDecodeRmrkData,
 
 		/* RMRK compatible events */
 		CollectionNotEmpty,
@@ -171,7 +170,9 @@
 		CannotSendToDescendentOrSelf,
 		CannotAcceptNonOwnedNft,
 		CannotRejectNonOwnedNft,
+		CannotRejectNonPendingNft,
 		ResourceNotPending,
+		NoAvailableResourceId,
 	}
 
 	#[pallet::call]
@@ -202,7 +203,7 @@
 				permissions: Some(CollectionPermissions {
 					nesting: Some(NestingPermissions {
 						token_owner: true,
-						admin: false,
+						collection_admin: false,
 						restricted: None,
 
 						permissive: false,
@@ -224,8 +225,13 @@
 			let rmrk_collection_id = <CollectionIndex<T>>::get();
 
 			<UniqueCollectionId<T>>::insert(rmrk_collection_id, unique_collection_id);
-			<RmrkInernalCollectionId<T>>::insert(unique_collection_id, rmrk_collection_id);
 
+			<PalletCommon<T>>::set_scoped_collection_property(
+				unique_collection_id,
+				PropertyScope::Rmrk,
+				Self::rmrk_property(RmrkInternalCollectionId, &rmrk_collection_id)?,
+			)?;
+
 			<CollectionIndex<T>>::mutate(|n| *n += 1);
 
 			Self::deposit_event(Event::CollectionCreated {
@@ -237,8 +243,8 @@
 		}
 
 		/// destroy collection
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::destroy_collection())]
 		pub fn destroy_collection(
 			origin: OriginFor<T>,
 			collection_id: RmrkCollectionId,
@@ -269,8 +275,8 @@
 		/// - `origin`: sender of the transaction
 		/// - `collection_id`: collection id of the nft to change issuer of
 		/// - `new_issuer`: Collection's new issuer
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::change_collection_issuer())]
 		pub fn change_collection_issuer(
 			origin: OriginFor<T>,
 			collection_id: RmrkCollectionId,
@@ -300,8 +306,8 @@
 		}
 
 		/// lock collection
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::lock_collection())]
 		pub fn lock_collection(
 			origin: OriginFor<T>,
 			collection_id: RmrkCollectionId,
@@ -341,19 +347,22 @@
 		/// - `royalty`: Permillage reward from each trade for the Recipient
 		/// - `metadata`: Arbitrary data about an nft, e.g. IPFS hash
 		/// - `transferable`: Ability to transfer this NFT
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::mint_nft(resources.as_ref().map(|r| r.len() as u32).unwrap_or(0)))]
 		pub fn mint_nft(
 			origin: OriginFor<T>,
-			owner: T::AccountId,
+			owner: Option<T::AccountId>,
 			collection_id: RmrkCollectionId,
 			recipient: Option<T::AccountId>,
 			royalty_amount: Option<Permill>,
 			metadata: RmrkString,
 			transferable: bool,
+			resources: Option<BoundedVec<RmrkResourceTypes, MaxResourcesOnMint>>,
 		) -> DispatchResult {
 			let sender = ensure_signed(origin)?;
-			let sender = T::CrossAccountId::from_sub(sender);
+			let cross_sender = T::CrossAccountId::from_sub(sender.clone());
+
+			let owner = owner.unwrap_or(sender.clone());
 			let cross_owner = T::CrossAccountId::from_sub(owner.clone());
 
 			let collection = Self::get_typed_nft_collection(
@@ -368,7 +377,7 @@
 			});
 
 			let nft_id = Self::create_nft(
-				&sender,
+				&cross_sender,
 				&cross_owner,
 				&collection,
 				[
@@ -378,21 +387,8 @@
 					Self::rmrk_property(RoyaltyInfo, &royalty_info)?,
 					Self::rmrk_property(Metadata, &metadata)?,
 					Self::rmrk_property(Equipped, &false)?,
-					Self::rmrk_property(
-						ResourceCollection,
-						&Self::init_collection(
-							sender.clone(),
-							CreateCollectionData {
-								..Default::default()
-							},
-							[Self::rmrk_property(
-								CollectionType,
-								&misc::CollectionType::Resource,
-							)?]
-							.into_iter(),
-						)?,
-					)?, // todo possibly add limits to the collection if rmrk warrants them
 					Self::rmrk_property(ResourcePriorities, &<Vec<u8>>::new())?,
+					Self::rmrk_property(NextResourceId, &(0 as RmrkResourceId))?,
 				]
 				.into_iter(),
 			)
@@ -401,6 +397,12 @@
 				err => Self::map_unique_err_to_proxy(err),
 			})?;
 
+			if let Some(resources) = resources {
+				for resource in resources {
+					Self::resource_add(sender.clone(), collection.id, nft_id, resource)?;
+				}
+			}
+
 			Self::deposit_event(Event::NftMinted {
 				owner,
 				collection_id,
@@ -411,12 +413,13 @@
 		}
 
 		/// burn nft
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::burn_nft(*max_burns))]
 		pub fn burn_nft(
 			origin: OriginFor<T>,
 			collection_id: RmrkCollectionId,
 			nft_id: RmrkNftId,
+			max_burns: u32,
 		) -> DispatchResult {
 			let sender = ensure_signed(origin)?;
 			let cross_sender = T::CrossAccountId::from_sub(sender.clone());
@@ -431,8 +434,10 @@
 				cross_sender,
 				Self::unique_collection_id(collection_id)?,
 				nft_id.into(),
+				max_burns,
+				<Error<T>>::NoPermission,
 			)
-			.map_err(Self::map_unique_err_to_proxy)?;
+			.map_err(|err| Self::map_unique_err_to_proxy(err.error))?;
 
 			Self::deposit_event(Event::NFTBurned {
 				owner: sender,
@@ -449,8 +454,8 @@
 		/// - `rmrk_collection_id`: collection id of the nft to be transferred
 		/// - `rmrk_nft_id`: nft id of the nft to be transferred
 		/// - `new_owner`: new owner of the nft which can be either an account or a NFT
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::send())]
 		pub fn send(
 			origin: OriginFor<T>,
 			rmrk_collection_id: RmrkCollectionId,
@@ -561,8 +566,8 @@
 		/// - `rmrk_nft_id`: nft id of the nft to be accepted
 		/// - `new_owner`: either origin's account ID or origin-owned NFT, whichever the NFT was
 		///   sent to
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::accept_nft())]
 		pub fn accept_nft(
 			origin: OriginFor<T>,
 			rmrk_collection_id: RmrkCollectionId,
@@ -636,8 +641,8 @@
 		/// - `origin`: sender of the transaction
 		/// - `rmrk_collection_id`: collection id of the nft to be accepted
 		/// - `rmrk_nft_id`: nft id of the nft to be accepted
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::reject_nft())]
 		pub fn reject_nft(
 			origin: OriginFor<T>,
 			rmrk_collection_id: RmrkCollectionId,
@@ -653,15 +658,28 @@
 				Self::get_typed_nft_collection(collection_id, misc::CollectionType::Regular)?;
 			collection.check_is_external()?;
 
-			Self::destroy_nft(cross_sender, collection_id, nft_id).map_err(|err| {
-				if err == <CommonError<T>>::NoPermission.into()
-					|| err == <CommonError<T>>::ApprovedValueTooLow.into()
-				{
-					<Error<T>>::CannotRejectNonOwnedNft.into()
-				} else {
-					Self::map_unique_err_to_proxy(err)
-				}
-			})?;
+			ensure!(
+				<TokenData<T>>::get((collection_id, nft_id)).is_some(),
+				<Error<T>>::NoAvailableNftId
+			);
+
+			ensure!(
+				Self::get_nft_property_decoded(
+					collection_id,
+					nft_id,
+					RmrkProperty::PendingNftAccept
+				)?,
+				<Error<T>>::CannotRejectNonPendingNft
+			);
+
+			Self::destroy_nft(
+				cross_sender,
+				collection_id,
+				nft_id,
+				NESTING_BUDGET,
+				<Error<T>>::CannotRejectNonOwnedNft,
+			)
+			.map_err(|err| Self::map_unique_err_to_proxy(err.error))?;
 
 			Self::deposit_event(Event::NFTRejected {
 				sender,
@@ -673,13 +691,13 @@
 		}
 
 		/// accept the addition of a new resource to an existing NFT
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::accept_resource())]
 		pub fn accept_resource(
 			origin: OriginFor<T>,
 			rmrk_collection_id: RmrkCollectionId,
 			rmrk_nft_id: RmrkNftId,
-			rmrk_resource_id: RmrkResourceId,
+			resource_id: RmrkResourceId,
 		) -> DispatchResult {
 			let sender = ensure_signed(origin)?;
 			let cross_sender = T::CrossAccountId::from_sub(sender);
@@ -691,7 +709,6 @@
 			collection.check_is_external()?;
 
 			let nft_id = rmrk_nft_id.into();
-			let resource_id = rmrk_resource_id.into();
 
 			let budget = budget::Value::new(NESTING_BUDGET);
 
@@ -699,44 +716,31 @@
 				<PalletStructure<T>>::find_topmost_owner(collection_id, nft_id, &budget)
 					.map_err(|_| <Error<T>>::ResourceDoesntExist)?;
 
-			let resource_collection_id: CollectionId =
-				Self::get_nft_property_decoded(collection_id, nft_id, ResourceCollection)
-					.map_err(|_| <Error<T>>::ResourceDoesntExist)?;
-
-			let is_pending: bool = Self::get_nft_property_decoded(
-				resource_collection_id,
-				resource_id,
-				PendingResourceAccept,
-			)
-			.map_err(|_| <Error<T>>::ResourceDoesntExist)?;
-
-			ensure!(is_pending, <Error<T>>::ResourceNotPending);
+			Self::try_mutate_resource_info(collection_id, nft_id, resource_id, |res| {
+				ensure!(res.pending, <Error<T>>::ResourceNotPending);
+				ensure!(cross_sender == nft_owner, <Error<T>>::NoPermission);
 
-			ensure!(cross_sender == nft_owner, <Error<T>>::NoPermission);
+				res.pending = false;
 
-			<PalletNft<T>>::set_scoped_token_property(
-				resource_collection_id,
-				rmrk_resource_id.into(),
-				PropertyScope::Rmrk,
-				Self::rmrk_property(PendingResourceAccept, &false)?,
-			)?;
+				Ok(())
+			})?;
 
 			Self::deposit_event(Event::<T>::ResourceAccepted {
 				nft_id: rmrk_nft_id,
-				resource_id: rmrk_resource_id,
+				resource_id,
 			});
 
 			Ok(())
 		}
 
 		/// accept the removal of a resource of an existing NFT
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::accept_resource_removal())]
 		pub fn accept_resource_removal(
 			origin: OriginFor<T>,
 			rmrk_collection_id: RmrkCollectionId,
 			rmrk_nft_id: RmrkNftId,
-			rmrk_resource_id: RmrkResourceId,
+			resource_id: RmrkResourceId,
 		) -> DispatchResult {
 			let sender = ensure_signed(origin)?;
 			let cross_sender = T::CrossAccountId::from_sub(sender);
@@ -748,7 +752,6 @@
 			collection.check_is_external()?;
 
 			let nft_id = rmrk_nft_id.into();
-			let resource_id = rmrk_resource_id.into();
 
 			let budget = budget::Value::new(NESTING_BUDGET);
 
@@ -758,38 +761,41 @@
 
 			ensure!(cross_sender == nft_owner, <Error<T>>::NoPermission);
 
-			let resource_collection_id: CollectionId =
-				Self::get_nft_property_decoded(collection_id, nft_id, ResourceCollection)
-					.map_err(|_| <Error<T>>::ResourceDoesntExist)?;
+			let resource_id_key = Self::rmrk_property_key(ResourceId(resource_id))?;
 
-			let is_pending: bool = Self::get_nft_property_decoded(
-				resource_collection_id,
-				resource_id,
-				PendingResourceRemoval,
-			)
-			.map_err(|_| <Error<T>>::ResourceDoesntExist)?;
+			let resource_info = <PalletNft<T>>::token_aux_property((
+				collection_id,
+				nft_id,
+				PropertyScope::Rmrk,
+				resource_id_key.clone(),
+			))
+			.ok_or(<Error<T>>::ResourceDoesntExist)?;
 
-			ensure!(is_pending, <Error<T>>::ResourceNotPending);
+			let resource_info: RmrkResourceInfo = Self::decode_property(&resource_info)?;
 
-			let resource_collection = Self::get_typed_nft_collection(
-				resource_collection_id,
-				misc::CollectionType::Resource,
-			)?;
+			ensure!(
+				resource_info.pending_removal,
+				<Error<T>>::ResourceNotPending
+			);
 
-			<PalletNft<T>>::burn(&resource_collection, &cross_sender, rmrk_resource_id.into())
-				.map_err(Self::map_unique_err_to_proxy)?;
+			<PalletNft<T>>::remove_token_aux_property(
+				collection_id,
+				nft_id,
+				PropertyScope::Rmrk,
+				resource_id_key,
+			);
 
 			Self::deposit_event(Event::<T>::ResourceRemovalAccepted {
 				nft_id: rmrk_nft_id,
-				resource_id: rmrk_resource_id,
+				resource_id,
 			});
 
 			Ok(())
 		}
 
 		/// set a custom value on an NFT
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::set_property())]
 		pub fn set_property(
 			origin: OriginFor<T>,
 			#[pallet::compact] rmrk_collection_id: RmrkCollectionId,
@@ -848,8 +854,8 @@
 		}
 
 		/// set a different order of resource priority
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::set_priority())]
 		pub fn set_priority(
 			origin: OriginFor<T>,
 			rmrk_collection_id: RmrkCollectionId,
@@ -887,8 +893,8 @@
 		}
 
 		/// Create basic resource
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::add_basic_resource())]
 		pub fn add_basic_resource(
 			origin: OriginFor<T>,
 			rmrk_collection_id: RmrkCollectionId,
@@ -906,15 +912,7 @@
 				sender,
 				collection_id,
 				nft_id.into(),
-				[
-					Self::rmrk_property(TokenType, &NftType::Resource)?,
-					Self::rmrk_property(ResourceType, &misc::ResourceType::Basic)?,
-					Self::rmrk_property(Src, &resource.src)?,
-					Self::rmrk_property(Metadata, &resource.metadata)?,
-					Self::rmrk_property(License, &resource.license)?,
-					Self::rmrk_property(Thumb, &resource.thumb)?,
-				]
-				.into_iter(),
+				RmrkResourceTypes::Basic(resource),
 			)?;
 
 			Self::deposit_event(Event::ResourceAdded {
@@ -925,13 +923,12 @@
 		}
 
 		/// Create composable resource
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::add_composable_resource())]
 		pub fn add_composable_resource(
 			origin: OriginFor<T>,
 			rmrk_collection_id: RmrkCollectionId,
 			nft_id: RmrkNftId,
-			_resource_id: RmrkBoundedResource,
 			resource: RmrkComposableResource,
 		) -> DispatchResult {
 			let sender = ensure_signed(origin.clone())?;
@@ -945,17 +942,7 @@
 				sender,
 				collection_id,
 				nft_id.into(),
-				[
-					Self::rmrk_property(TokenType, &NftType::Resource)?,
-					Self::rmrk_property(ResourceType, &misc::ResourceType::Composable)?,
-					Self::rmrk_property(Parts, &resource.parts)?,
-					Self::rmrk_property(Base, &resource.base)?,
-					Self::rmrk_property(Src, &resource.src)?,
-					Self::rmrk_property(Metadata, &resource.metadata)?,
-					Self::rmrk_property(License, &resource.license)?,
-					Self::rmrk_property(Thumb, &resource.thumb)?,
-				]
-				.into_iter(),
+				RmrkResourceTypes::Composable(resource),
 			)?;
 
 			Self::deposit_event(Event::ResourceAdded {
@@ -966,8 +953,8 @@
 		}
 
 		/// Create slot resource
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::add_slot_resource())]
 		pub fn add_slot_resource(
 			origin: OriginFor<T>,
 			rmrk_collection_id: RmrkCollectionId,
@@ -985,17 +972,7 @@
 				sender,
 				collection_id,
 				nft_id.into(),
-				[
-					Self::rmrk_property(TokenType, &NftType::Resource)?,
-					Self::rmrk_property(ResourceType, &misc::ResourceType::Slot)?,
-					Self::rmrk_property(Base, &resource.base)?,
-					Self::rmrk_property(Src, &resource.src)?,
-					Self::rmrk_property(Metadata, &resource.metadata)?,
-					Self::rmrk_property(Slot, &resource.slot)?,
-					Self::rmrk_property(License, &resource.license)?,
-					Self::rmrk_property(Thumb, &resource.thumb)?,
-				]
-				.into_iter(),
+				RmrkResourceTypes::Slot(resource),
 			)?;
 
 			Self::deposit_event(Event::ResourceAdded {
@@ -1006,8 +983,8 @@
 		}
 
 		/// remove resource
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::remove_resource())]
 		pub fn remove_resource(
 			origin: OriginFor<T>,
 			rmrk_collection_id: RmrkCollectionId,
@@ -1021,7 +998,7 @@
 				Self::get_typed_nft_collection(collection_id, misc::CollectionType::Regular)?;
 			collection.check_is_external()?;
 
-			Self::resource_remove(sender, collection_id, nft_id.into(), resource_id.into())?;
+			Self::resource_remove(sender, collection_id, nft_id.into(), resource_id)?;
 
 			Self::deposit_event(Event::ResourceRemoval {
 				nft_id,
@@ -1050,19 +1027,29 @@
 	) -> Result<Property, DispatchError> {
 		let key = rmrk_key.to_key::<T>()?;
 
+		let value = Self::encode_property(value)?;
+
+		let property = Property { key, value };
+
+		Ok(property)
+	}
+
+	pub fn encode_property<E: Encode, S: Get<u32>>(
+		value: &E,
+	) -> Result<BoundedBytes<S>, DispatchError> {
 		let value = value
 			.encode()
 			.try_into()
 			.map_err(|_| <Error<T>>::RmrkPropertyValueIsTooLong)?;
 
-		let property = Property { key, value };
-
-		Ok(property)
+		Ok(value)
 	}
 
-	pub fn decode_property<D: Decode>(vec: PropertyValue) -> Result<D, DispatchError> {
+	pub fn decode_property<D: Decode, S: Get<u32>>(
+		vec: &BoundedBytes<S>,
+	) -> Result<D, DispatchError> {
 		vec.decode()
-			.map_err(|_| <Error<T>>::RmrkPropertyValueIsTooLong.into())
+			.map_err(|_| <Error<T>>::UnableToDecodeRmrkData.into())
 	}
 
 	pub fn rebind<L, S>(vec: &BoundedVec<u8, L>) -> Result<BoundedVec<u8, S>, DispatchError>
@@ -1124,7 +1111,9 @@
 		sender: T::CrossAccountId,
 		collection_id: CollectionId,
 		token_id: TokenId,
-	) -> DispatchResult {
+		max_burns: u32,
+		error_if_not_owned: Error<T>,
+	) -> DispatchResultWithPostInfo {
 		let collection =
 			Self::get_typed_nft_collection(collection_id, misc::CollectionType::Regular)?;
 
@@ -1133,16 +1122,57 @@
 
 		let from = token_data.owner;
 
-		let budget = budget::Value::new(NESTING_BUDGET);
+		let owner_check_budget = budget::Value::new(NESTING_BUDGET);
 
-		<PalletNft<T>>::burn_from(&collection, &sender, &from, token_id, &budget)
+		ensure!(
+			<PalletStructure<T>>::check_indirectly_owned(
+				sender.clone(),
+				collection_id,
+				token_id,
+				None,
+				&owner_check_budget
+			)?,
+			error_if_not_owned,
+		);
+
+		let burns_budget = budget::Value::new(max_burns);
+		let breadth_budget = budget::Value::new(max_burns);
+
+		<PalletNft<T>>::burn_recursively(
+			&collection,
+			&from,
+			token_id,
+			&burns_budget,
+			&breadth_budget,
+		)
 	}
 
+	fn acquire_next_resource_id(
+		collection_id: CollectionId,
+		nft_id: TokenId,
+	) -> Result<RmrkResourceId, DispatchError> {
+		let resource_id: RmrkResourceId =
+			Self::get_nft_property_decoded(collection_id, nft_id, NextResourceId)?;
+
+		let next_id = resource_id
+			.checked_add(1)
+			.ok_or(<Error<T>>::NoAvailableResourceId)?;
+
+		<PalletNft<T>>::set_scoped_token_property(
+			collection_id,
+			nft_id,
+			PropertyScope::Rmrk,
+			Self::rmrk_property(NextResourceId, &next_id)?,
+		)?;
+
+		Ok(resource_id)
+	}
+
 	fn resource_add(
 		sender: T::AccountId,
 		collection_id: CollectionId,
-		token_id: TokenId,
-		resource_properties: impl Iterator<Item = Property>,
+		nft_id: TokenId,
+		resource: RmrkResourceTypes,
 	) -> Result<RmrkResourceId, DispatchError> {
 		let collection =
 			Self::get_typed_nft_collection(collection_id, misc::CollectionType::Regular)?;
@@ -1151,77 +1181,108 @@
 		let sender = T::CrossAccountId::from_sub(sender);
 		let budget = budget::Value::new(NESTING_BUDGET);
 
-		let nft_owner = <PalletStructure<T>>::find_topmost_owner(collection_id, token_id, &budget)
+		let nft_owner = <PalletStructure<T>>::find_topmost_owner(collection_id, nft_id, &budget)
 			.map_err(Self::map_unique_err_to_proxy)?;
 
 		let pending = sender != nft_owner;
 
-		let resource_collection_id: CollectionId =
-			Self::get_nft_property_decoded(collection_id, token_id, ResourceCollection)?;
-		let resource_collection =
-			Self::get_typed_nft_collection(resource_collection_id, misc::CollectionType::Resource)?;
+		let id = Self::acquire_next_resource_id(collection_id, nft_id)?;
 
-		// todo probably add extra connections to bases, slots, etc., when RMRK starts to use them
+		let resource_info = RmrkResourceInfo {
+			id,
+			resource,
+			pending,
+			pending_removal: false,
+		};
 
-		let resource_id = Self::create_nft(
-			&sender,
-			&nft_owner,
-			&resource_collection,
-			resource_properties.chain(
-				[
-					Self::rmrk_property(PendingResourceAccept, &pending)?,
-					Self::rmrk_property(PendingResourceRemoval, &false)?,
-				]
-				.into_iter(),
-			),
-		)
-		.map_err(|err| match err {
-			DispatchError::Arithmetic(_) => <Error<T>>::NoAvailableNftId.into(),
-			err => Self::map_unique_err_to_proxy(err),
-		})?;
+		<PalletNft<T>>::try_mutate_token_aux_property(
+			collection_id,
+			nft_id,
+			PropertyScope::Rmrk,
+			Self::rmrk_property_key(ResourceId(id))?,
+			|value| -> DispatchResult {
+				*value = Some(Self::encode_property(&resource_info)?);
 
-		Ok(resource_id.0)
+				Ok(())
+			},
+		)?;
+
+		Ok(id)
 	}
 
 	fn resource_remove(
 		sender: T::AccountId,
 		collection_id: CollectionId,
 		nft_id: TokenId,
-		resource_id: TokenId,
+		resource_id: RmrkResourceId,
 	) -> DispatchResult {
 		let collection =
 			Self::get_typed_nft_collection(collection_id, misc::CollectionType::Regular)?;
 		ensure!(collection.owner == sender, Error::<T>::NoPermission);
 
-		let resource_collection_id: CollectionId =
-			Self::get_nft_property_decoded(collection_id, nft_id, ResourceCollection)?;
-		let resource_collection =
-			Self::get_typed_nft_collection(resource_collection_id, misc::CollectionType::Resource)?;
+		let resource_id_key = Self::rmrk_property_key(ResourceId(resource_id))?;
+		let scope = PropertyScope::Rmrk;
+
 		ensure!(
-			<PalletNft<T>>::token_exists(&resource_collection, resource_id),
-			Error::<T>::ResourceDoesntExist
+			<PalletNft<T>>::token_aux_property((
+				collection_id,
+				nft_id,
+				scope,
+				resource_id_key.clone()
+			))
+			.is_some(),
+			<Error<T>>::ResourceDoesntExist
 		);
 
-		let budget = up_data_structs::budget::Value::new(10);
+		let budget = up_data_structs::budget::Value::new(NESTING_BUDGET);
 		let topmost_owner =
 			<PalletStructure<T>>::find_topmost_owner(collection_id, nft_id, &budget)?;
 
 		let sender = T::CrossAccountId::from_sub(sender);
 		if topmost_owner == sender {
-			<PalletNft<T>>::burn(&resource_collection, &sender, resource_id)
-				.map_err(Self::map_unique_err_to_proxy)?;
+			<PalletNft<T>>::remove_token_aux_property(
+				collection_id,
+				nft_id,
+				PropertyScope::Rmrk,
+				Self::rmrk_property_key(ResourceId(resource_id))?,
+			);
 		} else {
-			<PalletNft<T>>::set_scoped_token_property(
-				resource_collection_id,
-				resource_id,
-				PropertyScope::Rmrk,
-				Self::rmrk_property(PendingResourceRemoval, &true)?,
-			)?;
+			Self::try_mutate_resource_info(collection_id, nft_id, resource_id, |res| {
+				res.pending_removal = true;
+
+				Ok(())
+			})?;
 		}
 
 		Ok(())
 	}
 
+	fn try_mutate_resource_info(
+		collection_id: CollectionId,
+		nft_id: TokenId,
+		resource_id: RmrkResourceId,
+		f: impl FnOnce(&mut RmrkResourceInfo) -> DispatchResult,
+	) -> DispatchResult {
+		<PalletNft<T>>::try_mutate_token_aux_property(
+			collection_id,
+			nft_id,
+			PropertyScope::Rmrk,
+			Self::rmrk_property_key(ResourceId(resource_id))?,
+			|value| match value {
+				Some(value) => {
+					let mut resource_info: RmrkResourceInfo = Self::decode_property(value)?;
+
+					f(&mut resource_info)?;
+
+					*value = Self::encode_property(&resource_info)?;
+
+					Ok(())
+				}
+				None => Err(<Error<T>>::ResourceDoesntExist.into()),
+			},
+		)
+	}
+
 	fn change_collection_owner(
 		collection_id: CollectionId,
 		collection_type: misc::CollectionType,
@@ -1237,7 +1298,7 @@
 		collection.save()
 	}
 
-	fn check_collection_owner(
+	pub fn check_collection_owner(
 		collection: &NonfungibleHandle<T>,
 		account: &T::CrossAccountId,
 	) -> DispatchResult {
@@ -1260,8 +1321,7 @@
 	pub fn rmrk_collection_id(
 		unique_collection_id: CollectionId,
 	) -> Result<RmrkCollectionId, DispatchError> {
-		<RmrkInernalCollectionId<T>>::try_get(unique_collection_id)
-			.map_err(|_| <Error<T>>::CollectionUnknown.into())
+		Self::get_collection_property_decoded(unique_collection_id, RmrkInternalCollectionId)
 	}
 
 	pub fn get_nft_collection(
@@ -1296,14 +1356,19 @@
 		collection_id: CollectionId,
 		key: RmrkProperty,
 	) -> Result<V, DispatchError> {
-		Self::decode_property(Self::get_collection_property(collection_id, key)?)
+		Self::decode_property(&Self::get_collection_property(collection_id, key)?)
 	}
 
 	pub fn get_collection_type(
 		collection_id: CollectionId,
 	) -> Result<misc::CollectionType, DispatchError> {
-		Self::get_collection_property_decoded(collection_id, CollectionType)
-			.map_err(|_| <Error<T>>::CorruptedCollectionType.into())
+		Self::get_collection_property_decoded(collection_id, CollectionType).map_err(|err| {
+			if err != <Error<T>>::CollectionUnknown.into() {
+				<Error<T>>::CorruptedCollectionType.into()
+			} else {
+				err
+			}
+		})
 	}
 
 	pub fn ensure_collection_type(
@@ -1349,7 +1414,7 @@
 	) -> Result<PropertyValue, DispatchError> {
 		let nft_property = <PalletNft<T>>::token_properties((collection_id, nft_id))
 			.get(&Self::rmrk_property_key(key)?)
-			.ok_or(<Error<T>>::NoAvailableNftId)? // todo replace with better error?
+			.ok_or(<Error<T>>::RmrkPropertyIsNotFound)?
 			.clone();
 
 		Ok(nft_property)
@@ -1360,7 +1425,7 @@
 		nft_id: TokenId,
 		key: RmrkProperty,
 	) -> Result<V, DispatchError> {
-		Self::decode_property(Self::get_nft_property(collection_id, nft_id, key)?)
+		Self::decode_property(&Self::get_nft_property(collection_id, nft_id, key)?)
 	}
 
 	pub fn nft_exists(collection_id: CollectionId, nft_id: TokenId) -> bool {
modifiedpallets/proxy-rmrk-core/src/misc.rsdiffbeforeafterboth
--- a/pallets/proxy-rmrk-core/src/misc.rs
+++ b/pallets/proxy-rmrk-core/src/misc.rs
@@ -61,22 +61,13 @@
 #[derive(Encode, Decode, PartialEq, Eq)]
 pub enum CollectionType {
 	Regular,
-	Resource,
 	Base,
 }
 
 #[derive(Encode, Decode, PartialEq, Eq)]
 pub enum NftType {
 	Regular,
-	Resource,
 	FixedPart,
 	SlotPart,
 	Theme,
-}
-
-#[derive(Encode, Decode, PartialEq, Eq)]
-pub enum ResourceType {
-	Basic,
-	Composable,
-	Slot,
 }
modifiedpallets/proxy-rmrk-core/src/property.rsdiffbeforeafterboth
--- a/pallets/proxy-rmrk-core/src/property.rs
+++ b/pallets/proxy-rmrk-core/src/property.rs
@@ -17,25 +17,23 @@
 use super::*;
 use core::convert::AsRef;
 
+const RESOURCE_ID_PREFIX: &str = "rsid-";
+
 pub enum RmrkProperty<'r> {
 	Metadata,
 	CollectionType,
+	RmrkInternalCollectionId,
 	TokenType,
 	Transferable,
 	RoyaltyInfo,
 	Equipped,
-	ResourceCollection,
 	ResourcePriorities,
-	ResourceType,
+	NextResourceId,
+	ResourceId(RmrkResourceId),
 	PendingNftAccept,
-	PendingResourceAccept,
-	PendingResourceRemoval,
 	Parts,
 	Base,
 	Src,
-	Slot,
-	License,
-	Thumb,
 	EquippedNft,
 	BaseType,
 	ExternalPartId,
@@ -66,22 +64,18 @@
 		match self {
 			Self::Metadata => key!("metadata"),
 			Self::CollectionType => key!("collection-type"),
+			Self::RmrkInternalCollectionId => key!("internal-id"),
 			Self::TokenType => key!("token-type"),
 			Self::Transferable => key!("transferable"),
 			Self::RoyaltyInfo => key!("royalty-info"),
 			Self::Equipped => key!("equipped"),
-			Self::ResourceCollection => key!("resource-collection"),
 			Self::ResourcePriorities => key!("resource-priorities"),
-			Self::ResourceType => key!("resource-type"),
+			Self::NextResourceId => key!("next-resource-id"),
+			Self::ResourceId(id) => key!(RESOURCE_ID_PREFIX, id.to_le_bytes()),
 			Self::PendingNftAccept => key!("pending-nft-accept"),
-			Self::PendingResourceAccept => key!("pending-resource-accept"),
-			Self::PendingResourceRemoval => key!("pending-resource-removal"),
 			Self::Parts => key!("parts"),
 			Self::Base => key!("base"),
 			Self::Src => key!("src"),
-			Self::Slot => key!("slot"),
-			Self::License => key!("license"),
-			Self::Thumb => key!("thumb"),
 			Self::EquippedNft => key!("equipped-nft"),
 			Self::BaseType => key!("base-type"),
 			Self::ExternalPartId => key!("ext-part-id"),
addedpallets/proxy-rmrk-core/src/rpc.rsdiffbeforeafterboth
--- /dev/null
+++ b/pallets/proxy-rmrk-core/src/rpc.rs
@@ -0,0 +1,265 @@
+use super::*;
+
+pub fn last_collection_idx<T: Config>() -> Result<RmrkCollectionId, DispatchError> {
+	Ok(<Pallet<T>>::last_collection_idx())
+}
+
+pub fn collection_by_id<T: Config>(
+	collection_id: RmrkCollectionId,
+) -> Result<Option<RmrkCollectionInfo<T::AccountId>>, DispatchError> {
+	let (collection, collection_id) = match <Pallet<T>>::get_typed_nft_collection_mapped(
+		collection_id,
+		misc::CollectionType::Regular,
+	) {
+		Ok(c) => c,
+		Err(_) => return Ok(None),
+	};
+
+	let nfts_count = collection.total_supply();
+
+	Ok(Some(RmrkCollectionInfo {
+		issuer: collection.owner.clone(),
+		metadata: <Pallet<T>>::get_collection_property_decoded(
+			collection_id,
+			RmrkProperty::Metadata,
+		)?,
+		max: collection.limits.token_limit,
+		symbol: <Pallet<T>>::rebind(&collection.token_prefix)?,
+		nfts_count,
+	}))
+}
+
+pub fn nft_by_id<T: Config>(
+	collection_id: RmrkCollectionId,
+	nft_by_id: RmrkNftId,
+) -> Result<Option<RmrkInstanceInfo<T::AccountId>>, DispatchError> {
+	let (collection, collection_id) = match <Pallet<T>>::get_typed_nft_collection_mapped(
+		collection_id,
+		misc::CollectionType::Regular,
+	) {
+		Ok(c) => c,
+		Err(_) => return Ok(None),
+	};
+
+	let nft_id = TokenId(nft_by_id);
+	if !<Pallet<T>>::nft_exists(collection_id, nft_id) {
+		return Ok(None);
+	}
+
+	let owner = match collection.token_owner(nft_id) {
+		Some(owner) => match T::CrossTokenAddressMapping::address_to_token(&owner) {
+			Some((col, tok)) => {
+				let rmrk_collection = <Pallet<T>>::rmrk_collection_id(col)?;
+
+				RmrkAccountIdOrCollectionNftTuple::CollectionAndNftTuple(rmrk_collection, tok.0)
+			}
+			None => RmrkAccountIdOrCollectionNftTuple::AccountId(owner.as_sub().clone()),
+		},
+		None => return Ok(None),
+	};
+
+	Ok(Some(RmrkInstanceInfo {
+		owner: owner,
+		royalty: <Pallet<T>>::get_nft_property_decoded(
+			collection_id,
+			nft_id,
+			RmrkProperty::RoyaltyInfo,
+		)?,
+		metadata: <Pallet<T>>::get_nft_property_decoded(
+			collection_id,
+			nft_id,
+			RmrkProperty::Metadata,
+		)?,
+		equipped: <Pallet<T>>::get_nft_property_decoded(
+			collection_id,
+			nft_id,
+			RmrkProperty::Equipped,
+		)?,
+		pending: <Pallet<T>>::get_nft_property_decoded(
+			collection_id,
+			nft_id,
+			RmrkProperty::PendingNftAccept,
+		)?,
+	}))
+}
+
+pub fn account_tokens<T: Config>(
+	account_id: T::AccountId,
+	collection_id: RmrkCollectionId,
+) -> Result<Vec<RmrkNftId>, DispatchError> {
+	let cross_account_id = CrossAccountId::from_sub(account_id);
+
+	let (collection, collection_id) = match <Pallet<T>>::get_typed_nft_collection_mapped(
+		collection_id,
+		misc::CollectionType::Regular,
+	) {
+		Ok(c) => c,
+		Err(_) => return Ok(Vec::new()),
+	};
+
+	let tokens = collection
+		.account_tokens(cross_account_id)
+		.into_iter()
+		.filter(|token| {
+			let is_pending = <Pallet<T>>::get_nft_property_decoded(
+				collection_id,
+				*token,
+				RmrkProperty::PendingNftAccept,
+			)
+			.unwrap_or(true);
+
+			!is_pending
+		})
+		.map(|token| token.0)
+		.collect();
+
+	Ok(tokens)
+}
+
+pub fn nft_children<T: Config>(
+	collection_id: RmrkCollectionId,
+	nft_id: RmrkNftId,
+) -> Result<Vec<RmrkNftChild>, DispatchError> {
+	let collection_id = match <Pallet<T>>::unique_collection_id(collection_id) {
+		Ok(id) => id,
+		Err(_) => return Ok(Vec::new()),
+	};
+	let nft_id = TokenId(nft_id);
+	if !<Pallet<T>>::nft_exists(collection_id, nft_id) {
+		return Ok(Vec::new());
+	}
+
+	Ok(
+		pallet_nonfungible::TokenChildren::<T>::iter_prefix((collection_id, nft_id))
+			.filter_map(|((child_collection, child_token), _)| {
+				let is_pending = <Pallet<T>>::get_nft_property_decoded(
+					child_collection,
+					child_token,
+					RmrkProperty::PendingNftAccept,
+				)
+				.ok()?;
+
+				if is_pending {
+					return None;
+				}
+
+				let rmrk_child_collection =
+					<Pallet<T>>::rmrk_collection_id(child_collection).ok()?;
+
+				Some(RmrkNftChild {
+					collection_id: rmrk_child_collection,
+					nft_id: child_token.0,
+				})
+			})
+			.collect(),
+	)
+}
+
+pub fn collection_properties<T: Config>(
+	collection_id: RmrkCollectionId,
+	filter_keys: Option<Vec<RmrkPropertyKey>>,
+) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
+	let collection_id = match <Pallet<T>>::unique_collection_id(collection_id) {
+		Ok(id) => id,
+		Err(_) => return Ok(Vec::new()),
+	};
+	if <Pallet<T>>::ensure_collection_type(collection_id, misc::CollectionType::Regular).is_err() {
+		return Ok(Vec::new());
+	}
+
+	let properties = <Pallet<T>>::filter_user_properties(
+		collection_id,
+		/* token_id = */ None,
+		filter_keys,
+		|key, value| RmrkPropertyInfo { key, value },
+	)?;
+
+	Ok(properties)
+}
+
+pub fn nft_properties<T: Config>(
+	collection_id: RmrkCollectionId,
+	nft_id: RmrkNftId,
+	filter_keys: Option<Vec<RmrkPropertyKey>>,
+) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
+	let collection_id = match <Pallet<T>>::unique_collection_id(collection_id) {
+		Ok(id) => id,
+		Err(_) => return Ok(Vec::new()),
+	};
+	let token_id = TokenId(nft_id);
+
+	if <Pallet<T>>::ensure_nft_type(collection_id, token_id, NftType::Regular).is_err() {
+		return Ok(Vec::new());
+	}
+
+	let properties = <Pallet<T>>::filter_user_properties(
+		collection_id,
+		Some(token_id),
+		filter_keys,
+		|key, value| RmrkPropertyInfo { key, value },
+	)?;
+
+	Ok(properties)
+}
+
+pub fn nft_resources<T: Config>(
+	collection_id: RmrkCollectionId,
+	nft_id: RmrkNftId,
+) -> Result<Vec<RmrkResourceInfo>, DispatchError> {
+	let collection_id = match <Pallet<T>>::unique_collection_id(collection_id) {
+		Ok(id) => id,
+		Err(_) => return Ok(Vec::new()),
+	};
+	if <Pallet<T>>::ensure_collection_type(collection_id, misc::CollectionType::Regular).is_err() {
+		return Ok(Vec::new());
+	}
+
+	let nft_id = TokenId(nft_id);
+	if <Pallet<T>>::ensure_nft_type(collection_id, nft_id, NftType::Regular).is_err() {
+		return Ok(Vec::new());
+	}
+
+	let resources = <pallet_nonfungible::Pallet<T>>::iterate_token_aux_properties(
+		collection_id,
+		nft_id,
+		PropertyScope::Rmrk,
+	)
+	.filter_map(|(_, value)| {
+		let resource_info: RmrkResourceInfo = <Pallet<T>>::decode_property(&value).ok()?;
+
+		Some(resource_info)
+	})
+	.collect();
+
+	Ok(resources)
+}
+
+pub fn nft_resource_priority<T: Config>(
+	collection_id: RmrkCollectionId,
+	nft_id: RmrkNftId,
+	resource_id: RmrkResourceId,
+) -> Result<Option<u32>, DispatchError> {
+	let collection_id = match <Pallet<T>>::unique_collection_id(collection_id) {
+		Ok(id) => id,
+		Err(_) => return Ok(None),
+	};
+	if <Pallet<T>>::ensure_collection_type(collection_id, misc::CollectionType::Regular).is_err() {
+		return Ok(None);
+	}
+
+	let nft_id = TokenId(nft_id);
+	if <Pallet<T>>::ensure_nft_type(collection_id, nft_id, NftType::Regular).is_err() {
+		return Ok(None);
+	}
+
+	let priorities: Vec<_> = <Pallet<T>>::get_nft_property_decoded(
+		collection_id,
+		nft_id,
+		RmrkProperty::ResourcePriorities,
+	)?;
+	Ok(priorities
+		.into_iter()
+		.enumerate()
+		.find(|(_, id)| *id == resource_id)
+		.map(|(priority, _): (usize, RmrkResourceId)| priority as u32))
+}
modifiedpallets/proxy-rmrk-core/src/weights.rsdiffbeforeafterboth
--- a/pallets/proxy-rmrk-core/src/weights.rs
+++ b/pallets/proxy-rmrk-core/src/weights.rs
@@ -3,7 +3,7 @@
 //! Autogenerated weights for pallet_proxy_rmrk_core
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-06-09, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-06-17, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
@@ -19,7 +19,7 @@
 // --template
 // .maintain/frame-weight-template.hbs
 // --steps=50
-// --repeat=200
+// --repeat=80
 // --heap-pages=4096
 // --output=./pallets/proxy-rmrk-core/src/weights.rs
 
@@ -34,6 +34,22 @@
 /// Weight functions needed for pallet_proxy_rmrk_core.
 pub trait WeightInfo {
 	fn create_collection() -> Weight;
+	fn destroy_collection() -> Weight;
+	fn change_collection_issuer() -> Weight;
+	fn lock_collection() -> Weight;
+	fn mint_nft(b: u32, ) -> Weight;
+	fn burn_nft(b: u32, ) -> Weight;
+	fn send() -> Weight;
+	fn accept_nft() -> Weight;
+	fn reject_nft() -> Weight;
+	fn set_property() -> Weight;
+	fn set_priority() -> Weight;
+	fn add_basic_resource() -> Weight;
+	fn add_composable_resource() -> Weight;
+	fn add_slot_resource() -> Weight;
+	fn remove_resource() -> Weight;
+	fn accept_resource() -> Weight;
+	fn accept_resource_removal() -> Weight;
 }
 
 /// Weights for pallet_proxy_rmrk_core using the Substrate node and recommended hardware.
@@ -47,11 +63,204 @@
 	// Storage: Common CollectionProperties (r:0 w:1)
 	// Storage: Common CollectionById (r:0 w:1)
 	// Storage: RmrkCore UniqueCollectionId (r:0 w:1)
-	// Storage: RmrkCore RmrkInernalCollectionId (r:0 w:1)
 	fn create_collection() -> Weight {
-		(76_647_000 as Weight)
+		(42_359_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(5 as Weight))
-			.saturating_add(T::DbWeight::get().writes(9 as Weight))
+			.saturating_add(T::DbWeight::get().writes(8 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:1)
+	// Storage: Common CollectionById (r:1 w:1)
+	// Storage: Nonfungible TokenData (r:1 w:0)
+	// Storage: Common DestroyedCollectionCount (r:1 w:1)
+	// Storage: Nonfungible TokensMinted (r:0 w:1)
+	// Storage: Nonfungible TokensBurnt (r:0 w:1)
+	// Storage: Common AdminAmount (r:0 w:1)
+	fn destroy_collection() -> Weight {
+		(45_375_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(5 as Weight))
+			.saturating_add(T::DbWeight::get().writes(6 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:1)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	fn change_collection_issuer() -> Weight {
+		(22_753_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(3 as Weight))
+			.saturating_add(T::DbWeight::get().writes(1 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:1)
+	// Storage: Nonfungible TokensMinted (r:1 w:0)
+	// Storage: Nonfungible TokensBurnt (r:1 w:0)
+	fn lock_collection() -> Weight {
+		(24_356_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(5 as Weight))
+			.saturating_add(T::DbWeight::get().writes(1 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokensMinted (r:1 w:1)
+	// Storage: Nonfungible AccountBalance (r:1 w:1)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenData (r:0 w:1)
+	// Storage: Nonfungible Owned (r:0 w:1)
+	// Storage: Nonfungible TokenAuxProperties (r:2 w:2)
+	fn mint_nft(b: u32, ) -> Weight {
+		(44_853_000 as Weight)
+			// Standard Error: 2_000
+			.saturating_add((10_721_000 as Weight).saturating_mul(b as Weight))
+			.saturating_add(T::DbWeight::get().reads(6 as Weight))
+			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
+			.saturating_add(T::DbWeight::get().writes(5 as Weight))
+			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(b as Weight)))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenData (r:1 w:1)
+	// Storage: Nonfungible TokenChildren (r:1 w:0)
+	// Storage: Nonfungible TokensBurnt (r:1 w:1)
+	// Storage: Nonfungible AccountBalance (r:1 w:1)
+	// Storage: Nonfungible Allowance (r:1 w:0)
+	// Storage: Nonfungible Owned (r:0 w:1)
+	// Storage: Nonfungible TokenProperties (r:0 w:1)
+	fn burn_nft(b: u32, ) -> Weight {
+		(0 as Weight)
+			// Standard Error: 1_590_000
+			.saturating_add((319_825_000 as Weight).saturating_mul(b as Weight))
+			.saturating_add(T::DbWeight::get().reads(9 as Weight))
+			.saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(b as Weight)))
+			.saturating_add(T::DbWeight::get().writes(6 as Weight))
+			.saturating_add(T::DbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenData (r:5 w:1)
+	// Storage: Nonfungible TokenProperties (r:1 w:0)
+	// Storage: Nonfungible AccountBalance (r:2 w:2)
+	// Storage: Nonfungible Allowance (r:1 w:0)
+	// Storage: Nonfungible TokenChildren (r:0 w:1)
+	// Storage: Nonfungible Owned (r:0 w:2)
+	fn send() -> Weight {
+		(72_576_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(12 as Weight))
+			.saturating_add(T::DbWeight::get().writes(6 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:2 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:2 w:0)
+	// Storage: Nonfungible TokenData (r:6 w:1)
+	// Storage: Nonfungible AccountBalance (r:2 w:2)
+	// Storage: Nonfungible Allowance (r:1 w:0)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenChildren (r:0 w:1)
+	// Storage: Nonfungible Owned (r:0 w:2)
+	fn accept_nft() -> Weight {
+		(79_670_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(15 as Weight))
+			.saturating_add(T::DbWeight::get().writes(7 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenData (r:5 w:5)
+	// Storage: Nonfungible TokenProperties (r:1 w:5)
+	// Storage: Nonfungible TokenChildren (r:9 w:4)
+	// Storage: Nonfungible TokensBurnt (r:1 w:1)
+	// Storage: Nonfungible AccountBalance (r:5 w:5)
+	// Storage: Nonfungible Allowance (r:5 w:0)
+	// Storage: Nonfungible Owned (r:0 w:5)
+	fn reject_nft() -> Weight {
+		(254_989_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(29 as Weight))
+			.saturating_add(T::DbWeight::get().writes(25 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenData (r:5 w:0)
+	fn set_property() -> Weight {
+		(48_651_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(9 as Weight))
+			.saturating_add(T::DbWeight::get().writes(1 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenData (r:5 w:0)
+	fn set_priority() -> Weight {
+		(47_579_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(9 as Weight))
+			.saturating_add(T::DbWeight::get().writes(1 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenData (r:5 w:0)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+	fn add_basic_resource() -> Weight {
+		(55_013_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(10 as Weight))
+			.saturating_add(T::DbWeight::get().writes(2 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenData (r:5 w:0)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+	fn add_composable_resource() -> Weight {
+		(55_184_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(10 as Weight))
+			.saturating_add(T::DbWeight::get().writes(2 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenData (r:5 w:0)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+	fn add_slot_resource() -> Weight {
+		(54_792_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(10 as Weight))
+			.saturating_add(T::DbWeight::get().writes(2 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+	// Storage: Nonfungible TokenData (r:5 w:0)
+	fn remove_resource() -> Weight {
+		(46_447_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(9 as Weight))
+			.saturating_add(T::DbWeight::get().writes(1 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenData (r:5 w:0)
+	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+	fn accept_resource() -> Weight {
+		(45_096_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(9 as Weight))
+			.saturating_add(T::DbWeight::get().writes(1 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenData (r:5 w:0)
+	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+	fn accept_resource_removal() -> Weight {
+		(45_445_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(9 as Weight))
+			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 }
 
@@ -65,10 +274,203 @@
 	// Storage: Common CollectionProperties (r:0 w:1)
 	// Storage: Common CollectionById (r:0 w:1)
 	// Storage: RmrkCore UniqueCollectionId (r:0 w:1)
-	// Storage: RmrkCore RmrkInernalCollectionId (r:0 w:1)
 	fn create_collection() -> Weight {
-		(76_647_000 as Weight)
+		(42_359_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(8 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:1)
+	// Storage: Common CollectionById (r:1 w:1)
+	// Storage: Nonfungible TokenData (r:1 w:0)
+	// Storage: Common DestroyedCollectionCount (r:1 w:1)
+	// Storage: Nonfungible TokensMinted (r:0 w:1)
+	// Storage: Nonfungible TokensBurnt (r:0 w:1)
+	// Storage: Common AdminAmount (r:0 w:1)
+	fn destroy_collection() -> Weight {
+		(45_375_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(9 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:1)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	fn change_collection_issuer() -> Weight {
+		(22_753_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:1)
+	// Storage: Nonfungible TokensMinted (r:1 w:0)
+	// Storage: Nonfungible TokensBurnt (r:1 w:0)
+	fn lock_collection() -> Weight {
+		(24_356_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokensMinted (r:1 w:1)
+	// Storage: Nonfungible AccountBalance (r:1 w:1)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenData (r:0 w:1)
+	// Storage: Nonfungible Owned (r:0 w:1)
+	// Storage: Nonfungible TokenAuxProperties (r:2 w:2)
+	fn mint_nft(b: u32, ) -> Weight {
+		(44_853_000 as Weight)
+			// Standard Error: 2_000
+			.saturating_add((10_721_000 as Weight).saturating_mul(b as Weight))
+			.saturating_add(RocksDbWeight::get().reads(6 as Weight))
+			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
+			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
+			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(b as Weight)))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenData (r:1 w:1)
+	// Storage: Nonfungible TokenChildren (r:1 w:0)
+	// Storage: Nonfungible TokensBurnt (r:1 w:1)
+	// Storage: Nonfungible AccountBalance (r:1 w:1)
+	// Storage: Nonfungible Allowance (r:1 w:0)
+	// Storage: Nonfungible Owned (r:0 w:1)
+	// Storage: Nonfungible TokenProperties (r:0 w:1)
+	fn burn_nft(b: u32, ) -> Weight {
+		(0 as Weight)
+			// Standard Error: 1_590_000
+			.saturating_add((319_825_000 as Weight).saturating_mul(b as Weight))
+			.saturating_add(RocksDbWeight::get().reads(9 as Weight))
+			.saturating_add(RocksDbWeight::get().reads((4 as Weight).saturating_mul(b as Weight)))
+			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
+			.saturating_add(RocksDbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenData (r:5 w:1)
+	// Storage: Nonfungible TokenProperties (r:1 w:0)
+	// Storage: Nonfungible AccountBalance (r:2 w:2)
+	// Storage: Nonfungible Allowance (r:1 w:0)
+	// Storage: Nonfungible TokenChildren (r:0 w:1)
+	// Storage: Nonfungible Owned (r:0 w:2)
+	fn send() -> Weight {
+		(72_576_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(12 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:2 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:2 w:0)
+	// Storage: Nonfungible TokenData (r:6 w:1)
+	// Storage: Nonfungible AccountBalance (r:2 w:2)
+	// Storage: Nonfungible Allowance (r:1 w:0)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenChildren (r:0 w:1)
+	// Storage: Nonfungible Owned (r:0 w:2)
+	fn accept_nft() -> Weight {
+		(79_670_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(15 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(7 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenData (r:5 w:5)
+	// Storage: Nonfungible TokenProperties (r:1 w:5)
+	// Storage: Nonfungible TokenChildren (r:9 w:4)
+	// Storage: Nonfungible TokensBurnt (r:1 w:1)
+	// Storage: Nonfungible AccountBalance (r:5 w:5)
+	// Storage: Nonfungible Allowance (r:5 w:0)
+	// Storage: Nonfungible Owned (r:0 w:5)
+	fn reject_nft() -> Weight {
+		(254_989_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(29 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(25 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenData (r:5 w:0)
+	fn set_property() -> Weight {
+		(48_651_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(9 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenData (r:5 w:0)
+	fn set_priority() -> Weight {
+		(47_579_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(9 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenData (r:5 w:0)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+	fn add_basic_resource() -> Weight {
+		(55_013_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(10 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenData (r:5 w:0)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+	fn add_composable_resource() -> Weight {
+		(55_184_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(10 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenData (r:5 w:0)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+	fn add_slot_resource() -> Weight {
+		(54_792_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(10 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+	// Storage: Nonfungible TokenData (r:5 w:0)
+	fn remove_resource() -> Weight {
+		(46_447_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(9 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenData (r:5 w:0)
+	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+	fn accept_resource() -> Weight {
+		(45_096_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(9 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
+	}
+	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: Nonfungible TokenData (r:5 w:0)
+	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+	fn accept_resource_removal() -> Weight {
+		(45_445_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(9 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 }
addedpallets/proxy-rmrk-equip/src/benchmarking.rsdiffbeforeafterboth
--- /dev/null
+++ b/pallets/proxy-rmrk-equip/src/benchmarking.rs
@@ -0,0 +1,120 @@
+use sp_std::vec;
+
+use frame_benchmarking::{benchmarks, account};
+use frame_system::RawOrigin;
+use frame_support::{
+	traits::{Currency, Get},
+	BoundedVec,
+};
+
+use up_data_structs::*;
+
+use super::*;
+
+const SEED: u32 = 1;
+
+fn create_data<S: Get<u32>>() -> BoundedVec<u8, S> {
+	vec![b'A'; S::get() as usize].try_into().expect("size == S")
+}
+
+fn create_u32_array<S: Get<u32>>() -> BoundedVec<u32, S> {
+	vec![0; S::get() as usize].try_into().expect("size == S")
+}
+
+fn create_max_part(id: RmrkSlotId) -> RmrkPartType {
+	RmrkPartType::SlotPart(RmrkSlotPart {
+		id,
+		equippable: RmrkEquippableList::Custom(create_u32_array()),
+		src: create_data(),
+		z: 1,
+	})
+}
+
+fn create_parts_array<S: Get<u32>>(num: u32) -> BoundedVec<RmrkPartType, S> {
+	let mut parts: BoundedVec<RmrkPartType, S> = vec![].try_into().expect("0 <= S");
+
+	for i in 0..num {
+		parts.try_push(create_max_part(i)).expect("num <= S");
+	}
+
+	parts
+}
+
+fn create_max_theme_property() -> RmrkThemeProperty {
+	RmrkThemeProperty {
+		key: create_data(),
+		value: create_data(),
+	}
+}
+
+fn create_theme_properties_array<S: Get<u32>>(num: u32) -> BoundedVec<RmrkThemeProperty, S> {
+	vec![create_max_theme_property(); num as usize]
+		.try_into()
+		.expect("num <= S")
+}
+
+fn create_max_theme(name: RmrkString, props_num: u32) -> RmrkBoundedTheme {
+	RmrkBoundedTheme {
+		name,
+		properties: create_theme_properties_array(props_num),
+		inherit: false,
+	}
+}
+
+benchmarks! {
+	create_base {
+		let b in 0..RmrkPartsLimit::get();
+
+		let caller = account("caller", 0, SEED);
+		<T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());
+
+		let base_type = create_data();
+		let symbol = create_data();
+		let parts = create_parts_array(b);
+	}: _(RawOrigin::Signed(caller), base_type, symbol, parts)
+
+	theme_add {
+		let b in 0..MaxPropertiesPerTheme::get();
+
+		let caller = account("caller", 0, SEED);
+		<T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());
+
+		let base_type = create_data();
+		let symbol = create_data();
+		let parts = create_parts_array(0);
+
+		<Pallet<T>>::create_base(RawOrigin::Signed(caller.clone()).into(), base_type, symbol, parts)?;
+		let base_id = 1;
+
+
+		let default_theme_name = b"default".to_vec().try_into().expect("default is a valid name; qed");
+		let default_theme = create_max_theme(default_theme_name, 0);
+
+		<Pallet<T>>::theme_add(RawOrigin::Signed(caller.clone()).into(), base_id, default_theme)?;
+
+		let theme = create_max_theme(create_data(), b);
+	}: _(RawOrigin::Signed(caller), base_id, theme)
+
+	equippable {
+		let caller = account("caller", 0, SEED);
+		<T as pallet_common::Config>::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());
+
+		let base_id = 1;
+		let slot_id = 42;
+
+		let base_type = create_data();
+		let symbol = create_data();
+		let parts = vec! {
+			RmrkPartType::SlotPart(RmrkSlotPart {
+				id: slot_id,
+				equippable: RmrkEquippableList::All,
+				src: create_data(),
+				z: 1,
+			})
+		}.try_into().expect("1 <= RmrkPartsLimit");
+
+		<Pallet<T>>::create_base(RawOrigin::Signed(caller.clone()).into(), base_type, symbol, parts)?;
+
+		let equippables = RmrkEquippableList::Custom(create_u32_array());
+	}: _(RawOrigin::Signed(caller), base_id, slot_id, equippables)
+}
modifiedpallets/proxy-rmrk-equip/src/lib.rsdiffbeforeafterboth
--- a/pallets/proxy-rmrk-equip/src/lib.rs
+++ b/pallets/proxy-rmrk-equip/src/lib.rs
@@ -22,15 +22,23 @@
 use up_data_structs::*;
 use pallet_common::{Pallet as PalletCommon, Error as CommonError};
 use pallet_rmrk_core::{
-	Pallet as PalletCore,
+	Pallet as PalletCore, Error as CoreError,
 	misc::{self, *},
 	property::RmrkProperty::*,
 };
 use pallet_nonfungible::{Pallet as PalletNft, NonfungibleHandle};
 use pallet_evm::account::CrossAccountId;
+use weights::WeightInfo;
 
 pub use pallet::*;
 
+#[cfg(feature = "runtime-benchmarks")]
+pub mod benchmarking;
+pub mod rpc;
+pub mod weights;
+
+pub type SelfWeightOf<T> = <T as Config>::WeightInfo;
+
 #[frame_support::pallet]
 pub mod pallet {
 	use super::*;
@@ -38,6 +46,7 @@
 	#[pallet::config]
 	pub trait Config: frame_system::Config + pallet_rmrk_core::Config {
 		type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>;
+		type WeightInfo: WeightInfo;
 	}
 
 	#[pallet::storage]
@@ -61,6 +70,10 @@
 			issuer: T::AccountId,
 			base_id: RmrkBaseId,
 		},
+		EquippablesUpdated {
+			base_id: RmrkBaseId,
+			slot_id: RmrkSlotId,
+		},
 	}
 
 	#[pallet::error]
@@ -70,6 +83,8 @@
 		NoAvailablePartId,
 		BaseDoesntExist,
 		NeedsDefaultThemeFirst,
+		PartDoesntExist,
+		NoEquippableOnFixedPart,
 	}
 
 	#[pallet::call]
@@ -83,12 +98,12 @@
 		/// - symbol: arbitrary client-chosen symbol
 		/// - parts: array of Fixed and Slot parts composing the base, confined in length by
 		///   RmrkPartsLimit
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::create_base(parts.len() as u32))]
 		pub fn create_base(
 			origin: OriginFor<T>,
 			base_type: RmrkString,
-			symbol: RmrkString,
+			symbol: RmrkBaseSymbol,
 			parts: BoundedVec<RmrkPartType, RmrkPartsLimit>,
 		) -> DispatchResult {
 			let sender = ensure_signed(origin)?;
@@ -125,17 +140,7 @@
 			let collection = <PalletCore<T>>::get_nft_collection(collection_id)?;
 
 			for part in parts {
-				let part_id = part.id();
-				let part_token_id = Self::create_part(&cross_sender, &collection, part)?;
-
-				<InernalPartId<T>>::insert(collection_id, part_id, part_token_id);
-
-				<PalletNft<T>>::set_scoped_token_property(
-					collection_id,
-					part_token_id,
-					PropertyScope::Rmrk,
-					<PalletCore<T>>::rmrk_property(ExternalPartId, &part_id)?,
-				)?;
+				Self::create_part(&cross_sender, &collection, part)?;
 			}
 
 			Self::deposit_event(Event::BaseCreated {
@@ -159,12 +164,12 @@
 		///   - key: arbitrary BoundedString, defined by client
 		///   - value: arbitrary BoundedString, defined by client
 		///   - inherit: optional bool
-		#[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
 		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::theme_add(theme.properties.len() as u32))]
 		pub fn theme_add(
 			origin: OriginFor<T>,
 			base_id: RmrkBaseId,
-			theme: RmrkTheme,
+			theme: RmrkBoundedTheme,
 		) -> DispatchResult {
 			let sender = ensure_signed(origin)?;
 
@@ -173,12 +178,7 @@
 
 			let collection_id: CollectionId = base_id.into();
 
-			let collection = <PalletCore<T>>::get_typed_nft_collection(
-				collection_id,
-				misc::CollectionType::Base,
-			)
-			.map_err(|_| <Error<T>>::BaseDoesntExist)?;
-			collection.check_is_external()?;
+			let collection = Self::get_base(collection_id)?;
 
 			if theme.name.as_slice() == b"default" {
 				<BaseHasDefaultTheme<T>>::insert(collection_id, true);
@@ -213,6 +213,55 @@
 
 			Ok(())
 		}
+
+		#[transactional]
+		#[pallet::weight(<SelfWeightOf<T>>::equippable())]
+		pub fn equippable(
+			origin: OriginFor<T>,
+			base_id: RmrkBaseId,
+			slot_id: RmrkSlotId,
+			equippables: RmrkEquippableList,
+		) -> DispatchResult {
+			let sender = ensure_signed(origin)?;
+
+			let base_collection_id = base_id.into();
+			let collection = Self::get_base(base_collection_id)?;
+
+			<PalletCore<T>>::check_collection_owner(
+				&collection,
+				&T::CrossAccountId::from_sub(sender),
+			)
+			.map_err(|err| {
+				if err == <CoreError<T>>::NoPermission.into() {
+					<Error<T>>::PermissionError.into()
+				} else {
+					err
+				}
+			})?;
+
+			let part_id = Self::internal_part_id(base_collection_id, slot_id)
+				.ok_or(<Error<T>>::PartDoesntExist)?;
+
+			let nft_type = <PalletCore<T>>::get_nft_type(base_collection_id, part_id)
+				.map_err(|_| <Error<T>>::PartDoesntExist)?;
+
+			match nft_type {
+				NftType::Regular | NftType::Theme => return Err(<Error<T>>::PermissionError.into()),
+				NftType::FixedPart => return Err(<Error<T>>::NoEquippableOnFixedPart.into()),
+				NftType::SlotPart => {
+					<PalletNft<T>>::set_scoped_token_property(
+						base_collection_id,
+						part_id,
+						PropertyScope::Rmrk,
+						<PalletCore<T>>::rmrk_property(EquippableList, &equippables)?,
+					)?;
+				}
+			}
+
+			Self::deposit_event(Event::EquippablesUpdated { base_id, slot_id });
+
+			Ok(())
+		}
 	}
 }
 
@@ -221,9 +270,10 @@
 		sender: &T::CrossAccountId,
 		collection: &NonfungibleHandle<T>,
 		part: RmrkPartType,
-	) -> Result<TokenId, DispatchError> {
+	) -> DispatchResult {
 		let owner = sender;
 
+		let part_id = part.id();
 		let src = part.src();
 		let z_index = part.z_index();
 
@@ -232,21 +282,40 @@
 			RmrkPartType::SlotPart(_) => NftType::SlotPart,
 		};
 
-		let token_id = <PalletCore<T>>::create_nft(
-			sender,
-			owner,
-			collection,
+		let token_id = match Self::internal_part_id(collection.id, part_id) {
+			Some(token_id) => token_id,
+			None => {
+				let token_id =
+					<PalletCore<T>>::create_nft(sender, owner, collection, [].into_iter())
+						.map_err(|err| match err {
+							DispatchError::Arithmetic(_) => <Error<T>>::NoAvailablePartId.into(),
+							err => err,
+						})?;
+
+				<InernalPartId<T>>::insert(collection.id, part_id, token_id);
+
+				<PalletNft<T>>::set_scoped_token_property(
+					collection.id,
+					token_id,
+					PropertyScope::Rmrk,
+					<PalletCore<T>>::rmrk_property(ExternalPartId, &part_id)?,
+				)?;
+
+				token_id
+			}
+		};
+
+		<PalletNft<T>>::set_scoped_token_properties(
+			collection.id,
+			token_id,
+			PropertyScope::Rmrk,
 			[
 				<PalletCore<T>>::rmrk_property(TokenType, &nft_type)?,
 				<PalletCore<T>>::rmrk_property(Src, &src)?,
 				<PalletCore<T>>::rmrk_property(ZIndex, &z_index)?,
 			]
 			.into_iter(),
-		)
-		.map_err(|err| match err {
-			DispatchError::Arithmetic(_) => <Error<T>>::NoAvailablePartId.into(),
-			err => err,
-		})?;
+		)?;
 
 		if let RmrkPartType::SlotPart(part) = part {
 			<PalletNft<T>>::set_scoped_token_property(
@@ -257,6 +326,21 @@
 			)?;
 		}
 
-		Ok(token_id)
+		Ok(())
+	}
+
+	fn get_base(base_id: CollectionId) -> Result<NonfungibleHandle<T>, DispatchError> {
+		let collection =
+			<PalletCore<T>>::get_typed_nft_collection(base_id, misc::CollectionType::Base)
+				.map_err(|err| {
+					if err == <CoreError<T>>::CollectionUnknown.into() {
+						<Error<T>>::BaseDoesntExist.into()
+					} else {
+						err
+					}
+				})?;
+		collection.check_is_external()?;
+
+		Ok(collection)
 	}
 }
addedpallets/proxy-rmrk-equip/src/rpc.rsdiffbeforeafterboth
--- /dev/null
+++ b/pallets/proxy-rmrk-equip/src/rpc.rs
@@ -0,0 +1,186 @@
+use super::*;
+use pallet_rmrk_core::{misc, property::*};
+use sp_std::vec::Vec;
+
+pub fn base<T: Config>(
+	base_id: RmrkBaseId,
+) -> Result<Option<RmrkBaseInfo<T::AccountId>>, DispatchError> {
+	let (collection, collection_id) =
+		match <PalletCore<T>>::get_typed_nft_collection_mapped(base_id, misc::CollectionType::Base)
+		{
+			Ok(c) => c,
+			Err(_) => return Ok(None),
+		};
+
+	Ok(Some(RmrkBaseInfo {
+		issuer: collection.owner.clone(),
+		base_type: <PalletCore<T>>::get_collection_property_decoded(
+			collection_id,
+			RmrkProperty::BaseType,
+		)?,
+		symbol: <PalletCore<T>>::rebind(&collection.token_prefix)?,
+	}))
+}
+
+pub fn base_parts<T: Config>(base_id: RmrkBaseId) -> Result<Vec<RmrkPartType>, DispatchError> {
+	use pallet_common::CommonCollectionOperations;
+
+	let (collection, collection_id) =
+		match <PalletCore<T>>::get_typed_nft_collection_mapped(base_id, misc::CollectionType::Base)
+		{
+			Ok(c) => c,
+			Err(_) => return Ok(Vec::new()),
+		};
+
+	let parts = collection
+		.collection_tokens()
+		.into_iter()
+		.filter_map(|token_id| {
+			let nft_type = <PalletCore<T>>::get_nft_type(collection_id, token_id).ok()?;
+
+			match nft_type {
+				NftType::FixedPart => Some(RmrkPartType::FixedPart(RmrkFixedPart {
+					id: <PalletCore<T>>::get_nft_property_decoded(
+						collection_id,
+						token_id,
+						RmrkProperty::ExternalPartId,
+					)
+					.ok()?,
+					src: <PalletCore<T>>::get_nft_property_decoded(
+						collection_id,
+						token_id,
+						RmrkProperty::Src,
+					)
+					.ok()?,
+					z: <PalletCore<T>>::get_nft_property_decoded(
+						collection_id,
+						token_id,
+						RmrkProperty::ZIndex,
+					)
+					.ok()?,
+				})),
+				NftType::SlotPart => Some(RmrkPartType::SlotPart(RmrkSlotPart {
+					id: <PalletCore<T>>::get_nft_property_decoded(
+						collection_id,
+						token_id,
+						RmrkProperty::ExternalPartId,
+					)
+					.ok()?,
+					src: <PalletCore<T>>::get_nft_property_decoded(
+						collection_id,
+						token_id,
+						RmrkProperty::Src,
+					)
+					.ok()?,
+					z: <PalletCore<T>>::get_nft_property_decoded(
+						collection_id,
+						token_id,
+						RmrkProperty::ZIndex,
+					)
+					.ok()?,
+					equippable: <PalletCore<T>>::get_nft_property_decoded(
+						collection_id,
+						token_id,
+						RmrkProperty::EquippableList,
+					)
+					.ok()?,
+				})),
+				_ => None,
+			}
+		})
+		.collect();
+
+	Ok(parts)
+}
+
+pub fn theme_names<T: Config>(base_id: RmrkBaseId) -> Result<Vec<RmrkThemeName>, DispatchError> {
+	use pallet_common::CommonCollectionOperations;
+
+	let (collection, collection_id) =
+		match <PalletCore<T>>::get_typed_nft_collection_mapped(base_id, misc::CollectionType::Base)
+		{
+			Ok(c) => c,
+			Err(_) => return Ok(Vec::new()),
+		};
+
+	let theme_names = collection
+		.collection_tokens()
+		.iter()
+		.filter_map(|token_id| {
+			let nft_type = <PalletCore<T>>::get_nft_type(collection_id, *token_id).ok()?;
+
+			match nft_type {
+				NftType::Theme => <PalletCore<T>>::get_nft_property_decoded(
+					collection_id,
+					*token_id,
+					RmrkProperty::ThemeName,
+				)
+				.ok(),
+				_ => None,
+			}
+		})
+		.collect();
+
+	Ok(theme_names)
+}
+
+pub fn theme<T: Config>(
+	base_id: RmrkBaseId,
+	theme_name: RmrkThemeName,
+	filter_keys: Option<Vec<RmrkPropertyKey>>,
+) -> Result<Option<RmrkTheme>, DispatchError> {
+	use pallet_common::CommonCollectionOperations;
+
+	let (collection, collection_id) =
+		match <PalletCore<T>>::get_typed_nft_collection_mapped(base_id, misc::CollectionType::Base)
+		{
+			Ok(c) => c,
+			Err(_) => return Ok(None),
+		};
+
+	let theme_info = collection
+		.collection_tokens()
+		.into_iter()
+		.find_map(|token_id| {
+			<PalletCore<T>>::ensure_nft_type(collection_id, token_id, NftType::Theme).ok()?;
+
+			let name: RmrkString = <PalletCore<T>>::get_nft_property_decoded(
+				collection_id,
+				token_id,
+				RmrkProperty::ThemeName,
+			)
+			.ok()?;
+
+			if name == theme_name {
+				Some((name, token_id))
+			} else {
+				None
+			}
+		});
+
+	let (name, theme_id) = match theme_info {
+		Some((name, theme_id)) => (name, theme_id),
+		None => return Ok(None),
+	};
+
+	let properties = <PalletCore<T>>::filter_user_properties(
+		collection_id,
+		Some(theme_id),
+		filter_keys,
+		|key, value| RmrkThemeProperty { key, value },
+	)?;
+
+	let inherit = <PalletCore<T>>::get_nft_property_decoded(
+		collection_id,
+		theme_id,
+		RmrkProperty::ThemeInherit,
+	)?;
+
+	let theme = RmrkTheme {
+		name,
+		properties,
+		inherit,
+	};
+
+	Ok(Some(theme))
+}
addedpallets/proxy-rmrk-equip/src/weights.rsdiffbeforeafterboth
--- /dev/null
+++ b/pallets/proxy-rmrk-equip/src/weights.rs
@@ -0,0 +1,138 @@
+// Template adopted from https://github.com/paritytech/substrate/blob/master/.maintain/frame-weight-template.hbs
+
+//! Autogenerated weights for pallet_proxy_rmrk_equip
+//!
+//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
+//! DATE: 2022-06-20, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
+
+// Executed Command:
+// target/release/unique-collator
+// benchmark
+// pallet
+// --pallet
+// pallet-proxy-rmrk-equip
+// --wasm-execution
+// compiled
+// --extrinsic
+// *
+// --template
+// .maintain/frame-weight-template.hbs
+// --steps=50
+// --repeat=80
+// --heap-pages=4096
+// --output=./pallets/proxy-rmrk-equip/src/weights.rs
+
+#![cfg_attr(rustfmt, rustfmt_skip)]
+#![allow(unused_parens)]
+#![allow(unused_imports)]
+#![allow(clippy::unnecessary_cast)]
+
+use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
+use sp_std::marker::PhantomData;
+
+/// Weight functions needed for pallet_proxy_rmrk_equip.
+pub trait WeightInfo {
+	fn create_base(b: u32, ) -> Weight;
+	fn theme_add(b: u32, ) -> Weight;
+	fn equippable() -> Weight;
+}
+
+/// Weights for pallet_proxy_rmrk_equip using the Substrate node and recommended hardware.
+pub struct SubstrateWeight<T>(PhantomData<T>);
+impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
+	// Storage: Common CreatedCollectionCount (r:1 w:1)
+	// Storage: Common DestroyedCollectionCount (r:1 w:0)
+	// Storage: System Account (r:2 w:2)
+	// Storage: Common CollectionPropertyPermissions (r:0 w:1)
+	// Storage: Common CollectionProperties (r:0 w:1)
+	// Storage: Common CollectionById (r:0 w:1)
+	// Storage: RmrkEquip InernalPartId (r:1 w:1)
+	// Storage: Nonfungible TokensMinted (r:1 w:1)
+	// Storage: Nonfungible AccountBalance (r:1 w:1)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenData (r:0 w:1)
+	// Storage: Nonfungible Owned (r:0 w:1)
+	fn create_base(b: u32, ) -> Weight {
+		(44_927_000 as Weight)
+			// Standard Error: 9_000
+			.saturating_add((18_896_000 as Weight).saturating_mul(b as Weight))
+			.saturating_add(T::DbWeight::get().reads(6 as Weight))
+			.saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(b as Weight)))
+			.saturating_add(T::DbWeight::get().writes(8 as Weight))
+			.saturating_add(T::DbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
+	}
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: RmrkEquip BaseHasDefaultTheme (r:1 w:0)
+	// Storage: Nonfungible TokensMinted (r:1 w:1)
+	// Storage: Nonfungible AccountBalance (r:1 w:1)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenData (r:0 w:1)
+	// Storage: Nonfungible Owned (r:0 w:1)
+	fn theme_add(b: u32, ) -> Weight {
+		(39_120_000 as Weight)
+			// Standard Error: 11_000
+			.saturating_add((2_367_000 as Weight).saturating_mul(b as Weight))
+			.saturating_add(T::DbWeight::get().reads(6 as Weight))
+			.saturating_add(T::DbWeight::get().writes(5 as Weight))
+	}
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: RmrkEquip InernalPartId (r:1 w:0)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	fn equippable() -> Weight {
+		(27_172_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(4 as Weight))
+			.saturating_add(T::DbWeight::get().writes(1 as Weight))
+	}
+}
+
+// For backwards compatibility and tests
+impl WeightInfo for () {
+	// Storage: Common CreatedCollectionCount (r:1 w:1)
+	// Storage: Common DestroyedCollectionCount (r:1 w:0)
+	// Storage: System Account (r:2 w:2)
+	// Storage: Common CollectionPropertyPermissions (r:0 w:1)
+	// Storage: Common CollectionProperties (r:0 w:1)
+	// Storage: Common CollectionById (r:0 w:1)
+	// Storage: RmrkEquip InernalPartId (r:1 w:1)
+	// Storage: Nonfungible TokensMinted (r:1 w:1)
+	// Storage: Nonfungible AccountBalance (r:1 w:1)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenData (r:0 w:1)
+	// Storage: Nonfungible Owned (r:0 w:1)
+	fn create_base(b: u32, ) -> Weight {
+		(44_927_000 as Weight)
+			// Standard Error: 9_000
+			.saturating_add((18_896_000 as Weight).saturating_mul(b as Weight))
+			.saturating_add(RocksDbWeight::get().reads(6 as Weight))
+			.saturating_add(RocksDbWeight::get().reads((2 as Weight).saturating_mul(b as Weight)))
+			.saturating_add(RocksDbWeight::get().writes(8 as Weight))
+			.saturating_add(RocksDbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
+	}
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: RmrkEquip BaseHasDefaultTheme (r:1 w:0)
+	// Storage: Nonfungible TokensMinted (r:1 w:1)
+	// Storage: Nonfungible AccountBalance (r:1 w:1)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenData (r:0 w:1)
+	// Storage: Nonfungible Owned (r:0 w:1)
+	fn theme_add(b: u32, ) -> Weight {
+		(39_120_000 as Weight)
+			// Standard Error: 11_000
+			.saturating_add((2_367_000 as Weight).saturating_mul(b as Weight))
+			.saturating_add(RocksDbWeight::get().reads(6 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
+	}
+	// Storage: Common CollectionProperties (r:1 w:0)
+	// Storage: Common CollectionById (r:1 w:0)
+	// Storage: RmrkEquip InernalPartId (r:1 w:0)
+	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	fn equippable() -> Weight {
+		(27_172_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
+	}
+}
modifiedpallets/refungible/src/common.rsdiffbeforeafterboth
--- a/pallets/refungible/src/common.rs
+++ b/pallets/refungible/src/common.rs
@@ -77,16 +77,19 @@
 		0
 	}
 
-	fn set_token_properties(amount: u32) -> Weight {
-		<SelfWeightOf<T>>::set_token_properties(amount)
+	fn set_token_properties(_amount: u32) -> Weight {
+		// Error
+		0
 	}
 
-	fn delete_token_properties(amount: u32) -> Weight {
-		<SelfWeightOf<T>>::delete_token_properties(amount)
+	fn delete_token_properties(_amount: u32) -> Weight {
+		// Error
+		0
 	}
 
-	fn set_property_permissions(amount: u32) -> Weight {
-		<SelfWeightOf<T>>::set_property_permissions(amount)
+	fn set_token_property_permissions(_amount: u32) -> Weight {
+		// Error
+		0
 	}
 
 	fn transfer() -> Weight {
@@ -315,7 +318,7 @@
 		fail!(<Error<T>>::SettingPropertiesNotAllowed)
 	}
 
-	fn set_property_permissions(
+	fn set_token_property_permissions(
 		&self,
 		_sender: &T::CrossAccountId,
 		_property_permissions: Vec<PropertyKeyPermission>,
modifiedpallets/refungible/src/weights.rsdiffbeforeafterboth
--- a/pallets/refungible/src/weights.rs
+++ b/pallets/refungible/src/weights.rs
@@ -3,12 +3,13 @@
 //! Autogenerated weights for pallet_refungible
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-03-01, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-06-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
 // target/release/unique-collator
 // benchmark
+// pallet
 // --pallet
 // pallet-refungible
 // --wasm-execution
@@ -18,7 +19,7 @@
 // --template
 // .maintain/frame-weight-template.hbs
 // --steps=50
-// --repeat=200
+// --repeat=80
 // --heap-pages=4096
 // --output=./pallets/refungible/src/weights.rs
 
@@ -38,9 +39,6 @@
 	fn create_multiple_items_ex_multiple_owners(b: u32, ) -> Weight;
 	fn burn_item_partial() -> Weight;
 	fn burn_item_fully() -> Weight;
-	fn set_token_properties(amount: u32) -> Weight;
-	fn delete_token_properties(amount: u32) -> Weight;
-	fn set_property_permissions(amount: u32) -> Weight;
 	fn transfer_normal() -> Weight;
 	fn transfer_creating() -> Weight;
 	fn transfer_removing() -> Weight;
@@ -63,7 +61,7 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn create_item() -> Weight {
-		(21_255_000 as Weight)
+		(21_321_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
@@ -74,9 +72,9 @@
 	// Storage: Refungible TokenData (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items(b: u32, ) -> Weight {
-		(18_052_000 as Weight)
-			// Standard Error: 1_000
-			.saturating_add((5_549_000 as Weight).saturating_mul(b as Weight))
+		(16_313_000 as Weight)
+			// Standard Error: 4_000
+			.saturating_add((5_464_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
@@ -88,9 +86,9 @@
 	// Storage: Refungible TokenData (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items_ex_multiple_items(b: u32, ) -> Weight {
-		(15_766_000 as Weight)
-			// Standard Error: 2_000
-			.saturating_add((8_187_000 as Weight).saturating_mul(b as Weight))
+		(15_631_000 as Weight)
+			// Standard Error: 5_000
+			.saturating_add((8_141_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
@@ -103,9 +101,9 @@
 	// Storage: Refungible Balance (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items_ex_multiple_owners(b: u32, ) -> Weight {
-		(5_675_000 as Weight)
-			// Standard Error: 2_000
-			.saturating_add((6_315_000 as Weight).saturating_mul(b as Weight))
+		(11_191_000 as Weight)
+			// Standard Error: 4_000
+			.saturating_add((6_321_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(T::DbWeight::get().writes(3 as Weight))
@@ -116,7 +114,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_item_partial() -> Weight {
-		(23_518_000 as Weight)
+		(24_421_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
@@ -127,29 +125,13 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_item_fully() -> Weight {
-		(32_489_000 as Weight)
+		(32_900_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
-
-	fn set_token_properties(_amount: u32) -> Weight {
-		// Error
-		0
-	}
-
-	fn delete_token_properties(_amount: u32) -> Weight {
-		// Error
-		0
-	}
-
-	fn set_property_permissions(_amount: u32) -> Weight {
-		// Error
-		0
-	}
-
 	// Storage: Refungible Balance (r:2 w:2)
 	fn transfer_normal() -> Weight {
-		(19_766_000 as Weight)
+		(20_215_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
@@ -157,7 +139,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_creating() -> Weight {
-		(23_360_000 as Weight)
+		(24_809_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
@@ -165,7 +147,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_removing() -> Weight {
-		(25_344_000 as Weight)
+		(26_704_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
@@ -173,21 +155,21 @@
 	// Storage: Refungible AccountBalance (r:2 w:2)
 	// Storage: Refungible Owned (r:0 w:2)
 	fn transfer_creating_removing() -> Weight {
-		(28_553_000 as Weight)
+		(28_728_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Refungible Balance (r:1 w:0)
 	// Storage: Refungible Allowance (r:0 w:1)
 	fn approve() -> Weight {
-		(15_356_000 as Weight)
+		(16_107_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Refungible Allowance (r:1 w:1)
 	// Storage: Refungible Balance (r:2 w:2)
 	fn transfer_from_normal() -> Weight {
-		(28_832_000 as Weight)
+		(28_765_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(3 as Weight))
 	}
@@ -196,7 +178,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_from_creating() -> Weight {
-		(32_132_000 as Weight)
+		(32_788_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
@@ -205,7 +187,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_from_removing() -> Weight {
-		(33_237_000 as Weight)
+		(34_523_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
@@ -214,7 +196,7 @@
 	// Storage: Refungible AccountBalance (r:2 w:2)
 	// Storage: Refungible Owned (r:0 w:2)
 	fn transfer_from_creating_removing() -> Weight {
-		(36_399_000 as Weight)
+		(36_749_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(7 as Weight))
 	}
@@ -226,7 +208,7 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_from() -> Weight {
-		(42_043_000 as Weight)
+		(42_259_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(7 as Weight))
 	}
@@ -241,7 +223,7 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn create_item() -> Weight {
-		(21_255_000 as Weight)
+		(21_321_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
@@ -252,9 +234,9 @@
 	// Storage: Refungible TokenData (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items(b: u32, ) -> Weight {
-		(18_052_000 as Weight)
-			// Standard Error: 1_000
-			.saturating_add((5_549_000 as Weight).saturating_mul(b as Weight))
+		(16_313_000 as Weight)
+			// Standard Error: 4_000
+			.saturating_add((5_464_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
@@ -266,9 +248,9 @@
 	// Storage: Refungible TokenData (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items_ex_multiple_items(b: u32, ) -> Weight {
-		(15_766_000 as Weight)
-			// Standard Error: 2_000
-			.saturating_add((8_187_000 as Weight).saturating_mul(b as Weight))
+		(15_631_000 as Weight)
+			// Standard Error: 5_000
+			.saturating_add((8_141_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
@@ -281,9 +263,9 @@
 	// Storage: Refungible Balance (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items_ex_multiple_owners(b: u32, ) -> Weight {
-		(5_675_000 as Weight)
-			// Standard Error: 2_000
-			.saturating_add((6_315_000 as Weight).saturating_mul(b as Weight))
+		(11_191_000 as Weight)
+			// Standard Error: 4_000
+			.saturating_add((6_321_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
@@ -294,7 +276,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_item_partial() -> Weight {
-		(23_518_000 as Weight)
+		(24_421_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
@@ -305,29 +287,13 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_item_fully() -> Weight {
-		(32_489_000 as Weight)
+		(32_900_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
-	}
-
-	fn set_token_properties(_amount: u32) -> Weight {
-		// Error
-		0
-	}
-
-	fn delete_token_properties(_amount: u32) -> Weight {
-		// Error
-		0
-	}
-
-	fn set_property_permissions(_amount: u32) -> Weight {
-		// Error
-		0
 	}
-
 	// Storage: Refungible Balance (r:2 w:2)
 	fn transfer_normal() -> Weight {
-		(19_766_000 as Weight)
+		(20_215_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
@@ -335,7 +301,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_creating() -> Weight {
-		(23_360_000 as Weight)
+		(24_809_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
@@ -343,7 +309,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_removing() -> Weight {
-		(25_344_000 as Weight)
+		(26_704_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
@@ -351,21 +317,21 @@
 	// Storage: Refungible AccountBalance (r:2 w:2)
 	// Storage: Refungible Owned (r:0 w:2)
 	fn transfer_creating_removing() -> Weight {
-		(28_553_000 as Weight)
+		(28_728_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Refungible Balance (r:1 w:0)
 	// Storage: Refungible Allowance (r:0 w:1)
 	fn approve() -> Weight {
-		(15_356_000 as Weight)
+		(16_107_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Refungible Allowance (r:1 w:1)
 	// Storage: Refungible Balance (r:2 w:2)
 	fn transfer_from_normal() -> Weight {
-		(28_832_000 as Weight)
+		(28_765_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
 	}
@@ -374,7 +340,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_from_creating() -> Weight {
-		(32_132_000 as Weight)
+		(32_788_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
@@ -383,7 +349,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_from_removing() -> Weight {
-		(33_237_000 as Weight)
+		(34_523_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
@@ -392,7 +358,7 @@
 	// Storage: Refungible AccountBalance (r:2 w:2)
 	// Storage: Refungible Owned (r:0 w:2)
 	fn transfer_from_creating_removing() -> Weight {
-		(36_399_000 as Weight)
+		(36_749_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(7 as Weight))
 	}
@@ -404,7 +370,7 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_from() -> Weight {
-		(42_043_000 as Weight)
+		(42_259_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(7 as Weight))
 	}
modifiedpallets/scheduler/Cargo.tomldiffbeforeafterboth
--- a/pallets/scheduler/Cargo.toml
+++ b/pallets/scheduler/Cargo.toml
@@ -1,5 +1,5 @@
 [package]
-name = "pallet-unq-scheduler"
+name = "pallet-unique-scheduler"
 version = "0.1.0"
 authors = ["Unique Network <support@uniquenetwork.io>"]
 edition = "2021"
modifiedpallets/scheduler/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/scheduler/src/benchmarking.rs
+++ b/pallets/scheduler/src/benchmarking.rs
@@ -34,35 +34,57 @@
 
 //! Scheduler pallet benchmarking.
 
-#![cfg(feature = "runtime-benchmarks")]
-
 use super::*;
-use sp_std::{vec, prelude::*};
+use frame_benchmarking::{benchmarks, account};
+use frame_support::{
+	ensure,
+	traits::{OnInitialize},
+};
 use frame_system::RawOrigin;
-use frame_support::{ensure, traits::OnInitialize};
-use frame_benchmarking::{benchmarks, impl_benchmark_test_suite};
+use sp_runtime::traits::Hash;
+use sp_std::{prelude::*, vec};
 
-use crate::Module as Scheduler;
+use crate::Pallet as Scheduler;
 use frame_system::Pallet as System;
+use frame_support::traits::Currency;
 
 const BLOCK_NUMBER: u32 = 2;
 
-// Add `n` named items to the schedule
-fn fill_schedule<T: Config>(when: T::BlockNumber, n: u32) -> Result<(), &'static str> {
-	// Essentially a no-op call.
-	let call = frame_system::Call::set_storage { items: vec![] };
+/// Add `n` named items to the schedule.
+///
+/// For `resolved`:
+/// - `None`: aborted (hash without preimage)
+/// - `Some(true)`: hash resolves into call if possible, plain call otherwise
+/// - `Some(false)`: plain call
+fn fill_schedule<T: Config>(
+	when: T::BlockNumber,
+	n: u32,
+	periodic: bool,
+	resolved: Option<bool>,
+) -> Result<(), &'static str> {
+	let t = DispatchTime::At(when);
+	let caller = account("user", 0, 1);
+
+	// Give the sender account max funds for transfer (their account will never reasonably be killed).
+	T::Currency::make_free_balance_be(&caller, T::Currency::minimum_balance());
+
 	for i in 0..n {
-		// Named schedule is strictly heavier than anonymous
-		Scheduler::<T>::do_schedule_named(
-			i.encode(),
-			DispatchTime::At(when),
-			// Add periodicity
-			Some((T::BlockNumber::one(), 100)),
-			// HARD_DEADLINE priority means it gets executed no matter what
-			0,
-			frame_system::RawOrigin::Root.into(),
-			call.clone().into(),
-		)?;
+		let (call, hash) = call_and_hash::<T>(i);
+		let call_or_hash = match resolved {
+			Some(_) => call.into(),
+			None => CallOrHashOf::<T>::Hash(hash),
+		};
+		let period = match periodic {
+			true => Some(((i + 100).into(), 100)),
+			false => None,
+		};
+
+		let slice_id: [u8; 4] = i.encode().try_into().unwrap();
+		let mut id: [u8; 16] = [0; 16];
+		id[..4].clone_from_slice(&slice_id);
+
+		let origin = frame_system::RawOrigin::Signed(caller.clone()).into();
+		Scheduler::<T>::do_schedule_named(id, t, period, 0, origin, call_or_hash)?;
 	}
 	ensure!(
 		Agenda::<T>::get(when).len() == n as usize,
@@ -71,54 +93,121 @@
 	Ok(())
 }
 
+fn call_and_hash<T: Config>(i: u32) -> (<T as Config>::Call, T::Hash) {
+	// Essentially a no-op call.
+	let call: <T as Config>::Call = frame_system::Call::remark { remark: i.encode() }.into();
+	let hash = T::Hashing::hash_of(&call);
+	(call, hash)
+}
+
 benchmarks! {
-	schedule {
-		let s in 0 .. T::MaxScheduledPerBlock::get();
+	on_initialize_periodic_named_resolved {
+		let s in 1 .. T::MaxScheduledPerBlock::get();
 		let when = BLOCK_NUMBER.into();
-		let periodic = Some((T::BlockNumber::one(), 100));
-		let priority = 0;
-		// Essentially a no-op call.
-		let call = Box::new(frame_system::Call::set_storage { items: vec![] }.into());
+		fill_schedule::<T>(when, s, true, Some(true))?;
+	}: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
+	verify {
+		assert_eq!(System::<T>::event_count(), s);
+		for i in 0..s {
+			assert_eq!(Agenda::<T>::get(when + (i + 100).into()).len(), 1 as usize);
+		}
+	}
 
-		fill_schedule::<T>(when, s)?;
-	}: _(RawOrigin::Root, when, periodic, priority, call)
+	on_initialize_named_resolved {
+		let s in 1 .. T::MaxScheduledPerBlock::get();
+		let when = BLOCK_NUMBER.into();
+		fill_schedule::<T>(when, s, false, Some(true))?;
+	}: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
 	verify {
-		ensure!(
-			Agenda::<T>::get(when).len() == (s + 1) as usize,
-			"didn't add to schedule"
-		);
+		assert_eq!(System::<T>::event_count(), s);
+		assert!(Agenda::<T>::iter().count() == 0);
 	}
 
-	cancel {
+	on_initialize_periodic {
 		let s in 1 .. T::MaxScheduledPerBlock::get();
 		let when = BLOCK_NUMBER.into();
+		fill_schedule::<T>(when, s, true, Some(false))?;
+	}: { Scheduler::<T>::on_initialize(when); }
+	verify {
+		assert_eq!(System::<T>::event_count(), s);
+		for i in 0..s {
+			assert_eq!(Agenda::<T>::get(when + (i + 100).into()).len(), 1 as usize);
+		}
+	}
 
-		fill_schedule::<T>(when, s)?;
-		assert_eq!(Agenda::<T>::get(when).len(), s as usize);
-	}: _(RawOrigin::Root, when, 0)
+	on_initialize_periodic_resolved {
+		let s in 1 .. T::MaxScheduledPerBlock::get();
+		let when = BLOCK_NUMBER.into();
+		fill_schedule::<T>(when, s, true, Some(true))?;
+	}: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
 	verify {
-		ensure!(
-			Lookup::<T>::get(0.encode()).is_none(),
-			"didn't remove from lookup"
-		);
-		// Removed schedule is NONE
-		ensure!(
-			Agenda::<T>::get(when)[0].is_none(),
-			"didn't remove from schedule"
-		);
+		assert_eq!(System::<T>::event_count(), s );
+		for i in 0..s {
+			assert_eq!(Agenda::<T>::get(when + (i + 100).into()).len(), 1 as usize);
+		}
 	}
 
+	on_initialize_aborted {
+		let s in 1 .. T::MaxScheduledPerBlock::get();
+		let when = BLOCK_NUMBER.into();
+		fill_schedule::<T>(when, s, false, None)?;
+	}: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
+	verify {
+		assert_eq!(System::<T>::event_count(), 0);
+	}
+
+	on_initialize_named_aborted {
+		let s in 1 .. T::MaxScheduledPerBlock::get();
+		let when = BLOCK_NUMBER.into();
+		fill_schedule::<T>(when, s, false, Some(false))?;
+	}: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
+	verify {
+	}
+
+	on_initialize_named {
+		let s in 1 .. T::MaxScheduledPerBlock::get();
+		let when = BLOCK_NUMBER.into();
+		fill_schedule::<T>(when, s, false, None)?;
+	}: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
+	verify {
+		assert_eq!(System::<T>::event_count(), 0);
+	}
+
+	on_initialize {
+		let s in 1 .. T::MaxScheduledPerBlock::get();
+		let when = BLOCK_NUMBER.into();
+		fill_schedule::<T>(when, s, false, Some(false))?;
+	}: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
+	verify {
+		assert_eq!(System::<T>::event_count(), s);
+		assert!(Agenda::<T>::iter().count() == 0);
+	}
+
+	on_initialize_resolved {
+		let s in 1 .. T::MaxScheduledPerBlock::get();
+		let when = BLOCK_NUMBER.into();
+		fill_schedule::<T>(when, s, false, Some(true))?;
+	}: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
+	verify {
+		assert_eq!(System::<T>::event_count(), s);
+		assert!(Agenda::<T>::iter().count() == 0);
+	}
+
 	schedule_named {
+		let caller: T::AccountId = account("user", 0, 1);
+		let origin: RawOrigin<T::AccountId> = frame_system::RawOrigin::Signed(caller.clone());
 		let s in 0 .. T::MaxScheduledPerBlock::get();
-		let id = s.encode();
+		let slice_id: [u8; 4] = s.encode().try_into().unwrap();
+		let mut id: [u8; 16] =  [0; 16];
+		id[..4].clone_from_slice(&slice_id);
 		let when = BLOCK_NUMBER.into();
 		let periodic = Some((T::BlockNumber::one(), 100));
 		let priority = 0;
 		// Essentially a no-op call.
-		let call = Box::new(frame_system::Call::set_storage { items: vec![] }.into());
-
-		fill_schedule::<T>(when, s)?;
-	}: _(RawOrigin::Root, id, when, periodic, priority, call)
+		let inner_call = frame_system::Call::set_storage { items: vec![] }.into();
+		let call = Box::new(CallOrHashOf::<T>::Value(inner_call));
+		fill_schedule::<T>(when, s, true, Some(false))?;
+	}: _(origin, id, when, periodic, priority, call)
 	verify {
 		ensure!(
 			Agenda::<T>::get(when).len() == (s + 1) as usize,
@@ -127,14 +216,16 @@
 	}
 
 	cancel_named {
+		let caller: T::AccountId = account("user", 0, 1);
+		let origin: RawOrigin<T::AccountId> = frame_system::RawOrigin::Signed(caller.clone());
 		let s in 1 .. T::MaxScheduledPerBlock::get();
 		let when = BLOCK_NUMBER.into();
-
-		fill_schedule::<T>(when, s)?;
-	}: _(RawOrigin::Root, 0.encode())
+		let id = 0.encode().try_into().unwrap_or([0; MAX_TASK_ID_LENGTH_IN_BYTES as usize]);
+		fill_schedule::<T>(when, s, true, Some(false))?;
+	}: _(origin, id)
 	verify {
 		ensure!(
-			Lookup::<T>::get(0.encode()).is_none(),
+			Lookup::<T>::get(id).is_none(),
 			"didn't remove from lookup"
 		);
 		// Removed schedule is NONE
@@ -144,21 +235,5 @@
 		);
 	}
 
-	// TODO [#7141]: Make this more complex and flexible so it can be used in automation.
-	#[extra]
-	on_initialize {
-		let s in 0 .. T::MaxScheduledPerBlock::get();
-		let when = BLOCK_NUMBER.into();
-		fill_schedule::<T>(when, s)?;
-	}: { Scheduler::<T>::on_initialize(BLOCK_NUMBER.into()); }
-	verify {
-		assert_eq!(System::<T>::event_count(), s);
-		// Next block should have all the schedules again
-		ensure!(
-			Agenda::<T>::get(when + T::BlockNumber::one()).len() == s as usize,
-			"didn't append schedule"
-		);
-	}
+	impl_benchmark_test_suite!(Scheduler, crate::mock::new_test_ext(), crate::mock::Test);
 }
-
-impl_benchmark_test_suite!(Scheduler, crate::tests::new_test_ext(), crate::tests::Test,);
modifiedpallets/scheduler/src/lib.rsdiffbeforeafterboth
--- a/pallets/scheduler/src/lib.rs
+++ b/pallets/scheduler/src/lib.rs
@@ -60,9 +60,8 @@
 // Ensure we're `no_std` when compiling for Wasm.
 #![cfg_attr(not(feature = "std"), no_std)]
 
-// FIXME
-// #[cfg(feature = "runtime-benchmarks")]
-// mod benchmarking;
+#[cfg(feature = "runtime-benchmarks")]
+mod benchmarking;
 
 pub mod weights;
 
@@ -159,11 +158,10 @@
 				Self::on_initialize_periodic(2) - Self::on_initialize_periodic(1)
 			}
 			(true, true, Some(false)) => {
-				Self::on_initialize_periodic_named(2) - Self::on_initialize_periodic_named(1)
-			}
-			(false, false, Some(true)) => {
-				Self::on_initialize_resolved(2) - Self::on_initialize_resolved(1)
+				Self::on_initialize_periodic_named_resolved(2)
+					- Self::on_initialize_periodic_named_resolved(1)
 			}
+			(false, false, Some(true)) => Self::on_initialize(2) - Self::on_initialize(1),
 			(false, true, Some(true)) => {
 				Self::on_initialize_named_resolved(2) - Self::on_initialize_named_resolved(1)
 			}
@@ -608,97 +606,8 @@
 		}
 
 		Ok(when)
-	}
-
-	fn do_schedule(
-		when: DispatchTime<T::BlockNumber>,
-		maybe_periodic: Option<schedule::Period<T::BlockNumber>>,
-		priority: schedule::Priority,
-		origin: T::PalletsOrigin,
-		call: CallOrHashOf<T>,
-	) -> Result<TaskAddress<T::BlockNumber>, DispatchError> {
-		let when = Self::resolve_time(when)?;
-		call.ensure_requested::<T::PreimageProvider>();
-
-		// sanitize maybe_periodic
-		let maybe_periodic = maybe_periodic
-			.filter(|p| p.1 > 1 && !p.0.is_zero())
-			// Remove one from the number of repetitions since we will schedule one now.
-			.map(|(p, c)| (p, c - 1));
-		let s = Some(Scheduled {
-			maybe_id: None,
-			priority,
-			call,
-			maybe_periodic,
-			origin,
-			_phantom: PhantomData::<T::AccountId>::default(),
-		});
-		Agenda::<T>::append(when, s);
-		let index = Agenda::<T>::decode_len(when).unwrap_or(1) as u32 - 1;
-		Self::deposit_event(Event::Scheduled { when, index });
-
-		Ok((when, index))
 	}
 
-	fn do_cancel(
-		origin: Option<T::PalletsOrigin>,
-		(when, index): TaskAddress<T::BlockNumber>,
-	) -> Result<(), DispatchError> {
-		let scheduled = Agenda::<T>::try_mutate(when, |agenda| {
-			agenda.get_mut(index as usize).map_or(
-				Ok(None),
-				|s| -> Result<Option<Scheduled<_, _, _, _>>, DispatchError> {
-					if let (Some(ref o), Some(ref s)) = (origin, s.borrow()) {
-						if matches!(
-							T::OriginPrivilegeCmp::cmp_privilege(o, &s.origin),
-							Some(Ordering::Less) | None
-						) {
-							return Err(BadOrigin.into());
-						}
-					};
-					Ok(s.take())
-				},
-			)
-		})?;
-		if let Some(s) = scheduled {
-			s.call.ensure_unrequested::<T::PreimageProvider>();
-			if let Some(id) = s.maybe_id {
-				Lookup::<T>::remove(id);
-			}
-			Self::deposit_event(Event::Canceled { when, index });
-			Ok(())
-		} else {
-			Err(Error::<T>::NotFound)?
-		}
-	}
-
-	fn do_reschedule(
-		(when, index): TaskAddress<T::BlockNumber>,
-		new_time: DispatchTime<T::BlockNumber>,
-	) -> Result<TaskAddress<T::BlockNumber>, DispatchError> {
-		let new_time = Self::resolve_time(new_time)?;
-
-		if new_time == when {
-			return Err(Error::<T>::RescheduleNoChange.into());
-		}
-
-		Agenda::<T>::try_mutate(when, |agenda| -> DispatchResult {
-			let task = agenda.get_mut(index as usize).ok_or(Error::<T>::NotFound)?;
-			let task = task.take().ok_or(Error::<T>::NotFound)?;
-			Agenda::<T>::append(new_time, Some(task));
-			Ok(())
-		})?;
-
-		let new_index = Agenda::<T>::decode_len(new_time).unwrap_or(1) as u32 - 1;
-		Self::deposit_event(Event::Canceled { when, index });
-		Self::deposit_event(Event::Scheduled {
-			when: new_time,
-			index: new_index,
-		});
-
-		Ok((new_time, new_index))
-	}
-
 	fn do_schedule_named(
 		id: ScheduledId,
 		when: DispatchTime<T::BlockNumber>,
@@ -789,125 +698,5 @@
 				Err(Error::<T>::NotFound)?
 			}
 		})
-	}
-
-	fn do_reschedule_named(
-		id: ScheduledId,
-		new_time: DispatchTime<T::BlockNumber>,
-	) -> Result<TaskAddress<T::BlockNumber>, DispatchError> {
-		let new_time = Self::resolve_time(new_time)?;
-
-		Lookup::<T>::try_mutate_exists(
-			id,
-			|lookup| -> Result<TaskAddress<T::BlockNumber>, DispatchError> {
-				let (when, index) = lookup.ok_or(Error::<T>::NotFound)?;
-
-				if new_time == when {
-					return Err(Error::<T>::RescheduleNoChange.into());
-				}
-
-				Agenda::<T>::try_mutate(when, |agenda| -> DispatchResult {
-					let task = agenda.get_mut(index as usize).ok_or(Error::<T>::NotFound)?;
-					let task = task.take().ok_or(Error::<T>::NotFound)?;
-					Agenda::<T>::append(new_time, Some(task));
-
-					Ok(())
-				})?;
-
-				let new_index = Agenda::<T>::decode_len(new_time).unwrap_or(1) as u32 - 1;
-				Self::deposit_event(Event::Canceled { when, index });
-				Self::deposit_event(Event::Scheduled {
-					when: new_time,
-					index: new_index,
-				});
-
-				*lookup = Some((new_time, new_index));
-
-				Ok((new_time, new_index))
-			},
-		)
-	}
-}
-
-impl<T: Config> schedule::v2::Anon<T::BlockNumber, <T as Config>::Call, T::PalletsOrigin>
-	for Pallet<T>
-{
-	type Address = TaskAddress<T::BlockNumber>;
-	type Hash = T::Hash;
-
-	fn schedule(
-		when: DispatchTime<T::BlockNumber>,
-		maybe_periodic: Option<schedule::Period<T::BlockNumber>>,
-		priority: schedule::Priority,
-		origin: T::PalletsOrigin,
-		call: CallOrHashOf<T>,
-	) -> Result<Self::Address, DispatchError> {
-		Self::do_schedule(when, maybe_periodic, priority, origin, call)
-	}
-
-	fn cancel((when, index): Self::Address) -> Result<(), ()> {
-		Self::do_cancel(None, (when, index)).map_err(|_| ())
-	}
-
-	fn reschedule(
-		address: Self::Address,
-		when: DispatchTime<T::BlockNumber>,
-	) -> Result<Self::Address, DispatchError> {
-		Self::do_reschedule(address, when)
-	}
-
-	fn next_dispatch_time((when, index): Self::Address) -> Result<T::BlockNumber, ()> {
-		Agenda::<T>::get(when)
-			.get(index as usize)
-			.ok_or(())
-			.map(|_| when)
-	}
-}
-
-impl<T: Config> schedule::v2::Named<T::BlockNumber, <T as Config>::Call, T::PalletsOrigin>
-	for Pallet<T>
-{
-	type Address = TaskAddress<T::BlockNumber>;
-	type Hash = T::Hash;
-
-	fn schedule_named(
-		id: Vec<u8>,
-		when: DispatchTime<T::BlockNumber>,
-		maybe_periodic: Option<schedule::Period<T::BlockNumber>>,
-		priority: schedule::Priority,
-		origin: T::PalletsOrigin,
-		call: CallOrHashOf<T>,
-	) -> Result<Self::Address, ()> {
-		let inner_id: ScheduledId = id
-			.try_into()
-			.unwrap_or([0; MAX_TASK_ID_LENGTH_IN_BYTES as usize]);
-		Self::do_schedule_named(inner_id, when, maybe_periodic, priority, origin, call)
-			.map_err(|_| ())
-	}
-
-	fn cancel_named(id: Vec<u8>) -> Result<(), ()> {
-		let inner_id: ScheduledId = id
-			.try_into()
-			.unwrap_or([0; MAX_TASK_ID_LENGTH_IN_BYTES as usize]);
-		Self::do_cancel_named(None, inner_id).map_err(|_| ())
-	}
-
-	fn reschedule_named(
-		id: Vec<u8>,
-		when: DispatchTime<T::BlockNumber>,
-	) -> Result<Self::Address, DispatchError> {
-		let inner_id: ScheduledId = id
-			.try_into()
-			.unwrap_or([0; MAX_TASK_ID_LENGTH_IN_BYTES as usize]);
-		Self::do_reschedule_named(inner_id, when)
-	}
-
-	fn next_dispatch_time(id: Vec<u8>) -> Result<T::BlockNumber, ()> {
-		let inner_id: ScheduledId = id
-			.try_into()
-			.unwrap_or([0; MAX_TASK_ID_LENGTH_IN_BYTES as usize]);
-		Lookup::<T>::get(inner_id)
-			.and_then(|(when, index)| Agenda::<T>::get(when).get(index as usize).map(|_| when))
-			.ok_or(())
 	}
 }
modifiedpallets/scheduler/src/weights.rsdiffbeforeafterboth
--- a/pallets/scheduler/src/weights.rs
+++ b/pallets/scheduler/src/weights.rs
@@ -1,213 +1,183 @@
-// This file is part of Substrate.
-
-// Copyright (C) 2022 Parity Technologies (UK) Ltd.
-// SPDX-License-Identifier: Apache-2.0
-
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
+// Template adopted from https://github.com/paritytech/substrate/blob/master/.maintain/frame-weight-template.hbs
 
-//! Autogenerated weights for pallet_scheduler
+//! Autogenerated weights for pallet_unique_scheduler
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-01-31, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
-//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024
+//! DATE: 2022-06-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
-// ./target/production/substrate
+// target/release/unique-collator
 // benchmark
-// --chain=dev
+// pallet
+// --pallet
+// pallet-unique-scheduler
+// --wasm-execution
+// compiled
+// --extrinsic
+// *
+// --template
+// .maintain/frame-weight-template.hbs
 // --steps=50
-// --repeat=20
-// --pallet=pallet_scheduler
-// --extrinsic=*
-// --execution=wasm
-// --wasm-execution=compiled
+// --repeat=80
 // --heap-pages=4096
-// --output=./frame/scheduler/src/weights.rs
-// --template=.maintain/frame-weight-template.hbs
-// --header=HEADER-APACHE2
-// --raw
+// --output=./pallets/scheduler/src/weights.rs
 
 #![cfg_attr(rustfmt, rustfmt_skip)]
 #![allow(unused_parens)]
 #![allow(unused_imports)]
+#![allow(clippy::unnecessary_cast)]
 
 use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
 use sp_std::marker::PhantomData;
 
-/// Weight functions needed for pallet_scheduler.
+/// Weight functions needed for pallet_unique_scheduler.
 pub trait WeightInfo {
 	fn on_initialize_periodic_named_resolved(s: u32, ) -> Weight;
 	fn on_initialize_named_resolved(s: u32, ) -> Weight;
+	fn on_initialize_periodic(s: u32, ) -> Weight;
 	fn on_initialize_periodic_resolved(s: u32, ) -> Weight;
-	fn on_initialize_resolved(s: u32, ) -> Weight;
+	fn on_initialize_aborted(s: u32, ) -> Weight;
 	fn on_initialize_named_aborted(s: u32, ) -> Weight;
-	fn on_initialize_aborted(s: u32, ) -> Weight;
-	fn on_initialize_periodic_named(s: u32, ) -> Weight;
-	fn on_initialize_periodic(s: u32, ) -> Weight;
 	fn on_initialize_named(s: u32, ) -> Weight;
 	fn on_initialize(s: u32, ) -> Weight;
-	fn schedule(s: u32, ) -> Weight;
-	fn cancel(s: u32, ) -> Weight;
+	fn on_initialize_resolved(s: u32, ) -> Weight;
 	fn schedule_named(s: u32, ) -> Weight;
 	fn cancel_named(s: u32, ) -> Weight;
 }
 
-/// Weights for pallet_scheduler using the Substrate node and recommended hardware.
+/// Weights for pallet_unique_scheduler using the Substrate node and recommended hardware.
 pub struct SubstrateWeight<T>(PhantomData<T>);
 impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	// Storage: Scheduler Agenda (r:2 w:2)
-	// Storage: Preimage PreimageFor (r:1 w:1)
-	// Storage: Preimage StatusFor (r:1 w:1)
+	// Storage: System Account (r:1 w:1)
+	// Storage: System AllExtrinsicsLen (r:1 w:1)
+	// Storage: System BlockWeight (r:1 w:1)
 	// Storage: Scheduler Lookup (r:0 w:1)
 	fn on_initialize_periodic_named_resolved(s: u32, ) -> Weight {
-		(11_587_000 as Weight)
-			// Standard Error: 17_000
-			.saturating_add((17_428_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
-			.saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(s as Weight)))
-			.saturating_add(T::DbWeight::get().writes(1 as Weight))
-			.saturating_add(T::DbWeight::get().writes((4 as Weight).saturating_mul(s as Weight)))
+		(27_374_000 as Weight)
+			// Standard Error: 7_000
+			.saturating_add((9_673_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add(T::DbWeight::get().reads(4 as Weight))
+			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
+			.saturating_add(T::DbWeight::get().writes(4 as Weight))
+			.saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(s as Weight)))
 	}
 	// Storage: Scheduler Agenda (r:1 w:1)
-	// Storage: Preimage PreimageFor (r:1 w:1)
-	// Storage: Preimage StatusFor (r:1 w:1)
+	// Storage: System Account (r:1 w:1)
+	// Storage: System AllExtrinsicsLen (r:1 w:1)
+	// Storage: System BlockWeight (r:1 w:1)
 	// Storage: Scheduler Lookup (r:0 w:1)
 	fn on_initialize_named_resolved(s: u32, ) -> Weight {
-		(8_965_000 as Weight)
-			// Standard Error: 11_000
-			.saturating_add((13_410_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
-			.saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(s as Weight)))
-			.saturating_add(T::DbWeight::get().writes(1 as Weight))
-			.saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(s as Weight)))
+		(25_967_000 as Weight)
+			// Standard Error: 6_000
+			.saturating_add((5_916_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add(T::DbWeight::get().reads(4 as Weight))
+			.saturating_add(T::DbWeight::get().writes(4 as Weight))
+			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
 	}
 	// Storage: Scheduler Agenda (r:2 w:2)
-	// Storage: Preimage PreimageFor (r:1 w:1)
-	// Storage: Preimage StatusFor (r:1 w:1)
-	fn on_initialize_periodic_resolved(s: u32, ) -> Weight {
-		(8_654_000 as Weight)
-			// Standard Error: 17_000
-			.saturating_add((14_990_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
-			.saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(s as Weight)))
-			.saturating_add(T::DbWeight::get().writes(1 as Weight))
-			.saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(s as Weight)))
-	}
-	// Storage: Scheduler Agenda (r:1 w:1)
-	// Storage: Preimage PreimageFor (r:1 w:1)
-	// Storage: Preimage StatusFor (r:1 w:1)
-	fn on_initialize_resolved(s: u32, ) -> Weight {
-		(9_303_000 as Weight)
-			// Standard Error: 10_000
-			.saturating_add((12_244_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
-			.saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(s as Weight)))
-			.saturating_add(T::DbWeight::get().writes(1 as Weight))
+	// Storage: System Account (r:1 w:1)
+	// Storage: System AllExtrinsicsLen (r:1 w:1)
+	// Storage: System BlockWeight (r:1 w:1)
+	// Storage: Scheduler Lookup (r:0 w:1)
+	fn on_initialize_periodic(s: u32, ) -> Weight {
+		(27_097_000 as Weight)
+			// Standard Error: 5_000
+			.saturating_add((9_652_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add(T::DbWeight::get().reads(4 as Weight))
+			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
+			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(s as Weight)))
 	}
 	// Storage: Scheduler Agenda (r:2 w:2)
-	// Storage: Preimage PreimageFor (r:1 w:0)
+	// Storage: System Account (r:1 w:1)
+	// Storage: System AllExtrinsicsLen (r:1 w:1)
+	// Storage: System BlockWeight (r:1 w:1)
 	// Storage: Scheduler Lookup (r:0 w:1)
-	fn on_initialize_named_aborted(s: u32, ) -> Weight {
-		(7_506_000 as Weight)
-			// Standard Error: 3_000
-			.saturating_add((5_208_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(T::DbWeight::get().reads(2 as Weight))
+	fn on_initialize_periodic_resolved(s: u32, ) -> Weight {
+		(43_116_000 as Weight)
+			// Standard Error: 18_000
+			.saturating_add((8_352_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
-			.saturating_add(T::DbWeight::get().writes(2 as Weight))
-			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
+			.saturating_add(T::DbWeight::get().writes(4 as Weight))
+			.saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(s as Weight)))
 	}
 	// Storage: Scheduler Agenda (r:2 w:2)
-	// Storage: Preimage PreimageFor (r:1 w:0)
+	// Storage: Scheduler Lookup (r:0 w:1)
 	fn on_initialize_aborted(s: u32, ) -> Weight {
-		(8_046_000 as Weight)
-			// Standard Error: 3_000
-			.saturating_add((2_914_000 as Weight).saturating_mul(s as Weight))
+		(4_921_000 as Weight)
+			// Standard Error: 4_000
+			.saturating_add((2_249_000 as Weight).saturating_mul(s as Weight))
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
-			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
+			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
 	}
-	// Storage: Scheduler Agenda (r:2 w:2)
+	// Storage: Scheduler Agenda (r:1 w:1)
+	// Storage: System Account (r:1 w:1)
+	// Storage: System AllExtrinsicsLen (r:1 w:1)
+	// Storage: System BlockWeight (r:1 w:1)
 	// Storage: Scheduler Lookup (r:0 w:1)
-	fn on_initialize_periodic_named(s: u32, ) -> Weight {
-		(13_704_000 as Weight)
-			// Standard Error: 4_000
-			.saturating_add((8_186_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
-			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
-			.saturating_add(T::DbWeight::get().writes(1 as Weight))
-			.saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(s as Weight)))
-	}
-	// Storage: Scheduler Agenda (r:2 w:2)
-	fn on_initialize_periodic(s: u32, ) -> Weight {
-		(12_668_000 as Weight)
-			// Standard Error: 5_000
-			.saturating_add((5_868_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
-			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
-			.saturating_add(T::DbWeight::get().writes(1 as Weight))
+	fn on_initialize_named_aborted(s: u32, ) -> Weight {
+		(26_934_000 as Weight)
+			// Standard Error: 7_000
+			.saturating_add((5_819_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add(T::DbWeight::get().reads(4 as Weight))
+			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
 	}
-	// Storage: Scheduler Agenda (r:1 w:1)
+	// Storage: Scheduler Agenda (r:2 w:2)
 	// Storage: Scheduler Lookup (r:0 w:1)
 	fn on_initialize_named(s: u32, ) -> Weight {
-		(13_946_000 as Weight)
-			// Standard Error: 4_000
-			.saturating_add((4_367_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
-			.saturating_add(T::DbWeight::get().writes(1 as Weight))
+		(6_423_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((2_141_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add(T::DbWeight::get().reads(2 as Weight))
+			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
 	}
 	// Storage: Scheduler Agenda (r:1 w:1)
+	// Storage: System Account (r:1 w:1)
+	// Storage: System AllExtrinsicsLen (r:1 w:1)
+	// Storage: System BlockWeight (r:1 w:1)
+	// Storage: Scheduler Lookup (r:0 w:1)
 	fn on_initialize(s: u32, ) -> Weight {
-		(13_151_000 as Weight)
-			// Standard Error: 4_000
-			.saturating_add((3_455_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
-			.saturating_add(T::DbWeight::get().writes(1 as Weight))
+		(27_586_000 as Weight)
+			// Standard Error: 11_000
+			.saturating_add((5_264_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add(T::DbWeight::get().reads(4 as Weight))
+			.saturating_add(T::DbWeight::get().writes(4 as Weight))
+			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
 	}
 	// Storage: Scheduler Agenda (r:1 w:1)
-	fn schedule(s: u32, ) -> Weight {
-		(14_040_000 as Weight)
-			// Standard Error: 1_000
-			.saturating_add((89_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
-			.saturating_add(T::DbWeight::get().writes(1 as Weight))
-	}
-	// Storage: Scheduler Agenda (r:1 w:1)
+	// Storage: System Account (r:1 w:1)
+	// Storage: System AllExtrinsicsLen (r:1 w:1)
+	// Storage: System BlockWeight (r:1 w:1)
 	// Storage: Scheduler Lookup (r:0 w:1)
-	fn cancel(s: u32, ) -> Weight {
-		(14_376_000 as Weight)
-			// Standard Error: 1_000
-			.saturating_add((576_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
-			.saturating_add(T::DbWeight::get().writes(2 as Weight))
+	fn on_initialize_resolved(s: u32, ) -> Weight {
+		(24_356_000 as Weight)
+			// Standard Error: 4_000
+			.saturating_add((5_301_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add(T::DbWeight::get().reads(4 as Weight))
+			.saturating_add(T::DbWeight::get().writes(4 as Weight))
+			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
 	}
 	// Storage: Scheduler Lookup (r:1 w:1)
 	// Storage: Scheduler Agenda (r:1 w:1)
 	fn schedule_named(s: u32, ) -> Weight {
-		(16_806_000 as Weight)
+		(14_871_000 as Weight)
 			// Standard Error: 1_000
-			.saturating_add((102_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add((183_000 as Weight).saturating_mul(s as Weight))
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Scheduler Lookup (r:1 w:1)
 	// Storage: Scheduler Agenda (r:1 w:1)
 	fn cancel_named(s: u32, ) -> Weight {
-		(15_852_000 as Weight)
-			// Standard Error: 2_000
-			.saturating_add((590_000 as Weight).saturating_mul(s as Weight))
+		(16_676_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((500_000 as Weight).saturating_mul(s as Weight))
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
@@ -216,148 +186,134 @@
 // For backwards compatibility and tests
 impl WeightInfo for () {
 	// Storage: Scheduler Agenda (r:2 w:2)
-	// Storage: Preimage PreimageFor (r:1 w:1)
-	// Storage: Preimage StatusFor (r:1 w:1)
+	// Storage: System Account (r:1 w:1)
+	// Storage: System AllExtrinsicsLen (r:1 w:1)
+	// Storage: System BlockWeight (r:1 w:1)
 	// Storage: Scheduler Lookup (r:0 w:1)
 	fn on_initialize_periodic_named_resolved(s: u32, ) -> Weight {
-		(11_587_000 as Weight)
-			// Standard Error: 17_000
-			.saturating_add((17_428_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
-			.saturating_add(RocksDbWeight::get().reads((3 as Weight).saturating_mul(s as Weight)))
-			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
-			.saturating_add(RocksDbWeight::get().writes((4 as Weight).saturating_mul(s as Weight)))
+		(27_374_000 as Weight)
+			// Standard Error: 7_000
+			.saturating_add((9_673_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
+			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
+			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
+			.saturating_add(RocksDbWeight::get().writes((2 as Weight).saturating_mul(s as Weight)))
 	}
 	// Storage: Scheduler Agenda (r:1 w:1)
-	// Storage: Preimage PreimageFor (r:1 w:1)
-	// Storage: Preimage StatusFor (r:1 w:1)
+	// Storage: System Account (r:1 w:1)
+	// Storage: System AllExtrinsicsLen (r:1 w:1)
+	// Storage: System BlockWeight (r:1 w:1)
 	// Storage: Scheduler Lookup (r:0 w:1)
 	fn on_initialize_named_resolved(s: u32, ) -> Weight {
-		(8_965_000 as Weight)
-			// Standard Error: 11_000
-			.saturating_add((13_410_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
-			.saturating_add(RocksDbWeight::get().reads((2 as Weight).saturating_mul(s as Weight)))
-			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
-			.saturating_add(RocksDbWeight::get().writes((3 as Weight).saturating_mul(s as Weight)))
+		(25_967_000 as Weight)
+			// Standard Error: 6_000
+			.saturating_add((5_916_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
+			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
 	}
 	// Storage: Scheduler Agenda (r:2 w:2)
-	// Storage: Preimage PreimageFor (r:1 w:1)
-	// Storage: Preimage StatusFor (r:1 w:1)
-	fn on_initialize_periodic_resolved(s: u32, ) -> Weight {
-		(8_654_000 as Weight)
-			// Standard Error: 17_000
-			.saturating_add((14_990_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
-			.saturating_add(RocksDbWeight::get().reads((3 as Weight).saturating_mul(s as Weight)))
-			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
-			.saturating_add(RocksDbWeight::get().writes((3 as Weight).saturating_mul(s as Weight)))
-	}
-	// Storage: Scheduler Agenda (r:1 w:1)
-	// Storage: Preimage PreimageFor (r:1 w:1)
-	// Storage: Preimage StatusFor (r:1 w:1)
-	fn on_initialize_resolved(s: u32, ) -> Weight {
-		(9_303_000 as Weight)
-			// Standard Error: 10_000
-			.saturating_add((12_244_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
-			.saturating_add(RocksDbWeight::get().reads((2 as Weight).saturating_mul(s as Weight)))
-			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
+	// Storage: System Account (r:1 w:1)
+	// Storage: System AllExtrinsicsLen (r:1 w:1)
+	// Storage: System BlockWeight (r:1 w:1)
+	// Storage: Scheduler Lookup (r:0 w:1)
+	fn on_initialize_periodic(s: u32, ) -> Weight {
+		(27_097_000 as Weight)
+			// Standard Error: 5_000
+			.saturating_add((9_652_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
+			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
+			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes((2 as Weight).saturating_mul(s as Weight)))
 	}
 	// Storage: Scheduler Agenda (r:2 w:2)
-	// Storage: Preimage PreimageFor (r:1 w:0)
+	// Storage: System Account (r:1 w:1)
+	// Storage: System AllExtrinsicsLen (r:1 w:1)
+	// Storage: System BlockWeight (r:1 w:1)
 	// Storage: Scheduler Lookup (r:0 w:1)
-	fn on_initialize_named_aborted(s: u32, ) -> Weight {
-		(7_506_000 as Weight)
-			// Standard Error: 3_000
-			.saturating_add((5_208_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
+	fn on_initialize_periodic_resolved(s: u32, ) -> Weight {
+		(43_116_000 as Weight)
+			// Standard Error: 18_000
+			.saturating_add((8_352_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
-			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
-			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
+			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
+			.saturating_add(RocksDbWeight::get().writes((2 as Weight).saturating_mul(s as Weight)))
 	}
 	// Storage: Scheduler Agenda (r:2 w:2)
-	// Storage: Preimage PreimageFor (r:1 w:0)
+	// Storage: Scheduler Lookup (r:0 w:1)
 	fn on_initialize_aborted(s: u32, ) -> Weight {
-		(8_046_000 as Weight)
-			// Standard Error: 3_000
-			.saturating_add((2_914_000 as Weight).saturating_mul(s as Weight))
+		(4_921_000 as Weight)
+			// Standard Error: 4_000
+			.saturating_add((2_249_000 as Weight).saturating_mul(s as Weight))
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
-			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
+			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
 	}
-	// Storage: Scheduler Agenda (r:2 w:2)
+	// Storage: Scheduler Agenda (r:1 w:1)
+	// Storage: System Account (r:1 w:1)
+	// Storage: System AllExtrinsicsLen (r:1 w:1)
+	// Storage: System BlockWeight (r:1 w:1)
 	// Storage: Scheduler Lookup (r:0 w:1)
-	fn on_initialize_periodic_named(s: u32, ) -> Weight {
-		(13_704_000 as Weight)
-			// Standard Error: 4_000
-			.saturating_add((8_186_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
-			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
-			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
-			.saturating_add(RocksDbWeight::get().writes((2 as Weight).saturating_mul(s as Weight)))
-	}
-	// Storage: Scheduler Agenda (r:2 w:2)
-	fn on_initialize_periodic(s: u32, ) -> Weight {
-		(12_668_000 as Weight)
-			// Standard Error: 5_000
-			.saturating_add((5_868_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
-			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(s as Weight)))
-			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
+	fn on_initialize_named_aborted(s: u32, ) -> Weight {
+		(26_934_000 as Weight)
+			// Standard Error: 7_000
+			.saturating_add((5_819_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
 	}
-	// Storage: Scheduler Agenda (r:1 w:1)
+	// Storage: Scheduler Agenda (r:2 w:2)
 	// Storage: Scheduler Lookup (r:0 w:1)
 	fn on_initialize_named(s: u32, ) -> Weight {
-		(13_946_000 as Weight)
-			// Standard Error: 4_000
-			.saturating_add((4_367_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
+		(6_423_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((2_141_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
 	}
 	// Storage: Scheduler Agenda (r:1 w:1)
+	// Storage: System Account (r:1 w:1)
+	// Storage: System AllExtrinsicsLen (r:1 w:1)
+	// Storage: System BlockWeight (r:1 w:1)
+	// Storage: Scheduler Lookup (r:0 w:1)
 	fn on_initialize(s: u32, ) -> Weight {
-		(13_151_000 as Weight)
-			// Standard Error: 4_000
-			.saturating_add((3_455_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
+		(27_586_000 as Weight)
+			// Standard Error: 11_000
+			.saturating_add((5_264_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
+			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
 	}
 	// Storage: Scheduler Agenda (r:1 w:1)
-	fn schedule(s: u32, ) -> Weight {
-		(14_040_000 as Weight)
-			// Standard Error: 1_000
-			.saturating_add((89_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
-	}
-	// Storage: Scheduler Agenda (r:1 w:1)
+	// Storage: System Account (r:1 w:1)
+	// Storage: System AllExtrinsicsLen (r:1 w:1)
+	// Storage: System BlockWeight (r:1 w:1)
 	// Storage: Scheduler Lookup (r:0 w:1)
-	fn cancel(s: u32, ) -> Weight {
-		(14_376_000 as Weight)
-			// Standard Error: 1_000
-			.saturating_add((576_000 as Weight).saturating_mul(s as Weight))
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
+	fn on_initialize_resolved(s: u32, ) -> Weight {
+		(24_356_000 as Weight)
+			// Standard Error: 4_000
+			.saturating_add((5_301_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
+			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
 	}
 	// Storage: Scheduler Lookup (r:1 w:1)
 	// Storage: Scheduler Agenda (r:1 w:1)
 	fn schedule_named(s: u32, ) -> Weight {
-		(16_806_000 as Weight)
+		(14_871_000 as Weight)
 			// Standard Error: 1_000
-			.saturating_add((102_000 as Weight).saturating_mul(s as Weight))
+			.saturating_add((183_000 as Weight).saturating_mul(s as Weight))
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Scheduler Lookup (r:1 w:1)
 	// Storage: Scheduler Agenda (r:1 w:1)
 	fn cancel_named(s: u32, ) -> Weight {
-		(15_852_000 as Weight)
-			// Standard Error: 2_000
-			.saturating_add((590_000 as Weight).saturating_mul(s as Weight))
+		(16_676_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((500_000 as Weight).saturating_mul(s as Weight))
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
modifiedpallets/structure/src/weights.rsdiffbeforeafterboth
--- a/pallets/structure/src/weights.rs
+++ b/pallets/structure/src/weights.rs
@@ -3,12 +3,13 @@
 //! Autogenerated weights for pallet_structure
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-03-24, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-06-15, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
 // target/release/unique-collator
 // benchmark
+// pallet
 // --pallet
 // pallet-structure
 // --wasm-execution
@@ -41,7 +42,7 @@
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Nonfungible TokenData (r:1 w:0)
 	fn find_parent() -> Weight {
-		(6_302_000 as Weight)
+		(7_013_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 	}
 }
@@ -51,7 +52,7 @@
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Nonfungible TokenData (r:1 w:0)
 	fn find_parent() -> Weight {
-		(6_302_000 as Weight)
+		(7_013_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 	}
 }
modifiedpallets/unique/src/lib.rsdiffbeforeafterboth
--- a/pallets/unique/src/lib.rs
+++ b/pallets/unique/src/lib.rs
@@ -491,7 +491,7 @@
 			let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
 
 			let mut target_collection = <CollectionHandle<T>>::try_get(collection_id)?;
-			target_collection.check_is_owner(&sender)?;
+			target_collection.check_is_owner_or_admin(&sender)?;
 			target_collection.check_is_internal()?;
 
 			target_collection.set_sponsor(new_sponsor.clone())?;
@@ -670,9 +670,9 @@
 			dispatch_tx::<T, _>(collection_id, |d| d.delete_token_properties(sender, token_id, property_keys))
 		}
 
-		#[weight = T::CommonWeightInfo::set_property_permissions(property_permissions.len() as u32)]
+		#[weight = T::CommonWeightInfo::set_token_property_permissions(property_permissions.len() as u32)]
 		#[transactional]
-		pub fn set_property_permissions(
+		pub fn set_token_property_permissions(
 			origin,
 			collection_id: CollectionId,
 			property_permissions: Vec<PropertyKeyPermission>,
@@ -681,7 +681,7 @@
 
 			let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
 
-			dispatch_tx::<T, _>(collection_id, |d| d.set_property_permissions(&sender, property_permissions))
+			dispatch_tx::<T, _>(collection_id, |d| d.set_token_property_permissions(&sender, property_permissions))
 		}
 
 		#[weight = T::CommonWeightInfo::create_multiple_items_ex(&data)]
@@ -865,7 +865,7 @@
 			let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
 			let mut target_collection = <CollectionHandle<T>>::try_get(collection_id)?;
 			target_collection.check_is_internal()?;
-			target_collection.check_is_owner(&sender)?;
+			target_collection.check_is_owner_or_admin(&sender)?;
 			let old_limit = &target_collection.limits;
 
 			target_collection.limits = <PalletCommon<T>>::clamp_limits(target_collection.mode.clone(), &old_limit, new_limit)?;
@@ -887,7 +887,7 @@
 			let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
 			let mut target_collection = <CollectionHandle<T>>::try_get(collection_id)?;
 			target_collection.check_is_internal()?;
-			target_collection.check_is_owner(&sender)?;
+			target_collection.check_is_owner_or_admin(&sender)?;
 			let old_limit = &target_collection.permissions;
 
 			target_collection.permissions = <PalletCommon<T>>::clamp_permissions(target_collection.mode.clone(), &old_limit, new_limit)?;
modifiedpallets/unique/src/weights.rsdiffbeforeafterboth
--- a/pallets/unique/src/weights.rs
+++ b/pallets/unique/src/weights.rs
@@ -3,12 +3,13 @@
 //! Autogenerated weights for pallet_unique
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-03-01, STEPS: `50`, REPEAT: 200, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-06-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
 // target/release/unique-collator
 // benchmark
+// pallet
 // --pallet
 // pallet-unique
 // --wasm-execution
@@ -18,7 +19,7 @@
 // --template
 // .maintain/frame-weight-template.hbs
 // --steps=50
-// --repeat=200
+// --repeat=80
 // --heap-pages=4096
 // --output=./pallets/unique/src/weights.rs
 
@@ -36,8 +37,6 @@
 	fn destroy_collection() -> Weight;
 	fn add_to_allow_list() -> Weight;
 	fn remove_from_allow_list() -> Weight;
-	fn set_public_access_mode() -> Weight;
-	fn set_mint_permission() -> Weight;
 	fn change_collection_owner() -> Weight;
 	fn add_collection_admin() -> Weight;
 	fn remove_collection_admin() -> Weight;
@@ -45,9 +44,6 @@
 	fn confirm_sponsorship() -> Weight;
 	fn remove_collection_sponsor() -> Weight;
 	fn set_transfers_enabled_flag() -> Weight;
-	fn set_offchain_schema(b: u32, ) -> Weight;
-	fn set_const_on_chain_schema(b: u32, ) -> Weight;
-	fn set_schema_version() -> Weight;
 	fn set_collection_limits() -> Weight;
 }
 
@@ -57,51 +53,43 @@
 	// Storage: Common CreatedCollectionCount (r:1 w:1)
 	// Storage: Common DestroyedCollectionCount (r:1 w:0)
 	// Storage: System Account (r:2 w:2)
+	// Storage: Common CollectionPropertyPermissions (r:0 w:1)
+	// Storage: Common CollectionProperties (r:0 w:1)
 	// Storage: Common CollectionById (r:0 w:1)
 	fn create_collection() -> Weight {
-		(28_929_000 as Weight)
+		(39_427_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
-			.saturating_add(T::DbWeight::get().writes(4 as Weight))
+			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
+	// Storage: Nonfungible TokenData (r:1 w:0)
 	// Storage: Common DestroyedCollectionCount (r:1 w:1)
 	// Storage: Nonfungible TokensMinted (r:0 w:1)
 	// Storage: Nonfungible TokensBurnt (r:0 w:1)
 	// Storage: Common AdminAmount (r:0 w:1)
+	// Storage: Common CollectionProperties (r:0 w:1)
 	fn destroy_collection() -> Weight {
-		(40_303_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(2 as Weight))
-			.saturating_add(T::DbWeight::get().writes(5 as Weight))
+		(48_339_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(3 as Weight))
+			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Common Allowlist (r:0 w:1)
 	fn add_to_allow_list() -> Weight {
-		(15_989_000 as Weight)
+		(17_379_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Common Allowlist (r:0 w:1)
 	fn remove_from_allow_list() -> Weight {
-		(15_582_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
-			.saturating_add(T::DbWeight::get().writes(1 as Weight))
-	}
-	// Storage: Common CollectionById (r:1 w:1)
-	fn set_public_access_mode() -> Weight {
-		(14_846_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
-			.saturating_add(T::DbWeight::get().writes(1 as Weight))
-	}
-	// Storage: Common CollectionById (r:1 w:1)
-	fn set_mint_permission() -> Weight {
-		(14_534_000 as Weight)
+		(17_490_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn change_collection_owner() -> Weight {
-		(14_990_000 as Weight)
+		(17_701_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -109,7 +97,7 @@
 	// Storage: Common IsAdmin (r:1 w:1)
 	// Storage: Common AdminAmount (r:1 w:1)
 	fn add_collection_admin() -> Weight {
-		(19_957_000 as Weight)
+		(23_301_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
@@ -117,55 +105,37 @@
 	// Storage: Common IsAdmin (r:1 w:1)
 	// Storage: Common AdminAmount (r:1 w:1)
 	fn remove_collection_admin() -> Weight {
-		(21_209_000 as Weight)
+		(24_859_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_collection_sponsor() -> Weight {
-		(14_963_000 as Weight)
+		(17_795_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn confirm_sponsorship() -> Weight {
-		(14_478_000 as Weight)
+		(17_297_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn remove_collection_sponsor() -> Weight {
-		(14_393_000 as Weight)
+		(17_079_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_transfers_enabled_flag() -> Weight {
-		(7_309_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
-			.saturating_add(T::DbWeight::get().writes(1 as Weight))
-	}
-	// Storage: Common CollectionById (r:1 w:1)
-	fn set_offchain_schema(_b: u32, ) -> Weight {
-		(15_220_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
-			.saturating_add(T::DbWeight::get().writes(1 as Weight))
-	}
-	// Storage: Common CollectionById (r:1 w:1)
-	fn set_const_on_chain_schema(_b: u32, ) -> Weight {
-		(14_984_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(1 as Weight))
-			.saturating_add(T::DbWeight::get().writes(1 as Weight))
-	}
-	// Storage: Common CollectionById (r:1 w:1)
-	fn set_schema_version() -> Weight {
-		(14_596_000 as Weight)
+		(9_734_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_collection_limits() -> Weight {
-		(15_339_000 as Weight)
+		(17_998_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -176,51 +146,43 @@
 	// Storage: Common CreatedCollectionCount (r:1 w:1)
 	// Storage: Common DestroyedCollectionCount (r:1 w:0)
 	// Storage: System Account (r:2 w:2)
+	// Storage: Common CollectionPropertyPermissions (r:0 w:1)
+	// Storage: Common CollectionProperties (r:0 w:1)
 	// Storage: Common CollectionById (r:0 w:1)
 	fn create_collection() -> Weight {
-		(28_929_000 as Weight)
+		(39_427_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
+	// Storage: Nonfungible TokenData (r:1 w:0)
 	// Storage: Common DestroyedCollectionCount (r:1 w:1)
 	// Storage: Nonfungible TokensMinted (r:0 w:1)
 	// Storage: Nonfungible TokensBurnt (r:0 w:1)
 	// Storage: Common AdminAmount (r:0 w:1)
+	// Storage: Common CollectionProperties (r:0 w:1)
 	fn destroy_collection() -> Weight {
-		(40_303_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
+		(48_339_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Common Allowlist (r:0 w:1)
 	fn add_to_allow_list() -> Weight {
-		(15_989_000 as Weight)
+		(17_379_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Common Allowlist (r:0 w:1)
 	fn remove_from_allow_list() -> Weight {
-		(15_582_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
-	}
-	// Storage: Common CollectionById (r:1 w:1)
-	fn set_public_access_mode() -> Weight {
-		(14_846_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
-	}
-	// Storage: Common CollectionById (r:1 w:1)
-	fn set_mint_permission() -> Weight {
-		(14_534_000 as Weight)
+		(17_490_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn change_collection_owner() -> Weight {
-		(14_990_000 as Weight)
+		(17_701_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
@@ -228,7 +190,7 @@
 	// Storage: Common IsAdmin (r:1 w:1)
 	// Storage: Common AdminAmount (r:1 w:1)
 	fn add_collection_admin() -> Weight {
-		(19_957_000 as Weight)
+		(23_301_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
@@ -236,55 +198,37 @@
 	// Storage: Common IsAdmin (r:1 w:1)
 	// Storage: Common AdminAmount (r:1 w:1)
 	fn remove_collection_admin() -> Weight {
-		(21_209_000 as Weight)
+		(24_859_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_collection_sponsor() -> Weight {
-		(14_963_000 as Weight)
+		(17_795_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn confirm_sponsorship() -> Weight {
-		(14_478_000 as Weight)
+		(17_297_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn remove_collection_sponsor() -> Weight {
-		(14_393_000 as Weight)
+		(17_079_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_transfers_enabled_flag() -> Weight {
-		(7_309_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
-	}
-	// Storage: Common CollectionById (r:1 w:1)
-	fn set_offchain_schema(_b: u32, ) -> Weight {
-		(15_220_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
-	}
-	// Storage: Common CollectionById (r:1 w:1)
-	fn set_const_on_chain_schema(_b: u32, ) -> Weight {
-		(14_984_000 as Weight)
+		(9_734_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
-	fn set_schema_version() -> Weight {
-		(14_596_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
-	}
-	// Storage: Common CollectionById (r:1 w:1)
 	fn set_collection_limits() -> Weight {
-		(15_339_000 as Weight)
+		(17_998_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
modifiedprimitives/data-structs/src/lib.rsdiffbeforeafterboth
--- a/primitives/data-structs/src/lib.rs
+++ b/primitives/data-structs/src/lib.rs
@@ -39,15 +39,15 @@
 // RMRK
 use rmrk_traits::{
 	CollectionInfo, NftInfo, ResourceInfo, PropertyInfo, BaseInfo, PartType, Theme, ThemeProperty,
-	ResourceTypes, BasicResource, ComposableResource, SlotResource,
+	ResourceTypes, BasicResource, ComposableResource, SlotResource, EquippableList,
 };
 pub use rmrk_traits::{
 	primitives::{
 		CollectionId as RmrkCollectionId, NftId as RmrkNftId, BaseId as RmrkBaseId,
-		PartId as RmrkPartId, ResourceId as RmrkResourceId,
+		SlotId as RmrkSlotId, PartId as RmrkPartId, ResourceId as RmrkResourceId,
 	},
 	NftChild as RmrkNftChild, AccountIdOrCollectionNftTuple as RmrkAccountIdOrCollectionNftTuple,
-	FixedPart as RmrkFixedPart, SlotPart as RmrkSlotPart, EquippableList as RmrkEquippableList,
+	FixedPart as RmrkFixedPart, SlotPart as RmrkSlotPart,
 };
 
 mod bounded;
@@ -104,15 +104,10 @@
 pub const MAX_PROPERTY_VALUE_LENGTH: u32 = 32768;
 pub const MAX_PROPERTIES_PER_ITEM: u32 = 64;
 
+pub const MAX_AUX_PROPERTY_VALUE_LENGTH: u32 = 2048;
+
 pub const MAX_COLLECTION_PROPERTIES_SIZE: u32 = 40960;
 pub const MAX_TOKEN_PROPERTIES_SIZE: u32 = 32768;
-
-// RMRK constants
-pub const RMRK_STRING_LIMIT: u32 = 128;
-pub const RMRK_COLLECTION_SYMBOL_LIMIT: u32 = 100;
-pub const RMRK_RESOURCE_SYMBOL_LIMIT: u32 = 10;
-pub const RMRK_KEY_LIMIT: u32 = 32;
-pub const RMRK_VALUE_LIMIT: u32 = 256;
 
 /// How much items can be created per single
 /// create_many call
@@ -416,8 +411,11 @@
 			.min(MAX_SPONSOR_TIMEOUT)
 	}
 	pub fn owner_can_transfer(&self) -> bool {
-		self.owner_can_transfer.unwrap_or(true)
+		self.owner_can_transfer.unwrap_or(false)
 	}
+	pub fn owner_can_transfer_instaled(&self) -> bool {
+		self.owner_can_transfer.is_some()
+	}
 	pub fn owner_can_destroy(&self) -> bool {
 		self.owner_can_destroy.unwrap_or(true)
 	}
@@ -454,7 +452,7 @@
 	pub fn nesting(&self) -> &NestingPermissions {
 		static DEFAULT: NestingPermissions = NestingPermissions {
 			token_owner: false,
-			admin: false,
+			collection_admin: false,
 			restricted: None,
 
 			permissive: false,
@@ -497,7 +495,7 @@
 	/// Owner of token can nest tokens under it
 	pub token_owner: bool,
 	/// Admin of token collection can nest tokens under token
-	pub admin: bool,
+	pub collection_admin: bool,
 	/// If set - only tokens from specified collections can be nested
 	pub restricted: Option<OwnerRestrictedSet>,
 
@@ -658,8 +656,12 @@
 	}
 }
 
-pub type PropertyKey = BoundedVec<u8, ConstU32<MAX_PROPERTY_KEY_LENGTH>>;
-pub type PropertyValue = BoundedVec<u8, ConstU32<MAX_PROPERTY_VALUE_LENGTH>>;
+pub type BoundedBytes<S> = BoundedVec<u8, S>;
+
+pub type AuxPropertyValue = BoundedBytes<ConstU32<MAX_AUX_PROPERTY_VALUE_LENGTH>>;
+
+pub type PropertyKey = BoundedBytes<ConstU32<MAX_PROPERTY_KEY_LENGTH>>;
+pub type PropertyValue = BoundedBytes<ConstU32<MAX_PROPERTY_VALUE_LENGTH>>;
 
 #[derive(Encode, Decode, TypeInfo, Debug, MaxEncodedLen, PartialEq, Clone)]
 #[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
@@ -719,7 +721,7 @@
 	EmptyPropertyKey,
 }
 
-#[derive(Clone, Copy)]
+#[derive(Encode, Decode, MaxEncodedLen, TypeInfo, PartialEq, Clone, Copy)]
 pub enum PropertyScope {
 	None,
 	Rmrk,
@@ -812,7 +814,7 @@
 		for byte in key.as_slice().iter() {
 			let byte = *byte;
 
-			if !byte.is_ascii_alphanumeric() && byte != b'_' && byte != b'-' {
+			if !byte.is_ascii_alphanumeric() && byte != b'_' && byte != b'-' && byte != b'.' {
 				return Err(PropertiesError::InvalidCharacterInPropertyKey);
 			}
 		}
@@ -946,19 +948,25 @@
 	#[derive(PartialEq, TypeInfo)]
 	pub const RmrkStringLimit: u32 = 128;
 	#[derive(PartialEq)]
-	pub const RmrkCollectionSymbolLimit: u32 = 100;
+	pub const RmrkCollectionSymbolLimit: u32 = MAX_TOKEN_PREFIX_LENGTH;
 	#[derive(PartialEq)]
 	pub const RmrkResourceSymbolLimit: u32 = 10;
 	#[derive(PartialEq)]
+	pub const RmrkBaseSymbolLimit: u32 = MAX_TOKEN_PREFIX_LENGTH;
+	#[derive(PartialEq)]
 	pub const RmrkKeyLimit: u32 = 32;
 	#[derive(PartialEq)]
 	pub const RmrkValueLimit: u32 = 256;
 	#[derive(PartialEq)]
 	pub const RmrkMaxCollectionsEquippablePerPart: u32 = 100;
 	#[derive(PartialEq)]
-	pub const RmrkPartsLimit: u32 = 3;
+	pub const MaxPropertiesPerTheme: u32 = 5;
+	#[derive(PartialEq)]
+	pub const RmrkPartsLimit: u32 = 25;
 	#[derive(PartialEq)]
-	pub const RmrkMaxPriorities: u32 = 3;
+	pub const RmrkMaxPriorities: u32 = 25;
+	#[derive(PartialEq)]
+	pub const MaxResourcesOnMint: u32 = 100;
 }
 
 impl From<RmrkCollectionId> for CollectionId {
@@ -979,10 +987,13 @@
 pub type RmrkResourceInfo = ResourceInfo<RmrkString, RmrkBoundedParts>;
 pub type RmrkPropertyInfo = PropertyInfo<RmrkKeyString, RmrkValueString>;
 pub type RmrkBaseInfo<AccountId> = BaseInfo<AccountId, RmrkString>;
-pub type RmrkPartType =
-	PartType<RmrkString, BoundedVec<RmrkCollectionId, RmrkMaxCollectionsEquippablePerPart>>;
+pub type BoundedEquippableCollectionIds =
+	BoundedVec<RmrkCollectionId, RmrkMaxCollectionsEquippablePerPart>;
+pub type RmrkPartType = PartType<RmrkString, BoundedEquippableCollectionIds>;
+pub type RmrkEquippableList = EquippableList<BoundedEquippableCollectionIds>;
 pub type RmrkThemeProperty = ThemeProperty<RmrkString>;
 pub type RmrkTheme = Theme<RmrkString, Vec<RmrkThemeProperty>>;
+pub type RmrkBoundedTheme = Theme<RmrkString, BoundedVec<RmrkThemeProperty, MaxPropertiesPerTheme>>;
 pub type RmrkResourceTypes = ResourceTypes<RmrkString, RmrkBoundedParts>;
 
 pub type RmrkBasicResource = BasicResource<RmrkString>;
@@ -991,6 +1002,7 @@
 
 pub type RmrkString = BoundedVec<u8, RmrkStringLimit>;
 pub type RmrkCollectionSymbol = BoundedVec<u8, RmrkCollectionSymbolLimit>;
+pub type RmrkBaseSymbol = BoundedVec<u8, RmrkBaseSymbolLimit>;
 pub type RmrkKeyString = BoundedVec<u8, RmrkKeyLimit>;
 pub type RmrkValueString = BoundedVec<u8, RmrkValueLimit>;
 pub type RmrkBoundedResource = BoundedVec<u8, RmrkResourceSymbolLimit>;
modifiedruntime/common/Cargo.tomldiffbeforeafterboth
--- a/runtime/common/Cargo.toml
+++ b/runtime/common/Cargo.toml
@@ -6,7 +6,7 @@
 license = 'All Rights Reserved'
 name = 'unique-runtime-common'
 repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = '0.9.22'
+version = '0.9.23'
 
 [features]
 default = ['std']
@@ -89,6 +89,10 @@
 default-features = false
 path = "../../pallets/refungible"
 
+[dependencies.pallet-unique-scheduler]
+default-features = false
+path = "../../pallets/scheduler"
+
 [dependencies.up-data-structs]
 default-features = false
 path = "../../primitives/data-structs"
modifiedruntime/common/src/constants.rsdiffbeforeafterboth
--- a/runtime/common/src/constants.rs
+++ b/runtime/common/src/constants.rs
@@ -38,7 +38,7 @@
 pub const WEIGHT_TO_FEE_COEFF: u32 = 142_688_000;
 
 // Targeting 0.15 UNQ per transfer
-pub const MIN_GAS_PRICE: u64 = 1_018_751_825_264;
+pub const MIN_GAS_PRICE: u64 = 1_019_493_469_850;
 
 /// We assume that ~10% of the block weight is consumed by `on_initalize` handlers.
 /// This is used to limit the maximal weight of a single extrinsic.
modifiedruntime/common/src/dispatch.rsdiffbeforeafterboth
--- a/runtime/common/src/dispatch.rs
+++ b/runtime/common/src/dispatch.rs
@@ -112,6 +112,7 @@
 		+ pallet_fungible::Config
 		+ pallet_nonfungible::Config
 		+ pallet_refungible::Config,
+	T::AccountId: From<[u8; 32]>,
 {
 	fn is_reserved(target: &H160) -> bool {
 		map_eth_to_id(target).is_some()
modifiedruntime/common/src/runtime_apis.rsdiffbeforeafterboth
--- a/runtime/common/src/runtime_apis.rs
+++ b/runtime/common/src/runtime_apis.rs
@@ -144,396 +144,6 @@
                 }
             }
 
-            impl rmrk_rpc::RmrkApi<
-                Block,
-                AccountId,
-                RmrkCollectionInfo<AccountId>,
-                RmrkInstanceInfo<AccountId>,
-                RmrkResourceInfo,
-                RmrkPropertyInfo,
-                RmrkBaseInfo<AccountId>,
-                RmrkPartType,
-                RmrkTheme
-            > for Runtime {
-                fn last_collection_idx() -> Result<RmrkCollectionId, DispatchError> {
-                    Ok(RmrkCore::last_collection_idx())
-                }
-
-                fn collection_by_id(collection_id: RmrkCollectionId) -> Result<Option<RmrkCollectionInfo<AccountId>>, DispatchError> {
-                    use pallet_proxy_rmrk_core::{RmrkProperty, misc::CollectionType};
-                    use pallet_common::CommonCollectionOperations;
-
-                    let (collection, collection_id) = match RmrkCore::get_typed_nft_collection_mapped(collection_id, CollectionType::Regular) {
-                        Ok(c) => c,
-                        Err(_) => return Ok(None),
-                    };
-
-                    let nfts_count = collection.total_supply();
-
-                    Ok(Some(RmrkCollectionInfo {
-                        issuer: collection.owner.clone(),
-                        metadata: RmrkCore::get_collection_property_decoded(collection_id, RmrkProperty::Metadata)?,
-                        max: collection.limits.token_limit,
-                        symbol: RmrkCore::rebind(&collection.token_prefix)?,
-                        nfts_count
-                    }))
-                }
-
-                fn nft_by_id(collection_id: RmrkCollectionId, nft_by_id: RmrkNftId) -> Result<Option<RmrkInstanceInfo<AccountId>>, DispatchError> {
-                    use up_data_structs::mapping::TokenAddressMapping;
-                    use pallet_proxy_rmrk_core::{RmrkProperty, misc::CollectionType};
-                    use pallet_common::CommonCollectionOperations;
-
-                    let (collection, collection_id) = match RmrkCore::get_typed_nft_collection_mapped(collection_id, CollectionType::Regular) {
-                        Ok(c) => c,
-                        Err(_) => return Ok(None),
-                    };
-
-                    let nft_id = TokenId(nft_by_id);
-                    if !RmrkCore::nft_exists(collection_id, nft_id) { return Ok(None); }
-
-                    let owner = match collection.token_owner(nft_id) {
-                        Some(owner) => match <Runtime as pallet_common::Config>::CrossTokenAddressMapping::address_to_token(&owner) {
-                            Some((col, tok)) => {
-                                let rmrk_collection = RmrkCore::rmrk_collection_id(col)?;
-
-                                RmrkAccountIdOrCollectionNftTuple::CollectionAndNftTuple(rmrk_collection, tok.0)
-                            }
-                            None => RmrkAccountIdOrCollectionNftTuple::AccountId(owner.as_sub().clone())
-                        },
-                        None => return Ok(None)
-                    };
-
-                    Ok(Some(RmrkInstanceInfo {
-                        owner: owner,
-                        royalty: RmrkCore::get_nft_property_decoded(collection_id, nft_id, RmrkProperty::RoyaltyInfo)?,
-                        metadata: RmrkCore::get_nft_property_decoded(collection_id, nft_id, RmrkProperty::Metadata)?,
-                        equipped: RmrkCore::get_nft_property_decoded(collection_id, nft_id, RmrkProperty::Equipped)?,
-                        pending: RmrkCore::get_nft_property_decoded(collection_id, nft_id, RmrkProperty::PendingNftAccept)?,
-                    }))
-                }
-
-                fn account_tokens(account_id: AccountId, collection_id: RmrkCollectionId) -> Result<Vec<RmrkNftId>, DispatchError> {
-                    use pallet_proxy_rmrk_core::{RmrkProperty, misc::CollectionType};
-                    use pallet_common::CommonCollectionOperations;
-
-                    let cross_account_id = CrossAccountId::from_sub(account_id);
-
-                    let (collection, collection_id) = match RmrkCore::get_typed_nft_collection_mapped(collection_id, CollectionType::Regular) {
-                        Ok(c) => c,
-                        Err(_) => return Ok(Vec::new()),
-                    };
-
-                    let tokens = collection.account_tokens(cross_account_id)
-                        .into_iter()
-                        .filter(|token| {
-                            let is_pending = RmrkCore::get_nft_property_decoded(
-                                collection_id,
-                                *token,
-                                RmrkProperty::PendingNftAccept
-                            ).unwrap_or(true);
-
-                            !is_pending
-                        })
-                        .map(|token| token.0)
-                        .collect();
-
-                    Ok(tokens)
-                }
-
-                fn nft_children(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkNftChild>, DispatchError> {
-                    use pallet_proxy_rmrk_core::RmrkProperty;
-
-                    let collection_id = match RmrkCore::unique_collection_id(collection_id) {
-                        Ok(id) => id,
-                        Err(_) => return Ok(Vec::new())
-                    };
-                    let nft_id = TokenId(nft_id);
-                    if !RmrkCore::nft_exists(collection_id, nft_id) { return Ok(Vec::new()); }
-
-                    Ok(
-                        pallet_nonfungible::TokenChildren::<Runtime>::iter_prefix((collection_id, nft_id))
-                            .filter_map(|((child_collection, child_token), _)| {
-                                let is_pending = RmrkCore::get_nft_property_decoded(
-                                    child_collection,
-                                    child_token,
-                                    RmrkProperty::PendingNftAccept
-                                ).ok()?;
-
-                                if is_pending {
-                                    return None;
-                                }
-
-                                let rmrk_child_collection = RmrkCore::rmrk_collection_id(
-                                    child_collection
-                                ).ok()?;
-
-                                Some(RmrkNftChild {
-                                    collection_id: rmrk_child_collection,
-                                    nft_id: child_token.0,
-                                })
-                            }).collect()
-                    )
-                }
-
-                fn collection_properties(collection_id: RmrkCollectionId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
-                    use pallet_proxy_rmrk_core::misc::CollectionType;
-
-                    let collection_id = match RmrkCore::unique_collection_id(collection_id) {
-                        Ok(id) => id,
-                        Err(_) => return Ok(Vec::new())
-                    };
-                    if RmrkCore::ensure_collection_type(collection_id, CollectionType::Regular).is_err() {
-                        return Ok(Vec::new());
-                    }
-
-                    let properties = RmrkCore::filter_user_properties(
-                        collection_id,
-                        /* token_id = */ None,
-                        filter_keys,
-                        |key, value| RmrkPropertyInfo {
-                            key,
-                            value
-                        }
-                    )?;
-
-                    Ok(properties)
-                }
-
-                fn nft_properties(collection_id: RmrkCollectionId, nft_id: RmrkNftId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
-                    use pallet_proxy_rmrk_core::misc::NftType;
-
-                    let collection_id = match RmrkCore::unique_collection_id(collection_id) {
-                        Ok(id) => id,
-                        Err(_) => return Ok(Vec::new())
-                    };
-                    let token_id = TokenId(nft_id);
-
-                    if RmrkCore::ensure_nft_type(collection_id, token_id, NftType::Regular).is_err() {
-                        return Ok(Vec::new());
-                    }
-
-		            let properties = RmrkCore::filter_user_properties(
-                        collection_id,
-                        Some(token_id),
-                        filter_keys,
-                        |key, value| RmrkPropertyInfo {
-                            key,
-                            value
-                        }
-                    )?;
-
-                    Ok(properties)
-                }
-
-                fn nft_resources(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkResourceInfo>, DispatchError> {
-                    use pallet_proxy_rmrk_core::{RmrkProperty, misc::{CollectionType, NftType, ResourceType}};
-                    use pallet_common::CommonCollectionOperations;
-
-                    let collection_id = match RmrkCore::unique_collection_id(collection_id) {
-                        Ok(id) => id,
-                        Err(_) => return Ok(Vec::new())
-                    };
-                    if RmrkCore::ensure_collection_type(collection_id, CollectionType::Regular).is_err() { return Ok(Vec::new()); }
-
-                    let nft_id = TokenId(nft_id);
-                    if RmrkCore::ensure_nft_type(collection_id, nft_id, NftType::Regular).is_err() { return Ok(Vec::new()); }
-
-                    let res_collection_id: CollectionId = RmrkCore::get_nft_property_decoded(collection_id, nft_id, RmrkProperty::ResourceCollection)?;
-                    let resource_collection = RmrkCore::get_typed_nft_collection(res_collection_id, CollectionType::Resource)?;
-
-                    let resources = resource_collection
-                        .collection_tokens()
-                        .iter()
-                        .filter_map(|(res_id)| Some(RmrkResourceInfo {
-                            id: res_id.0,
-                            pending: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::PendingResourceAccept).ok()?,
-                            pending_removal: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::PendingResourceRemoval).ok()?,
-                            resource: match RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::ResourceType).ok()? {
-                                ResourceType::Basic => RmrkResourceTypes::Basic(RmrkBasicResource {
-                                    src: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Src).ok()?,
-                                    metadata: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Metadata).ok()?,
-                                    license: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::License).ok()?,
-                                    thumb: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Thumb).ok()?,
-                                }),
-                                ResourceType::Composable => RmrkResourceTypes::Composable(RmrkComposableResource {
-                                    parts: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Parts).ok()?,
-                                    base: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Base).ok()?,
-                                    src: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Src).ok()?,
-                                    metadata: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Metadata).ok()?,
-                                    license: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::License).ok()?,
-                                    thumb: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Thumb).ok()?,
-                                }),
-                                ResourceType::Slot => RmrkResourceTypes::Slot(RmrkSlotResource {
-                                    base: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Base).ok()?,
-                                    src: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Src).ok()?,
-                                    metadata: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Metadata).ok()?,
-                                    slot: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Slot).ok()?,
-                                    license: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::License).ok()?,
-                                    thumb: RmrkCore::get_nft_property_decoded(res_collection_id, *res_id, RmrkProperty::Thumb).ok()?,
-                                }),
-                            },
-                        }))
-                        .collect();
-
-                    Ok(resources)
-                }
-
-                fn nft_resource_priority(collection_id: RmrkCollectionId, nft_id: RmrkNftId, resource_id: RmrkResourceId) -> Result<Option<u32>, DispatchError> {
-                    use pallet_proxy_rmrk_core::{RmrkProperty, misc::{CollectionType, NftType}};
-
-                    let collection_id = match RmrkCore::unique_collection_id(collection_id) {
-                        Ok(id) => id,
-                        Err(_) => return Ok(None)
-                    };
-                    if RmrkCore::ensure_collection_type(collection_id, CollectionType::Regular).is_err() { return Ok(None); }
-
-                    let nft_id = TokenId(nft_id);
-                    if RmrkCore::ensure_nft_type(collection_id, nft_id, NftType::Regular).is_err() { return Ok(None); }
-
-                    let priorities: Vec<_> = RmrkCore::get_nft_property_decoded(collection_id, nft_id, RmrkProperty::ResourcePriorities)?;
-                    Ok(
-                        priorities.into_iter()
-                            .enumerate()
-                            .find(|(_, id)| *id == resource_id)
-                            .map(|(priority, _): (usize, RmrkResourceId)| priority as u32)
-                    )
-                }
-
-                fn base(base_id: RmrkBaseId) -> Result<Option<RmrkBaseInfo<AccountId>>, DispatchError> {
-                    use pallet_proxy_rmrk_core::{
-                        RmrkProperty, misc::{CollectionType},
-                    };
-
-                    let (collection, collection_id) = match RmrkCore::get_typed_nft_collection_mapped(base_id, CollectionType::Base) {
-                        Ok(c) => c,
-                        Err(_) => return Ok(None),
-                    };
-
-                    Ok(Some(RmrkBaseInfo {
-                        issuer: collection.owner.clone(),
-                        base_type: RmrkCore::get_collection_property_decoded(collection_id, RmrkProperty::BaseType)?,
-                        symbol: RmrkCore::rebind(&collection.token_prefix)?,
-                    }))
-                }
-
-                fn base_parts(base_id: RmrkBaseId) -> Result<Vec<RmrkPartType>, DispatchError> {
-                    use pallet_proxy_rmrk_core::{RmrkProperty, misc::{CollectionType, NftType}};
-                    use pallet_common::CommonCollectionOperations;
-
-                    let (collection, collection_id) = match RmrkCore::get_typed_nft_collection_mapped(base_id, CollectionType::Base) {
-                        Ok(c) => c,
-                        Err(_) => return Ok(Vec::new()),
-                    };
-
-                    let parts = collection.collection_tokens()
-                        .into_iter()
-                        .filter_map(|token_id| {
-                            let nft_type = RmrkCore::get_nft_type(collection_id, token_id).ok()?;
-
-                            match nft_type {
-                                NftType::FixedPart => Some(RmrkPartType::FixedPart(RmrkFixedPart {
-                                    id: RmrkCore::get_nft_property_decoded(collection_id, token_id, RmrkProperty::ExternalPartId).ok()?,
-                                    src: RmrkCore::get_nft_property_decoded(collection_id, token_id, RmrkProperty::Src).ok()?,
-                                    z: RmrkCore::get_nft_property_decoded(collection_id, token_id, RmrkProperty::ZIndex).ok()?,
-                                })),
-                                NftType::SlotPart => Some(RmrkPartType::SlotPart(RmrkSlotPart {
-                                    id: RmrkCore::get_nft_property_decoded(collection_id, token_id, RmrkProperty::ExternalPartId).ok()?,
-                                    src: RmrkCore::get_nft_property_decoded(collection_id, token_id, RmrkProperty::Src).ok()?,
-                                    z: RmrkCore::get_nft_property_decoded(collection_id, token_id, RmrkProperty::ZIndex).ok()?,
-                                    equippable: RmrkCore::get_nft_property_decoded(collection_id, token_id, RmrkProperty::EquippableList).ok()?,
-                                })),
-                                _ => None
-                            }
-                        })
-                        .collect();
-
-                    Ok(parts)
-                }
-
-                fn theme_names(base_id: RmrkBaseId) -> Result<Vec<RmrkThemeName>, DispatchError> {
-                    use pallet_proxy_rmrk_core::{RmrkProperty, misc::CollectionType};
-                    use pallet_common::CommonCollectionOperations;
-
-                    let (collection, collection_id) = match RmrkCore::get_typed_nft_collection_mapped(base_id, CollectionType::Base) {
-                        Ok(c) => c,
-                        Err(_) => return Ok(Vec::new()),
-                    };
-
-                    let theme_names = collection.collection_tokens()
-                        .iter()
-                        .filter_map(|token_id| {
-                            let nft_type = RmrkCore::get_nft_type(collection_id, *token_id).ok()?;
-
-                            match nft_type {
-                                Theme => RmrkCore::get_nft_property_decoded(collection_id, *token_id, RmrkProperty::ThemeName).ok(),
-                                _ => None
-                            }
-                        })
-                        .collect();
-
-                    Ok(theme_names)
-                }
-
-                fn theme(base_id: RmrkBaseId, theme_name: RmrkThemeName, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Option<RmrkTheme>, DispatchError> {
-                    use pallet_proxy_rmrk_core::{
-                        RmrkProperty,
-                        misc::{CollectionType, NftType}
-                    };
-                    use pallet_common::CommonCollectionOperations;
-
-                    let (collection, collection_id) = match RmrkCore::get_typed_nft_collection_mapped(base_id, CollectionType::Base) {
-                        Ok(c) => c,
-                        Err(_) => return Ok(None),
-                    };
-
-                    let theme_info = collection.collection_tokens()
-                        .into_iter()
-                        .find_map(|token_id| {
-                            RmrkCore::ensure_nft_type(collection_id, token_id, NftType::Theme).ok()?;
-
-                            let name: RmrkString = RmrkCore::get_nft_property_decoded(
-                                collection_id, token_id, RmrkProperty::ThemeName
-                            ).ok()?;
-
-                            if name == theme_name {
-                                Some((name, token_id))
-                            } else {
-                                None
-                            }
-                        });
-
-                    let (name, theme_id) = match theme_info {
-                        Some((name, theme_id)) => (name, theme_id),
-                        None => return Ok(None)
-                    };
-
-                    let properties = RmrkCore::filter_user_properties(
-                        collection_id,
-                        Some(theme_id),
-                        filter_keys,
-                        |key, value| RmrkThemeProperty {
-                            key,
-                            value
-                        }
-                    )?;
-
-                    let inherit = RmrkCore::get_nft_property_decoded(
-                        collection_id,
-                        theme_id,
-                        RmrkProperty::ThemeInherit
-                    )?;
-
-                    let theme = RmrkTheme {
-                        name,
-                        properties,
-                        inherit,
-                    };
-
-                    Ok(Some(theme))
-                }
-            }
-
             impl sp_api::Core<Block> for Runtime {
                 fn version() -> RuntimeVersion {
                     VERSION
@@ -843,7 +453,14 @@
                     list_benchmark!(list, extra, pallet_fungible, Fungible);
                     list_benchmark!(list, extra, pallet_refungible, Refungible);
                     list_benchmark!(list, extra, pallet_nonfungible, Nonfungible);
+                    list_benchmark!(list, extra, pallet_unique_scheduler, Scheduler);
+
+                    #[cfg(not(feature = "unique-runtime"))]
                     list_benchmark!(list, extra, pallet_proxy_rmrk_core, RmrkCore);
+
+                    #[cfg(not(feature = "unique-runtime"))]
+                    list_benchmark!(list, extra, pallet_proxy_rmrk_equip, RmrkEquip);
+
                     // list_benchmark!(list, extra, pallet_evm_coder_substrate, EvmCoderSubstrate);
 
                     let storage_info = AllPalletsReversedWithSystemFirst::storage_info();
@@ -887,7 +504,14 @@
                     add_benchmark!(params, batches, pallet_fungible, Fungible);
                     add_benchmark!(params, batches, pallet_refungible, Refungible);
                     add_benchmark!(params, batches, pallet_nonfungible, Nonfungible);
+                    add_benchmark!(params, batches, pallet_unique_scheduler, Scheduler);
+
+                    #[cfg(not(feature = "unique-runtime"))]
                     add_benchmark!(params, batches, pallet_proxy_rmrk_core, RmrkCore);
+
+                    #[cfg(not(feature = "unique-runtime"))]
+                    add_benchmark!(params, batches, pallet_proxy_rmrk_equip, RmrkEquip);
+
                     // add_benchmark!(params, batches, pallet_evm_coder_substrate, EvmCoderSubstrate);
 
                     if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) }
modifiedruntime/common/src/weights.rsdiffbeforeafterboth
--- a/runtime/common/src/weights.rs
+++ b/runtime/common/src/weights.rs
@@ -70,8 +70,8 @@
 		dispatch_weight::<T>() + max_weight_of!(delete_token_properties(amount))
 	}
 
-	fn set_property_permissions(amount: u32) -> Weight {
-		dispatch_weight::<T>() + max_weight_of!(set_property_permissions(amount))
+	fn set_token_property_permissions(amount: u32) -> Weight {
+		dispatch_weight::<T>() + max_weight_of!(set_token_property_permissions(amount))
 	}
 
 	fn transfer() -> Weight {
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.22'
+version = '0.9.23'
 
 [package.metadata.docs.rs]
 targets = ['x86_64-unknown-linux-gnu']
@@ -34,8 +34,10 @@
     'pallet-refungible/runtime-benchmarks',
     'pallet-nonfungible/runtime-benchmarks',
     'pallet-proxy-rmrk-core/runtime-benchmarks',
+    'pallet-proxy-rmrk-equip/runtime-benchmarks',
     'pallet-unique/runtime-benchmarks',
     'pallet-inflation/runtime-benchmarks',
+    'pallet-unique-scheduler/runtime-benchmarks',
     'pallet-xcm/runtime-benchmarks',
     'sp-runtime/runtime-benchmarks',
     'xcm-builder/runtime-benchmarks',
@@ -93,7 +95,7 @@
     'pallet-proxy-rmrk-core/std',
     'pallet-proxy-rmrk-equip/std',
     'pallet-unique/std',
-    'pallet-unq-scheduler/std',
+    'pallet-unique-scheduler/std',
     'pallet-charge-transaction/std',
     'up-data-structs/std',
     'sp-api/std',
@@ -412,7 +414,7 @@
 pallet-nonfungible = { default-features = false, path = "../../pallets/nonfungible" }
 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-unq-scheduler = { path = '../../pallets/scheduler', default-features = false }
+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.23", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
 pallet-evm-migration = { path = '../../pallets/evm-migration', default-features = false }
modifiedruntime/opal/src/lib.rsdiffbeforeafterboth
--- a/runtime/opal/src/lib.rs
+++ b/runtime/opal/src/lib.rs
@@ -69,16 +69,14 @@
 		WeightToFee,
 	},
 };
-use pallet_unq_scheduler::DispatchCall;
+use pallet_unique_scheduler::DispatchCall;
 use up_data_structs::{
 	CollectionId, TokenId, TokenData, Property, PropertyKeyPermission, CollectionLimits,
 	CollectionStats, RpcCollection,
 	mapping::{EvmTokenAddressMapping, CrossTokenAddressMapping},
 	TokenChild, RmrkCollectionInfo, RmrkInstanceInfo, RmrkResourceInfo, RmrkPropertyInfo,
-	RmrkBaseInfo, RmrkPartType, RmrkTheme, RmrkThemeName, RmrkThemeProperty, RmrkCollectionId,
-	RmrkNftId, RmrkAccountIdOrCollectionNftTuple, RmrkNftChild, RmrkPropertyKey, RmrkResourceTypes,
-	RmrkBasicResource, RmrkComposableResource, RmrkSlotResource, RmrkResourceId, RmrkBaseId,
-	RmrkFixedPart, RmrkSlotPart, RmrkString,
+	RmrkBaseInfo, RmrkPartType, RmrkTheme, RmrkThemeName, RmrkCollectionId, RmrkNftId,
+	RmrkNftChild, RmrkPropertyKey, RmrkResourceId, RmrkBaseId,
 };
 
 // use pallet_contracts::weights::WeightInfo;
@@ -194,7 +192,7 @@
 	spec_name: create_runtime_str!(RUNTIME_NAME),
 	impl_name: create_runtime_str!(RUNTIME_NAME),
 	authoring_version: 1,
-	spec_version: 922000,
+	spec_version: 923000,
 	impl_version: 0,
 	apis: RUNTIME_API_VERSIONS,
 	transaction_version: 1,
@@ -920,6 +918,7 @@
 }
 
 impl pallet_proxy_rmrk_equip::Config for Runtime {
+	type WeightInfo = pallet_proxy_rmrk_equip::weights::SubstrateWeight<Self>;
 	type Event = Event;
 }
 
@@ -965,7 +964,7 @@
 }
 
 pub struct SchedulerPaymentExecutor;
-impl<T: frame_system::Config + pallet_unq_scheduler::Config, SelfContainedSignedInfo>
+impl<T: frame_system::Config + pallet_unique_scheduler::Config, SelfContainedSignedInfo>
 	DispatchCall<T, SelfContainedSignedInfo> for SchedulerPaymentExecutor
 where
 	<T as frame_system::Config>::Call: Member
@@ -975,13 +974,13 @@
 		+ From<frame_system::Call<Runtime>>,
 	SelfContainedSignedInfo: Send + Sync + 'static,
 	Call: From<<T as frame_system::Config>::Call>
-		+ From<<T as pallet_unq_scheduler::Config>::Call>
+		+ From<<T as pallet_unique_scheduler::Config>::Call>
 		+ SelfContainedCall<SignedInfo = SelfContainedSignedInfo>,
 	sp_runtime::AccountId32: From<<T as frame_system::Config>::AccountId>,
 {
 	fn dispatch_call(
 		signer: <T as frame_system::Config>::AccountId,
-		call: <T as pallet_unq_scheduler::Config>::Call,
+		call: <T as pallet_unique_scheduler::Config>::Call,
 	) -> Result<
 		Result<PostDispatchInfo, DispatchErrorWithPostInfo<PostDispatchInfo>>,
 		TransactionValidityError,
@@ -1007,7 +1006,7 @@
 	fn reserve_balance(
 		id: [u8; 16],
 		sponsor: <T as frame_system::Config>::AccountId,
-		call: <T as pallet_unq_scheduler::Config>::Call,
+		call: <T as pallet_unique_scheduler::Config>::Call,
 		count: u32,
 	) -> Result<(), DispatchError> {
 		let dispatch_info = call.get_dispatch_info();
@@ -1024,7 +1023,7 @@
 	fn pay_for_call(
 		id: [u8; 16],
 		sponsor: <T as frame_system::Config>::AccountId,
-		call: <T as pallet_unq_scheduler::Config>::Call,
+		call: <T as pallet_unique_scheduler::Config>::Call,
 	) -> Result<u128, DispatchError> {
 		let dispatch_info = call.get_dispatch_info();
 		let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0);
@@ -1065,7 +1064,7 @@
 	}
 }
 
-impl pallet_unq_scheduler::Config for Runtime {
+impl pallet_unique_scheduler::Config for Runtime {
 	type Event = Event;
 	type Origin = Origin;
 	type Currency = Balances;
@@ -1154,7 +1153,7 @@
 		// Unique Pallets
 		Inflation: pallet_inflation::{Pallet, Call, Storage} = 60,
 		Unique: pallet_unique::{Pallet, Call, Storage, Event<T>} = 61,
-		Scheduler: pallet_unq_scheduler::{Pallet, Call, Storage, Event<T>} = 62,
+		Scheduler: pallet_unique_scheduler::{Pallet, Call, Storage, Event<T>} = 62,
 		// free = 63
 		Charging: pallet_charge_transaction::{Pallet, Call, Storage } = 64,
 		// ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65,
@@ -1311,7 +1310,73 @@
 	}};
 }
 
-impl_common_runtime_apis!();
+impl_common_runtime_apis! {
+	#![custom_apis]
+
+	impl rmrk_rpc::RmrkApi<
+		Block,
+		AccountId,
+		RmrkCollectionInfo<AccountId>,
+		RmrkInstanceInfo<AccountId>,
+		RmrkResourceInfo,
+		RmrkPropertyInfo,
+		RmrkBaseInfo<AccountId>,
+		RmrkPartType,
+		RmrkTheme
+	> for Runtime {
+		fn last_collection_idx() -> Result<RmrkCollectionId, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::last_collection_idx::<Runtime>()
+		}
+
+		fn collection_by_id(collection_id: RmrkCollectionId) -> Result<Option<RmrkCollectionInfo<AccountId>>, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::collection_by_id::<Runtime>(collection_id)
+		}
+
+		fn nft_by_id(collection_id: RmrkCollectionId, nft_by_id: RmrkNftId) -> Result<Option<RmrkInstanceInfo<AccountId>>, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::nft_by_id::<Runtime>(collection_id, nft_by_id)
+		}
+
+		fn account_tokens(account_id: AccountId, collection_id: RmrkCollectionId) -> Result<Vec<RmrkNftId>, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::account_tokens::<Runtime>(account_id, collection_id)
+		}
+
+		fn nft_children(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkNftChild>, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::nft_children::<Runtime>(collection_id, nft_id)
+		}
+
+		fn collection_properties(collection_id: RmrkCollectionId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::collection_properties::<Runtime>(collection_id, filter_keys)
+		}
+
+		fn nft_properties(collection_id: RmrkCollectionId, nft_id: RmrkNftId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::nft_properties::<Runtime>(collection_id, nft_id, filter_keys)
+		}
+
+		fn nft_resources(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkResourceInfo>, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::nft_resources::<Runtime>(collection_id, nft_id)
+		}
+
+		fn nft_resource_priority(collection_id: RmrkCollectionId, nft_id: RmrkNftId, resource_id: RmrkResourceId) -> Result<Option<u32>, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::nft_resource_priority::<Runtime>(collection_id, nft_id, resource_id)
+		}
+
+		fn base(base_id: RmrkBaseId) -> Result<Option<RmrkBaseInfo<AccountId>>, DispatchError> {
+			pallet_proxy_rmrk_equip::rpc::base::<Runtime>(base_id)
+		}
+
+		fn base_parts(base_id: RmrkBaseId) -> Result<Vec<RmrkPartType>, DispatchError> {
+			pallet_proxy_rmrk_equip::rpc::base_parts::<Runtime>(base_id)
+		}
+
+		fn theme_names(base_id: RmrkBaseId) -> Result<Vec<RmrkThemeName>, DispatchError> {
+			pallet_proxy_rmrk_equip::rpc::theme_names::<Runtime>(base_id)
+		}
+
+		fn theme(base_id: RmrkBaseId, theme_name: RmrkThemeName, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Option<RmrkTheme>, DispatchError> {
+			pallet_proxy_rmrk_equip::rpc::theme::<Runtime>(base_id, theme_name, filter_keys)
+		}
+	}
+}
 
 struct CheckInherents;
 
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.22'
+version = '0.9.23'
 
 [package.metadata.docs.rs]
 targets = ['x86_64-unknown-linux-gnu']
@@ -37,6 +37,7 @@
     'pallet-proxy-rmrk-equip/runtime-benchmarks',
     'pallet-unique/runtime-benchmarks',
     'pallet-inflation/runtime-benchmarks',
+    'pallet-unique-scheduler/runtime-benchmarks',
     'pallet-xcm/runtime-benchmarks',
     'sp-runtime/runtime-benchmarks',
     'xcm-builder/runtime-benchmarks',
@@ -94,7 +95,7 @@
     'pallet-proxy-rmrk-core/std',
     'pallet-proxy-rmrk-equip/std',
     'pallet-unique/std',
-    'pallet-unq-scheduler/std',
+    'pallet-unique-scheduler/std',
     'pallet-charge-transaction/std',
     'up-data-structs/std',
     'sp-api/std',
@@ -419,7 +420,7 @@
 pallet-nonfungible = { default-features = false, path = "../../pallets/nonfungible" }
 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-unq-scheduler = { path = '../../pallets/scheduler', default-features = false }
+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.23", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
 pallet-evm-migration = { path = '../../pallets/evm-migration', default-features = false }
modifiedruntime/quartz/src/lib.rsdiffbeforeafterboth
--- a/runtime/quartz/src/lib.rs
+++ b/runtime/quartz/src/lib.rs
@@ -69,16 +69,14 @@
 		WeightToFee,
 	},
 };
-use pallet_unq_scheduler::DispatchCall;
+use pallet_unique_scheduler::DispatchCall;
 use up_data_structs::{
 	CollectionId, TokenId, TokenData, Property, PropertyKeyPermission, CollectionLimits,
 	CollectionStats, RpcCollection,
 	mapping::{EvmTokenAddressMapping, CrossTokenAddressMapping},
 	TokenChild, RmrkCollectionInfo, RmrkInstanceInfo, RmrkResourceInfo, RmrkPropertyInfo,
-	RmrkBaseInfo, RmrkPartType, RmrkTheme, RmrkThemeName, RmrkThemeProperty, RmrkCollectionId,
-	RmrkNftId, RmrkAccountIdOrCollectionNftTuple, RmrkNftChild, RmrkPropertyKey, RmrkResourceTypes,
-	RmrkBasicResource, RmrkComposableResource, RmrkSlotResource, RmrkResourceId, RmrkBaseId,
-	RmrkFixedPart, RmrkSlotPart, RmrkString,
+	RmrkBaseInfo, RmrkPartType, RmrkTheme, RmrkThemeName, RmrkCollectionId, RmrkNftId,
+	RmrkNftChild, RmrkPropertyKey, RmrkResourceId, RmrkBaseId,
 };
 
 // use pallet_contracts::weights::WeightInfo;
@@ -193,7 +191,7 @@
 	spec_name: create_runtime_str!(RUNTIME_NAME),
 	impl_name: create_runtime_str!(RUNTIME_NAME),
 	authoring_version: 1,
-	spec_version: 922000,
+	spec_version: 923000,
 	impl_version: 0,
 	apis: RUNTIME_API_VERSIONS,
 	transaction_version: 1,
@@ -924,6 +922,7 @@
 }
 
 impl pallet_proxy_rmrk_equip::Config for Runtime {
+	type WeightInfo = pallet_proxy_rmrk_equip::weights::SubstrateWeight<Self>;
 	type Event = Event;
 }
 
@@ -969,7 +968,7 @@
 }
 
 pub struct SchedulerPaymentExecutor;
-impl<T: frame_system::Config + pallet_unq_scheduler::Config, SelfContainedSignedInfo>
+impl<T: frame_system::Config + pallet_unique_scheduler::Config, SelfContainedSignedInfo>
 	DispatchCall<T, SelfContainedSignedInfo> for SchedulerPaymentExecutor
 where
 	<T as frame_system::Config>::Call: Member
@@ -979,13 +978,13 @@
 		+ From<frame_system::Call<Runtime>>,
 	SelfContainedSignedInfo: Send + Sync + 'static,
 	Call: From<<T as frame_system::Config>::Call>
-		+ From<<T as pallet_unq_scheduler::Config>::Call>
+		+ From<<T as pallet_unique_scheduler::Config>::Call>
 		+ SelfContainedCall<SignedInfo = SelfContainedSignedInfo>,
 	sp_runtime::AccountId32: From<<T as frame_system::Config>::AccountId>,
 {
 	fn dispatch_call(
 		signer: <T as frame_system::Config>::AccountId,
-		call: <T as pallet_unq_scheduler::Config>::Call,
+		call: <T as pallet_unique_scheduler::Config>::Call,
 	) -> Result<
 		Result<PostDispatchInfo, DispatchErrorWithPostInfo<PostDispatchInfo>>,
 		TransactionValidityError,
@@ -1011,7 +1010,7 @@
 	fn reserve_balance(
 		id: [u8; 16],
 		sponsor: <T as frame_system::Config>::AccountId,
-		call: <T as pallet_unq_scheduler::Config>::Call,
+		call: <T as pallet_unique_scheduler::Config>::Call,
 		count: u32,
 	) -> Result<(), DispatchError> {
 		let dispatch_info = call.get_dispatch_info();
@@ -1028,7 +1027,7 @@
 	fn pay_for_call(
 		id: [u8; 16],
 		sponsor: <T as frame_system::Config>::AccountId,
-		call: <T as pallet_unq_scheduler::Config>::Call,
+		call: <T as pallet_unique_scheduler::Config>::Call,
 	) -> Result<u128, DispatchError> {
 		let dispatch_info = call.get_dispatch_info();
 		let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0);
@@ -1069,7 +1068,7 @@
 	}
 }
 
-impl pallet_unq_scheduler::Config for Runtime {
+impl pallet_unique_scheduler::Config for Runtime {
 	type Event = Event;
 	type Origin = Origin;
 	type Currency = Balances;
@@ -1157,7 +1156,7 @@
 		// Unique Pallets
 		Inflation: pallet_inflation::{Pallet, Call, Storage} = 60,
 		Unique: pallet_unique::{Pallet, Call, Storage, Event<T>} = 61,
-		Scheduler: pallet_unq_scheduler::{Pallet, Call, Storage, Event<T>} = 62,
+		Scheduler: pallet_unique_scheduler::{Pallet, Call, Storage, Event<T>} = 62,
 		// free = 63
 		Charging: pallet_charge_transaction::{Pallet, Call, Storage } = 64,
 		// ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65,
@@ -1316,7 +1315,73 @@
 	}};
 }
 
-impl_common_runtime_apis!();
+impl_common_runtime_apis! {
+	#![custom_apis]
+
+	impl rmrk_rpc::RmrkApi<
+		Block,
+		AccountId,
+		RmrkCollectionInfo<AccountId>,
+		RmrkInstanceInfo<AccountId>,
+		RmrkResourceInfo,
+		RmrkPropertyInfo,
+		RmrkBaseInfo<AccountId>,
+		RmrkPartType,
+		RmrkTheme
+	> for Runtime {
+		fn last_collection_idx() -> Result<RmrkCollectionId, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::last_collection_idx::<Runtime>()
+		}
+
+		fn collection_by_id(collection_id: RmrkCollectionId) -> Result<Option<RmrkCollectionInfo<AccountId>>, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::collection_by_id::<Runtime>(collection_id)
+		}
+
+		fn nft_by_id(collection_id: RmrkCollectionId, nft_by_id: RmrkNftId) -> Result<Option<RmrkInstanceInfo<AccountId>>, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::nft_by_id::<Runtime>(collection_id, nft_by_id)
+		}
+
+		fn account_tokens(account_id: AccountId, collection_id: RmrkCollectionId) -> Result<Vec<RmrkNftId>, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::account_tokens::<Runtime>(account_id, collection_id)
+		}
+
+		fn nft_children(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkNftChild>, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::nft_children::<Runtime>(collection_id, nft_id)
+		}
+
+		fn collection_properties(collection_id: RmrkCollectionId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::collection_properties::<Runtime>(collection_id, filter_keys)
+		}
+
+		fn nft_properties(collection_id: RmrkCollectionId, nft_id: RmrkNftId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::nft_properties::<Runtime>(collection_id, nft_id, filter_keys)
+		}
+
+		fn nft_resources(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkResourceInfo>, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::nft_resources::<Runtime>(collection_id, nft_id)
+		}
+
+		fn nft_resource_priority(collection_id: RmrkCollectionId, nft_id: RmrkNftId, resource_id: RmrkResourceId) -> Result<Option<u32>, DispatchError> {
+			pallet_proxy_rmrk_core::rpc::nft_resource_priority::<Runtime>(collection_id, nft_id, resource_id)
+		}
+
+		fn base(base_id: RmrkBaseId) -> Result<Option<RmrkBaseInfo<AccountId>>, DispatchError> {
+			pallet_proxy_rmrk_equip::rpc::base::<Runtime>(base_id)
+		}
+
+		fn base_parts(base_id: RmrkBaseId) -> Result<Vec<RmrkPartType>, DispatchError> {
+			pallet_proxy_rmrk_equip::rpc::base_parts::<Runtime>(base_id)
+		}
+
+		fn theme_names(base_id: RmrkBaseId) -> Result<Vec<RmrkThemeName>, DispatchError> {
+			pallet_proxy_rmrk_equip::rpc::theme_names::<Runtime>(base_id)
+		}
+
+		fn theme(base_id: RmrkBaseId, theme_name: RmrkThemeName, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Option<RmrkTheme>, DispatchError> {
+			pallet_proxy_rmrk_equip::rpc::theme::<Runtime>(base_id, theme_name, filter_keys)
+		}
+	}
+}
 
 struct CheckInherents;
 
modifiedruntime/tests/src/tests.rsdiffbeforeafterboth
--- a/runtime/tests/src/tests.rs
+++ b/runtime/tests/src/tests.rs
@@ -1264,7 +1264,6 @@
 		let collection1_id =
 			create_test_collection_for_owner(&CollectionMode::NFT, 1, CollectionId(1));
 		let origin1 = Origin::signed(1);
-		let origin2 = Origin::signed(2);
 
 		// Add collection admins 2 and 3
 		assert_ok!(Unique::add_collection_admin(
@@ -1273,7 +1272,7 @@
 			account(2)
 		));
 		assert_ok!(Unique::add_collection_admin(
-			origin1,
+			origin1.clone(),
 			collection1_id,
 			account(3)
 		));
@@ -1289,7 +1288,7 @@
 
 		// remove admin 3
 		assert_ok!(Unique::remove_collection_admin(
-			origin2,
+			origin1,
 			CollectionId(1),
 			account(3)
 		));
modifiedruntime/unique/Cargo.tomldiffbeforeafterboth
--- a/runtime/unique/Cargo.toml
+++ b/runtime/unique/Cargo.toml
@@ -10,13 +10,13 @@
 license = 'GPLv3'
 name = 'unique-runtime'
 repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = '0.9.22'
+version = '0.9.23'
 
 [package.metadata.docs.rs]
 targets = ['x86_64-unknown-linux-gnu']
 
 [features]
-default = ['std']
+default = ['std', 'unique-runtime']
 runtime-benchmarks = [
     'hex-literal',
     'frame-benchmarking',
@@ -37,6 +37,7 @@
     'pallet-proxy-rmrk-equip/runtime-benchmarks',
     'pallet-unique/runtime-benchmarks',
     'pallet-inflation/runtime-benchmarks',
+    'pallet-unique-scheduler/runtime-benchmarks',
     'pallet-xcm/runtime-benchmarks',
     'sp-runtime/runtime-benchmarks',
     'xcm-builder/runtime-benchmarks',
@@ -95,7 +96,7 @@
     'pallet-proxy-rmrk-core/std',
     'pallet-proxy-rmrk-equip/std',
     'pallet-unique/std',
-    'pallet-unq-scheduler/std',
+    'pallet-unique-scheduler/std',
     'pallet-charge-transaction/std',
     'up-data-structs/std',
     'sp-api/std',
@@ -118,6 +119,7 @@
     "orml-vesting/std",
 ]
 limit-testing = ['pallet-unique/limit-testing', 'up-data-structs/limit-testing']
+unique-runtime = []
 
 ################################################################################
 # Substrate Dependencies
@@ -412,7 +414,7 @@
 pallet-nonfungible = { default-features = false, path = "../../pallets/nonfungible" }
 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-unq-scheduler = { path = '../../pallets/scheduler', default-features = false }
+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.23", package = "pallet-template-transaction-payment", default-features = false, version = "3.0.0" }
 pallet-evm-migration = { path = '../../pallets/evm-migration', default-features = false }
modifiedruntime/unique/src/lib.rsdiffbeforeafterboth
--- a/runtime/unique/src/lib.rs
+++ b/runtime/unique/src/lib.rs
@@ -69,16 +69,14 @@
 		WeightToFee,
 	},
 };
-use pallet_unq_scheduler::DispatchCall;
+use pallet_unique_scheduler::DispatchCall;
 use up_data_structs::{
 	CollectionId, TokenId, TokenData, Property, PropertyKeyPermission, CollectionLimits,
 	CollectionStats, RpcCollection,
 	mapping::{EvmTokenAddressMapping, CrossTokenAddressMapping},
 	TokenChild, RmrkCollectionInfo, RmrkInstanceInfo, RmrkResourceInfo, RmrkPropertyInfo,
-	RmrkBaseInfo, RmrkPartType, RmrkTheme, RmrkThemeName, RmrkThemeProperty, RmrkCollectionId,
-	RmrkNftId, RmrkAccountIdOrCollectionNftTuple, RmrkNftChild, RmrkPropertyKey, RmrkResourceTypes,
-	RmrkBasicResource, RmrkComposableResource, RmrkSlotResource, RmrkResourceId, RmrkBaseId,
-	RmrkFixedPart, RmrkSlotPart, RmrkString,
+	RmrkBaseInfo, RmrkPartType, RmrkTheme, RmrkThemeName, RmrkCollectionId, RmrkNftId,
+	RmrkNftChild, RmrkPropertyKey, RmrkResourceId, RmrkBaseId,
 };
 
 // use pallet_contracts::weights::WeightInfo;
@@ -192,7 +190,7 @@
 	spec_name: create_runtime_str!(RUNTIME_NAME),
 	impl_name: create_runtime_str!(RUNTIME_NAME),
 	authoring_version: 1,
-	spec_version: 922000,
+	spec_version: 923000,
 	impl_version: 0,
 	apis: RUNTIME_API_VERSIONS,
 	transaction_version: 1,
@@ -915,17 +913,8 @@
 }
 impl pallet_nonfungible::Config for Runtime {
 	type WeightInfo = pallet_nonfungible::weights::SubstrateWeight<Self>;
-}
-
-impl pallet_proxy_rmrk_core::Config for Runtime {
-	type WeightInfo = pallet_proxy_rmrk_core::weights::SubstrateWeight<Self>;
-	type Event = Event;
 }
 
-impl pallet_proxy_rmrk_equip::Config for Runtime {
-	type Event = Event;
-}
-
 impl pallet_unique::Config for Runtime {
 	type Event = Event;
 	type WeightInfo = pallet_unique::weights::SubstrateWeight<Self>;
@@ -968,7 +957,7 @@
 }
 
 pub struct SchedulerPaymentExecutor;
-impl<T: frame_system::Config + pallet_unq_scheduler::Config, SelfContainedSignedInfo>
+impl<T: frame_system::Config + pallet_unique_scheduler::Config, SelfContainedSignedInfo>
 	DispatchCall<T, SelfContainedSignedInfo> for SchedulerPaymentExecutor
 where
 	<T as frame_system::Config>::Call: Member
@@ -978,13 +967,13 @@
 		+ From<frame_system::Call<Runtime>>,
 	SelfContainedSignedInfo: Send + Sync + 'static,
 	Call: From<<T as frame_system::Config>::Call>
-		+ From<<T as pallet_unq_scheduler::Config>::Call>
+		+ From<<T as pallet_unique_scheduler::Config>::Call>
 		+ SelfContainedCall<SignedInfo = SelfContainedSignedInfo>,
 	sp_runtime::AccountId32: From<<T as frame_system::Config>::AccountId>,
 {
 	fn dispatch_call(
 		signer: <T as frame_system::Config>::AccountId,
-		call: <T as pallet_unq_scheduler::Config>::Call,
+		call: <T as pallet_unique_scheduler::Config>::Call,
 	) -> Result<
 		Result<PostDispatchInfo, DispatchErrorWithPostInfo<PostDispatchInfo>>,
 		TransactionValidityError,
@@ -1010,7 +999,7 @@
 	fn reserve_balance(
 		id: [u8; 16],
 		sponsor: <T as frame_system::Config>::AccountId,
-		call: <T as pallet_unq_scheduler::Config>::Call,
+		call: <T as pallet_unique_scheduler::Config>::Call,
 		count: u32,
 	) -> Result<(), DispatchError> {
 		let dispatch_info = call.get_dispatch_info();
@@ -1027,7 +1016,7 @@
 	fn pay_for_call(
 		id: [u8; 16],
 		sponsor: <T as frame_system::Config>::AccountId,
-		call: <T as pallet_unq_scheduler::Config>::Call,
+		call: <T as pallet_unique_scheduler::Config>::Call,
 	) -> Result<u128, DispatchError> {
 		let dispatch_info = call.get_dispatch_info();
 		let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0);
@@ -1068,7 +1057,7 @@
 	}
 }
 
-impl pallet_unq_scheduler::Config for Runtime {
+impl pallet_unique_scheduler::Config for Runtime {
 	type Event = Event;
 	type Origin = Origin;
 	type Currency = Balances;
@@ -1156,7 +1145,7 @@
 		// Unique Pallets
 		Inflation: pallet_inflation::{Pallet, Call, Storage} = 60,
 		Unique: pallet_unique::{Pallet, Call, Storage, Event<T>} = 61,
-		Scheduler: pallet_unq_scheduler::{Pallet, Call, Storage, Event<T>} = 62,
+		Scheduler: pallet_unique_scheduler::{Pallet, Call, Storage, Event<T>} = 62,
 		// free = 63
 		Charging: pallet_charge_transaction::{Pallet, Call, Storage } = 64,
 		// ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65,
@@ -1165,8 +1154,6 @@
 		Refungible: pallet_refungible::{Pallet, Storage} = 68,
 		Nonfungible: pallet_nonfungible::{Pallet, Storage} = 69,
 		Structure: pallet_structure::{Pallet, Call, Storage, Event<T>} = 70,
-		RmrkCore: pallet_proxy_rmrk_core::{Pallet, Call, Storage, Event<T>} = 71,
-		RmrkEquip: pallet_proxy_rmrk_equip::{Pallet, Call, Storage, Event<T>} = 72,
 
 		// Frontier
 		EVM: pallet_evm::{Pallet, Config, Call, Storage, Event<T>} = 100,
@@ -1314,7 +1301,73 @@
 	}};
 }
 
-impl_common_runtime_apis!();
+impl_common_runtime_apis! {
+	#![custom_apis]
+
+	impl rmrk_rpc::RmrkApi<
+		Block,
+		AccountId,
+		RmrkCollectionInfo<AccountId>,
+		RmrkInstanceInfo<AccountId>,
+		RmrkResourceInfo,
+		RmrkPropertyInfo,
+		RmrkBaseInfo<AccountId>,
+		RmrkPartType,
+		RmrkTheme
+	> for Runtime {
+		fn last_collection_idx() -> Result<RmrkCollectionId, DispatchError> {
+			Ok(Default::default())
+		}
+
+		fn collection_by_id(_collection_id: RmrkCollectionId) -> Result<Option<RmrkCollectionInfo<AccountId>>, DispatchError> {
+			Ok(Default::default())
+		}
+
+		fn nft_by_id(_collection_id: RmrkCollectionId, _nft_by_id: RmrkNftId) -> Result<Option<RmrkInstanceInfo<AccountId>>, DispatchError> {
+			Ok(Default::default())
+		}
+
+		fn account_tokens(_account_id: AccountId, _collection_id: RmrkCollectionId) -> Result<Vec<RmrkNftId>, DispatchError> {
+			Ok(Default::default())
+		}
+
+		fn nft_children(_collection_id: RmrkCollectionId, _nft_id: RmrkNftId) -> Result<Vec<RmrkNftChild>, DispatchError> {
+			Ok(Default::default())
+		}
+
+		fn collection_properties(_collection_id: RmrkCollectionId, _filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
+			Ok(Default::default())
+		}
+
+		fn nft_properties(_collection_id: RmrkCollectionId, _nft_id: RmrkNftId, _filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {
+			Ok(Default::default())
+		}
+
+		fn nft_resources(_collection_id: RmrkCollectionId, _nft_id: RmrkNftId) -> Result<Vec<RmrkResourceInfo>, DispatchError> {
+			Ok(Default::default())
+		}
+
+		fn nft_resource_priority(_collection_id: RmrkCollectionId, _nft_id: RmrkNftId, _resource_id: RmrkResourceId) -> Result<Option<u32>, DispatchError> {
+			Ok(Default::default())
+		}
+
+		fn base(_base_id: RmrkBaseId) -> Result<Option<RmrkBaseInfo<AccountId>>, DispatchError> {
+			Ok(Default::default())
+		}
+
+		fn base_parts(_base_id: RmrkBaseId) -> Result<Vec<RmrkPartType>, DispatchError> {
+			Ok(Default::default())
+		}
+
+		fn theme_names(_base_id: RmrkBaseId) -> Result<Vec<RmrkThemeName>, DispatchError> {
+			Ok(Default::default())
+		}
+
+		fn theme(_base_id: RmrkBaseId, _theme_name: RmrkThemeName, _filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Option<RmrkTheme>, DispatchError> {
+			Ok(Default::default())
+		}
+	}
+}
 
 struct CheckInherents;
 
modifiedtests/package.jsondiffbeforeafterboth
--- a/tests/package.json
+++ b/tests/package.json
@@ -28,6 +28,7 @@
     "test": "mocha --timeout 9999999 -r ts-node/register './src/**/*.test.ts'",
     "testEth": "mocha --timeout 9999999 -r ts-node/register './**/eth/**/*.test.ts'",
     "testEthMarketplace": "mocha --timeout 9999999 -r ts-node/register './**/eth/marketplace/**/*.test.ts'",
+    "testEthNesting": "mocha --timeout 9999999 -r ts-node/register './**/eth/nesting/**/*.test.ts'",
     "load": "mocha --timeout 9999999 -r ts-node/register './**/*.load.ts'",
     "loadTransfer": "ts-node src/transfer.nload.ts",
     "testCollision": "mocha --timeout 9999999 -r ts-node/register ./src/collision-tests/*.test.ts",
modifiedtests/src/approve.test.tsdiffbeforeafterboth
--- a/tests/src/approve.test.ts
+++ b/tests/src/approve.test.ts
@@ -28,7 +28,7 @@
   setCollectionLimitsExpectSuccess,
   transferExpectSuccess,
   addCollectionAdminExpectSuccess,
-  adminApproveFromExpectSuccess,
+  adminApproveFromExpectFail,
   getCreatedCollectionCount,
   transferFromExpectSuccess,
   transferFromExpectFail,
@@ -84,11 +84,11 @@
     await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, alice, bob.address, 0);
   });
 
-  it('can be called by collection owner on non-owned item when OwnerCanTransfer == true', async () => {
+  it('can`t be called by collection owner on non-owned item when OwnerCanTransfer == false', async () => {
     const collectionId = await createCollectionExpectSuccess();
     const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', bob.address);
 
-    await adminApproveFromExpectSuccess(collectionId, itemId, alice, bob.address, charlie.address);
+    await adminApproveFromExpectFail(collectionId, itemId, alice, bob.address, charlie.address);
   });
 });
 
@@ -292,7 +292,7 @@
   });
 });
 
-describe('Administrator and collection owner do not need approval in order to execute TransferFrom:', () => {
+describe('Administrator and collection owner do not need approval in order to execute TransferFrom (with owner_can_transfer_flag = true):', () => {
   let alice: IKeyringPair;
   let bob: IKeyringPair;
   let charlie: IKeyringPair;
@@ -309,6 +309,7 @@
 
   it('NFT', async () => {
     const collectionId = await createCollectionExpectSuccess();
+    await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
     const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', charlie.address);
     await transferFromExpectSuccess(collectionId, itemId, alice, charlie, dave, 1, 'NFT');
     await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
@@ -317,6 +318,7 @@
 
   it('Fungible up to an approved amount', async () => {
     const collectionId = await createCollectionExpectSuccess({mode:{type: 'Fungible', decimalPoints: 0}});
+    await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
     const itemId = await createItemExpectSuccess(alice, collectionId, 'Fungible', charlie.address); 
     await transferFromExpectSuccess(collectionId, itemId, alice, charlie, dave, 1, 'Fungible');
     await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
@@ -325,6 +327,7 @@
 
   it('ReFungible up to an approved amount', async () => {
     const collectionId = await createCollectionExpectSuccess({mode:{type: 'ReFungible'}});
+    await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
     const itemId = await createItemExpectSuccess(alice, collectionId, 'ReFungible', charlie.address);
     await transferFromExpectSuccess(collectionId, itemId, alice, charlie, dave, 1, 'ReFungible');
     await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
@@ -402,7 +405,7 @@
     const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', alice.address);
 
     await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
-    await adminApproveFromExpectSuccess(collectionId, itemId, bob, alice.address, charlie.address);
+    await adminApproveFromExpectFail(collectionId, itemId, bob, alice.address, charlie.address);
   });
 });
 
modifiedtests/src/burnItem.test.tsdiffbeforeafterboth
--- a/tests/src/burnItem.test.ts
+++ b/tests/src/burnItem.test.ts
@@ -23,6 +23,7 @@
   normalizeAccountId,
   addCollectionAdminExpectSuccess,
   getBalance,
+  setCollectionLimitsExpectSuccess,
   isTokenExists,
 } from './util/helpers';
 
@@ -149,6 +150,7 @@
   it('Burn item in NFT collection', async () => {
     const createMode = 'NFT';
     const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});
+    await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
     const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);
     await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
 
@@ -167,6 +169,7 @@
   it('Burn item in Fungible collection', async () => {
     const createMode = 'Fungible';
     const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0}});
+    await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
     const tokenId = await createItemExpectSuccess(alice, collectionId, createMode); // Helper creates 10 fungible tokens
     await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
 
@@ -189,6 +192,7 @@
   it('Burn item in ReFungible collection', async () => {
     const createMode = 'ReFungible';
     const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});
+    await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
     const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);
     await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
 
modifiedtests/src/createMultipleItems.test.tsdiffbeforeafterboth
--- a/tests/src/createMultipleItems.test.ts
+++ b/tests/src/createMultipleItems.test.ts
@@ -48,7 +48,7 @@
       const alice = privateKeyWrapper('//Alice');
       await submitTransactionAsync(
         alice, 
-        api.tx.unique.setPropertyPermissions(collectionId, [{key: 'data', permission: {tokenOwner: true}}]),
+        api.tx.unique.setTokenPropertyPermissions(collectionId, [{key: 'data', permission: {tokenOwner: true}}]),
       );
       
       const args = [
@@ -470,7 +470,7 @@
 
       const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
 
-      const tx1 = api.tx.unique.setPropertyPermissions(collectionId, propPerms);
+      const tx1 = api.tx.unique.setTokenPropertyPermissions(collectionId, propPerms);
       await expect(executeTransaction(api, alice, tx1)).to.be.rejectedWith(/common\.PropertyLimitReached/);
 
       const itemsListIndexBefore = await getLastTokenId(api, collectionId);
modifiedtests/src/createMultipleItemsEx.test.tsdiffbeforeafterboth
--- a/tests/src/createMultipleItemsEx.test.ts
+++ b/tests/src/createMultipleItemsEx.test.ts
@@ -222,7 +222,7 @@
     const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
     await usingApi(async (api, privateKeyWrapper) => {
       const alice = privateKeyWrapper('//Alice');
-      await expect(executeTransaction(api, alice, api.tx.unique.setPropertyPermissions(collection, propPerms))).to.be.rejectedWith(/common\.PropertyLimitReached/);
+      await expect(executeTransaction(api, alice, api.tx.unique.setTokenPropertyPermissions(collection, propPerms))).to.be.rejectedWith(/common\.PropertyLimitReached/);
     });
   });
 
modifiedtests/src/eth/api/UniqueNFT.soldiffbeforeafterboth
--- a/tests/src/eth/api/UniqueNFT.sol
+++ b/tests/src/eth/api/UniqueNFT.sol
@@ -174,7 +174,24 @@
 	function finishMinting() external returns (bool);
 }
 
-// Selector: 6aea9834
+// Selector: 780e9d63
+interface ERC721Enumerable is Dummy, ERC165 {
+	// Selector: tokenByIndex(uint256) 4f6ccce7
+	function tokenByIndex(uint256 index) external view returns (uint256);
+
+	// Not implemented
+	//
+	// Selector: tokenOfOwnerByIndex(address,uint256) 2f745c59
+	function tokenOfOwnerByIndex(address owner, uint256 index)
+		external
+		view
+		returns (uint256);
+
+	// Selector: totalSupply() 18160ddd
+	function totalSupply() external view returns (uint256);
+}
+
+// Selector: 7d9262e6
 interface Collection is Dummy, ERC165 {
 	// Selector: setCollectionProperty(string,bytes) 2f073f66
 	function setCollectionProperty(string memory key, bytes memory value)
@@ -206,6 +223,12 @@
 	// Selector: contractAddress() f6b4dfb4
 	function contractAddress() external view returns (address);
 
+	// Selector: addCollectionAdminSubstrate(uint256) 5730062b
+	function addCollectionAdminSubstrate(uint256 newAdmin) external view;
+
+	// Selector: removeCollectionAdminSubstrate(uint256) 4048fcf9
+	function removeCollectionAdminSubstrate(uint256 newAdmin) external view;
+
 	// Selector: addCollectionAdmin(address) 92e462c7
 	function addCollectionAdmin(address newAdmin) external view;
 
@@ -230,23 +253,6 @@
 
 	// Selector: setCollectionMintMode(bool) 00018e84
 	function setCollectionMintMode(bool mode) external;
-}
-
-// Selector: 780e9d63
-interface ERC721Enumerable is Dummy, ERC165 {
-	// Selector: tokenByIndex(uint256) 4f6ccce7
-	function tokenByIndex(uint256 index) external view returns (uint256);
-
-	// Not implemented
-	//
-	// Selector: tokenOfOwnerByIndex(address,uint256) 2f745c59
-	function tokenOfOwnerByIndex(address owner, uint256 index)
-		external
-		view
-		returns (uint256);
-
-	// Selector: totalSupply() 18160ddd
-	function totalSupply() external view returns (uint256);
 }
 
 // Selector: d74d154f
addedtests/src/eth/collectionAdmin.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/eth/collectionAdmin.test.ts
@@ -0,0 +1,296 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
+import {expect} from 'chai';
+import privateKey from '../substrate/privateKey';
+import {
+  createEthAccount,
+  createEthAccountWithBalance, 
+  evmCollection, 
+  evmCollectionHelpers, 
+  getCollectionAddressFromResult, 
+  itWeb3,
+} from './util/helpers';
+
+describe('Add collection admins', () => {
+  itWeb3('Add admin by owner', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const collectionHelper = evmCollectionHelpers(web3, owner);
+        
+    const result = await collectionHelper.methods
+      .createNonfungibleCollection('A', 'B', 'C')
+      .send();
+    const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+    const newAdmin = await createEthAccount(web3);
+    const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+    await collectionEvm.methods.addCollectionAdmin(newAdmin).send();
+    const adminList = await api.rpc.unique.adminlist(collectionId);
+    expect(adminList[0].asEthereum.toString().toLocaleLowerCase())
+      .to.be.eq(newAdmin.toLocaleLowerCase());
+  });
+
+  itWeb3('Add substrate admin by owner', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const collectionHelper = evmCollectionHelpers(web3, owner);
+        
+    const result = await collectionHelper.methods
+      .createNonfungibleCollection('A', 'B', 'C')
+      .send();
+    const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+    const newAdmin = privateKeyWrapper('//Alice');
+    const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+    await collectionEvm.methods.addCollectionAdminSubstrate(newAdmin.addressRaw).send();
+
+    const adminList = await api.rpc.unique.adminlist(collectionId);
+    expect(adminList[0].asSubstrate.toString().toLocaleLowerCase())
+      .to.be.eq(newAdmin.address.toLocaleLowerCase());
+  });
+
+  itWeb3('(!negative tests!) Add admin by ADMIN is not allowed', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const collectionHelper = evmCollectionHelpers(web3, owner);
+        
+    const result = await collectionHelper.methods
+      .createNonfungibleCollection('A', 'B', 'C')
+      .send();
+    const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+    const admin = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+    await collectionEvm.methods.addCollectionAdmin(admin).send();
+    
+    const user = await createEthAccount(web3);
+    await expect(collectionEvm.methods.addCollectionAdmin(user).call({from: admin}))
+      .to.be.rejectedWith('NoPermission');
+
+    const adminList = await api.rpc.unique.adminlist(collectionId);
+    expect(adminList.length).to.be.eq(1);
+    expect(adminList[0].asEthereum.toString().toLocaleLowerCase())
+      .to.be.eq(admin.toLocaleLowerCase());
+  });
+
+  itWeb3('(!negative tests!) Add admin by USER is not allowed', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const collectionHelper = evmCollectionHelpers(web3, owner);
+        
+    const result = await collectionHelper.methods
+      .createNonfungibleCollection('A', 'B', 'C')
+      .send();
+    const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+    const notAdmin = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+    
+    const user = await createEthAccount(web3);
+    await expect(collectionEvm.methods.addCollectionAdmin(user).call({from: notAdmin}))
+      .to.be.rejectedWith('NoPermission');
+
+    const adminList = await api.rpc.unique.adminlist(collectionId);
+    expect(adminList.length).to.be.eq(0);
+  });
+
+  itWeb3('(!negative tests!) Add substrate admin by ADMIN is not allowed', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const collectionHelper = evmCollectionHelpers(web3, owner);
+        
+    const result = await collectionHelper.methods
+      .createNonfungibleCollection('A', 'B', 'C')
+      .send();
+    const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+    const admin = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+    await collectionEvm.methods.addCollectionAdmin(admin).send();
+
+    const notAdmin = privateKey('//Alice');
+    await expect(collectionEvm.methods.addCollectionAdminSubstrate(notAdmin.addressRaw).call({from: admin}))
+      .to.be.rejectedWith('NoPermission');
+
+    const adminList = await api.rpc.unique.adminlist(collectionId);
+    expect(adminList.length).to.be.eq(1);
+    expect(adminList[0].asEthereum.toString().toLocaleLowerCase())
+      .to.be.eq(admin.toLocaleLowerCase());
+  });
+  
+  itWeb3('(!negative tests!) Add substrate admin by USER is not allowed', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const collectionHelper = evmCollectionHelpers(web3, owner);
+        
+    const result = await collectionHelper.methods
+      .createNonfungibleCollection('A', 'B', 'C')
+      .send();
+    const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+    const notAdmin0 = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+    const notAdmin1 = privateKey('//Alice');
+    await expect(collectionEvm.methods.addCollectionAdminSubstrate(notAdmin1.addressRaw).call({from: notAdmin0}))
+      .to.be.rejectedWith('NoPermission');
+
+    const adminList = await api.rpc.unique.adminlist(collectionId);
+    expect(adminList.length).to.be.eq(0);
+  });
+});
+
+describe('Remove collection admins', () => {
+  itWeb3('Remove admin by owner', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const collectionHelper = evmCollectionHelpers(web3, owner);
+        
+    const result = await collectionHelper.methods
+      .createNonfungibleCollection('A', 'B', 'C')
+      .send();
+    const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+    const newAdmin = await createEthAccount(web3);
+    const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+    await collectionEvm.methods.addCollectionAdmin(newAdmin).send();
+    {
+      const adminList = await api.rpc.unique.adminlist(collectionId);
+      expect(adminList.length).to.be.eq(1);
+      expect(adminList[0].asEthereum.toString().toLocaleLowerCase())
+        .to.be.eq(newAdmin.toLocaleLowerCase());
+    }
+
+    await collectionEvm.methods.removeCollectionAdmin(newAdmin).send();
+    const adminList = await api.rpc.unique.adminlist(collectionId);
+    expect(adminList.length).to.be.eq(0);
+  });
+
+  itWeb3('Remove substrate admin by owner', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const collectionHelper = evmCollectionHelpers(web3, owner);
+        
+    const result = await collectionHelper.methods
+      .createNonfungibleCollection('A', 'B', 'C')
+      .send();
+    const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+    const newAdmin = privateKeyWrapper('//Alice');
+    const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+    await collectionEvm.methods.addCollectionAdminSubstrate(newAdmin.addressRaw).send();
+    {
+      const adminList = await api.rpc.unique.adminlist(collectionId);
+      expect(adminList[0].asSubstrate.toString().toLocaleLowerCase())
+        .to.be.eq(newAdmin.address.toLocaleLowerCase());
+    }
+    
+    await collectionEvm.methods.removeCollectionAdminSubstrate(newAdmin.addressRaw).send();
+    const adminList = await api.rpc.unique.adminlist(collectionId);
+    expect(adminList.length).to.be.eq(0);
+  });
+
+  itWeb3('(!negative tests!) Remove admin by ADMIN is not allowed', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const collectionHelper = evmCollectionHelpers(web3, owner);
+        
+    const result = await collectionHelper.methods
+      .createNonfungibleCollection('A', 'B', 'C')
+      .send();
+    const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+    const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+
+    const admin0 = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    await collectionEvm.methods.addCollectionAdmin(admin0).send();
+    const admin1 = await createEthAccount(web3);
+    await collectionEvm.methods.addCollectionAdmin(admin1).send();
+
+    await expect(collectionEvm.methods.removeCollectionAdmin(admin1).call({from: admin0}))
+      .to.be.rejectedWith('NoPermission');
+    {
+      const adminList = await api.rpc.unique.adminlist(collectionId);
+      expect(adminList.length).to.be.eq(2);
+      expect(adminList.toString().toLocaleLowerCase())
+        .to.be.deep.contains(admin0.toLocaleLowerCase())
+        .to.be.deep.contains(admin1.toLocaleLowerCase());
+    }
+  });
+
+  itWeb3('(!negative tests!) Remove admin by USER is not allowed', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const collectionHelper = evmCollectionHelpers(web3, owner);
+        
+    const result = await collectionHelper.methods
+      .createNonfungibleCollection('A', 'B', 'C')
+      .send();
+    const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+    const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+
+    const admin = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    await collectionEvm.methods.addCollectionAdmin(admin).send();
+    const notAdmin = await createEthAccount(web3);
+
+    await expect(collectionEvm.methods.removeCollectionAdmin(admin).call({from: notAdmin}))
+      .to.be.rejectedWith('NoPermission');
+    {
+      const adminList = await api.rpc.unique.adminlist(collectionId);
+      expect(adminList[0].asEthereum.toString().toLocaleLowerCase())
+        .to.be.eq(admin.toLocaleLowerCase());
+      expect(adminList.length).to.be.eq(1);
+    }
+  });
+
+  itWeb3('(!negative tests!) Remove substrate admin by ADMIN is not allowed', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const collectionHelper = evmCollectionHelpers(web3, owner);
+        
+    const result = await collectionHelper.methods
+      .createNonfungibleCollection('A', 'B', 'C')
+      .send();
+    const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+    const adminSub = privateKeyWrapper('//Alice');
+    const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+    await collectionEvm.methods.addCollectionAdminSubstrate(adminSub.addressRaw).send();
+    const adminEth = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    await collectionEvm.methods.addCollectionAdmin(adminEth).send();
+
+    await expect(collectionEvm.methods.removeCollectionAdminSubstrate(adminSub.addressRaw).call({from: adminEth}))
+      .to.be.rejectedWith('NoPermission');
+
+    const adminList = await api.rpc.unique.adminlist(collectionId);
+    expect(adminList.length).to.be.eq(2);
+    expect(adminList.toString().toLocaleLowerCase())
+      .to.be.deep.contains(adminSub.address.toLocaleLowerCase())
+      .to.be.deep.contains(adminEth.toLocaleLowerCase());
+  });
+
+  itWeb3('(!negative tests!) Remove substrate admin by USER is not allowed', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const collectionHelper = evmCollectionHelpers(web3, owner);
+        
+    const result = await collectionHelper.methods
+      .createNonfungibleCollection('A', 'B', 'C')
+      .send();
+    const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+    const adminSub = privateKeyWrapper('//Alice');
+    const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
+    await collectionEvm.methods.addCollectionAdminSubstrate(adminSub.addressRaw).send();
+    const notAdminEth = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+
+    await expect(collectionEvm.methods.removeCollectionAdminSubstrate(adminSub.addressRaw).call({from: notAdminEth}))
+      .to.be.rejectedWith('NoPermission');
+
+    const adminList = await api.rpc.unique.adminlist(collectionId);
+    expect(adminList.length).to.be.eq(1);
+    expect(adminList[0].asSubstrate.toString().toLocaleLowerCase())
+      .to.be.eq(adminSub.address.toLocaleLowerCase());
+  });
+});
\ No newline at end of file
modifiedtests/src/eth/contractSponsoring.test.tsdiffbeforeafterboth
--- a/tests/src/eth/contractSponsoring.test.ts
+++ b/tests/src/eth/contractSponsoring.test.ts
@@ -233,7 +233,7 @@
     const ss58Format = (api.registry.getChainProperties())!.toJSON().ss58Format;
     expect(collectionSub.sponsorship.isUnconfirmed).to.be.true;
     expect(collectionSub.sponsorship.asUnconfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));
-    await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('Caller is not set as sponsor');
+    await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('caller is not set as sponsor');
 
     await collectionEvm.methods.confirmCollectionSponsorship().send({from: sponsor});
     collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;
@@ -241,14 +241,13 @@
     expect(collectionSub.sponsorship.asConfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));
 
     const user = createEthAccount(web3);
-    let nextTokenId = await collectionEvm.methods.nextTokenId().call();
+    const nextTokenId = await collectionEvm.methods.nextTokenId().call();
     expect(nextTokenId).to.be.equal('1');
 
     const oldPermissions = (await getDetailedCollectionInfo(api, collectionId))!.permissions.toHuman();
     expect(oldPermissions.mintMode).to.be.false;
     expect(oldPermissions.access).to.be.equal('Normal');
 
-    //TODO: change value, when enum generated
     await collectionEvm.methods.setCollectionAccess(1 /*'AllowList'*/).send({from: owner});
     await collectionEvm.methods.addToCollectionAllowList(user).send({from: owner});
     await collectionEvm.methods.setCollectionMintMode(true).send({from: owner});
@@ -260,34 +259,35 @@
     const ownerBalanceBefore = await ethBalanceViaSub(api, owner);
     const sponsorBalanceBefore = await ethBalanceViaSub(api, sponsor);
 
-    nextTokenId = await collectionEvm.methods.nextTokenId().call({from: user});
-    expect(nextTokenId).to.be.equal('1');
-    result = await collectionEvm.methods.mintWithTokenURI(
-      user,
-      nextTokenId,
-      'Test URI',
-    ).send({from: user});
-    const events = normalizeEvents(result.events);
-    events[0].address = events[0].address.toLocaleLowerCase();
+    {
+      const nextTokenId = await collectionEvm.methods.nextTokenId().call();
+      expect(nextTokenId).to.be.equal('1');
+      const result = await collectionEvm.methods.mintWithTokenURI(
+        user,
+        nextTokenId,
+        'Test URI',
+      ).send({from: user});
+      const events = normalizeEvents(result.events);
 
-    expect(events).to.be.deep.equal([
-      {
-        address: collectionIdAddress.toLocaleLowerCase(),
-        event: 'Transfer',
-        args: {
-          from: '0x0000000000000000000000000000000000000000',
-          to: user,
-          tokenId: nextTokenId,
+      expect(events).to.be.deep.equal([
+        {
+          address: collectionIdAddress,
+          event: 'Transfer',
+          args: {
+            from: '0x0000000000000000000000000000000000000000',
+            to: user,
+            tokenId: nextTokenId,
+          },
         },
-      },
-    ]);
+      ]);
 
-    expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');
+      const ownerBalanceAfter = await ethBalanceViaSub(api, owner);
+      const sponsorBalanceAfter = await ethBalanceViaSub(api, sponsor);
 
-    const ownerBalanceAfter = await ethBalanceViaSub(api, owner);
-    expect(ownerBalanceAfter).to.be.eq(ownerBalanceBefore);
-    const sponsorBalanceAfter = await ethBalanceViaSub(api, sponsor);
-    expect(sponsorBalanceAfter < sponsorBalanceBefore).to.be.true;
+      expect(await collectionEvm.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');
+      expect(ownerBalanceBefore).to.be.eq(ownerBalanceAfter);
+      expect(sponsorBalanceBefore > sponsorBalanceAfter).to.be.true;
+    }
   });
 
   itWeb3('Check that transaction via EVM spend money from sponsor address', async ({api, web3, privateKeyWrapper}) => {
@@ -302,7 +302,7 @@
     const ss58Format = (api.registry.getChainProperties())!.toJSON().ss58Format;
     expect(collectionSub.sponsorship.isUnconfirmed).to.be.true;
     expect(collectionSub.sponsorship.asUnconfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));
-    await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('Caller is not set as sponsor');
+    await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('caller is not set as sponsor');
     const sponsorCollection = evmCollection(web3, sponsor, collectionIdAddress);
     await sponsorCollection.methods.confirmCollectionSponsorship().send();
     collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;
@@ -314,6 +314,7 @@
     
     const ownerBalanceBefore = await ethBalanceViaSub(api, owner);
     const sponsorBalanceBefore = await ethBalanceViaSub(api, sponsor);
+    
   
     const userCollectionEvm = evmCollection(web3, user, collectionIdAddress);
     const nextTokenId = await userCollectionEvm.methods.nextTokenId().call();
modifiedtests/src/eth/createCollection.test.tsdiffbeforeafterboth
--- a/tests/src/eth/createCollection.test.ts
+++ b/tests/src/eth/createCollection.test.ts
@@ -80,7 +80,7 @@
     expect(collectionSub.sponsorship.isUnconfirmed).to.be.true;
     const ss58Format = (api.registry.getChainProperties())!.toJSON().ss58Format;
     expect(collectionSub.sponsorship.asUnconfirmed.toHuman()).to.be.eq(evmToAddress(sponsor, Number(ss58Format)));
-    await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('Caller is not set as sponsor');
+    await expect(collectionEvm.methods.confirmCollectionSponsorship().call()).to.be.rejectedWith('caller is not set as sponsor');
     const sponsorCollection = evmCollection(web3, sponsor, collectionIdAddress);
     await sponsorCollection.methods.confirmCollectionSponsorship().send();
     collectionSub = (await getDetailedCollectionInfo(api, collectionId))!;
@@ -208,7 +208,7 @@
       const sponsorCollection = evmCollection(web3, sponsor, collectionIdAddress);
       await expect(sponsorCollection.methods
         .confirmCollectionSponsorship()
-        .call()).to.be.rejectedWith('Caller is not set as sponsor');
+        .call()).to.be.rejectedWith('caller is not set as sponsor');
     }
     {
       await expect(contractEvmFromNotOwner.methods
@@ -225,6 +225,6 @@
     const collectionEvm = evmCollection(web3, owner, collectionIdAddress);
     await expect(collectionEvm.methods
       .setCollectionLimit('badLimit', 'true')
-      .call()).to.be.rejectedWith('Unknown boolean limit "badLimit"');
+      .call()).to.be.rejectedWith('unknown boolean limit "badLimit"');
   });
 });
\ No newline at end of file
modifiedtests/src/eth/crossTransfer.test.tsdiffbeforeafterboth
--- a/tests/src/eth/crossTransfer.test.ts
+++ b/tests/src/eth/crossTransfer.test.ts
@@ -18,6 +18,7 @@
   createFungibleItemExpectSuccess,
   transferExpectSuccess,
   transferFromExpectSuccess,
+  setCollectionLimitsExpectSuccess,
   createItemExpectSuccess} from '../util/helpers';
 import {collectionIdToAddress,
   createEthAccountWithBalance,
@@ -35,6 +36,7 @@
     const alice = privateKeyWrapper('//Alice');
     const bob = privateKeyWrapper('//Bob');
     const charlie = privateKeyWrapper('//Charlie');
+    await setCollectionLimitsExpectSuccess(alice, collection, {ownerCanTransfer: true});
     await createFungibleItemExpectSuccess(alice, collection, {Value: 200n}, {Substrate: alice.address});
     await transferExpectSuccess(collection, 0, alice, {Ethereum: subToEth(charlie.address)} , 200, 'Fungible');
     await transferFromExpectSuccess(collection, 0, alice, {Ethereum: subToEth(charlie.address)}, charlie, 50, 'Fungible');
@@ -48,6 +50,7 @@
     });
     const alice = privateKeyWrapper('//Alice');
     const bob = privateKeyWrapper('//Bob');
+    await setCollectionLimitsExpectSuccess(alice, collection, {ownerCanTransfer: true});
     const bobProxy = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
     const aliceProxy = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
 
@@ -71,6 +74,7 @@
     const alice = privateKeyWrapper('//Alice');
     const bob = privateKeyWrapper('//Bob');
     const charlie = privateKeyWrapper('//Charlie');
+    await setCollectionLimitsExpectSuccess(alice, collection, {ownerCanTransfer: true});
     const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Substrate: alice.address});
     await transferExpectSuccess(collection, tokenId, alice, {Ethereum: subToEth(charlie.address)}, 1, 'NFT');
     await transferFromExpectSuccess(collection, tokenId, alice, {Ethereum: subToEth(charlie.address)}, charlie, 1, 'NFT');
@@ -85,6 +89,7 @@
     const alice = privateKeyWrapper('//Alice');
     const bob = privateKeyWrapper('//Bob');
     const charlie = privateKeyWrapper('//Charlie');
+    await setCollectionLimitsExpectSuccess(alice, collection, {ownerCanTransfer: true});
     const bobProxy = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
     const aliceProxy = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
     const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', {Substrate: alice.address});
addedtests/src/eth/nesting/nest.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/eth/nesting/nest.test.ts
@@ -0,0 +1,217 @@
+import {ApiPromise} from '@polkadot/api';
+import {Contract} from 'web3-eth-contract';
+import {expect} from 'chai';
+import Web3 from 'web3';
+import {createEthAccountWithBalance, evmCollectionHelpers, GAS_ARGS, getCollectionAddressFromResult, itWeb3, tokenIdToAddress} from '../../eth/util/helpers';
+import nonFungibleAbi from '../nonFungibleAbi.json';
+
+const createNestingCollection = async (
+  api: ApiPromise,
+  web3: Web3,
+  owner: string,
+): Promise<{ collectionId: number, collectionAddress: string, contract: Contract }> => {
+  const collectionHelper = evmCollectionHelpers(web3, owner);
+        
+  const result = await collectionHelper.methods
+    .createNonfungibleCollection('A', 'B', 'C')
+    .send();
+  const {collectionIdAddress: collectionAddress, collectionId} = await getCollectionAddressFromResult(api, result);
+
+  const contract = new web3.eth.Contract(nonFungibleAbi as any, collectionAddress, {from: owner, ...GAS_ARGS});
+  await contract.methods.setCollectionNesting(true).send({from: owner});
+
+  return {collectionId, collectionAddress, contract};
+};
+
+describe('Integration Test: EVM Nesting', () => {
+  itWeb3('NFT: allows an Owner to nest/unnest their token', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const {collectionId, contract} = await createNestingCollection(api, web3, owner);
+
+    // Create a token to be nested
+    const targetNFTTokenId = await contract.methods.nextTokenId().call();
+    await contract.methods.mint(
+      owner,
+      targetNFTTokenId,
+    ).send({from: owner});
+
+    const targetNftTokenAddress = tokenIdToAddress(collectionId, targetNFTTokenId);
+
+    // Create a nested token
+    const firstTokenId = await contract.methods.nextTokenId().call();
+    await contract.methods.mint(
+      targetNftTokenAddress,
+      firstTokenId,
+    ).send({from: owner});
+
+    expect(await contract.methods.ownerOf(firstTokenId).call()).to.be.equal(targetNftTokenAddress);
+
+    // Create a token to be nested and nest
+    const secondTokenId = await contract.methods.nextTokenId().call();
+    await contract.methods.mint(
+      owner,
+      secondTokenId,
+    ).send({from: owner});
+
+    await contract.methods.transfer(targetNftTokenAddress, secondTokenId).send({from: owner});
+
+    expect(await contract.methods.ownerOf(secondTokenId).call()).to.be.equal(targetNftTokenAddress);
+
+    // Unnest token back
+    await contract.methods.transferFrom(targetNftTokenAddress, owner, secondTokenId).send({from: owner});
+    expect(await contract.methods.ownerOf(secondTokenId).call()).to.be.equal(owner);
+  });
+
+  itWeb3('NFT: allows an Owner to nest/unnest their token (Restricted nesting)', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+
+    const {collectionId: collectionIdA, collectionAddress: collectionAddressA, contract: contractA} = await createNestingCollection(api, web3, owner);
+    const {collectionAddress: collectionAddressB, contract: contractB} = await createNestingCollection(api, web3, owner);
+    await contractA.methods.setCollectionNesting(true, [collectionAddressA, collectionAddressB]).send({from: owner});
+
+    // Create a token to nest into
+    const targetNftTokenId = await contractA.methods.nextTokenId().call();
+    await contractA.methods.mint(
+      owner,
+      targetNftTokenId,
+    ).send({from: owner});
+    const nftTokenAddressA1 = tokenIdToAddress(collectionIdA, targetNftTokenId);
+
+    // Create a token for nesting in the same collection as the target
+    const nftTokenIdA = await contractA.methods.nextTokenId().call();
+    await contractA.methods.mint(
+      owner,
+      nftTokenIdA,
+    ).send({from: owner});
+
+    // Create a token for nesting in a different collection
+    const nftTokenIdB = await contractB.methods.nextTokenId().call();
+    await contractB.methods.mint(
+      owner,
+      nftTokenIdB,
+    ).send({from: owner});
+
+    // Nest
+    await contractA.methods.transfer(nftTokenAddressA1, nftTokenIdA).send({from: owner});
+    expect(await contractA.methods.ownerOf(nftTokenIdA).call()).to.be.equal(nftTokenAddressA1);
+
+    await contractB.methods.transfer(nftTokenAddressA1, nftTokenIdB).send({from: owner});
+    expect(await contractB.methods.ownerOf(nftTokenIdB).call()).to.be.equal(nftTokenAddressA1);
+  });
+});
+
+describe('Negative Test: EVM Nesting', async() => {
+  itWeb3('NFT: disallows to nest token if nesting is disabled', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+
+    const {collectionId, contract} = await createNestingCollection(api, web3, owner);
+    await contract.methods.setCollectionNesting(false).send({from: owner});
+
+    // Create a token to nest into
+    const targetNftTokenId = await contract.methods.nextTokenId().call();
+    await contract.methods.mint(
+      owner,
+      targetNftTokenId,
+    ).send({from: owner});
+
+    const targetNftTokenAddress = tokenIdToAddress(collectionId, targetNftTokenId);
+
+    // Create a token to nest
+    const nftTokenId = await contract.methods.nextTokenId().call();
+    await contract.methods.mint(
+      owner,
+      nftTokenId,
+    ).send({from: owner});
+
+    // Try to nest
+    await expect(contract.methods
+      .transfer(targetNftTokenAddress, nftTokenId)
+      .call({from: owner})).to.be.rejectedWith('UserIsNotAllowedToNest');
+  });
+
+  itWeb3('NFT: disallows a non-Owner to nest someone else\'s token', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const malignant = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+
+    const {collectionId, contract} = await createNestingCollection(api, web3, owner);
+
+    // Mint a token
+    const targetTokenId = await contract.methods.nextTokenId().call();
+    await contract.methods.mint(
+      owner,
+      targetTokenId,
+    ).send({from: owner});
+    const targetTokenAddress = tokenIdToAddress(collectionId, targetTokenId);
+
+    // Mint a token belonging to a different account
+    const tokenId = await contract.methods.nextTokenId().call();
+    await contract.methods.mint(
+      malignant,
+      tokenId,
+    ).send({from: owner});
+
+    // Try to nest one token in another as a non-owner account
+    await expect(contract.methods
+      .transfer(targetTokenAddress, tokenId)
+      .call({from: malignant})).to.be.rejectedWith('UserIsNotAllowedToNest');
+  });
+
+  itWeb3('NFT: disallows a non-Owner to nest someone else\'s token (Restricted nesting)', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+    const malignant = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+
+    const {collectionId: collectionIdA, collectionAddress: collectionAddressA, contract: contractA} = await createNestingCollection(api, web3, owner);
+    const {collectionAddress: collectionAddressB, contract: contractB} = await createNestingCollection(api, web3, owner);
+
+    await contractA.methods.setCollectionNesting(true, [collectionAddressA, collectionAddressB]).send({from: owner});
+
+    // Create a token in one collection
+    const nftTokenIdA = await contractA.methods.nextTokenId().call();
+    await contractA.methods.mint(
+      owner,
+      nftTokenIdA,
+    ).send({from: owner});
+    const nftTokenAddressA = tokenIdToAddress(collectionIdA, nftTokenIdA);
+
+    // Create a token in another collection belonging to someone else
+    const nftTokenIdB = await contractB.methods.nextTokenId().call();
+    await contractB.methods.mint(
+      malignant,
+      nftTokenIdB,
+    ).send({from: owner});
+
+    // Try to drag someone else's token into the other collection and nest
+    await expect(contractB.methods
+      .transfer(nftTokenAddressA, nftTokenIdB)
+      .call({from: malignant})).to.be.rejectedWith('UserIsNotAllowedToNest');
+  });
+
+  itWeb3('NFT: disallows to nest token in an unlisted collection', async ({api, web3, privateKeyWrapper}) => {
+    const owner = await createEthAccountWithBalance(api, web3, privateKeyWrapper);
+
+    const {collectionId: collectionIdA, collectionAddress: collectionAddressA, contract: contractA} = await createNestingCollection(api, web3, owner);
+    const {contract: contractB} = await createNestingCollection(api, web3, owner);
+
+    await contractA.methods.setCollectionNesting(true, [collectionAddressA]).send({from: owner});
+
+    // Create a token in one collection
+    const nftTokenIdA = await contractA.methods.nextTokenId().call();
+    await contractA.methods.mint(
+      owner,
+      nftTokenIdA,
+    ).send({from: owner});
+    const nftTokenAddressA = tokenIdToAddress(collectionIdA, nftTokenIdA);
+
+    // Create a token in another collection
+    const nftTokenIdB = await contractB.methods.nextTokenId().call();
+    await contractB.methods.mint(
+      owner,
+      nftTokenIdB,
+    ).send({from: owner});
+
+    // Try to nest into a token in the other collection, disallowed in the first
+    await expect(contractB.methods
+      .transfer(nftTokenAddressA, nftTokenIdB)
+      .call()).to.be.rejectedWith('SourceCollectionIsNotAllowedToNest');
+  });
+});
modifiedtests/src/eth/nonFungibleAbi.jsondiffbeforeafterboth
--- a/tests/src/eth/nonFungibleAbi.json
+++ b/tests/src/eth/nonFungibleAbi.json
@@ -91,6 +91,15 @@
   },
   {
     "inputs": [
+      { "internalType": "uint256", "name": "newAdmin", "type": "uint256" }
+    ],
+    "name": "addCollectionAdminSubstrate",
+    "outputs": [],
+    "stateMutability": "view",
+    "type": "function"
+  },
+  {
+    "inputs": [
       { "internalType": "address", "name": "user", "type": "address" }
     ],
     "name": "addToCollectionAllowList",
@@ -300,6 +309,15 @@
   },
   {
     "inputs": [
+      { "internalType": "uint256", "name": "newAdmin", "type": "uint256" }
+    ],
+    "name": "removeCollectionAdminSubstrate",
+    "outputs": [],
+    "stateMutability": "view",
+    "type": "function"
+  },
+  {
+    "inputs": [
       { "internalType": "address", "name": "user", "type": "address" }
     ],
     "name": "removeFromCollectionAllowList",
modifiedtests/src/eth/tokenProperties.test.tsdiffbeforeafterboth
--- a/tests/src/eth/tokenProperties.test.ts
+++ b/tests/src/eth/tokenProperties.test.ts
@@ -29,7 +29,7 @@
     const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
     const token = await createItemExpectSuccess(alice, collection, 'NFT');
 
-    await executeTransaction(api, alice, api.tx.unique.setPropertyPermissions(collection, [{
+    await executeTransaction(api, alice, api.tx.unique.setTokenPropertyPermissions(collection, [{
       key: 'testKey',
       permission: {
         collectionAdmin: true,
@@ -52,7 +52,7 @@
     const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
     const token = await createItemExpectSuccess(alice, collection, 'NFT');
 
-    await executeTransaction(api, alice, api.tx.unique.setPropertyPermissions(collection, [{
+    await executeTransaction(api, alice, api.tx.unique.setTokenPropertyPermissions(collection, [{
       key: 'testKey',
       permission: {
         mutable: true,
@@ -77,7 +77,7 @@
     const collection = await createCollectionExpectSuccess({mode: {type:'NFT'}});
     const token = await createItemExpectSuccess(alice, collection, 'NFT');
 
-    await executeTransaction(api, alice, api.tx.unique.setPropertyPermissions(collection, [{
+    await executeTransaction(api, alice, api.tx.unique.setTokenPropertyPermissions(collection, [{
       key: 'testKey',
       permission: {
         collectionAdmin: true,
modifiedtests/src/interfaces/augment-api-errors.tsdiffbeforeafterboth
--- a/tests/src/interfaces/augment-api-errors.ts
+++ b/tests/src/interfaces/augment-api-errors.ts
@@ -458,6 +458,7 @@
       ResourceNotPending: AugmentedError<ApiType>;
       RmrkPropertyKeyIsTooLong: AugmentedError<ApiType>;
       RmrkPropertyValueIsTooLong: AugmentedError<ApiType>;
+      UnableToDecodeRmrkData: AugmentedError<ApiType>;
       /**
        * Generic error
        **/
modifiedtests/src/interfaces/augment-api-query.tsdiffbeforeafterboth
--- a/tests/src/interfaces/augment-api-query.ts
+++ b/tests/src/interfaces/augment-api-query.ts
@@ -5,7 +5,7 @@
 import type { BTreeMap, Bytes, Option, U256, U8aFixed, Vec, bool, u128, u16, u32, u64 } from '@polkadot/types-codec';
 import type { AnyNumber, ITuple } from '@polkadot/types-codec/types';
 import type { AccountId32, H160, H256 } from '@polkadot/types/interfaces/runtime';
-import type { CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, EthereumBlock, EthereumLog, EthereumReceiptReceiptV3, EthereumTransactionTransactionV2, FpRpcTransactionStatus, FrameSupportWeightsPerDispatchClassU64, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReleases, PalletBalancesReserveData, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmContractHelpersSponsoringModeT, PalletNonfungibleItemData, PalletRefungibleItemData, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletUnqSchedulerScheduledV3, PhantomTypeUpDataStructs, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpRuntimeDigest, SpTrieStorageProof, UpDataStructsCollection, UpDataStructsCollectionStats, UpDataStructsProperties, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsPropertyPermission, UpDataStructsTokenChild } from '@polkadot/types/lookup';
+import type { CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, EthereumBlock, EthereumLog, EthereumReceiptReceiptV3, EthereumTransactionTransactionV2, FpRpcTransactionStatus, FrameSupportWeightsPerDispatchClassU64, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReleases, PalletBalancesReserveData, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmContractHelpersSponsoringModeT, PalletNonfungibleItemData, PalletRefungibleItemData, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletUniqueSchedulerScheduledV3, PhantomTypeUpDataStructs, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpRuntimeDigest, SpTrieStorageProof, UpDataStructsCollection, UpDataStructsCollectionStats, UpDataStructsProperties, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsPropertyPermission, UpDataStructsTokenChild } from '@polkadot/types/lookup';
 import type { Observable } from '@polkadot/types/types';
 
 declare module '@polkadot/api-base/types/storage' {
@@ -417,7 +417,6 @@
     };
     rmrkCore: {
       collectionIndex: AugmentedQuery<ApiType, () => Observable<u32>, []> & QueryableStorageEntry<ApiType, []>;
-      rmrkInernalCollectionId: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<u32>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
       uniqueCollectionId: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<u32>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
       /**
        * Generic query
@@ -436,7 +435,7 @@
       /**
        * Items to be executed, indexed by the block number that they should be executed on.
        **/
-      agenda: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<Vec<Option<PalletUnqSchedulerScheduledV3>>>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
+      agenda: AugmentedQuery<ApiType, (arg: u32 | AnyNumber | Uint8Array) => Observable<Vec<Option<PalletUniqueSchedulerScheduledV3>>>, [u32]> & QueryableStorageEntry<ApiType, [u32]>;
       /**
        * Lookup from identity to the block number and index of the task.
        **/
modifiedtests/src/interfaces/augment-api-tx.tsdiffbeforeafterboth
--- a/tests/src/interfaces/augment-api-tx.ts
+++ b/tests/src/interfaces/augment-api-tx.ts
@@ -5,7 +5,7 @@
 import type { Bytes, Compact, Option, U256, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec';
 import type { AnyNumber, IMethod, ITuple } from '@polkadot/types-codec/types';
 import type { AccountId32, Call, H160, H256, MultiAddress, Perbill, Permill } from '@polkadot/types/interfaces/runtime';
-import type { CumulusPrimitivesParachainInherentParachainInherentData, EthereumTransactionTransactionV2, FrameSupportScheduleMaybeHashed, OrmlVestingVestingSchedule, PalletEvmAccountBasicCrossAccountIdRepr, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsPartPartType, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCreateCollectionData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, XcmV1MultiLocation, XcmV2WeightLimit, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup';
+import type { CumulusPrimitivesParachainInherentParachainInherentData, EthereumTransactionTransactionV2, FrameSupportScheduleMaybeHashed, OrmlVestingVestingSchedule, PalletEvmAccountBasicCrossAccountIdRepr, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsPartPartType, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCreateCollectionData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, XcmV1MultiLocation, XcmV2WeightLimit, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup';
 
 declare module '@polkadot/api-base/types/submittable' {
   export interface AugmentedSubmittables<ApiType extends ApiTypes> {
@@ -373,7 +373,7 @@
       /**
        * Create composable resource
        **/
-      addComposableResource: AugmentedSubmittable<(rmrkCollectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, resourceId: Bytes | string | Uint8Array, resource: RmrkTraitsResourceComposableResource | { parts?: any; base?: any; src?: any; metadata?: any; license?: any; thumb?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32, Bytes, RmrkTraitsResourceComposableResource]>;
+      addComposableResource: AugmentedSubmittable<(rmrkCollectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, resource: RmrkTraitsResourceComposableResource | { parts?: any; base?: any; src?: any; metadata?: any; license?: any; thumb?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32, RmrkTraitsResourceComposableResource]>;
       /**
        * Create slot resource
        **/
@@ -381,7 +381,7 @@
       /**
        * burn nft
        **/
-      burnNft: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32]>;
+      burnNft: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, nftId: u32 | AnyNumber | Uint8Array, maxBurns: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32, u32]>;
       /**
        * Change the issuer of a collection
        * 
@@ -415,7 +415,7 @@
        * - `metadata`: Arbitrary data about an nft, e.g. IPFS hash
        * - `transferable`: Ability to transfer this NFT
        **/
-      mintNft: AugmentedSubmittable<(owner: AccountId32 | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, recipient: Option<AccountId32> | null | object | string | Uint8Array, royaltyAmount: Option<Permill> | null | object | string | Uint8Array, metadata: Bytes | string | Uint8Array, transferable: bool | boolean | Uint8Array) => SubmittableExtrinsic<ApiType>, [AccountId32, u32, Option<AccountId32>, Option<Permill>, Bytes, bool]>;
+      mintNft: AugmentedSubmittable<(owner: AccountId32 | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, recipient: Option<AccountId32> | null | object | string | Uint8Array, royaltyAmount: Option<Permill> | null | object | string | Uint8Array, metadata: Bytes | string | Uint8Array, transferable: bool | boolean | Uint8Array, resources: Option<Vec<RmrkTraitsResourceResourceTypes>> | null | object | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [AccountId32, u32, Option<AccountId32>, Option<Permill>, Bytes, bool, Option<Vec<RmrkTraitsResourceResourceTypes>>]>;
       /**
        * Rejects an NFT sent from another account to self or owned NFT
        * 
@@ -974,8 +974,8 @@
        * * new_sponsor.
        **/
       setCollectionSponsor: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, newSponsor: AccountId32 | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, AccountId32]>;
-      setPropertyPermissions: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, propertyPermissions: Vec<UpDataStructsPropertyKeyPermission> | (UpDataStructsPropertyKeyPermission | { key?: any; permission?: any } | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [u32, Vec<UpDataStructsPropertyKeyPermission>]>;
       setTokenProperties: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, properties: Vec<UpDataStructsProperty> | (UpDataStructsProperty | { key?: any; value?: any } | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [u32, u32, Vec<UpDataStructsProperty>]>;
+      setTokenPropertyPermissions: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, propertyPermissions: Vec<UpDataStructsPropertyKeyPermission> | (UpDataStructsPropertyKeyPermission | { key?: any; permission?: any } | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [u32, Vec<UpDataStructsPropertyKeyPermission>]>;
       /**
        * Set transfers_enabled value for particular collection
        * 
modifiedtests/src/interfaces/augment-types.tsdiffbeforeafterboth
--- a/tests/src/interfaces/augment-types.ts
+++ b/tests/src/interfaces/augment-types.ts
@@ -1,7 +1,7 @@
 // Auto-generated via `yarn polkadot-types-from-defs`, do not edit
 /* eslint-disable */
 
-import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportScheduleLookupError, FrameSupportScheduleMaybeHashed, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSupportWeightsWeightToFeeCoefficient, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletUnqSchedulerCall, PalletUnqSchedulerError, PalletUnqSchedulerEvent, PalletUnqSchedulerScheduledV3, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsRpcCollection, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from './default';
+import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportScheduleLookupError, FrameSupportScheduleMaybeHashed, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSupportWeightsWeightToFeeCoefficient, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletUniqueSchedulerCall, PalletUniqueSchedulerError, PalletUniqueSchedulerEvent, PalletUniqueSchedulerScheduledV3, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsRpcCollection, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from './default';
 import type { Data, StorageKey } from '@polkadot/types';
 import type { BitVec, Bool, Bytes, I128, I16, I256, I32, I64, I8, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, i128, i16, i256, i32, i64, i8, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec';
 import type { AssetApproval, AssetApprovalKey, AssetBalance, AssetDestroyWitness, AssetDetails, AssetMetadata, TAssetBalance, TAssetDepositBalance } from '@polkadot/types/interfaces/assets';
@@ -819,10 +819,10 @@
     PalletUniqueCall: PalletUniqueCall;
     PalletUniqueError: PalletUniqueError;
     PalletUniqueRawEvent: PalletUniqueRawEvent;
-    PalletUnqSchedulerCall: PalletUnqSchedulerCall;
-    PalletUnqSchedulerError: PalletUnqSchedulerError;
-    PalletUnqSchedulerEvent: PalletUnqSchedulerEvent;
-    PalletUnqSchedulerScheduledV3: PalletUnqSchedulerScheduledV3;
+    PalletUniqueSchedulerCall: PalletUniqueSchedulerCall;
+    PalletUniqueSchedulerError: PalletUniqueSchedulerError;
+    PalletUniqueSchedulerEvent: PalletUniqueSchedulerEvent;
+    PalletUniqueSchedulerScheduledV3: PalletUniqueSchedulerScheduledV3;
     PalletVersion: PalletVersion;
     PalletXcmCall: PalletXcmCall;
     PalletXcmError: PalletXcmError;
modifiedtests/src/interfaces/default/types.tsdiffbeforeafterboth
--- a/tests/src/interfaces/default/types.ts
+++ b/tests/src/interfaces/default/types.ts
@@ -1214,11 +1214,13 @@
     readonly royaltyAmount: Option<Permill>;
     readonly metadata: Bytes;
     readonly transferable: bool;
+    readonly resources: Option<Vec<RmrkTraitsResourceResourceTypes>>;
   } & Struct;
   readonly isBurnNft: boolean;
   readonly asBurnNft: {
     readonly collectionId: u32;
     readonly nftId: u32;
+    readonly maxBurns: u32;
   } & Struct;
   readonly isSend: boolean;
   readonly asSend: {
@@ -1272,7 +1274,6 @@
   readonly asAddComposableResource: {
     readonly rmrkCollectionId: u32;
     readonly nftId: u32;
-    readonly resourceId: Bytes;
     readonly resource: RmrkTraitsResourceComposableResource;
   } & Struct;
   readonly isAddSlotResource: boolean;
@@ -1296,6 +1297,7 @@
   readonly isNftTypeEncodeError: boolean;
   readonly isRmrkPropertyKeyIsTooLong: boolean;
   readonly isRmrkPropertyValueIsTooLong: boolean;
+  readonly isUnableToDecodeRmrkData: boolean;
   readonly isCollectionNotEmpty: boolean;
   readonly isNoAvailableCollectionId: boolean;
   readonly isNoAvailableNftId: boolean;
@@ -1308,7 +1310,7 @@
   readonly isCannotAcceptNonOwnedNft: boolean;
   readonly isCannotRejectNonOwnedNft: boolean;
   readonly isResourceNotPending: boolean;
-  readonly type: 'CorruptedCollectionType' | 'NftTypeEncodeError' | 'RmrkPropertyKeyIsTooLong' | 'RmrkPropertyValueIsTooLong' | 'CollectionNotEmpty' | 'NoAvailableCollectionId' | 'NoAvailableNftId' | 'CollectionUnknown' | 'NoPermission' | 'NonTransferable' | 'CollectionFullOrLocked' | 'ResourceDoesntExist' | 'CannotSendToDescendentOrSelf' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'ResourceNotPending';
+  readonly type: 'CorruptedCollectionType' | 'NftTypeEncodeError' | 'RmrkPropertyKeyIsTooLong' | 'RmrkPropertyValueIsTooLong' | 'UnableToDecodeRmrkData' | 'CollectionNotEmpty' | 'NoAvailableCollectionId' | 'NoAvailableNftId' | 'CollectionUnknown' | 'NoPermission' | 'NonTransferable' | 'CollectionFullOrLocked' | 'ResourceDoesntExist' | 'CannotSendToDescendentOrSelf' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'ResourceNotPending';
 }
 
 /** @name PalletRmrkCoreEvent */
@@ -1688,8 +1690,8 @@
     readonly tokenId: u32;
     readonly propertyKeys: Vec<Bytes>;
   } & Struct;
-  readonly isSetPropertyPermissions: boolean;
-  readonly asSetPropertyPermissions: {
+  readonly isSetTokenPropertyPermissions: boolean;
+  readonly asSetTokenPropertyPermissions: {
     readonly collectionId: u32;
     readonly propertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;
   } & Struct;
@@ -1748,7 +1750,7 @@
     readonly collectionId: u32;
     readonly newLimit: UpDataStructsCollectionPermissions;
   } & Struct;
-  readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions';
+  readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetTokenPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions';
 }
 
 /** @name PalletUniqueError */
@@ -1784,8 +1786,8 @@
   readonly type: 'CollectionSponsorRemoved' | 'CollectionAdminAdded' | 'CollectionOwnedChanged' | 'CollectionSponsorSet' | 'SponsorshipConfirmed' | 'CollectionAdminRemoved' | 'AllowListAddressRemoved' | 'AllowListAddressAdded' | 'CollectionLimitSet' | 'CollectionPermissionSet';
 }
 
-/** @name PalletUnqSchedulerCall */
-export interface PalletUnqSchedulerCall extends Enum {
+/** @name PalletUniqueSchedulerCall */
+export interface PalletUniqueSchedulerCall extends Enum {
   readonly isScheduleNamed: boolean;
   readonly asScheduleNamed: {
     readonly id: U8aFixed;
@@ -1809,8 +1811,8 @@
   readonly type: 'ScheduleNamed' | 'CancelNamed' | 'ScheduleNamedAfter';
 }
 
-/** @name PalletUnqSchedulerError */
-export interface PalletUnqSchedulerError extends Enum {
+/** @name PalletUniqueSchedulerError */
+export interface PalletUniqueSchedulerError extends Enum {
   readonly isFailedToSchedule: boolean;
   readonly isNotFound: boolean;
   readonly isTargetBlockNumberInPast: boolean;
@@ -1818,8 +1820,8 @@
   readonly type: 'FailedToSchedule' | 'NotFound' | 'TargetBlockNumberInPast' | 'RescheduleNoChange';
 }
 
-/** @name PalletUnqSchedulerEvent */
-export interface PalletUnqSchedulerEvent extends Enum {
+/** @name PalletUniqueSchedulerEvent */
+export interface PalletUniqueSchedulerEvent extends Enum {
   readonly isScheduled: boolean;
   readonly asScheduled: {
     readonly when: u32;
@@ -1845,8 +1847,8 @@
   readonly type: 'Scheduled' | 'Canceled' | 'Dispatched' | 'CallLookupFailed';
 }
 
-/** @name PalletUnqSchedulerScheduledV3 */
-export interface PalletUnqSchedulerScheduledV3 extends Struct {
+/** @name PalletUniqueSchedulerScheduledV3 */
+export interface PalletUniqueSchedulerScheduledV3 extends Struct {
   readonly maybeId: Option<U8aFixed>;
   readonly priority: u8;
   readonly call: FrameSupportScheduleMaybeHashed;
@@ -2427,7 +2429,7 @@
 /** @name UpDataStructsNestingPermissions */
 export interface UpDataStructsNestingPermissions extends Struct {
   readonly tokenOwner: bool;
-  readonly admin: bool;
+  readonly collectionAdmin: bool;
   readonly restricted: Option<UpDataStructsOwnerRestrictedSet>;
   readonly permissive: bool;
 }
modifiedtests/src/interfaces/lookup.tsdiffbeforeafterboth
--- a/tests/src/interfaces/lookup.ts
+++ b/tests/src/interfaces/lookup.ts
@@ -1313,7 +1313,7 @@
         tokenId: 'u32',
         propertyKeys: 'Vec<Bytes>',
       },
-      set_property_permissions: {
+      set_token_property_permissions: {
         collectionId: 'u32',
         propertyPermissions: 'Vec<UpDataStructsPropertyKeyPermission>',
       },
@@ -1432,7 +1432,7 @@
    **/
   UpDataStructsNestingPermissions: {
     tokenOwner: 'bool',
-    admin: 'bool',
+    collectionAdmin: 'bool',
     restricted: 'Option<UpDataStructsOwnerRestrictedSet>',
     permissive: 'bool'
   },
@@ -1526,9 +1526,9 @@
     users: 'BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>'
   },
   /**
-   * Lookup206: pallet_unq_scheduler::pallet::Call<T>
+   * Lookup206: pallet_unique_scheduler::pallet::Call<T>
    **/
-  PalletUnqSchedulerCall: {
+  PalletUniqueSchedulerCall: {
     _enum: {
       schedule_named: {
         id: '[u8;16]',
@@ -1593,10 +1593,12 @@
         royaltyAmount: 'Option<Permill>',
         metadata: 'Bytes',
         transferable: 'bool',
+        resources: 'Option<Vec<RmrkTraitsResourceResourceTypes>>',
       },
       burn_nft: {
         collectionId: 'u32',
         nftId: 'u32',
+        maxBurns: 'u32',
       },
       send: {
         rmrkCollectionId: 'u32',
@@ -1641,7 +1643,6 @@
       add_composable_resource: {
         rmrkCollectionId: 'u32',
         nftId: 'u32',
-        resourceId: 'Bytes',
         resource: 'RmrkTraitsResourceComposableResource',
       },
       add_slot_resource: {
@@ -1657,12 +1658,13 @@
     }
   },
   /**
-   * Lookup215: rmrk_traits::nft::AccountIdOrCollectionNftTuple<sp_core::crypto::AccountId32>
+   * Lookup217: rmrk_traits::resource::ResourceTypes<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
-  RmrkTraitsNftAccountIdOrCollectionNftTuple: {
+  RmrkTraitsResourceResourceTypes: {
     _enum: {
-      AccountId: 'AccountId32',
-      CollectionAndNftTuple: '(u32,u32)'
+      Basic: 'RmrkTraitsResourceBasicResource',
+      Composable: 'RmrkTraitsResourceComposableResource',
+      Slot: 'RmrkTraitsResourceSlotResource'
     }
   },
   /**
@@ -1675,7 +1677,7 @@
     thumb: 'Option<Bytes>'
   },
   /**
-   * Lookup222: rmrk_traits::resource::ComposableResource<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup221: rmrk_traits::resource::ComposableResource<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsResourceComposableResource: {
     parts: 'Vec<u32>',
@@ -1686,7 +1688,7 @@
     thumb: 'Option<Bytes>'
   },
   /**
-   * Lookup224: rmrk_traits::resource::SlotResource<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup222: rmrk_traits::resource::SlotResource<frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsResourceSlotResource: {
     base: 'u32',
@@ -1697,7 +1699,16 @@
     thumb: 'Option<Bytes>'
   },
   /**
-   * Lookup225: pallet_rmrk_equip::pallet::Call<T>
+   * Lookup224: rmrk_traits::nft::AccountIdOrCollectionNftTuple<sp_core::crypto::AccountId32>
+   **/
+  RmrkTraitsNftAccountIdOrCollectionNftTuple: {
+    _enum: {
+      AccountId: 'AccountId32',
+      CollectionAndNftTuple: '(u32,u32)'
+    }
+  },
+  /**
+   * Lookup228: pallet_rmrk_equip::pallet::Call<T>
    **/
   PalletRmrkEquipCall: {
     _enum: {
@@ -1713,7 +1724,7 @@
     }
   },
   /**
-   * Lookup227: rmrk_traits::part::PartType<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup230: rmrk_traits::part::PartType<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsPartPartType: {
     _enum: {
@@ -1722,7 +1733,7 @@
     }
   },
   /**
-   * Lookup229: rmrk_traits::part::FixedPart<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup232: rmrk_traits::part::FixedPart<frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsPartFixedPart: {
     id: 'u32',
@@ -1730,7 +1741,7 @@
     src: 'Bytes'
   },
   /**
-   * Lookup230: rmrk_traits::part::SlotPart<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup233: rmrk_traits::part::SlotPart<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsPartSlotPart: {
     id: 'u32',
@@ -1739,7 +1750,7 @@
     z: 'u32'
   },
   /**
-   * Lookup231: rmrk_traits::part::EquippableList<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup234: rmrk_traits::part::EquippableList<frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsPartEquippableList: {
     _enum: {
@@ -1749,7 +1760,7 @@
     }
   },
   /**
-   * Lookup233: rmrk_traits::theme::Theme<frame_support::storage::bounded_vec::BoundedVec<T, S>, PropertyList>
+   * Lookup236: rmrk_traits::theme::Theme<frame_support::storage::bounded_vec::BoundedVec<T, S>, PropertyList>
    **/
   RmrkTraitsTheme: {
     name: 'Bytes',
@@ -1757,14 +1768,14 @@
     inherit: 'bool'
   },
   /**
-   * Lookup235: rmrk_traits::theme::ThemeProperty<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup238: rmrk_traits::theme::ThemeProperty<frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsThemeThemeProperty: {
     key: 'Bytes',
     value: 'Bytes'
   },
   /**
-   * Lookup236: pallet_evm::pallet::Call<T>
+   * Lookup239: pallet_evm::pallet::Call<T>
    **/
   PalletEvmCall: {
     _enum: {
@@ -1807,7 +1818,7 @@
     }
   },
   /**
-   * Lookup242: pallet_ethereum::pallet::Call<T>
+   * Lookup245: pallet_ethereum::pallet::Call<T>
    **/
   PalletEthereumCall: {
     _enum: {
@@ -1817,7 +1828,7 @@
     }
   },
   /**
-   * Lookup243: ethereum::transaction::TransactionV2
+   * Lookup246: ethereum::transaction::TransactionV2
    **/
   EthereumTransactionTransactionV2: {
     _enum: {
@@ -1827,7 +1838,7 @@
     }
   },
   /**
-   * Lookup244: ethereum::transaction::LegacyTransaction
+   * Lookup247: ethereum::transaction::LegacyTransaction
    **/
   EthereumTransactionLegacyTransaction: {
     nonce: 'U256',
@@ -1839,7 +1850,7 @@
     signature: 'EthereumTransactionTransactionSignature'
   },
   /**
-   * Lookup245: ethereum::transaction::TransactionAction
+   * Lookup248: ethereum::transaction::TransactionAction
    **/
   EthereumTransactionTransactionAction: {
     _enum: {
@@ -1848,7 +1859,7 @@
     }
   },
   /**
-   * Lookup246: ethereum::transaction::TransactionSignature
+   * Lookup249: ethereum::transaction::TransactionSignature
    **/
   EthereumTransactionTransactionSignature: {
     v: 'u64',
@@ -1856,7 +1867,7 @@
     s: 'H256'
   },
   /**
-   * Lookup248: ethereum::transaction::EIP2930Transaction
+   * Lookup251: ethereum::transaction::EIP2930Transaction
    **/
   EthereumTransactionEip2930Transaction: {
     chainId: 'u64',
@@ -1872,14 +1883,14 @@
     s: 'H256'
   },
   /**
-   * Lookup250: ethereum::transaction::AccessListItem
+   * Lookup253: ethereum::transaction::AccessListItem
    **/
   EthereumTransactionAccessListItem: {
     address: 'H160',
     storageKeys: 'Vec<H256>'
   },
   /**
-   * Lookup251: ethereum::transaction::EIP1559Transaction
+   * Lookup254: ethereum::transaction::EIP1559Transaction
    **/
   EthereumTransactionEip1559Transaction: {
     chainId: 'u64',
@@ -1896,7 +1907,7 @@
     s: 'H256'
   },
   /**
-   * Lookup252: pallet_evm_migration::pallet::Call<T>
+   * Lookup255: pallet_evm_migration::pallet::Call<T>
    **/
   PalletEvmMigrationCall: {
     _enum: {
@@ -1914,7 +1925,7 @@
     }
   },
   /**
-   * Lookup255: pallet_sudo::pallet::Event<T>
+   * Lookup258: pallet_sudo::pallet::Event<T>
    **/
   PalletSudoEvent: {
     _enum: {
@@ -1930,7 +1941,7 @@
     }
   },
   /**
-   * Lookup257: sp_runtime::DispatchError
+   * Lookup260: sp_runtime::DispatchError
    **/
   SpRuntimeDispatchError: {
     _enum: {
@@ -1947,38 +1958,38 @@
     }
   },
   /**
-   * Lookup258: sp_runtime::ModuleError
+   * Lookup261: sp_runtime::ModuleError
    **/
   SpRuntimeModuleError: {
     index: 'u8',
     error: '[u8;4]'
   },
   /**
-   * Lookup259: sp_runtime::TokenError
+   * Lookup262: sp_runtime::TokenError
    **/
   SpRuntimeTokenError: {
     _enum: ['NoFunds', 'WouldDie', 'BelowMinimum', 'CannotCreate', 'UnknownAsset', 'Frozen', 'Unsupported']
   },
   /**
-   * Lookup260: sp_runtime::ArithmeticError
+   * Lookup263: sp_runtime::ArithmeticError
    **/
   SpRuntimeArithmeticError: {
     _enum: ['Underflow', 'Overflow', 'DivisionByZero']
   },
   /**
-   * Lookup261: sp_runtime::TransactionalError
+   * Lookup264: sp_runtime::TransactionalError
    **/
   SpRuntimeTransactionalError: {
     _enum: ['LimitReached', 'NoLayer']
   },
   /**
-   * Lookup262: pallet_sudo::pallet::Error<T>
+   * Lookup265: pallet_sudo::pallet::Error<T>
    **/
   PalletSudoError: {
     _enum: ['RequireSudo']
   },
   /**
-   * Lookup263: frame_system::AccountInfo<Index, pallet_balances::AccountData<Balance>>
+   * Lookup266: frame_system::AccountInfo<Index, pallet_balances::AccountData<Balance>>
    **/
   FrameSystemAccountInfo: {
     nonce: 'u32',
@@ -1988,7 +1999,7 @@
     data: 'PalletBalancesAccountData'
   },
   /**
-   * Lookup264: frame_support::weights::PerDispatchClass<T>
+   * Lookup267: frame_support::weights::PerDispatchClass<T>
    **/
   FrameSupportWeightsPerDispatchClassU64: {
     normal: 'u64',
@@ -1996,13 +2007,13 @@
     mandatory: 'u64'
   },
   /**
-   * Lookup265: sp_runtime::generic::digest::Digest
+   * Lookup268: sp_runtime::generic::digest::Digest
    **/
   SpRuntimeDigest: {
     logs: 'Vec<SpRuntimeDigestDigestItem>'
   },
   /**
-   * Lookup267: sp_runtime::generic::digest::DigestItem
+   * Lookup270: sp_runtime::generic::digest::DigestItem
    **/
   SpRuntimeDigestDigestItem: {
     _enum: {
@@ -2018,7 +2029,7 @@
     }
   },
   /**
-   * Lookup269: frame_system::EventRecord<opal_runtime::Event, primitive_types::H256>
+   * Lookup272: frame_system::EventRecord<opal_runtime::Event, primitive_types::H256>
    **/
   FrameSystemEventRecord: {
     phase: 'FrameSystemPhase',
@@ -2026,7 +2037,7 @@
     topics: 'Vec<H256>'
   },
   /**
-   * Lookup271: frame_system::pallet::Event<T>
+   * Lookup274: frame_system::pallet::Event<T>
    **/
   FrameSystemEvent: {
     _enum: {
@@ -2054,7 +2065,7 @@
     }
   },
   /**
-   * Lookup272: frame_support::weights::DispatchInfo
+   * Lookup275: frame_support::weights::DispatchInfo
    **/
   FrameSupportWeightsDispatchInfo: {
     weight: 'u64',
@@ -2062,19 +2073,19 @@
     paysFee: 'FrameSupportWeightsPays'
   },
   /**
-   * Lookup273: frame_support::weights::DispatchClass
+   * Lookup276: frame_support::weights::DispatchClass
    **/
   FrameSupportWeightsDispatchClass: {
     _enum: ['Normal', 'Operational', 'Mandatory']
   },
   /**
-   * Lookup274: frame_support::weights::Pays
+   * Lookup277: frame_support::weights::Pays
    **/
   FrameSupportWeightsPays: {
     _enum: ['Yes', 'No']
   },
   /**
-   * Lookup275: orml_vesting::module::Event<T>
+   * Lookup278: orml_vesting::module::Event<T>
    **/
   OrmlVestingModuleEvent: {
     _enum: {
@@ -2093,7 +2104,7 @@
     }
   },
   /**
-   * Lookup276: cumulus_pallet_xcmp_queue::pallet::Event<T>
+   * Lookup279: cumulus_pallet_xcmp_queue::pallet::Event<T>
    **/
   CumulusPalletXcmpQueueEvent: {
     _enum: {
@@ -2108,7 +2119,7 @@
     }
   },
   /**
-   * Lookup277: pallet_xcm::pallet::Event<T>
+   * Lookup280: pallet_xcm::pallet::Event<T>
    **/
   PalletXcmEvent: {
     _enum: {
@@ -2131,7 +2142,7 @@
     }
   },
   /**
-   * Lookup278: xcm::v2::traits::Outcome
+   * Lookup281: xcm::v2::traits::Outcome
    **/
   XcmV2TraitsOutcome: {
     _enum: {
@@ -2141,7 +2152,7 @@
     }
   },
   /**
-   * Lookup280: cumulus_pallet_xcm::pallet::Event<T>
+   * Lookup283: cumulus_pallet_xcm::pallet::Event<T>
    **/
   CumulusPalletXcmEvent: {
     _enum: {
@@ -2151,7 +2162,7 @@
     }
   },
   /**
-   * Lookup281: cumulus_pallet_dmp_queue::pallet::Event<T>
+   * Lookup284: cumulus_pallet_dmp_queue::pallet::Event<T>
    **/
   CumulusPalletDmpQueueEvent: {
     _enum: {
@@ -2164,7 +2175,7 @@
     }
   },
   /**
-   * Lookup282: pallet_unique::RawEvent<sp_core::crypto::AccountId32, pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
+   * Lookup285: pallet_unique::RawEvent<sp_core::crypto::AccountId32, pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
    **/
   PalletUniqueRawEvent: {
     _enum: {
@@ -2181,9 +2192,9 @@
     }
   },
   /**
-   * Lookup283: pallet_unq_scheduler::pallet::Event<T>
+   * Lookup286: pallet_unique_scheduler::pallet::Event<T>
    **/
-  PalletUnqSchedulerEvent: {
+  PalletUniqueSchedulerEvent: {
     _enum: {
       Scheduled: {
         when: 'u32',
@@ -2206,13 +2217,13 @@
     }
   },
   /**
-   * Lookup285: frame_support::traits::schedule::LookupError
+   * Lookup288: frame_support::traits::schedule::LookupError
    **/
   FrameSupportScheduleLookupError: {
     _enum: ['Unknown', 'BadFormat']
   },
   /**
-   * Lookup286: pallet_common::pallet::Event<T>
+   * Lookup289: pallet_common::pallet::Event<T>
    **/
   PalletCommonEvent: {
     _enum: {
@@ -2230,7 +2241,7 @@
     }
   },
   /**
-   * Lookup287: pallet_structure::pallet::Event<T>
+   * Lookup290: pallet_structure::pallet::Event<T>
    **/
   PalletStructureEvent: {
     _enum: {
@@ -2238,7 +2249,7 @@
     }
   },
   /**
-   * Lookup288: pallet_rmrk_core::pallet::Event<T>
+   * Lookup291: pallet_rmrk_core::pallet::Event<T>
    **/
   PalletRmrkCoreEvent: {
     _enum: {
@@ -2315,7 +2326,7 @@
     }
   },
   /**
-   * Lookup289: pallet_rmrk_equip::pallet::Event<T>
+   * Lookup292: pallet_rmrk_equip::pallet::Event<T>
    **/
   PalletRmrkEquipEvent: {
     _enum: {
@@ -2326,7 +2337,7 @@
     }
   },
   /**
-   * Lookup290: pallet_evm::pallet::Event<T>
+   * Lookup293: pallet_evm::pallet::Event<T>
    **/
   PalletEvmEvent: {
     _enum: {
@@ -2340,7 +2351,7 @@
     }
   },
   /**
-   * Lookup291: ethereum::log::Log
+   * Lookup294: ethereum::log::Log
    **/
   EthereumLog: {
     address: 'H160',
@@ -2348,7 +2359,7 @@
     data: 'Bytes'
   },
   /**
-   * Lookup292: pallet_ethereum::pallet::Event
+   * Lookup295: pallet_ethereum::pallet::Event
    **/
   PalletEthereumEvent: {
     _enum: {
@@ -2356,7 +2367,7 @@
     }
   },
   /**
-   * Lookup293: evm_core::error::ExitReason
+   * Lookup296: evm_core::error::ExitReason
    **/
   EvmCoreErrorExitReason: {
     _enum: {
@@ -2367,13 +2378,13 @@
     }
   },
   /**
-   * Lookup294: evm_core::error::ExitSucceed
+   * Lookup297: evm_core::error::ExitSucceed
    **/
   EvmCoreErrorExitSucceed: {
     _enum: ['Stopped', 'Returned', 'Suicided']
   },
   /**
-   * Lookup295: evm_core::error::ExitError
+   * Lookup298: evm_core::error::ExitError
    **/
   EvmCoreErrorExitError: {
     _enum: {
@@ -2395,13 +2406,13 @@
     }
   },
   /**
-   * Lookup298: evm_core::error::ExitRevert
+   * Lookup301: evm_core::error::ExitRevert
    **/
   EvmCoreErrorExitRevert: {
     _enum: ['Reverted']
   },
   /**
-   * Lookup299: evm_core::error::ExitFatal
+   * Lookup302: evm_core::error::ExitFatal
    **/
   EvmCoreErrorExitFatal: {
     _enum: {
@@ -2412,7 +2423,7 @@
     }
   },
   /**
-   * Lookup300: frame_system::Phase
+   * Lookup303: frame_system::Phase
    **/
   FrameSystemPhase: {
     _enum: {
@@ -2422,14 +2433,14 @@
     }
   },
   /**
-   * Lookup302: frame_system::LastRuntimeUpgradeInfo
+   * Lookup305: frame_system::LastRuntimeUpgradeInfo
    **/
   FrameSystemLastRuntimeUpgradeInfo: {
     specVersion: 'Compact<u32>',
     specName: 'Text'
   },
   /**
-   * Lookup303: frame_system::limits::BlockWeights
+   * Lookup306: frame_system::limits::BlockWeights
    **/
   FrameSystemLimitsBlockWeights: {
     baseBlock: 'u64',
@@ -2437,7 +2448,7 @@
     perClass: 'FrameSupportWeightsPerDispatchClassWeightsPerClass'
   },
   /**
-   * Lookup304: frame_support::weights::PerDispatchClass<frame_system::limits::WeightsPerClass>
+   * Lookup307: frame_support::weights::PerDispatchClass<frame_system::limits::WeightsPerClass>
    **/
   FrameSupportWeightsPerDispatchClassWeightsPerClass: {
     normal: 'FrameSystemLimitsWeightsPerClass',
@@ -2445,7 +2456,7 @@
     mandatory: 'FrameSystemLimitsWeightsPerClass'
   },
   /**
-   * Lookup305: frame_system::limits::WeightsPerClass
+   * Lookup308: frame_system::limits::WeightsPerClass
    **/
   FrameSystemLimitsWeightsPerClass: {
     baseExtrinsic: 'u64',
@@ -2454,13 +2465,13 @@
     reserved: 'Option<u64>'
   },
   /**
-   * Lookup307: frame_system::limits::BlockLength
+   * Lookup310: frame_system::limits::BlockLength
    **/
   FrameSystemLimitsBlockLength: {
     max: 'FrameSupportWeightsPerDispatchClassU32'
   },
   /**
-   * Lookup308: frame_support::weights::PerDispatchClass<T>
+   * Lookup311: frame_support::weights::PerDispatchClass<T>
    **/
   FrameSupportWeightsPerDispatchClassU32: {
     normal: 'u32',
@@ -2468,14 +2479,14 @@
     mandatory: 'u32'
   },
   /**
-   * Lookup309: frame_support::weights::RuntimeDbWeight
+   * Lookup312: frame_support::weights::RuntimeDbWeight
    **/
   FrameSupportWeightsRuntimeDbWeight: {
     read: 'u64',
     write: 'u64'
   },
   /**
-   * Lookup310: sp_version::RuntimeVersion
+   * Lookup313: sp_version::RuntimeVersion
    **/
   SpVersionRuntimeVersion: {
     specName: 'Text',
@@ -2488,19 +2499,19 @@
     stateVersion: 'u8'
   },
   /**
-   * Lookup314: frame_system::pallet::Error<T>
+   * Lookup317: frame_system::pallet::Error<T>
    **/
   FrameSystemError: {
     _enum: ['InvalidSpecName', 'SpecVersionNeedsToIncrease', 'FailedToExtractRuntimeVersion', 'NonDefaultComposite', 'NonZeroRefCount', 'CallFiltered']
   },
   /**
-   * Lookup316: orml_vesting::module::Error<T>
+   * Lookup319: orml_vesting::module::Error<T>
    **/
   OrmlVestingModuleError: {
     _enum: ['ZeroVestingPeriod', 'ZeroVestingPeriodCount', 'InsufficientBalanceToLock', 'TooManyVestingSchedules', 'AmountLow', 'MaxVestingSchedulesExceeded']
   },
   /**
-   * Lookup318: cumulus_pallet_xcmp_queue::InboundChannelDetails
+   * Lookup321: cumulus_pallet_xcmp_queue::InboundChannelDetails
    **/
   CumulusPalletXcmpQueueInboundChannelDetails: {
     sender: 'u32',
@@ -2508,19 +2519,19 @@
     messageMetadata: 'Vec<(u32,PolkadotParachainPrimitivesXcmpMessageFormat)>'
   },
   /**
-   * Lookup319: cumulus_pallet_xcmp_queue::InboundState
+   * Lookup322: cumulus_pallet_xcmp_queue::InboundState
    **/
   CumulusPalletXcmpQueueInboundState: {
     _enum: ['Ok', 'Suspended']
   },
   /**
-   * Lookup322: polkadot_parachain::primitives::XcmpMessageFormat
+   * Lookup325: polkadot_parachain::primitives::XcmpMessageFormat
    **/
   PolkadotParachainPrimitivesXcmpMessageFormat: {
     _enum: ['ConcatenatedVersionedXcm', 'ConcatenatedEncodedBlob', 'Signals']
   },
   /**
-   * Lookup325: cumulus_pallet_xcmp_queue::OutboundChannelDetails
+   * Lookup328: cumulus_pallet_xcmp_queue::OutboundChannelDetails
    **/
   CumulusPalletXcmpQueueOutboundChannelDetails: {
     recipient: 'u32',
@@ -2530,13 +2541,13 @@
     lastIndex: 'u16'
   },
   /**
-   * Lookup326: cumulus_pallet_xcmp_queue::OutboundState
+   * Lookup329: cumulus_pallet_xcmp_queue::OutboundState
    **/
   CumulusPalletXcmpQueueOutboundState: {
     _enum: ['Ok', 'Suspended']
   },
   /**
-   * Lookup328: cumulus_pallet_xcmp_queue::QueueConfigData
+   * Lookup331: cumulus_pallet_xcmp_queue::QueueConfigData
    **/
   CumulusPalletXcmpQueueQueueConfigData: {
     suspendThreshold: 'u32',
@@ -2547,29 +2558,29 @@
     xcmpMaxIndividualWeight: 'u64'
   },
   /**
-   * Lookup330: cumulus_pallet_xcmp_queue::pallet::Error<T>
+   * Lookup333: cumulus_pallet_xcmp_queue::pallet::Error<T>
    **/
   CumulusPalletXcmpQueueError: {
     _enum: ['FailedToSend', 'BadXcmOrigin', 'BadXcm', 'BadOverweightIndex', 'WeightOverLimit']
   },
   /**
-   * Lookup331: pallet_xcm::pallet::Error<T>
+   * Lookup334: pallet_xcm::pallet::Error<T>
    **/
   PalletXcmError: {
     _enum: ['Unreachable', 'SendFailure', 'Filtered', 'UnweighableMessage', 'DestinationNotInvertible', 'Empty', 'CannotReanchor', 'TooManyAssets', 'InvalidOrigin', 'BadVersion', 'BadLocation', 'NoSubscription', 'AlreadySubscribed']
   },
   /**
-   * Lookup332: cumulus_pallet_xcm::pallet::Error<T>
+   * Lookup335: cumulus_pallet_xcm::pallet::Error<T>
    **/
   CumulusPalletXcmError: 'Null',
   /**
-   * Lookup333: cumulus_pallet_dmp_queue::ConfigData
+   * Lookup336: cumulus_pallet_dmp_queue::ConfigData
    **/
   CumulusPalletDmpQueueConfigData: {
     maxIndividual: 'u64'
   },
   /**
-   * Lookup334: cumulus_pallet_dmp_queue::PageIndexData
+   * Lookup337: cumulus_pallet_dmp_queue::PageIndexData
    **/
   CumulusPalletDmpQueuePageIndexData: {
     beginUsed: 'u32',
@@ -2577,21 +2588,21 @@
     overweightCount: 'u64'
   },
   /**
-   * Lookup337: cumulus_pallet_dmp_queue::pallet::Error<T>
+   * Lookup340: cumulus_pallet_dmp_queue::pallet::Error<T>
    **/
   CumulusPalletDmpQueueError: {
     _enum: ['Unknown', 'OverLimit']
   },
   /**
-   * Lookup341: pallet_unique::Error<T>
+   * Lookup344: pallet_unique::Error<T>
    **/
   PalletUniqueError: {
     _enum: ['CollectionDecimalPointLimitExceeded', 'ConfirmUnsetSponsorFail', 'EmptyArgument']
   },
   /**
-   * Lookup344: pallet_unq_scheduler::ScheduledV3<frame_support::traits::schedule::MaybeHashed<opal_runtime::Call, primitive_types::H256>, BlockNumber, opal_runtime::OriginCaller, sp_core::crypto::AccountId32>
+   * Lookup347: pallet_unique_scheduler::ScheduledV3<frame_support::traits::schedule::MaybeHashed<opal_runtime::Call, primitive_types::H256>, BlockNumber, opal_runtime::OriginCaller, sp_core::crypto::AccountId32>
    **/
-  PalletUnqSchedulerScheduledV3: {
+  PalletUniqueSchedulerScheduledV3: {
     maybeId: 'Option<[u8;16]>',
     priority: 'u8',
     call: 'FrameSupportScheduleMaybeHashed',
@@ -2599,7 +2610,7 @@
     origin: 'OpalRuntimeOriginCaller'
   },
   /**
-   * Lookup345: opal_runtime::OriginCaller
+   * Lookup348: opal_runtime::OriginCaller
    **/
   OpalRuntimeOriginCaller: {
     _enum: {
@@ -2708,7 +2719,7 @@
     }
   },
   /**
-   * Lookup346: frame_support::dispatch::RawOrigin<sp_core::crypto::AccountId32>
+   * Lookup349: frame_support::dispatch::RawOrigin<sp_core::crypto::AccountId32>
    **/
   FrameSupportDispatchRawOrigin: {
     _enum: {
@@ -2718,7 +2729,7 @@
     }
   },
   /**
-   * Lookup347: pallet_xcm::pallet::Origin
+   * Lookup350: pallet_xcm::pallet::Origin
    **/
   PalletXcmOrigin: {
     _enum: {
@@ -2727,7 +2738,7 @@
     }
   },
   /**
-   * Lookup348: cumulus_pallet_xcm::pallet::Origin
+   * Lookup351: cumulus_pallet_xcm::pallet::Origin
    **/
   CumulusPalletXcmOrigin: {
     _enum: {
@@ -2736,7 +2747,7 @@
     }
   },
   /**
-   * Lookup349: pallet_ethereum::RawOrigin
+   * Lookup352: pallet_ethereum::RawOrigin
    **/
   PalletEthereumRawOrigin: {
     _enum: {
@@ -2744,17 +2755,17 @@
     }
   },
   /**
-   * Lookup350: sp_core::Void
+   * Lookup353: sp_core::Void
    **/
   SpCoreVoid: 'Null',
   /**
-   * Lookup351: pallet_unq_scheduler::pallet::Error<T>
+   * Lookup354: pallet_unique_scheduler::pallet::Error<T>
    **/
-  PalletUnqSchedulerError: {
+  PalletUniqueSchedulerError: {
     _enum: ['FailedToSchedule', 'NotFound', 'TargetBlockNumberInPast', 'RescheduleNoChange']
   },
   /**
-   * Lookup352: up_data_structs::Collection<sp_core::crypto::AccountId32>
+   * Lookup355: up_data_structs::Collection<sp_core::crypto::AccountId32>
    **/
   UpDataStructsCollection: {
     owner: 'AccountId32',
@@ -2768,7 +2779,7 @@
     externalCollection: 'bool'
   },
   /**
-   * Lookup353: up_data_structs::SponsorshipState<sp_core::crypto::AccountId32>
+   * Lookup356: up_data_structs::SponsorshipState<sp_core::crypto::AccountId32>
    **/
   UpDataStructsSponsorshipState: {
     _enum: {
@@ -2778,7 +2789,7 @@
     }
   },
   /**
-   * Lookup354: up_data_structs::Properties
+   * Lookup357: up_data_structs::Properties
    **/
   UpDataStructsProperties: {
     map: 'UpDataStructsPropertiesMapBoundedVec',
@@ -2786,15 +2797,15 @@
     spaceLimit: 'u32'
   },
   /**
-   * Lookup355: up_data_structs::PropertiesMap<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup358: up_data_structs::PropertiesMap<frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   UpDataStructsPropertiesMapBoundedVec: 'BTreeMap<Bytes, Bytes>',
   /**
-   * Lookup360: up_data_structs::PropertiesMap<up_data_structs::PropertyPermission>
+   * Lookup363: up_data_structs::PropertiesMap<up_data_structs::PropertyPermission>
    **/
   UpDataStructsPropertiesMapPropertyPermission: 'BTreeMap<Bytes, UpDataStructsPropertyPermission>',
   /**
-   * Lookup367: up_data_structs::CollectionStats
+   * Lookup370: up_data_structs::CollectionStats
    **/
   UpDataStructsCollectionStats: {
     created: 'u32',
@@ -2802,25 +2813,25 @@
     alive: 'u32'
   },
   /**
-   * Lookup368: up_data_structs::TokenChild
+   * Lookup371: up_data_structs::TokenChild
    **/
   UpDataStructsTokenChild: {
     token: 'u32',
     collection: 'u32'
   },
   /**
-   * Lookup369: PhantomType::up_data_structs<T>
+   * Lookup372: PhantomType::up_data_structs<T>
    **/
   PhantomTypeUpDataStructs: '[(UpDataStructsTokenData,UpDataStructsRpcCollection,RmrkTraitsCollectionCollectionInfo,RmrkTraitsNftNftInfo,RmrkTraitsResourceResourceInfo,RmrkTraitsPropertyPropertyInfo,RmrkTraitsBaseBaseInfo,RmrkTraitsPartPartType,RmrkTraitsTheme,RmrkTraitsNftNftChild);0]',
   /**
-   * Lookup371: up_data_structs::TokenData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
+   * Lookup374: up_data_structs::TokenData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
    **/
   UpDataStructsTokenData: {
     properties: 'Vec<UpDataStructsProperty>',
     owner: 'Option<PalletEvmAccountBasicCrossAccountIdRepr>'
   },
   /**
-   * Lookup373: up_data_structs::RpcCollection<sp_core::crypto::AccountId32>
+   * Lookup376: up_data_structs::RpcCollection<sp_core::crypto::AccountId32>
    **/
   UpDataStructsRpcCollection: {
     owner: 'AccountId32',
@@ -2836,7 +2847,7 @@
     readOnly: 'bool'
   },
   /**
-   * Lookup374: rmrk_traits::collection::CollectionInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>, sp_core::crypto::AccountId32>
+   * Lookup377: rmrk_traits::collection::CollectionInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>, sp_core::crypto::AccountId32>
    **/
   RmrkTraitsCollectionCollectionInfo: {
     issuer: 'AccountId32',
@@ -2846,7 +2857,7 @@
     nftsCount: 'u32'
   },
   /**
-   * Lookup375: rmrk_traits::nft::NftInfo<sp_core::crypto::AccountId32, sp_arithmetic::per_things::Permill, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup378: rmrk_traits::nft::NftInfo<sp_core::crypto::AccountId32, sp_arithmetic::per_things::Permill, frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsNftNftInfo: {
     owner: 'RmrkTraitsNftAccountIdOrCollectionNftTuple',
@@ -2856,14 +2867,14 @@
     pending: 'bool'
   },
   /**
-   * Lookup377: rmrk_traits::nft::RoyaltyInfo<sp_core::crypto::AccountId32, sp_arithmetic::per_things::Permill>
+   * Lookup380: rmrk_traits::nft::RoyaltyInfo<sp_core::crypto::AccountId32, sp_arithmetic::per_things::Permill>
    **/
   RmrkTraitsNftRoyaltyInfo: {
     recipient: 'AccountId32',
     amount: 'Permill'
   },
   /**
-   * Lookup378: rmrk_traits::resource::ResourceInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup381: rmrk_traits::resource::ResourceInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsResourceResourceInfo: {
     id: 'u32',
@@ -2872,24 +2883,14 @@
     pendingRemoval: 'bool'
   },
   /**
-   * Lookup379: rmrk_traits::resource::ResourceTypes<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
-   **/
-  RmrkTraitsResourceResourceTypes: {
-    _enum: {
-      Basic: 'RmrkTraitsResourceBasicResource',
-      Composable: 'RmrkTraitsResourceComposableResource',
-      Slot: 'RmrkTraitsResourceSlotResource'
-    }
-  },
-  /**
-   * Lookup380: rmrk_traits::property::PropertyInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup382: rmrk_traits::property::PropertyInfo<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsPropertyPropertyInfo: {
     key: 'Bytes',
     value: 'Bytes'
   },
   /**
-   * Lookup381: rmrk_traits::base::BaseInfo<sp_core::crypto::AccountId32, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup383: rmrk_traits::base::BaseInfo<sp_core::crypto::AccountId32, frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsBaseBaseInfo: {
     issuer: 'AccountId32',
@@ -2897,74 +2898,74 @@
     symbol: 'Bytes'
   },
   /**
-   * Lookup382: rmrk_traits::nft::NftChild
+   * Lookup384: rmrk_traits::nft::NftChild
    **/
   RmrkTraitsNftNftChild: {
     collectionId: 'u32',
     nftId: 'u32'
   },
   /**
-   * Lookup384: pallet_common::pallet::Error<T>
+   * Lookup386: pallet_common::pallet::Error<T>
    **/
   PalletCommonError: {
     _enum: ['CollectionNotFound', 'MustBeTokenOwner', 'NoPermission', 'CantDestroyNotEmptyCollection', 'PublicMintingNotAllowed', 'AddressNotInAllowlist', 'CollectionNameLimitExceeded', 'CollectionDescriptionLimitExceeded', 'CollectionTokenPrefixLimitExceeded', 'TotalCollectionsLimitExceeded', 'CollectionAdminCountExceeded', 'CollectionLimitBoundsExceeded', 'OwnerPermissionsCantBeReverted', 'TransferNotAllowed', 'AccountTokenLimitExceeded', 'CollectionTokenLimitExceeded', 'MetadataFlagFrozen', 'TokenNotFound', 'TokenValueTooLow', 'ApprovedValueTooLow', 'CantApproveMoreThanOwned', 'AddressIsZero', 'UnsupportedOperation', 'NotSufficientFounds', 'UserIsNotAllowedToNest', 'SourceCollectionIsNotAllowedToNest', 'CollectionFieldSizeExceeded', 'NoSpaceForProperty', 'PropertyLimitReached', 'PropertyKeyIsTooLong', 'InvalidCharacterInPropertyKey', 'EmptyPropertyKey', 'CollectionIsExternal', 'CollectionIsInternal']
   },
   /**
-   * Lookup386: pallet_fungible::pallet::Error<T>
+   * Lookup388: pallet_fungible::pallet::Error<T>
    **/
   PalletFungibleError: {
     _enum: ['NotFungibleDataUsedToMintFungibleCollectionToken', 'FungibleItemsHaveNoId', 'FungibleItemsDontHaveData', 'FungibleDisallowsNesting', 'SettingPropertiesNotAllowed']
   },
   /**
-   * Lookup387: pallet_refungible::ItemData
+   * Lookup389: pallet_refungible::ItemData
    **/
   PalletRefungibleItemData: {
     constData: 'Bytes'
   },
   /**
-   * Lookup391: pallet_refungible::pallet::Error<T>
+   * Lookup393: pallet_refungible::pallet::Error<T>
    **/
   PalletRefungibleError: {
     _enum: ['NotRefungibleDataUsedToMintFungibleCollectionToken', 'WrongRefungiblePieces', 'RefungibleDisallowsNesting', 'SettingPropertiesNotAllowed']
   },
   /**
-   * Lookup392: pallet_nonfungible::ItemData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
+   * Lookup394: pallet_nonfungible::ItemData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
    **/
   PalletNonfungibleItemData: {
     owner: 'PalletEvmAccountBasicCrossAccountIdRepr'
   },
   /**
-   * Lookup394: pallet_nonfungible::pallet::Error<T>
+   * Lookup396: pallet_nonfungible::pallet::Error<T>
    **/
   PalletNonfungibleError: {
     _enum: ['NotNonfungibleDataUsedToMintFungibleCollectionToken', 'NonfungibleItemsHaveNoAmount', 'CantBurnNftWithChildren']
   },
   /**
-   * Lookup395: pallet_structure::pallet::Error<T>
+   * Lookup397: pallet_structure::pallet::Error<T>
    **/
   PalletStructureError: {
     _enum: ['OuroborosDetected', 'DepthLimit', 'BreadthLimit', 'TokenNotFound']
   },
   /**
-   * Lookup396: pallet_rmrk_core::pallet::Error<T>
+   * Lookup398: pallet_rmrk_core::pallet::Error<T>
    **/
   PalletRmrkCoreError: {
-    _enum: ['CorruptedCollectionType', 'NftTypeEncodeError', 'RmrkPropertyKeyIsTooLong', 'RmrkPropertyValueIsTooLong', 'CollectionNotEmpty', 'NoAvailableCollectionId', 'NoAvailableNftId', 'CollectionUnknown', 'NoPermission', 'NonTransferable', 'CollectionFullOrLocked', 'ResourceDoesntExist', 'CannotSendToDescendentOrSelf', 'CannotAcceptNonOwnedNft', 'CannotRejectNonOwnedNft', 'ResourceNotPending']
+    _enum: ['CorruptedCollectionType', 'NftTypeEncodeError', 'RmrkPropertyKeyIsTooLong', 'RmrkPropertyValueIsTooLong', 'UnableToDecodeRmrkData', 'CollectionNotEmpty', 'NoAvailableCollectionId', 'NoAvailableNftId', 'CollectionUnknown', 'NoPermission', 'NonTransferable', 'CollectionFullOrLocked', 'ResourceDoesntExist', 'CannotSendToDescendentOrSelf', 'CannotAcceptNonOwnedNft', 'CannotRejectNonOwnedNft', 'ResourceNotPending']
   },
   /**
-   * Lookup398: pallet_rmrk_equip::pallet::Error<T>
+   * Lookup400: pallet_rmrk_equip::pallet::Error<T>
    **/
   PalletRmrkEquipError: {
     _enum: ['PermissionError', 'NoAvailableBaseId', 'NoAvailablePartId', 'BaseDoesntExist', 'NeedsDefaultThemeFirst']
   },
   /**
-   * Lookup401: pallet_evm::pallet::Error<T>
+   * Lookup403: pallet_evm::pallet::Error<T>
    **/
   PalletEvmError: {
     _enum: ['BalanceLow', 'FeeOverflow', 'PaymentOverflow', 'WithdrawFailed', 'GasPriceTooLow', 'InvalidNonce']
   },
   /**
-   * Lookup404: fp_rpc::TransactionStatus
+   * Lookup406: fp_rpc::TransactionStatus
    **/
   FpRpcTransactionStatus: {
     transactionHash: 'H256',
@@ -2976,11 +2977,11 @@
     logsBloom: 'EthbloomBloom'
   },
   /**
-   * Lookup406: ethbloom::Bloom
+   * Lookup408: ethbloom::Bloom
    **/
   EthbloomBloom: '[u8;256]',
   /**
-   * Lookup408: ethereum::receipt::ReceiptV3
+   * Lookup410: ethereum::receipt::ReceiptV3
    **/
   EthereumReceiptReceiptV3: {
     _enum: {
@@ -2990,7 +2991,7 @@
     }
   },
   /**
-   * Lookup409: ethereum::receipt::EIP658ReceiptData
+   * Lookup411: ethereum::receipt::EIP658ReceiptData
    **/
   EthereumReceiptEip658ReceiptData: {
     statusCode: 'u8',
@@ -2999,7 +3000,7 @@
     logs: 'Vec<EthereumLog>'
   },
   /**
-   * Lookup410: ethereum::block::Block<ethereum::transaction::TransactionV2>
+   * Lookup412: ethereum::block::Block<ethereum::transaction::TransactionV2>
    **/
   EthereumBlock: {
     header: 'EthereumHeader',
@@ -3007,7 +3008,7 @@
     ommers: 'Vec<EthereumHeader>'
   },
   /**
-   * Lookup411: ethereum::header::Header
+   * Lookup413: ethereum::header::Header
    **/
   EthereumHeader: {
     parentHash: 'H256',
@@ -3027,41 +3028,41 @@
     nonce: 'EthereumTypesHashH64'
   },
   /**
-   * Lookup412: ethereum_types::hash::H64
+   * Lookup414: ethereum_types::hash::H64
    **/
   EthereumTypesHashH64: '[u8;8]',
   /**
-   * Lookup417: pallet_ethereum::pallet::Error<T>
+   * Lookup419: pallet_ethereum::pallet::Error<T>
    **/
   PalletEthereumError: {
     _enum: ['InvalidSignature', 'PreLogExists']
   },
   /**
-   * Lookup418: pallet_evm_coder_substrate::pallet::Error<T>
+   * Lookup420: pallet_evm_coder_substrate::pallet::Error<T>
    **/
   PalletEvmCoderSubstrateError: {
     _enum: ['OutOfGas', 'OutOfFund']
   },
   /**
-   * Lookup419: pallet_evm_contract_helpers::SponsoringModeT
+   * Lookup421: pallet_evm_contract_helpers::SponsoringModeT
    **/
   PalletEvmContractHelpersSponsoringModeT: {
     _enum: ['Disabled', 'Allowlisted', 'Generous']
   },
   /**
-   * Lookup421: pallet_evm_contract_helpers::pallet::Error<T>
+   * Lookup423: pallet_evm_contract_helpers::pallet::Error<T>
    **/
   PalletEvmContractHelpersError: {
     _enum: ['NoPermission']
   },
   /**
-   * Lookup422: pallet_evm_migration::pallet::Error<T>
+   * Lookup424: pallet_evm_migration::pallet::Error<T>
    **/
   PalletEvmMigrationError: {
     _enum: ['AccountNotEmpty', 'AccountIsNotMigrating']
   },
   /**
-   * Lookup424: sp_runtime::MultiSignature
+   * Lookup426: sp_runtime::MultiSignature
    **/
   SpRuntimeMultiSignature: {
     _enum: {
@@ -3071,43 +3072,43 @@
     }
   },
   /**
-   * Lookup425: sp_core::ed25519::Signature
+   * Lookup427: sp_core::ed25519::Signature
    **/
   SpCoreEd25519Signature: '[u8;64]',
   /**
-   * Lookup427: sp_core::sr25519::Signature
+   * Lookup429: sp_core::sr25519::Signature
    **/
   SpCoreSr25519Signature: '[u8;64]',
   /**
-   * Lookup428: sp_core::ecdsa::Signature
+   * Lookup430: sp_core::ecdsa::Signature
    **/
   SpCoreEcdsaSignature: '[u8;65]',
   /**
-   * Lookup431: frame_system::extensions::check_spec_version::CheckSpecVersion<T>
+   * Lookup433: frame_system::extensions::check_spec_version::CheckSpecVersion<T>
    **/
   FrameSystemExtensionsCheckSpecVersion: 'Null',
   /**
-   * Lookup432: frame_system::extensions::check_genesis::CheckGenesis<T>
+   * Lookup434: frame_system::extensions::check_genesis::CheckGenesis<T>
    **/
   FrameSystemExtensionsCheckGenesis: 'Null',
   /**
-   * Lookup435: frame_system::extensions::check_nonce::CheckNonce<T>
+   * Lookup437: frame_system::extensions::check_nonce::CheckNonce<T>
    **/
   FrameSystemExtensionsCheckNonce: 'Compact<u32>',
   /**
-   * Lookup436: frame_system::extensions::check_weight::CheckWeight<T>
+   * Lookup438: frame_system::extensions::check_weight::CheckWeight<T>
    **/
   FrameSystemExtensionsCheckWeight: 'Null',
   /**
-   * Lookup437: pallet_template_transaction_payment::ChargeTransactionPayment<opal_runtime::Runtime>
+   * Lookup439: pallet_template_transaction_payment::ChargeTransactionPayment<opal_runtime::Runtime>
    **/
   PalletTemplateTransactionPaymentChargeTransactionPayment: 'Compact<u128>',
   /**
-   * Lookup438: opal_runtime::Runtime
+   * Lookup440: opal_runtime::Runtime
    **/
   OpalRuntimeRuntime: 'Null',
   /**
-   * Lookup439: pallet_ethereum::FakeTransactionFinalizer<opal_runtime::Runtime>
+   * Lookup441: pallet_ethereum::FakeTransactionFinalizer<opal_runtime::Runtime>
    **/
   PalletEthereumFakeTransactionFinalizer: 'Null'
 };
modifiedtests/src/interfaces/registry.tsdiffbeforeafterboth
--- a/tests/src/interfaces/registry.ts
+++ b/tests/src/interfaces/registry.ts
@@ -1,7 +1,7 @@
 // Auto-generated via `yarn polkadot-types-from-defs`, do not edit
 /* eslint-disable */
 
-import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportScheduleLookupError, FrameSupportScheduleMaybeHashed, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSupportWeightsWeightToFeeCoefficient, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletUnqSchedulerCall, PalletUnqSchedulerError, PalletUnqSchedulerEvent, PalletUnqSchedulerScheduledV3, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsRpcCollection, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup';
+import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportScheduleLookupError, FrameSupportScheduleMaybeHashed, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSupportWeightsWeightToFeeCoefficient, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletUniqueSchedulerCall, PalletUniqueSchedulerError, PalletUniqueSchedulerEvent, PalletUniqueSchedulerScheduledV3, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsRpcCollection, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup';
 
 declare module '@polkadot/types/types/registry' {
   export interface InterfaceTypes {
@@ -133,10 +133,10 @@
     PalletUniqueCall: PalletUniqueCall;
     PalletUniqueError: PalletUniqueError;
     PalletUniqueRawEvent: PalletUniqueRawEvent;
-    PalletUnqSchedulerCall: PalletUnqSchedulerCall;
-    PalletUnqSchedulerError: PalletUnqSchedulerError;
-    PalletUnqSchedulerEvent: PalletUnqSchedulerEvent;
-    PalletUnqSchedulerScheduledV3: PalletUnqSchedulerScheduledV3;
+    PalletUniqueSchedulerCall: PalletUniqueSchedulerCall;
+    PalletUniqueSchedulerError: PalletUniqueSchedulerError;
+    PalletUniqueSchedulerEvent: PalletUniqueSchedulerEvent;
+    PalletUniqueSchedulerScheduledV3: PalletUniqueSchedulerScheduledV3;
     PalletXcmCall: PalletXcmCall;
     PalletXcmError: PalletXcmError;
     PalletXcmEvent: PalletXcmEvent;
modifiedtests/src/interfaces/types-lookup.tsdiffbeforeafterboth
before · tests/src/interfaces/types-lookup.ts
1// Auto-generated via `yarn polkadot-types-from-defs`, do not edit2/* eslint-disable */34declare module '@polkadot/types/lookup' {5  import type { BTreeMap, BTreeSet, Bytes, Compact, Enum, Null, Option, Result, Struct, Text, U256, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec';6  import type { ITuple } from '@polkadot/types-codec/types';7  import type { AccountId32, Call, H160, H256, MultiAddress, Perbill, Permill } from '@polkadot/types/interfaces/runtime';8  import type { Event } from '@polkadot/types/interfaces/system';910  /** @name PolkadotPrimitivesV2PersistedValidationData (2) */11  export interface PolkadotPrimitivesV2PersistedValidationData extends Struct {12    readonly parentHead: Bytes;13    readonly relayParentNumber: u32;14    readonly relayParentStorageRoot: H256;15    readonly maxPovSize: u32;16  }1718  /** @name PolkadotPrimitivesV2UpgradeRestriction (9) */19  export interface PolkadotPrimitivesV2UpgradeRestriction extends Enum {20    readonly isPresent: boolean;21    readonly type: 'Present';22  }2324  /** @name SpTrieStorageProof (10) */25  export interface SpTrieStorageProof extends Struct {26    readonly trieNodes: BTreeSet<Bytes>;27  }2829  /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (13) */30  export interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct {31    readonly dmqMqcHead: H256;32    readonly relayDispatchQueueSize: ITuple<[u32, u32]>;33    readonly ingressChannels: Vec<ITuple<[u32, PolkadotPrimitivesV2AbridgedHrmpChannel]>>;34    readonly egressChannels: Vec<ITuple<[u32, PolkadotPrimitivesV2AbridgedHrmpChannel]>>;35  }3637  /** @name PolkadotPrimitivesV2AbridgedHrmpChannel (18) */38  export interface PolkadotPrimitivesV2AbridgedHrmpChannel extends Struct {39    readonly maxCapacity: u32;40    readonly maxTotalSize: u32;41    readonly maxMessageSize: u32;42    readonly msgCount: u32;43    readonly totalSize: u32;44    readonly mqcHead: Option<H256>;45  }4647  /** @name PolkadotPrimitivesV2AbridgedHostConfiguration (20) */48  export interface PolkadotPrimitivesV2AbridgedHostConfiguration extends Struct {49    readonly maxCodeSize: u32;50    readonly maxHeadDataSize: u32;51    readonly maxUpwardQueueCount: u32;52    readonly maxUpwardQueueSize: u32;53    readonly maxUpwardMessageSize: u32;54    readonly maxUpwardMessageNumPerCandidate: u32;55    readonly hrmpMaxMessageNumPerCandidate: u32;56    readonly validationUpgradeCooldown: u32;57    readonly validationUpgradeDelay: u32;58  }5960  /** @name PolkadotCorePrimitivesOutboundHrmpMessage (26) */61  export interface PolkadotCorePrimitivesOutboundHrmpMessage extends Struct {62    readonly recipient: u32;63    readonly data: Bytes;64  }6566  /** @name CumulusPalletParachainSystemCall (28) */67  export interface CumulusPalletParachainSystemCall extends Enum {68    readonly isSetValidationData: boolean;69    readonly asSetValidationData: {70      readonly data: CumulusPrimitivesParachainInherentParachainInherentData;71    } & Struct;72    readonly isSudoSendUpwardMessage: boolean;73    readonly asSudoSendUpwardMessage: {74      readonly message: Bytes;75    } & Struct;76    readonly isAuthorizeUpgrade: boolean;77    readonly asAuthorizeUpgrade: {78      readonly codeHash: H256;79    } & Struct;80    readonly isEnactAuthorizedUpgrade: boolean;81    readonly asEnactAuthorizedUpgrade: {82      readonly code: Bytes;83    } & Struct;84    readonly type: 'SetValidationData' | 'SudoSendUpwardMessage' | 'AuthorizeUpgrade' | 'EnactAuthorizedUpgrade';85  }8687  /** @name CumulusPrimitivesParachainInherentParachainInherentData (29) */88  export interface CumulusPrimitivesParachainInherentParachainInherentData extends Struct {89    readonly validationData: PolkadotPrimitivesV2PersistedValidationData;90    readonly relayChainState: SpTrieStorageProof;91    readonly downwardMessages: Vec<PolkadotCorePrimitivesInboundDownwardMessage>;92    readonly horizontalMessages: BTreeMap<u32, Vec<PolkadotCorePrimitivesInboundHrmpMessage>>;93  }9495  /** @name PolkadotCorePrimitivesInboundDownwardMessage (31) */96  export interface PolkadotCorePrimitivesInboundDownwardMessage extends Struct {97    readonly sentAt: u32;98    readonly msg: Bytes;99  }100101  /** @name PolkadotCorePrimitivesInboundHrmpMessage (34) */102  export interface PolkadotCorePrimitivesInboundHrmpMessage extends Struct {103    readonly sentAt: u32;104    readonly data: Bytes;105  }106107  /** @name CumulusPalletParachainSystemEvent (37) */108  export interface CumulusPalletParachainSystemEvent extends Enum {109    readonly isValidationFunctionStored: boolean;110    readonly isValidationFunctionApplied: boolean;111    readonly asValidationFunctionApplied: u32;112    readonly isValidationFunctionDiscarded: boolean;113    readonly isUpgradeAuthorized: boolean;114    readonly asUpgradeAuthorized: H256;115    readonly isDownwardMessagesReceived: boolean;116    readonly asDownwardMessagesReceived: u32;117    readonly isDownwardMessagesProcessed: boolean;118    readonly asDownwardMessagesProcessed: ITuple<[u64, H256]>;119    readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed';120  }121122  /** @name CumulusPalletParachainSystemError (38) */123  export interface CumulusPalletParachainSystemError extends Enum {124    readonly isOverlappingUpgrades: boolean;125    readonly isProhibitedByPolkadot: boolean;126    readonly isTooBig: boolean;127    readonly isValidationDataNotAvailable: boolean;128    readonly isHostConfigurationNotAvailable: boolean;129    readonly isNotScheduled: boolean;130    readonly isNothingAuthorized: boolean;131    readonly isUnauthorized: boolean;132    readonly type: 'OverlappingUpgrades' | 'ProhibitedByPolkadot' | 'TooBig' | 'ValidationDataNotAvailable' | 'HostConfigurationNotAvailable' | 'NotScheduled' | 'NothingAuthorized' | 'Unauthorized';133  }134135  /** @name PalletBalancesAccountData (41) */136  export interface PalletBalancesAccountData extends Struct {137    readonly free: u128;138    readonly reserved: u128;139    readonly miscFrozen: u128;140    readonly feeFrozen: u128;141  }142143  /** @name PalletBalancesBalanceLock (43) */144  export interface PalletBalancesBalanceLock extends Struct {145    readonly id: U8aFixed;146    readonly amount: u128;147    readonly reasons: PalletBalancesReasons;148  }149150  /** @name PalletBalancesReasons (45) */151  export interface PalletBalancesReasons extends Enum {152    readonly isFee: boolean;153    readonly isMisc: boolean;154    readonly isAll: boolean;155    readonly type: 'Fee' | 'Misc' | 'All';156  }157158  /** @name PalletBalancesReserveData (48) */159  export interface PalletBalancesReserveData extends Struct {160    readonly id: U8aFixed;161    readonly amount: u128;162  }163164  /** @name PalletBalancesReleases (51) */165  export interface PalletBalancesReleases extends Enum {166    readonly isV100: boolean;167    readonly isV200: boolean;168    readonly type: 'V100' | 'V200';169  }170171  /** @name PalletBalancesCall (52) */172  export interface PalletBalancesCall extends Enum {173    readonly isTransfer: boolean;174    readonly asTransfer: {175      readonly dest: MultiAddress;176      readonly value: Compact<u128>;177    } & Struct;178    readonly isSetBalance: boolean;179    readonly asSetBalance: {180      readonly who: MultiAddress;181      readonly newFree: Compact<u128>;182      readonly newReserved: Compact<u128>;183    } & Struct;184    readonly isForceTransfer: boolean;185    readonly asForceTransfer: {186      readonly source: MultiAddress;187      readonly dest: MultiAddress;188      readonly value: Compact<u128>;189    } & Struct;190    readonly isTransferKeepAlive: boolean;191    readonly asTransferKeepAlive: {192      readonly dest: MultiAddress;193      readonly value: Compact<u128>;194    } & Struct;195    readonly isTransferAll: boolean;196    readonly asTransferAll: {197      readonly dest: MultiAddress;198      readonly keepAlive: bool;199    } & Struct;200    readonly isForceUnreserve: boolean;201    readonly asForceUnreserve: {202      readonly who: MultiAddress;203      readonly amount: u128;204    } & Struct;205    readonly type: 'Transfer' | 'SetBalance' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve';206  }207208  /** @name PalletBalancesEvent (58) */209  export interface PalletBalancesEvent extends Enum {210    readonly isEndowed: boolean;211    readonly asEndowed: {212      readonly account: AccountId32;213      readonly freeBalance: u128;214    } & Struct;215    readonly isDustLost: boolean;216    readonly asDustLost: {217      readonly account: AccountId32;218      readonly amount: u128;219    } & Struct;220    readonly isTransfer: boolean;221    readonly asTransfer: {222      readonly from: AccountId32;223      readonly to: AccountId32;224      readonly amount: u128;225    } & Struct;226    readonly isBalanceSet: boolean;227    readonly asBalanceSet: {228      readonly who: AccountId32;229      readonly free: u128;230      readonly reserved: u128;231    } & Struct;232    readonly isReserved: boolean;233    readonly asReserved: {234      readonly who: AccountId32;235      readonly amount: u128;236    } & Struct;237    readonly isUnreserved: boolean;238    readonly asUnreserved: {239      readonly who: AccountId32;240      readonly amount: u128;241    } & Struct;242    readonly isReserveRepatriated: boolean;243    readonly asReserveRepatriated: {244      readonly from: AccountId32;245      readonly to: AccountId32;246      readonly amount: u128;247      readonly destinationStatus: FrameSupportTokensMiscBalanceStatus;248    } & Struct;249    readonly isDeposit: boolean;250    readonly asDeposit: {251      readonly who: AccountId32;252      readonly amount: u128;253    } & Struct;254    readonly isWithdraw: boolean;255    readonly asWithdraw: {256      readonly who: AccountId32;257      readonly amount: u128;258    } & Struct;259    readonly isSlashed: boolean;260    readonly asSlashed: {261      readonly who: AccountId32;262      readonly amount: u128;263    } & Struct;264    readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'BalanceSet' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'Deposit' | 'Withdraw' | 'Slashed';265  }266267  /** @name FrameSupportTokensMiscBalanceStatus (59) */268  export interface FrameSupportTokensMiscBalanceStatus extends Enum {269    readonly isFree: boolean;270    readonly isReserved: boolean;271    readonly type: 'Free' | 'Reserved';272  }273274  /** @name PalletBalancesError (60) */275  export interface PalletBalancesError extends Enum {276    readonly isVestingBalance: boolean;277    readonly isLiquidityRestrictions: boolean;278    readonly isInsufficientBalance: boolean;279    readonly isExistentialDeposit: boolean;280    readonly isKeepAlive: boolean;281    readonly isExistingVestingSchedule: boolean;282    readonly isDeadAccount: boolean;283    readonly isTooManyReserves: boolean;284    readonly type: 'VestingBalance' | 'LiquidityRestrictions' | 'InsufficientBalance' | 'ExistentialDeposit' | 'KeepAlive' | 'ExistingVestingSchedule' | 'DeadAccount' | 'TooManyReserves';285  }286287  /** @name PalletTimestampCall (63) */288  export interface PalletTimestampCall extends Enum {289    readonly isSet: boolean;290    readonly asSet: {291      readonly now: Compact<u64>;292    } & Struct;293    readonly type: 'Set';294  }295296  /** @name PalletTransactionPaymentReleases (66) */297  export interface PalletTransactionPaymentReleases extends Enum {298    readonly isV1Ancient: boolean;299    readonly isV2: boolean;300    readonly type: 'V1Ancient' | 'V2';301  }302303  /** @name FrameSupportWeightsWeightToFeeCoefficient (68) */304  export interface FrameSupportWeightsWeightToFeeCoefficient extends Struct {305    readonly coeffInteger: u128;306    readonly coeffFrac: Perbill;307    readonly negative: bool;308    readonly degree: u8;309  }310311  /** @name PalletTreasuryProposal (70) */312  export interface PalletTreasuryProposal extends Struct {313    readonly proposer: AccountId32;314    readonly value: u128;315    readonly beneficiary: AccountId32;316    readonly bond: u128;317  }318319  /** @name PalletTreasuryCall (73) */320  export interface PalletTreasuryCall extends Enum {321    readonly isProposeSpend: boolean;322    readonly asProposeSpend: {323      readonly value: Compact<u128>;324      readonly beneficiary: MultiAddress;325    } & Struct;326    readonly isRejectProposal: boolean;327    readonly asRejectProposal: {328      readonly proposalId: Compact<u32>;329    } & Struct;330    readonly isApproveProposal: boolean;331    readonly asApproveProposal: {332      readonly proposalId: Compact<u32>;333    } & Struct;334    readonly isRemoveApproval: boolean;335    readonly asRemoveApproval: {336      readonly proposalId: Compact<u32>;337    } & Struct;338    readonly type: 'ProposeSpend' | 'RejectProposal' | 'ApproveProposal' | 'RemoveApproval';339  }340341  /** @name PalletTreasuryEvent (75) */342  export interface PalletTreasuryEvent extends Enum {343    readonly isProposed: boolean;344    readonly asProposed: {345      readonly proposalIndex: u32;346    } & Struct;347    readonly isSpending: boolean;348    readonly asSpending: {349      readonly budgetRemaining: u128;350    } & Struct;351    readonly isAwarded: boolean;352    readonly asAwarded: {353      readonly proposalIndex: u32;354      readonly award: u128;355      readonly account: AccountId32;356    } & Struct;357    readonly isRejected: boolean;358    readonly asRejected: {359      readonly proposalIndex: u32;360      readonly slashed: u128;361    } & Struct;362    readonly isBurnt: boolean;363    readonly asBurnt: {364      readonly burntFunds: u128;365    } & Struct;366    readonly isRollover: boolean;367    readonly asRollover: {368      readonly rolloverBalance: u128;369    } & Struct;370    readonly isDeposit: boolean;371    readonly asDeposit: {372      readonly value: u128;373    } & Struct;374    readonly type: 'Proposed' | 'Spending' | 'Awarded' | 'Rejected' | 'Burnt' | 'Rollover' | 'Deposit';375  }376377  /** @name FrameSupportPalletId (78) */378  export interface FrameSupportPalletId extends U8aFixed {}379380  /** @name PalletTreasuryError (79) */381  export interface PalletTreasuryError extends Enum {382    readonly isInsufficientProposersBalance: boolean;383    readonly isInvalidIndex: boolean;384    readonly isTooManyApprovals: boolean;385    readonly isProposalNotApproved: boolean;386    readonly type: 'InsufficientProposersBalance' | 'InvalidIndex' | 'TooManyApprovals' | 'ProposalNotApproved';387  }388389  /** @name PalletSudoCall (80) */390  export interface PalletSudoCall extends Enum {391    readonly isSudo: boolean;392    readonly asSudo: {393      readonly call: Call;394    } & Struct;395    readonly isSudoUncheckedWeight: boolean;396    readonly asSudoUncheckedWeight: {397      readonly call: Call;398      readonly weight: u64;399    } & Struct;400    readonly isSetKey: boolean;401    readonly asSetKey: {402      readonly new_: MultiAddress;403    } & Struct;404    readonly isSudoAs: boolean;405    readonly asSudoAs: {406      readonly who: MultiAddress;407      readonly call: Call;408    } & Struct;409    readonly type: 'Sudo' | 'SudoUncheckedWeight' | 'SetKey' | 'SudoAs';410  }411412  /** @name FrameSystemCall (82) */413  export interface FrameSystemCall extends Enum {414    readonly isFillBlock: boolean;415    readonly asFillBlock: {416      readonly ratio: Perbill;417    } & Struct;418    readonly isRemark: boolean;419    readonly asRemark: {420      readonly remark: Bytes;421    } & Struct;422    readonly isSetHeapPages: boolean;423    readonly asSetHeapPages: {424      readonly pages: u64;425    } & Struct;426    readonly isSetCode: boolean;427    readonly asSetCode: {428      readonly code: Bytes;429    } & Struct;430    readonly isSetCodeWithoutChecks: boolean;431    readonly asSetCodeWithoutChecks: {432      readonly code: Bytes;433    } & Struct;434    readonly isSetStorage: boolean;435    readonly asSetStorage: {436      readonly items: Vec<ITuple<[Bytes, Bytes]>>;437    } & Struct;438    readonly isKillStorage: boolean;439    readonly asKillStorage: {440      readonly keys_: Vec<Bytes>;441    } & Struct;442    readonly isKillPrefix: boolean;443    readonly asKillPrefix: {444      readonly prefix: Bytes;445      readonly subkeys: u32;446    } & Struct;447    readonly isRemarkWithEvent: boolean;448    readonly asRemarkWithEvent: {449      readonly remark: Bytes;450    } & Struct;451    readonly type: 'FillBlock' | 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent';452  }453454  /** @name OrmlVestingModuleCall (85) */455  export interface OrmlVestingModuleCall extends Enum {456    readonly isClaim: boolean;457    readonly isVestedTransfer: boolean;458    readonly asVestedTransfer: {459      readonly dest: MultiAddress;460      readonly schedule: OrmlVestingVestingSchedule;461    } & Struct;462    readonly isUpdateVestingSchedules: boolean;463    readonly asUpdateVestingSchedules: {464      readonly who: MultiAddress;465      readonly vestingSchedules: Vec<OrmlVestingVestingSchedule>;466    } & Struct;467    readonly isClaimFor: boolean;468    readonly asClaimFor: {469      readonly dest: MultiAddress;470    } & Struct;471    readonly type: 'Claim' | 'VestedTransfer' | 'UpdateVestingSchedules' | 'ClaimFor';472  }473474  /** @name OrmlVestingVestingSchedule (86) */475  export interface OrmlVestingVestingSchedule extends Struct {476    readonly start: u32;477    readonly period: u32;478    readonly periodCount: u32;479    readonly perPeriod: Compact<u128>;480  }481482  /** @name CumulusPalletXcmpQueueCall (88) */483  export interface CumulusPalletXcmpQueueCall extends Enum {484    readonly isServiceOverweight: boolean;485    readonly asServiceOverweight: {486      readonly index: u64;487      readonly weightLimit: u64;488    } & Struct;489    readonly isSuspendXcmExecution: boolean;490    readonly isResumeXcmExecution: boolean;491    readonly isUpdateSuspendThreshold: boolean;492    readonly asUpdateSuspendThreshold: {493      readonly new_: u32;494    } & Struct;495    readonly isUpdateDropThreshold: boolean;496    readonly asUpdateDropThreshold: {497      readonly new_: u32;498    } & Struct;499    readonly isUpdateResumeThreshold: boolean;500    readonly asUpdateResumeThreshold: {501      readonly new_: u32;502    } & Struct;503    readonly isUpdateThresholdWeight: boolean;504    readonly asUpdateThresholdWeight: {505      readonly new_: u64;506    } & Struct;507    readonly isUpdateWeightRestrictDecay: boolean;508    readonly asUpdateWeightRestrictDecay: {509      readonly new_: u64;510    } & Struct;511    readonly isUpdateXcmpMaxIndividualWeight: boolean;512    readonly asUpdateXcmpMaxIndividualWeight: {513      readonly new_: u64;514    } & Struct;515    readonly type: 'ServiceOverweight' | 'SuspendXcmExecution' | 'ResumeXcmExecution' | 'UpdateSuspendThreshold' | 'UpdateDropThreshold' | 'UpdateResumeThreshold' | 'UpdateThresholdWeight' | 'UpdateWeightRestrictDecay' | 'UpdateXcmpMaxIndividualWeight';516  }517518  /** @name PalletXcmCall (89) */519  export interface PalletXcmCall extends Enum {520    readonly isSend: boolean;521    readonly asSend: {522      readonly dest: XcmVersionedMultiLocation;523      readonly message: XcmVersionedXcm;524    } & Struct;525    readonly isTeleportAssets: boolean;526    readonly asTeleportAssets: {527      readonly dest: XcmVersionedMultiLocation;528      readonly beneficiary: XcmVersionedMultiLocation;529      readonly assets: XcmVersionedMultiAssets;530      readonly feeAssetItem: u32;531    } & Struct;532    readonly isReserveTransferAssets: boolean;533    readonly asReserveTransferAssets: {534      readonly dest: XcmVersionedMultiLocation;535      readonly beneficiary: XcmVersionedMultiLocation;536      readonly assets: XcmVersionedMultiAssets;537      readonly feeAssetItem: u32;538    } & Struct;539    readonly isExecute: boolean;540    readonly asExecute: {541      readonly message: XcmVersionedXcm;542      readonly maxWeight: u64;543    } & Struct;544    readonly isForceXcmVersion: boolean;545    readonly asForceXcmVersion: {546      readonly location: XcmV1MultiLocation;547      readonly xcmVersion: u32;548    } & Struct;549    readonly isForceDefaultXcmVersion: boolean;550    readonly asForceDefaultXcmVersion: {551      readonly maybeXcmVersion: Option<u32>;552    } & Struct;553    readonly isForceSubscribeVersionNotify: boolean;554    readonly asForceSubscribeVersionNotify: {555      readonly location: XcmVersionedMultiLocation;556    } & Struct;557    readonly isForceUnsubscribeVersionNotify: boolean;558    readonly asForceUnsubscribeVersionNotify: {559      readonly location: XcmVersionedMultiLocation;560    } & Struct;561    readonly isLimitedReserveTransferAssets: boolean;562    readonly asLimitedReserveTransferAssets: {563      readonly dest: XcmVersionedMultiLocation;564      readonly beneficiary: XcmVersionedMultiLocation;565      readonly assets: XcmVersionedMultiAssets;566      readonly feeAssetItem: u32;567      readonly weightLimit: XcmV2WeightLimit;568    } & Struct;569    readonly isLimitedTeleportAssets: boolean;570    readonly asLimitedTeleportAssets: {571      readonly dest: XcmVersionedMultiLocation;572      readonly beneficiary: XcmVersionedMultiLocation;573      readonly assets: XcmVersionedMultiAssets;574      readonly feeAssetItem: u32;575      readonly weightLimit: XcmV2WeightLimit;576    } & Struct;577    readonly type: 'Send' | 'TeleportAssets' | 'ReserveTransferAssets' | 'Execute' | 'ForceXcmVersion' | 'ForceDefaultXcmVersion' | 'ForceSubscribeVersionNotify' | 'ForceUnsubscribeVersionNotify' | 'LimitedReserveTransferAssets' | 'LimitedTeleportAssets';578  }579580  /** @name XcmVersionedMultiLocation (90) */581  export interface XcmVersionedMultiLocation extends Enum {582    readonly isV0: boolean;583    readonly asV0: XcmV0MultiLocation;584    readonly isV1: boolean;585    readonly asV1: XcmV1MultiLocation;586    readonly type: 'V0' | 'V1';587  }588589  /** @name XcmV0MultiLocation (91) */590  export interface XcmV0MultiLocation extends Enum {591    readonly isNull: boolean;592    readonly isX1: boolean;593    readonly asX1: XcmV0Junction;594    readonly isX2: boolean;595    readonly asX2: ITuple<[XcmV0Junction, XcmV0Junction]>;596    readonly isX3: boolean;597    readonly asX3: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction]>;598    readonly isX4: boolean;599    readonly asX4: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;600    readonly isX5: boolean;601    readonly asX5: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;602    readonly isX6: boolean;603    readonly asX6: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;604    readonly isX7: boolean;605    readonly asX7: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;606    readonly isX8: boolean;607    readonly asX8: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;608    readonly type: 'Null' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8';609  }610611  /** @name XcmV0Junction (92) */612  export interface XcmV0Junction extends Enum {613    readonly isParent: boolean;614    readonly isParachain: boolean;615    readonly asParachain: Compact<u32>;616    readonly isAccountId32: boolean;617    readonly asAccountId32: {618      readonly network: XcmV0JunctionNetworkId;619      readonly id: U8aFixed;620    } & Struct;621    readonly isAccountIndex64: boolean;622    readonly asAccountIndex64: {623      readonly network: XcmV0JunctionNetworkId;624      readonly index: Compact<u64>;625    } & Struct;626    readonly isAccountKey20: boolean;627    readonly asAccountKey20: {628      readonly network: XcmV0JunctionNetworkId;629      readonly key: U8aFixed;630    } & Struct;631    readonly isPalletInstance: boolean;632    readonly asPalletInstance: u8;633    readonly isGeneralIndex: boolean;634    readonly asGeneralIndex: Compact<u128>;635    readonly isGeneralKey: boolean;636    readonly asGeneralKey: Bytes;637    readonly isOnlyChild: boolean;638    readonly isPlurality: boolean;639    readonly asPlurality: {640      readonly id: XcmV0JunctionBodyId;641      readonly part: XcmV0JunctionBodyPart;642    } & Struct;643    readonly type: 'Parent' | 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality';644  }645646  /** @name XcmV0JunctionNetworkId (93) */647  export interface XcmV0JunctionNetworkId extends Enum {648    readonly isAny: boolean;649    readonly isNamed: boolean;650    readonly asNamed: Bytes;651    readonly isPolkadot: boolean;652    readonly isKusama: boolean;653    readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama';654  }655656  /** @name XcmV0JunctionBodyId (94) */657  export interface XcmV0JunctionBodyId extends Enum {658    readonly isUnit: boolean;659    readonly isNamed: boolean;660    readonly asNamed: Bytes;661    readonly isIndex: boolean;662    readonly asIndex: Compact<u32>;663    readonly isExecutive: boolean;664    readonly isTechnical: boolean;665    readonly isLegislative: boolean;666    readonly isJudicial: boolean;667    readonly type: 'Unit' | 'Named' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial';668  }669670  /** @name XcmV0JunctionBodyPart (95) */671  export interface XcmV0JunctionBodyPart extends Enum {672    readonly isVoice: boolean;673    readonly isMembers: boolean;674    readonly asMembers: {675      readonly count: Compact<u32>;676    } & Struct;677    readonly isFraction: boolean;678    readonly asFraction: {679      readonly nom: Compact<u32>;680      readonly denom: Compact<u32>;681    } & Struct;682    readonly isAtLeastProportion: boolean;683    readonly asAtLeastProportion: {684      readonly nom: Compact<u32>;685      readonly denom: Compact<u32>;686    } & Struct;687    readonly isMoreThanProportion: boolean;688    readonly asMoreThanProportion: {689      readonly nom: Compact<u32>;690      readonly denom: Compact<u32>;691    } & Struct;692    readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion';693  }694695  /** @name XcmV1MultiLocation (96) */696  export interface XcmV1MultiLocation extends Struct {697    readonly parents: u8;698    readonly interior: XcmV1MultilocationJunctions;699  }700701  /** @name XcmV1MultilocationJunctions (97) */702  export interface XcmV1MultilocationJunctions extends Enum {703    readonly isHere: boolean;704    readonly isX1: boolean;705    readonly asX1: XcmV1Junction;706    readonly isX2: boolean;707    readonly asX2: ITuple<[XcmV1Junction, XcmV1Junction]>;708    readonly isX3: boolean;709    readonly asX3: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction]>;710    readonly isX4: boolean;711    readonly asX4: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;712    readonly isX5: boolean;713    readonly asX5: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;714    readonly isX6: boolean;715    readonly asX6: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;716    readonly isX7: boolean;717    readonly asX7: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;718    readonly isX8: boolean;719    readonly asX8: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;720    readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8';721  }722723  /** @name XcmV1Junction (98) */724  export interface XcmV1Junction extends Enum {725    readonly isParachain: boolean;726    readonly asParachain: Compact<u32>;727    readonly isAccountId32: boolean;728    readonly asAccountId32: {729      readonly network: XcmV0JunctionNetworkId;730      readonly id: U8aFixed;731    } & Struct;732    readonly isAccountIndex64: boolean;733    readonly asAccountIndex64: {734      readonly network: XcmV0JunctionNetworkId;735      readonly index: Compact<u64>;736    } & Struct;737    readonly isAccountKey20: boolean;738    readonly asAccountKey20: {739      readonly network: XcmV0JunctionNetworkId;740      readonly key: U8aFixed;741    } & Struct;742    readonly isPalletInstance: boolean;743    readonly asPalletInstance: u8;744    readonly isGeneralIndex: boolean;745    readonly asGeneralIndex: Compact<u128>;746    readonly isGeneralKey: boolean;747    readonly asGeneralKey: Bytes;748    readonly isOnlyChild: boolean;749    readonly isPlurality: boolean;750    readonly asPlurality: {751      readonly id: XcmV0JunctionBodyId;752      readonly part: XcmV0JunctionBodyPart;753    } & Struct;754    readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality';755  }756757  /** @name XcmVersionedXcm (99) */758  export interface XcmVersionedXcm extends Enum {759    readonly isV0: boolean;760    readonly asV0: XcmV0Xcm;761    readonly isV1: boolean;762    readonly asV1: XcmV1Xcm;763    readonly isV2: boolean;764    readonly asV2: XcmV2Xcm;765    readonly type: 'V0' | 'V1' | 'V2';766  }767768  /** @name XcmV0Xcm (100) */769  export interface XcmV0Xcm extends Enum {770    readonly isWithdrawAsset: boolean;771    readonly asWithdrawAsset: {772      readonly assets: Vec<XcmV0MultiAsset>;773      readonly effects: Vec<XcmV0Order>;774    } & Struct;775    readonly isReserveAssetDeposit: boolean;776    readonly asReserveAssetDeposit: {777      readonly assets: Vec<XcmV0MultiAsset>;778      readonly effects: Vec<XcmV0Order>;779    } & Struct;780    readonly isTeleportAsset: boolean;781    readonly asTeleportAsset: {782      readonly assets: Vec<XcmV0MultiAsset>;783      readonly effects: Vec<XcmV0Order>;784    } & Struct;785    readonly isQueryResponse: boolean;786    readonly asQueryResponse: {787      readonly queryId: Compact<u64>;788      readonly response: XcmV0Response;789    } & Struct;790    readonly isTransferAsset: boolean;791    readonly asTransferAsset: {792      readonly assets: Vec<XcmV0MultiAsset>;793      readonly dest: XcmV0MultiLocation;794    } & Struct;795    readonly isTransferReserveAsset: boolean;796    readonly asTransferReserveAsset: {797      readonly assets: Vec<XcmV0MultiAsset>;798      readonly dest: XcmV0MultiLocation;799      readonly effects: Vec<XcmV0Order>;800    } & Struct;801    readonly isTransact: boolean;802    readonly asTransact: {803      readonly originType: XcmV0OriginKind;804      readonly requireWeightAtMost: u64;805      readonly call: XcmDoubleEncoded;806    } & Struct;807    readonly isHrmpNewChannelOpenRequest: boolean;808    readonly asHrmpNewChannelOpenRequest: {809      readonly sender: Compact<u32>;810      readonly maxMessageSize: Compact<u32>;811      readonly maxCapacity: Compact<u32>;812    } & Struct;813    readonly isHrmpChannelAccepted: boolean;814    readonly asHrmpChannelAccepted: {815      readonly recipient: Compact<u32>;816    } & Struct;817    readonly isHrmpChannelClosing: boolean;818    readonly asHrmpChannelClosing: {819      readonly initiator: Compact<u32>;820      readonly sender: Compact<u32>;821      readonly recipient: Compact<u32>;822    } & Struct;823    readonly isRelayedFrom: boolean;824    readonly asRelayedFrom: {825      readonly who: XcmV0MultiLocation;826      readonly message: XcmV0Xcm;827    } & Struct;828    readonly type: 'WithdrawAsset' | 'ReserveAssetDeposit' | 'TeleportAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom';829  }830831  /** @name XcmV0MultiAsset (102) */832  export interface XcmV0MultiAsset extends Enum {833    readonly isNone: boolean;834    readonly isAll: boolean;835    readonly isAllFungible: boolean;836    readonly isAllNonFungible: boolean;837    readonly isAllAbstractFungible: boolean;838    readonly asAllAbstractFungible: {839      readonly id: Bytes;840    } & Struct;841    readonly isAllAbstractNonFungible: boolean;842    readonly asAllAbstractNonFungible: {843      readonly class: Bytes;844    } & Struct;845    readonly isAllConcreteFungible: boolean;846    readonly asAllConcreteFungible: {847      readonly id: XcmV0MultiLocation;848    } & Struct;849    readonly isAllConcreteNonFungible: boolean;850    readonly asAllConcreteNonFungible: {851      readonly class: XcmV0MultiLocation;852    } & Struct;853    readonly isAbstractFungible: boolean;854    readonly asAbstractFungible: {855      readonly id: Bytes;856      readonly amount: Compact<u128>;857    } & Struct;858    readonly isAbstractNonFungible: boolean;859    readonly asAbstractNonFungible: {860      readonly class: Bytes;861      readonly instance: XcmV1MultiassetAssetInstance;862    } & Struct;863    readonly isConcreteFungible: boolean;864    readonly asConcreteFungible: {865      readonly id: XcmV0MultiLocation;866      readonly amount: Compact<u128>;867    } & Struct;868    readonly isConcreteNonFungible: boolean;869    readonly asConcreteNonFungible: {870      readonly class: XcmV0MultiLocation;871      readonly instance: XcmV1MultiassetAssetInstance;872    } & Struct;873    readonly type: 'None' | 'All' | 'AllFungible' | 'AllNonFungible' | 'AllAbstractFungible' | 'AllAbstractNonFungible' | 'AllConcreteFungible' | 'AllConcreteNonFungible' | 'AbstractFungible' | 'AbstractNonFungible' | 'ConcreteFungible' | 'ConcreteNonFungible';874  }875876  /** @name XcmV1MultiassetAssetInstance (103) */877  export interface XcmV1MultiassetAssetInstance extends Enum {878    readonly isUndefined: boolean;879    readonly isIndex: boolean;880    readonly asIndex: Compact<u128>;881    readonly isArray4: boolean;882    readonly asArray4: U8aFixed;883    readonly isArray8: boolean;884    readonly asArray8: U8aFixed;885    readonly isArray16: boolean;886    readonly asArray16: U8aFixed;887    readonly isArray32: boolean;888    readonly asArray32: U8aFixed;889    readonly isBlob: boolean;890    readonly asBlob: Bytes;891    readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32' | 'Blob';892  }893894  /** @name XcmV0Order (106) */895  export interface XcmV0Order extends Enum {896    readonly isNull: boolean;897    readonly isDepositAsset: boolean;898    readonly asDepositAsset: {899      readonly assets: Vec<XcmV0MultiAsset>;900      readonly dest: XcmV0MultiLocation;901    } & Struct;902    readonly isDepositReserveAsset: boolean;903    readonly asDepositReserveAsset: {904      readonly assets: Vec<XcmV0MultiAsset>;905      readonly dest: XcmV0MultiLocation;906      readonly effects: Vec<XcmV0Order>;907    } & Struct;908    readonly isExchangeAsset: boolean;909    readonly asExchangeAsset: {910      readonly give: Vec<XcmV0MultiAsset>;911      readonly receive: Vec<XcmV0MultiAsset>;912    } & Struct;913    readonly isInitiateReserveWithdraw: boolean;914    readonly asInitiateReserveWithdraw: {915      readonly assets: Vec<XcmV0MultiAsset>;916      readonly reserve: XcmV0MultiLocation;917      readonly effects: Vec<XcmV0Order>;918    } & Struct;919    readonly isInitiateTeleport: boolean;920    readonly asInitiateTeleport: {921      readonly assets: Vec<XcmV0MultiAsset>;922      readonly dest: XcmV0MultiLocation;923      readonly effects: Vec<XcmV0Order>;924    } & Struct;925    readonly isQueryHolding: boolean;926    readonly asQueryHolding: {927      readonly queryId: Compact<u64>;928      readonly dest: XcmV0MultiLocation;929      readonly assets: Vec<XcmV0MultiAsset>;930    } & Struct;931    readonly isBuyExecution: boolean;932    readonly asBuyExecution: {933      readonly fees: XcmV0MultiAsset;934      readonly weight: u64;935      readonly debt: u64;936      readonly haltOnError: bool;937      readonly xcm: Vec<XcmV0Xcm>;938    } & Struct;939    readonly type: 'Null' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution';940  }941942  /** @name XcmV0Response (108) */943  export interface XcmV0Response extends Enum {944    readonly isAssets: boolean;945    readonly asAssets: Vec<XcmV0MultiAsset>;946    readonly type: 'Assets';947  }948949  /** @name XcmV0OriginKind (109) */950  export interface XcmV0OriginKind extends Enum {951    readonly isNative: boolean;952    readonly isSovereignAccount: boolean;953    readonly isSuperuser: boolean;954    readonly isXcm: boolean;955    readonly type: 'Native' | 'SovereignAccount' | 'Superuser' | 'Xcm';956  }957958  /** @name XcmDoubleEncoded (110) */959  export interface XcmDoubleEncoded extends Struct {960    readonly encoded: Bytes;961  }962963  /** @name XcmV1Xcm (111) */964  export interface XcmV1Xcm extends Enum {965    readonly isWithdrawAsset: boolean;966    readonly asWithdrawAsset: {967      readonly assets: XcmV1MultiassetMultiAssets;968      readonly effects: Vec<XcmV1Order>;969    } & Struct;970    readonly isReserveAssetDeposited: boolean;971    readonly asReserveAssetDeposited: {972      readonly assets: XcmV1MultiassetMultiAssets;973      readonly effects: Vec<XcmV1Order>;974    } & Struct;975    readonly isReceiveTeleportedAsset: boolean;976    readonly asReceiveTeleportedAsset: {977      readonly assets: XcmV1MultiassetMultiAssets;978      readonly effects: Vec<XcmV1Order>;979    } & Struct;980    readonly isQueryResponse: boolean;981    readonly asQueryResponse: {982      readonly queryId: Compact<u64>;983      readonly response: XcmV1Response;984    } & Struct;985    readonly isTransferAsset: boolean;986    readonly asTransferAsset: {987      readonly assets: XcmV1MultiassetMultiAssets;988      readonly beneficiary: XcmV1MultiLocation;989    } & Struct;990    readonly isTransferReserveAsset: boolean;991    readonly asTransferReserveAsset: {992      readonly assets: XcmV1MultiassetMultiAssets;993      readonly dest: XcmV1MultiLocation;994      readonly effects: Vec<XcmV1Order>;995    } & Struct;996    readonly isTransact: boolean;997    readonly asTransact: {998      readonly originType: XcmV0OriginKind;999      readonly requireWeightAtMost: u64;1000      readonly call: XcmDoubleEncoded;1001    } & Struct;1002    readonly isHrmpNewChannelOpenRequest: boolean;1003    readonly asHrmpNewChannelOpenRequest: {1004      readonly sender: Compact<u32>;1005      readonly maxMessageSize: Compact<u32>;1006      readonly maxCapacity: Compact<u32>;1007    } & Struct;1008    readonly isHrmpChannelAccepted: boolean;1009    readonly asHrmpChannelAccepted: {1010      readonly recipient: Compact<u32>;1011    } & Struct;1012    readonly isHrmpChannelClosing: boolean;1013    readonly asHrmpChannelClosing: {1014      readonly initiator: Compact<u32>;1015      readonly sender: Compact<u32>;1016      readonly recipient: Compact<u32>;1017    } & Struct;1018    readonly isRelayedFrom: boolean;1019    readonly asRelayedFrom: {1020      readonly who: XcmV1MultilocationJunctions;1021      readonly message: XcmV1Xcm;1022    } & Struct;1023    readonly isSubscribeVersion: boolean;1024    readonly asSubscribeVersion: {1025      readonly queryId: Compact<u64>;1026      readonly maxResponseWeight: Compact<u64>;1027    } & Struct;1028    readonly isUnsubscribeVersion: boolean;1029    readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom' | 'SubscribeVersion' | 'UnsubscribeVersion';1030  }10311032  /** @name XcmV1MultiassetMultiAssets (112) */1033  export interface XcmV1MultiassetMultiAssets extends Vec<XcmV1MultiAsset> {}10341035  /** @name XcmV1MultiAsset (114) */1036  export interface XcmV1MultiAsset extends Struct {1037    readonly id: XcmV1MultiassetAssetId;1038    readonly fun: XcmV1MultiassetFungibility;1039  }10401041  /** @name XcmV1MultiassetAssetId (115) */1042  export interface XcmV1MultiassetAssetId extends Enum {1043    readonly isConcrete: boolean;1044    readonly asConcrete: XcmV1MultiLocation;1045    readonly isAbstract: boolean;1046    readonly asAbstract: Bytes;1047    readonly type: 'Concrete' | 'Abstract';1048  }10491050  /** @name XcmV1MultiassetFungibility (116) */1051  export interface XcmV1MultiassetFungibility extends Enum {1052    readonly isFungible: boolean;1053    readonly asFungible: Compact<u128>;1054    readonly isNonFungible: boolean;1055    readonly asNonFungible: XcmV1MultiassetAssetInstance;1056    readonly type: 'Fungible' | 'NonFungible';1057  }10581059  /** @name XcmV1Order (118) */1060  export interface XcmV1Order extends Enum {1061    readonly isNoop: boolean;1062    readonly isDepositAsset: boolean;1063    readonly asDepositAsset: {1064      readonly assets: XcmV1MultiassetMultiAssetFilter;1065      readonly maxAssets: u32;1066      readonly beneficiary: XcmV1MultiLocation;1067    } & Struct;1068    readonly isDepositReserveAsset: boolean;1069    readonly asDepositReserveAsset: {1070      readonly assets: XcmV1MultiassetMultiAssetFilter;1071      readonly maxAssets: u32;1072      readonly dest: XcmV1MultiLocation;1073      readonly effects: Vec<XcmV1Order>;1074    } & Struct;1075    readonly isExchangeAsset: boolean;1076    readonly asExchangeAsset: {1077      readonly give: XcmV1MultiassetMultiAssetFilter;1078      readonly receive: XcmV1MultiassetMultiAssets;1079    } & Struct;1080    readonly isInitiateReserveWithdraw: boolean;1081    readonly asInitiateReserveWithdraw: {1082      readonly assets: XcmV1MultiassetMultiAssetFilter;1083      readonly reserve: XcmV1MultiLocation;1084      readonly effects: Vec<XcmV1Order>;1085    } & Struct;1086    readonly isInitiateTeleport: boolean;1087    readonly asInitiateTeleport: {1088      readonly assets: XcmV1MultiassetMultiAssetFilter;1089      readonly dest: XcmV1MultiLocation;1090      readonly effects: Vec<XcmV1Order>;1091    } & Struct;1092    readonly isQueryHolding: boolean;1093    readonly asQueryHolding: {1094      readonly queryId: Compact<u64>;1095      readonly dest: XcmV1MultiLocation;1096      readonly assets: XcmV1MultiassetMultiAssetFilter;1097    } & Struct;1098    readonly isBuyExecution: boolean;1099    readonly asBuyExecution: {1100      readonly fees: XcmV1MultiAsset;1101      readonly weight: u64;1102      readonly debt: u64;1103      readonly haltOnError: bool;1104      readonly instructions: Vec<XcmV1Xcm>;1105    } & Struct;1106    readonly type: 'Noop' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution';1107  }11081109  /** @name XcmV1MultiassetMultiAssetFilter (119) */1110  export interface XcmV1MultiassetMultiAssetFilter extends Enum {1111    readonly isDefinite: boolean;1112    readonly asDefinite: XcmV1MultiassetMultiAssets;1113    readonly isWild: boolean;1114    readonly asWild: XcmV1MultiassetWildMultiAsset;1115    readonly type: 'Definite' | 'Wild';1116  }11171118  /** @name XcmV1MultiassetWildMultiAsset (120) */1119  export interface XcmV1MultiassetWildMultiAsset extends Enum {1120    readonly isAll: boolean;1121    readonly isAllOf: boolean;1122    readonly asAllOf: {1123      readonly id: XcmV1MultiassetAssetId;1124      readonly fun: XcmV1MultiassetWildFungibility;1125    } & Struct;1126    readonly type: 'All' | 'AllOf';1127  }11281129  /** @name XcmV1MultiassetWildFungibility (121) */1130  export interface XcmV1MultiassetWildFungibility extends Enum {1131    readonly isFungible: boolean;1132    readonly isNonFungible: boolean;1133    readonly type: 'Fungible' | 'NonFungible';1134  }11351136  /** @name XcmV1Response (123) */1137  export interface XcmV1Response extends Enum {1138    readonly isAssets: boolean;1139    readonly asAssets: XcmV1MultiassetMultiAssets;1140    readonly isVersion: boolean;1141    readonly asVersion: u32;1142    readonly type: 'Assets' | 'Version';1143  }11441145  /** @name XcmV2Xcm (124) */1146  export interface XcmV2Xcm extends Vec<XcmV2Instruction> {}11471148  /** @name XcmV2Instruction (126) */1149  export interface XcmV2Instruction extends Enum {1150    readonly isWithdrawAsset: boolean;1151    readonly asWithdrawAsset: XcmV1MultiassetMultiAssets;1152    readonly isReserveAssetDeposited: boolean;1153    readonly asReserveAssetDeposited: XcmV1MultiassetMultiAssets;1154    readonly isReceiveTeleportedAsset: boolean;1155    readonly asReceiveTeleportedAsset: XcmV1MultiassetMultiAssets;1156    readonly isQueryResponse: boolean;1157    readonly asQueryResponse: {1158      readonly queryId: Compact<u64>;1159      readonly response: XcmV2Response;1160      readonly maxWeight: Compact<u64>;1161    } & Struct;1162    readonly isTransferAsset: boolean;1163    readonly asTransferAsset: {1164      readonly assets: XcmV1MultiassetMultiAssets;1165      readonly beneficiary: XcmV1MultiLocation;1166    } & Struct;1167    readonly isTransferReserveAsset: boolean;1168    readonly asTransferReserveAsset: {1169      readonly assets: XcmV1MultiassetMultiAssets;1170      readonly dest: XcmV1MultiLocation;1171      readonly xcm: XcmV2Xcm;1172    } & Struct;1173    readonly isTransact: boolean;1174    readonly asTransact: {1175      readonly originType: XcmV0OriginKind;1176      readonly requireWeightAtMost: Compact<u64>;1177      readonly call: XcmDoubleEncoded;1178    } & Struct;1179    readonly isHrmpNewChannelOpenRequest: boolean;1180    readonly asHrmpNewChannelOpenRequest: {1181      readonly sender: Compact<u32>;1182      readonly maxMessageSize: Compact<u32>;1183      readonly maxCapacity: Compact<u32>;1184    } & Struct;1185    readonly isHrmpChannelAccepted: boolean;1186    readonly asHrmpChannelAccepted: {1187      readonly recipient: Compact<u32>;1188    } & Struct;1189    readonly isHrmpChannelClosing: boolean;1190    readonly asHrmpChannelClosing: {1191      readonly initiator: Compact<u32>;1192      readonly sender: Compact<u32>;1193      readonly recipient: Compact<u32>;1194    } & Struct;1195    readonly isClearOrigin: boolean;1196    readonly isDescendOrigin: boolean;1197    readonly asDescendOrigin: XcmV1MultilocationJunctions;1198    readonly isReportError: boolean;1199    readonly asReportError: {1200      readonly queryId: Compact<u64>;1201      readonly dest: XcmV1MultiLocation;1202      readonly maxResponseWeight: Compact<u64>;1203    } & Struct;1204    readonly isDepositAsset: boolean;1205    readonly asDepositAsset: {1206      readonly assets: XcmV1MultiassetMultiAssetFilter;1207      readonly maxAssets: Compact<u32>;1208      readonly beneficiary: XcmV1MultiLocation;1209    } & Struct;1210    readonly isDepositReserveAsset: boolean;1211    readonly asDepositReserveAsset: {1212      readonly assets: XcmV1MultiassetMultiAssetFilter;1213      readonly maxAssets: Compact<u32>;1214      readonly dest: XcmV1MultiLocation;1215      readonly xcm: XcmV2Xcm;1216    } & Struct;1217    readonly isExchangeAsset: boolean;1218    readonly asExchangeAsset: {1219      readonly give: XcmV1MultiassetMultiAssetFilter;1220      readonly receive: XcmV1MultiassetMultiAssets;1221    } & Struct;1222    readonly isInitiateReserveWithdraw: boolean;1223    readonly asInitiateReserveWithdraw: {1224      readonly assets: XcmV1MultiassetMultiAssetFilter;1225      readonly reserve: XcmV1MultiLocation;1226      readonly xcm: XcmV2Xcm;1227    } & Struct;1228    readonly isInitiateTeleport: boolean;1229    readonly asInitiateTeleport: {1230      readonly assets: XcmV1MultiassetMultiAssetFilter;1231      readonly dest: XcmV1MultiLocation;1232      readonly xcm: XcmV2Xcm;1233    } & Struct;1234    readonly isQueryHolding: boolean;1235    readonly asQueryHolding: {1236      readonly queryId: Compact<u64>;1237      readonly dest: XcmV1MultiLocation;1238      readonly assets: XcmV1MultiassetMultiAssetFilter;1239      readonly maxResponseWeight: Compact<u64>;1240    } & Struct;1241    readonly isBuyExecution: boolean;1242    readonly asBuyExecution: {1243      readonly fees: XcmV1MultiAsset;1244      readonly weightLimit: XcmV2WeightLimit;1245    } & Struct;1246    readonly isRefundSurplus: boolean;1247    readonly isSetErrorHandler: boolean;1248    readonly asSetErrorHandler: XcmV2Xcm;1249    readonly isSetAppendix: boolean;1250    readonly asSetAppendix: XcmV2Xcm;1251    readonly isClearError: boolean;1252    readonly isClaimAsset: boolean;1253    readonly asClaimAsset: {1254      readonly assets: XcmV1MultiassetMultiAssets;1255      readonly ticket: XcmV1MultiLocation;1256    } & Struct;1257    readonly isTrap: boolean;1258    readonly asTrap: Compact<u64>;1259    readonly isSubscribeVersion: boolean;1260    readonly asSubscribeVersion: {1261      readonly queryId: Compact<u64>;1262      readonly maxResponseWeight: Compact<u64>;1263    } & Struct;1264    readonly isUnsubscribeVersion: boolean;1265    readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion';1266  }12671268  /** @name XcmV2Response (127) */1269  export interface XcmV2Response extends Enum {1270    readonly isNull: boolean;1271    readonly isAssets: boolean;1272    readonly asAssets: XcmV1MultiassetMultiAssets;1273    readonly isExecutionResult: boolean;1274    readonly asExecutionResult: Option<ITuple<[u32, XcmV2TraitsError]>>;1275    readonly isVersion: boolean;1276    readonly asVersion: u32;1277    readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version';1278  }12791280  /** @name XcmV2TraitsError (130) */1281  export interface XcmV2TraitsError extends Enum {1282    readonly isOverflow: boolean;1283    readonly isUnimplemented: boolean;1284    readonly isUntrustedReserveLocation: boolean;1285    readonly isUntrustedTeleportLocation: boolean;1286    readonly isMultiLocationFull: boolean;1287    readonly isMultiLocationNotInvertible: boolean;1288    readonly isBadOrigin: boolean;1289    readonly isInvalidLocation: boolean;1290    readonly isAssetNotFound: boolean;1291    readonly isFailedToTransactAsset: boolean;1292    readonly isNotWithdrawable: boolean;1293    readonly isLocationCannotHold: boolean;1294    readonly isExceedsMaxMessageSize: boolean;1295    readonly isDestinationUnsupported: boolean;1296    readonly isTransport: boolean;1297    readonly isUnroutable: boolean;1298    readonly isUnknownClaim: boolean;1299    readonly isFailedToDecode: boolean;1300    readonly isMaxWeightInvalid: boolean;1301    readonly isNotHoldingFees: boolean;1302    readonly isTooExpensive: boolean;1303    readonly isTrap: boolean;1304    readonly asTrap: u64;1305    readonly isUnhandledXcmVersion: boolean;1306    readonly isWeightLimitReached: boolean;1307    readonly asWeightLimitReached: u64;1308    readonly isBarrier: boolean;1309    readonly isWeightNotComputable: boolean;1310    readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'MultiLocationFull' | 'MultiLocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable';1311  }13121313  /** @name XcmV2WeightLimit (131) */1314  export interface XcmV2WeightLimit extends Enum {1315    readonly isUnlimited: boolean;1316    readonly isLimited: boolean;1317    readonly asLimited: Compact<u64>;1318    readonly type: 'Unlimited' | 'Limited';1319  }13201321  /** @name XcmVersionedMultiAssets (132) */1322  export interface XcmVersionedMultiAssets extends Enum {1323    readonly isV0: boolean;1324    readonly asV0: Vec<XcmV0MultiAsset>;1325    readonly isV1: boolean;1326    readonly asV1: XcmV1MultiassetMultiAssets;1327    readonly type: 'V0' | 'V1';1328  }13291330  /** @name CumulusPalletXcmCall (147) */1331  export type CumulusPalletXcmCall = Null;13321333  /** @name CumulusPalletDmpQueueCall (148) */1334  export interface CumulusPalletDmpQueueCall extends Enum {1335    readonly isServiceOverweight: boolean;1336    readonly asServiceOverweight: {1337      readonly index: u64;1338      readonly weightLimit: u64;1339    } & Struct;1340    readonly type: 'ServiceOverweight';1341  }13421343  /** @name PalletInflationCall (149) */1344  export interface PalletInflationCall extends Enum {1345    readonly isStartInflation: boolean;1346    readonly asStartInflation: {1347      readonly inflationStartRelayBlock: u32;1348    } & Struct;1349    readonly type: 'StartInflation';1350  }13511352  /** @name PalletUniqueCall (150) */1353  export interface PalletUniqueCall extends Enum {1354    readonly isCreateCollection: boolean;1355    readonly asCreateCollection: {1356      readonly collectionName: Vec<u16>;1357      readonly collectionDescription: Vec<u16>;1358      readonly tokenPrefix: Bytes;1359      readonly mode: UpDataStructsCollectionMode;1360    } & Struct;1361    readonly isCreateCollectionEx: boolean;1362    readonly asCreateCollectionEx: {1363      readonly data: UpDataStructsCreateCollectionData;1364    } & Struct;1365    readonly isDestroyCollection: boolean;1366    readonly asDestroyCollection: {1367      readonly collectionId: u32;1368    } & Struct;1369    readonly isAddToAllowList: boolean;1370    readonly asAddToAllowList: {1371      readonly collectionId: u32;1372      readonly address: PalletEvmAccountBasicCrossAccountIdRepr;1373    } & Struct;1374    readonly isRemoveFromAllowList: boolean;1375    readonly asRemoveFromAllowList: {1376      readonly collectionId: u32;1377      readonly address: PalletEvmAccountBasicCrossAccountIdRepr;1378    } & Struct;1379    readonly isChangeCollectionOwner: boolean;1380    readonly asChangeCollectionOwner: {1381      readonly collectionId: u32;1382      readonly newOwner: AccountId32;1383    } & Struct;1384    readonly isAddCollectionAdmin: boolean;1385    readonly asAddCollectionAdmin: {1386      readonly collectionId: u32;1387      readonly newAdminId: PalletEvmAccountBasicCrossAccountIdRepr;1388    } & Struct;1389    readonly isRemoveCollectionAdmin: boolean;1390    readonly asRemoveCollectionAdmin: {1391      readonly collectionId: u32;1392      readonly accountId: PalletEvmAccountBasicCrossAccountIdRepr;1393    } & Struct;1394    readonly isSetCollectionSponsor: boolean;1395    readonly asSetCollectionSponsor: {1396      readonly collectionId: u32;1397      readonly newSponsor: AccountId32;1398    } & Struct;1399    readonly isConfirmSponsorship: boolean;1400    readonly asConfirmSponsorship: {1401      readonly collectionId: u32;1402    } & Struct;1403    readonly isRemoveCollectionSponsor: boolean;1404    readonly asRemoveCollectionSponsor: {1405      readonly collectionId: u32;1406    } & Struct;1407    readonly isCreateItem: boolean;1408    readonly asCreateItem: {1409      readonly collectionId: u32;1410      readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;1411      readonly data: UpDataStructsCreateItemData;1412    } & Struct;1413    readonly isCreateMultipleItems: boolean;1414    readonly asCreateMultipleItems: {1415      readonly collectionId: u32;1416      readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;1417      readonly itemsData: Vec<UpDataStructsCreateItemData>;1418    } & Struct;1419    readonly isSetCollectionProperties: boolean;1420    readonly asSetCollectionProperties: {1421      readonly collectionId: u32;1422      readonly properties: Vec<UpDataStructsProperty>;1423    } & Struct;1424    readonly isDeleteCollectionProperties: boolean;1425    readonly asDeleteCollectionProperties: {1426      readonly collectionId: u32;1427      readonly propertyKeys: Vec<Bytes>;1428    } & Struct;1429    readonly isSetTokenProperties: boolean;1430    readonly asSetTokenProperties: {1431      readonly collectionId: u32;1432      readonly tokenId: u32;1433      readonly properties: Vec<UpDataStructsProperty>;1434    } & Struct;1435    readonly isDeleteTokenProperties: boolean;1436    readonly asDeleteTokenProperties: {1437      readonly collectionId: u32;1438      readonly tokenId: u32;1439      readonly propertyKeys: Vec<Bytes>;1440    } & Struct;1441    readonly isSetPropertyPermissions: boolean;1442    readonly asSetPropertyPermissions: {1443      readonly collectionId: u32;1444      readonly propertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;1445    } & Struct;1446    readonly isCreateMultipleItemsEx: boolean;1447    readonly asCreateMultipleItemsEx: {1448      readonly collectionId: u32;1449      readonly data: UpDataStructsCreateItemExData;1450    } & Struct;1451    readonly isSetTransfersEnabledFlag: boolean;1452    readonly asSetTransfersEnabledFlag: {1453      readonly collectionId: u32;1454      readonly value: bool;1455    } & Struct;1456    readonly isBurnItem: boolean;1457    readonly asBurnItem: {1458      readonly collectionId: u32;1459      readonly itemId: u32;1460      readonly value: u128;1461    } & Struct;1462    readonly isBurnFrom: boolean;1463    readonly asBurnFrom: {1464      readonly collectionId: u32;1465      readonly from: PalletEvmAccountBasicCrossAccountIdRepr;1466      readonly itemId: u32;1467      readonly value: u128;1468    } & Struct;1469    readonly isTransfer: boolean;1470    readonly asTransfer: {1471      readonly recipient: PalletEvmAccountBasicCrossAccountIdRepr;1472      readonly collectionId: u32;1473      readonly itemId: u32;1474      readonly value: u128;1475    } & Struct;1476    readonly isApprove: boolean;1477    readonly asApprove: {1478      readonly spender: PalletEvmAccountBasicCrossAccountIdRepr;1479      readonly collectionId: u32;1480      readonly itemId: u32;1481      readonly amount: u128;1482    } & Struct;1483    readonly isTransferFrom: boolean;1484    readonly asTransferFrom: {1485      readonly from: PalletEvmAccountBasicCrossAccountIdRepr;1486      readonly recipient: PalletEvmAccountBasicCrossAccountIdRepr;1487      readonly collectionId: u32;1488      readonly itemId: u32;1489      readonly value: u128;1490    } & Struct;1491    readonly isSetCollectionLimits: boolean;1492    readonly asSetCollectionLimits: {1493      readonly collectionId: u32;1494      readonly newLimit: UpDataStructsCollectionLimits;1495    } & Struct;1496    readonly isSetCollectionPermissions: boolean;1497    readonly asSetCollectionPermissions: {1498      readonly collectionId: u32;1499      readonly newLimit: UpDataStructsCollectionPermissions;1500    } & Struct;1501    readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions';1502  }15031504  /** @name UpDataStructsCollectionMode (156) */1505  export interface UpDataStructsCollectionMode extends Enum {1506    readonly isNft: boolean;1507    readonly isFungible: boolean;1508    readonly asFungible: u8;1509    readonly isReFungible: boolean;1510    readonly type: 'Nft' | 'Fungible' | 'ReFungible';1511  }15121513  /** @name UpDataStructsCreateCollectionData (157) */1514  export interface UpDataStructsCreateCollectionData extends Struct {1515    readonly mode: UpDataStructsCollectionMode;1516    readonly access: Option<UpDataStructsAccessMode>;1517    readonly name: Vec<u16>;1518    readonly description: Vec<u16>;1519    readonly tokenPrefix: Bytes;1520    readonly pendingSponsor: Option<AccountId32>;1521    readonly limits: Option<UpDataStructsCollectionLimits>;1522    readonly permissions: Option<UpDataStructsCollectionPermissions>;1523    readonly tokenPropertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;1524    readonly properties: Vec<UpDataStructsProperty>;1525  }15261527  /** @name UpDataStructsAccessMode (159) */1528  export interface UpDataStructsAccessMode extends Enum {1529    readonly isNormal: boolean;1530    readonly isAllowList: boolean;1531    readonly type: 'Normal' | 'AllowList';1532  }15331534  /** @name UpDataStructsCollectionLimits (162) */1535  export interface UpDataStructsCollectionLimits extends Struct {1536    readonly accountTokenOwnershipLimit: Option<u32>;1537    readonly sponsoredDataSize: Option<u32>;1538    readonly sponsoredDataRateLimit: Option<UpDataStructsSponsoringRateLimit>;1539    readonly tokenLimit: Option<u32>;1540    readonly sponsorTransferTimeout: Option<u32>;1541    readonly sponsorApproveTimeout: Option<u32>;1542    readonly ownerCanTransfer: Option<bool>;1543    readonly ownerCanDestroy: Option<bool>;1544    readonly transfersEnabled: Option<bool>;1545  }15461547  /** @name UpDataStructsSponsoringRateLimit (164) */1548  export interface UpDataStructsSponsoringRateLimit extends Enum {1549    readonly isSponsoringDisabled: boolean;1550    readonly isBlocks: boolean;1551    readonly asBlocks: u32;1552    readonly type: 'SponsoringDisabled' | 'Blocks';1553  }15541555  /** @name UpDataStructsCollectionPermissions (167) */1556  export interface UpDataStructsCollectionPermissions extends Struct {1557    readonly access: Option<UpDataStructsAccessMode>;1558    readonly mintMode: Option<bool>;1559    readonly nesting: Option<UpDataStructsNestingPermissions>;1560  }15611562  /** @name UpDataStructsNestingPermissions (169) */1563  export interface UpDataStructsNestingPermissions extends Struct {1564    readonly tokenOwner: bool;1565    readonly admin: bool;1566    readonly restricted: Option<UpDataStructsOwnerRestrictedSet>;1567    readonly permissive: bool;1568  }15691570  /** @name UpDataStructsOwnerRestrictedSet (171) */1571  export interface UpDataStructsOwnerRestrictedSet extends BTreeSet<u32> {}15721573  /** @name UpDataStructsPropertyKeyPermission (177) */1574  export interface UpDataStructsPropertyKeyPermission extends Struct {1575    readonly key: Bytes;1576    readonly permission: UpDataStructsPropertyPermission;1577  }15781579  /** @name UpDataStructsPropertyPermission (179) */1580  export interface UpDataStructsPropertyPermission extends Struct {1581    readonly mutable: bool;1582    readonly collectionAdmin: bool;1583    readonly tokenOwner: bool;1584  }15851586  /** @name UpDataStructsProperty (182) */1587  export interface UpDataStructsProperty extends Struct {1588    readonly key: Bytes;1589    readonly value: Bytes;1590  }15911592  /** @name PalletEvmAccountBasicCrossAccountIdRepr (185) */1593  export interface PalletEvmAccountBasicCrossAccountIdRepr extends Enum {1594    readonly isSubstrate: boolean;1595    readonly asSubstrate: AccountId32;1596    readonly isEthereum: boolean;1597    readonly asEthereum: H160;1598    readonly type: 'Substrate' | 'Ethereum';1599  }16001601  /** @name UpDataStructsCreateItemData (187) */1602  export interface UpDataStructsCreateItemData extends Enum {1603    readonly isNft: boolean;1604    readonly asNft: UpDataStructsCreateNftData;1605    readonly isFungible: boolean;1606    readonly asFungible: UpDataStructsCreateFungibleData;1607    readonly isReFungible: boolean;1608    readonly asReFungible: UpDataStructsCreateReFungibleData;1609    readonly type: 'Nft' | 'Fungible' | 'ReFungible';1610  }16111612  /** @name UpDataStructsCreateNftData (188) */1613  export interface UpDataStructsCreateNftData extends Struct {1614    readonly properties: Vec<UpDataStructsProperty>;1615  }16161617  /** @name UpDataStructsCreateFungibleData (189) */1618  export interface UpDataStructsCreateFungibleData extends Struct {1619    readonly value: u128;1620  }16211622  /** @name UpDataStructsCreateReFungibleData (190) */1623  export interface UpDataStructsCreateReFungibleData extends Struct {1624    readonly constData: Bytes;1625    readonly pieces: u128;1626  }16271628  /** @name UpDataStructsCreateItemExData (195) */1629  export interface UpDataStructsCreateItemExData extends Enum {1630    readonly isNft: boolean;1631    readonly asNft: Vec<UpDataStructsCreateNftExData>;1632    readonly isFungible: boolean;1633    readonly asFungible: BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>;1634    readonly isRefungibleMultipleItems: boolean;1635    readonly asRefungibleMultipleItems: Vec<UpDataStructsCreateRefungibleExData>;1636    readonly isRefungibleMultipleOwners: boolean;1637    readonly asRefungibleMultipleOwners: UpDataStructsCreateRefungibleExData;1638    readonly type: 'Nft' | 'Fungible' | 'RefungibleMultipleItems' | 'RefungibleMultipleOwners';1639  }16401641  /** @name UpDataStructsCreateNftExData (197) */1642  export interface UpDataStructsCreateNftExData extends Struct {1643    readonly properties: Vec<UpDataStructsProperty>;1644    readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;1645  }16461647  /** @name UpDataStructsCreateRefungibleExData (204) */1648  export interface UpDataStructsCreateRefungibleExData extends Struct {1649    readonly constData: Bytes;1650    readonly users: BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>;1651  }16521653  /** @name PalletUnqSchedulerCall (206) */1654  export interface PalletUnqSchedulerCall extends Enum {1655    readonly isScheduleNamed: boolean;1656    readonly asScheduleNamed: {1657      readonly id: U8aFixed;1658      readonly when: u32;1659      readonly maybePeriodic: Option<ITuple<[u32, u32]>>;1660      readonly priority: u8;1661      readonly call: FrameSupportScheduleMaybeHashed;1662    } & Struct;1663    readonly isCancelNamed: boolean;1664    readonly asCancelNamed: {1665      readonly id: U8aFixed;1666    } & Struct;1667    readonly isScheduleNamedAfter: boolean;1668    readonly asScheduleNamedAfter: {1669      readonly id: U8aFixed;1670      readonly after: u32;1671      readonly maybePeriodic: Option<ITuple<[u32, u32]>>;1672      readonly priority: u8;1673      readonly call: FrameSupportScheduleMaybeHashed;1674    } & Struct;1675    readonly type: 'ScheduleNamed' | 'CancelNamed' | 'ScheduleNamedAfter';1676  }16771678  /** @name FrameSupportScheduleMaybeHashed (208) */1679  export interface FrameSupportScheduleMaybeHashed extends Enum {1680    readonly isValue: boolean;1681    readonly asValue: Call;1682    readonly isHash: boolean;1683    readonly asHash: H256;1684    readonly type: 'Value' | 'Hash';1685  }16861687  /** @name PalletTemplateTransactionPaymentCall (209) */1688  export type PalletTemplateTransactionPaymentCall = Null;16891690  /** @name PalletStructureCall (210) */1691  export type PalletStructureCall = Null;16921693  /** @name PalletRmrkCoreCall (211) */1694  export interface PalletRmrkCoreCall extends Enum {1695    readonly isCreateCollection: boolean;1696    readonly asCreateCollection: {1697      readonly metadata: Bytes;1698      readonly max: Option<u32>;1699      readonly symbol: Bytes;1700    } & Struct;1701    readonly isDestroyCollection: boolean;1702    readonly asDestroyCollection: {1703      readonly collectionId: u32;1704    } & Struct;1705    readonly isChangeCollectionIssuer: boolean;1706    readonly asChangeCollectionIssuer: {1707      readonly collectionId: u32;1708      readonly newIssuer: MultiAddress;1709    } & Struct;1710    readonly isLockCollection: boolean;1711    readonly asLockCollection: {1712      readonly collectionId: u32;1713    } & Struct;1714    readonly isMintNft: boolean;1715    readonly asMintNft: {1716      readonly owner: AccountId32;1717      readonly collectionId: u32;1718      readonly recipient: Option<AccountId32>;1719      readonly royaltyAmount: Option<Permill>;1720      readonly metadata: Bytes;1721      readonly transferable: bool;1722    } & Struct;1723    readonly isBurnNft: boolean;1724    readonly asBurnNft: {1725      readonly collectionId: u32;1726      readonly nftId: u32;1727    } & Struct;1728    readonly isSend: boolean;1729    readonly asSend: {1730      readonly rmrkCollectionId: u32;1731      readonly rmrkNftId: u32;1732      readonly newOwner: RmrkTraitsNftAccountIdOrCollectionNftTuple;1733    } & Struct;1734    readonly isAcceptNft: boolean;1735    readonly asAcceptNft: {1736      readonly rmrkCollectionId: u32;1737      readonly rmrkNftId: u32;1738      readonly newOwner: RmrkTraitsNftAccountIdOrCollectionNftTuple;1739    } & Struct;1740    readonly isRejectNft: boolean;1741    readonly asRejectNft: {1742      readonly rmrkCollectionId: u32;1743      readonly rmrkNftId: u32;1744    } & Struct;1745    readonly isAcceptResource: boolean;1746    readonly asAcceptResource: {1747      readonly rmrkCollectionId: u32;1748      readonly rmrkNftId: u32;1749      readonly rmrkResourceId: u32;1750    } & Struct;1751    readonly isAcceptResourceRemoval: boolean;1752    readonly asAcceptResourceRemoval: {1753      readonly rmrkCollectionId: u32;1754      readonly rmrkNftId: u32;1755      readonly rmrkResourceId: u32;1756    } & Struct;1757    readonly isSetProperty: boolean;1758    readonly asSetProperty: {1759      readonly rmrkCollectionId: Compact<u32>;1760      readonly maybeNftId: Option<u32>;1761      readonly key: Bytes;1762      readonly value: Bytes;1763    } & Struct;1764    readonly isSetPriority: boolean;1765    readonly asSetPriority: {1766      readonly rmrkCollectionId: u32;1767      readonly rmrkNftId: u32;1768      readonly priorities: Vec<u32>;1769    } & Struct;1770    readonly isAddBasicResource: boolean;1771    readonly asAddBasicResource: {1772      readonly rmrkCollectionId: u32;1773      readonly nftId: u32;1774      readonly resource: RmrkTraitsResourceBasicResource;1775    } & Struct;1776    readonly isAddComposableResource: boolean;1777    readonly asAddComposableResource: {1778      readonly rmrkCollectionId: u32;1779      readonly nftId: u32;1780      readonly resourceId: Bytes;1781      readonly resource: RmrkTraitsResourceComposableResource;1782    } & Struct;1783    readonly isAddSlotResource: boolean;1784    readonly asAddSlotResource: {1785      readonly rmrkCollectionId: u32;1786      readonly nftId: u32;1787      readonly resource: RmrkTraitsResourceSlotResource;1788    } & Struct;1789    readonly isRemoveResource: boolean;1790    readonly asRemoveResource: {1791      readonly rmrkCollectionId: u32;1792      readonly nftId: u32;1793      readonly resourceId: u32;1794    } & Struct;1795    readonly type: 'CreateCollection' | 'DestroyCollection' | 'ChangeCollectionIssuer' | 'LockCollection' | 'MintNft' | 'BurnNft' | 'Send' | 'AcceptNft' | 'RejectNft' | 'AcceptResource' | 'AcceptResourceRemoval' | 'SetProperty' | 'SetPriority' | 'AddBasicResource' | 'AddComposableResource' | 'AddSlotResource' | 'RemoveResource';1796  }17971798  /** @name RmrkTraitsNftAccountIdOrCollectionNftTuple (215) */1799  export interface RmrkTraitsNftAccountIdOrCollectionNftTuple extends Enum {1800    readonly isAccountId: boolean;1801    readonly asAccountId: AccountId32;1802    readonly isCollectionAndNftTuple: boolean;1803    readonly asCollectionAndNftTuple: ITuple<[u32, u32]>;1804    readonly type: 'AccountId' | 'CollectionAndNftTuple';1805  }18061807  /** @name RmrkTraitsResourceBasicResource (219) */1808  export interface RmrkTraitsResourceBasicResource extends Struct {1809    readonly src: Option<Bytes>;1810    readonly metadata: Option<Bytes>;1811    readonly license: Option<Bytes>;1812    readonly thumb: Option<Bytes>;1813  }18141815  /** @name RmrkTraitsResourceComposableResource (222) */1816  export interface RmrkTraitsResourceComposableResource extends Struct {1817    readonly parts: Vec<u32>;1818    readonly base: u32;1819    readonly src: Option<Bytes>;1820    readonly metadata: Option<Bytes>;1821    readonly license: Option<Bytes>;1822    readonly thumb: Option<Bytes>;1823  }18241825  /** @name RmrkTraitsResourceSlotResource (224) */1826  export interface RmrkTraitsResourceSlotResource extends Struct {1827    readonly base: u32;1828    readonly src: Option<Bytes>;1829    readonly metadata: Option<Bytes>;1830    readonly slot: u32;1831    readonly license: Option<Bytes>;1832    readonly thumb: Option<Bytes>;1833  }18341835  /** @name PalletRmrkEquipCall (225) */1836  export interface PalletRmrkEquipCall extends Enum {1837    readonly isCreateBase: boolean;1838    readonly asCreateBase: {1839      readonly baseType: Bytes;1840      readonly symbol: Bytes;1841      readonly parts: Vec<RmrkTraitsPartPartType>;1842    } & Struct;1843    readonly isThemeAdd: boolean;1844    readonly asThemeAdd: {1845      readonly baseId: u32;1846      readonly theme: RmrkTraitsTheme;1847    } & Struct;1848    readonly type: 'CreateBase' | 'ThemeAdd';1849  }18501851  /** @name RmrkTraitsPartPartType (227) */1852  export interface RmrkTraitsPartPartType extends Enum {1853    readonly isFixedPart: boolean;1854    readonly asFixedPart: RmrkTraitsPartFixedPart;1855    readonly isSlotPart: boolean;1856    readonly asSlotPart: RmrkTraitsPartSlotPart;1857    readonly type: 'FixedPart' | 'SlotPart';1858  }18591860  /** @name RmrkTraitsPartFixedPart (229) */1861  export interface RmrkTraitsPartFixedPart extends Struct {1862    readonly id: u32;1863    readonly z: u32;1864    readonly src: Bytes;1865  }18661867  /** @name RmrkTraitsPartSlotPart (230) */1868  export interface RmrkTraitsPartSlotPart extends Struct {1869    readonly id: u32;1870    readonly equippable: RmrkTraitsPartEquippableList;1871    readonly src: Bytes;1872    readonly z: u32;1873  }18741875  /** @name RmrkTraitsPartEquippableList (231) */1876  export interface RmrkTraitsPartEquippableList extends Enum {1877    readonly isAll: boolean;1878    readonly isEmpty: boolean;1879    readonly isCustom: boolean;1880    readonly asCustom: Vec<u32>;1881    readonly type: 'All' | 'Empty' | 'Custom';1882  }18831884  /** @name RmrkTraitsTheme (233) */1885  export interface RmrkTraitsTheme extends Struct {1886    readonly name: Bytes;1887    readonly properties: Vec<RmrkTraitsThemeThemeProperty>;1888    readonly inherit: bool;1889  }18901891  /** @name RmrkTraitsThemeThemeProperty (235) */1892  export interface RmrkTraitsThemeThemeProperty extends Struct {1893    readonly key: Bytes;1894    readonly value: Bytes;1895  }18961897  /** @name PalletEvmCall (236) */1898  export interface PalletEvmCall extends Enum {1899    readonly isWithdraw: boolean;1900    readonly asWithdraw: {1901      readonly address: H160;1902      readonly value: u128;1903    } & Struct;1904    readonly isCall: boolean;1905    readonly asCall: {1906      readonly source: H160;1907      readonly target: H160;1908      readonly input: Bytes;1909      readonly value: U256;1910      readonly gasLimit: u64;1911      readonly maxFeePerGas: U256;1912      readonly maxPriorityFeePerGas: Option<U256>;1913      readonly nonce: Option<U256>;1914      readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;1915    } & Struct;1916    readonly isCreate: boolean;1917    readonly asCreate: {1918      readonly source: H160;1919      readonly init: Bytes;1920      readonly value: U256;1921      readonly gasLimit: u64;1922      readonly maxFeePerGas: U256;1923      readonly maxPriorityFeePerGas: Option<U256>;1924      readonly nonce: Option<U256>;1925      readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;1926    } & Struct;1927    readonly isCreate2: boolean;1928    readonly asCreate2: {1929      readonly source: H160;1930      readonly init: Bytes;1931      readonly salt: H256;1932      readonly value: U256;1933      readonly gasLimit: u64;1934      readonly maxFeePerGas: U256;1935      readonly maxPriorityFeePerGas: Option<U256>;1936      readonly nonce: Option<U256>;1937      readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;1938    } & Struct;1939    readonly type: 'Withdraw' | 'Call' | 'Create' | 'Create2';1940  }19411942  /** @name PalletEthereumCall (242) */1943  export interface PalletEthereumCall extends Enum {1944    readonly isTransact: boolean;1945    readonly asTransact: {1946      readonly transaction: EthereumTransactionTransactionV2;1947    } & Struct;1948    readonly type: 'Transact';1949  }19501951  /** @name EthereumTransactionTransactionV2 (243) */1952  export interface EthereumTransactionTransactionV2 extends Enum {1953    readonly isLegacy: boolean;1954    readonly asLegacy: EthereumTransactionLegacyTransaction;1955    readonly isEip2930: boolean;1956    readonly asEip2930: EthereumTransactionEip2930Transaction;1957    readonly isEip1559: boolean;1958    readonly asEip1559: EthereumTransactionEip1559Transaction;1959    readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';1960  }19611962  /** @name EthereumTransactionLegacyTransaction (244) */1963  export interface EthereumTransactionLegacyTransaction extends Struct {1964    readonly nonce: U256;1965    readonly gasPrice: U256;1966    readonly gasLimit: U256;1967    readonly action: EthereumTransactionTransactionAction;1968    readonly value: U256;1969    readonly input: Bytes;1970    readonly signature: EthereumTransactionTransactionSignature;1971  }19721973  /** @name EthereumTransactionTransactionAction (245) */1974  export interface EthereumTransactionTransactionAction extends Enum {1975    readonly isCall: boolean;1976    readonly asCall: H160;1977    readonly isCreate: boolean;1978    readonly type: 'Call' | 'Create';1979  }19801981  /** @name EthereumTransactionTransactionSignature (246) */1982  export interface EthereumTransactionTransactionSignature extends Struct {1983    readonly v: u64;1984    readonly r: H256;1985    readonly s: H256;1986  }19871988  /** @name EthereumTransactionEip2930Transaction (248) */1989  export interface EthereumTransactionEip2930Transaction extends Struct {1990    readonly chainId: u64;1991    readonly nonce: U256;1992    readonly gasPrice: U256;1993    readonly gasLimit: U256;1994    readonly action: EthereumTransactionTransactionAction;1995    readonly value: U256;1996    readonly input: Bytes;1997    readonly accessList: Vec<EthereumTransactionAccessListItem>;1998    readonly oddYParity: bool;1999    readonly r: H256;2000    readonly s: H256;2001  }20022003  /** @name EthereumTransactionAccessListItem (250) */2004  export interface EthereumTransactionAccessListItem extends Struct {2005    readonly address: H160;2006    readonly storageKeys: Vec<H256>;2007  }20082009  /** @name EthereumTransactionEip1559Transaction (251) */2010  export interface EthereumTransactionEip1559Transaction extends Struct {2011    readonly chainId: u64;2012    readonly nonce: U256;2013    readonly maxPriorityFeePerGas: U256;2014    readonly maxFeePerGas: U256;2015    readonly gasLimit: U256;2016    readonly action: EthereumTransactionTransactionAction;2017    readonly value: U256;2018    readonly input: Bytes;2019    readonly accessList: Vec<EthereumTransactionAccessListItem>;2020    readonly oddYParity: bool;2021    readonly r: H256;2022    readonly s: H256;2023  }20242025  /** @name PalletEvmMigrationCall (252) */2026  export interface PalletEvmMigrationCall extends Enum {2027    readonly isBegin: boolean;2028    readonly asBegin: {2029      readonly address: H160;2030    } & Struct;2031    readonly isSetData: boolean;2032    readonly asSetData: {2033      readonly address: H160;2034      readonly data: Vec<ITuple<[H256, H256]>>;2035    } & Struct;2036    readonly isFinish: boolean;2037    readonly asFinish: {2038      readonly address: H160;2039      readonly code: Bytes;2040    } & Struct;2041    readonly type: 'Begin' | 'SetData' | 'Finish';2042  }20432044  /** @name PalletSudoEvent (255) */2045  export interface PalletSudoEvent extends Enum {2046    readonly isSudid: boolean;2047    readonly asSudid: {2048      readonly sudoResult: Result<Null, SpRuntimeDispatchError>;2049    } & Struct;2050    readonly isKeyChanged: boolean;2051    readonly asKeyChanged: {2052      readonly oldSudoer: Option<AccountId32>;2053    } & Struct;2054    readonly isSudoAsDone: boolean;2055    readonly asSudoAsDone: {2056      readonly sudoResult: Result<Null, SpRuntimeDispatchError>;2057    } & Struct;2058    readonly type: 'Sudid' | 'KeyChanged' | 'SudoAsDone';2059  }20602061  /** @name SpRuntimeDispatchError (257) */2062  export interface SpRuntimeDispatchError extends Enum {2063    readonly isOther: boolean;2064    readonly isCannotLookup: boolean;2065    readonly isBadOrigin: boolean;2066    readonly isModule: boolean;2067    readonly asModule: SpRuntimeModuleError;2068    readonly isConsumerRemaining: boolean;2069    readonly isNoProviders: boolean;2070    readonly isTooManyConsumers: boolean;2071    readonly isToken: boolean;2072    readonly asToken: SpRuntimeTokenError;2073    readonly isArithmetic: boolean;2074    readonly asArithmetic: SpRuntimeArithmeticError;2075    readonly isTransactional: boolean;2076    readonly asTransactional: SpRuntimeTransactionalError;2077    readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional';2078  }20792080  /** @name SpRuntimeModuleError (258) */2081  export interface SpRuntimeModuleError extends Struct {2082    readonly index: u8;2083    readonly error: U8aFixed;2084  }20852086  /** @name SpRuntimeTokenError (259) */2087  export interface SpRuntimeTokenError extends Enum {2088    readonly isNoFunds: boolean;2089    readonly isWouldDie: boolean;2090    readonly isBelowMinimum: boolean;2091    readonly isCannotCreate: boolean;2092    readonly isUnknownAsset: boolean;2093    readonly isFrozen: boolean;2094    readonly isUnsupported: boolean;2095    readonly type: 'NoFunds' | 'WouldDie' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported';2096  }20972098  /** @name SpRuntimeArithmeticError (260) */2099  export interface SpRuntimeArithmeticError extends Enum {2100    readonly isUnderflow: boolean;2101    readonly isOverflow: boolean;2102    readonly isDivisionByZero: boolean;2103    readonly type: 'Underflow' | 'Overflow' | 'DivisionByZero';2104  }21052106  /** @name SpRuntimeTransactionalError (261) */2107  export interface SpRuntimeTransactionalError extends Enum {2108    readonly isLimitReached: boolean;2109    readonly isNoLayer: boolean;2110    readonly type: 'LimitReached' | 'NoLayer';2111  }21122113  /** @name PalletSudoError (262) */2114  export interface PalletSudoError extends Enum {2115    readonly isRequireSudo: boolean;2116    readonly type: 'RequireSudo';2117  }21182119  /** @name FrameSystemAccountInfo (263) */2120  export interface FrameSystemAccountInfo extends Struct {2121    readonly nonce: u32;2122    readonly consumers: u32;2123    readonly providers: u32;2124    readonly sufficients: u32;2125    readonly data: PalletBalancesAccountData;2126  }21272128  /** @name FrameSupportWeightsPerDispatchClassU64 (264) */2129  export interface FrameSupportWeightsPerDispatchClassU64 extends Struct {2130    readonly normal: u64;2131    readonly operational: u64;2132    readonly mandatory: u64;2133  }21342135  /** @name SpRuntimeDigest (265) */2136  export interface SpRuntimeDigest extends Struct {2137    readonly logs: Vec<SpRuntimeDigestDigestItem>;2138  }21392140  /** @name SpRuntimeDigestDigestItem (267) */2141  export interface SpRuntimeDigestDigestItem extends Enum {2142    readonly isOther: boolean;2143    readonly asOther: Bytes;2144    readonly isConsensus: boolean;2145    readonly asConsensus: ITuple<[U8aFixed, Bytes]>;2146    readonly isSeal: boolean;2147    readonly asSeal: ITuple<[U8aFixed, Bytes]>;2148    readonly isPreRuntime: boolean;2149    readonly asPreRuntime: ITuple<[U8aFixed, Bytes]>;2150    readonly isRuntimeEnvironmentUpdated: boolean;2151    readonly type: 'Other' | 'Consensus' | 'Seal' | 'PreRuntime' | 'RuntimeEnvironmentUpdated';2152  }21532154  /** @name FrameSystemEventRecord (269) */2155  export interface FrameSystemEventRecord extends Struct {2156    readonly phase: FrameSystemPhase;2157    readonly event: Event;2158    readonly topics: Vec<H256>;2159  }21602161  /** @name FrameSystemEvent (271) */2162  export interface FrameSystemEvent extends Enum {2163    readonly isExtrinsicSuccess: boolean;2164    readonly asExtrinsicSuccess: {2165      readonly dispatchInfo: FrameSupportWeightsDispatchInfo;2166    } & Struct;2167    readonly isExtrinsicFailed: boolean;2168    readonly asExtrinsicFailed: {2169      readonly dispatchError: SpRuntimeDispatchError;2170      readonly dispatchInfo: FrameSupportWeightsDispatchInfo;2171    } & Struct;2172    readonly isCodeUpdated: boolean;2173    readonly isNewAccount: boolean;2174    readonly asNewAccount: {2175      readonly account: AccountId32;2176    } & Struct;2177    readonly isKilledAccount: boolean;2178    readonly asKilledAccount: {2179      readonly account: AccountId32;2180    } & Struct;2181    readonly isRemarked: boolean;2182    readonly asRemarked: {2183      readonly sender: AccountId32;2184      readonly hash_: H256;2185    } & Struct;2186    readonly type: 'ExtrinsicSuccess' | 'ExtrinsicFailed' | 'CodeUpdated' | 'NewAccount' | 'KilledAccount' | 'Remarked';2187  }21882189  /** @name FrameSupportWeightsDispatchInfo (272) */2190  export interface FrameSupportWeightsDispatchInfo extends Struct {2191    readonly weight: u64;2192    readonly class: FrameSupportWeightsDispatchClass;2193    readonly paysFee: FrameSupportWeightsPays;2194  }21952196  /** @name FrameSupportWeightsDispatchClass (273) */2197  export interface FrameSupportWeightsDispatchClass extends Enum {2198    readonly isNormal: boolean;2199    readonly isOperational: boolean;2200    readonly isMandatory: boolean;2201    readonly type: 'Normal' | 'Operational' | 'Mandatory';2202  }22032204  /** @name FrameSupportWeightsPays (274) */2205  export interface FrameSupportWeightsPays extends Enum {2206    readonly isYes: boolean;2207    readonly isNo: boolean;2208    readonly type: 'Yes' | 'No';2209  }22102211  /** @name OrmlVestingModuleEvent (275) */2212  export interface OrmlVestingModuleEvent extends Enum {2213    readonly isVestingScheduleAdded: boolean;2214    readonly asVestingScheduleAdded: {2215      readonly from: AccountId32;2216      readonly to: AccountId32;2217      readonly vestingSchedule: OrmlVestingVestingSchedule;2218    } & Struct;2219    readonly isClaimed: boolean;2220    readonly asClaimed: {2221      readonly who: AccountId32;2222      readonly amount: u128;2223    } & Struct;2224    readonly isVestingSchedulesUpdated: boolean;2225    readonly asVestingSchedulesUpdated: {2226      readonly who: AccountId32;2227    } & Struct;2228    readonly type: 'VestingScheduleAdded' | 'Claimed' | 'VestingSchedulesUpdated';2229  }22302231  /** @name CumulusPalletXcmpQueueEvent (276) */2232  export interface CumulusPalletXcmpQueueEvent extends Enum {2233    readonly isSuccess: boolean;2234    readonly asSuccess: Option<H256>;2235    readonly isFail: boolean;2236    readonly asFail: ITuple<[Option<H256>, XcmV2TraitsError]>;2237    readonly isBadVersion: boolean;2238    readonly asBadVersion: Option<H256>;2239    readonly isBadFormat: boolean;2240    readonly asBadFormat: Option<H256>;2241    readonly isUpwardMessageSent: boolean;2242    readonly asUpwardMessageSent: Option<H256>;2243    readonly isXcmpMessageSent: boolean;2244    readonly asXcmpMessageSent: Option<H256>;2245    readonly isOverweightEnqueued: boolean;2246    readonly asOverweightEnqueued: ITuple<[u32, u32, u64, u64]>;2247    readonly isOverweightServiced: boolean;2248    readonly asOverweightServiced: ITuple<[u64, u64]>;2249    readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'UpwardMessageSent' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced';2250  }22512252  /** @name PalletXcmEvent (277) */2253  export interface PalletXcmEvent extends Enum {2254    readonly isAttempted: boolean;2255    readonly asAttempted: XcmV2TraitsOutcome;2256    readonly isSent: boolean;2257    readonly asSent: ITuple<[XcmV1MultiLocation, XcmV1MultiLocation, XcmV2Xcm]>;2258    readonly isUnexpectedResponse: boolean;2259    readonly asUnexpectedResponse: ITuple<[XcmV1MultiLocation, u64]>;2260    readonly isResponseReady: boolean;2261    readonly asResponseReady: ITuple<[u64, XcmV2Response]>;2262    readonly isNotified: boolean;2263    readonly asNotified: ITuple<[u64, u8, u8]>;2264    readonly isNotifyOverweight: boolean;2265    readonly asNotifyOverweight: ITuple<[u64, u8, u8, u64, u64]>;2266    readonly isNotifyDispatchError: boolean;2267    readonly asNotifyDispatchError: ITuple<[u64, u8, u8]>;2268    readonly isNotifyDecodeFailed: boolean;2269    readonly asNotifyDecodeFailed: ITuple<[u64, u8, u8]>;2270    readonly isInvalidResponder: boolean;2271    readonly asInvalidResponder: ITuple<[XcmV1MultiLocation, u64, Option<XcmV1MultiLocation>]>;2272    readonly isInvalidResponderVersion: boolean;2273    readonly asInvalidResponderVersion: ITuple<[XcmV1MultiLocation, u64]>;2274    readonly isResponseTaken: boolean;2275    readonly asResponseTaken: u64;2276    readonly isAssetsTrapped: boolean;2277    readonly asAssetsTrapped: ITuple<[H256, XcmV1MultiLocation, XcmVersionedMultiAssets]>;2278    readonly isVersionChangeNotified: boolean;2279    readonly asVersionChangeNotified: ITuple<[XcmV1MultiLocation, u32]>;2280    readonly isSupportedVersionChanged: boolean;2281    readonly asSupportedVersionChanged: ITuple<[XcmV1MultiLocation, u32]>;2282    readonly isNotifyTargetSendFail: boolean;2283    readonly asNotifyTargetSendFail: ITuple<[XcmV1MultiLocation, u64, XcmV2TraitsError]>;2284    readonly isNotifyTargetMigrationFail: boolean;2285    readonly asNotifyTargetMigrationFail: ITuple<[XcmVersionedMultiLocation, u64]>;2286    readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail';2287  }22882289  /** @name XcmV2TraitsOutcome (278) */2290  export interface XcmV2TraitsOutcome extends Enum {2291    readonly isComplete: boolean;2292    readonly asComplete: u64;2293    readonly isIncomplete: boolean;2294    readonly asIncomplete: ITuple<[u64, XcmV2TraitsError]>;2295    readonly isError: boolean;2296    readonly asError: XcmV2TraitsError;2297    readonly type: 'Complete' | 'Incomplete' | 'Error';2298  }22992300  /** @name CumulusPalletXcmEvent (280) */2301  export interface CumulusPalletXcmEvent extends Enum {2302    readonly isInvalidFormat: boolean;2303    readonly asInvalidFormat: U8aFixed;2304    readonly isUnsupportedVersion: boolean;2305    readonly asUnsupportedVersion: U8aFixed;2306    readonly isExecutedDownward: boolean;2307    readonly asExecutedDownward: ITuple<[U8aFixed, XcmV2TraitsOutcome]>;2308    readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward';2309  }23102311  /** @name CumulusPalletDmpQueueEvent (281) */2312  export interface CumulusPalletDmpQueueEvent extends Enum {2313    readonly isInvalidFormat: boolean;2314    readonly asInvalidFormat: U8aFixed;2315    readonly isUnsupportedVersion: boolean;2316    readonly asUnsupportedVersion: U8aFixed;2317    readonly isExecutedDownward: boolean;2318    readonly asExecutedDownward: ITuple<[U8aFixed, XcmV2TraitsOutcome]>;2319    readonly isWeightExhausted: boolean;2320    readonly asWeightExhausted: ITuple<[U8aFixed, u64, u64]>;2321    readonly isOverweightEnqueued: boolean;2322    readonly asOverweightEnqueued: ITuple<[U8aFixed, u64, u64]>;2323    readonly isOverweightServiced: boolean;2324    readonly asOverweightServiced: ITuple<[u64, u64]>;2325    readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced';2326  }23272328  /** @name PalletUniqueRawEvent (282) */2329  export interface PalletUniqueRawEvent extends Enum {2330    readonly isCollectionSponsorRemoved: boolean;2331    readonly asCollectionSponsorRemoved: u32;2332    readonly isCollectionAdminAdded: boolean;2333    readonly asCollectionAdminAdded: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;2334    readonly isCollectionOwnedChanged: boolean;2335    readonly asCollectionOwnedChanged: ITuple<[u32, AccountId32]>;2336    readonly isCollectionSponsorSet: boolean;2337    readonly asCollectionSponsorSet: ITuple<[u32, AccountId32]>;2338    readonly isSponsorshipConfirmed: boolean;2339    readonly asSponsorshipConfirmed: ITuple<[u32, AccountId32]>;2340    readonly isCollectionAdminRemoved: boolean;2341    readonly asCollectionAdminRemoved: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;2342    readonly isAllowListAddressRemoved: boolean;2343    readonly asAllowListAddressRemoved: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;2344    readonly isAllowListAddressAdded: boolean;2345    readonly asAllowListAddressAdded: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;2346    readonly isCollectionLimitSet: boolean;2347    readonly asCollectionLimitSet: u32;2348    readonly isCollectionPermissionSet: boolean;2349    readonly asCollectionPermissionSet: u32;2350    readonly type: 'CollectionSponsorRemoved' | 'CollectionAdminAdded' | 'CollectionOwnedChanged' | 'CollectionSponsorSet' | 'SponsorshipConfirmed' | 'CollectionAdminRemoved' | 'AllowListAddressRemoved' | 'AllowListAddressAdded' | 'CollectionLimitSet' | 'CollectionPermissionSet';2351  }23522353  /** @name PalletUnqSchedulerEvent (283) */2354  export interface PalletUnqSchedulerEvent extends Enum {2355    readonly isScheduled: boolean;2356    readonly asScheduled: {2357      readonly when: u32;2358      readonly index: u32;2359    } & Struct;2360    readonly isCanceled: boolean;2361    readonly asCanceled: {2362      readonly when: u32;2363      readonly index: u32;2364    } & Struct;2365    readonly isDispatched: boolean;2366    readonly asDispatched: {2367      readonly task: ITuple<[u32, u32]>;2368      readonly id: Option<U8aFixed>;2369      readonly result: Result<Null, SpRuntimeDispatchError>;2370    } & Struct;2371    readonly isCallLookupFailed: boolean;2372    readonly asCallLookupFailed: {2373      readonly task: ITuple<[u32, u32]>;2374      readonly id: Option<U8aFixed>;2375      readonly error: FrameSupportScheduleLookupError;2376    } & Struct;2377    readonly type: 'Scheduled' | 'Canceled' | 'Dispatched' | 'CallLookupFailed';2378  }23792380  /** @name FrameSupportScheduleLookupError (285) */2381  export interface FrameSupportScheduleLookupError extends Enum {2382    readonly isUnknown: boolean;2383    readonly isBadFormat: boolean;2384    readonly type: 'Unknown' | 'BadFormat';2385  }23862387  /** @name PalletCommonEvent (286) */2388  export interface PalletCommonEvent extends Enum {2389    readonly isCollectionCreated: boolean;2390    readonly asCollectionCreated: ITuple<[u32, u8, AccountId32]>;2391    readonly isCollectionDestroyed: boolean;2392    readonly asCollectionDestroyed: u32;2393    readonly isItemCreated: boolean;2394    readonly asItemCreated: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;2395    readonly isItemDestroyed: boolean;2396    readonly asItemDestroyed: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;2397    readonly isTransfer: boolean;2398    readonly asTransfer: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;2399    readonly isApproved: boolean;2400    readonly asApproved: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;2401    readonly isCollectionPropertySet: boolean;2402    readonly asCollectionPropertySet: ITuple<[u32, Bytes]>;2403    readonly isCollectionPropertyDeleted: boolean;2404    readonly asCollectionPropertyDeleted: ITuple<[u32, Bytes]>;2405    readonly isTokenPropertySet: boolean;2406    readonly asTokenPropertySet: ITuple<[u32, u32, Bytes]>;2407    readonly isTokenPropertyDeleted: boolean;2408    readonly asTokenPropertyDeleted: ITuple<[u32, u32, Bytes]>;2409    readonly isPropertyPermissionSet: boolean;2410    readonly asPropertyPermissionSet: ITuple<[u32, Bytes]>;2411    readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'ItemCreated' | 'ItemDestroyed' | 'Transfer' | 'Approved' | 'CollectionPropertySet' | 'CollectionPropertyDeleted' | 'TokenPropertySet' | 'TokenPropertyDeleted' | 'PropertyPermissionSet';2412  }24132414  /** @name PalletStructureEvent (287) */2415  export interface PalletStructureEvent extends Enum {2416    readonly isExecuted: boolean;2417    readonly asExecuted: Result<Null, SpRuntimeDispatchError>;2418    readonly type: 'Executed';2419  }24202421  /** @name PalletRmrkCoreEvent (288) */2422  export interface PalletRmrkCoreEvent extends Enum {2423    readonly isCollectionCreated: boolean;2424    readonly asCollectionCreated: {2425      readonly issuer: AccountId32;2426      readonly collectionId: u32;2427    } & Struct;2428    readonly isCollectionDestroyed: boolean;2429    readonly asCollectionDestroyed: {2430      readonly issuer: AccountId32;2431      readonly collectionId: u32;2432    } & Struct;2433    readonly isIssuerChanged: boolean;2434    readonly asIssuerChanged: {2435      readonly oldIssuer: AccountId32;2436      readonly newIssuer: AccountId32;2437      readonly collectionId: u32;2438    } & Struct;2439    readonly isCollectionLocked: boolean;2440    readonly asCollectionLocked: {2441      readonly issuer: AccountId32;2442      readonly collectionId: u32;2443    } & Struct;2444    readonly isNftMinted: boolean;2445    readonly asNftMinted: {2446      readonly owner: AccountId32;2447      readonly collectionId: u32;2448      readonly nftId: u32;2449    } & Struct;2450    readonly isNftBurned: boolean;2451    readonly asNftBurned: {2452      readonly owner: AccountId32;2453      readonly nftId: u32;2454    } & Struct;2455    readonly isNftSent: boolean;2456    readonly asNftSent: {2457      readonly sender: AccountId32;2458      readonly recipient: RmrkTraitsNftAccountIdOrCollectionNftTuple;2459      readonly collectionId: u32;2460      readonly nftId: u32;2461      readonly approvalRequired: bool;2462    } & Struct;2463    readonly isNftAccepted: boolean;2464    readonly asNftAccepted: {2465      readonly sender: AccountId32;2466      readonly recipient: RmrkTraitsNftAccountIdOrCollectionNftTuple;2467      readonly collectionId: u32;2468      readonly nftId: u32;2469    } & Struct;2470    readonly isNftRejected: boolean;2471    readonly asNftRejected: {2472      readonly sender: AccountId32;2473      readonly collectionId: u32;2474      readonly nftId: u32;2475    } & Struct;2476    readonly isPropertySet: boolean;2477    readonly asPropertySet: {2478      readonly collectionId: u32;2479      readonly maybeNftId: Option<u32>;2480      readonly key: Bytes;2481      readonly value: Bytes;2482    } & Struct;2483    readonly isResourceAdded: boolean;2484    readonly asResourceAdded: {2485      readonly nftId: u32;2486      readonly resourceId: u32;2487    } & Struct;2488    readonly isResourceRemoval: boolean;2489    readonly asResourceRemoval: {2490      readonly nftId: u32;2491      readonly resourceId: u32;2492    } & Struct;2493    readonly isResourceAccepted: boolean;2494    readonly asResourceAccepted: {2495      readonly nftId: u32;2496      readonly resourceId: u32;2497    } & Struct;2498    readonly isResourceRemovalAccepted: boolean;2499    readonly asResourceRemovalAccepted: {2500      readonly nftId: u32;2501      readonly resourceId: u32;2502    } & Struct;2503    readonly isPrioritySet: boolean;2504    readonly asPrioritySet: {2505      readonly collectionId: u32;2506      readonly nftId: u32;2507    } & Struct;2508    readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'IssuerChanged' | 'CollectionLocked' | 'NftMinted' | 'NftBurned' | 'NftSent' | 'NftAccepted' | 'NftRejected' | 'PropertySet' | 'ResourceAdded' | 'ResourceRemoval' | 'ResourceAccepted' | 'ResourceRemovalAccepted' | 'PrioritySet';2509  }25102511  /** @name PalletRmrkEquipEvent (289) */2512  export interface PalletRmrkEquipEvent extends Enum {2513    readonly isBaseCreated: boolean;2514    readonly asBaseCreated: {2515      readonly issuer: AccountId32;2516      readonly baseId: u32;2517    } & Struct;2518    readonly type: 'BaseCreated';2519  }25202521  /** @name PalletEvmEvent (290) */2522  export interface PalletEvmEvent extends Enum {2523    readonly isLog: boolean;2524    readonly asLog: EthereumLog;2525    readonly isCreated: boolean;2526    readonly asCreated: H160;2527    readonly isCreatedFailed: boolean;2528    readonly asCreatedFailed: H160;2529    readonly isExecuted: boolean;2530    readonly asExecuted: H160;2531    readonly isExecutedFailed: boolean;2532    readonly asExecutedFailed: H160;2533    readonly isBalanceDeposit: boolean;2534    readonly asBalanceDeposit: ITuple<[AccountId32, H160, U256]>;2535    readonly isBalanceWithdraw: boolean;2536    readonly asBalanceWithdraw: ITuple<[AccountId32, H160, U256]>;2537    readonly type: 'Log' | 'Created' | 'CreatedFailed' | 'Executed' | 'ExecutedFailed' | 'BalanceDeposit' | 'BalanceWithdraw';2538  }25392540  /** @name EthereumLog (291) */2541  export interface EthereumLog extends Struct {2542    readonly address: H160;2543    readonly topics: Vec<H256>;2544    readonly data: Bytes;2545  }25462547  /** @name PalletEthereumEvent (292) */2548  export interface PalletEthereumEvent extends Enum {2549    readonly isExecuted: boolean;2550    readonly asExecuted: ITuple<[H160, H160, H256, EvmCoreErrorExitReason]>;2551    readonly type: 'Executed';2552  }25532554  /** @name EvmCoreErrorExitReason (293) */2555  export interface EvmCoreErrorExitReason extends Enum {2556    readonly isSucceed: boolean;2557    readonly asSucceed: EvmCoreErrorExitSucceed;2558    readonly isError: boolean;2559    readonly asError: EvmCoreErrorExitError;2560    readonly isRevert: boolean;2561    readonly asRevert: EvmCoreErrorExitRevert;2562    readonly isFatal: boolean;2563    readonly asFatal: EvmCoreErrorExitFatal;2564    readonly type: 'Succeed' | 'Error' | 'Revert' | 'Fatal';2565  }25662567  /** @name EvmCoreErrorExitSucceed (294) */2568  export interface EvmCoreErrorExitSucceed extends Enum {2569    readonly isStopped: boolean;2570    readonly isReturned: boolean;2571    readonly isSuicided: boolean;2572    readonly type: 'Stopped' | 'Returned' | 'Suicided';2573  }25742575  /** @name EvmCoreErrorExitError (295) */2576  export interface EvmCoreErrorExitError extends Enum {2577    readonly isStackUnderflow: boolean;2578    readonly isStackOverflow: boolean;2579    readonly isInvalidJump: boolean;2580    readonly isInvalidRange: boolean;2581    readonly isDesignatedInvalid: boolean;2582    readonly isCallTooDeep: boolean;2583    readonly isCreateCollision: boolean;2584    readonly isCreateContractLimit: boolean;2585    readonly isOutOfOffset: boolean;2586    readonly isOutOfGas: boolean;2587    readonly isOutOfFund: boolean;2588    readonly isPcUnderflow: boolean;2589    readonly isCreateEmpty: boolean;2590    readonly isOther: boolean;2591    readonly asOther: Text;2592    readonly isInvalidCode: boolean;2593    readonly type: 'StackUnderflow' | 'StackOverflow' | 'InvalidJump' | 'InvalidRange' | 'DesignatedInvalid' | 'CallTooDeep' | 'CreateCollision' | 'CreateContractLimit' | 'OutOfOffset' | 'OutOfGas' | 'OutOfFund' | 'PcUnderflow' | 'CreateEmpty' | 'Other' | 'InvalidCode';2594  }25952596  /** @name EvmCoreErrorExitRevert (298) */2597  export interface EvmCoreErrorExitRevert extends Enum {2598    readonly isReverted: boolean;2599    readonly type: 'Reverted';2600  }26012602  /** @name EvmCoreErrorExitFatal (299) */2603  export interface EvmCoreErrorExitFatal extends Enum {2604    readonly isNotSupported: boolean;2605    readonly isUnhandledInterrupt: boolean;2606    readonly isCallErrorAsFatal: boolean;2607    readonly asCallErrorAsFatal: EvmCoreErrorExitError;2608    readonly isOther: boolean;2609    readonly asOther: Text;2610    readonly type: 'NotSupported' | 'UnhandledInterrupt' | 'CallErrorAsFatal' | 'Other';2611  }26122613  /** @name FrameSystemPhase (300) */2614  export interface FrameSystemPhase extends Enum {2615    readonly isApplyExtrinsic: boolean;2616    readonly asApplyExtrinsic: u32;2617    readonly isFinalization: boolean;2618    readonly isInitialization: boolean;2619    readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization';2620  }26212622  /** @name FrameSystemLastRuntimeUpgradeInfo (302) */2623  export interface FrameSystemLastRuntimeUpgradeInfo extends Struct {2624    readonly specVersion: Compact<u32>;2625    readonly specName: Text;2626  }26272628  /** @name FrameSystemLimitsBlockWeights (303) */2629  export interface FrameSystemLimitsBlockWeights extends Struct {2630    readonly baseBlock: u64;2631    readonly maxBlock: u64;2632    readonly perClass: FrameSupportWeightsPerDispatchClassWeightsPerClass;2633  }26342635  /** @name FrameSupportWeightsPerDispatchClassWeightsPerClass (304) */2636  export interface FrameSupportWeightsPerDispatchClassWeightsPerClass extends Struct {2637    readonly normal: FrameSystemLimitsWeightsPerClass;2638    readonly operational: FrameSystemLimitsWeightsPerClass;2639    readonly mandatory: FrameSystemLimitsWeightsPerClass;2640  }26412642  /** @name FrameSystemLimitsWeightsPerClass (305) */2643  export interface FrameSystemLimitsWeightsPerClass extends Struct {2644    readonly baseExtrinsic: u64;2645    readonly maxExtrinsic: Option<u64>;2646    readonly maxTotal: Option<u64>;2647    readonly reserved: Option<u64>;2648  }26492650  /** @name FrameSystemLimitsBlockLength (307) */2651  export interface FrameSystemLimitsBlockLength extends Struct {2652    readonly max: FrameSupportWeightsPerDispatchClassU32;2653  }26542655  /** @name FrameSupportWeightsPerDispatchClassU32 (308) */2656  export interface FrameSupportWeightsPerDispatchClassU32 extends Struct {2657    readonly normal: u32;2658    readonly operational: u32;2659    readonly mandatory: u32;2660  }26612662  /** @name FrameSupportWeightsRuntimeDbWeight (309) */2663  export interface FrameSupportWeightsRuntimeDbWeight extends Struct {2664    readonly read: u64;2665    readonly write: u64;2666  }26672668  /** @name SpVersionRuntimeVersion (310) */2669  export interface SpVersionRuntimeVersion extends Struct {2670    readonly specName: Text;2671    readonly implName: Text;2672    readonly authoringVersion: u32;2673    readonly specVersion: u32;2674    readonly implVersion: u32;2675    readonly apis: Vec<ITuple<[U8aFixed, u32]>>;2676    readonly transactionVersion: u32;2677    readonly stateVersion: u8;2678  }26792680  /** @name FrameSystemError (314) */2681  export interface FrameSystemError extends Enum {2682    readonly isInvalidSpecName: boolean;2683    readonly isSpecVersionNeedsToIncrease: boolean;2684    readonly isFailedToExtractRuntimeVersion: boolean;2685    readonly isNonDefaultComposite: boolean;2686    readonly isNonZeroRefCount: boolean;2687    readonly isCallFiltered: boolean;2688    readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered';2689  }26902691  /** @name OrmlVestingModuleError (316) */2692  export interface OrmlVestingModuleError extends Enum {2693    readonly isZeroVestingPeriod: boolean;2694    readonly isZeroVestingPeriodCount: boolean;2695    readonly isInsufficientBalanceToLock: boolean;2696    readonly isTooManyVestingSchedules: boolean;2697    readonly isAmountLow: boolean;2698    readonly isMaxVestingSchedulesExceeded: boolean;2699    readonly type: 'ZeroVestingPeriod' | 'ZeroVestingPeriodCount' | 'InsufficientBalanceToLock' | 'TooManyVestingSchedules' | 'AmountLow' | 'MaxVestingSchedulesExceeded';2700  }27012702  /** @name CumulusPalletXcmpQueueInboundChannelDetails (318) */2703  export interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct {2704    readonly sender: u32;2705    readonly state: CumulusPalletXcmpQueueInboundState;2706    readonly messageMetadata: Vec<ITuple<[u32, PolkadotParachainPrimitivesXcmpMessageFormat]>>;2707  }27082709  /** @name CumulusPalletXcmpQueueInboundState (319) */2710  export interface CumulusPalletXcmpQueueInboundState extends Enum {2711    readonly isOk: boolean;2712    readonly isSuspended: boolean;2713    readonly type: 'Ok' | 'Suspended';2714  }27152716  /** @name PolkadotParachainPrimitivesXcmpMessageFormat (322) */2717  export interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum {2718    readonly isConcatenatedVersionedXcm: boolean;2719    readonly isConcatenatedEncodedBlob: boolean;2720    readonly isSignals: boolean;2721    readonly type: 'ConcatenatedVersionedXcm' | 'ConcatenatedEncodedBlob' | 'Signals';2722  }27232724  /** @name CumulusPalletXcmpQueueOutboundChannelDetails (325) */2725  export interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct {2726    readonly recipient: u32;2727    readonly state: CumulusPalletXcmpQueueOutboundState;2728    readonly signalsExist: bool;2729    readonly firstIndex: u16;2730    readonly lastIndex: u16;2731  }27322733  /** @name CumulusPalletXcmpQueueOutboundState (326) */2734  export interface CumulusPalletXcmpQueueOutboundState extends Enum {2735    readonly isOk: boolean;2736    readonly isSuspended: boolean;2737    readonly type: 'Ok' | 'Suspended';2738  }27392740  /** @name CumulusPalletXcmpQueueQueueConfigData (328) */2741  export interface CumulusPalletXcmpQueueQueueConfigData extends Struct {2742    readonly suspendThreshold: u32;2743    readonly dropThreshold: u32;2744    readonly resumeThreshold: u32;2745    readonly thresholdWeight: u64;2746    readonly weightRestrictDecay: u64;2747    readonly xcmpMaxIndividualWeight: u64;2748  }27492750  /** @name CumulusPalletXcmpQueueError (330) */2751  export interface CumulusPalletXcmpQueueError extends Enum {2752    readonly isFailedToSend: boolean;2753    readonly isBadXcmOrigin: boolean;2754    readonly isBadXcm: boolean;2755    readonly isBadOverweightIndex: boolean;2756    readonly isWeightOverLimit: boolean;2757    readonly type: 'FailedToSend' | 'BadXcmOrigin' | 'BadXcm' | 'BadOverweightIndex' | 'WeightOverLimit';2758  }27592760  /** @name PalletXcmError (331) */2761  export interface PalletXcmError extends Enum {2762    readonly isUnreachable: boolean;2763    readonly isSendFailure: boolean;2764    readonly isFiltered: boolean;2765    readonly isUnweighableMessage: boolean;2766    readonly isDestinationNotInvertible: boolean;2767    readonly isEmpty: boolean;2768    readonly isCannotReanchor: boolean;2769    readonly isTooManyAssets: boolean;2770    readonly isInvalidOrigin: boolean;2771    readonly isBadVersion: boolean;2772    readonly isBadLocation: boolean;2773    readonly isNoSubscription: boolean;2774    readonly isAlreadySubscribed: boolean;2775    readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed';2776  }27772778  /** @name CumulusPalletXcmError (332) */2779  export type CumulusPalletXcmError = Null;27802781  /** @name CumulusPalletDmpQueueConfigData (333) */2782  export interface CumulusPalletDmpQueueConfigData extends Struct {2783    readonly maxIndividual: u64;2784  }27852786  /** @name CumulusPalletDmpQueuePageIndexData (334) */2787  export interface CumulusPalletDmpQueuePageIndexData extends Struct {2788    readonly beginUsed: u32;2789    readonly endUsed: u32;2790    readonly overweightCount: u64;2791  }27922793  /** @name CumulusPalletDmpQueueError (337) */2794  export interface CumulusPalletDmpQueueError extends Enum {2795    readonly isUnknown: boolean;2796    readonly isOverLimit: boolean;2797    readonly type: 'Unknown' | 'OverLimit';2798  }27992800  /** @name PalletUniqueError (341) */2801  export interface PalletUniqueError extends Enum {2802    readonly isCollectionDecimalPointLimitExceeded: boolean;2803    readonly isConfirmUnsetSponsorFail: boolean;2804    readonly isEmptyArgument: boolean;2805    readonly type: 'CollectionDecimalPointLimitExceeded' | 'ConfirmUnsetSponsorFail' | 'EmptyArgument';2806  }28072808  /** @name PalletUnqSchedulerScheduledV3 (344) */2809  export interface PalletUnqSchedulerScheduledV3 extends Struct {2810    readonly maybeId: Option<U8aFixed>;2811    readonly priority: u8;2812    readonly call: FrameSupportScheduleMaybeHashed;2813    readonly maybePeriodic: Option<ITuple<[u32, u32]>>;2814    readonly origin: OpalRuntimeOriginCaller;2815  }28162817  /** @name OpalRuntimeOriginCaller (345) */2818  export interface OpalRuntimeOriginCaller extends Enum {2819    readonly isVoid: boolean;2820    readonly isSystem: boolean;2821    readonly asSystem: FrameSupportDispatchRawOrigin;2822    readonly isPolkadotXcm: boolean;2823    readonly asPolkadotXcm: PalletXcmOrigin;2824    readonly isCumulusXcm: boolean;2825    readonly asCumulusXcm: CumulusPalletXcmOrigin;2826    readonly isEthereum: boolean;2827    readonly asEthereum: PalletEthereumRawOrigin;2828    readonly type: 'Void' | 'System' | 'PolkadotXcm' | 'CumulusXcm' | 'Ethereum';2829  }28302831  /** @name FrameSupportDispatchRawOrigin (346) */2832  export interface FrameSupportDispatchRawOrigin extends Enum {2833    readonly isRoot: boolean;2834    readonly isSigned: boolean;2835    readonly asSigned: AccountId32;2836    readonly isNone: boolean;2837    readonly type: 'Root' | 'Signed' | 'None';2838  }28392840  /** @name PalletXcmOrigin (347) */2841  export interface PalletXcmOrigin extends Enum {2842    readonly isXcm: boolean;2843    readonly asXcm: XcmV1MultiLocation;2844    readonly isResponse: boolean;2845    readonly asResponse: XcmV1MultiLocation;2846    readonly type: 'Xcm' | 'Response';2847  }28482849  /** @name CumulusPalletXcmOrigin (348) */2850  export interface CumulusPalletXcmOrigin extends Enum {2851    readonly isRelay: boolean;2852    readonly isSiblingParachain: boolean;2853    readonly asSiblingParachain: u32;2854    readonly type: 'Relay' | 'SiblingParachain';2855  }28562857  /** @name PalletEthereumRawOrigin (349) */2858  export interface PalletEthereumRawOrigin extends Enum {2859    readonly isEthereumTransaction: boolean;2860    readonly asEthereumTransaction: H160;2861    readonly type: 'EthereumTransaction';2862  }28632864  /** @name SpCoreVoid (350) */2865  export type SpCoreVoid = Null;28662867  /** @name PalletUnqSchedulerError (351) */2868  export interface PalletUnqSchedulerError extends Enum {2869    readonly isFailedToSchedule: boolean;2870    readonly isNotFound: boolean;2871    readonly isTargetBlockNumberInPast: boolean;2872    readonly isRescheduleNoChange: boolean;2873    readonly type: 'FailedToSchedule' | 'NotFound' | 'TargetBlockNumberInPast' | 'RescheduleNoChange';2874  }28752876  /** @name UpDataStructsCollection (352) */2877  export interface UpDataStructsCollection extends Struct {2878    readonly owner: AccountId32;2879    readonly mode: UpDataStructsCollectionMode;2880    readonly name: Vec<u16>;2881    readonly description: Vec<u16>;2882    readonly tokenPrefix: Bytes;2883    readonly sponsorship: UpDataStructsSponsorshipState;2884    readonly limits: UpDataStructsCollectionLimits;2885    readonly permissions: UpDataStructsCollectionPermissions;2886    readonly externalCollection: bool;2887  }28882889  /** @name UpDataStructsSponsorshipState (353) */2890  export interface UpDataStructsSponsorshipState extends Enum {2891    readonly isDisabled: boolean;2892    readonly isUnconfirmed: boolean;2893    readonly asUnconfirmed: AccountId32;2894    readonly isConfirmed: boolean;2895    readonly asConfirmed: AccountId32;2896    readonly type: 'Disabled' | 'Unconfirmed' | 'Confirmed';2897  }28982899  /** @name UpDataStructsProperties (354) */2900  export interface UpDataStructsProperties extends Struct {2901    readonly map: UpDataStructsPropertiesMapBoundedVec;2902    readonly consumedSpace: u32;2903    readonly spaceLimit: u32;2904  }29052906  /** @name UpDataStructsPropertiesMapBoundedVec (355) */2907  export interface UpDataStructsPropertiesMapBoundedVec extends BTreeMap<Bytes, Bytes> {}29082909  /** @name UpDataStructsPropertiesMapPropertyPermission (360) */2910  export interface UpDataStructsPropertiesMapPropertyPermission extends BTreeMap<Bytes, UpDataStructsPropertyPermission> {}29112912  /** @name UpDataStructsCollectionStats (367) */2913  export interface UpDataStructsCollectionStats extends Struct {2914    readonly created: u32;2915    readonly destroyed: u32;2916    readonly alive: u32;2917  }29182919  /** @name UpDataStructsTokenChild (368) */2920  export interface UpDataStructsTokenChild extends Struct {2921    readonly token: u32;2922    readonly collection: u32;2923  }29242925  /** @name PhantomTypeUpDataStructs (369) */2926  export interface PhantomTypeUpDataStructs extends Vec<ITuple<[UpDataStructsTokenData, UpDataStructsRpcCollection, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftNftInfo, RmrkTraitsResourceResourceInfo, RmrkTraitsPropertyPropertyInfo, RmrkTraitsBaseBaseInfo, RmrkTraitsPartPartType, RmrkTraitsTheme, RmrkTraitsNftNftChild]>> {}29272928  /** @name UpDataStructsTokenData (371) */2929  export interface UpDataStructsTokenData extends Struct {2930    readonly properties: Vec<UpDataStructsProperty>;2931    readonly owner: Option<PalletEvmAccountBasicCrossAccountIdRepr>;2932  }29332934  /** @name UpDataStructsRpcCollection (373) */2935  export interface UpDataStructsRpcCollection extends Struct {2936    readonly owner: AccountId32;2937    readonly mode: UpDataStructsCollectionMode;2938    readonly name: Vec<u16>;2939    readonly description: Vec<u16>;2940    readonly tokenPrefix: Bytes;2941    readonly sponsorship: UpDataStructsSponsorshipState;2942    readonly limits: UpDataStructsCollectionLimits;2943    readonly permissions: UpDataStructsCollectionPermissions;2944    readonly tokenPropertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;2945    readonly properties: Vec<UpDataStructsProperty>;2946    readonly readOnly: bool;2947  }29482949  /** @name RmrkTraitsCollectionCollectionInfo (374) */2950  export interface RmrkTraitsCollectionCollectionInfo extends Struct {2951    readonly issuer: AccountId32;2952    readonly metadata: Bytes;2953    readonly max: Option<u32>;2954    readonly symbol: Bytes;2955    readonly nftsCount: u32;2956  }29572958  /** @name RmrkTraitsNftNftInfo (375) */2959  export interface RmrkTraitsNftNftInfo extends Struct {2960    readonly owner: RmrkTraitsNftAccountIdOrCollectionNftTuple;2961    readonly royalty: Option<RmrkTraitsNftRoyaltyInfo>;2962    readonly metadata: Bytes;2963    readonly equipped: bool;2964    readonly pending: bool;2965  }29662967  /** @name RmrkTraitsNftRoyaltyInfo (377) */2968  export interface RmrkTraitsNftRoyaltyInfo extends Struct {2969    readonly recipient: AccountId32;2970    readonly amount: Permill;2971  }29722973  /** @name RmrkTraitsResourceResourceInfo (378) */2974  export interface RmrkTraitsResourceResourceInfo extends Struct {2975    readonly id: u32;2976    readonly resource: RmrkTraitsResourceResourceTypes;2977    readonly pending: bool;2978    readonly pendingRemoval: bool;2979  }29802981  /** @name RmrkTraitsResourceResourceTypes (379) */2982  export interface RmrkTraitsResourceResourceTypes extends Enum {2983    readonly isBasic: boolean;2984    readonly asBasic: RmrkTraitsResourceBasicResource;2985    readonly isComposable: boolean;2986    readonly asComposable: RmrkTraitsResourceComposableResource;2987    readonly isSlot: boolean;2988    readonly asSlot: RmrkTraitsResourceSlotResource;2989    readonly type: 'Basic' | 'Composable' | 'Slot';2990  }29912992  /** @name RmrkTraitsPropertyPropertyInfo (380) */2993  export interface RmrkTraitsPropertyPropertyInfo extends Struct {2994    readonly key: Bytes;2995    readonly value: Bytes;2996  }29972998  /** @name RmrkTraitsBaseBaseInfo (381) */2999  export interface RmrkTraitsBaseBaseInfo extends Struct {3000    readonly issuer: AccountId32;3001    readonly baseType: Bytes;3002    readonly symbol: Bytes;3003  }30043005  /** @name RmrkTraitsNftNftChild (382) */3006  export interface RmrkTraitsNftNftChild extends Struct {3007    readonly collectionId: u32;3008    readonly nftId: u32;3009  }30103011  /** @name PalletCommonError (384) */3012  export interface PalletCommonError extends Enum {3013    readonly isCollectionNotFound: boolean;3014    readonly isMustBeTokenOwner: boolean;3015    readonly isNoPermission: boolean;3016    readonly isCantDestroyNotEmptyCollection: boolean;3017    readonly isPublicMintingNotAllowed: boolean;3018    readonly isAddressNotInAllowlist: boolean;3019    readonly isCollectionNameLimitExceeded: boolean;3020    readonly isCollectionDescriptionLimitExceeded: boolean;3021    readonly isCollectionTokenPrefixLimitExceeded: boolean;3022    readonly isTotalCollectionsLimitExceeded: boolean;3023    readonly isCollectionAdminCountExceeded: boolean;3024    readonly isCollectionLimitBoundsExceeded: boolean;3025    readonly isOwnerPermissionsCantBeReverted: boolean;3026    readonly isTransferNotAllowed: boolean;3027    readonly isAccountTokenLimitExceeded: boolean;3028    readonly isCollectionTokenLimitExceeded: boolean;3029    readonly isMetadataFlagFrozen: boolean;3030    readonly isTokenNotFound: boolean;3031    readonly isTokenValueTooLow: boolean;3032    readonly isApprovedValueTooLow: boolean;3033    readonly isCantApproveMoreThanOwned: boolean;3034    readonly isAddressIsZero: boolean;3035    readonly isUnsupportedOperation: boolean;3036    readonly isNotSufficientFounds: boolean;3037    readonly isUserIsNotAllowedToNest: boolean;3038    readonly isSourceCollectionIsNotAllowedToNest: boolean;3039    readonly isCollectionFieldSizeExceeded: boolean;3040    readonly isNoSpaceForProperty: boolean;3041    readonly isPropertyLimitReached: boolean;3042    readonly isPropertyKeyIsTooLong: boolean;3043    readonly isInvalidCharacterInPropertyKey: boolean;3044    readonly isEmptyPropertyKey: boolean;3045    readonly isCollectionIsExternal: boolean;3046    readonly isCollectionIsInternal: boolean;3047    readonly type: 'CollectionNotFound' | 'MustBeTokenOwner' | 'NoPermission' | 'CantDestroyNotEmptyCollection' | 'PublicMintingNotAllowed' | 'AddressNotInAllowlist' | 'CollectionNameLimitExceeded' | 'CollectionDescriptionLimitExceeded' | 'CollectionTokenPrefixLimitExceeded' | 'TotalCollectionsLimitExceeded' | 'CollectionAdminCountExceeded' | 'CollectionLimitBoundsExceeded' | 'OwnerPermissionsCantBeReverted' | 'TransferNotAllowed' | 'AccountTokenLimitExceeded' | 'CollectionTokenLimitExceeded' | 'MetadataFlagFrozen' | 'TokenNotFound' | 'TokenValueTooLow' | 'ApprovedValueTooLow' | 'CantApproveMoreThanOwned' | 'AddressIsZero' | 'UnsupportedOperation' | 'NotSufficientFounds' | 'UserIsNotAllowedToNest' | 'SourceCollectionIsNotAllowedToNest' | 'CollectionFieldSizeExceeded' | 'NoSpaceForProperty' | 'PropertyLimitReached' | 'PropertyKeyIsTooLong' | 'InvalidCharacterInPropertyKey' | 'EmptyPropertyKey' | 'CollectionIsExternal' | 'CollectionIsInternal';3048  }30493050  /** @name PalletFungibleError (386) */3051  export interface PalletFungibleError extends Enum {3052    readonly isNotFungibleDataUsedToMintFungibleCollectionToken: boolean;3053    readonly isFungibleItemsHaveNoId: boolean;3054    readonly isFungibleItemsDontHaveData: boolean;3055    readonly isFungibleDisallowsNesting: boolean;3056    readonly isSettingPropertiesNotAllowed: boolean;3057    readonly type: 'NotFungibleDataUsedToMintFungibleCollectionToken' | 'FungibleItemsHaveNoId' | 'FungibleItemsDontHaveData' | 'FungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';3058  }30593060  /** @name PalletRefungibleItemData (387) */3061  export interface PalletRefungibleItemData extends Struct {3062    readonly constData: Bytes;3063  }30643065  /** @name PalletRefungibleError (391) */3066  export interface PalletRefungibleError extends Enum {3067    readonly isNotRefungibleDataUsedToMintFungibleCollectionToken: boolean;3068    readonly isWrongRefungiblePieces: boolean;3069    readonly isRefungibleDisallowsNesting: boolean;3070    readonly isSettingPropertiesNotAllowed: boolean;3071    readonly type: 'NotRefungibleDataUsedToMintFungibleCollectionToken' | 'WrongRefungiblePieces' | 'RefungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';3072  }30733074  /** @name PalletNonfungibleItemData (392) */3075  export interface PalletNonfungibleItemData extends Struct {3076    readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;3077  }30783079  /** @name PalletNonfungibleError (394) */3080  export interface PalletNonfungibleError extends Enum {3081    readonly isNotNonfungibleDataUsedToMintFungibleCollectionToken: boolean;3082    readonly isNonfungibleItemsHaveNoAmount: boolean;3083    readonly isCantBurnNftWithChildren: boolean;3084    readonly type: 'NotNonfungibleDataUsedToMintFungibleCollectionToken' | 'NonfungibleItemsHaveNoAmount' | 'CantBurnNftWithChildren';3085  }30863087  /** @name PalletStructureError (395) */3088  export interface PalletStructureError extends Enum {3089    readonly isOuroborosDetected: boolean;3090    readonly isDepthLimit: boolean;3091    readonly isBreadthLimit: boolean;3092    readonly isTokenNotFound: boolean;3093    readonly type: 'OuroborosDetected' | 'DepthLimit' | 'BreadthLimit' | 'TokenNotFound';3094  }30953096  /** @name PalletRmrkCoreError (396) */3097  export interface PalletRmrkCoreError extends Enum {3098    readonly isCorruptedCollectionType: boolean;3099    readonly isNftTypeEncodeError: boolean;3100    readonly isRmrkPropertyKeyIsTooLong: boolean;3101    readonly isRmrkPropertyValueIsTooLong: boolean;3102    readonly isCollectionNotEmpty: boolean;3103    readonly isNoAvailableCollectionId: boolean;3104    readonly isNoAvailableNftId: boolean;3105    readonly isCollectionUnknown: boolean;3106    readonly isNoPermission: boolean;3107    readonly isNonTransferable: boolean;3108    readonly isCollectionFullOrLocked: boolean;3109    readonly isResourceDoesntExist: boolean;3110    readonly isCannotSendToDescendentOrSelf: boolean;3111    readonly isCannotAcceptNonOwnedNft: boolean;3112    readonly isCannotRejectNonOwnedNft: boolean;3113    readonly isResourceNotPending: boolean;3114    readonly type: 'CorruptedCollectionType' | 'NftTypeEncodeError' | 'RmrkPropertyKeyIsTooLong' | 'RmrkPropertyValueIsTooLong' | 'CollectionNotEmpty' | 'NoAvailableCollectionId' | 'NoAvailableNftId' | 'CollectionUnknown' | 'NoPermission' | 'NonTransferable' | 'CollectionFullOrLocked' | 'ResourceDoesntExist' | 'CannotSendToDescendentOrSelf' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'ResourceNotPending';3115  }31163117  /** @name PalletRmrkEquipError (398) */3118  export interface PalletRmrkEquipError extends Enum {3119    readonly isPermissionError: boolean;3120    readonly isNoAvailableBaseId: boolean;3121    readonly isNoAvailablePartId: boolean;3122    readonly isBaseDoesntExist: boolean;3123    readonly isNeedsDefaultThemeFirst: boolean;3124    readonly type: 'PermissionError' | 'NoAvailableBaseId' | 'NoAvailablePartId' | 'BaseDoesntExist' | 'NeedsDefaultThemeFirst';3125  }31263127  /** @name PalletEvmError (401) */3128  export interface PalletEvmError extends Enum {3129    readonly isBalanceLow: boolean;3130    readonly isFeeOverflow: boolean;3131    readonly isPaymentOverflow: boolean;3132    readonly isWithdrawFailed: boolean;3133    readonly isGasPriceTooLow: boolean;3134    readonly isInvalidNonce: boolean;3135    readonly type: 'BalanceLow' | 'FeeOverflow' | 'PaymentOverflow' | 'WithdrawFailed' | 'GasPriceTooLow' | 'InvalidNonce';3136  }31373138  /** @name FpRpcTransactionStatus (404) */3139  export interface FpRpcTransactionStatus extends Struct {3140    readonly transactionHash: H256;3141    readonly transactionIndex: u32;3142    readonly from: H160;3143    readonly to: Option<H160>;3144    readonly contractAddress: Option<H160>;3145    readonly logs: Vec<EthereumLog>;3146    readonly logsBloom: EthbloomBloom;3147  }31483149  /** @name EthbloomBloom (406) */3150  export interface EthbloomBloom extends U8aFixed {}31513152  /** @name EthereumReceiptReceiptV3 (408) */3153  export interface EthereumReceiptReceiptV3 extends Enum {3154    readonly isLegacy: boolean;3155    readonly asLegacy: EthereumReceiptEip658ReceiptData;3156    readonly isEip2930: boolean;3157    readonly asEip2930: EthereumReceiptEip658ReceiptData;3158    readonly isEip1559: boolean;3159    readonly asEip1559: EthereumReceiptEip658ReceiptData;3160    readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';3161  }31623163  /** @name EthereumReceiptEip658ReceiptData (409) */3164  export interface EthereumReceiptEip658ReceiptData extends Struct {3165    readonly statusCode: u8;3166    readonly usedGas: U256;3167    readonly logsBloom: EthbloomBloom;3168    readonly logs: Vec<EthereumLog>;3169  }31703171  /** @name EthereumBlock (410) */3172  export interface EthereumBlock extends Struct {3173    readonly header: EthereumHeader;3174    readonly transactions: Vec<EthereumTransactionTransactionV2>;3175    readonly ommers: Vec<EthereumHeader>;3176  }31773178  /** @name EthereumHeader (411) */3179  export interface EthereumHeader extends Struct {3180    readonly parentHash: H256;3181    readonly ommersHash: H256;3182    readonly beneficiary: H160;3183    readonly stateRoot: H256;3184    readonly transactionsRoot: H256;3185    readonly receiptsRoot: H256;3186    readonly logsBloom: EthbloomBloom;3187    readonly difficulty: U256;3188    readonly number: U256;3189    readonly gasLimit: U256;3190    readonly gasUsed: U256;3191    readonly timestamp: u64;3192    readonly extraData: Bytes;3193    readonly mixHash: H256;3194    readonly nonce: EthereumTypesHashH64;3195  }31963197  /** @name EthereumTypesHashH64 (412) */3198  export interface EthereumTypesHashH64 extends U8aFixed {}31993200  /** @name PalletEthereumError (417) */3201  export interface PalletEthereumError extends Enum {3202    readonly isInvalidSignature: boolean;3203    readonly isPreLogExists: boolean;3204    readonly type: 'InvalidSignature' | 'PreLogExists';3205  }32063207  /** @name PalletEvmCoderSubstrateError (418) */3208  export interface PalletEvmCoderSubstrateError extends Enum {3209    readonly isOutOfGas: boolean;3210    readonly isOutOfFund: boolean;3211    readonly type: 'OutOfGas' | 'OutOfFund';3212  }32133214  /** @name PalletEvmContractHelpersSponsoringModeT (419) */3215  export interface PalletEvmContractHelpersSponsoringModeT extends Enum {3216    readonly isDisabled: boolean;3217    readonly isAllowlisted: boolean;3218    readonly isGenerous: boolean;3219    readonly type: 'Disabled' | 'Allowlisted' | 'Generous';3220  }32213222  /** @name PalletEvmContractHelpersError (421) */3223  export interface PalletEvmContractHelpersError extends Enum {3224    readonly isNoPermission: boolean;3225    readonly type: 'NoPermission';3226  }32273228  /** @name PalletEvmMigrationError (422) */3229  export interface PalletEvmMigrationError extends Enum {3230    readonly isAccountNotEmpty: boolean;3231    readonly isAccountIsNotMigrating: boolean;3232    readonly type: 'AccountNotEmpty' | 'AccountIsNotMigrating';3233  }32343235  /** @name SpRuntimeMultiSignature (424) */3236  export interface SpRuntimeMultiSignature extends Enum {3237    readonly isEd25519: boolean;3238    readonly asEd25519: SpCoreEd25519Signature;3239    readonly isSr25519: boolean;3240    readonly asSr25519: SpCoreSr25519Signature;3241    readonly isEcdsa: boolean;3242    readonly asEcdsa: SpCoreEcdsaSignature;3243    readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa';3244  }32453246  /** @name SpCoreEd25519Signature (425) */3247  export interface SpCoreEd25519Signature extends U8aFixed {}32483249  /** @name SpCoreSr25519Signature (427) */3250  export interface SpCoreSr25519Signature extends U8aFixed {}32513252  /** @name SpCoreEcdsaSignature (428) */3253  export interface SpCoreEcdsaSignature extends U8aFixed {}32543255  /** @name FrameSystemExtensionsCheckSpecVersion (431) */3256  export type FrameSystemExtensionsCheckSpecVersion = Null;32573258  /** @name FrameSystemExtensionsCheckGenesis (432) */3259  export type FrameSystemExtensionsCheckGenesis = Null;32603261  /** @name FrameSystemExtensionsCheckNonce (435) */3262  export interface FrameSystemExtensionsCheckNonce extends Compact<u32> {}32633264  /** @name FrameSystemExtensionsCheckWeight (436) */3265  export type FrameSystemExtensionsCheckWeight = Null;32663267  /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (437) */3268  export interface PalletTemplateTransactionPaymentChargeTransactionPayment extends Compact<u128> {}32693270  /** @name OpalRuntimeRuntime (438) */3271  export type OpalRuntimeRuntime = Null;32723273  /** @name PalletEthereumFakeTransactionFinalizer (439) */3274  export type PalletEthereumFakeTransactionFinalizer = Null;32753276} // declare module
after · tests/src/interfaces/types-lookup.ts
1// Auto-generated via `yarn polkadot-types-from-defs`, do not edit2/* eslint-disable */34declare module '@polkadot/types/lookup' {5  import type { BTreeMap, BTreeSet, Bytes, Compact, Enum, Null, Option, Result, Struct, Text, U256, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec';6  import type { ITuple } from '@polkadot/types-codec/types';7  import type { AccountId32, Call, H160, H256, MultiAddress, Perbill, Permill } from '@polkadot/types/interfaces/runtime';8  import type { Event } from '@polkadot/types/interfaces/system';910  /** @name PolkadotPrimitivesV2PersistedValidationData (2) */11  export interface PolkadotPrimitivesV2PersistedValidationData extends Struct {12    readonly parentHead: Bytes;13    readonly relayParentNumber: u32;14    readonly relayParentStorageRoot: H256;15    readonly maxPovSize: u32;16  }1718  /** @name PolkadotPrimitivesV2UpgradeRestriction (9) */19  export interface PolkadotPrimitivesV2UpgradeRestriction extends Enum {20    readonly isPresent: boolean;21    readonly type: 'Present';22  }2324  /** @name SpTrieStorageProof (10) */25  export interface SpTrieStorageProof extends Struct {26    readonly trieNodes: BTreeSet<Bytes>;27  }2829  /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (13) */30  export interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct {31    readonly dmqMqcHead: H256;32    readonly relayDispatchQueueSize: ITuple<[u32, u32]>;33    readonly ingressChannels: Vec<ITuple<[u32, PolkadotPrimitivesV2AbridgedHrmpChannel]>>;34    readonly egressChannels: Vec<ITuple<[u32, PolkadotPrimitivesV2AbridgedHrmpChannel]>>;35  }3637  /** @name PolkadotPrimitivesV2AbridgedHrmpChannel (18) */38  export interface PolkadotPrimitivesV2AbridgedHrmpChannel extends Struct {39    readonly maxCapacity: u32;40    readonly maxTotalSize: u32;41    readonly maxMessageSize: u32;42    readonly msgCount: u32;43    readonly totalSize: u32;44    readonly mqcHead: Option<H256>;45  }4647  /** @name PolkadotPrimitivesV2AbridgedHostConfiguration (20) */48  export interface PolkadotPrimitivesV2AbridgedHostConfiguration extends Struct {49    readonly maxCodeSize: u32;50    readonly maxHeadDataSize: u32;51    readonly maxUpwardQueueCount: u32;52    readonly maxUpwardQueueSize: u32;53    readonly maxUpwardMessageSize: u32;54    readonly maxUpwardMessageNumPerCandidate: u32;55    readonly hrmpMaxMessageNumPerCandidate: u32;56    readonly validationUpgradeCooldown: u32;57    readonly validationUpgradeDelay: u32;58  }5960  /** @name PolkadotCorePrimitivesOutboundHrmpMessage (26) */61  export interface PolkadotCorePrimitivesOutboundHrmpMessage extends Struct {62    readonly recipient: u32;63    readonly data: Bytes;64  }6566  /** @name CumulusPalletParachainSystemCall (28) */67  export interface CumulusPalletParachainSystemCall extends Enum {68    readonly isSetValidationData: boolean;69    readonly asSetValidationData: {70      readonly data: CumulusPrimitivesParachainInherentParachainInherentData;71    } & Struct;72    readonly isSudoSendUpwardMessage: boolean;73    readonly asSudoSendUpwardMessage: {74      readonly message: Bytes;75    } & Struct;76    readonly isAuthorizeUpgrade: boolean;77    readonly asAuthorizeUpgrade: {78      readonly codeHash: H256;79    } & Struct;80    readonly isEnactAuthorizedUpgrade: boolean;81    readonly asEnactAuthorizedUpgrade: {82      readonly code: Bytes;83    } & Struct;84    readonly type: 'SetValidationData' | 'SudoSendUpwardMessage' | 'AuthorizeUpgrade' | 'EnactAuthorizedUpgrade';85  }8687  /** @name CumulusPrimitivesParachainInherentParachainInherentData (29) */88  export interface CumulusPrimitivesParachainInherentParachainInherentData extends Struct {89    readonly validationData: PolkadotPrimitivesV2PersistedValidationData;90    readonly relayChainState: SpTrieStorageProof;91    readonly downwardMessages: Vec<PolkadotCorePrimitivesInboundDownwardMessage>;92    readonly horizontalMessages: BTreeMap<u32, Vec<PolkadotCorePrimitivesInboundHrmpMessage>>;93  }9495  /** @name PolkadotCorePrimitivesInboundDownwardMessage (31) */96  export interface PolkadotCorePrimitivesInboundDownwardMessage extends Struct {97    readonly sentAt: u32;98    readonly msg: Bytes;99  }100101  /** @name PolkadotCorePrimitivesInboundHrmpMessage (34) */102  export interface PolkadotCorePrimitivesInboundHrmpMessage extends Struct {103    readonly sentAt: u32;104    readonly data: Bytes;105  }106107  /** @name CumulusPalletParachainSystemEvent (37) */108  export interface CumulusPalletParachainSystemEvent extends Enum {109    readonly isValidationFunctionStored: boolean;110    readonly isValidationFunctionApplied: boolean;111    readonly asValidationFunctionApplied: u32;112    readonly isValidationFunctionDiscarded: boolean;113    readonly isUpgradeAuthorized: boolean;114    readonly asUpgradeAuthorized: H256;115    readonly isDownwardMessagesReceived: boolean;116    readonly asDownwardMessagesReceived: u32;117    readonly isDownwardMessagesProcessed: boolean;118    readonly asDownwardMessagesProcessed: ITuple<[u64, H256]>;119    readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed';120  }121122  /** @name CumulusPalletParachainSystemError (38) */123  export interface CumulusPalletParachainSystemError extends Enum {124    readonly isOverlappingUpgrades: boolean;125    readonly isProhibitedByPolkadot: boolean;126    readonly isTooBig: boolean;127    readonly isValidationDataNotAvailable: boolean;128    readonly isHostConfigurationNotAvailable: boolean;129    readonly isNotScheduled: boolean;130    readonly isNothingAuthorized: boolean;131    readonly isUnauthorized: boolean;132    readonly type: 'OverlappingUpgrades' | 'ProhibitedByPolkadot' | 'TooBig' | 'ValidationDataNotAvailable' | 'HostConfigurationNotAvailable' | 'NotScheduled' | 'NothingAuthorized' | 'Unauthorized';133  }134135  /** @name PalletBalancesAccountData (41) */136  export interface PalletBalancesAccountData extends Struct {137    readonly free: u128;138    readonly reserved: u128;139    readonly miscFrozen: u128;140    readonly feeFrozen: u128;141  }142143  /** @name PalletBalancesBalanceLock (43) */144  export interface PalletBalancesBalanceLock extends Struct {145    readonly id: U8aFixed;146    readonly amount: u128;147    readonly reasons: PalletBalancesReasons;148  }149150  /** @name PalletBalancesReasons (45) */151  export interface PalletBalancesReasons extends Enum {152    readonly isFee: boolean;153    readonly isMisc: boolean;154    readonly isAll: boolean;155    readonly type: 'Fee' | 'Misc' | 'All';156  }157158  /** @name PalletBalancesReserveData (48) */159  export interface PalletBalancesReserveData extends Struct {160    readonly id: U8aFixed;161    readonly amount: u128;162  }163164  /** @name PalletBalancesReleases (51) */165  export interface PalletBalancesReleases extends Enum {166    readonly isV100: boolean;167    readonly isV200: boolean;168    readonly type: 'V100' | 'V200';169  }170171  /** @name PalletBalancesCall (52) */172  export interface PalletBalancesCall extends Enum {173    readonly isTransfer: boolean;174    readonly asTransfer: {175      readonly dest: MultiAddress;176      readonly value: Compact<u128>;177    } & Struct;178    readonly isSetBalance: boolean;179    readonly asSetBalance: {180      readonly who: MultiAddress;181      readonly newFree: Compact<u128>;182      readonly newReserved: Compact<u128>;183    } & Struct;184    readonly isForceTransfer: boolean;185    readonly asForceTransfer: {186      readonly source: MultiAddress;187      readonly dest: MultiAddress;188      readonly value: Compact<u128>;189    } & Struct;190    readonly isTransferKeepAlive: boolean;191    readonly asTransferKeepAlive: {192      readonly dest: MultiAddress;193      readonly value: Compact<u128>;194    } & Struct;195    readonly isTransferAll: boolean;196    readonly asTransferAll: {197      readonly dest: MultiAddress;198      readonly keepAlive: bool;199    } & Struct;200    readonly isForceUnreserve: boolean;201    readonly asForceUnreserve: {202      readonly who: MultiAddress;203      readonly amount: u128;204    } & Struct;205    readonly type: 'Transfer' | 'SetBalance' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve';206  }207208  /** @name PalletBalancesEvent (58) */209  export interface PalletBalancesEvent extends Enum {210    readonly isEndowed: boolean;211    readonly asEndowed: {212      readonly account: AccountId32;213      readonly freeBalance: u128;214    } & Struct;215    readonly isDustLost: boolean;216    readonly asDustLost: {217      readonly account: AccountId32;218      readonly amount: u128;219    } & Struct;220    readonly isTransfer: boolean;221    readonly asTransfer: {222      readonly from: AccountId32;223      readonly to: AccountId32;224      readonly amount: u128;225    } & Struct;226    readonly isBalanceSet: boolean;227    readonly asBalanceSet: {228      readonly who: AccountId32;229      readonly free: u128;230      readonly reserved: u128;231    } & Struct;232    readonly isReserved: boolean;233    readonly asReserved: {234      readonly who: AccountId32;235      readonly amount: u128;236    } & Struct;237    readonly isUnreserved: boolean;238    readonly asUnreserved: {239      readonly who: AccountId32;240      readonly amount: u128;241    } & Struct;242    readonly isReserveRepatriated: boolean;243    readonly asReserveRepatriated: {244      readonly from: AccountId32;245      readonly to: AccountId32;246      readonly amount: u128;247      readonly destinationStatus: FrameSupportTokensMiscBalanceStatus;248    } & Struct;249    readonly isDeposit: boolean;250    readonly asDeposit: {251      readonly who: AccountId32;252      readonly amount: u128;253    } & Struct;254    readonly isWithdraw: boolean;255    readonly asWithdraw: {256      readonly who: AccountId32;257      readonly amount: u128;258    } & Struct;259    readonly isSlashed: boolean;260    readonly asSlashed: {261      readonly who: AccountId32;262      readonly amount: u128;263    } & Struct;264    readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'BalanceSet' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'Deposit' | 'Withdraw' | 'Slashed';265  }266267  /** @name FrameSupportTokensMiscBalanceStatus (59) */268  export interface FrameSupportTokensMiscBalanceStatus extends Enum {269    readonly isFree: boolean;270    readonly isReserved: boolean;271    readonly type: 'Free' | 'Reserved';272  }273274  /** @name PalletBalancesError (60) */275  export interface PalletBalancesError extends Enum {276    readonly isVestingBalance: boolean;277    readonly isLiquidityRestrictions: boolean;278    readonly isInsufficientBalance: boolean;279    readonly isExistentialDeposit: boolean;280    readonly isKeepAlive: boolean;281    readonly isExistingVestingSchedule: boolean;282    readonly isDeadAccount: boolean;283    readonly isTooManyReserves: boolean;284    readonly type: 'VestingBalance' | 'LiquidityRestrictions' | 'InsufficientBalance' | 'ExistentialDeposit' | 'KeepAlive' | 'ExistingVestingSchedule' | 'DeadAccount' | 'TooManyReserves';285  }286287  /** @name PalletTimestampCall (63) */288  export interface PalletTimestampCall extends Enum {289    readonly isSet: boolean;290    readonly asSet: {291      readonly now: Compact<u64>;292    } & Struct;293    readonly type: 'Set';294  }295296  /** @name PalletTransactionPaymentReleases (66) */297  export interface PalletTransactionPaymentReleases extends Enum {298    readonly isV1Ancient: boolean;299    readonly isV2: boolean;300    readonly type: 'V1Ancient' | 'V2';301  }302303  /** @name FrameSupportWeightsWeightToFeeCoefficient (68) */304  export interface FrameSupportWeightsWeightToFeeCoefficient extends Struct {305    readonly coeffInteger: u128;306    readonly coeffFrac: Perbill;307    readonly negative: bool;308    readonly degree: u8;309  }310311  /** @name PalletTreasuryProposal (70) */312  export interface PalletTreasuryProposal extends Struct {313    readonly proposer: AccountId32;314    readonly value: u128;315    readonly beneficiary: AccountId32;316    readonly bond: u128;317  }318319  /** @name PalletTreasuryCall (73) */320  export interface PalletTreasuryCall extends Enum {321    readonly isProposeSpend: boolean;322    readonly asProposeSpend: {323      readonly value: Compact<u128>;324      readonly beneficiary: MultiAddress;325    } & Struct;326    readonly isRejectProposal: boolean;327    readonly asRejectProposal: {328      readonly proposalId: Compact<u32>;329    } & Struct;330    readonly isApproveProposal: boolean;331    readonly asApproveProposal: {332      readonly proposalId: Compact<u32>;333    } & Struct;334    readonly isRemoveApproval: boolean;335    readonly asRemoveApproval: {336      readonly proposalId: Compact<u32>;337    } & Struct;338    readonly type: 'ProposeSpend' | 'RejectProposal' | 'ApproveProposal' | 'RemoveApproval';339  }340341  /** @name PalletTreasuryEvent (75) */342  export interface PalletTreasuryEvent extends Enum {343    readonly isProposed: boolean;344    readonly asProposed: {345      readonly proposalIndex: u32;346    } & Struct;347    readonly isSpending: boolean;348    readonly asSpending: {349      readonly budgetRemaining: u128;350    } & Struct;351    readonly isAwarded: boolean;352    readonly asAwarded: {353      readonly proposalIndex: u32;354      readonly award: u128;355      readonly account: AccountId32;356    } & Struct;357    readonly isRejected: boolean;358    readonly asRejected: {359      readonly proposalIndex: u32;360      readonly slashed: u128;361    } & Struct;362    readonly isBurnt: boolean;363    readonly asBurnt: {364      readonly burntFunds: u128;365    } & Struct;366    readonly isRollover: boolean;367    readonly asRollover: {368      readonly rolloverBalance: u128;369    } & Struct;370    readonly isDeposit: boolean;371    readonly asDeposit: {372      readonly value: u128;373    } & Struct;374    readonly type: 'Proposed' | 'Spending' | 'Awarded' | 'Rejected' | 'Burnt' | 'Rollover' | 'Deposit';375  }376377  /** @name FrameSupportPalletId (78) */378  export interface FrameSupportPalletId extends U8aFixed {}379380  /** @name PalletTreasuryError (79) */381  export interface PalletTreasuryError extends Enum {382    readonly isInsufficientProposersBalance: boolean;383    readonly isInvalidIndex: boolean;384    readonly isTooManyApprovals: boolean;385    readonly isProposalNotApproved: boolean;386    readonly type: 'InsufficientProposersBalance' | 'InvalidIndex' | 'TooManyApprovals' | 'ProposalNotApproved';387  }388389  /** @name PalletSudoCall (80) */390  export interface PalletSudoCall extends Enum {391    readonly isSudo: boolean;392    readonly asSudo: {393      readonly call: Call;394    } & Struct;395    readonly isSudoUncheckedWeight: boolean;396    readonly asSudoUncheckedWeight: {397      readonly call: Call;398      readonly weight: u64;399    } & Struct;400    readonly isSetKey: boolean;401    readonly asSetKey: {402      readonly new_: MultiAddress;403    } & Struct;404    readonly isSudoAs: boolean;405    readonly asSudoAs: {406      readonly who: MultiAddress;407      readonly call: Call;408    } & Struct;409    readonly type: 'Sudo' | 'SudoUncheckedWeight' | 'SetKey' | 'SudoAs';410  }411412  /** @name FrameSystemCall (82) */413  export interface FrameSystemCall extends Enum {414    readonly isFillBlock: boolean;415    readonly asFillBlock: {416      readonly ratio: Perbill;417    } & Struct;418    readonly isRemark: boolean;419    readonly asRemark: {420      readonly remark: Bytes;421    } & Struct;422    readonly isSetHeapPages: boolean;423    readonly asSetHeapPages: {424      readonly pages: u64;425    } & Struct;426    readonly isSetCode: boolean;427    readonly asSetCode: {428      readonly code: Bytes;429    } & Struct;430    readonly isSetCodeWithoutChecks: boolean;431    readonly asSetCodeWithoutChecks: {432      readonly code: Bytes;433    } & Struct;434    readonly isSetStorage: boolean;435    readonly asSetStorage: {436      readonly items: Vec<ITuple<[Bytes, Bytes]>>;437    } & Struct;438    readonly isKillStorage: boolean;439    readonly asKillStorage: {440      readonly keys_: Vec<Bytes>;441    } & Struct;442    readonly isKillPrefix: boolean;443    readonly asKillPrefix: {444      readonly prefix: Bytes;445      readonly subkeys: u32;446    } & Struct;447    readonly isRemarkWithEvent: boolean;448    readonly asRemarkWithEvent: {449      readonly remark: Bytes;450    } & Struct;451    readonly type: 'FillBlock' | 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent';452  }453454  /** @name OrmlVestingModuleCall (85) */455  export interface OrmlVestingModuleCall extends Enum {456    readonly isClaim: boolean;457    readonly isVestedTransfer: boolean;458    readonly asVestedTransfer: {459      readonly dest: MultiAddress;460      readonly schedule: OrmlVestingVestingSchedule;461    } & Struct;462    readonly isUpdateVestingSchedules: boolean;463    readonly asUpdateVestingSchedules: {464      readonly who: MultiAddress;465      readonly vestingSchedules: Vec<OrmlVestingVestingSchedule>;466    } & Struct;467    readonly isClaimFor: boolean;468    readonly asClaimFor: {469      readonly dest: MultiAddress;470    } & Struct;471    readonly type: 'Claim' | 'VestedTransfer' | 'UpdateVestingSchedules' | 'ClaimFor';472  }473474  /** @name OrmlVestingVestingSchedule (86) */475  export interface OrmlVestingVestingSchedule extends Struct {476    readonly start: u32;477    readonly period: u32;478    readonly periodCount: u32;479    readonly perPeriod: Compact<u128>;480  }481482  /** @name CumulusPalletXcmpQueueCall (88) */483  export interface CumulusPalletXcmpQueueCall extends Enum {484    readonly isServiceOverweight: boolean;485    readonly asServiceOverweight: {486      readonly index: u64;487      readonly weightLimit: u64;488    } & Struct;489    readonly isSuspendXcmExecution: boolean;490    readonly isResumeXcmExecution: boolean;491    readonly isUpdateSuspendThreshold: boolean;492    readonly asUpdateSuspendThreshold: {493      readonly new_: u32;494    } & Struct;495    readonly isUpdateDropThreshold: boolean;496    readonly asUpdateDropThreshold: {497      readonly new_: u32;498    } & Struct;499    readonly isUpdateResumeThreshold: boolean;500    readonly asUpdateResumeThreshold: {501      readonly new_: u32;502    } & Struct;503    readonly isUpdateThresholdWeight: boolean;504    readonly asUpdateThresholdWeight: {505      readonly new_: u64;506    } & Struct;507    readonly isUpdateWeightRestrictDecay: boolean;508    readonly asUpdateWeightRestrictDecay: {509      readonly new_: u64;510    } & Struct;511    readonly isUpdateXcmpMaxIndividualWeight: boolean;512    readonly asUpdateXcmpMaxIndividualWeight: {513      readonly new_: u64;514    } & Struct;515    readonly type: 'ServiceOverweight' | 'SuspendXcmExecution' | 'ResumeXcmExecution' | 'UpdateSuspendThreshold' | 'UpdateDropThreshold' | 'UpdateResumeThreshold' | 'UpdateThresholdWeight' | 'UpdateWeightRestrictDecay' | 'UpdateXcmpMaxIndividualWeight';516  }517518  /** @name PalletXcmCall (89) */519  export interface PalletXcmCall extends Enum {520    readonly isSend: boolean;521    readonly asSend: {522      readonly dest: XcmVersionedMultiLocation;523      readonly message: XcmVersionedXcm;524    } & Struct;525    readonly isTeleportAssets: boolean;526    readonly asTeleportAssets: {527      readonly dest: XcmVersionedMultiLocation;528      readonly beneficiary: XcmVersionedMultiLocation;529      readonly assets: XcmVersionedMultiAssets;530      readonly feeAssetItem: u32;531    } & Struct;532    readonly isReserveTransferAssets: boolean;533    readonly asReserveTransferAssets: {534      readonly dest: XcmVersionedMultiLocation;535      readonly beneficiary: XcmVersionedMultiLocation;536      readonly assets: XcmVersionedMultiAssets;537      readonly feeAssetItem: u32;538    } & Struct;539    readonly isExecute: boolean;540    readonly asExecute: {541      readonly message: XcmVersionedXcm;542      readonly maxWeight: u64;543    } & Struct;544    readonly isForceXcmVersion: boolean;545    readonly asForceXcmVersion: {546      readonly location: XcmV1MultiLocation;547      readonly xcmVersion: u32;548    } & Struct;549    readonly isForceDefaultXcmVersion: boolean;550    readonly asForceDefaultXcmVersion: {551      readonly maybeXcmVersion: Option<u32>;552    } & Struct;553    readonly isForceSubscribeVersionNotify: boolean;554    readonly asForceSubscribeVersionNotify: {555      readonly location: XcmVersionedMultiLocation;556    } & Struct;557    readonly isForceUnsubscribeVersionNotify: boolean;558    readonly asForceUnsubscribeVersionNotify: {559      readonly location: XcmVersionedMultiLocation;560    } & Struct;561    readonly isLimitedReserveTransferAssets: boolean;562    readonly asLimitedReserveTransferAssets: {563      readonly dest: XcmVersionedMultiLocation;564      readonly beneficiary: XcmVersionedMultiLocation;565      readonly assets: XcmVersionedMultiAssets;566      readonly feeAssetItem: u32;567      readonly weightLimit: XcmV2WeightLimit;568    } & Struct;569    readonly isLimitedTeleportAssets: boolean;570    readonly asLimitedTeleportAssets: {571      readonly dest: XcmVersionedMultiLocation;572      readonly beneficiary: XcmVersionedMultiLocation;573      readonly assets: XcmVersionedMultiAssets;574      readonly feeAssetItem: u32;575      readonly weightLimit: XcmV2WeightLimit;576    } & Struct;577    readonly type: 'Send' | 'TeleportAssets' | 'ReserveTransferAssets' | 'Execute' | 'ForceXcmVersion' | 'ForceDefaultXcmVersion' | 'ForceSubscribeVersionNotify' | 'ForceUnsubscribeVersionNotify' | 'LimitedReserveTransferAssets' | 'LimitedTeleportAssets';578  }579580  /** @name XcmVersionedMultiLocation (90) */581  export interface XcmVersionedMultiLocation extends Enum {582    readonly isV0: boolean;583    readonly asV0: XcmV0MultiLocation;584    readonly isV1: boolean;585    readonly asV1: XcmV1MultiLocation;586    readonly type: 'V0' | 'V1';587  }588589  /** @name XcmV0MultiLocation (91) */590  export interface XcmV0MultiLocation extends Enum {591    readonly isNull: boolean;592    readonly isX1: boolean;593    readonly asX1: XcmV0Junction;594    readonly isX2: boolean;595    readonly asX2: ITuple<[XcmV0Junction, XcmV0Junction]>;596    readonly isX3: boolean;597    readonly asX3: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction]>;598    readonly isX4: boolean;599    readonly asX4: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;600    readonly isX5: boolean;601    readonly asX5: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;602    readonly isX6: boolean;603    readonly asX6: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;604    readonly isX7: boolean;605    readonly asX7: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;606    readonly isX8: boolean;607    readonly asX8: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;608    readonly type: 'Null' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8';609  }610611  /** @name XcmV0Junction (92) */612  export interface XcmV0Junction extends Enum {613    readonly isParent: boolean;614    readonly isParachain: boolean;615    readonly asParachain: Compact<u32>;616    readonly isAccountId32: boolean;617    readonly asAccountId32: {618      readonly network: XcmV0JunctionNetworkId;619      readonly id: U8aFixed;620    } & Struct;621    readonly isAccountIndex64: boolean;622    readonly asAccountIndex64: {623      readonly network: XcmV0JunctionNetworkId;624      readonly index: Compact<u64>;625    } & Struct;626    readonly isAccountKey20: boolean;627    readonly asAccountKey20: {628      readonly network: XcmV0JunctionNetworkId;629      readonly key: U8aFixed;630    } & Struct;631    readonly isPalletInstance: boolean;632    readonly asPalletInstance: u8;633    readonly isGeneralIndex: boolean;634    readonly asGeneralIndex: Compact<u128>;635    readonly isGeneralKey: boolean;636    readonly asGeneralKey: Bytes;637    readonly isOnlyChild: boolean;638    readonly isPlurality: boolean;639    readonly asPlurality: {640      readonly id: XcmV0JunctionBodyId;641      readonly part: XcmV0JunctionBodyPart;642    } & Struct;643    readonly type: 'Parent' | 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality';644  }645646  /** @name XcmV0JunctionNetworkId (93) */647  export interface XcmV0JunctionNetworkId extends Enum {648    readonly isAny: boolean;649    readonly isNamed: boolean;650    readonly asNamed: Bytes;651    readonly isPolkadot: boolean;652    readonly isKusama: boolean;653    readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama';654  }655656  /** @name XcmV0JunctionBodyId (94) */657  export interface XcmV0JunctionBodyId extends Enum {658    readonly isUnit: boolean;659    readonly isNamed: boolean;660    readonly asNamed: Bytes;661    readonly isIndex: boolean;662    readonly asIndex: Compact<u32>;663    readonly isExecutive: boolean;664    readonly isTechnical: boolean;665    readonly isLegislative: boolean;666    readonly isJudicial: boolean;667    readonly type: 'Unit' | 'Named' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial';668  }669670  /** @name XcmV0JunctionBodyPart (95) */671  export interface XcmV0JunctionBodyPart extends Enum {672    readonly isVoice: boolean;673    readonly isMembers: boolean;674    readonly asMembers: {675      readonly count: Compact<u32>;676    } & Struct;677    readonly isFraction: boolean;678    readonly asFraction: {679      readonly nom: Compact<u32>;680      readonly denom: Compact<u32>;681    } & Struct;682    readonly isAtLeastProportion: boolean;683    readonly asAtLeastProportion: {684      readonly nom: Compact<u32>;685      readonly denom: Compact<u32>;686    } & Struct;687    readonly isMoreThanProportion: boolean;688    readonly asMoreThanProportion: {689      readonly nom: Compact<u32>;690      readonly denom: Compact<u32>;691    } & Struct;692    readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion';693  }694695  /** @name XcmV1MultiLocation (96) */696  export interface XcmV1MultiLocation extends Struct {697    readonly parents: u8;698    readonly interior: XcmV1MultilocationJunctions;699  }700701  /** @name XcmV1MultilocationJunctions (97) */702  export interface XcmV1MultilocationJunctions extends Enum {703    readonly isHere: boolean;704    readonly isX1: boolean;705    readonly asX1: XcmV1Junction;706    readonly isX2: boolean;707    readonly asX2: ITuple<[XcmV1Junction, XcmV1Junction]>;708    readonly isX3: boolean;709    readonly asX3: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction]>;710    readonly isX4: boolean;711    readonly asX4: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;712    readonly isX5: boolean;713    readonly asX5: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;714    readonly isX6: boolean;715    readonly asX6: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;716    readonly isX7: boolean;717    readonly asX7: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;718    readonly isX8: boolean;719    readonly asX8: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;720    readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8';721  }722723  /** @name XcmV1Junction (98) */724  export interface XcmV1Junction extends Enum {725    readonly isParachain: boolean;726    readonly asParachain: Compact<u32>;727    readonly isAccountId32: boolean;728    readonly asAccountId32: {729      readonly network: XcmV0JunctionNetworkId;730      readonly id: U8aFixed;731    } & Struct;732    readonly isAccountIndex64: boolean;733    readonly asAccountIndex64: {734      readonly network: XcmV0JunctionNetworkId;735      readonly index: Compact<u64>;736    } & Struct;737    readonly isAccountKey20: boolean;738    readonly asAccountKey20: {739      readonly network: XcmV0JunctionNetworkId;740      readonly key: U8aFixed;741    } & Struct;742    readonly isPalletInstance: boolean;743    readonly asPalletInstance: u8;744    readonly isGeneralIndex: boolean;745    readonly asGeneralIndex: Compact<u128>;746    readonly isGeneralKey: boolean;747    readonly asGeneralKey: Bytes;748    readonly isOnlyChild: boolean;749    readonly isPlurality: boolean;750    readonly asPlurality: {751      readonly id: XcmV0JunctionBodyId;752      readonly part: XcmV0JunctionBodyPart;753    } & Struct;754    readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality';755  }756757  /** @name XcmVersionedXcm (99) */758  export interface XcmVersionedXcm extends Enum {759    readonly isV0: boolean;760    readonly asV0: XcmV0Xcm;761    readonly isV1: boolean;762    readonly asV1: XcmV1Xcm;763    readonly isV2: boolean;764    readonly asV2: XcmV2Xcm;765    readonly type: 'V0' | 'V1' | 'V2';766  }767768  /** @name XcmV0Xcm (100) */769  export interface XcmV0Xcm extends Enum {770    readonly isWithdrawAsset: boolean;771    readonly asWithdrawAsset: {772      readonly assets: Vec<XcmV0MultiAsset>;773      readonly effects: Vec<XcmV0Order>;774    } & Struct;775    readonly isReserveAssetDeposit: boolean;776    readonly asReserveAssetDeposit: {777      readonly assets: Vec<XcmV0MultiAsset>;778      readonly effects: Vec<XcmV0Order>;779    } & Struct;780    readonly isTeleportAsset: boolean;781    readonly asTeleportAsset: {782      readonly assets: Vec<XcmV0MultiAsset>;783      readonly effects: Vec<XcmV0Order>;784    } & Struct;785    readonly isQueryResponse: boolean;786    readonly asQueryResponse: {787      readonly queryId: Compact<u64>;788      readonly response: XcmV0Response;789    } & Struct;790    readonly isTransferAsset: boolean;791    readonly asTransferAsset: {792      readonly assets: Vec<XcmV0MultiAsset>;793      readonly dest: XcmV0MultiLocation;794    } & Struct;795    readonly isTransferReserveAsset: boolean;796    readonly asTransferReserveAsset: {797      readonly assets: Vec<XcmV0MultiAsset>;798      readonly dest: XcmV0MultiLocation;799      readonly effects: Vec<XcmV0Order>;800    } & Struct;801    readonly isTransact: boolean;802    readonly asTransact: {803      readonly originType: XcmV0OriginKind;804      readonly requireWeightAtMost: u64;805      readonly call: XcmDoubleEncoded;806    } & Struct;807    readonly isHrmpNewChannelOpenRequest: boolean;808    readonly asHrmpNewChannelOpenRequest: {809      readonly sender: Compact<u32>;810      readonly maxMessageSize: Compact<u32>;811      readonly maxCapacity: Compact<u32>;812    } & Struct;813    readonly isHrmpChannelAccepted: boolean;814    readonly asHrmpChannelAccepted: {815      readonly recipient: Compact<u32>;816    } & Struct;817    readonly isHrmpChannelClosing: boolean;818    readonly asHrmpChannelClosing: {819      readonly initiator: Compact<u32>;820      readonly sender: Compact<u32>;821      readonly recipient: Compact<u32>;822    } & Struct;823    readonly isRelayedFrom: boolean;824    readonly asRelayedFrom: {825      readonly who: XcmV0MultiLocation;826      readonly message: XcmV0Xcm;827    } & Struct;828    readonly type: 'WithdrawAsset' | 'ReserveAssetDeposit' | 'TeleportAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom';829  }830831  /** @name XcmV0MultiAsset (102) */832  export interface XcmV0MultiAsset extends Enum {833    readonly isNone: boolean;834    readonly isAll: boolean;835    readonly isAllFungible: boolean;836    readonly isAllNonFungible: boolean;837    readonly isAllAbstractFungible: boolean;838    readonly asAllAbstractFungible: {839      readonly id: Bytes;840    } & Struct;841    readonly isAllAbstractNonFungible: boolean;842    readonly asAllAbstractNonFungible: {843      readonly class: Bytes;844    } & Struct;845    readonly isAllConcreteFungible: boolean;846    readonly asAllConcreteFungible: {847      readonly id: XcmV0MultiLocation;848    } & Struct;849    readonly isAllConcreteNonFungible: boolean;850    readonly asAllConcreteNonFungible: {851      readonly class: XcmV0MultiLocation;852    } & Struct;853    readonly isAbstractFungible: boolean;854    readonly asAbstractFungible: {855      readonly id: Bytes;856      readonly amount: Compact<u128>;857    } & Struct;858    readonly isAbstractNonFungible: boolean;859    readonly asAbstractNonFungible: {860      readonly class: Bytes;861      readonly instance: XcmV1MultiassetAssetInstance;862    } & Struct;863    readonly isConcreteFungible: boolean;864    readonly asConcreteFungible: {865      readonly id: XcmV0MultiLocation;866      readonly amount: Compact<u128>;867    } & Struct;868    readonly isConcreteNonFungible: boolean;869    readonly asConcreteNonFungible: {870      readonly class: XcmV0MultiLocation;871      readonly instance: XcmV1MultiassetAssetInstance;872    } & Struct;873    readonly type: 'None' | 'All' | 'AllFungible' | 'AllNonFungible' | 'AllAbstractFungible' | 'AllAbstractNonFungible' | 'AllConcreteFungible' | 'AllConcreteNonFungible' | 'AbstractFungible' | 'AbstractNonFungible' | 'ConcreteFungible' | 'ConcreteNonFungible';874  }875876  /** @name XcmV1MultiassetAssetInstance (103) */877  export interface XcmV1MultiassetAssetInstance extends Enum {878    readonly isUndefined: boolean;879    readonly isIndex: boolean;880    readonly asIndex: Compact<u128>;881    readonly isArray4: boolean;882    readonly asArray4: U8aFixed;883    readonly isArray8: boolean;884    readonly asArray8: U8aFixed;885    readonly isArray16: boolean;886    readonly asArray16: U8aFixed;887    readonly isArray32: boolean;888    readonly asArray32: U8aFixed;889    readonly isBlob: boolean;890    readonly asBlob: Bytes;891    readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32' | 'Blob';892  }893894  /** @name XcmV0Order (106) */895  export interface XcmV0Order extends Enum {896    readonly isNull: boolean;897    readonly isDepositAsset: boolean;898    readonly asDepositAsset: {899      readonly assets: Vec<XcmV0MultiAsset>;900      readonly dest: XcmV0MultiLocation;901    } & Struct;902    readonly isDepositReserveAsset: boolean;903    readonly asDepositReserveAsset: {904      readonly assets: Vec<XcmV0MultiAsset>;905      readonly dest: XcmV0MultiLocation;906      readonly effects: Vec<XcmV0Order>;907    } & Struct;908    readonly isExchangeAsset: boolean;909    readonly asExchangeAsset: {910      readonly give: Vec<XcmV0MultiAsset>;911      readonly receive: Vec<XcmV0MultiAsset>;912    } & Struct;913    readonly isInitiateReserveWithdraw: boolean;914    readonly asInitiateReserveWithdraw: {915      readonly assets: Vec<XcmV0MultiAsset>;916      readonly reserve: XcmV0MultiLocation;917      readonly effects: Vec<XcmV0Order>;918    } & Struct;919    readonly isInitiateTeleport: boolean;920    readonly asInitiateTeleport: {921      readonly assets: Vec<XcmV0MultiAsset>;922      readonly dest: XcmV0MultiLocation;923      readonly effects: Vec<XcmV0Order>;924    } & Struct;925    readonly isQueryHolding: boolean;926    readonly asQueryHolding: {927      readonly queryId: Compact<u64>;928      readonly dest: XcmV0MultiLocation;929      readonly assets: Vec<XcmV0MultiAsset>;930    } & Struct;931    readonly isBuyExecution: boolean;932    readonly asBuyExecution: {933      readonly fees: XcmV0MultiAsset;934      readonly weight: u64;935      readonly debt: u64;936      readonly haltOnError: bool;937      readonly xcm: Vec<XcmV0Xcm>;938    } & Struct;939    readonly type: 'Null' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution';940  }941942  /** @name XcmV0Response (108) */943  export interface XcmV0Response extends Enum {944    readonly isAssets: boolean;945    readonly asAssets: Vec<XcmV0MultiAsset>;946    readonly type: 'Assets';947  }948949  /** @name XcmV0OriginKind (109) */950  export interface XcmV0OriginKind extends Enum {951    readonly isNative: boolean;952    readonly isSovereignAccount: boolean;953    readonly isSuperuser: boolean;954    readonly isXcm: boolean;955    readonly type: 'Native' | 'SovereignAccount' | 'Superuser' | 'Xcm';956  }957958  /** @name XcmDoubleEncoded (110) */959  export interface XcmDoubleEncoded extends Struct {960    readonly encoded: Bytes;961  }962963  /** @name XcmV1Xcm (111) */964  export interface XcmV1Xcm extends Enum {965    readonly isWithdrawAsset: boolean;966    readonly asWithdrawAsset: {967      readonly assets: XcmV1MultiassetMultiAssets;968      readonly effects: Vec<XcmV1Order>;969    } & Struct;970    readonly isReserveAssetDeposited: boolean;971    readonly asReserveAssetDeposited: {972      readonly assets: XcmV1MultiassetMultiAssets;973      readonly effects: Vec<XcmV1Order>;974    } & Struct;975    readonly isReceiveTeleportedAsset: boolean;976    readonly asReceiveTeleportedAsset: {977      readonly assets: XcmV1MultiassetMultiAssets;978      readonly effects: Vec<XcmV1Order>;979    } & Struct;980    readonly isQueryResponse: boolean;981    readonly asQueryResponse: {982      readonly queryId: Compact<u64>;983      readonly response: XcmV1Response;984    } & Struct;985    readonly isTransferAsset: boolean;986    readonly asTransferAsset: {987      readonly assets: XcmV1MultiassetMultiAssets;988      readonly beneficiary: XcmV1MultiLocation;989    } & Struct;990    readonly isTransferReserveAsset: boolean;991    readonly asTransferReserveAsset: {992      readonly assets: XcmV1MultiassetMultiAssets;993      readonly dest: XcmV1MultiLocation;994      readonly effects: Vec<XcmV1Order>;995    } & Struct;996    readonly isTransact: boolean;997    readonly asTransact: {998      readonly originType: XcmV0OriginKind;999      readonly requireWeightAtMost: u64;1000      readonly call: XcmDoubleEncoded;1001    } & Struct;1002    readonly isHrmpNewChannelOpenRequest: boolean;1003    readonly asHrmpNewChannelOpenRequest: {1004      readonly sender: Compact<u32>;1005      readonly maxMessageSize: Compact<u32>;1006      readonly maxCapacity: Compact<u32>;1007    } & Struct;1008    readonly isHrmpChannelAccepted: boolean;1009    readonly asHrmpChannelAccepted: {1010      readonly recipient: Compact<u32>;1011    } & Struct;1012    readonly isHrmpChannelClosing: boolean;1013    readonly asHrmpChannelClosing: {1014      readonly initiator: Compact<u32>;1015      readonly sender: Compact<u32>;1016      readonly recipient: Compact<u32>;1017    } & Struct;1018    readonly isRelayedFrom: boolean;1019    readonly asRelayedFrom: {1020      readonly who: XcmV1MultilocationJunctions;1021      readonly message: XcmV1Xcm;1022    } & Struct;1023    readonly isSubscribeVersion: boolean;1024    readonly asSubscribeVersion: {1025      readonly queryId: Compact<u64>;1026      readonly maxResponseWeight: Compact<u64>;1027    } & Struct;1028    readonly isUnsubscribeVersion: boolean;1029    readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom' | 'SubscribeVersion' | 'UnsubscribeVersion';1030  }10311032  /** @name XcmV1MultiassetMultiAssets (112) */1033  export interface XcmV1MultiassetMultiAssets extends Vec<XcmV1MultiAsset> {}10341035  /** @name XcmV1MultiAsset (114) */1036  export interface XcmV1MultiAsset extends Struct {1037    readonly id: XcmV1MultiassetAssetId;1038    readonly fun: XcmV1MultiassetFungibility;1039  }10401041  /** @name XcmV1MultiassetAssetId (115) */1042  export interface XcmV1MultiassetAssetId extends Enum {1043    readonly isConcrete: boolean;1044    readonly asConcrete: XcmV1MultiLocation;1045    readonly isAbstract: boolean;1046    readonly asAbstract: Bytes;1047    readonly type: 'Concrete' | 'Abstract';1048  }10491050  /** @name XcmV1MultiassetFungibility (116) */1051  export interface XcmV1MultiassetFungibility extends Enum {1052    readonly isFungible: boolean;1053    readonly asFungible: Compact<u128>;1054    readonly isNonFungible: boolean;1055    readonly asNonFungible: XcmV1MultiassetAssetInstance;1056    readonly type: 'Fungible' | 'NonFungible';1057  }10581059  /** @name XcmV1Order (118) */1060  export interface XcmV1Order extends Enum {1061    readonly isNoop: boolean;1062    readonly isDepositAsset: boolean;1063    readonly asDepositAsset: {1064      readonly assets: XcmV1MultiassetMultiAssetFilter;1065      readonly maxAssets: u32;1066      readonly beneficiary: XcmV1MultiLocation;1067    } & Struct;1068    readonly isDepositReserveAsset: boolean;1069    readonly asDepositReserveAsset: {1070      readonly assets: XcmV1MultiassetMultiAssetFilter;1071      readonly maxAssets: u32;1072      readonly dest: XcmV1MultiLocation;1073      readonly effects: Vec<XcmV1Order>;1074    } & Struct;1075    readonly isExchangeAsset: boolean;1076    readonly asExchangeAsset: {1077      readonly give: XcmV1MultiassetMultiAssetFilter;1078      readonly receive: XcmV1MultiassetMultiAssets;1079    } & Struct;1080    readonly isInitiateReserveWithdraw: boolean;1081    readonly asInitiateReserveWithdraw: {1082      readonly assets: XcmV1MultiassetMultiAssetFilter;1083      readonly reserve: XcmV1MultiLocation;1084      readonly effects: Vec<XcmV1Order>;1085    } & Struct;1086    readonly isInitiateTeleport: boolean;1087    readonly asInitiateTeleport: {1088      readonly assets: XcmV1MultiassetMultiAssetFilter;1089      readonly dest: XcmV1MultiLocation;1090      readonly effects: Vec<XcmV1Order>;1091    } & Struct;1092    readonly isQueryHolding: boolean;1093    readonly asQueryHolding: {1094      readonly queryId: Compact<u64>;1095      readonly dest: XcmV1MultiLocation;1096      readonly assets: XcmV1MultiassetMultiAssetFilter;1097    } & Struct;1098    readonly isBuyExecution: boolean;1099    readonly asBuyExecution: {1100      readonly fees: XcmV1MultiAsset;1101      readonly weight: u64;1102      readonly debt: u64;1103      readonly haltOnError: bool;1104      readonly instructions: Vec<XcmV1Xcm>;1105    } & Struct;1106    readonly type: 'Noop' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution';1107  }11081109  /** @name XcmV1MultiassetMultiAssetFilter (119) */1110  export interface XcmV1MultiassetMultiAssetFilter extends Enum {1111    readonly isDefinite: boolean;1112    readonly asDefinite: XcmV1MultiassetMultiAssets;1113    readonly isWild: boolean;1114    readonly asWild: XcmV1MultiassetWildMultiAsset;1115    readonly type: 'Definite' | 'Wild';1116  }11171118  /** @name XcmV1MultiassetWildMultiAsset (120) */1119  export interface XcmV1MultiassetWildMultiAsset extends Enum {1120    readonly isAll: boolean;1121    readonly isAllOf: boolean;1122    readonly asAllOf: {1123      readonly id: XcmV1MultiassetAssetId;1124      readonly fun: XcmV1MultiassetWildFungibility;1125    } & Struct;1126    readonly type: 'All' | 'AllOf';1127  }11281129  /** @name XcmV1MultiassetWildFungibility (121) */1130  export interface XcmV1MultiassetWildFungibility extends Enum {1131    readonly isFungible: boolean;1132    readonly isNonFungible: boolean;1133    readonly type: 'Fungible' | 'NonFungible';1134  }11351136  /** @name XcmV1Response (123) */1137  export interface XcmV1Response extends Enum {1138    readonly isAssets: boolean;1139    readonly asAssets: XcmV1MultiassetMultiAssets;1140    readonly isVersion: boolean;1141    readonly asVersion: u32;1142    readonly type: 'Assets' | 'Version';1143  }11441145  /** @name XcmV2Xcm (124) */1146  export interface XcmV2Xcm extends Vec<XcmV2Instruction> {}11471148  /** @name XcmV2Instruction (126) */1149  export interface XcmV2Instruction extends Enum {1150    readonly isWithdrawAsset: boolean;1151    readonly asWithdrawAsset: XcmV1MultiassetMultiAssets;1152    readonly isReserveAssetDeposited: boolean;1153    readonly asReserveAssetDeposited: XcmV1MultiassetMultiAssets;1154    readonly isReceiveTeleportedAsset: boolean;1155    readonly asReceiveTeleportedAsset: XcmV1MultiassetMultiAssets;1156    readonly isQueryResponse: boolean;1157    readonly asQueryResponse: {1158      readonly queryId: Compact<u64>;1159      readonly response: XcmV2Response;1160      readonly maxWeight: Compact<u64>;1161    } & Struct;1162    readonly isTransferAsset: boolean;1163    readonly asTransferAsset: {1164      readonly assets: XcmV1MultiassetMultiAssets;1165      readonly beneficiary: XcmV1MultiLocation;1166    } & Struct;1167    readonly isTransferReserveAsset: boolean;1168    readonly asTransferReserveAsset: {1169      readonly assets: XcmV1MultiassetMultiAssets;1170      readonly dest: XcmV1MultiLocation;1171      readonly xcm: XcmV2Xcm;1172    } & Struct;1173    readonly isTransact: boolean;1174    readonly asTransact: {1175      readonly originType: XcmV0OriginKind;1176      readonly requireWeightAtMost: Compact<u64>;1177      readonly call: XcmDoubleEncoded;1178    } & Struct;1179    readonly isHrmpNewChannelOpenRequest: boolean;1180    readonly asHrmpNewChannelOpenRequest: {1181      readonly sender: Compact<u32>;1182      readonly maxMessageSize: Compact<u32>;1183      readonly maxCapacity: Compact<u32>;1184    } & Struct;1185    readonly isHrmpChannelAccepted: boolean;1186    readonly asHrmpChannelAccepted: {1187      readonly recipient: Compact<u32>;1188    } & Struct;1189    readonly isHrmpChannelClosing: boolean;1190    readonly asHrmpChannelClosing: {1191      readonly initiator: Compact<u32>;1192      readonly sender: Compact<u32>;1193      readonly recipient: Compact<u32>;1194    } & Struct;1195    readonly isClearOrigin: boolean;1196    readonly isDescendOrigin: boolean;1197    readonly asDescendOrigin: XcmV1MultilocationJunctions;1198    readonly isReportError: boolean;1199    readonly asReportError: {1200      readonly queryId: Compact<u64>;1201      readonly dest: XcmV1MultiLocation;1202      readonly maxResponseWeight: Compact<u64>;1203    } & Struct;1204    readonly isDepositAsset: boolean;1205    readonly asDepositAsset: {1206      readonly assets: XcmV1MultiassetMultiAssetFilter;1207      readonly maxAssets: Compact<u32>;1208      readonly beneficiary: XcmV1MultiLocation;1209    } & Struct;1210    readonly isDepositReserveAsset: boolean;1211    readonly asDepositReserveAsset: {1212      readonly assets: XcmV1MultiassetMultiAssetFilter;1213      readonly maxAssets: Compact<u32>;1214      readonly dest: XcmV1MultiLocation;1215      readonly xcm: XcmV2Xcm;1216    } & Struct;1217    readonly isExchangeAsset: boolean;1218    readonly asExchangeAsset: {1219      readonly give: XcmV1MultiassetMultiAssetFilter;1220      readonly receive: XcmV1MultiassetMultiAssets;1221    } & Struct;1222    readonly isInitiateReserveWithdraw: boolean;1223    readonly asInitiateReserveWithdraw: {1224      readonly assets: XcmV1MultiassetMultiAssetFilter;1225      readonly reserve: XcmV1MultiLocation;1226      readonly xcm: XcmV2Xcm;1227    } & Struct;1228    readonly isInitiateTeleport: boolean;1229    readonly asInitiateTeleport: {1230      readonly assets: XcmV1MultiassetMultiAssetFilter;1231      readonly dest: XcmV1MultiLocation;1232      readonly xcm: XcmV2Xcm;1233    } & Struct;1234    readonly isQueryHolding: boolean;1235    readonly asQueryHolding: {1236      readonly queryId: Compact<u64>;1237      readonly dest: XcmV1MultiLocation;1238      readonly assets: XcmV1MultiassetMultiAssetFilter;1239      readonly maxResponseWeight: Compact<u64>;1240    } & Struct;1241    readonly isBuyExecution: boolean;1242    readonly asBuyExecution: {1243      readonly fees: XcmV1MultiAsset;1244      readonly weightLimit: XcmV2WeightLimit;1245    } & Struct;1246    readonly isRefundSurplus: boolean;1247    readonly isSetErrorHandler: boolean;1248    readonly asSetErrorHandler: XcmV2Xcm;1249    readonly isSetAppendix: boolean;1250    readonly asSetAppendix: XcmV2Xcm;1251    readonly isClearError: boolean;1252    readonly isClaimAsset: boolean;1253    readonly asClaimAsset: {1254      readonly assets: XcmV1MultiassetMultiAssets;1255      readonly ticket: XcmV1MultiLocation;1256    } & Struct;1257    readonly isTrap: boolean;1258    readonly asTrap: Compact<u64>;1259    readonly isSubscribeVersion: boolean;1260    readonly asSubscribeVersion: {1261      readonly queryId: Compact<u64>;1262      readonly maxResponseWeight: Compact<u64>;1263    } & Struct;1264    readonly isUnsubscribeVersion: boolean;1265    readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion';1266  }12671268  /** @name XcmV2Response (127) */1269  export interface XcmV2Response extends Enum {1270    readonly isNull: boolean;1271    readonly isAssets: boolean;1272    readonly asAssets: XcmV1MultiassetMultiAssets;1273    readonly isExecutionResult: boolean;1274    readonly asExecutionResult: Option<ITuple<[u32, XcmV2TraitsError]>>;1275    readonly isVersion: boolean;1276    readonly asVersion: u32;1277    readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version';1278  }12791280  /** @name XcmV2TraitsError (130) */1281  export interface XcmV2TraitsError extends Enum {1282    readonly isOverflow: boolean;1283    readonly isUnimplemented: boolean;1284    readonly isUntrustedReserveLocation: boolean;1285    readonly isUntrustedTeleportLocation: boolean;1286    readonly isMultiLocationFull: boolean;1287    readonly isMultiLocationNotInvertible: boolean;1288    readonly isBadOrigin: boolean;1289    readonly isInvalidLocation: boolean;1290    readonly isAssetNotFound: boolean;1291    readonly isFailedToTransactAsset: boolean;1292    readonly isNotWithdrawable: boolean;1293    readonly isLocationCannotHold: boolean;1294    readonly isExceedsMaxMessageSize: boolean;1295    readonly isDestinationUnsupported: boolean;1296    readonly isTransport: boolean;1297    readonly isUnroutable: boolean;1298    readonly isUnknownClaim: boolean;1299    readonly isFailedToDecode: boolean;1300    readonly isMaxWeightInvalid: boolean;1301    readonly isNotHoldingFees: boolean;1302    readonly isTooExpensive: boolean;1303    readonly isTrap: boolean;1304    readonly asTrap: u64;1305    readonly isUnhandledXcmVersion: boolean;1306    readonly isWeightLimitReached: boolean;1307    readonly asWeightLimitReached: u64;1308    readonly isBarrier: boolean;1309    readonly isWeightNotComputable: boolean;1310    readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'MultiLocationFull' | 'MultiLocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable';1311  }13121313  /** @name XcmV2WeightLimit (131) */1314  export interface XcmV2WeightLimit extends Enum {1315    readonly isUnlimited: boolean;1316    readonly isLimited: boolean;1317    readonly asLimited: Compact<u64>;1318    readonly type: 'Unlimited' | 'Limited';1319  }13201321  /** @name XcmVersionedMultiAssets (132) */1322  export interface XcmVersionedMultiAssets extends Enum {1323    readonly isV0: boolean;1324    readonly asV0: Vec<XcmV0MultiAsset>;1325    readonly isV1: boolean;1326    readonly asV1: XcmV1MultiassetMultiAssets;1327    readonly type: 'V0' | 'V1';1328  }13291330  /** @name CumulusPalletXcmCall (147) */1331  export type CumulusPalletXcmCall = Null;13321333  /** @name CumulusPalletDmpQueueCall (148) */1334  export interface CumulusPalletDmpQueueCall extends Enum {1335    readonly isServiceOverweight: boolean;1336    readonly asServiceOverweight: {1337      readonly index: u64;1338      readonly weightLimit: u64;1339    } & Struct;1340    readonly type: 'ServiceOverweight';1341  }13421343  /** @name PalletInflationCall (149) */1344  export interface PalletInflationCall extends Enum {1345    readonly isStartInflation: boolean;1346    readonly asStartInflation: {1347      readonly inflationStartRelayBlock: u32;1348    } & Struct;1349    readonly type: 'StartInflation';1350  }13511352  /** @name PalletUniqueCall (150) */1353  export interface PalletUniqueCall extends Enum {1354    readonly isCreateCollection: boolean;1355    readonly asCreateCollection: {1356      readonly collectionName: Vec<u16>;1357      readonly collectionDescription: Vec<u16>;1358      readonly tokenPrefix: Bytes;1359      readonly mode: UpDataStructsCollectionMode;1360    } & Struct;1361    readonly isCreateCollectionEx: boolean;1362    readonly asCreateCollectionEx: {1363      readonly data: UpDataStructsCreateCollectionData;1364    } & Struct;1365    readonly isDestroyCollection: boolean;1366    readonly asDestroyCollection: {1367      readonly collectionId: u32;1368    } & Struct;1369    readonly isAddToAllowList: boolean;1370    readonly asAddToAllowList: {1371      readonly collectionId: u32;1372      readonly address: PalletEvmAccountBasicCrossAccountIdRepr;1373    } & Struct;1374    readonly isRemoveFromAllowList: boolean;1375    readonly asRemoveFromAllowList: {1376      readonly collectionId: u32;1377      readonly address: PalletEvmAccountBasicCrossAccountIdRepr;1378    } & Struct;1379    readonly isChangeCollectionOwner: boolean;1380    readonly asChangeCollectionOwner: {1381      readonly collectionId: u32;1382      readonly newOwner: AccountId32;1383    } & Struct;1384    readonly isAddCollectionAdmin: boolean;1385    readonly asAddCollectionAdmin: {1386      readonly collectionId: u32;1387      readonly newAdminId: PalletEvmAccountBasicCrossAccountIdRepr;1388    } & Struct;1389    readonly isRemoveCollectionAdmin: boolean;1390    readonly asRemoveCollectionAdmin: {1391      readonly collectionId: u32;1392      readonly accountId: PalletEvmAccountBasicCrossAccountIdRepr;1393    } & Struct;1394    readonly isSetCollectionSponsor: boolean;1395    readonly asSetCollectionSponsor: {1396      readonly collectionId: u32;1397      readonly newSponsor: AccountId32;1398    } & Struct;1399    readonly isConfirmSponsorship: boolean;1400    readonly asConfirmSponsorship: {1401      readonly collectionId: u32;1402    } & Struct;1403    readonly isRemoveCollectionSponsor: boolean;1404    readonly asRemoveCollectionSponsor: {1405      readonly collectionId: u32;1406    } & Struct;1407    readonly isCreateItem: boolean;1408    readonly asCreateItem: {1409      readonly collectionId: u32;1410      readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;1411      readonly data: UpDataStructsCreateItemData;1412    } & Struct;1413    readonly isCreateMultipleItems: boolean;1414    readonly asCreateMultipleItems: {1415      readonly collectionId: u32;1416      readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;1417      readonly itemsData: Vec<UpDataStructsCreateItemData>;1418    } & Struct;1419    readonly isSetCollectionProperties: boolean;1420    readonly asSetCollectionProperties: {1421      readonly collectionId: u32;1422      readonly properties: Vec<UpDataStructsProperty>;1423    } & Struct;1424    readonly isDeleteCollectionProperties: boolean;1425    readonly asDeleteCollectionProperties: {1426      readonly collectionId: u32;1427      readonly propertyKeys: Vec<Bytes>;1428    } & Struct;1429    readonly isSetTokenProperties: boolean;1430    readonly asSetTokenProperties: {1431      readonly collectionId: u32;1432      readonly tokenId: u32;1433      readonly properties: Vec<UpDataStructsProperty>;1434    } & Struct;1435    readonly isDeleteTokenProperties: boolean;1436    readonly asDeleteTokenProperties: {1437      readonly collectionId: u32;1438      readonly tokenId: u32;1439      readonly propertyKeys: Vec<Bytes>;1440    } & Struct;1441    readonly isSetTokenPropertyPermissions: boolean;1442    readonly asSetTokenPropertyPermissions: {1443      readonly collectionId: u32;1444      readonly propertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;1445    } & Struct;1446    readonly isCreateMultipleItemsEx: boolean;1447    readonly asCreateMultipleItemsEx: {1448      readonly collectionId: u32;1449      readonly data: UpDataStructsCreateItemExData;1450    } & Struct;1451    readonly isSetTransfersEnabledFlag: boolean;1452    readonly asSetTransfersEnabledFlag: {1453      readonly collectionId: u32;1454      readonly value: bool;1455    } & Struct;1456    readonly isBurnItem: boolean;1457    readonly asBurnItem: {1458      readonly collectionId: u32;1459      readonly itemId: u32;1460      readonly value: u128;1461    } & Struct;1462    readonly isBurnFrom: boolean;1463    readonly asBurnFrom: {1464      readonly collectionId: u32;1465      readonly from: PalletEvmAccountBasicCrossAccountIdRepr;1466      readonly itemId: u32;1467      readonly value: u128;1468    } & Struct;1469    readonly isTransfer: boolean;1470    readonly asTransfer: {1471      readonly recipient: PalletEvmAccountBasicCrossAccountIdRepr;1472      readonly collectionId: u32;1473      readonly itemId: u32;1474      readonly value: u128;1475    } & Struct;1476    readonly isApprove: boolean;1477    readonly asApprove: {1478      readonly spender: PalletEvmAccountBasicCrossAccountIdRepr;1479      readonly collectionId: u32;1480      readonly itemId: u32;1481      readonly amount: u128;1482    } & Struct;1483    readonly isTransferFrom: boolean;1484    readonly asTransferFrom: {1485      readonly from: PalletEvmAccountBasicCrossAccountIdRepr;1486      readonly recipient: PalletEvmAccountBasicCrossAccountIdRepr;1487      readonly collectionId: u32;1488      readonly itemId: u32;1489      readonly value: u128;1490    } & Struct;1491    readonly isSetCollectionLimits: boolean;1492    readonly asSetCollectionLimits: {1493      readonly collectionId: u32;1494      readonly newLimit: UpDataStructsCollectionLimits;1495    } & Struct;1496    readonly isSetCollectionPermissions: boolean;1497    readonly asSetCollectionPermissions: {1498      readonly collectionId: u32;1499      readonly newLimit: UpDataStructsCollectionPermissions;1500    } & Struct;1501    readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetTokenPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions';1502  }15031504  /** @name UpDataStructsCollectionMode (156) */1505  export interface UpDataStructsCollectionMode extends Enum {1506    readonly isNft: boolean;1507    readonly isFungible: boolean;1508    readonly asFungible: u8;1509    readonly isReFungible: boolean;1510    readonly type: 'Nft' | 'Fungible' | 'ReFungible';1511  }15121513  /** @name UpDataStructsCreateCollectionData (157) */1514  export interface UpDataStructsCreateCollectionData extends Struct {1515    readonly mode: UpDataStructsCollectionMode;1516    readonly access: Option<UpDataStructsAccessMode>;1517    readonly name: Vec<u16>;1518    readonly description: Vec<u16>;1519    readonly tokenPrefix: Bytes;1520    readonly pendingSponsor: Option<AccountId32>;1521    readonly limits: Option<UpDataStructsCollectionLimits>;1522    readonly permissions: Option<UpDataStructsCollectionPermissions>;1523    readonly tokenPropertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;1524    readonly properties: Vec<UpDataStructsProperty>;1525  }15261527  /** @name UpDataStructsAccessMode (159) */1528  export interface UpDataStructsAccessMode extends Enum {1529    readonly isNormal: boolean;1530    readonly isAllowList: boolean;1531    readonly type: 'Normal' | 'AllowList';1532  }15331534  /** @name UpDataStructsCollectionLimits (162) */1535  export interface UpDataStructsCollectionLimits extends Struct {1536    readonly accountTokenOwnershipLimit: Option<u32>;1537    readonly sponsoredDataSize: Option<u32>;1538    readonly sponsoredDataRateLimit: Option<UpDataStructsSponsoringRateLimit>;1539    readonly tokenLimit: Option<u32>;1540    readonly sponsorTransferTimeout: Option<u32>;1541    readonly sponsorApproveTimeout: Option<u32>;1542    readonly ownerCanTransfer: Option<bool>;1543    readonly ownerCanDestroy: Option<bool>;1544    readonly transfersEnabled: Option<bool>;1545  }15461547  /** @name UpDataStructsSponsoringRateLimit (164) */1548  export interface UpDataStructsSponsoringRateLimit extends Enum {1549    readonly isSponsoringDisabled: boolean;1550    readonly isBlocks: boolean;1551    readonly asBlocks: u32;1552    readonly type: 'SponsoringDisabled' | 'Blocks';1553  }15541555  /** @name UpDataStructsCollectionPermissions (167) */1556  export interface UpDataStructsCollectionPermissions extends Struct {1557    readonly access: Option<UpDataStructsAccessMode>;1558    readonly mintMode: Option<bool>;1559    readonly nesting: Option<UpDataStructsNestingPermissions>;1560  }15611562  /** @name UpDataStructsNestingPermissions (169) */1563  export interface UpDataStructsNestingPermissions extends Struct {1564    readonly tokenOwner: bool;1565    readonly collectionAdmin: bool;1566    readonly restricted: Option<UpDataStructsOwnerRestrictedSet>;1567    readonly permissive: bool;1568  }15691570  /** @name UpDataStructsOwnerRestrictedSet (171) */1571  export interface UpDataStructsOwnerRestrictedSet extends BTreeSet<u32> {}15721573  /** @name UpDataStructsPropertyKeyPermission (177) */1574  export interface UpDataStructsPropertyKeyPermission extends Struct {1575    readonly key: Bytes;1576    readonly permission: UpDataStructsPropertyPermission;1577  }15781579  /** @name UpDataStructsPropertyPermission (179) */1580  export interface UpDataStructsPropertyPermission extends Struct {1581    readonly mutable: bool;1582    readonly collectionAdmin: bool;1583    readonly tokenOwner: bool;1584  }15851586  /** @name UpDataStructsProperty (182) */1587  export interface UpDataStructsProperty extends Struct {1588    readonly key: Bytes;1589    readonly value: Bytes;1590  }15911592  /** @name PalletEvmAccountBasicCrossAccountIdRepr (185) */1593  export interface PalletEvmAccountBasicCrossAccountIdRepr extends Enum {1594    readonly isSubstrate: boolean;1595    readonly asSubstrate: AccountId32;1596    readonly isEthereum: boolean;1597    readonly asEthereum: H160;1598    readonly type: 'Substrate' | 'Ethereum';1599  }16001601  /** @name UpDataStructsCreateItemData (187) */1602  export interface UpDataStructsCreateItemData extends Enum {1603    readonly isNft: boolean;1604    readonly asNft: UpDataStructsCreateNftData;1605    readonly isFungible: boolean;1606    readonly asFungible: UpDataStructsCreateFungibleData;1607    readonly isReFungible: boolean;1608    readonly asReFungible: UpDataStructsCreateReFungibleData;1609    readonly type: 'Nft' | 'Fungible' | 'ReFungible';1610  }16111612  /** @name UpDataStructsCreateNftData (188) */1613  export interface UpDataStructsCreateNftData extends Struct {1614    readonly properties: Vec<UpDataStructsProperty>;1615  }16161617  /** @name UpDataStructsCreateFungibleData (189) */1618  export interface UpDataStructsCreateFungibleData extends Struct {1619    readonly value: u128;1620  }16211622  /** @name UpDataStructsCreateReFungibleData (190) */1623  export interface UpDataStructsCreateReFungibleData extends Struct {1624    readonly constData: Bytes;1625    readonly pieces: u128;1626  }16271628  /** @name UpDataStructsCreateItemExData (195) */1629  export interface UpDataStructsCreateItemExData extends Enum {1630    readonly isNft: boolean;1631    readonly asNft: Vec<UpDataStructsCreateNftExData>;1632    readonly isFungible: boolean;1633    readonly asFungible: BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>;1634    readonly isRefungibleMultipleItems: boolean;1635    readonly asRefungibleMultipleItems: Vec<UpDataStructsCreateRefungibleExData>;1636    readonly isRefungibleMultipleOwners: boolean;1637    readonly asRefungibleMultipleOwners: UpDataStructsCreateRefungibleExData;1638    readonly type: 'Nft' | 'Fungible' | 'RefungibleMultipleItems' | 'RefungibleMultipleOwners';1639  }16401641  /** @name UpDataStructsCreateNftExData (197) */1642  export interface UpDataStructsCreateNftExData extends Struct {1643    readonly properties: Vec<UpDataStructsProperty>;1644    readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;1645  }16461647  /** @name UpDataStructsCreateRefungibleExData (204) */1648  export interface UpDataStructsCreateRefungibleExData extends Struct {1649    readonly constData: Bytes;1650    readonly users: BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>;1651  }16521653  /** @name PalletUniqueSchedulerCall (206) */1654  export interface PalletUniqueSchedulerCall extends Enum {1655    readonly isScheduleNamed: boolean;1656    readonly asScheduleNamed: {1657      readonly id: U8aFixed;1658      readonly when: u32;1659      readonly maybePeriodic: Option<ITuple<[u32, u32]>>;1660      readonly priority: u8;1661      readonly call: FrameSupportScheduleMaybeHashed;1662    } & Struct;1663    readonly isCancelNamed: boolean;1664    readonly asCancelNamed: {1665      readonly id: U8aFixed;1666    } & Struct;1667    readonly isScheduleNamedAfter: boolean;1668    readonly asScheduleNamedAfter: {1669      readonly id: U8aFixed;1670      readonly after: u32;1671      readonly maybePeriodic: Option<ITuple<[u32, u32]>>;1672      readonly priority: u8;1673      readonly call: FrameSupportScheduleMaybeHashed;1674    } & Struct;1675    readonly type: 'ScheduleNamed' | 'CancelNamed' | 'ScheduleNamedAfter';1676  }16771678  /** @name FrameSupportScheduleMaybeHashed (208) */1679  export interface FrameSupportScheduleMaybeHashed extends Enum {1680    readonly isValue: boolean;1681    readonly asValue: Call;1682    readonly isHash: boolean;1683    readonly asHash: H256;1684    readonly type: 'Value' | 'Hash';1685  }16861687  /** @name PalletTemplateTransactionPaymentCall (209) */1688  export type PalletTemplateTransactionPaymentCall = Null;16891690  /** @name PalletStructureCall (210) */1691  export type PalletStructureCall = Null;16921693  /** @name PalletRmrkCoreCall (211) */1694  export interface PalletRmrkCoreCall extends Enum {1695    readonly isCreateCollection: boolean;1696    readonly asCreateCollection: {1697      readonly metadata: Bytes;1698      readonly max: Option<u32>;1699      readonly symbol: Bytes;1700    } & Struct;1701    readonly isDestroyCollection: boolean;1702    readonly asDestroyCollection: {1703      readonly collectionId: u32;1704    } & Struct;1705    readonly isChangeCollectionIssuer: boolean;1706    readonly asChangeCollectionIssuer: {1707      readonly collectionId: u32;1708      readonly newIssuer: MultiAddress;1709    } & Struct;1710    readonly isLockCollection: boolean;1711    readonly asLockCollection: {1712      readonly collectionId: u32;1713    } & Struct;1714    readonly isMintNft: boolean;1715    readonly asMintNft: {1716      readonly owner: AccountId32;1717      readonly collectionId: u32;1718      readonly recipient: Option<AccountId32>;1719      readonly royaltyAmount: Option<Permill>;1720      readonly metadata: Bytes;1721      readonly transferable: bool;1722      readonly resources: Option<Vec<RmrkTraitsResourceResourceTypes>>;1723    } & Struct;1724    readonly isBurnNft: boolean;1725    readonly asBurnNft: {1726      readonly collectionId: u32;1727      readonly nftId: u32;1728      readonly maxBurns: u32;1729    } & Struct;1730    readonly isSend: boolean;1731    readonly asSend: {1732      readonly rmrkCollectionId: u32;1733      readonly rmrkNftId: u32;1734      readonly newOwner: RmrkTraitsNftAccountIdOrCollectionNftTuple;1735    } & Struct;1736    readonly isAcceptNft: boolean;1737    readonly asAcceptNft: {1738      readonly rmrkCollectionId: u32;1739      readonly rmrkNftId: u32;1740      readonly newOwner: RmrkTraitsNftAccountIdOrCollectionNftTuple;1741    } & Struct;1742    readonly isRejectNft: boolean;1743    readonly asRejectNft: {1744      readonly rmrkCollectionId: u32;1745      readonly rmrkNftId: u32;1746    } & Struct;1747    readonly isAcceptResource: boolean;1748    readonly asAcceptResource: {1749      readonly rmrkCollectionId: u32;1750      readonly rmrkNftId: u32;1751      readonly rmrkResourceId: u32;1752    } & Struct;1753    readonly isAcceptResourceRemoval: boolean;1754    readonly asAcceptResourceRemoval: {1755      readonly rmrkCollectionId: u32;1756      readonly rmrkNftId: u32;1757      readonly rmrkResourceId: u32;1758    } & Struct;1759    readonly isSetProperty: boolean;1760    readonly asSetProperty: {1761      readonly rmrkCollectionId: Compact<u32>;1762      readonly maybeNftId: Option<u32>;1763      readonly key: Bytes;1764      readonly value: Bytes;1765    } & Struct;1766    readonly isSetPriority: boolean;1767    readonly asSetPriority: {1768      readonly rmrkCollectionId: u32;1769      readonly rmrkNftId: u32;1770      readonly priorities: Vec<u32>;1771    } & Struct;1772    readonly isAddBasicResource: boolean;1773    readonly asAddBasicResource: {1774      readonly rmrkCollectionId: u32;1775      readonly nftId: u32;1776      readonly resource: RmrkTraitsResourceBasicResource;1777    } & Struct;1778    readonly isAddComposableResource: boolean;1779    readonly asAddComposableResource: {1780      readonly rmrkCollectionId: u32;1781      readonly nftId: u32;1782      readonly resource: RmrkTraitsResourceComposableResource;1783    } & Struct;1784    readonly isAddSlotResource: boolean;1785    readonly asAddSlotResource: {1786      readonly rmrkCollectionId: u32;1787      readonly nftId: u32;1788      readonly resource: RmrkTraitsResourceSlotResource;1789    } & Struct;1790    readonly isRemoveResource: boolean;1791    readonly asRemoveResource: {1792      readonly rmrkCollectionId: u32;1793      readonly nftId: u32;1794      readonly resourceId: u32;1795    } & Struct;1796    readonly type: 'CreateCollection' | 'DestroyCollection' | 'ChangeCollectionIssuer' | 'LockCollection' | 'MintNft' | 'BurnNft' | 'Send' | 'AcceptNft' | 'RejectNft' | 'AcceptResource' | 'AcceptResourceRemoval' | 'SetProperty' | 'SetPriority' | 'AddBasicResource' | 'AddComposableResource' | 'AddSlotResource' | 'RemoveResource';1797  }17981799  /** @name RmrkTraitsResourceResourceTypes (217) */1800  export interface RmrkTraitsResourceResourceTypes extends Enum {1801    readonly isBasic: boolean;1802    readonly asBasic: RmrkTraitsResourceBasicResource;1803    readonly isComposable: boolean;1804    readonly asComposable: RmrkTraitsResourceComposableResource;1805    readonly isSlot: boolean;1806    readonly asSlot: RmrkTraitsResourceSlotResource;1807    readonly type: 'Basic' | 'Composable' | 'Slot';1808  }18091810  /** @name RmrkTraitsResourceBasicResource (219) */1811  export interface RmrkTraitsResourceBasicResource extends Struct {1812    readonly src: Option<Bytes>;1813    readonly metadata: Option<Bytes>;1814    readonly license: Option<Bytes>;1815    readonly thumb: Option<Bytes>;1816  }18171818  /** @name RmrkTraitsResourceComposableResource (221) */1819  export interface RmrkTraitsResourceComposableResource extends Struct {1820    readonly parts: Vec<u32>;1821    readonly base: u32;1822    readonly src: Option<Bytes>;1823    readonly metadata: Option<Bytes>;1824    readonly license: Option<Bytes>;1825    readonly thumb: Option<Bytes>;1826  }18271828  /** @name RmrkTraitsResourceSlotResource (222) */1829  export interface RmrkTraitsResourceSlotResource extends Struct {1830    readonly base: u32;1831    readonly src: Option<Bytes>;1832    readonly metadata: Option<Bytes>;1833    readonly slot: u32;1834    readonly license: Option<Bytes>;1835    readonly thumb: Option<Bytes>;1836  }18371838  /** @name RmrkTraitsNftAccountIdOrCollectionNftTuple (224) */1839  export interface RmrkTraitsNftAccountIdOrCollectionNftTuple extends Enum {1840    readonly isAccountId: boolean;1841    readonly asAccountId: AccountId32;1842    readonly isCollectionAndNftTuple: boolean;1843    readonly asCollectionAndNftTuple: ITuple<[u32, u32]>;1844    readonly type: 'AccountId' | 'CollectionAndNftTuple';1845  }18461847  /** @name PalletRmrkEquipCall (228) */1848  export interface PalletRmrkEquipCall extends Enum {1849    readonly isCreateBase: boolean;1850    readonly asCreateBase: {1851      readonly baseType: Bytes;1852      readonly symbol: Bytes;1853      readonly parts: Vec<RmrkTraitsPartPartType>;1854    } & Struct;1855    readonly isThemeAdd: boolean;1856    readonly asThemeAdd: {1857      readonly baseId: u32;1858      readonly theme: RmrkTraitsTheme;1859    } & Struct;1860    readonly type: 'CreateBase' | 'ThemeAdd';1861  }18621863  /** @name RmrkTraitsPartPartType (230) */1864  export interface RmrkTraitsPartPartType extends Enum {1865    readonly isFixedPart: boolean;1866    readonly asFixedPart: RmrkTraitsPartFixedPart;1867    readonly isSlotPart: boolean;1868    readonly asSlotPart: RmrkTraitsPartSlotPart;1869    readonly type: 'FixedPart' | 'SlotPart';1870  }18711872  /** @name RmrkTraitsPartFixedPart (232) */1873  export interface RmrkTraitsPartFixedPart extends Struct {1874    readonly id: u32;1875    readonly z: u32;1876    readonly src: Bytes;1877  }18781879  /** @name RmrkTraitsPartSlotPart (233) */1880  export interface RmrkTraitsPartSlotPart extends Struct {1881    readonly id: u32;1882    readonly equippable: RmrkTraitsPartEquippableList;1883    readonly src: Bytes;1884    readonly z: u32;1885  }18861887  /** @name RmrkTraitsPartEquippableList (234) */1888  export interface RmrkTraitsPartEquippableList extends Enum {1889    readonly isAll: boolean;1890    readonly isEmpty: boolean;1891    readonly isCustom: boolean;1892    readonly asCustom: Vec<u32>;1893    readonly type: 'All' | 'Empty' | 'Custom';1894  }18951896  /** @name RmrkTraitsTheme (236) */1897  export interface RmrkTraitsTheme extends Struct {1898    readonly name: Bytes;1899    readonly properties: Vec<RmrkTraitsThemeThemeProperty>;1900    readonly inherit: bool;1901  }19021903  /** @name RmrkTraitsThemeThemeProperty (238) */1904  export interface RmrkTraitsThemeThemeProperty extends Struct {1905    readonly key: Bytes;1906    readonly value: Bytes;1907  }19081909  /** @name PalletEvmCall (239) */1910  export interface PalletEvmCall extends Enum {1911    readonly isWithdraw: boolean;1912    readonly asWithdraw: {1913      readonly address: H160;1914      readonly value: u128;1915    } & Struct;1916    readonly isCall: boolean;1917    readonly asCall: {1918      readonly source: H160;1919      readonly target: H160;1920      readonly input: Bytes;1921      readonly value: U256;1922      readonly gasLimit: u64;1923      readonly maxFeePerGas: U256;1924      readonly maxPriorityFeePerGas: Option<U256>;1925      readonly nonce: Option<U256>;1926      readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;1927    } & Struct;1928    readonly isCreate: boolean;1929    readonly asCreate: {1930      readonly source: H160;1931      readonly init: Bytes;1932      readonly value: U256;1933      readonly gasLimit: u64;1934      readonly maxFeePerGas: U256;1935      readonly maxPriorityFeePerGas: Option<U256>;1936      readonly nonce: Option<U256>;1937      readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;1938    } & Struct;1939    readonly isCreate2: boolean;1940    readonly asCreate2: {1941      readonly source: H160;1942      readonly init: Bytes;1943      readonly salt: H256;1944      readonly value: U256;1945      readonly gasLimit: u64;1946      readonly maxFeePerGas: U256;1947      readonly maxPriorityFeePerGas: Option<U256>;1948      readonly nonce: Option<U256>;1949      readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;1950    } & Struct;1951    readonly type: 'Withdraw' | 'Call' | 'Create' | 'Create2';1952  }19531954  /** @name PalletEthereumCall (245) */1955  export interface PalletEthereumCall extends Enum {1956    readonly isTransact: boolean;1957    readonly asTransact: {1958      readonly transaction: EthereumTransactionTransactionV2;1959    } & Struct;1960    readonly type: 'Transact';1961  }19621963  /** @name EthereumTransactionTransactionV2 (246) */1964  export interface EthereumTransactionTransactionV2 extends Enum {1965    readonly isLegacy: boolean;1966    readonly asLegacy: EthereumTransactionLegacyTransaction;1967    readonly isEip2930: boolean;1968    readonly asEip2930: EthereumTransactionEip2930Transaction;1969    readonly isEip1559: boolean;1970    readonly asEip1559: EthereumTransactionEip1559Transaction;1971    readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';1972  }19731974  /** @name EthereumTransactionLegacyTransaction (247) */1975  export interface EthereumTransactionLegacyTransaction extends Struct {1976    readonly nonce: U256;1977    readonly gasPrice: U256;1978    readonly gasLimit: U256;1979    readonly action: EthereumTransactionTransactionAction;1980    readonly value: U256;1981    readonly input: Bytes;1982    readonly signature: EthereumTransactionTransactionSignature;1983  }19841985  /** @name EthereumTransactionTransactionAction (248) */1986  export interface EthereumTransactionTransactionAction extends Enum {1987    readonly isCall: boolean;1988    readonly asCall: H160;1989    readonly isCreate: boolean;1990    readonly type: 'Call' | 'Create';1991  }19921993  /** @name EthereumTransactionTransactionSignature (249) */1994  export interface EthereumTransactionTransactionSignature extends Struct {1995    readonly v: u64;1996    readonly r: H256;1997    readonly s: H256;1998  }19992000  /** @name EthereumTransactionEip2930Transaction (251) */2001  export interface EthereumTransactionEip2930Transaction extends Struct {2002    readonly chainId: u64;2003    readonly nonce: U256;2004    readonly gasPrice: U256;2005    readonly gasLimit: U256;2006    readonly action: EthereumTransactionTransactionAction;2007    readonly value: U256;2008    readonly input: Bytes;2009    readonly accessList: Vec<EthereumTransactionAccessListItem>;2010    readonly oddYParity: bool;2011    readonly r: H256;2012    readonly s: H256;2013  }20142015  /** @name EthereumTransactionAccessListItem (253) */2016  export interface EthereumTransactionAccessListItem extends Struct {2017    readonly address: H160;2018    readonly storageKeys: Vec<H256>;2019  }20202021  /** @name EthereumTransactionEip1559Transaction (254) */2022  export interface EthereumTransactionEip1559Transaction extends Struct {2023    readonly chainId: u64;2024    readonly nonce: U256;2025    readonly maxPriorityFeePerGas: U256;2026    readonly maxFeePerGas: U256;2027    readonly gasLimit: U256;2028    readonly action: EthereumTransactionTransactionAction;2029    readonly value: U256;2030    readonly input: Bytes;2031    readonly accessList: Vec<EthereumTransactionAccessListItem>;2032    readonly oddYParity: bool;2033    readonly r: H256;2034    readonly s: H256;2035  }20362037  /** @name PalletEvmMigrationCall (255) */2038  export interface PalletEvmMigrationCall extends Enum {2039    readonly isBegin: boolean;2040    readonly asBegin: {2041      readonly address: H160;2042    } & Struct;2043    readonly isSetData: boolean;2044    readonly asSetData: {2045      readonly address: H160;2046      readonly data: Vec<ITuple<[H256, H256]>>;2047    } & Struct;2048    readonly isFinish: boolean;2049    readonly asFinish: {2050      readonly address: H160;2051      readonly code: Bytes;2052    } & Struct;2053    readonly type: 'Begin' | 'SetData' | 'Finish';2054  }20552056  /** @name PalletSudoEvent (258) */2057  export interface PalletSudoEvent extends Enum {2058    readonly isSudid: boolean;2059    readonly asSudid: {2060      readonly sudoResult: Result<Null, SpRuntimeDispatchError>;2061    } & Struct;2062    readonly isKeyChanged: boolean;2063    readonly asKeyChanged: {2064      readonly oldSudoer: Option<AccountId32>;2065    } & Struct;2066    readonly isSudoAsDone: boolean;2067    readonly asSudoAsDone: {2068      readonly sudoResult: Result<Null, SpRuntimeDispatchError>;2069    } & Struct;2070    readonly type: 'Sudid' | 'KeyChanged' | 'SudoAsDone';2071  }20722073  /** @name SpRuntimeDispatchError (260) */2074  export interface SpRuntimeDispatchError extends Enum {2075    readonly isOther: boolean;2076    readonly isCannotLookup: boolean;2077    readonly isBadOrigin: boolean;2078    readonly isModule: boolean;2079    readonly asModule: SpRuntimeModuleError;2080    readonly isConsumerRemaining: boolean;2081    readonly isNoProviders: boolean;2082    readonly isTooManyConsumers: boolean;2083    readonly isToken: boolean;2084    readonly asToken: SpRuntimeTokenError;2085    readonly isArithmetic: boolean;2086    readonly asArithmetic: SpRuntimeArithmeticError;2087    readonly isTransactional: boolean;2088    readonly asTransactional: SpRuntimeTransactionalError;2089    readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional';2090  }20912092  /** @name SpRuntimeModuleError (261) */2093  export interface SpRuntimeModuleError extends Struct {2094    readonly index: u8;2095    readonly error: U8aFixed;2096  }20972098  /** @name SpRuntimeTokenError (262) */2099  export interface SpRuntimeTokenError extends Enum {2100    readonly isNoFunds: boolean;2101    readonly isWouldDie: boolean;2102    readonly isBelowMinimum: boolean;2103    readonly isCannotCreate: boolean;2104    readonly isUnknownAsset: boolean;2105    readonly isFrozen: boolean;2106    readonly isUnsupported: boolean;2107    readonly type: 'NoFunds' | 'WouldDie' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported';2108  }21092110  /** @name SpRuntimeArithmeticError (263) */2111  export interface SpRuntimeArithmeticError extends Enum {2112    readonly isUnderflow: boolean;2113    readonly isOverflow: boolean;2114    readonly isDivisionByZero: boolean;2115    readonly type: 'Underflow' | 'Overflow' | 'DivisionByZero';2116  }21172118  /** @name SpRuntimeTransactionalError (264) */2119  export interface SpRuntimeTransactionalError extends Enum {2120    readonly isLimitReached: boolean;2121    readonly isNoLayer: boolean;2122    readonly type: 'LimitReached' | 'NoLayer';2123  }21242125  /** @name PalletSudoError (265) */2126  export interface PalletSudoError extends Enum {2127    readonly isRequireSudo: boolean;2128    readonly type: 'RequireSudo';2129  }21302131  /** @name FrameSystemAccountInfo (266) */2132  export interface FrameSystemAccountInfo extends Struct {2133    readonly nonce: u32;2134    readonly consumers: u32;2135    readonly providers: u32;2136    readonly sufficients: u32;2137    readonly data: PalletBalancesAccountData;2138  }21392140  /** @name FrameSupportWeightsPerDispatchClassU64 (267) */2141  export interface FrameSupportWeightsPerDispatchClassU64 extends Struct {2142    readonly normal: u64;2143    readonly operational: u64;2144    readonly mandatory: u64;2145  }21462147  /** @name SpRuntimeDigest (268) */2148  export interface SpRuntimeDigest extends Struct {2149    readonly logs: Vec<SpRuntimeDigestDigestItem>;2150  }21512152  /** @name SpRuntimeDigestDigestItem (270) */2153  export interface SpRuntimeDigestDigestItem extends Enum {2154    readonly isOther: boolean;2155    readonly asOther: Bytes;2156    readonly isConsensus: boolean;2157    readonly asConsensus: ITuple<[U8aFixed, Bytes]>;2158    readonly isSeal: boolean;2159    readonly asSeal: ITuple<[U8aFixed, Bytes]>;2160    readonly isPreRuntime: boolean;2161    readonly asPreRuntime: ITuple<[U8aFixed, Bytes]>;2162    readonly isRuntimeEnvironmentUpdated: boolean;2163    readonly type: 'Other' | 'Consensus' | 'Seal' | 'PreRuntime' | 'RuntimeEnvironmentUpdated';2164  }21652166  /** @name FrameSystemEventRecord (272) */2167  export interface FrameSystemEventRecord extends Struct {2168    readonly phase: FrameSystemPhase;2169    readonly event: Event;2170    readonly topics: Vec<H256>;2171  }21722173  /** @name FrameSystemEvent (274) */2174  export interface FrameSystemEvent extends Enum {2175    readonly isExtrinsicSuccess: boolean;2176    readonly asExtrinsicSuccess: {2177      readonly dispatchInfo: FrameSupportWeightsDispatchInfo;2178    } & Struct;2179    readonly isExtrinsicFailed: boolean;2180    readonly asExtrinsicFailed: {2181      readonly dispatchError: SpRuntimeDispatchError;2182      readonly dispatchInfo: FrameSupportWeightsDispatchInfo;2183    } & Struct;2184    readonly isCodeUpdated: boolean;2185    readonly isNewAccount: boolean;2186    readonly asNewAccount: {2187      readonly account: AccountId32;2188    } & Struct;2189    readonly isKilledAccount: boolean;2190    readonly asKilledAccount: {2191      readonly account: AccountId32;2192    } & Struct;2193    readonly isRemarked: boolean;2194    readonly asRemarked: {2195      readonly sender: AccountId32;2196      readonly hash_: H256;2197    } & Struct;2198    readonly type: 'ExtrinsicSuccess' | 'ExtrinsicFailed' | 'CodeUpdated' | 'NewAccount' | 'KilledAccount' | 'Remarked';2199  }22002201  /** @name FrameSupportWeightsDispatchInfo (275) */2202  export interface FrameSupportWeightsDispatchInfo extends Struct {2203    readonly weight: u64;2204    readonly class: FrameSupportWeightsDispatchClass;2205    readonly paysFee: FrameSupportWeightsPays;2206  }22072208  /** @name FrameSupportWeightsDispatchClass (276) */2209  export interface FrameSupportWeightsDispatchClass extends Enum {2210    readonly isNormal: boolean;2211    readonly isOperational: boolean;2212    readonly isMandatory: boolean;2213    readonly type: 'Normal' | 'Operational' | 'Mandatory';2214  }22152216  /** @name FrameSupportWeightsPays (277) */2217  export interface FrameSupportWeightsPays extends Enum {2218    readonly isYes: boolean;2219    readonly isNo: boolean;2220    readonly type: 'Yes' | 'No';2221  }22222223  /** @name OrmlVestingModuleEvent (278) */2224  export interface OrmlVestingModuleEvent extends Enum {2225    readonly isVestingScheduleAdded: boolean;2226    readonly asVestingScheduleAdded: {2227      readonly from: AccountId32;2228      readonly to: AccountId32;2229      readonly vestingSchedule: OrmlVestingVestingSchedule;2230    } & Struct;2231    readonly isClaimed: boolean;2232    readonly asClaimed: {2233      readonly who: AccountId32;2234      readonly amount: u128;2235    } & Struct;2236    readonly isVestingSchedulesUpdated: boolean;2237    readonly asVestingSchedulesUpdated: {2238      readonly who: AccountId32;2239    } & Struct;2240    readonly type: 'VestingScheduleAdded' | 'Claimed' | 'VestingSchedulesUpdated';2241  }22422243  /** @name CumulusPalletXcmpQueueEvent (279) */2244  export interface CumulusPalletXcmpQueueEvent extends Enum {2245    readonly isSuccess: boolean;2246    readonly asSuccess: Option<H256>;2247    readonly isFail: boolean;2248    readonly asFail: ITuple<[Option<H256>, XcmV2TraitsError]>;2249    readonly isBadVersion: boolean;2250    readonly asBadVersion: Option<H256>;2251    readonly isBadFormat: boolean;2252    readonly asBadFormat: Option<H256>;2253    readonly isUpwardMessageSent: boolean;2254    readonly asUpwardMessageSent: Option<H256>;2255    readonly isXcmpMessageSent: boolean;2256    readonly asXcmpMessageSent: Option<H256>;2257    readonly isOverweightEnqueued: boolean;2258    readonly asOverweightEnqueued: ITuple<[u32, u32, u64, u64]>;2259    readonly isOverweightServiced: boolean;2260    readonly asOverweightServiced: ITuple<[u64, u64]>;2261    readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'UpwardMessageSent' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced';2262  }22632264  /** @name PalletXcmEvent (280) */2265  export interface PalletXcmEvent extends Enum {2266    readonly isAttempted: boolean;2267    readonly asAttempted: XcmV2TraitsOutcome;2268    readonly isSent: boolean;2269    readonly asSent: ITuple<[XcmV1MultiLocation, XcmV1MultiLocation, XcmV2Xcm]>;2270    readonly isUnexpectedResponse: boolean;2271    readonly asUnexpectedResponse: ITuple<[XcmV1MultiLocation, u64]>;2272    readonly isResponseReady: boolean;2273    readonly asResponseReady: ITuple<[u64, XcmV2Response]>;2274    readonly isNotified: boolean;2275    readonly asNotified: ITuple<[u64, u8, u8]>;2276    readonly isNotifyOverweight: boolean;2277    readonly asNotifyOverweight: ITuple<[u64, u8, u8, u64, u64]>;2278    readonly isNotifyDispatchError: boolean;2279    readonly asNotifyDispatchError: ITuple<[u64, u8, u8]>;2280    readonly isNotifyDecodeFailed: boolean;2281    readonly asNotifyDecodeFailed: ITuple<[u64, u8, u8]>;2282    readonly isInvalidResponder: boolean;2283    readonly asInvalidResponder: ITuple<[XcmV1MultiLocation, u64, Option<XcmV1MultiLocation>]>;2284    readonly isInvalidResponderVersion: boolean;2285    readonly asInvalidResponderVersion: ITuple<[XcmV1MultiLocation, u64]>;2286    readonly isResponseTaken: boolean;2287    readonly asResponseTaken: u64;2288    readonly isAssetsTrapped: boolean;2289    readonly asAssetsTrapped: ITuple<[H256, XcmV1MultiLocation, XcmVersionedMultiAssets]>;2290    readonly isVersionChangeNotified: boolean;2291    readonly asVersionChangeNotified: ITuple<[XcmV1MultiLocation, u32]>;2292    readonly isSupportedVersionChanged: boolean;2293    readonly asSupportedVersionChanged: ITuple<[XcmV1MultiLocation, u32]>;2294    readonly isNotifyTargetSendFail: boolean;2295    readonly asNotifyTargetSendFail: ITuple<[XcmV1MultiLocation, u64, XcmV2TraitsError]>;2296    readonly isNotifyTargetMigrationFail: boolean;2297    readonly asNotifyTargetMigrationFail: ITuple<[XcmVersionedMultiLocation, u64]>;2298    readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail';2299  }23002301  /** @name XcmV2TraitsOutcome (281) */2302  export interface XcmV2TraitsOutcome extends Enum {2303    readonly isComplete: boolean;2304    readonly asComplete: u64;2305    readonly isIncomplete: boolean;2306    readonly asIncomplete: ITuple<[u64, XcmV2TraitsError]>;2307    readonly isError: boolean;2308    readonly asError: XcmV2TraitsError;2309    readonly type: 'Complete' | 'Incomplete' | 'Error';2310  }23112312  /** @name CumulusPalletXcmEvent (283) */2313  export interface CumulusPalletXcmEvent extends Enum {2314    readonly isInvalidFormat: boolean;2315    readonly asInvalidFormat: U8aFixed;2316    readonly isUnsupportedVersion: boolean;2317    readonly asUnsupportedVersion: U8aFixed;2318    readonly isExecutedDownward: boolean;2319    readonly asExecutedDownward: ITuple<[U8aFixed, XcmV2TraitsOutcome]>;2320    readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward';2321  }23222323  /** @name CumulusPalletDmpQueueEvent (284) */2324  export interface CumulusPalletDmpQueueEvent extends Enum {2325    readonly isInvalidFormat: boolean;2326    readonly asInvalidFormat: U8aFixed;2327    readonly isUnsupportedVersion: boolean;2328    readonly asUnsupportedVersion: U8aFixed;2329    readonly isExecutedDownward: boolean;2330    readonly asExecutedDownward: ITuple<[U8aFixed, XcmV2TraitsOutcome]>;2331    readonly isWeightExhausted: boolean;2332    readonly asWeightExhausted: ITuple<[U8aFixed, u64, u64]>;2333    readonly isOverweightEnqueued: boolean;2334    readonly asOverweightEnqueued: ITuple<[U8aFixed, u64, u64]>;2335    readonly isOverweightServiced: boolean;2336    readonly asOverweightServiced: ITuple<[u64, u64]>;2337    readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced';2338  }23392340  /** @name PalletUniqueRawEvent (285) */2341  export interface PalletUniqueRawEvent extends Enum {2342    readonly isCollectionSponsorRemoved: boolean;2343    readonly asCollectionSponsorRemoved: u32;2344    readonly isCollectionAdminAdded: boolean;2345    readonly asCollectionAdminAdded: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;2346    readonly isCollectionOwnedChanged: boolean;2347    readonly asCollectionOwnedChanged: ITuple<[u32, AccountId32]>;2348    readonly isCollectionSponsorSet: boolean;2349    readonly asCollectionSponsorSet: ITuple<[u32, AccountId32]>;2350    readonly isSponsorshipConfirmed: boolean;2351    readonly asSponsorshipConfirmed: ITuple<[u32, AccountId32]>;2352    readonly isCollectionAdminRemoved: boolean;2353    readonly asCollectionAdminRemoved: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;2354    readonly isAllowListAddressRemoved: boolean;2355    readonly asAllowListAddressRemoved: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;2356    readonly isAllowListAddressAdded: boolean;2357    readonly asAllowListAddressAdded: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;2358    readonly isCollectionLimitSet: boolean;2359    readonly asCollectionLimitSet: u32;2360    readonly isCollectionPermissionSet: boolean;2361    readonly asCollectionPermissionSet: u32;2362    readonly type: 'CollectionSponsorRemoved' | 'CollectionAdminAdded' | 'CollectionOwnedChanged' | 'CollectionSponsorSet' | 'SponsorshipConfirmed' | 'CollectionAdminRemoved' | 'AllowListAddressRemoved' | 'AllowListAddressAdded' | 'CollectionLimitSet' | 'CollectionPermissionSet';2363  }23642365  /** @name PalletUniqueSchedulerEvent (286) */2366  export interface PalletUniqueSchedulerEvent extends Enum {2367    readonly isScheduled: boolean;2368    readonly asScheduled: {2369      readonly when: u32;2370      readonly index: u32;2371    } & Struct;2372    readonly isCanceled: boolean;2373    readonly asCanceled: {2374      readonly when: u32;2375      readonly index: u32;2376    } & Struct;2377    readonly isDispatched: boolean;2378    readonly asDispatched: {2379      readonly task: ITuple<[u32, u32]>;2380      readonly id: Option<U8aFixed>;2381      readonly result: Result<Null, SpRuntimeDispatchError>;2382    } & Struct;2383    readonly isCallLookupFailed: boolean;2384    readonly asCallLookupFailed: {2385      readonly task: ITuple<[u32, u32]>;2386      readonly id: Option<U8aFixed>;2387      readonly error: FrameSupportScheduleLookupError;2388    } & Struct;2389    readonly type: 'Scheduled' | 'Canceled' | 'Dispatched' | 'CallLookupFailed';2390  }23912392  /** @name FrameSupportScheduleLookupError (288) */2393  export interface FrameSupportScheduleLookupError extends Enum {2394    readonly isUnknown: boolean;2395    readonly isBadFormat: boolean;2396    readonly type: 'Unknown' | 'BadFormat';2397  }23982399  /** @name PalletCommonEvent (289) */2400  export interface PalletCommonEvent extends Enum {2401    readonly isCollectionCreated: boolean;2402    readonly asCollectionCreated: ITuple<[u32, u8, AccountId32]>;2403    readonly isCollectionDestroyed: boolean;2404    readonly asCollectionDestroyed: u32;2405    readonly isItemCreated: boolean;2406    readonly asItemCreated: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;2407    readonly isItemDestroyed: boolean;2408    readonly asItemDestroyed: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;2409    readonly isTransfer: boolean;2410    readonly asTransfer: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;2411    readonly isApproved: boolean;2412    readonly asApproved: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;2413    readonly isCollectionPropertySet: boolean;2414    readonly asCollectionPropertySet: ITuple<[u32, Bytes]>;2415    readonly isCollectionPropertyDeleted: boolean;2416    readonly asCollectionPropertyDeleted: ITuple<[u32, Bytes]>;2417    readonly isTokenPropertySet: boolean;2418    readonly asTokenPropertySet: ITuple<[u32, u32, Bytes]>;2419    readonly isTokenPropertyDeleted: boolean;2420    readonly asTokenPropertyDeleted: ITuple<[u32, u32, Bytes]>;2421    readonly isPropertyPermissionSet: boolean;2422    readonly asPropertyPermissionSet: ITuple<[u32, Bytes]>;2423    readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'ItemCreated' | 'ItemDestroyed' | 'Transfer' | 'Approved' | 'CollectionPropertySet' | 'CollectionPropertyDeleted' | 'TokenPropertySet' | 'TokenPropertyDeleted' | 'PropertyPermissionSet';2424  }24252426  /** @name PalletStructureEvent (290) */2427  export interface PalletStructureEvent extends Enum {2428    readonly isExecuted: boolean;2429    readonly asExecuted: Result<Null, SpRuntimeDispatchError>;2430    readonly type: 'Executed';2431  }24322433  /** @name PalletRmrkCoreEvent (291) */2434  export interface PalletRmrkCoreEvent extends Enum {2435    readonly isCollectionCreated: boolean;2436    readonly asCollectionCreated: {2437      readonly issuer: AccountId32;2438      readonly collectionId: u32;2439    } & Struct;2440    readonly isCollectionDestroyed: boolean;2441    readonly asCollectionDestroyed: {2442      readonly issuer: AccountId32;2443      readonly collectionId: u32;2444    } & Struct;2445    readonly isIssuerChanged: boolean;2446    readonly asIssuerChanged: {2447      readonly oldIssuer: AccountId32;2448      readonly newIssuer: AccountId32;2449      readonly collectionId: u32;2450    } & Struct;2451    readonly isCollectionLocked: boolean;2452    readonly asCollectionLocked: {2453      readonly issuer: AccountId32;2454      readonly collectionId: u32;2455    } & Struct;2456    readonly isNftMinted: boolean;2457    readonly asNftMinted: {2458      readonly owner: AccountId32;2459      readonly collectionId: u32;2460      readonly nftId: u32;2461    } & Struct;2462    readonly isNftBurned: boolean;2463    readonly asNftBurned: {2464      readonly owner: AccountId32;2465      readonly nftId: u32;2466    } & Struct;2467    readonly isNftSent: boolean;2468    readonly asNftSent: {2469      readonly sender: AccountId32;2470      readonly recipient: RmrkTraitsNftAccountIdOrCollectionNftTuple;2471      readonly collectionId: u32;2472      readonly nftId: u32;2473      readonly approvalRequired: bool;2474    } & Struct;2475    readonly isNftAccepted: boolean;2476    readonly asNftAccepted: {2477      readonly sender: AccountId32;2478      readonly recipient: RmrkTraitsNftAccountIdOrCollectionNftTuple;2479      readonly collectionId: u32;2480      readonly nftId: u32;2481    } & Struct;2482    readonly isNftRejected: boolean;2483    readonly asNftRejected: {2484      readonly sender: AccountId32;2485      readonly collectionId: u32;2486      readonly nftId: u32;2487    } & Struct;2488    readonly isPropertySet: boolean;2489    readonly asPropertySet: {2490      readonly collectionId: u32;2491      readonly maybeNftId: Option<u32>;2492      readonly key: Bytes;2493      readonly value: Bytes;2494    } & Struct;2495    readonly isResourceAdded: boolean;2496    readonly asResourceAdded: {2497      readonly nftId: u32;2498      readonly resourceId: u32;2499    } & Struct;2500    readonly isResourceRemoval: boolean;2501    readonly asResourceRemoval: {2502      readonly nftId: u32;2503      readonly resourceId: u32;2504    } & Struct;2505    readonly isResourceAccepted: boolean;2506    readonly asResourceAccepted: {2507      readonly nftId: u32;2508      readonly resourceId: u32;2509    } & Struct;2510    readonly isResourceRemovalAccepted: boolean;2511    readonly asResourceRemovalAccepted: {2512      readonly nftId: u32;2513      readonly resourceId: u32;2514    } & Struct;2515    readonly isPrioritySet: boolean;2516    readonly asPrioritySet: {2517      readonly collectionId: u32;2518      readonly nftId: u32;2519    } & Struct;2520    readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'IssuerChanged' | 'CollectionLocked' | 'NftMinted' | 'NftBurned' | 'NftSent' | 'NftAccepted' | 'NftRejected' | 'PropertySet' | 'ResourceAdded' | 'ResourceRemoval' | 'ResourceAccepted' | 'ResourceRemovalAccepted' | 'PrioritySet';2521  }25222523  /** @name PalletRmrkEquipEvent (292) */2524  export interface PalletRmrkEquipEvent extends Enum {2525    readonly isBaseCreated: boolean;2526    readonly asBaseCreated: {2527      readonly issuer: AccountId32;2528      readonly baseId: u32;2529    } & Struct;2530    readonly type: 'BaseCreated';2531  }25322533  /** @name PalletEvmEvent (293) */2534  export interface PalletEvmEvent extends Enum {2535    readonly isLog: boolean;2536    readonly asLog: EthereumLog;2537    readonly isCreated: boolean;2538    readonly asCreated: H160;2539    readonly isCreatedFailed: boolean;2540    readonly asCreatedFailed: H160;2541    readonly isExecuted: boolean;2542    readonly asExecuted: H160;2543    readonly isExecutedFailed: boolean;2544    readonly asExecutedFailed: H160;2545    readonly isBalanceDeposit: boolean;2546    readonly asBalanceDeposit: ITuple<[AccountId32, H160, U256]>;2547    readonly isBalanceWithdraw: boolean;2548    readonly asBalanceWithdraw: ITuple<[AccountId32, H160, U256]>;2549    readonly type: 'Log' | 'Created' | 'CreatedFailed' | 'Executed' | 'ExecutedFailed' | 'BalanceDeposit' | 'BalanceWithdraw';2550  }25512552  /** @name EthereumLog (294) */2553  export interface EthereumLog extends Struct {2554    readonly address: H160;2555    readonly topics: Vec<H256>;2556    readonly data: Bytes;2557  }25582559  /** @name PalletEthereumEvent (295) */2560  export interface PalletEthereumEvent extends Enum {2561    readonly isExecuted: boolean;2562    readonly asExecuted: ITuple<[H160, H160, H256, EvmCoreErrorExitReason]>;2563    readonly type: 'Executed';2564  }25652566  /** @name EvmCoreErrorExitReason (296) */2567  export interface EvmCoreErrorExitReason extends Enum {2568    readonly isSucceed: boolean;2569    readonly asSucceed: EvmCoreErrorExitSucceed;2570    readonly isError: boolean;2571    readonly asError: EvmCoreErrorExitError;2572    readonly isRevert: boolean;2573    readonly asRevert: EvmCoreErrorExitRevert;2574    readonly isFatal: boolean;2575    readonly asFatal: EvmCoreErrorExitFatal;2576    readonly type: 'Succeed' | 'Error' | 'Revert' | 'Fatal';2577  }25782579  /** @name EvmCoreErrorExitSucceed (297) */2580  export interface EvmCoreErrorExitSucceed extends Enum {2581    readonly isStopped: boolean;2582    readonly isReturned: boolean;2583    readonly isSuicided: boolean;2584    readonly type: 'Stopped' | 'Returned' | 'Suicided';2585  }25862587  /** @name EvmCoreErrorExitError (298) */2588  export interface EvmCoreErrorExitError extends Enum {2589    readonly isStackUnderflow: boolean;2590    readonly isStackOverflow: boolean;2591    readonly isInvalidJump: boolean;2592    readonly isInvalidRange: boolean;2593    readonly isDesignatedInvalid: boolean;2594    readonly isCallTooDeep: boolean;2595    readonly isCreateCollision: boolean;2596    readonly isCreateContractLimit: boolean;2597    readonly isOutOfOffset: boolean;2598    readonly isOutOfGas: boolean;2599    readonly isOutOfFund: boolean;2600    readonly isPcUnderflow: boolean;2601    readonly isCreateEmpty: boolean;2602    readonly isOther: boolean;2603    readonly asOther: Text;2604    readonly isInvalidCode: boolean;2605    readonly type: 'StackUnderflow' | 'StackOverflow' | 'InvalidJump' | 'InvalidRange' | 'DesignatedInvalid' | 'CallTooDeep' | 'CreateCollision' | 'CreateContractLimit' | 'OutOfOffset' | 'OutOfGas' | 'OutOfFund' | 'PcUnderflow' | 'CreateEmpty' | 'Other' | 'InvalidCode';2606  }26072608  /** @name EvmCoreErrorExitRevert (301) */2609  export interface EvmCoreErrorExitRevert extends Enum {2610    readonly isReverted: boolean;2611    readonly type: 'Reverted';2612  }26132614  /** @name EvmCoreErrorExitFatal (302) */2615  export interface EvmCoreErrorExitFatal extends Enum {2616    readonly isNotSupported: boolean;2617    readonly isUnhandledInterrupt: boolean;2618    readonly isCallErrorAsFatal: boolean;2619    readonly asCallErrorAsFatal: EvmCoreErrorExitError;2620    readonly isOther: boolean;2621    readonly asOther: Text;2622    readonly type: 'NotSupported' | 'UnhandledInterrupt' | 'CallErrorAsFatal' | 'Other';2623  }26242625  /** @name FrameSystemPhase (303) */2626  export interface FrameSystemPhase extends Enum {2627    readonly isApplyExtrinsic: boolean;2628    readonly asApplyExtrinsic: u32;2629    readonly isFinalization: boolean;2630    readonly isInitialization: boolean;2631    readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization';2632  }26332634  /** @name FrameSystemLastRuntimeUpgradeInfo (305) */2635  export interface FrameSystemLastRuntimeUpgradeInfo extends Struct {2636    readonly specVersion: Compact<u32>;2637    readonly specName: Text;2638  }26392640  /** @name FrameSystemLimitsBlockWeights (306) */2641  export interface FrameSystemLimitsBlockWeights extends Struct {2642    readonly baseBlock: u64;2643    readonly maxBlock: u64;2644    readonly perClass: FrameSupportWeightsPerDispatchClassWeightsPerClass;2645  }26462647  /** @name FrameSupportWeightsPerDispatchClassWeightsPerClass (307) */2648  export interface FrameSupportWeightsPerDispatchClassWeightsPerClass extends Struct {2649    readonly normal: FrameSystemLimitsWeightsPerClass;2650    readonly operational: FrameSystemLimitsWeightsPerClass;2651    readonly mandatory: FrameSystemLimitsWeightsPerClass;2652  }26532654  /** @name FrameSystemLimitsWeightsPerClass (308) */2655  export interface FrameSystemLimitsWeightsPerClass extends Struct {2656    readonly baseExtrinsic: u64;2657    readonly maxExtrinsic: Option<u64>;2658    readonly maxTotal: Option<u64>;2659    readonly reserved: Option<u64>;2660  }26612662  /** @name FrameSystemLimitsBlockLength (310) */2663  export interface FrameSystemLimitsBlockLength extends Struct {2664    readonly max: FrameSupportWeightsPerDispatchClassU32;2665  }26662667  /** @name FrameSupportWeightsPerDispatchClassU32 (311) */2668  export interface FrameSupportWeightsPerDispatchClassU32 extends Struct {2669    readonly normal: u32;2670    readonly operational: u32;2671    readonly mandatory: u32;2672  }26732674  /** @name FrameSupportWeightsRuntimeDbWeight (312) */2675  export interface FrameSupportWeightsRuntimeDbWeight extends Struct {2676    readonly read: u64;2677    readonly write: u64;2678  }26792680  /** @name SpVersionRuntimeVersion (313) */2681  export interface SpVersionRuntimeVersion extends Struct {2682    readonly specName: Text;2683    readonly implName: Text;2684    readonly authoringVersion: u32;2685    readonly specVersion: u32;2686    readonly implVersion: u32;2687    readonly apis: Vec<ITuple<[U8aFixed, u32]>>;2688    readonly transactionVersion: u32;2689    readonly stateVersion: u8;2690  }26912692  /** @name FrameSystemError (317) */2693  export interface FrameSystemError extends Enum {2694    readonly isInvalidSpecName: boolean;2695    readonly isSpecVersionNeedsToIncrease: boolean;2696    readonly isFailedToExtractRuntimeVersion: boolean;2697    readonly isNonDefaultComposite: boolean;2698    readonly isNonZeroRefCount: boolean;2699    readonly isCallFiltered: boolean;2700    readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered';2701  }27022703  /** @name OrmlVestingModuleError (319) */2704  export interface OrmlVestingModuleError extends Enum {2705    readonly isZeroVestingPeriod: boolean;2706    readonly isZeroVestingPeriodCount: boolean;2707    readonly isInsufficientBalanceToLock: boolean;2708    readonly isTooManyVestingSchedules: boolean;2709    readonly isAmountLow: boolean;2710    readonly isMaxVestingSchedulesExceeded: boolean;2711    readonly type: 'ZeroVestingPeriod' | 'ZeroVestingPeriodCount' | 'InsufficientBalanceToLock' | 'TooManyVestingSchedules' | 'AmountLow' | 'MaxVestingSchedulesExceeded';2712  }27132714  /** @name CumulusPalletXcmpQueueInboundChannelDetails (321) */2715  export interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct {2716    readonly sender: u32;2717    readonly state: CumulusPalletXcmpQueueInboundState;2718    readonly messageMetadata: Vec<ITuple<[u32, PolkadotParachainPrimitivesXcmpMessageFormat]>>;2719  }27202721  /** @name CumulusPalletXcmpQueueInboundState (322) */2722  export interface CumulusPalletXcmpQueueInboundState extends Enum {2723    readonly isOk: boolean;2724    readonly isSuspended: boolean;2725    readonly type: 'Ok' | 'Suspended';2726  }27272728  /** @name PolkadotParachainPrimitivesXcmpMessageFormat (325) */2729  export interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum {2730    readonly isConcatenatedVersionedXcm: boolean;2731    readonly isConcatenatedEncodedBlob: boolean;2732    readonly isSignals: boolean;2733    readonly type: 'ConcatenatedVersionedXcm' | 'ConcatenatedEncodedBlob' | 'Signals';2734  }27352736  /** @name CumulusPalletXcmpQueueOutboundChannelDetails (328) */2737  export interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct {2738    readonly recipient: u32;2739    readonly state: CumulusPalletXcmpQueueOutboundState;2740    readonly signalsExist: bool;2741    readonly firstIndex: u16;2742    readonly lastIndex: u16;2743  }27442745  /** @name CumulusPalletXcmpQueueOutboundState (329) */2746  export interface CumulusPalletXcmpQueueOutboundState extends Enum {2747    readonly isOk: boolean;2748    readonly isSuspended: boolean;2749    readonly type: 'Ok' | 'Suspended';2750  }27512752  /** @name CumulusPalletXcmpQueueQueueConfigData (331) */2753  export interface CumulusPalletXcmpQueueQueueConfigData extends Struct {2754    readonly suspendThreshold: u32;2755    readonly dropThreshold: u32;2756    readonly resumeThreshold: u32;2757    readonly thresholdWeight: u64;2758    readonly weightRestrictDecay: u64;2759    readonly xcmpMaxIndividualWeight: u64;2760  }27612762  /** @name CumulusPalletXcmpQueueError (333) */2763  export interface CumulusPalletXcmpQueueError extends Enum {2764    readonly isFailedToSend: boolean;2765    readonly isBadXcmOrigin: boolean;2766    readonly isBadXcm: boolean;2767    readonly isBadOverweightIndex: boolean;2768    readonly isWeightOverLimit: boolean;2769    readonly type: 'FailedToSend' | 'BadXcmOrigin' | 'BadXcm' | 'BadOverweightIndex' | 'WeightOverLimit';2770  }27712772  /** @name PalletXcmError (334) */2773  export interface PalletXcmError extends Enum {2774    readonly isUnreachable: boolean;2775    readonly isSendFailure: boolean;2776    readonly isFiltered: boolean;2777    readonly isUnweighableMessage: boolean;2778    readonly isDestinationNotInvertible: boolean;2779    readonly isEmpty: boolean;2780    readonly isCannotReanchor: boolean;2781    readonly isTooManyAssets: boolean;2782    readonly isInvalidOrigin: boolean;2783    readonly isBadVersion: boolean;2784    readonly isBadLocation: boolean;2785    readonly isNoSubscription: boolean;2786    readonly isAlreadySubscribed: boolean;2787    readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed';2788  }27892790  /** @name CumulusPalletXcmError (335) */2791  export type CumulusPalletXcmError = Null;27922793  /** @name CumulusPalletDmpQueueConfigData (336) */2794  export interface CumulusPalletDmpQueueConfigData extends Struct {2795    readonly maxIndividual: u64;2796  }27972798  /** @name CumulusPalletDmpQueuePageIndexData (337) */2799  export interface CumulusPalletDmpQueuePageIndexData extends Struct {2800    readonly beginUsed: u32;2801    readonly endUsed: u32;2802    readonly overweightCount: u64;2803  }28042805  /** @name CumulusPalletDmpQueueError (340) */2806  export interface CumulusPalletDmpQueueError extends Enum {2807    readonly isUnknown: boolean;2808    readonly isOverLimit: boolean;2809    readonly type: 'Unknown' | 'OverLimit';2810  }28112812  /** @name PalletUniqueError (344) */2813  export interface PalletUniqueError extends Enum {2814    readonly isCollectionDecimalPointLimitExceeded: boolean;2815    readonly isConfirmUnsetSponsorFail: boolean;2816    readonly isEmptyArgument: boolean;2817    readonly type: 'CollectionDecimalPointLimitExceeded' | 'ConfirmUnsetSponsorFail' | 'EmptyArgument';2818  }28192820  /** @name PalletUniqueSchedulerScheduledV3 (347) */2821  export interface PalletUniqueSchedulerScheduledV3 extends Struct {2822    readonly maybeId: Option<U8aFixed>;2823    readonly priority: u8;2824    readonly call: FrameSupportScheduleMaybeHashed;2825    readonly maybePeriodic: Option<ITuple<[u32, u32]>>;2826    readonly origin: OpalRuntimeOriginCaller;2827  }28282829  /** @name OpalRuntimeOriginCaller (348) */2830  export interface OpalRuntimeOriginCaller extends Enum {2831    readonly isVoid: boolean;2832    readonly isSystem: boolean;2833    readonly asSystem: FrameSupportDispatchRawOrigin;2834    readonly isPolkadotXcm: boolean;2835    readonly asPolkadotXcm: PalletXcmOrigin;2836    readonly isCumulusXcm: boolean;2837    readonly asCumulusXcm: CumulusPalletXcmOrigin;2838    readonly isEthereum: boolean;2839    readonly asEthereum: PalletEthereumRawOrigin;2840    readonly type: 'Void' | 'System' | 'PolkadotXcm' | 'CumulusXcm' | 'Ethereum';2841  }28422843  /** @name FrameSupportDispatchRawOrigin (349) */2844  export interface FrameSupportDispatchRawOrigin extends Enum {2845    readonly isRoot: boolean;2846    readonly isSigned: boolean;2847    readonly asSigned: AccountId32;2848    readonly isNone: boolean;2849    readonly type: 'Root' | 'Signed' | 'None';2850  }28512852  /** @name PalletXcmOrigin (350) */2853  export interface PalletXcmOrigin extends Enum {2854    readonly isXcm: boolean;2855    readonly asXcm: XcmV1MultiLocation;2856    readonly isResponse: boolean;2857    readonly asResponse: XcmV1MultiLocation;2858    readonly type: 'Xcm' | 'Response';2859  }28602861  /** @name CumulusPalletXcmOrigin (351) */2862  export interface CumulusPalletXcmOrigin extends Enum {2863    readonly isRelay: boolean;2864    readonly isSiblingParachain: boolean;2865    readonly asSiblingParachain: u32;2866    readonly type: 'Relay' | 'SiblingParachain';2867  }28682869  /** @name PalletEthereumRawOrigin (352) */2870  export interface PalletEthereumRawOrigin extends Enum {2871    readonly isEthereumTransaction: boolean;2872    readonly asEthereumTransaction: H160;2873    readonly type: 'EthereumTransaction';2874  }28752876  /** @name SpCoreVoid (353) */2877  export type SpCoreVoid = Null;28782879  /** @name PalletUniqueSchedulerError (354) */2880  export interface PalletUniqueSchedulerError extends Enum {2881    readonly isFailedToSchedule: boolean;2882    readonly isNotFound: boolean;2883    readonly isTargetBlockNumberInPast: boolean;2884    readonly isRescheduleNoChange: boolean;2885    readonly type: 'FailedToSchedule' | 'NotFound' | 'TargetBlockNumberInPast' | 'RescheduleNoChange';2886  }28872888  /** @name UpDataStructsCollection (355) */2889  export interface UpDataStructsCollection extends Struct {2890    readonly owner: AccountId32;2891    readonly mode: UpDataStructsCollectionMode;2892    readonly name: Vec<u16>;2893    readonly description: Vec<u16>;2894    readonly tokenPrefix: Bytes;2895    readonly sponsorship: UpDataStructsSponsorshipState;2896    readonly limits: UpDataStructsCollectionLimits;2897    readonly permissions: UpDataStructsCollectionPermissions;2898    readonly externalCollection: bool;2899  }29002901  /** @name UpDataStructsSponsorshipState (356) */2902  export interface UpDataStructsSponsorshipState extends Enum {2903    readonly isDisabled: boolean;2904    readonly isUnconfirmed: boolean;2905    readonly asUnconfirmed: AccountId32;2906    readonly isConfirmed: boolean;2907    readonly asConfirmed: AccountId32;2908    readonly type: 'Disabled' | 'Unconfirmed' | 'Confirmed';2909  }29102911  /** @name UpDataStructsProperties (357) */2912  export interface UpDataStructsProperties extends Struct {2913    readonly map: UpDataStructsPropertiesMapBoundedVec;2914    readonly consumedSpace: u32;2915    readonly spaceLimit: u32;2916  }29172918  /** @name UpDataStructsPropertiesMapBoundedVec (358) */2919  export interface UpDataStructsPropertiesMapBoundedVec extends BTreeMap<Bytes, Bytes> {}29202921  /** @name UpDataStructsPropertiesMapPropertyPermission (363) */2922  export interface UpDataStructsPropertiesMapPropertyPermission extends BTreeMap<Bytes, UpDataStructsPropertyPermission> {}29232924  /** @name UpDataStructsCollectionStats (370) */2925  export interface UpDataStructsCollectionStats extends Struct {2926    readonly created: u32;2927    readonly destroyed: u32;2928    readonly alive: u32;2929  }29302931  /** @name UpDataStructsTokenChild (371) */2932  export interface UpDataStructsTokenChild extends Struct {2933    readonly token: u32;2934    readonly collection: u32;2935  }29362937  /** @name PhantomTypeUpDataStructs (372) */2938  export interface PhantomTypeUpDataStructs extends Vec<ITuple<[UpDataStructsTokenData, UpDataStructsRpcCollection, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftNftInfo, RmrkTraitsResourceResourceInfo, RmrkTraitsPropertyPropertyInfo, RmrkTraitsBaseBaseInfo, RmrkTraitsPartPartType, RmrkTraitsTheme, RmrkTraitsNftNftChild]>> {}29392940  /** @name UpDataStructsTokenData (374) */2941  export interface UpDataStructsTokenData extends Struct {2942    readonly properties: Vec<UpDataStructsProperty>;2943    readonly owner: Option<PalletEvmAccountBasicCrossAccountIdRepr>;2944  }29452946  /** @name UpDataStructsRpcCollection (376) */2947  export interface UpDataStructsRpcCollection extends Struct {2948    readonly owner: AccountId32;2949    readonly mode: UpDataStructsCollectionMode;2950    readonly name: Vec<u16>;2951    readonly description: Vec<u16>;2952    readonly tokenPrefix: Bytes;2953    readonly sponsorship: UpDataStructsSponsorshipState;2954    readonly limits: UpDataStructsCollectionLimits;2955    readonly permissions: UpDataStructsCollectionPermissions;2956    readonly tokenPropertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;2957    readonly properties: Vec<UpDataStructsProperty>;2958    readonly readOnly: bool;2959  }29602961  /** @name RmrkTraitsCollectionCollectionInfo (377) */2962  export interface RmrkTraitsCollectionCollectionInfo extends Struct {2963    readonly issuer: AccountId32;2964    readonly metadata: Bytes;2965    readonly max: Option<u32>;2966    readonly symbol: Bytes;2967    readonly nftsCount: u32;2968  }29692970  /** @name RmrkTraitsNftNftInfo (378) */2971  export interface RmrkTraitsNftNftInfo extends Struct {2972    readonly owner: RmrkTraitsNftAccountIdOrCollectionNftTuple;2973    readonly royalty: Option<RmrkTraitsNftRoyaltyInfo>;2974    readonly metadata: Bytes;2975    readonly equipped: bool;2976    readonly pending: bool;2977  }29782979  /** @name RmrkTraitsNftRoyaltyInfo (380) */2980  export interface RmrkTraitsNftRoyaltyInfo extends Struct {2981    readonly recipient: AccountId32;2982    readonly amount: Permill;2983  }29842985  /** @name RmrkTraitsResourceResourceInfo (381) */2986  export interface RmrkTraitsResourceResourceInfo extends Struct {2987    readonly id: u32;2988    readonly resource: RmrkTraitsResourceResourceTypes;2989    readonly pending: bool;2990    readonly pendingRemoval: bool;2991  }29922993  /** @name RmrkTraitsPropertyPropertyInfo (382) */2994  export interface RmrkTraitsPropertyPropertyInfo extends Struct {2995    readonly key: Bytes;2996    readonly value: Bytes;2997  }29982999  /** @name RmrkTraitsBaseBaseInfo (383) */3000  export interface RmrkTraitsBaseBaseInfo extends Struct {3001    readonly issuer: AccountId32;3002    readonly baseType: Bytes;3003    readonly symbol: Bytes;3004  }30053006  /** @name RmrkTraitsNftNftChild (384) */3007  export interface RmrkTraitsNftNftChild extends Struct {3008    readonly collectionId: u32;3009    readonly nftId: u32;3010  }30113012  /** @name PalletCommonError (386) */3013  export interface PalletCommonError extends Enum {3014    readonly isCollectionNotFound: boolean;3015    readonly isMustBeTokenOwner: boolean;3016    readonly isNoPermission: boolean;3017    readonly isCantDestroyNotEmptyCollection: boolean;3018    readonly isPublicMintingNotAllowed: boolean;3019    readonly isAddressNotInAllowlist: boolean;3020    readonly isCollectionNameLimitExceeded: boolean;3021    readonly isCollectionDescriptionLimitExceeded: boolean;3022    readonly isCollectionTokenPrefixLimitExceeded: boolean;3023    readonly isTotalCollectionsLimitExceeded: boolean;3024    readonly isCollectionAdminCountExceeded: boolean;3025    readonly isCollectionLimitBoundsExceeded: boolean;3026    readonly isOwnerPermissionsCantBeReverted: boolean;3027    readonly isTransferNotAllowed: boolean;3028    readonly isAccountTokenLimitExceeded: boolean;3029    readonly isCollectionTokenLimitExceeded: boolean;3030    readonly isMetadataFlagFrozen: boolean;3031    readonly isTokenNotFound: boolean;3032    readonly isTokenValueTooLow: boolean;3033    readonly isApprovedValueTooLow: boolean;3034    readonly isCantApproveMoreThanOwned: boolean;3035    readonly isAddressIsZero: boolean;3036    readonly isUnsupportedOperation: boolean;3037    readonly isNotSufficientFounds: boolean;3038    readonly isUserIsNotAllowedToNest: boolean;3039    readonly isSourceCollectionIsNotAllowedToNest: boolean;3040    readonly isCollectionFieldSizeExceeded: boolean;3041    readonly isNoSpaceForProperty: boolean;3042    readonly isPropertyLimitReached: boolean;3043    readonly isPropertyKeyIsTooLong: boolean;3044    readonly isInvalidCharacterInPropertyKey: boolean;3045    readonly isEmptyPropertyKey: boolean;3046    readonly isCollectionIsExternal: boolean;3047    readonly isCollectionIsInternal: boolean;3048    readonly type: 'CollectionNotFound' | 'MustBeTokenOwner' | 'NoPermission' | 'CantDestroyNotEmptyCollection' | 'PublicMintingNotAllowed' | 'AddressNotInAllowlist' | 'CollectionNameLimitExceeded' | 'CollectionDescriptionLimitExceeded' | 'CollectionTokenPrefixLimitExceeded' | 'TotalCollectionsLimitExceeded' | 'CollectionAdminCountExceeded' | 'CollectionLimitBoundsExceeded' | 'OwnerPermissionsCantBeReverted' | 'TransferNotAllowed' | 'AccountTokenLimitExceeded' | 'CollectionTokenLimitExceeded' | 'MetadataFlagFrozen' | 'TokenNotFound' | 'TokenValueTooLow' | 'ApprovedValueTooLow' | 'CantApproveMoreThanOwned' | 'AddressIsZero' | 'UnsupportedOperation' | 'NotSufficientFounds' | 'UserIsNotAllowedToNest' | 'SourceCollectionIsNotAllowedToNest' | 'CollectionFieldSizeExceeded' | 'NoSpaceForProperty' | 'PropertyLimitReached' | 'PropertyKeyIsTooLong' | 'InvalidCharacterInPropertyKey' | 'EmptyPropertyKey' | 'CollectionIsExternal' | 'CollectionIsInternal';3049  }30503051  /** @name PalletFungibleError (388) */3052  export interface PalletFungibleError extends Enum {3053    readonly isNotFungibleDataUsedToMintFungibleCollectionToken: boolean;3054    readonly isFungibleItemsHaveNoId: boolean;3055    readonly isFungibleItemsDontHaveData: boolean;3056    readonly isFungibleDisallowsNesting: boolean;3057    readonly isSettingPropertiesNotAllowed: boolean;3058    readonly type: 'NotFungibleDataUsedToMintFungibleCollectionToken' | 'FungibleItemsHaveNoId' | 'FungibleItemsDontHaveData' | 'FungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';3059  }30603061  /** @name PalletRefungibleItemData (389) */3062  export interface PalletRefungibleItemData extends Struct {3063    readonly constData: Bytes;3064  }30653066  /** @name PalletRefungibleError (393) */3067  export interface PalletRefungibleError extends Enum {3068    readonly isNotRefungibleDataUsedToMintFungibleCollectionToken: boolean;3069    readonly isWrongRefungiblePieces: boolean;3070    readonly isRefungibleDisallowsNesting: boolean;3071    readonly isSettingPropertiesNotAllowed: boolean;3072    readonly type: 'NotRefungibleDataUsedToMintFungibleCollectionToken' | 'WrongRefungiblePieces' | 'RefungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';3073  }30743075  /** @name PalletNonfungibleItemData (394) */3076  export interface PalletNonfungibleItemData extends Struct {3077    readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;3078  }30793080  /** @name PalletNonfungibleError (396) */3081  export interface PalletNonfungibleError extends Enum {3082    readonly isNotNonfungibleDataUsedToMintFungibleCollectionToken: boolean;3083    readonly isNonfungibleItemsHaveNoAmount: boolean;3084    readonly isCantBurnNftWithChildren: boolean;3085    readonly type: 'NotNonfungibleDataUsedToMintFungibleCollectionToken' | 'NonfungibleItemsHaveNoAmount' | 'CantBurnNftWithChildren';3086  }30873088  /** @name PalletStructureError (397) */3089  export interface PalletStructureError extends Enum {3090    readonly isOuroborosDetected: boolean;3091    readonly isDepthLimit: boolean;3092    readonly isBreadthLimit: boolean;3093    readonly isTokenNotFound: boolean;3094    readonly type: 'OuroborosDetected' | 'DepthLimit' | 'BreadthLimit' | 'TokenNotFound';3095  }30963097  /** @name PalletRmrkCoreError (398) */3098  export interface PalletRmrkCoreError extends Enum {3099    readonly isCorruptedCollectionType: boolean;3100    readonly isNftTypeEncodeError: boolean;3101    readonly isRmrkPropertyKeyIsTooLong: boolean;3102    readonly isRmrkPropertyValueIsTooLong: boolean;3103    readonly isUnableToDecodeRmrkData: boolean;3104    readonly isCollectionNotEmpty: boolean;3105    readonly isNoAvailableCollectionId: boolean;3106    readonly isNoAvailableNftId: boolean;3107    readonly isCollectionUnknown: boolean;3108    readonly isNoPermission: boolean;3109    readonly isNonTransferable: boolean;3110    readonly isCollectionFullOrLocked: boolean;3111    readonly isResourceDoesntExist: boolean;3112    readonly isCannotSendToDescendentOrSelf: boolean;3113    readonly isCannotAcceptNonOwnedNft: boolean;3114    readonly isCannotRejectNonOwnedNft: boolean;3115    readonly isResourceNotPending: boolean;3116    readonly type: 'CorruptedCollectionType' | 'NftTypeEncodeError' | 'RmrkPropertyKeyIsTooLong' | 'RmrkPropertyValueIsTooLong' | 'UnableToDecodeRmrkData' | 'CollectionNotEmpty' | 'NoAvailableCollectionId' | 'NoAvailableNftId' | 'CollectionUnknown' | 'NoPermission' | 'NonTransferable' | 'CollectionFullOrLocked' | 'ResourceDoesntExist' | 'CannotSendToDescendentOrSelf' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'ResourceNotPending';3117  }31183119  /** @name PalletRmrkEquipError (400) */3120  export interface PalletRmrkEquipError extends Enum {3121    readonly isPermissionError: boolean;3122    readonly isNoAvailableBaseId: boolean;3123    readonly isNoAvailablePartId: boolean;3124    readonly isBaseDoesntExist: boolean;3125    readonly isNeedsDefaultThemeFirst: boolean;3126    readonly type: 'PermissionError' | 'NoAvailableBaseId' | 'NoAvailablePartId' | 'BaseDoesntExist' | 'NeedsDefaultThemeFirst';3127  }31283129  /** @name PalletEvmError (403) */3130  export interface PalletEvmError extends Enum {3131    readonly isBalanceLow: boolean;3132    readonly isFeeOverflow: boolean;3133    readonly isPaymentOverflow: boolean;3134    readonly isWithdrawFailed: boolean;3135    readonly isGasPriceTooLow: boolean;3136    readonly isInvalidNonce: boolean;3137    readonly type: 'BalanceLow' | 'FeeOverflow' | 'PaymentOverflow' | 'WithdrawFailed' | 'GasPriceTooLow' | 'InvalidNonce';3138  }31393140  /** @name FpRpcTransactionStatus (406) */3141  export interface FpRpcTransactionStatus extends Struct {3142    readonly transactionHash: H256;3143    readonly transactionIndex: u32;3144    readonly from: H160;3145    readonly to: Option<H160>;3146    readonly contractAddress: Option<H160>;3147    readonly logs: Vec<EthereumLog>;3148    readonly logsBloom: EthbloomBloom;3149  }31503151  /** @name EthbloomBloom (408) */3152  export interface EthbloomBloom extends U8aFixed {}31533154  /** @name EthereumReceiptReceiptV3 (410) */3155  export interface EthereumReceiptReceiptV3 extends Enum {3156    readonly isLegacy: boolean;3157    readonly asLegacy: EthereumReceiptEip658ReceiptData;3158    readonly isEip2930: boolean;3159    readonly asEip2930: EthereumReceiptEip658ReceiptData;3160    readonly isEip1559: boolean;3161    readonly asEip1559: EthereumReceiptEip658ReceiptData;3162    readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';3163  }31643165  /** @name EthereumReceiptEip658ReceiptData (411) */3166  export interface EthereumReceiptEip658ReceiptData extends Struct {3167    readonly statusCode: u8;3168    readonly usedGas: U256;3169    readonly logsBloom: EthbloomBloom;3170    readonly logs: Vec<EthereumLog>;3171  }31723173  /** @name EthereumBlock (412) */3174  export interface EthereumBlock extends Struct {3175    readonly header: EthereumHeader;3176    readonly transactions: Vec<EthereumTransactionTransactionV2>;3177    readonly ommers: Vec<EthereumHeader>;3178  }31793180  /** @name EthereumHeader (413) */3181  export interface EthereumHeader extends Struct {3182    readonly parentHash: H256;3183    readonly ommersHash: H256;3184    readonly beneficiary: H160;3185    readonly stateRoot: H256;3186    readonly transactionsRoot: H256;3187    readonly receiptsRoot: H256;3188    readonly logsBloom: EthbloomBloom;3189    readonly difficulty: U256;3190    readonly number: U256;3191    readonly gasLimit: U256;3192    readonly gasUsed: U256;3193    readonly timestamp: u64;3194    readonly extraData: Bytes;3195    readonly mixHash: H256;3196    readonly nonce: EthereumTypesHashH64;3197  }31983199  /** @name EthereumTypesHashH64 (414) */3200  export interface EthereumTypesHashH64 extends U8aFixed {}32013202  /** @name PalletEthereumError (419) */3203  export interface PalletEthereumError extends Enum {3204    readonly isInvalidSignature: boolean;3205    readonly isPreLogExists: boolean;3206    readonly type: 'InvalidSignature' | 'PreLogExists';3207  }32083209  /** @name PalletEvmCoderSubstrateError (420) */3210  export interface PalletEvmCoderSubstrateError extends Enum {3211    readonly isOutOfGas: boolean;3212    readonly isOutOfFund: boolean;3213    readonly type: 'OutOfGas' | 'OutOfFund';3214  }32153216  /** @name PalletEvmContractHelpersSponsoringModeT (421) */3217  export interface PalletEvmContractHelpersSponsoringModeT extends Enum {3218    readonly isDisabled: boolean;3219    readonly isAllowlisted: boolean;3220    readonly isGenerous: boolean;3221    readonly type: 'Disabled' | 'Allowlisted' | 'Generous';3222  }32233224  /** @name PalletEvmContractHelpersError (423) */3225  export interface PalletEvmContractHelpersError extends Enum {3226    readonly isNoPermission: boolean;3227    readonly type: 'NoPermission';3228  }32293230  /** @name PalletEvmMigrationError (424) */3231  export interface PalletEvmMigrationError extends Enum {3232    readonly isAccountNotEmpty: boolean;3233    readonly isAccountIsNotMigrating: boolean;3234    readonly type: 'AccountNotEmpty' | 'AccountIsNotMigrating';3235  }32363237  /** @name SpRuntimeMultiSignature (426) */3238  export interface SpRuntimeMultiSignature extends Enum {3239    readonly isEd25519: boolean;3240    readonly asEd25519: SpCoreEd25519Signature;3241    readonly isSr25519: boolean;3242    readonly asSr25519: SpCoreSr25519Signature;3243    readonly isEcdsa: boolean;3244    readonly asEcdsa: SpCoreEcdsaSignature;3245    readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa';3246  }32473248  /** @name SpCoreEd25519Signature (427) */3249  export interface SpCoreEd25519Signature extends U8aFixed {}32503251  /** @name SpCoreSr25519Signature (429) */3252  export interface SpCoreSr25519Signature extends U8aFixed {}32533254  /** @name SpCoreEcdsaSignature (430) */3255  export interface SpCoreEcdsaSignature extends U8aFixed {}32563257  /** @name FrameSystemExtensionsCheckSpecVersion (433) */3258  export type FrameSystemExtensionsCheckSpecVersion = Null;32593260  /** @name FrameSystemExtensionsCheckGenesis (434) */3261  export type FrameSystemExtensionsCheckGenesis = Null;32623263  /** @name FrameSystemExtensionsCheckNonce (437) */3264  export interface FrameSystemExtensionsCheckNonce extends Compact<u32> {}32653266  /** @name FrameSystemExtensionsCheckWeight (438) */3267  export type FrameSystemExtensionsCheckWeight = Null;32683269  /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (439) */3270  export interface PalletTemplateTransactionPaymentChargeTransactionPayment extends Compact<u128> {}32713272  /** @name OpalRuntimeRuntime (440) */3273  export type OpalRuntimeRuntime = Null;32743275  /** @name PalletEthereumFakeTransactionFinalizer (441) */3276  export type PalletEthereumFakeTransactionFinalizer = Null;32773278} // declare module
modifiedtests/src/limits.test.tsdiffbeforeafterboth
--- a/tests/src/limits.test.ts
+++ b/tests/src/limits.test.ts
@@ -406,6 +406,7 @@
   it('Effective collection limits', async () => {
     await usingApi(async (api) => {
       const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+      await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
       
       { // Check that limits is undefined
         const collection = await api.rpc.unique.collectionById(collectionId);
@@ -419,7 +420,7 @@
         expect(limits.tokenLimit.toHuman()).to.be.null;
         expect(limits.sponsorTransferTimeout.toHuman()).to.be.null;
         expect(limits.sponsorApproveTimeout.toHuman()).to.be.null;
-        expect(limits.ownerCanTransfer.toHuman()).to.be.null;
+        expect(limits.ownerCanTransfer.toHuman()).to.be.true;
         expect(limits.ownerCanDestroy.toHuman()).to.be.null;
         expect(limits.transfersEnabled.toHuman()).to.be.null;
       }
modifiedtests/src/nesting/graphs.test.tsdiffbeforeafterboth
--- a/tests/src/nesting/graphs.test.ts
+++ b/tests/src/nesting/graphs.test.ts
@@ -3,7 +3,7 @@
 import {expect} from 'chai';
 import {tokenIdToCross} from '../eth/util/helpers';
 import usingApi, {executeTransaction} from '../substrate/substrate-api';
-import {getCreateCollectionResult, transferExpectSuccess} from '../util/helpers';
+import {getCreateCollectionResult, transferExpectSuccess, setCollectionLimitsExpectSuccess} from '../util/helpers';
 
 /**
  * ```dot
@@ -13,7 +13,7 @@
  * ```
  */
 async function buildComplexObjectGraph(api: ApiPromise, sender: IKeyringPair): Promise<number> {
-  const events = await executeTransaction(api, sender, api.tx.unique.createCollectionEx({mode: 'NFT', permissions: {nesting: 'Owner'}}));
+  const events = await executeTransaction(api, sender, api.tx.unique.createCollectionEx({mode: 'NFT', permissions: {nesting: {tokenOwner: true}}}));
   const {collectionId} = getCreateCollectionResult(events);
 
   await executeTransaction(api, sender, api.tx.unique.createMultipleItemsEx(collectionId, {NFT: Array(8).fill({owner: {Substrate: sender.address}})}));
@@ -36,6 +36,7 @@
     await usingApi(async (api, privateKeyWrapper) => {
       const alice = privateKeyWrapper('//Alice');
       const collection = await buildComplexObjectGraph(api, alice);
+      await setCollectionLimitsExpectSuccess(alice, collection, {ownerCanTransfer: true});
 
       // to self
       await expect(
modifiedtests/src/nesting/nest.test.tsdiffbeforeafterboth
--- a/tests/src/nesting/nest.test.ts
+++ b/tests/src/nesting/nest.test.ts
@@ -2,6 +2,7 @@
 import {tokenIdToAddress} from '../eth/util/helpers';
 import usingApi, {executeTransaction} from '../substrate/substrate-api';
 import {
+  addCollectionAdminExpectSuccess,
   addToAllowListExpectSuccess,
   createCollectionExpectSuccess,
   createItemExpectSuccess,
@@ -15,15 +16,17 @@
   transferExpectFailure,
   transferExpectSuccess,
   transferFromExpectSuccess,
+  setCollectionLimitsExpectSuccess,
 } from '../util/helpers';
 import {IKeyringPair} from '@polkadot/types/types';
 
 let alice: IKeyringPair;
 let bob: IKeyringPair;
+let charlie: IKeyringPair;
 
-describe('Integration Test: Nesting', () => {
+describe('Integration Test: Composite nesting tests', () => {
   before(async () => {
-    await usingApi(async (api, privateKeyWrapper) => {
+    await usingApi(async (_, privateKeyWrapper) => {
       alice = privateKeyWrapper('//Alice');
       bob = privateKeyWrapper('//Bob');
     });
@@ -92,6 +95,7 @@
   it('Checks token children', async () => {
     await usingApi(async api => {
       const collectionA = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+      await setCollectionLimitsExpectSuccess(alice, collectionA, {ownerCanTransfer: true});
       await setCollectionPermissionsExpectSuccess(alice, collectionA, {nesting: {tokenOwner: true}});
       const collectionB = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
 
@@ -145,7 +149,79 @@
       ], 'Children contents check at deeper nesting');
     });
   });
+});
+
+describe('Integration Test: Various token type nesting', async () => {
+  before(async () => {
+    await usingApi(async (_, privateKeyWrapper) => {
+      alice = privateKeyWrapper('//Alice');
+      bob = privateKeyWrapper('//Bob');
+      charlie = privateKeyWrapper('//Charlie');
+    });
+  });
+
+  it('Admin (NFT): allows an Admin to nest a token', async () => {
+    await usingApi(async api => {
+      const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+      await setCollectionPermissionsExpectSuccess(alice, collection, {nesting: {collectionAdmin: true}});
+      await addCollectionAdminExpectSuccess(alice, collection, bob.address);
+      const targetToken = await createItemExpectSuccess(alice, collection, 'NFT', charlie.address);
+
+      // Create a nested token
+      const nestedToken = await createItemExpectSuccess(bob, collection, 'NFT', {Ethereum: tokenIdToAddress(collection, targetToken)});
+      expect(await getTopmostTokenOwner(api, collection, nestedToken)).to.be.deep.equal({Substrate: charlie.address});
+      expect(await getTokenOwner(api, collection, nestedToken)).to.be.deep.equal({Ethereum: tokenIdToAddress(collection, targetToken).toLowerCase()});
+
+      // Create a token to be nested and nest
+      const newToken = await createItemExpectSuccess(bob, collection, 'NFT');
+      await transferExpectSuccess(collection, newToken, bob, {Ethereum: tokenIdToAddress(collection, targetToken)});
+      expect(await getTopmostTokenOwner(api, collection, newToken)).to.be.deep.equal({Substrate: charlie.address});
+      expect(await getTokenOwner(api, collection, newToken)).to.be.deep.equal({Ethereum: tokenIdToAddress(collection, targetToken).toLowerCase()});
+    });
+  });
 
+  it('Admin (NFT): Admin and Token Owner can operate together', async () => {
+    await usingApi(async api => {
+      const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+      await setCollectionPermissionsExpectSuccess(alice, collection, {nesting: {tokenOwner: true, collectionAdmin: true}});
+      await addCollectionAdminExpectSuccess(alice, collection, bob.address);
+      const targetToken = await createItemExpectSuccess(alice, collection, 'NFT', charlie.address);
+
+      // Create a nested token by an administrator
+      const nestedToken = await createItemExpectSuccess(bob, collection, 'NFT', {Ethereum: tokenIdToAddress(collection, targetToken)});
+      expect(await getTopmostTokenOwner(api, collection, nestedToken)).to.be.deep.equal({Substrate: charlie.address});
+      expect(await getTokenOwner(api, collection, nestedToken)).to.be.deep.equal({Ethereum: tokenIdToAddress(collection, targetToken).toLowerCase()});
+
+      // Create a token and allow the owner to nest too
+      const newToken = await createItemExpectSuccess(alice, collection, 'NFT', charlie.address);
+      await transferExpectSuccess(collection, newToken, charlie, {Ethereum: tokenIdToAddress(collection, nestedToken)});
+      expect(await getTopmostTokenOwner(api, collection, newToken)).to.be.deep.equal({Substrate: charlie.address});
+      expect(await getTokenOwner(api, collection, newToken)).to.be.deep.equal({Ethereum: tokenIdToAddress(collection, nestedToken).toLowerCase()});
+    });
+  });
+
+  it('Admin (NFT): allows an Admin to nest a token (Restricted nesting)', async () => {
+    await usingApi(async api => {
+      const collectionA = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+      await addCollectionAdminExpectSuccess(alice, collectionA, bob.address);
+      const collectionB = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+      await addCollectionAdminExpectSuccess(alice, collectionB, bob.address);
+      await setCollectionPermissionsExpectSuccess(alice, collectionA, {nesting: {collectionAdmin: true, restricted:[collectionA, collectionB]}});
+      const targetToken = await createItemExpectSuccess(alice, collectionA, 'NFT', charlie.address);
+
+      // Create a nested token
+      const nestedToken = await createItemExpectSuccess(bob, collectionB, 'NFT', {Ethereum: tokenIdToAddress(collectionA, targetToken)});
+      expect(await getTopmostTokenOwner(api, collectionB, nestedToken)).to.be.deep.equal({Substrate: charlie.address});
+      expect(await getTokenOwner(api, collectionB, nestedToken)).to.be.deep.equal({Ethereum: tokenIdToAddress(collectionA, targetToken).toLowerCase()});
+
+      // Create a token to be nested and nest
+      const newToken = await createItemExpectSuccess(bob, collectionB, 'NFT');
+      await transferExpectSuccess(collectionB, newToken, bob, {Ethereum: tokenIdToAddress(collectionA, targetToken)});
+      expect(await getTopmostTokenOwner(api, collectionB, newToken)).to.be.deep.equal({Substrate: charlie.address});
+      expect(await getTokenOwner(api, collectionB, newToken)).to.be.deep.equal({Ethereum: tokenIdToAddress(collectionA, targetToken).toLowerCase()});
+    });
+  });
+
   // ---------- Non-Fungible ----------
 
   it('NFT: allows an Owner to nest/unnest their token', async () => {
@@ -248,7 +324,7 @@
       await expect(executeTransaction(api, alice, api.tx.unique.createItem(
         collectionRFT,
         targetAddress,
-        {ReFungible: {const_data: [], pieces: 100}},
+        {ReFungible: {pieces: 100}},
       ))).to.not.be.rejected;
 
       // Nest a new token
@@ -271,7 +347,7 @@
       await expect(executeTransaction(api, alice, api.tx.unique.createItem(
         collectionRFT,
         targetAddress,
-        {ReFungible: {const_data: [], pieces: 100}},
+        {ReFungible: {pieces: 100}},
       ))).to.not.be.rejected;
 
       // Nest a new token
@@ -283,7 +359,7 @@
 
 describe('Negative Test: Nesting', async() => {
   before(async () => {
-    await usingApi(async (api, privateKeyWrapper) => {
+    await usingApi(async (_, privateKeyWrapper) => {
       alice = privateKeyWrapper('//Alice');
       bob = privateKeyWrapper('//Bob');
     });
@@ -314,13 +390,122 @@
       await expect(executeTransaction(api, alice, api.tx.unique.createItem(
         collection,
         {Ethereum: tokenIdToAddress(collection, prevToken)},
-          {nft: {const_data: [], variable_data: []}} as any,
+          {nft: {}} as any,
       )), 'while creating nested token').to.be.rejectedWith(/^structure\.DepthLimit$/);
 
       expect(await getTopmostTokenOwner(api, collection, prevToken)).to.be.deep.equal({Substrate: alice.address});
     });
   });
 
+  // ---------- Admin ------------
+
+  it('Admin (NFT): disallows an Admin to operate nesting when only TokenOwner is allowed', async () => {
+    await usingApi(async api => {
+      const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+      await setCollectionPermissionsExpectSuccess(alice, collection, {nesting: {tokenOwner: true}});
+      await addCollectionAdminExpectSuccess(alice, collection, bob.address);
+      const targetToken = await createItemExpectSuccess(alice, collection, 'NFT');
+
+      // Try to create a nested token as collection admin when it's disallowed
+      await expect(executeTransaction(api, bob, api.tx.unique.createItem(
+        collection,
+        {Ethereum: tokenIdToAddress(collection, targetToken)},
+          {nft: {}} as any,
+      )), 'while creating nested token').to.be.rejectedWith(/common\.UserIsNotAllowedToNest/);
+
+      // Try to create and nest a token in the wrong collection
+      const newToken = await createItemExpectSuccess(bob, collection, 'NFT');
+      await expect(executeTransaction(
+        api, 
+        bob, 
+        api.tx.unique.transfer({Ethereum: tokenIdToAddress(collection, targetToken)}, collection, newToken, 1),
+      ), 'while nesting new token').to.be.rejectedWith(/common\.UserIsNotAllowedToNest/);
+      expect(await getTokenOwner(api, collection, newToken)).to.be.deep.equal({Substrate: bob.address});
+    });
+  });
+
+  it('Admin (NFT): disallows a Token Owner to operate nesting when only Admin is allowed', async () => {
+    await usingApi(async api => {
+      const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+      await setCollectionPermissionsExpectSuccess(alice, collection, {nesting: {collectionAdmin: true}});
+      await addToAllowListExpectSuccess(alice, collection, bob.address);
+      await enableAllowListExpectSuccess(alice, collection);
+      await enablePublicMintingExpectSuccess(alice, collection);
+      const targetToken = await createItemExpectSuccess(alice, collection, 'NFT');
+
+      // Try to create a nested token as collection admin when it's disallowed
+      await expect(executeTransaction(api, bob, api.tx.unique.createItem(
+        collection,
+        {Ethereum: tokenIdToAddress(collection, targetToken)},
+          {nft: {}} as any,
+      )), 'while creating nested token').to.be.rejectedWith(/common\.AddressNotInAllowlist/); 
+
+      // Try to create and nest a token in the wrong collection
+      const newToken = await createItemExpectSuccess(bob, collection, 'NFT');
+      await expect(executeTransaction(
+        api, 
+        bob, 
+        api.tx.unique.transfer({Ethereum: tokenIdToAddress(collection, targetToken)}, collection, newToken, 1),
+      ), 'while nesting new token').to.be.rejectedWith(/common\.AddressNotInAllowlist/);
+      expect(await getTokenOwner(api, collection, newToken)).to.be.deep.equal({Substrate: bob.address});
+    });
+  });
+
+  it('Admin (NFT): disallows an Admin to nest and unnest someone else\'s token', async () => {
+    await usingApi(async api => {
+      const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+      await setCollectionLimitsExpectSuccess(alice, collection, {ownerCanTransfer: true});
+      await setCollectionPermissionsExpectSuccess(alice, collection, {nesting: {collectionAdmin: true}});
+
+      await addToAllowListExpectSuccess(alice, collection, bob.address);
+      await enableAllowListExpectSuccess(alice, collection);
+      await enablePublicMintingExpectSuccess(alice, collection);
+
+      // Create a token to attempt to be nested into
+      const targetToken = await createItemExpectSuccess(bob, collection, 'NFT');
+      const targetAddress = {Ethereum: tokenIdToAddress(collection, targetToken).toLowerCase()};
+
+      // Try to nest somebody else's token
+      const newToken = await createItemExpectSuccess(bob, collection, 'NFT');
+      await expect(executeTransaction(
+        api, 
+        alice, 
+        api.tx.unique.transfer(targetAddress, collection, newToken, 1),
+      ), 'while nesting another\'s token token').to.be.rejectedWith(/common\.AddressNotInAllowlist/);
+      expect(await getTokenOwner(api, collection, newToken)).to.be.deep.equal({Substrate: bob.address});
+
+      // Nest a token as admin and try to unnest it, now belonging to someone else
+      const nestedToken = await createItemExpectSuccess(alice, collection, 'NFT', targetAddress);
+      await expect(executeTransaction(
+        api, 
+        alice, 
+        api.tx.unique.transferFrom(targetAddress, normalizeAccountId(alice), collection, nestedToken, 1),
+      ), 'while unnesting another\'s token').to.be.rejectedWith(/common\.AddressNotInAllowlist/);
+      expect(await getTokenOwner(api, collection, nestedToken)).to.be.deep.equal(targetAddress);
+      expect(await getTopmostTokenOwner(api, collection, nestedToken)).to.be.deep.equal({Substrate: bob.address});
+    });
+  });
+
+  it('Admin (NFT): disallows an Admin to nest a token from an unlisted collection (Restricted nesting)', async () => {
+    await usingApi(async api => {
+      const collectionA = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+      const collectionB = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+      await setCollectionPermissionsExpectSuccess(alice, collectionA, {nesting: {collectionAdmin: true, restricted:[collectionA]}});
+
+      // Create a token to attempt to be nested into
+      const targetToken = await createItemExpectSuccess(alice, collectionA, 'NFT');
+
+      // Try to create and nest a token in the wrong collection
+      const newToken = await createItemExpectSuccess(alice, collectionB, 'NFT');
+      await expect(executeTransaction(
+        api, 
+        alice, 
+        api.tx.unique.transfer({Ethereum: tokenIdToAddress(collectionA, targetToken)}, collectionB, newToken, 1),
+      ), 'while nesting a foreign token').to.be.rejectedWith(/common\.SourceCollectionIsNotAllowedToNest/);
+      expect(await getTokenOwner(api, collectionB, newToken)).to.be.deep.equal({Substrate: alice.address});
+    });
+  });
+
   // ---------- Non-Fungible ----------
 
   it('NFT: disallows to nest token if nesting is disabled', async () => {
@@ -333,7 +518,7 @@
       await expect(executeTransaction(api, alice, api.tx.unique.createItem(
         collection,
         {Ethereum: tokenIdToAddress(collection, targetToken)},
-          {nft: {const_data: [], variable_data: []}} as any,
+          {nft: {}} as any,
       )), 'while creating nested token').to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);
 
       // Create a token to be nested
@@ -361,7 +546,7 @@
       await expect(executeTransaction(api, alice, api.tx.unique.createItem(
         collection,
         {Ethereum: tokenIdToAddress(collection, targetToken)},
-          {nft: {const_data: [], variable_data: []}} as any,
+          {nft: {}} as any,
       )), 'while creating nested token').to.be.rejectedWith(/common\.UserIsNotAllowedToNest/);
 
       // Try to create and nest a token in the wrong collection
@@ -387,7 +572,7 @@
       await expect(executeTransaction(api, alice, api.tx.unique.createItem(
         collection,
         {Ethereum: tokenIdToAddress(collection, targetToken)},
-          {nft: {const_data: [], variable_data: []}} as any,
+          {nft: {}} as any,
       )), 'while creating nested token').to.be.rejectedWith(/common\.UserIsNotAllowedToNest/);
 
       // Try to create and nest a token in the wrong collection
@@ -409,7 +594,7 @@
       await expect(executeTransaction(api, alice, api.tx.unique.createItem(
         collection,
         {Ethereum: tokenIdToAddress(collection, targetToken)},
-          {nft: {const_data: [], variable_data: []}} as any,
+          {nft: {}} as any,
       )), 'while creating nested token').to.be.rejectedWith(/common\.SourceCollectionIsNotAllowedToNest/);
 
       // Try to create and nest a token in the wrong collection
@@ -543,7 +728,7 @@
       await expect(executeTransaction(api, alice, api.tx.unique.createItem(
         collectionRFT,
         targetAddress,
-        {ReFungible: {const_data: [], pieces: 100}},
+        {ReFungible: {pieces: 100}},
       )), 'while creating a nested token').to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);
 
       // Create a token to be nested
@@ -579,7 +764,7 @@
       await expect(executeTransaction(api, alice, api.tx.unique.createItem(
         collectionRFT,
         targetAddress,
-        {ReFungible: {const_data: [], pieces: 100}},
+        {ReFungible: {pieces: 100}},
       )), 'while creating a nested token').to.be.rejectedWith(/common\.UserIsNotAllowedToNest/);
 
       // Try to create and nest a token in the wrong collection
@@ -606,7 +791,7 @@
       await expect(executeTransaction(api, alice, api.tx.unique.createItem(
         collectionRFT,
         targetAddress,
-        {ReFungible: {const_data: [], pieces: 100}},
+        {ReFungible: {pieces: 100}},
       )), 'while creating a nested token').to.be.rejectedWith(/common\.UserIsNotAllowedToNest/);
 
       // Try to create and nest a token in the wrong collection
@@ -630,7 +815,7 @@
       await expect(executeTransaction(api, alice, api.tx.unique.createItem(
         collectionRFT,
         targetAddress,
-        {ReFungible: {const_data: [], pieces: 100}},
+        {ReFungible: {pieces: 100}},
       )), 'while creating a nested token').to.be.rejectedWith(/common\.SourceCollectionIsNotAllowedToNest/);
 
       // Try to create and nest a token in the wrong collection
modifiedtests/src/nesting/properties.test.tsdiffbeforeafterboth
--- a/tests/src/nesting/properties.test.ts
+++ b/tests/src/nesting/properties.test.ts
@@ -38,7 +38,7 @@
       await expect(executeTransaction(
         api, 
         alice, 
-        api.tx.unique.setPropertyPermissions(collectionId, propertyPermissions), 
+        api.tx.unique.setTokenPropertyPermissions(collectionId, propertyPermissions), 
       )).to.not.be.rejected;
 
       const collectionProperties = [
@@ -106,6 +106,58 @@
     });
   });
 
+  it('Check valid names for collection properties keys', async () => {
+    await usingApi(async api => {
+      const events = await executeTransaction(api, bob, api.tx.unique.createCollectionEx({mode: 'NFT'}));
+      const {collectionId} = getCreateCollectionResult(events);
+
+      // alpha symbols
+      await expect(executeTransaction(
+        api, 
+        bob, 
+        api.tx.unique.setCollectionProperties(collectionId, [{key: 'alpha'}]), 
+      )).to.not.be.rejected;
+
+      // numeric symbols
+      await expect(executeTransaction(
+        api, 
+        bob, 
+        api.tx.unique.setCollectionProperties(collectionId, [{key: '123'}]), 
+      )).to.not.be.rejected;
+
+      // underscore symbol
+      await expect(executeTransaction(
+        api, 
+        bob, 
+        api.tx.unique.setCollectionProperties(collectionId, [{key: 'black_hole'}]), 
+      )).to.not.be.rejected;
+
+      // dash symbol
+      await expect(executeTransaction(
+        api, 
+        bob, 
+        api.tx.unique.setCollectionProperties(collectionId, [{key: 'semi-automatic'}]), 
+      )).to.not.be.rejected;
+
+      // underscore symbol
+      await expect(executeTransaction(
+        api, 
+        bob, 
+        api.tx.unique.setCollectionProperties(collectionId, [{key: 'build.rs'}]), 
+      )).to.not.be.rejected;
+
+      const propertyKeys = ['alpha', '123', 'black_hole', 'semi-automatic', 'build.rs'];
+      const properties = (await api.rpc.unique.collectionProperties(collectionId, propertyKeys)).toHuman();
+      expect(properties).to.be.deep.equal([
+        {key: 'alpha', value: ''},
+        {key: '123', value: ''},
+        {key: 'black_hole', value: ''},
+        {key: 'semi-automatic', value: ''},
+        {key: 'build.rs', value: ''},
+      ]);
+    });
+  });
+
   it('Changes properties of a collection', async () => {
     await usingApi(async api => {
       const collection = await createCollectionExpectSuccess();
@@ -241,7 +293,7 @@
 
       const invalidProperties = [
         [{key: 'electron', value: 'negative'}, {key: 'string theory', value: 'understandable'}],
-        [{key: 'Mr.Sandman', value: 'Bring me a gene'}],
+        [{key: 'Mr/Sandman', value: 'Bring me a gene'}],
         [{key: 'déjà vu', value: 'hmm...'}],
       ];
 
@@ -310,7 +362,7 @@
       await expect(executeTransaction(
         api, 
         alice, 
-        api.tx.unique.setPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: true}}]), 
+        api.tx.unique.setTokenPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: true}}]), 
       )).to.not.be.rejected;
 
       await addCollectionAdminExpectSuccess(alice, collection, bob.address);
@@ -318,7 +370,7 @@
       await expect(executeTransaction(
         api, 
         alice, 
-        api.tx.unique.setPropertyPermissions(collection, [{key: 'mindgame', permission: {collectionAdmin: true, tokenOwner: false}}]), 
+        api.tx.unique.setTokenPropertyPermissions(collection, [{key: 'mindgame', permission: {collectionAdmin: true, tokenOwner: false}}]), 
       )).to.not.be.rejected;
 
       const propertyRights = (await api.rpc.unique.propertyPermissions(collection, ['skullduggery', 'mindgame'])).toHuman();
@@ -336,13 +388,13 @@
       await expect(executeTransaction(
         api, 
         alice, 
-        api.tx.unique.setPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: true, collectionAdmin: true}}]), 
+        api.tx.unique.setTokenPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: true, collectionAdmin: true}}]), 
       )).to.not.be.rejected;
 
       await expect(executeTransaction(
         api, 
         alice, 
-        api.tx.unique.setPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: false, tokenOwner: true}}]), 
+        api.tx.unique.setTokenPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: false, tokenOwner: true}}]), 
       )).to.not.be.rejected;
 
       const propertyRights = (await api.rpc.unique.propertyPermissions(collection, ['skullduggery'])).toHuman();
@@ -368,7 +420,7 @@
       await expect(executeTransaction(
         api, 
         bob, 
-        api.tx.unique.setPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: true, tokenOwner: true}}]), 
+        api.tx.unique.setTokenPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: true, tokenOwner: true}}]), 
       )).to.be.rejectedWith(/common\.NoPermission/);
 
       const propertyRights = (await api.rpc.unique.propertyPermissions(collection, ['skullduggery'])).toJSON();
@@ -391,7 +443,7 @@
       await expect(executeTransaction(
         api, 
         alice, 
-        api.tx.unique.setPropertyPermissions(collection, constitution), 
+        api.tx.unique.setTokenPropertyPermissions(collection, constitution), 
       )).to.be.rejectedWith(/common\.PropertyLimitReached/);
 
       const propertyRights = (await api.query.common.collectionPropertyPermissions(collection)).toJSON();
@@ -406,13 +458,13 @@
       await expect(executeTransaction(
         api, 
         alice, 
-        api.tx.unique.setPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: false, tokenOwner: true}}]), 
+        api.tx.unique.setTokenPropertyPermissions(collection, [{key: 'skullduggery', permission: {mutable: false, tokenOwner: true}}]), 
       )).to.not.be.rejected;
 
       await expect(executeTransaction(
         api, 
         alice, 
-        api.tx.unique.setPropertyPermissions(collection, [{key: 'skullduggery', permission: {}}]), 
+        api.tx.unique.setTokenPropertyPermissions(collection, [{key: 'skullduggery', permission: {}}]), 
       )).to.be.rejectedWith(/common\.NoPermission/);
 
       const propertyRights = (await api.rpc.unique.propertyPermissions(collection, ['skullduggery'])).toHuman();
@@ -436,21 +488,21 @@
         await expect(executeTransaction(
           api, 
           alice, 
-          api.tx.unique.setPropertyPermissions(collection, invalidProperties[i]), 
+          api.tx.unique.setTokenPropertyPermissions(collection, invalidProperties[i]), 
         ), `on setting the new badly-named property #${i}`).to.be.rejectedWith(/common\.InvalidCharacterInPropertyKey/);
       }
 
       await expect(executeTransaction(
         api, 
         alice, 
-        api.tx.unique.setPropertyPermissions(collection, [{key: '', permission: {}}]), 
+        api.tx.unique.setTokenPropertyPermissions(collection, [{key: '', permission: {}}]), 
       ), 'on rejecting an unnamed property').to.be.rejectedWith(/common\.EmptyPropertyKey/);
 
       const correctKey = '--0x03116e387820CA05'; // PolkadotJS would parse this as an already encoded hex-string
       await expect(executeTransaction(
         api, 
         alice, 
-        api.tx.unique.setPropertyPermissions(collection, [
+        api.tx.unique.setTokenPropertyPermissions(collection, [
           {key: correctKey, permission: {collectionAdmin: true}},
         ]), 
       ), 'on setting the correctly-but-still-badly-named property').to.not.be.rejected;
@@ -524,7 +576,7 @@
           await expect(executeTransaction(
             api, 
             alice, 
-            api.tx.unique.setPropertyPermissions(collection, [{key: key, permission: permission.permission}]), 
+            api.tx.unique.setTokenPropertyPermissions(collection, [{key: key, permission: permission.permission}]), 
           ), `on setting permission ${i} by ${signer.address}`).to.not.be.rejected;
 
           await expect(executeTransaction(
@@ -560,7 +612,7 @@
           await expect(executeTransaction(
             api, 
             alice, 
-            api.tx.unique.setPropertyPermissions(collection, [{key: key, permission: permission.permission}]), 
+            api.tx.unique.setTokenPropertyPermissions(collection, [{key: key, permission: permission.permission}]), 
           ), `on setting permission ${i} by ${signer.address}`).to.not.be.rejected;
 
           await expect(executeTransaction(
@@ -603,7 +655,7 @@
           await expect(executeTransaction(
             api, 
             alice, 
-            api.tx.unique.setPropertyPermissions(collection, [{key: key, permission: permission.permission}]), 
+            api.tx.unique.setTokenPropertyPermissions(collection, [{key: key, permission: permission.permission}]), 
           ), `on setting permission ${i} by ${signer.address}`).to.not.be.rejected;
 
           await expect(executeTransaction(
@@ -669,7 +721,7 @@
         await expect(executeTransaction(
           api, 
           alice, 
-          api.tx.unique.setPropertyPermissions(collection, [{key: `${i}`, permission: passage.permission}]), 
+          api.tx.unique.setTokenPropertyPermissions(collection, [{key: `${i}`, permission: passage.permission}]), 
         ), `on setting permission ${i} by ${signer.address}`).to.not.be.rejected;
 
         await expect(executeTransaction(
@@ -746,7 +798,7 @@
       await expect(executeTransaction(
         api, 
         alice, 
-        api.tx.unique.setPropertyPermissions(collection, [{key: 'now-existent', permission: {}}]), 
+        api.tx.unique.setTokenPropertyPermissions(collection, [{key: 'now-existent', permission: {}}]), 
       ), 'on setting a new non-permitted property').to.not.be.rejected;
 
       await expect(executeTransaction(
@@ -766,7 +818,7 @@
       await expect(executeTransaction(
         api, 
         alice, 
-        api.tx.unique.setPropertyPermissions(collection, [
+        api.tx.unique.setTokenPropertyPermissions(collection, [
           {key: 'a_holy_book', permission: {collectionAdmin: true, tokenOwner: true}}, 
           {key: 'young_years', permission: {collectionAdmin: true, tokenOwner: true}},
         ]), 
modifiedtests/src/nesting/rules-smoke.test.tsdiffbeforeafterboth
--- a/tests/src/nesting/rules-smoke.test.ts
+++ b/tests/src/nesting/rules-smoke.test.ts
@@ -27,11 +27,11 @@
     await usingApi(async api => {
       const collection = await createCollectionExpectSuccess({mode: {type: 'Fungible',decimalPoints:0}});
       await expect(executeTransaction(api, alice, api.tx.unique.createItem(collection, nestTarget, {Fungible: {Value: 1}})))
-        .to.be.rejectedWith(/^common\.SourceCollectionIsNotAllowedToNest$/);
+        .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);
 
       await createFungibleItemExpectSuccess(alice, collection, {Value:1n}, {Substrate: alice.address});
       await expect(executeTransaction(api, alice, api.tx.unique.transfer(nestTarget, collection, 0, 1n)))
-        .to.be.rejectedWith(/^common\.SourceCollectionIsNotAllowedToNest$/);
+        .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);
     });
   });
 
@@ -39,11 +39,11 @@
     await usingApi(async api => {
       const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
       await expect(executeTransaction(api, alice, api.tx.unique.createItem(collection, nestTarget, {NFT: {properties: []}})))
-        .to.be.rejectedWith(/^common\.SourceCollectionIsNotAllowedToNest$/);
+        .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);
 
       const token = await createItemExpectSuccess(alice, collection, 'NFT', {Substrate: alice.address});
       await expect(executeTransaction(api, alice, api.tx.unique.transfer(nestTarget, collection, token, 1n)))
-        .to.be.rejectedWith(/^common\.SourceCollectionIsNotAllowedToNest$/);
+        .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);
     });
   });
 
@@ -51,11 +51,11 @@
     await usingApi(async api => {
       const collection = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
       await expect(executeTransaction(api, alice, api.tx.unique.createItem(collection, nestTarget, {ReFungible: {}})))
-        .to.be.rejectedWith(/^common\.SourceCollectionIsNotAllowedToNest$/);
+        .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);
 
       const token = await createItemExpectSuccess(alice, collection, 'ReFungible', {Substrate: alice.address});
       await expect(executeTransaction(api, alice, api.tx.unique.transfer(nestTarget, collection, token, 1n)))
-        .to.be.rejectedWith(/^common\.SourceCollectionIsNotAllowedToNest$/);
+        .to.be.rejectedWith(/^common\.UserIsNotAllowedToNest$/);
     });
   });
 });
modifiedtests/src/pallet-presence.test.tsdiffbeforeafterboth
--- a/tests/src/pallet-presence.test.ts
+++ b/tests/src/pallet-presence.test.ts
@@ -50,8 +50,6 @@
   'unique',
   'nonfungible',
   'refungible',
-  'rmrkcore',
-  'rmrkequip',
   'scheduler',
   'charging',
 ];
@@ -64,6 +62,16 @@
 ];
 
 describe('Pallet presence', () => {
+  before(async () => {
+    await usingApi(async api => {
+      const chain = await api.rpc.system.chain();
+
+      if (!chain.eq('UNIQUE')) {
+        requiredPallets.push(...['rmrkcore', 'rmrkequip']);
+      }
+    });
+  });
+
   it('Required pallets are present', async () => {
     await usingApi(async api => {
       for (let i=0; i<requiredPallets.length; i++) {
modifiedtests/src/removeCollectionAdmin.test.tsdiffbeforeafterboth
--- a/tests/src/removeCollectionAdmin.test.ts
+++ b/tests/src/removeCollectionAdmin.test.ts
@@ -118,11 +118,17 @@
       const bob = privateKeyWrapper('//Bob');
       const charlie = privateKeyWrapper('//Charlie');
 
+      const addBobAdminTx = api.tx.unique.addCollectionAdmin(collectionId, normalizeAccountId(bob.address));
+      await submitTransactionAsync(alice, addBobAdminTx);
+      const addCharlieAdminTx = api.tx.unique.addCollectionAdmin(collectionId, normalizeAccountId(charlie.address));
+      await submitTransactionAsync(alice, addCharlieAdminTx);
+
       const adminListAfterAddAdmin = await getAdminList(api, collectionId);
       expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(bob.address));
+      expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(charlie.address));
 
       const removeAdminTx = api.tx.unique.removeCollectionAdmin(collectionId, normalizeAccountId(bob.address));
-      await expect(submitTransactionAsync(charlie, removeAdminTx)).to.be.rejected;
+      await expect(submitTransactionExpectFailAsync(charlie, removeAdminTx)).to.be.rejected;
 
       const adminListAfterRemoveAdmin = await getAdminList(api, collectionId);
       expect(adminListAfterRemoveAdmin).to.be.deep.contains(normalizeAccountId(bob.address));
modifiedtests/src/rmrk/rmrk.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/rmrk.test.ts
+++ b/tests/src/rmrk/rmrk.test.ts
@@ -11,6 +11,7 @@
 } from '../util/helpers';
 import {IKeyringPair} from '@polkadot/types/types';
 import {ApiPromise} from '@polkadot/api';
+import {it} from 'mocha';
 
 let alice: IKeyringPair;
 let bob: IKeyringPair;
@@ -38,6 +39,7 @@
     null,
     'nft-metadata',
     true,
+    null,
   );
   const events = await executeTransaction(api, sender, tx);
   const result = getGenericResult(events, 'rmrkCore', 'NftMinted', (data) => {
@@ -47,14 +49,26 @@
   return result.data!;
 }
 
-describe('RMRK External Integration Test', () => {
+async function isUnique(): Promise<boolean> {
+  return usingApi(async api => {
+    const chain = await api.rpc.system.chain();
+
+    return chain.eq('UNIQUE');
+  });
+}
+
+describe('RMRK External Integration Test', async () => {
+  const it_rmrk = (await isUnique() ? it : it.skip);
+
   before(async () => {
     await usingApi(async (api, privateKeyWrapper) => {
       alice = privateKeyWrapper('//Alice');
+
+      
     });
   });
 
-  it('Creates a new RMRK collection that is mapped to a different ID and is tagged as external', async () => {
+  it_rmrk('Creates a new RMRK collection that is mapped to a different ID and is tagged as external', async () => {
     await usingApi(async api => {
       // throwaway collection to bump last Unique collection ID to test ID mapping
       await createCollectionExpectSuccess();
@@ -69,11 +83,13 @@
   });
 });
 
-describe('Negative Integration Test: External Collections, Internal Ops', () => {
+describe('Negative Integration Test: External Collections, Internal Ops', async () => {
   let uniqueCollectionId: number;
   let rmrkCollectionId: number;
   let rmrkNftId: number;
 
+  const it_rmrk = (await isUnique() ? it : it.skip);
+
   before(async () => {
     await usingApi(async (api, privateKeyWrapper) => {
       alice = privateKeyWrapper('//Alice');
@@ -87,7 +103,7 @@
     });
   });
 
-  it('[Negative] Forbids Unique operations with an external collection, handled by dispatch_call', async () => {
+  it_rmrk('[Negative] Forbids Unique operations with an external collection, handled by dispatch_call', async () => {
     await usingApi(async api => {
       // Collection item creation
 
@@ -113,8 +129,8 @@
       await expect(executeTransaction(api, alice, txDeleteCollectionProperties), 'deleting collection properties')
         .to.be.rejectedWith(/common\.CollectionIsExternal/);
 
-      const txSetPropertyPermissions = api.tx.unique.setPropertyPermissions(uniqueCollectionId, [{key: 'a', permission: {mutable: true}}]);
-      await expect(executeTransaction(api, alice, txSetPropertyPermissions), 'setting property permissions')
+      const txsetTokenPropertyPermissions = api.tx.unique.setTokenPropertyPermissions(uniqueCollectionId, [{key: 'a', permission: {mutable: true}}]);
+      await expect(executeTransaction(api, alice, txsetTokenPropertyPermissions), 'setting property permissions')
         .to.be.rejectedWith(/common\.CollectionIsExternal/);
 
       // NFT
@@ -146,7 +162,7 @@
     });
   });
 
-  it('[Negative] Forbids Unique collection operations with an external collection', async () => {
+  it_rmrk('[Negative] Forbids Unique collection operations with an external collection', async () => {
     await usingApi(async api => {
       const txDestroyCollection = api.tx.unique.destroyCollection(uniqueCollectionId);
       await expect(executeTransaction(api, alice, txDestroyCollection), 'destroying collection')
@@ -205,10 +221,12 @@
   });
 });
 
-describe('Negative Integration Test: Internal Collections, External Ops', () => {
+describe('Negative Integration Test: Internal Collections, External Ops', async () => {
   let collectionId: number;
   let nftId: number;
 
+  const it_rmrk = (await isUnique() ? it : it.skip);
+
   before(async () => {
     await usingApi(async (api, privateKeyWrapper) => {
       alice = privateKeyWrapper('//Alice');
@@ -219,14 +237,15 @@
     });
   });
 
-  it('[Negative] Forbids RMRK operations with the internal collection and NFT (due to the lack of mapping)', async () => {
+  it_rmrk('[Negative] Forbids RMRK operations with the internal collection and NFT (due to the lack of mapping)', async () => {
     await usingApi(async api => {
       const txChangeOwner = api.tx.rmrkCore.changeCollectionIssuer(collectionId, bob.address);
       await expect(executeTransaction(api, alice, txChangeOwner), 'changing collection issuer')
         .to.be.rejectedWith(/rmrkCore\.CollectionUnknown/);
 
-      const txBurnItem = api.tx.rmrkCore.burnNft(collectionId, nftId);
+      const maxBurns = 10;
+      const txBurnItem = api.tx.rmrkCore.burnNft(collectionId, nftId, maxBurns);
       await expect(executeTransaction(api, alice, txBurnItem), 'burning NFT').to.be.rejectedWith(/rmrkCore\.CollectionUnknown/);
     });
   });
-});
\ No newline at end of file
+});
modifiedtests/src/setCollectionLimits.test.tsdiffbeforeafterboth
--- a/tests/src/setCollectionLimits.test.ts
+++ b/tests/src/setCollectionLimits.test.ts
@@ -46,6 +46,7 @@
   before(async () => {
     await usingApi(async (api, privateKeyWrapper) => {
       alice = privateKeyWrapper('//Alice');
+      bob = privateKeyWrapper('//Bob');
       collectionIdForTesting = await createCollectionExpectSuccess({name: 'A', description: 'B', tokenPrefix: 'C', mode: {type: 'NFT'}});
     });
   });
@@ -115,6 +116,21 @@
     });
   });
 
+  it('execute setCollectionLimits from admin collection', async () => {
+    await addCollectionAdminExpectSuccess(alice, collectionIdForTesting, bob.address);
+    await usingApi(async (api: ApiPromise) => {
+      tx = api.tx.unique.setCollectionLimits(
+        collectionIdForTesting,
+        {
+          accountTokenOwnershipLimit,
+          sponsoredDataSize,
+          // sponsoredMintSize,
+          tokenLimit,
+        },
+      );
+      await expect(submitTransactionAsync(bob, tx)).to.be.not.rejected;
+    });
+  });
 });
 
 describe('setCollectionLimits negative', () => {
@@ -143,21 +159,6 @@
     });
   });
   it('execute setCollectionLimits from user who is not owner of this collection', async () => {
-    await usingApi(async (api: ApiPromise) => {
-      tx = api.tx.unique.setCollectionLimits(
-        collectionIdForTesting,
-        {
-          accountTokenOwnershipLimit,
-          sponsoredDataSize,
-          // sponsoredMintSize,
-          tokenLimit,
-        },
-      );
-      await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;
-    });
-  });
-  it('execute setCollectionLimits from admin collection', async () => {
-    await addCollectionAdminExpectSuccess(alice, collectionIdForTesting, bob.address);
     await usingApi(async (api: ApiPromise) => {
       tx = api.tx.unique.setCollectionLimits(
         collectionIdForTesting,
modifiedtests/src/setCollectionSponsor.test.tsdiffbeforeafterboth
--- a/tests/src/setCollectionSponsor.test.ts
+++ b/tests/src/setCollectionSponsor.test.ts
@@ -65,6 +65,11 @@
     await setCollectionSponsorExpectSuccess(collectionId, bob.address);
     await setCollectionSponsorExpectSuccess(collectionId, charlie.address);
   });
+  it('Collection admin add sponsor', async () => {
+    const collectionId = await createCollectionExpectSuccess();
+    await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+    await setCollectionSponsorExpectSuccess(collectionId, charlie.address, '//Bob');
+  });
 });
 
 describe('(!negative test!) integration test: ext. setCollectionSponsor():', () => {
@@ -93,10 +98,5 @@
     const collectionId = await createCollectionExpectSuccess();
     await destroyCollectionExpectSuccess(collectionId);
     await setCollectionSponsorExpectFailure(collectionId, bob.address);
-  });
-  it('(!negative test!) Collection admin add sponsor', async () => {
-    const collectionId = await createCollectionExpectSuccess();
-    await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
-    await setCollectionSponsorExpectFailure(collectionId, charlie.address, '//Bob');
   });
 });
modifiedtests/src/setMintPermission.test.tsdiffbeforeafterboth
--- a/tests/src/setMintPermission.test.ts
+++ b/tests/src/setMintPermission.test.ts
@@ -67,6 +67,14 @@
       await setMintPermissionExpectSuccess(alice, collectionId, false);
     });
   });
+
+  it('Collection admin success on set', async () => {
+    await usingApi(async () => {
+      const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+      await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
+      await setMintPermissionExpectSuccess(bob, collectionId, true);
+    });
+  });
 });
 
 describe('Negative Integration Test setMintPermission', () => {
@@ -100,14 +108,6 @@
     const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
     await enableAllowListExpectSuccess(alice, collectionId);
     await setMintPermissionExpectFailure(bob, collectionId, true);
-  });
-
-  it('Collection admin fails on set', async () => {
-    await usingApi(async () => {
-      const collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
-      await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
-      await setMintPermissionExpectFailure(bob, collectionId, true);
-    });
   });
 
   it('ensure non-allow-listed non-privileged address can\'t mint tokens', async () => {
modifiedtests/src/setPublicAccessMode.test.tsdiffbeforeafterboth
--- a/tests/src/setPublicAccessMode.test.ts
+++ b/tests/src/setPublicAccessMode.test.ts
@@ -103,22 +103,23 @@
       await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;
     });
   });
-});
 
-describe('Negative Integration Test ext. collection admin setPublicAccessMode(): ', () => {
-  before(async () => {
-    await usingApi(async (api, privateKeyWrapper) => {
-      alice = privateKeyWrapper('//Alice');
-      bob = privateKeyWrapper('//Bob');
-    });
-  });
   it('setPublicAccessMode by collection admin', async () => {
     await usingApi(async (api: ApiPromise) => {
       // tslint:disable-next-line: no-bitwise
       const collectionId = await createCollectionExpectSuccess();
       await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
       const tx = api.tx.unique.setCollectionPermissions(collectionId, {access: 'AllowList'});
-      await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;
+      await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.not.rejected;
+    });
+  });
+});
+
+describe('Negative Integration Test ext. collection admin setPublicAccessMode(): ', () => {
+  before(async () => {
+    await usingApi(async (api, privateKeyWrapper) => {
+      alice = privateKeyWrapper('//Alice');
+      bob = privateKeyWrapper('//Bob');
     });
   });
 });
modifiedtests/src/transferFrom.test.tsdiffbeforeafterboth
--- a/tests/src/transferFrom.test.ts
+++ b/tests/src/transferFrom.test.ts
@@ -99,6 +99,7 @@
 
   it('can be called by collection owner on non-owned item when OwnerCanTransfer == true', async () => {
     const collectionId = await createCollectionExpectSuccess();
+    await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
     const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', bob.address);
 
     await transferFromExpectSuccess(collectionId, itemId, alice, bob, charlie);
@@ -257,6 +258,7 @@
     await usingApi(async () => {
       // nft
       const nftCollectionId = await createCollectionExpectSuccess();
+      await setCollectionLimitsExpectSuccess(alice, nftCollectionId, {ownerCanTransfer: true});
       const newNftTokenId = await createItemExpectSuccess(alice, nftCollectionId, 'NFT');
       await burnItemExpectSuccess(alice, nftCollectionId, newNftTokenId, 1);
       await approveExpectFail(nftCollectionId, newNftTokenId, alice, bob);
@@ -266,6 +268,7 @@
   it('transferFrom burnt token before approve Fungible', async () => {
     await usingApi(async () => {
       const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
+      await setCollectionLimitsExpectSuccess(alice, fungibleCollectionId, {ownerCanTransfer: true});
       const newFungibleTokenId = await createItemExpectSuccess(alice, fungibleCollectionId, 'Fungible');
       await burnItemExpectSuccess(alice, fungibleCollectionId, newFungibleTokenId, 10);
       await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, alice, bob.address);
@@ -276,6 +279,7 @@
   it('transferFrom burnt token before approve ReFungible', async () => {
     await usingApi(async () => {
       const reFungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
+      await setCollectionLimitsExpectSuccess(alice, reFungibleCollectionId, {ownerCanTransfer: true});
       const newReFungibleTokenId = await createItemExpectSuccess(alice, reFungibleCollectionId, 'ReFungible');
       await burnItemExpectSuccess(alice, reFungibleCollectionId, newReFungibleTokenId, 100);
       await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, alice, bob);
modifiedtests/src/util/helpers.tsdiffbeforeafterboth
--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -921,6 +921,18 @@
   });
 }
 
+export async function adminApproveFromExpectFail(
+  collectionId: number,
+  tokenId: number, admin: IKeyringPair, owner: CrossAccountId | string, approved: CrossAccountId | string, amount: number | bigint = 1,
+) {
+  await usingApi(async (api: ApiPromise) => {
+    const approveUniqueTx = api.tx.unique.approve(normalizeAccountId(approved), collectionId, tokenId, amount);
+    const events = await expect(submitTransactionAsync(admin, approveUniqueTx)).to.be.rejected;
+    const result = getGenericResult(events);
+    expect(result.success).to.be.false;
+  });
+}
+
 export async function
 getFreeBalance(account: IKeyringPair): Promise<bigint> {
   let balance = 0n;
modifiedtests/update_types.shdiffbeforeafterboth
--- a/tests/update_types.sh
+++ b/tests/update_types.sh
@@ -7,7 +7,7 @@
 fi
 
 rsync -ar --exclude .gitignore src/interfaces/ unique-types-js
-for file in unique-types-js/augment-* unique-types-js/**/types.ts unique-types-js/**/registry.ts; do
+for file in unique-types-js/augment-* unique-types-js/**/types.ts unique-types-js/registry.ts; do
 	sed -i '1s;^;//@ts-nocheck\n;' $file
 done