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
68source = "registry+https://github.com/rust-lang/crates.io-index"68source = "registry+https://github.com/rust-lang/crates.io-index"
69checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"69checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
70dependencies = [70dependencies = [
71 "getrandom 0.2.6",71 "getrandom 0.2.7",
72 "once_cell",72 "once_cell",
73 "version_check",73 "version_check",
74]74]
9999
100[[package]]100[[package]]
101name = "anyhow"101name = "anyhow"
102version = "1.0.57"102version = "1.0.58"
103source = "registry+https://github.com/rust-lang/crates.io-index"103source = "registry+https://github.com/rust-lang/crates.io-index"
104checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc"104checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704"
105105
106[[package]]106[[package]]
107name = "approx"107name = "approx"
188188
189[[package]]189[[package]]
190name = "async-global-executor"190name = "async-global-executor"
191version = "2.1.0"191version = "2.2.0"
192source = "registry+https://github.com/rust-lang/crates.io-index"192source = "registry+https://github.com/rust-lang/crates.io-index"
193checksum = "fd8b508d585e01084059b60f06ade4cb7415cd2e4084b71dd1cb44e7d3fb9880"193checksum = "5262ed948da60dd8956c6c5aca4d4163593dddb7b32d73267c93dab7b2e98940"
194dependencies = [194dependencies = [
195 "async-channel",195 "async-channel",
196 "async-executor",196 "async-executor",
197 "async-io",197 "async-io",
198 "async-lock",198 "async-lock",
199 "blocking",199 "blocking",
200 "futures-lite",200 "futures-lite",
201 "num_cpus",
201 "once_cell",202 "once_cell",
202]203]
203204
248249
249[[package]]250[[package]]
250name = "async-std"251name = "async-std"
251version = "1.11.0"252version = "1.12.0"
252source = "registry+https://github.com/rust-lang/crates.io-index"253source = "registry+https://github.com/rust-lang/crates.io-index"
253checksum = "52580991739c5cdb36cde8b2a516371c0a3b70dda36d916cc08b82372916808c"254checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
254dependencies = [255dependencies = [
255 "async-attributes",256 "async-attributes",
256 "async-channel",257 "async-channel",
267 "kv-log-macro",268 "kv-log-macro",
268 "log",269 "log",
269 "memchr",270 "memchr",
270 "num_cpus",
271 "once_cell",271 "once_cell",
272 "pin-project-lite 0.2.9",272 "pin-project-lite 0.2.9",
273 "pin-utils",273 "pin-utils",
371checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1"371checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1"
372dependencies = [372dependencies = [
373 "futures-core",373 "futures-core",
374 "getrandom 0.2.6",374 "getrandom 0.2.7",
375 "instant",375 "instant",
376 "pin-project-lite 0.2.9",376 "pin-project-lite 0.2.9",
377 "rand 0.8.5",377 "rand 0.8.5",
429[[package]]429[[package]]
430name = "beefy-gadget"430name = "beefy-gadget"
431version = "4.0.0-dev"431version = "4.0.0-dev"
432source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"432source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
433dependencies = [433dependencies = [
434 "beefy-primitives",434 "beefy-primitives",
435 "fnv",435 "fnv",
436 "futures 0.3.21",436 "futures 0.3.21",
437 "futures-timer",437 "futures-timer",
438 "hex",438 "hex",
439 "log",439 "log",
440 "parity-scale-codec 3.1.2",440 "parity-scale-codec 3.1.5",
441 "parking_lot 0.12.1",441 "parking_lot 0.12.1",
442 "sc-chain-spec",442 "sc-chain-spec",
443 "sc-client-api",443 "sc-client-api",
463[[package]]463[[package]]
464name = "beefy-gadget-rpc"464name = "beefy-gadget-rpc"
465version = "4.0.0-dev"465version = "4.0.0-dev"
466source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"466source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
467dependencies = [467dependencies = [
468 "beefy-gadget",468 "beefy-gadget",
469 "beefy-primitives",469 "beefy-primitives",
470 "futures 0.3.21",470 "futures 0.3.21",
471 "jsonrpsee",471 "jsonrpsee",
472 "log",472 "log",
473 "parity-scale-codec 3.1.2",473 "parity-scale-codec 3.1.5",
474 "parking_lot 0.12.1",474 "parking_lot 0.12.1",
475 "sc-rpc",475 "sc-rpc",
476 "sc-utils",476 "sc-utils",
483[[package]]483[[package]]
484name = "beefy-merkle-tree"484name = "beefy-merkle-tree"
485version = "4.0.0-dev"485version = "4.0.0-dev"
486source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"486source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
487487
488[[package]]488[[package]]
489name = "beefy-primitives"489name = "beefy-primitives"
490version = "4.0.0-dev"490version = "4.0.0-dev"
491source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"491source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
492dependencies = [492dependencies = [
493 "parity-scale-codec 3.1.2",493 "parity-scale-codec 3.1.5",
494 "scale-info",494 "scale-info",
495 "sp-api",495 "sp-api",
496 "sp-application-crypto",496 "sp-application-crypto",
695 "bp-runtime",695 "bp-runtime",
696 "finality-grandpa",696 "finality-grandpa",
697 "frame-support",697 "frame-support",
698 "parity-scale-codec 3.1.2",698 "parity-scale-codec 3.1.5",
699 "scale-info",699 "scale-info",
700 "serde",700 "serde",
701 "sp-core",701 "sp-core",
711dependencies = [711dependencies = [
712 "bp-runtime",712 "bp-runtime",
713 "frame-support",713 "frame-support",
714 "parity-scale-codec 3.1.2",714 "parity-scale-codec 3.1.5",
715 "scale-info",715 "scale-info",
716 "sp-std",716 "sp-std",
717]717]
726 "frame-support",726 "frame-support",
727 "frame-system",727 "frame-system",
728 "impl-trait-for-tuples",728 "impl-trait-for-tuples",
729 "parity-scale-codec 3.1.2",729 "parity-scale-codec 3.1.5",
730 "scale-info",730 "scale-info",
731 "serde",731 "serde",
732 "sp-core",732 "sp-core",
742 "bp-runtime",742 "bp-runtime",
743 "frame-support",743 "frame-support",
744 "frame-system",744 "frame-system",
745 "parity-scale-codec 3.1.2",745 "parity-scale-codec 3.1.5",
746 "scale-info",746 "scale-info",
747 "sp-api",747 "sp-api",
748 "sp-core",748 "sp-core",
760 "bp-polkadot-core",760 "bp-polkadot-core",
761 "bp-runtime",761 "bp-runtime",
762 "frame-support",762 "frame-support",
763 "parity-scale-codec 3.1.2",763 "parity-scale-codec 3.1.5",
764 "smallvec",764 "smallvec",
765 "sp-api",765 "sp-api",
766 "sp-runtime",766 "sp-runtime",
776 "frame-support",776 "frame-support",
777 "hash-db",777 "hash-db",
778 "num-traits",778 "num-traits",
779 "parity-scale-codec 3.1.2",779 "parity-scale-codec 3.1.5",
780 "scale-info",780 "scale-info",
781 "sp-core",781 "sp-core",
782 "sp-io",782 "sp-io",
794 "bp-header-chain",794 "bp-header-chain",
795 "ed25519-dalek",795 "ed25519-dalek",
796 "finality-grandpa",796 "finality-grandpa",
797 "parity-scale-codec 3.1.2",797 "parity-scale-codec 3.1.5",
798 "sp-application-crypto",798 "sp-application-crypto",
799 "sp-finality-grandpa",799 "sp-finality-grandpa",
800 "sp-runtime",800 "sp-runtime",
810 "bp-polkadot-core",810 "bp-polkadot-core",
811 "bp-rococo",811 "bp-rococo",
812 "bp-runtime",812 "bp-runtime",
813 "parity-scale-codec 3.1.2",813 "parity-scale-codec 3.1.5",
814 "sp-api",814 "sp-api",
815 "sp-runtime",815 "sp-runtime",
816 "sp-std",816 "sp-std",
831 "pallet-bridge-grandpa",831 "pallet-bridge-grandpa",
832 "pallet-bridge-messages",832 "pallet-bridge-messages",
833 "pallet-transaction-payment",833 "pallet-transaction-payment",
834 "parity-scale-codec 3.1.2",834 "parity-scale-codec 3.1.5",
835 "scale-info",835 "scale-info",
836 "sp-api",836 "sp-api",
837 "sp-core",837 "sp-core",
10671067
1068[[package]]1068[[package]]
1069name = "clap"1069name = "clap"
1070version = "3.1.18"1070version = "3.2.5"
1071source = "registry+https://github.com/rust-lang/crates.io-index"1071source = "registry+https://github.com/rust-lang/crates.io-index"
1072checksum = "d2dbdf4bdacb33466e854ce889eee8dfd5729abf7ccd7664d0a2d60cd384440b"1072checksum = "d53da17d37dba964b9b3ecb5c5a1f193a2762c700e6829201e645b9381c99dc7"
1073dependencies = [1073dependencies = [
1074 "atty",1074 "atty",
1075 "bitflags",1075 "bitflags",
1076 "clap_derive",1076 "clap_derive",
1077 "clap_lex",1077 "clap_lex",
1078 "indexmap",1078 "indexmap",
1079 "lazy_static",1079 "once_cell",
1080 "strsim",1080 "strsim",
1081 "termcolor",1081 "termcolor",
1082 "textwrap",1082 "textwrap",
1083]1083]
10841084
1085[[package]]1085[[package]]
1086name = "clap_derive"1086name = "clap_derive"
1087version = "3.1.18"1087version = "3.2.5"
1088source = "registry+https://github.com/rust-lang/crates.io-index"1088source = "registry+https://github.com/rust-lang/crates.io-index"
1089checksum = "25320346e922cffe59c0bbc5410c8d8784509efb321488971081313cb1e1a33c"1089checksum = "c11d40217d16aee8508cc8e5fde8b4ff24639758608e5374e731b53f85749fb9"
1090dependencies = [1090dependencies = [
1091 "heck 0.4.0",1091 "heck 0.4.0",
1092 "proc-macro-error",1092 "proc-macro-error",
10971097
1098[[package]]1098[[package]]
1099name = "clap_lex"1099name = "clap_lex"
1100version = "0.2.0"1100version = "0.2.2"
1101source = "registry+https://github.com/rust-lang/crates.io-index"1101source = "registry+https://github.com/rust-lang/crates.io-index"
1102checksum = "a37c35f1112dad5e6e0b1adaff798507497a18fceeb30cceb3bae7d1427b9213"1102checksum = "5538cd660450ebeb4234cfecf8f2284b844ffc4c50531e66d584ad5b91293613"
1103dependencies = [1103dependencies = [
1104 "os_str_bytes",1104 "os_str_bytes",
1105]1105]
12971297
1298[[package]]1298[[package]]
1299name = "crossbeam-channel"1299name = "crossbeam-channel"
1300version = "0.5.4"1300version = "0.5.5"
1301source = "registry+https://github.com/rust-lang/crates.io-index"1301source = "registry+https://github.com/rust-lang/crates.io-index"
1302checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53"1302checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c"
1303dependencies = [1303dependencies = [
1304 "cfg-if 1.0.0",1304 "cfg-if 1.0.0",
1305 "crossbeam-utils",1305 "crossbeam-utils",
13181318
1319[[package]]1319[[package]]
1320name = "crossbeam-epoch"1320name = "crossbeam-epoch"
1321version = "0.9.8"1321version = "0.9.9"
1322source = "registry+https://github.com/rust-lang/crates.io-index"1322source = "registry+https://github.com/rust-lang/crates.io-index"
1323checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c"1323checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d"
1324dependencies = [1324dependencies = [
1325 "autocfg",1325 "autocfg",
1326 "cfg-if 1.0.0",1326 "cfg-if 1.0.0",
1327 "crossbeam-utils",1327 "crossbeam-utils",
1328 "lazy_static",
1329 "memoffset",1328 "memoffset",
1329 "once_cell",
1330 "scopeguard",1330 "scopeguard",
1331]1331]
13321332
13421342
1343[[package]]1343[[package]]
1344name = "crossbeam-utils"1344name = "crossbeam-utils"
1345version = "0.8.8"1345version = "0.8.9"
1346source = "registry+https://github.com/rust-lang/crates.io-index"1346source = "registry+https://github.com/rust-lang/crates.io-index"
1347checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38"1347checksum = "8ff1f980957787286a554052d03c7aee98d99cc32e09f6d45f0a814133c87978"
1348dependencies = [1348dependencies = [
1349 "cfg-if 1.0.0",1349 "cfg-if 1.0.0",
1350 "lazy_static",1350 "once_cell",
1351]1351]
13521352
1353[[package]]1353[[package]]
1431[[package]]1431[[package]]
1432name = "cumulus-client-cli"1432name = "cumulus-client-cli"
1433version = "0.1.0"1433version = "0.1.0"
1434source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1434source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1435dependencies = [1435dependencies = [
1436 "clap",1436 "clap",
1437 "sc-cli",1437 "sc-cli",
1442[[package]]1442[[package]]
1443name = "cumulus-client-collator"1443name = "cumulus-client-collator"
1444version = "0.1.0"1444version = "0.1.0"
1445source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1445source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1446dependencies = [1446dependencies = [
1447 "cumulus-client-consensus-common",1447 "cumulus-client-consensus-common",
1448 "cumulus-client-network",1448 "cumulus-client-network",
1449 "cumulus-primitives-core",1449 "cumulus-primitives-core",
1450 "cumulus-relay-chain-interface",1450 "cumulus-relay-chain-interface",
1451 "futures 0.3.21",1451 "futures 0.3.21",
1452 "parity-scale-codec 3.1.2",1452 "parity-scale-codec 3.1.5",
1453 "parking_lot 0.12.1",1453 "parking_lot 0.12.1",
1454 "polkadot-node-primitives",1454 "polkadot-node-primitives",
1455 "polkadot-node-subsystem",1455 "polkadot-node-subsystem",
1466[[package]]1466[[package]]
1467name = "cumulus-client-consensus-aura"1467name = "cumulus-client-consensus-aura"
1468version = "0.1.0"1468version = "0.1.0"
1469source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1469source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1470dependencies = [1470dependencies = [
1471 "async-trait",1471 "async-trait",
1472 "cumulus-client-consensus-common",1472 "cumulus-client-consensus-common",
1473 "cumulus-primitives-core",1473 "cumulus-primitives-core",
1474 "futures 0.3.21",1474 "futures 0.3.21",
1475 "parity-scale-codec 3.1.2",1475 "parity-scale-codec 3.1.5",
1476 "sc-client-api",1476 "sc-client-api",
1477 "sc-consensus",1477 "sc-consensus",
1478 "sc-consensus-aura",1478 "sc-consensus-aura",
1495[[package]]1495[[package]]
1496name = "cumulus-client-consensus-common"1496name = "cumulus-client-consensus-common"
1497version = "0.1.0"1497version = "0.1.0"
1498source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1498source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1499dependencies = [1499dependencies = [
1500 "async-trait",1500 "async-trait",
1501 "cumulus-relay-chain-interface",1501 "cumulus-relay-chain-interface",
1502 "dyn-clone",1502 "dyn-clone",
1503 "futures 0.3.21",1503 "futures 0.3.21",
1504 "parity-scale-codec 3.1.2",1504 "parity-scale-codec 3.1.5",
1505 "polkadot-primitives",1505 "polkadot-primitives",
1506 "sc-client-api",1506 "sc-client-api",
1507 "sc-consensus",1507 "sc-consensus",
1516[[package]]1516[[package]]
1517name = "cumulus-client-network"1517name = "cumulus-client-network"
1518version = "0.1.0"1518version = "0.1.0"
1519source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1519source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1520dependencies = [1520dependencies = [
1521 "async-trait",1521 "async-trait",
1522 "cumulus-relay-chain-interface",1522 "cumulus-relay-chain-interface",
1523 "derive_more",1523 "derive_more",
1524 "futures 0.3.21",1524 "futures 0.3.21",
1525 "futures-timer",1525 "futures-timer",
1526 "parity-scale-codec 3.1.2",1526 "parity-scale-codec 3.1.5",
1527 "parking_lot 0.12.1",1527 "parking_lot 0.12.1",
1528 "polkadot-node-primitives",1528 "polkadot-node-primitives",
1529 "polkadot-parachain",1529 "polkadot-parachain",
1541[[package]]1541[[package]]
1542name = "cumulus-client-pov-recovery"1542name = "cumulus-client-pov-recovery"
1543version = "0.1.0"1543version = "0.1.0"
1544source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1544source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1545dependencies = [1545dependencies = [
1546 "cumulus-primitives-core",1546 "cumulus-primitives-core",
1547 "cumulus-relay-chain-interface",1547 "cumulus-relay-chain-interface",
1548 "futures 0.3.21",1548 "futures 0.3.21",
1549 "futures-timer",1549 "futures-timer",
1550 "parity-scale-codec 3.1.2",1550 "parity-scale-codec 3.1.5",
1551 "polkadot-node-primitives",1551 "polkadot-node-primitives",
1552 "polkadot-node-subsystem",1552 "polkadot-node-subsystem",
1553 "polkadot-overseer",1553 "polkadot-overseer",
1565[[package]]1565[[package]]
1566name = "cumulus-client-service"1566name = "cumulus-client-service"
1567version = "0.1.0"1567version = "0.1.0"
1568source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1568source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1569dependencies = [1569dependencies = [
1570 "cumulus-client-cli",1570 "cumulus-client-cli",
1571 "cumulus-client-collator",1571 "cumulus-client-collator",
1572 "cumulus-client-consensus-common",1572 "cumulus-client-consensus-common",
1573 "cumulus-client-pov-recovery",1573 "cumulus-client-pov-recovery",
1574 "cumulus-primitives-core",1574 "cumulus-primitives-core",
1575 "cumulus-relay-chain-interface",1575 "cumulus-relay-chain-interface",
1576 "parity-scale-codec 3.1.2",1576 "parity-scale-codec 3.1.5",
1577 "parking_lot 0.12.1",1577 "parking_lot 0.12.1",
1578 "polkadot-overseer",1578 "polkadot-overseer",
1579 "polkadot-primitives",1579 "polkadot-primitives",
1595[[package]]1595[[package]]
1596name = "cumulus-pallet-aura-ext"1596name = "cumulus-pallet-aura-ext"
1597version = "0.1.0"1597version = "0.1.0"
1598source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1598source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1599dependencies = [1599dependencies = [
1600 "frame-executive",1600 "frame-executive",
1601 "frame-support",1601 "frame-support",
1602 "frame-system",1602 "frame-system",
1603 "pallet-aura",1603 "pallet-aura",
1604 "parity-scale-codec 3.1.2",1604 "parity-scale-codec 3.1.5",
1605 "scale-info",1605 "scale-info",
1606 "serde",1606 "serde",
1607 "sp-application-crypto",1607 "sp-application-crypto",
1613[[package]]1613[[package]]
1614name = "cumulus-pallet-dmp-queue"1614name = "cumulus-pallet-dmp-queue"
1615version = "0.1.0"1615version = "0.1.0"
1616source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1616source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1617dependencies = [1617dependencies = [
1618 "cumulus-primitives-core",1618 "cumulus-primitives-core",
1619 "frame-support",1619 "frame-support",
1620 "frame-system",1620 "frame-system",
1621 "log",1621 "log",
1622 "parity-scale-codec 3.1.2",1622 "parity-scale-codec 3.1.5",
1623 "scale-info",1623 "scale-info",
1624 "sp-io",1624 "sp-io",
1625 "sp-runtime",1625 "sp-runtime",
1631[[package]]1631[[package]]
1632name = "cumulus-pallet-parachain-system"1632name = "cumulus-pallet-parachain-system"
1633version = "0.1.0"1633version = "0.1.0"
1634source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1634source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1635dependencies = [1635dependencies = [
1636 "cumulus-pallet-parachain-system-proc-macro",1636 "cumulus-pallet-parachain-system-proc-macro",
1637 "cumulus-primitives-core",1637 "cumulus-primitives-core",
1642 "impl-trait-for-tuples",1642 "impl-trait-for-tuples",
1643 "log",1643 "log",
1644 "pallet-balances",1644 "pallet-balances",
1645 "parity-scale-codec 3.1.2",1645 "parity-scale-codec 3.1.5",
1646 "polkadot-parachain",1646 "polkadot-parachain",
1647 "scale-info",1647 "scale-info",
1648 "serde",1648 "serde",
1661[[package]]1661[[package]]
1662name = "cumulus-pallet-parachain-system-proc-macro"1662name = "cumulus-pallet-parachain-system-proc-macro"
1663version = "0.1.0"1663version = "0.1.0"
1664source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1664source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1665dependencies = [1665dependencies = [
1666 "proc-macro-crate",1666 "proc-macro-crate",
1667 "proc-macro2",1667 "proc-macro2",
1672[[package]]1672[[package]]
1673name = "cumulus-pallet-xcm"1673name = "cumulus-pallet-xcm"
1674version = "0.1.0"1674version = "0.1.0"
1675source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1675source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1676dependencies = [1676dependencies = [
1677 "cumulus-primitives-core",1677 "cumulus-primitives-core",
1678 "frame-support",1678 "frame-support",
1679 "frame-system",1679 "frame-system",
1680 "parity-scale-codec 3.1.2",1680 "parity-scale-codec 3.1.5",
1681 "scale-info",1681 "scale-info",
1682 "serde",1682 "serde",
1683 "sp-io",1683 "sp-io",
1689[[package]]1689[[package]]
1690name = "cumulus-pallet-xcmp-queue"1690name = "cumulus-pallet-xcmp-queue"
1691version = "0.1.0"1691version = "0.1.0"
1692source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1692source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1693dependencies = [1693dependencies = [
1694 "cumulus-primitives-core",1694 "cumulus-primitives-core",
1695 "frame-support",1695 "frame-support",
1696 "frame-system",1696 "frame-system",
1697 "log",1697 "log",
1698 "parity-scale-codec 3.1.2",1698 "parity-scale-codec 3.1.5",
1699 "rand_chacha 0.3.1",1699 "rand_chacha 0.3.1",
1700 "scale-info",1700 "scale-info",
1701 "sp-runtime",1701 "sp-runtime",
1707[[package]]1707[[package]]
1708name = "cumulus-primitives-core"1708name = "cumulus-primitives-core"
1709version = "0.1.0"1709version = "0.1.0"
1710source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1710source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1711dependencies = [1711dependencies = [
1712 "frame-support",1712 "frame-support",
1713 "parity-scale-codec 3.1.2",1713 "parity-scale-codec 3.1.5",
1714 "polkadot-core-primitives",1714 "polkadot-core-primitives",
1715 "polkadot-parachain",1715 "polkadot-parachain",
1716 "polkadot-primitives",1716 "polkadot-primitives",
1723[[package]]1723[[package]]
1724name = "cumulus-primitives-parachain-inherent"1724name = "cumulus-primitives-parachain-inherent"
1725version = "0.1.0"1725version = "0.1.0"
1726source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1726source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1727dependencies = [1727dependencies = [
1728 "async-trait",1728 "async-trait",
1729 "cumulus-primitives-core",1729 "cumulus-primitives-core",
1730 "cumulus-relay-chain-interface",1730 "cumulus-relay-chain-interface",
1731 "cumulus-test-relay-sproof-builder",1731 "cumulus-test-relay-sproof-builder",
1732 "parity-scale-codec 3.1.2",1732 "parity-scale-codec 3.1.5",
1733 "sc-client-api",1733 "sc-client-api",
1734 "scale-info",1734 "scale-info",
1735 "sp-api",1735 "sp-api",
1746[[package]]1746[[package]]
1747name = "cumulus-primitives-timestamp"1747name = "cumulus-primitives-timestamp"
1748version = "0.1.0"1748version = "0.1.0"
1749source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1749source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1750dependencies = [1750dependencies = [
1751 "cumulus-primitives-core",1751 "cumulus-primitives-core",
1752 "futures 0.3.21",1752 "futures 0.3.21",
1753 "parity-scale-codec 3.1.2",1753 "parity-scale-codec 3.1.5",
1754 "sp-inherents",1754 "sp-inherents",
1755 "sp-std",1755 "sp-std",
1756 "sp-timestamp",1756 "sp-timestamp",
1759[[package]]1759[[package]]
1760name = "cumulus-primitives-utility"1760name = "cumulus-primitives-utility"
1761version = "0.1.0"1761version = "0.1.0"
1762source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1762source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1763dependencies = [1763dependencies = [
1764 "cumulus-primitives-core",1764 "cumulus-primitives-core",
1765 "frame-support",1765 "frame-support",
1766 "parity-scale-codec 3.1.2",1766 "parity-scale-codec 3.1.5",
1767 "polkadot-core-primitives",1767 "polkadot-core-primitives",
1768 "polkadot-parachain",1768 "polkadot-parachain",
1769 "polkadot-primitives",1769 "polkadot-primitives",
1776[[package]]1776[[package]]
1777name = "cumulus-relay-chain-inprocess-interface"1777name = "cumulus-relay-chain-inprocess-interface"
1778version = "0.1.0"1778version = "0.1.0"
1779source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1779source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1780dependencies = [1780dependencies = [
1781 "async-trait",1781 "async-trait",
1782 "cumulus-primitives-core",1782 "cumulus-primitives-core",
1807[[package]]1807[[package]]
1808name = "cumulus-relay-chain-interface"1808name = "cumulus-relay-chain-interface"
1809version = "0.1.0"1809version = "0.1.0"
1810source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1810source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1811dependencies = [1811dependencies = [
1812 "async-trait",1812 "async-trait",
1813 "cumulus-primitives-core",1813 "cumulus-primitives-core",
1814 "derive_more",1814 "derive_more",
1815 "futures 0.3.21",1815 "futures 0.3.21",
1816 "jsonrpsee-core",1816 "jsonrpsee-core",
1817 "parity-scale-codec 3.1.2",1817 "parity-scale-codec 3.1.5",
1818 "parking_lot 0.12.1",1818 "parking_lot 0.12.1",
1819 "polkadot-overseer",1819 "polkadot-overseer",
1820 "polkadot-service",1820 "polkadot-service",
1831[[package]]1831[[package]]
1832name = "cumulus-relay-chain-rpc-interface"1832name = "cumulus-relay-chain-rpc-interface"
1833version = "0.1.0"1833version = "0.1.0"
1834source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1834source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1835dependencies = [1835dependencies = [
1836 "async-trait",1836 "async-trait",
1837 "backoff",1837 "backoff",
1840 "futures 0.3.21",1840 "futures 0.3.21",
1841 "futures-timer",1841 "futures-timer",
1842 "jsonrpsee",1842 "jsonrpsee",
1843 "parity-scale-codec 3.1.2",1843 "parity-scale-codec 3.1.5",
1844 "parking_lot 0.12.1",1844 "parking_lot 0.12.1",
1845 "polkadot-service",1845 "polkadot-service",
1846 "sc-client-api",1846 "sc-client-api",
1857[[package]]1857[[package]]
1858name = "cumulus-test-relay-sproof-builder"1858name = "cumulus-test-relay-sproof-builder"
1859version = "0.1.0"1859version = "0.1.0"
1860source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"1860source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
1861dependencies = [1861dependencies = [
1862 "cumulus-primitives-core",1862 "cumulus-primitives-core",
1863 "parity-scale-codec 3.1.2",1863 "parity-scale-codec 3.1.5",
1864 "polkadot-primitives",1864 "polkadot-primitives",
1865 "sp-runtime",1865 "sp-runtime",
1866 "sp-state-machine",1866 "sp-state-machine",
21152115
2116[[package]]2116[[package]]
2117name = "dyn-clone"2117name = "dyn-clone"
2118version = "1.0.5"2118version = "1.0.6"
2119source = "registry+https://github.com/rust-lang/crates.io-index"2119source = "registry+https://github.com/rust-lang/crates.io-index"
2120checksum = "21e50f3adc76d6a43f5ed73b698a87d0760ca74617f60f7c3b879003536fdd28"2120checksum = "140206b78fb2bc3edbcfc9b5ccbd0b30699cfe8d348b8b31b330e47df5291a5a"
21212121
2122[[package]]2122[[package]]
2123name = "ecdsa"2123name = "ecdsa"
2286 "ethereum-types",2286 "ethereum-types",
2287 "hash-db",2287 "hash-db",
2288 "hash256-std-hasher",2288 "hash256-std-hasher",
2289 "parity-scale-codec 3.1.2",2289 "parity-scale-codec 3.1.5",
2290 "rlp",2290 "rlp",
2291 "rlp-derive",2291 "rlp-derive",
2292 "scale-info",2292 "scale-info",
2329 "evm-gasometer",2329 "evm-gasometer",
2330 "evm-runtime",2330 "evm-runtime",
2331 "log",2331 "log",
2332 "parity-scale-codec 3.1.2",2332 "parity-scale-codec 3.1.5",
2333 "primitive-types",2333 "primitive-types",
2334 "rlp",2334 "rlp",
2335 "scale-info",2335 "scale-info",
2368version = "0.35.0"2368version = "0.35.0"
2369source = "git+https://github.com/uniquenetwork/evm?branch=unique-polkadot-v0.9.23#e9252ed42dc26fc85b6703b1ba50660a08209e55"2369source = "git+https://github.com/uniquenetwork/evm?branch=unique-polkadot-v0.9.23#e9252ed42dc26fc85b6703b1ba50660a08209e55"
2370dependencies = [2370dependencies = [
2371 "parity-scale-codec 3.1.2",2371 "parity-scale-codec 3.1.5",
2372 "primitive-types",2372 "primitive-types",
2373 "scale-info",2373 "scale-info",
2374 "serde",2374 "serde",
2504 "fp-storage",2504 "fp-storage",
2505 "kvdb-rocksdb",2505 "kvdb-rocksdb",
2506 "parity-db",2506 "parity-db",
2507 "parity-scale-codec 3.1.2",2507 "parity-scale-codec 3.1.5",
2508 "parking_lot 0.12.1",2508 "parking_lot 0.12.1",
2509 "sc-client-db",2509 "sc-client-db",
2510 "sp-core",2510 "sp-core",
2546 "jsonrpsee",2546 "jsonrpsee",
2547 "libsecp256k1",2547 "libsecp256k1",
2548 "log",2548 "log",
2549 "lru 0.7.6",2549 "lru 0.7.7",
2550 "parity-scale-codec 3.1.2",2550 "parity-scale-codec 3.1.5",
2551 "prometheus",2551 "prometheus",
2552 "rand 0.8.5",2552 "rand 0.8.5",
2553 "rlp",2553 "rlp",
2623 "futures-timer",2623 "futures-timer",
2624 "log",2624 "log",
2625 "num-traits",2625 "num-traits",
2626 "parity-scale-codec 3.1.2",2626 "parity-scale-codec 3.1.5",
2627 "parking_lot 0.11.2",2627 "parking_lot 0.11.2",
2628 "scale-info",2628 "scale-info",
2629]2629]
2682[[package]]2682[[package]]
2683name = "fork-tree"2683name = "fork-tree"
2684version = "3.0.0"2684version = "3.0.0"
2685source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"2685source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
2686dependencies = [2686dependencies = [
2687 "parity-scale-codec 3.1.2",2687 "parity-scale-codec 3.1.5",
2688]2688]
26892689
2690[[package]]2690[[package]]
2703source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.23#29adc958b0541466d564c781aa70fb7e3ef263a2"2703source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.23#29adc958b0541466d564c781aa70fb7e3ef263a2"
2704dependencies = [2704dependencies = [
2705 "ethereum",2705 "ethereum",
2706 "parity-scale-codec 3.1.2",2706 "parity-scale-codec 3.1.5",
2707 "sp-core",2707 "sp-core",
2708 "sp-runtime",2708 "sp-runtime",
2709 "sp-std",2709 "sp-std",
2717 "evm",2717 "evm",
2718 "frame-support",2718 "frame-support",
2719 "impl-trait-for-tuples",2719 "impl-trait-for-tuples",
2720 "parity-scale-codec 3.1.2",2720 "parity-scale-codec 3.1.5",
2721 "serde",2721 "serde",
2722 "sp-core",2722 "sp-core",
2723 "sp-std",2723 "sp-std",
2740 "ethereum",2740 "ethereum",
2741 "ethereum-types",2741 "ethereum-types",
2742 "fp-evm",2742 "fp-evm",
2743 "parity-scale-codec 3.1.2",2743 "parity-scale-codec 3.1.5",
2744 "scale-info",2744 "scale-info",
2745 "sp-api",2745 "sp-api",
2746 "sp-core",2746 "sp-core",
2756dependencies = [2756dependencies = [
2757 "ethereum",2757 "ethereum",
2758 "frame-support",2758 "frame-support",
2759 "parity-scale-codec 3.1.2",2759 "parity-scale-codec 3.1.5",
2760 "parity-util-mem",2760 "parity-util-mem",
2761 "scale-info",2761 "scale-info",
2762 "serde",2762 "serde",
2770version = "2.0.0"2770version = "2.0.0"
2771source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.23#29adc958b0541466d564c781aa70fb7e3ef263a2"2771source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.23#29adc958b0541466d564c781aa70fb7e3ef263a2"
2772dependencies = [2772dependencies = [
2773 "parity-scale-codec 3.1.2",2773 "parity-scale-codec 3.1.5",
2774]2774]
27752775
2776[[package]]2776[[package]]
2777name = "frame-benchmarking"2777name = "frame-benchmarking"
2778version = "4.0.0-dev"2778version = "4.0.0-dev"
2779source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"2779source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
2780dependencies = [2780dependencies = [
2781 "frame-support",2781 "frame-support",
2782 "frame-system",2782 "frame-system",
2783 "linregress",2783 "linregress",
2784 "log",2784 "log",
2785 "parity-scale-codec 3.1.2",2785 "parity-scale-codec 3.1.5",
2786 "paste",2786 "paste",
2787 "scale-info",2787 "scale-info",
2788 "serde",2788 "serde",
2798[[package]]2798[[package]]
2799name = "frame-benchmarking-cli"2799name = "frame-benchmarking-cli"
2800version = "4.0.0-dev"2800version = "4.0.0-dev"
2801source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"2801source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
2802dependencies = [2802dependencies = [
2803 "Inflector",2803 "Inflector",
2804 "chrono",2804 "chrono",
2816 "linked-hash-map",2816 "linked-hash-map",
2817 "log",2817 "log",
2818 "memory-db",2818 "memory-db",
2819 "parity-scale-codec 3.1.2",2819 "parity-scale-codec 3.1.5",
2820 "rand 0.8.5",2820 "rand 0.8.5",
2821 "rand_pcg 0.3.1",2821 "rand_pcg 0.3.1",
2822 "sc-block-builder",2822 "sc-block-builder",
2848[[package]]2848[[package]]
2849name = "frame-election-provider-solution-type"2849name = "frame-election-provider-solution-type"
2850version = "4.0.0-dev"2850version = "4.0.0-dev"
2851source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"2851source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
2852dependencies = [2852dependencies = [
2853 "proc-macro-crate",2853 "proc-macro-crate",
2854 "proc-macro2",2854 "proc-macro2",
2859[[package]]2859[[package]]
2860name = "frame-election-provider-support"2860name = "frame-election-provider-support"
2861version = "4.0.0-dev"2861version = "4.0.0-dev"
2862source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"2862source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
2863dependencies = [2863dependencies = [
2864 "frame-election-provider-solution-type",2864 "frame-election-provider-solution-type",
2865 "frame-support",2865 "frame-support",
2866 "frame-system",2866 "frame-system",
2867 "parity-scale-codec 3.1.2",2867 "parity-scale-codec 3.1.5",
2868 "scale-info",2868 "scale-info",
2869 "sp-arithmetic",2869 "sp-arithmetic",
2870 "sp-npos-elections",2870 "sp-npos-elections",
2875[[package]]2875[[package]]
2876name = "frame-executive"2876name = "frame-executive"
2877version = "4.0.0-dev"2877version = "4.0.0-dev"
2878source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"2878source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
2879dependencies = [2879dependencies = [
2880 "frame-support",2880 "frame-support",
2881 "frame-system",2881 "frame-system",
2882 "parity-scale-codec 3.1.2",2882 "parity-scale-codec 3.1.5",
2883 "scale-info",2883 "scale-info",
2884 "sp-core",2884 "sp-core",
2885 "sp-io",2885 "sp-io",
2895checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d"2895checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d"
2896dependencies = [2896dependencies = [
2897 "cfg-if 1.0.0",2897 "cfg-if 1.0.0",
2898 "parity-scale-codec 3.1.2",2898 "parity-scale-codec 3.1.5",
2899 "scale-info",2899 "scale-info",
2900 "serde",2900 "serde",
2901]2901]
29022902
2903[[package]]2903[[package]]
2904name = "frame-support"2904name = "frame-support"
2905version = "4.0.0-dev"2905version = "4.0.0-dev"
2906source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"2906source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
2907dependencies = [2907dependencies = [
2908 "bitflags",2908 "bitflags",
2909 "frame-metadata",2909 "frame-metadata",
2912 "k256",2912 "k256",
2913 "log",2913 "log",
2914 "once_cell",2914 "once_cell",
2915 "parity-scale-codec 3.1.2",2915 "parity-scale-codec 3.1.5",
2916 "paste",2916 "paste",
2917 "scale-info",2917 "scale-info",
2918 "serde",2918 "serde",
2933[[package]]2933[[package]]
2934name = "frame-support-procedural"2934name = "frame-support-procedural"
2935version = "4.0.0-dev"2935version = "4.0.0-dev"
2936source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"2936source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
2937dependencies = [2937dependencies = [
2938 "Inflector",2938 "Inflector",
2939 "frame-support-procedural-tools",2939 "frame-support-procedural-tools",
2945[[package]]2945[[package]]
2946name = "frame-support-procedural-tools"2946name = "frame-support-procedural-tools"
2947version = "4.0.0-dev"2947version = "4.0.0-dev"
2948source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"2948source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
2949dependencies = [2949dependencies = [
2950 "frame-support-procedural-tools-derive",2950 "frame-support-procedural-tools-derive",
2951 "proc-macro-crate",2951 "proc-macro-crate",
2957[[package]]2957[[package]]
2958name = "frame-support-procedural-tools-derive"2958name = "frame-support-procedural-tools-derive"
2959version = "3.0.0"2959version = "3.0.0"
2960source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"2960source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
2961dependencies = [2961dependencies = [
2962 "proc-macro2",2962 "proc-macro2",
2963 "quote",2963 "quote",
2967[[package]]2967[[package]]
2968name = "frame-system"2968name = "frame-system"
2969version = "4.0.0-dev"2969version = "4.0.0-dev"
2970source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"2970source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
2971dependencies = [2971dependencies = [
2972 "frame-support",2972 "frame-support",
2973 "log",2973 "log",
2974 "parity-scale-codec 3.1.2",2974 "parity-scale-codec 3.1.5",
2975 "scale-info",2975 "scale-info",
2976 "serde",2976 "serde",
2977 "sp-core",2977 "sp-core",
2984[[package]]2984[[package]]
2985name = "frame-system-benchmarking"2985name = "frame-system-benchmarking"
2986version = "4.0.0-dev"2986version = "4.0.0-dev"
2987source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"2987source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
2988dependencies = [2988dependencies = [
2989 "frame-benchmarking",2989 "frame-benchmarking",
2990 "frame-support",2990 "frame-support",
2991 "frame-system",2991 "frame-system",
2992 "parity-scale-codec 3.1.2",2992 "parity-scale-codec 3.1.5",
2993 "scale-info",2993 "scale-info",
2994 "sp-core",2994 "sp-core",
2995 "sp-runtime",2995 "sp-runtime",
2999[[package]]2999[[package]]
3000name = "frame-system-rpc-runtime-api"3000name = "frame-system-rpc-runtime-api"
3001version = "4.0.0-dev"3001version = "4.0.0-dev"
3002source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"3002source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
3003dependencies = [3003dependencies = [
3004 "parity-scale-codec 3.1.2",3004 "parity-scale-codec 3.1.5",
3005 "sp-api",3005 "sp-api",
3006]3006]
30073007
3008[[package]]3008[[package]]
3009name = "frame-try-runtime"3009name = "frame-try-runtime"
3010version = "0.10.0-dev"3010version = "0.10.0-dev"
3011source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"3011source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
3012dependencies = [3012dependencies = [
3013 "frame-support",3013 "frame-support",
3014 "sp-api",3014 "sp-api",
32253225
3226[[package]]3226[[package]]
3227name = "getrandom"3227name = "getrandom"
3228version = "0.2.6"3228version = "0.2.7"
3229source = "registry+https://github.com/rust-lang/crates.io-index"3229source = "registry+https://github.com/rust-lang/crates.io-index"
3230checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"3230checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
3231dependencies = [3231dependencies = [
3232 "cfg-if 1.0.0",3232 "cfg-if 1.0.0",
3233 "libc",3233 "libc",
3234 "wasi 0.10.0+wasi-snapshot-preview1",3234 "wasi 0.11.0+wasi-snapshot-preview1",
3235]3235]
32363236
3237[[package]]3237[[package]]
32633263
3264[[package]]3264[[package]]
3265name = "globset"3265name = "globset"
3266version = "0.4.8"3266version = "0.4.9"
3267source = "registry+https://github.com/rust-lang/crates.io-index"3267source = "registry+https://github.com/rust-lang/crates.io-index"
3268checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd"3268checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a"
3269dependencies = [3269dependencies = [
3270 "aho-corasick",3270 "aho-corasick",
3271 "bstr",3271 "bstr",
35553555
3556[[package]]3556[[package]]
3557name = "if-watch"3557name = "if-watch"
3558version = "1.0.0"3558version = "1.1.0"
3559source = "registry+https://github.com/rust-lang/crates.io-index"3559source = "registry+https://github.com/rust-lang/crates.io-index"
3560checksum = "ae8f4a3c3d4c89351ca83e120c1c00b27df945d38e05695668c9d4b4f7bc52f3"3560checksum = "774d59367a3d26965d21ac70a86fcb697d83405d1c4312d1d8a6855296af0cf7"
3561dependencies = [3561dependencies = [
3562 "async-io",3562 "async-io",
3563 "core-foundation",3563 "core-foundation",
3577source = "registry+https://github.com/rust-lang/crates.io-index"3577source = "registry+https://github.com/rust-lang/crates.io-index"
3578checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f"3578checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f"
3579dependencies = [3579dependencies = [
3580 "parity-scale-codec 3.1.2",3580 "parity-scale-codec 3.1.5",
3581]3581]
35823582
3583[[package]]3583[[package]]
36113611
3612[[package]]3612[[package]]
3613name = "indexmap"3613name = "indexmap"
3614version = "1.8.2"3614version = "1.9.0"
3615source = "registry+https://github.com/rust-lang/crates.io-index"3615source = "registry+https://github.com/rust-lang/crates.io-index"
3616checksum = "e6012d540c5baa3589337a98ce73408de9b5a25ec9fc2c6fd6be8f0d39e0ca5a"3616checksum = "6c6392766afd7964e2531940894cffe4bd8d7d17dbc3c1c4857040fd4b33bdb3"
3617dependencies = [3617dependencies = [
3618 "autocfg",3618 "autocfg",
3619 "hashbrown 0.11.2",3619 "hashbrown 0.12.1",
3620 "serde",3620 "serde",
3621]3621]
36223622
37063706
3707[[package]]3707[[package]]
3708name = "js-sys"3708name = "js-sys"
3709version = "0.3.57"3709version = "0.3.58"
3710source = "registry+https://github.com/rust-lang/crates.io-index"3710source = "registry+https://github.com/rust-lang/crates.io-index"
3711checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397"3711checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27"
3712dependencies = [3712dependencies = [
3713 "wasm-bindgen",3713 "wasm-bindgen",
3714]3714]
3927 "pallet-vesting",3927 "pallet-vesting",
3928 "pallet-xcm",3928 "pallet-xcm",
3929 "pallet-xcm-benchmarks",3929 "pallet-xcm-benchmarks",
3930 "parity-scale-codec 3.1.2",3930 "parity-scale-codec 3.1.5",
3931 "polkadot-primitives",3931 "polkadot-primitives",
3932 "polkadot-runtime-common",3932 "polkadot-runtime-common",
3933 "polkadot-runtime-parachains",3933 "polkadot-runtime-parachains",
4074 "bytes 1.1.0",4074 "bytes 1.1.0",
4075 "futures 0.3.21",4075 "futures 0.3.21",
4076 "futures-timer",4076 "futures-timer",
4077 "getrandom 0.2.6",4077 "getrandom 0.2.7",
4078 "instant",4078 "instant",
4079 "lazy_static",4079 "lazy_static",
4080 "libp2p-autonat",4080 "libp2p-autonat",
4245 "libp2p-core",4245 "libp2p-core",
4246 "libp2p-swarm",4246 "libp2p-swarm",
4247 "log",4247 "log",
4248 "lru 0.7.6",4248 "lru 0.7.7",
4249 "prost 0.9.0",4249 "prost 0.9.0",
4250 "prost-build",4250 "prost-build",
4251 "smallvec",4251 "smallvec",
47104710
4711[[package]]4711[[package]]
4712name = "lru"4712name = "lru"
4713version = "0.7.6"4713version = "0.7.7"
4714source = "registry+https://github.com/rust-lang/crates.io-index"4714source = "registry+https://github.com/rust-lang/crates.io-index"
4715checksum = "8015d95cb7b2ddd3c0d32ca38283ceb1eea09b4713ee380bceb942d85a244228"4715checksum = "c84e6fe5655adc6ce00787cf7dcaf8dc4f998a0565d23eafc207a8b08ca3349a"
4716dependencies = [4716dependencies = [
4717 "hashbrown 0.11.2",4717 "hashbrown 0.11.2",
4718]4718]
48994899
4900[[package]]4900[[package]]
4901name = "mio"4901name = "mio"
4902version = "0.8.3"4902version = "0.8.4"
4903source = "registry+https://github.com/rust-lang/crates.io-index"4903source = "registry+https://github.com/rust-lang/crates.io-index"
4904checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799"4904checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf"
4905dependencies = [4905dependencies = [
4906 "libc",4906 "libc",
4907 "log",4907 "log",
51525152
5153[[package]]5153[[package]]
5154name = "num-complex"5154name = "num-complex"
5155version = "0.4.1"5155version = "0.4.2"
5156source = "registry+https://github.com/rust-lang/crates.io-index"5156source = "registry+https://github.com/rust-lang/crates.io-index"
5157checksum = "97fbc387afefefd5e9e39493299f3069e14a140dd34dc19b4c1c1a8fddb6a790"5157checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19"
5158dependencies = [5158dependencies = [
5159 "num-traits",5159 "num-traits",
5160]5160]
52505250
5251[[package]]5251[[package]]
5252name = "opal-runtime"5252name = "opal-runtime"
5253version = "0.9.22"5253version = "0.9.23"
5254dependencies = [5254dependencies = [
5255 "cumulus-pallet-aura-ext",5255 "cumulus-pallet-aura-ext",
5256 "cumulus-pallet-dmp-queue",5256 "cumulus-pallet-dmp-queue",
5299 "pallet-transaction-payment-rpc-runtime-api",5299 "pallet-transaction-payment-rpc-runtime-api",
5300 "pallet-treasury",5300 "pallet-treasury",
5301 "pallet-unique",5301 "pallet-unique",
5302 "pallet-unq-scheduler",5302 "pallet-unique-scheduler",
5303 "pallet-xcm",5303 "pallet-xcm",
5304 "parachain-info",5304 "parachain-info",
5305 "parity-scale-codec 3.1.2",5305 "parity-scale-codec 3.1.5",
5306 "polkadot-parachain",5306 "polkadot-parachain",
5307 "rmrk-rpc",5307 "rmrk-rpc",
5308 "scale-info",5308 "scale-info",
5393dependencies = [5393dependencies = [
5394 "frame-support",5394 "frame-support",
5395 "frame-system",5395 "frame-system",
5396 "parity-scale-codec 3.1.2",5396 "parity-scale-codec 3.1.5",
5397 "scale-info",5397 "scale-info",
5398 "serde",5398 "serde",
5399 "sp-io",5399 "sp-io",
5419[[package]]5419[[package]]
5420name = "pallet-aura"5420name = "pallet-aura"
5421version = "4.0.0-dev"5421version = "4.0.0-dev"
5422source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5422source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5423dependencies = [5423dependencies = [
5424 "frame-support",5424 "frame-support",
5425 "frame-system",5425 "frame-system",
5426 "pallet-timestamp",5426 "pallet-timestamp",
5427 "parity-scale-codec 3.1.2",5427 "parity-scale-codec 3.1.5",
5428 "scale-info",5428 "scale-info",
5429 "sp-application-crypto",5429 "sp-application-crypto",
5430 "sp-consensus-aura",5430 "sp-consensus-aura",
5435[[package]]5435[[package]]
5436name = "pallet-authority-discovery"5436name = "pallet-authority-discovery"
5437version = "4.0.0-dev"5437version = "4.0.0-dev"
5438source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5438source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5439dependencies = [5439dependencies = [
5440 "frame-support",5440 "frame-support",
5441 "frame-system",5441 "frame-system",
5442 "pallet-session",5442 "pallet-session",
5443 "parity-scale-codec 3.1.2",5443 "parity-scale-codec 3.1.5",
5444 "scale-info",5444 "scale-info",
5445 "sp-application-crypto",5445 "sp-application-crypto",
5446 "sp-authority-discovery",5446 "sp-authority-discovery",
5451[[package]]5451[[package]]
5452name = "pallet-authorship"5452name = "pallet-authorship"
5453version = "4.0.0-dev"5453version = "4.0.0-dev"
5454source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5454source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5455dependencies = [5455dependencies = [
5456 "frame-support",5456 "frame-support",
5457 "frame-system",5457 "frame-system",
5458 "impl-trait-for-tuples",5458 "impl-trait-for-tuples",
5459 "parity-scale-codec 3.1.2",5459 "parity-scale-codec 3.1.5",
5460 "scale-info",5460 "scale-info",
5461 "sp-authorship",5461 "sp-authorship",
5462 "sp-runtime",5462 "sp-runtime",
5466[[package]]5466[[package]]
5467name = "pallet-babe"5467name = "pallet-babe"
5468version = "4.0.0-dev"5468version = "4.0.0-dev"
5469source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5469source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5470dependencies = [5470dependencies = [
5471 "frame-benchmarking",5471 "frame-benchmarking",
5472 "frame-support",5472 "frame-support",
5475 "pallet-authorship",5475 "pallet-authorship",
5476 "pallet-session",5476 "pallet-session",
5477 "pallet-timestamp",5477 "pallet-timestamp",
5478 "parity-scale-codec 3.1.2",5478 "parity-scale-codec 3.1.5",
5479 "scale-info",5479 "scale-info",
5480 "sp-application-crypto",5480 "sp-application-crypto",
5481 "sp-consensus-babe",5481 "sp-consensus-babe",
5490[[package]]5490[[package]]
5491name = "pallet-bags-list"5491name = "pallet-bags-list"
5492version = "4.0.0-dev"5492version = "4.0.0-dev"
5493source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5493source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5494dependencies = [5494dependencies = [
5495 "frame-benchmarking",5495 "frame-benchmarking",
5496 "frame-election-provider-support",5496 "frame-election-provider-support",
5497 "frame-support",5497 "frame-support",
5498 "frame-system",5498 "frame-system",
5499 "log",5499 "log",
5500 "pallet-balances",5500 "pallet-balances",
5501 "parity-scale-codec 3.1.2",5501 "parity-scale-codec 3.1.5",
5502 "scale-info",5502 "scale-info",
5503 "sp-core",5503 "sp-core",
5504 "sp-io",5504 "sp-io",
5510[[package]]5510[[package]]
5511name = "pallet-balances"5511name = "pallet-balances"
5512version = "4.0.0-dev"5512version = "4.0.0-dev"
5513source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5513source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5514dependencies = [5514dependencies = [
5515 "frame-benchmarking",5515 "frame-benchmarking",
5516 "frame-support",5516 "frame-support",
5517 "frame-system",5517 "frame-system",
5518 "log",5518 "log",
5519 "parity-scale-codec 3.1.2",5519 "parity-scale-codec 3.1.5",
5520 "scale-info",5520 "scale-info",
5521 "sp-runtime",5521 "sp-runtime",
5522 "sp-std",5522 "sp-std",
5530 "fp-evm",5530 "fp-evm",
5531 "frame-support",5531 "frame-support",
5532 "frame-system",5532 "frame-system",
5533 "parity-scale-codec 3.1.2",5533 "parity-scale-codec 3.1.5",
5534 "scale-info",5534 "scale-info",
5535 "serde",5535 "serde",
5536 "sp-core",5536 "sp-core",
5540[[package]]5540[[package]]
5541name = "pallet-beefy"5541name = "pallet-beefy"
5542version = "4.0.0-dev"5542version = "4.0.0-dev"
5543source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5543source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5544dependencies = [5544dependencies = [
5545 "beefy-primitives",5545 "beefy-primitives",
5546 "frame-support",5546 "frame-support",
5547 "frame-system",5547 "frame-system",
5548 "pallet-session",5548 "pallet-session",
5549 "parity-scale-codec 3.1.2",5549 "parity-scale-codec 3.1.5",
5550 "scale-info",5550 "scale-info",
5551 "serde",5551 "serde",
5552 "sp-runtime",5552 "sp-runtime",
5556[[package]]5556[[package]]
5557name = "pallet-beefy-mmr"5557name = "pallet-beefy-mmr"
5558version = "4.0.0-dev"5558version = "4.0.0-dev"
5559source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5559source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5560dependencies = [5560dependencies = [
5561 "beefy-merkle-tree",5561 "beefy-merkle-tree",
5562 "beefy-primitives",5562 "beefy-primitives",
5567 "pallet-beefy",5567 "pallet-beefy",
5568 "pallet-mmr",5568 "pallet-mmr",
5569 "pallet-session",5569 "pallet-session",
5570 "parity-scale-codec 3.1.2",5570 "parity-scale-codec 3.1.5",
5571 "scale-info",5571 "scale-info",
5572 "serde",5572 "serde",
5573 "sp-core",5573 "sp-core",
5579[[package]]5579[[package]]
5580name = "pallet-bounties"5580name = "pallet-bounties"
5581version = "4.0.0-dev"5581version = "4.0.0-dev"
5582source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5582source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5583dependencies = [5583dependencies = [
5584 "frame-benchmarking",5584 "frame-benchmarking",
5585 "frame-support",5585 "frame-support",
5586 "frame-system",5586 "frame-system",
5587 "log",5587 "log",
5588 "pallet-treasury",5588 "pallet-treasury",
5589 "parity-scale-codec 3.1.2",5589 "parity-scale-codec 3.1.5",
5590 "scale-info",5590 "scale-info",
5591 "sp-core",5591 "sp-core",
5592 "sp-io",5592 "sp-io",
5604 "frame-support",5604 "frame-support",
5605 "frame-system",5605 "frame-system",
5606 "log",5606 "log",
5607 "parity-scale-codec 3.1.2",5607 "parity-scale-codec 3.1.5",
5608 "scale-info",5608 "scale-info",
5609 "sp-core",5609 "sp-core",
5610 "sp-runtime",5610 "sp-runtime",
5624 "frame-system",5624 "frame-system",
5625 "log",5625 "log",
5626 "num-traits",5626 "num-traits",
5627 "parity-scale-codec 3.1.2",5627 "parity-scale-codec 3.1.5",
5628 "scale-info",5628 "scale-info",
5629 "serde",5629 "serde",
5630 "sp-finality-grandpa",5630 "sp-finality-grandpa",
5646 "frame-system",5646 "frame-system",
5647 "log",5647 "log",
5648 "num-traits",5648 "num-traits",
5649 "parity-scale-codec 3.1.2",5649 "parity-scale-codec 3.1.5",
5650 "scale-info",5650 "scale-info",
5651 "serde",5651 "serde",
5652 "sp-core",5652 "sp-core",
5657[[package]]5657[[package]]
5658name = "pallet-child-bounties"5658name = "pallet-child-bounties"
5659version = "4.0.0-dev"5659version = "4.0.0-dev"
5660source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5660source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5661dependencies = [5661dependencies = [
5662 "frame-benchmarking",5662 "frame-benchmarking",
5663 "frame-support",5663 "frame-support",
5664 "frame-system",5664 "frame-system",
5665 "log",5665 "log",
5666 "pallet-bounties",5666 "pallet-bounties",
5667 "pallet-treasury",5667 "pallet-treasury",
5668 "parity-scale-codec 3.1.2",5668 "parity-scale-codec 3.1.5",
5669 "scale-info",5669 "scale-info",
5670 "sp-core",5670 "sp-core",
5671 "sp-io",5671 "sp-io",
5676[[package]]5676[[package]]
5677name = "pallet-collective"5677name = "pallet-collective"
5678version = "4.0.0-dev"5678version = "4.0.0-dev"
5679source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5679source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5680dependencies = [5680dependencies = [
5681 "frame-benchmarking",5681 "frame-benchmarking",
5682 "frame-support",5682 "frame-support",
5683 "frame-system",5683 "frame-system",
5684 "log",5684 "log",
5685 "parity-scale-codec 3.1.2",5685 "parity-scale-codec 3.1.5",
5686 "scale-info",5686 "scale-info",
5687 "sp-core",5687 "sp-core",
5688 "sp-io",5688 "sp-io",
5702 "frame-system",5702 "frame-system",
5703 "pallet-evm",5703 "pallet-evm",
5704 "pallet-evm-coder-substrate",5704 "pallet-evm-coder-substrate",
5705 "parity-scale-codec 3.1.2",5705 "parity-scale-codec 3.1.5",
5706 "scale-info",5706 "scale-info",
5707 "serde",5707 "serde",
5708 "sp-core",5708 "sp-core",
5714[[package]]5714[[package]]
5715name = "pallet-democracy"5715name = "pallet-democracy"
5716version = "4.0.0-dev"5716version = "4.0.0-dev"
5717source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5717source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5718dependencies = [5718dependencies = [
5719 "frame-benchmarking",5719 "frame-benchmarking",
5720 "frame-support",5720 "frame-support",
5721 "frame-system",5721 "frame-system",
5722 "parity-scale-codec 3.1.2",5722 "parity-scale-codec 3.1.5",
5723 "scale-info",5723 "scale-info",
5724 "serde",5724 "serde",
5725 "sp-io",5725 "sp-io",
5730[[package]]5730[[package]]
5731name = "pallet-election-provider-multi-phase"5731name = "pallet-election-provider-multi-phase"
5732version = "4.0.0-dev"5732version = "4.0.0-dev"
5733source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5733source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5734dependencies = [5734dependencies = [
5735 "frame-benchmarking",5735 "frame-benchmarking",
5736 "frame-election-provider-support",5736 "frame-election-provider-support",
5737 "frame-support",5737 "frame-support",
5738 "frame-system",5738 "frame-system",
5739 "log",5739 "log",
5740 "parity-scale-codec 3.1.2",5740 "parity-scale-codec 3.1.5",
5741 "rand 0.7.3",5741 "rand 0.7.3",
5742 "scale-info",5742 "scale-info",
5743 "sp-arithmetic",5743 "sp-arithmetic",
5753[[package]]5753[[package]]
5754name = "pallet-election-provider-support-benchmarking"5754name = "pallet-election-provider-support-benchmarking"
5755version = "4.0.0-dev"5755version = "4.0.0-dev"
5756source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5756source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5757dependencies = [5757dependencies = [
5758 "frame-benchmarking",5758 "frame-benchmarking",
5759 "frame-election-provider-support",5759 "frame-election-provider-support",
5760 "frame-system",5760 "frame-system",
5761 "parity-scale-codec 3.1.2",5761 "parity-scale-codec 3.1.5",
5762 "sp-npos-elections",5762 "sp-npos-elections",
5763 "sp-runtime",5763 "sp-runtime",
5764]5764]
57655765
5766[[package]]5766[[package]]
5767name = "pallet-elections-phragmen"5767name = "pallet-elections-phragmen"
5768version = "5.0.0-dev"5768version = "5.0.0-dev"
5769source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5769source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5770dependencies = [5770dependencies = [
5771 "frame-benchmarking",5771 "frame-benchmarking",
5772 "frame-support",5772 "frame-support",
5773 "frame-system",5773 "frame-system",
5774 "log",5774 "log",
5775 "parity-scale-codec 3.1.2",5775 "parity-scale-codec 3.1.5",
5776 "scale-info",5776 "scale-info",
5777 "sp-core",5777 "sp-core",
5778 "sp-io",5778 "sp-io",
5800 "log",5800 "log",
5801 "pallet-evm",5801 "pallet-evm",
5802 "pallet-timestamp",5802 "pallet-timestamp",
5803 "parity-scale-codec 3.1.2",5803 "parity-scale-codec 3.1.5",
5804 "rlp",5804 "rlp",
5805 "scale-info",5805 "scale-info",
5806 "serde",5806 "serde",
5825 "impl-trait-for-tuples",5825 "impl-trait-for-tuples",
5826 "log",5826 "log",
5827 "pallet-timestamp",5827 "pallet-timestamp",
5828 "parity-scale-codec 3.1.2",5828 "parity-scale-codec 3.1.5",
5829 "primitive-types",5829 "primitive-types",
5830 "rlp",5830 "rlp",
5831 "scale-info",5831 "scale-info",
5848 "frame-system",5848 "frame-system",
5849 "pallet-ethereum",5849 "pallet-ethereum",
5850 "pallet-evm",5850 "pallet-evm",
5851 "parity-scale-codec 3.1.2",5851 "parity-scale-codec 3.1.5",
5852 "scale-info",5852 "scale-info",
5853 "sp-core",5853 "sp-core",
5854 "sp-std",5854 "sp-std",
5867 "pallet-common",5867 "pallet-common",
5868 "pallet-evm",5868 "pallet-evm",
5869 "pallet-evm-coder-substrate",5869 "pallet-evm-coder-substrate",
5870 "parity-scale-codec 3.1.2",5870 "parity-scale-codec 3.1.5",
5871 "scale-info",5871 "scale-info",
5872 "sp-core",5872 "sp-core",
5873 "sp-runtime",5873 "sp-runtime",
5885 "frame-support",5885 "frame-support",
5886 "frame-system",5886 "frame-system",
5887 "pallet-evm",5887 "pallet-evm",
5888 "parity-scale-codec 3.1.2",5888 "parity-scale-codec 3.1.5",
5889 "scale-info",5889 "scale-info",
5890 "sp-core",5890 "sp-core",
5891 "sp-io",5891 "sp-io",
5903 "frame-system",5903 "frame-system",
5904 "pallet-ethereum",5904 "pallet-ethereum",
5905 "pallet-evm",5905 "pallet-evm",
5906 "parity-scale-codec 3.1.2",5906 "parity-scale-codec 3.1.5",
5907 "scale-info",5907 "scale-info",
5908 "sp-core",5908 "sp-core",
5909 "sp-io",5909 "sp-io",
5925 "pallet-evm",5925 "pallet-evm",
5926 "pallet-evm-coder-substrate",5926 "pallet-evm-coder-substrate",
5927 "pallet-structure",5927 "pallet-structure",
5928 "parity-scale-codec 3.1.2",5928 "parity-scale-codec 3.1.5",
5929 "scale-info",5929 "scale-info",
5930 "sp-core",5930 "sp-core",
5931 "sp-runtime",5931 "sp-runtime",
5936[[package]]5936[[package]]
5937name = "pallet-gilt"5937name = "pallet-gilt"
5938version = "4.0.0-dev"5938version = "4.0.0-dev"
5939source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5939source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5940dependencies = [5940dependencies = [
5941 "frame-benchmarking",5941 "frame-benchmarking",
5942 "frame-support",5942 "frame-support",
5943 "frame-system",5943 "frame-system",
5944 "parity-scale-codec 3.1.2",5944 "parity-scale-codec 3.1.5",
5945 "scale-info",5945 "scale-info",
5946 "sp-arithmetic",5946 "sp-arithmetic",
5947 "sp-runtime",5947 "sp-runtime",
5951[[package]]5951[[package]]
5952name = "pallet-grandpa"5952name = "pallet-grandpa"
5953version = "4.0.0-dev"5953version = "4.0.0-dev"
5954source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5954source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5955dependencies = [5955dependencies = [
5956 "frame-benchmarking",5956 "frame-benchmarking",
5957 "frame-support",5957 "frame-support",
5958 "frame-system",5958 "frame-system",
5959 "log",5959 "log",
5960 "pallet-authorship",5960 "pallet-authorship",
5961 "pallet-session",5961 "pallet-session",
5962 "parity-scale-codec 3.1.2",5962 "parity-scale-codec 3.1.5",
5963 "scale-info",5963 "scale-info",
5964 "sp-application-crypto",5964 "sp-application-crypto",
5965 "sp-core",5965 "sp-core",
5974[[package]]5974[[package]]
5975name = "pallet-identity"5975name = "pallet-identity"
5976version = "4.0.0-dev"5976version = "4.0.0-dev"
5977source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5977source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5978dependencies = [5978dependencies = [
5979 "enumflags2",5979 "enumflags2",
5980 "frame-benchmarking",5980 "frame-benchmarking",
5981 "frame-support",5981 "frame-support",
5982 "frame-system",5982 "frame-system",
5983 "parity-scale-codec 3.1.2",5983 "parity-scale-codec 3.1.5",
5984 "scale-info",5984 "scale-info",
5985 "sp-io",5985 "sp-io",
5986 "sp-runtime",5986 "sp-runtime",
5990[[package]]5990[[package]]
5991name = "pallet-im-online"5991name = "pallet-im-online"
5992version = "4.0.0-dev"5992version = "4.0.0-dev"
5993source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"5993source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
5994dependencies = [5994dependencies = [
5995 "frame-benchmarking",5995 "frame-benchmarking",
5996 "frame-support",5996 "frame-support",
5997 "frame-system",5997 "frame-system",
5998 "log",5998 "log",
5999 "pallet-authorship",5999 "pallet-authorship",
6000 "parity-scale-codec 3.1.2",6000 "parity-scale-codec 3.1.5",
6001 "scale-info",6001 "scale-info",
6002 "sp-application-crypto",6002 "sp-application-crypto",
6003 "sp-core",6003 "sp-core",
6010[[package]]6010[[package]]
6011name = "pallet-indices"6011name = "pallet-indices"
6012version = "4.0.0-dev"6012version = "4.0.0-dev"
6013source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6013source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6014dependencies = [6014dependencies = [
6015 "frame-benchmarking",6015 "frame-benchmarking",
6016 "frame-support",6016 "frame-support",
6017 "frame-system",6017 "frame-system",
6018 "parity-scale-codec 3.1.2",6018 "parity-scale-codec 3.1.5",
6019 "scale-info",6019 "scale-info",
6020 "sp-core",6020 "sp-core",
6021 "sp-io",6021 "sp-io",
6034 "pallet-balances",6034 "pallet-balances",
6035 "pallet-randomness-collective-flip",6035 "pallet-randomness-collective-flip",
6036 "pallet-timestamp",6036 "pallet-timestamp",
6037 "parity-scale-codec 3.1.2",6037 "parity-scale-codec 3.1.5",
6038 "scale-info",6038 "scale-info",
6039 "serde",6039 "serde",
6040 "sp-core",6040 "sp-core",
6046[[package]]6046[[package]]
6047name = "pallet-membership"6047name = "pallet-membership"
6048version = "4.0.0-dev"6048version = "4.0.0-dev"
6049source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6049source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6050dependencies = [6050dependencies = [
6051 "frame-benchmarking",6051 "frame-benchmarking",
6052 "frame-support",6052 "frame-support",
6053 "frame-system",6053 "frame-system",
6054 "log",6054 "log",
6055 "parity-scale-codec 3.1.2",6055 "parity-scale-codec 3.1.5",
6056 "scale-info",6056 "scale-info",
6057 "sp-core",6057 "sp-core",
6058 "sp-io",6058 "sp-io",
6063[[package]]6063[[package]]
6064name = "pallet-mmr"6064name = "pallet-mmr"
6065version = "4.0.0-dev"6065version = "4.0.0-dev"
6066source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6066source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6067dependencies = [6067dependencies = [
6068 "ckb-merkle-mountain-range",6068 "ckb-merkle-mountain-range",
6069 "frame-benchmarking",6069 "frame-benchmarking",
6070 "frame-support",6070 "frame-support",
6071 "frame-system",6071 "frame-system",
6072 "parity-scale-codec 3.1.2",6072 "parity-scale-codec 3.1.5",
6073 "scale-info",6073 "scale-info",
6074 "sp-core",6074 "sp-core",
6075 "sp-io",6075 "sp-io",
6081[[package]]6081[[package]]
6082name = "pallet-mmr-rpc"6082name = "pallet-mmr-rpc"
6083version = "3.0.0"6083version = "3.0.0"
6084source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6084source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6085dependencies = [6085dependencies = [
6086 "jsonrpsee",6086 "jsonrpsee",
6087 "parity-scale-codec 3.1.2",6087 "parity-scale-codec 3.1.5",
6088 "serde",6088 "serde",
6089 "sp-api",6089 "sp-api",
6090 "sp-blockchain",6090 "sp-blockchain",
6096[[package]]6096[[package]]
6097name = "pallet-multisig"6097name = "pallet-multisig"
6098version = "4.0.0-dev"6098version = "4.0.0-dev"
6099source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6099source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6100dependencies = [6100dependencies = [
6101 "frame-benchmarking",6101 "frame-benchmarking",
6102 "frame-support",6102 "frame-support",
6103 "frame-system",6103 "frame-system",
6104 "parity-scale-codec 3.1.2",6104 "parity-scale-codec 3.1.5",
6105 "scale-info",6105 "scale-info",
6106 "sp-io",6106 "sp-io",
6107 "sp-runtime",6107 "sp-runtime",
6111[[package]]6111[[package]]
6112name = "pallet-nicks"6112name = "pallet-nicks"
6113version = "4.0.0-dev"6113version = "4.0.0-dev"
6114source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6114source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6115dependencies = [6115dependencies = [
6116 "frame-support",6116 "frame-support",
6117 "frame-system",6117 "frame-system",
6118 "parity-scale-codec 3.1.2",6118 "parity-scale-codec 3.1.5",
6119 "scale-info",6119 "scale-info",
6120 "sp-io",6120 "sp-io",
6121 "sp-runtime",6121 "sp-runtime",
6125[[package]]6125[[package]]
6126name = "pallet-nomination-pools"6126name = "pallet-nomination-pools"
6127version = "1.0.0"6127version = "1.0.0"
6128source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6128source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6129dependencies = [6129dependencies = [
6130 "frame-support",6130 "frame-support",
6131 "frame-system",6131 "frame-system",
6132 "log",6132 "log",
6133 "parity-scale-codec 3.1.2",6133 "parity-scale-codec 3.1.5",
6134 "scale-info",6134 "scale-info",
6135 "sp-core",6135 "sp-core",
6136 "sp-runtime",6136 "sp-runtime",
6141[[package]]6141[[package]]
6142name = "pallet-nomination-pools-benchmarking"6142name = "pallet-nomination-pools-benchmarking"
6143version = "1.0.0"6143version = "1.0.0"
6144source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6144source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6145dependencies = [6145dependencies = [
6146 "frame-benchmarking",6146 "frame-benchmarking",
6147 "frame-election-provider-support",6147 "frame-election-provider-support",
6150 "pallet-bags-list",6150 "pallet-bags-list",
6151 "pallet-nomination-pools",6151 "pallet-nomination-pools",
6152 "pallet-staking",6152 "pallet-staking",
6153 "parity-scale-codec 3.1.2",6153 "parity-scale-codec 3.1.5",
6154 "scale-info",6154 "scale-info",
6155 "sp-runtime",6155 "sp-runtime",
6156 "sp-staking",6156 "sp-staking",
6170 "pallet-evm",6170 "pallet-evm",
6171 "pallet-evm-coder-substrate",6171 "pallet-evm-coder-substrate",
6172 "pallet-structure",6172 "pallet-structure",
6173 "parity-scale-codec 3.1.2",6173 "parity-scale-codec 3.1.5",
6174 "scale-info",6174 "scale-info",
6175 "sp-core",6175 "sp-core",
6176 "sp-runtime",6176 "sp-runtime",
6182[[package]]6182[[package]]
6183name = "pallet-offences"6183name = "pallet-offences"
6184version = "4.0.0-dev"6184version = "4.0.0-dev"
6185source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6185source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6186dependencies = [6186dependencies = [
6187 "frame-support",6187 "frame-support",
6188 "frame-system",6188 "frame-system",
6189 "log",6189 "log",
6190 "pallet-balances",6190 "pallet-balances",
6191 "parity-scale-codec 3.1.2",6191 "parity-scale-codec 3.1.5",
6192 "scale-info",6192 "scale-info",
6193 "serde",6193 "serde",
6194 "sp-runtime",6194 "sp-runtime",
6199[[package]]6199[[package]]
6200name = "pallet-offences-benchmarking"6200name = "pallet-offences-benchmarking"
6201version = "4.0.0-dev"6201version = "4.0.0-dev"
6202source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6202source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6203dependencies = [6203dependencies = [
6204 "frame-benchmarking",6204 "frame-benchmarking",
6205 "frame-election-provider-support",6205 "frame-election-provider-support",
6212 "pallet-offences",6212 "pallet-offences",
6213 "pallet-session",6213 "pallet-session",
6214 "pallet-staking",6214 "pallet-staking",
6215 "parity-scale-codec 3.1.2",6215 "parity-scale-codec 3.1.5",
6216 "scale-info",6216 "scale-info",
6217 "sp-runtime",6217 "sp-runtime",
6218 "sp-staking",6218 "sp-staking",
6222[[package]]6222[[package]]
6223name = "pallet-preimage"6223name = "pallet-preimage"
6224version = "4.0.0-dev"6224version = "4.0.0-dev"
6225source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6225source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6226dependencies = [6226dependencies = [
6227 "frame-benchmarking",6227 "frame-benchmarking",
6228 "frame-support",6228 "frame-support",
6229 "frame-system",6229 "frame-system",
6230 "parity-scale-codec 3.1.2",6230 "parity-scale-codec 3.1.5",
6231 "scale-info",6231 "scale-info",
6232 "sp-core",6232 "sp-core",
6233 "sp-io",6233 "sp-io",
6238[[package]]6238[[package]]
6239name = "pallet-proxy"6239name = "pallet-proxy"
6240version = "4.0.0-dev"6240version = "4.0.0-dev"
6241source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6241source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6242dependencies = [6242dependencies = [
6243 "frame-benchmarking",6243 "frame-benchmarking",
6244 "frame-support",6244 "frame-support",
6245 "frame-system",6245 "frame-system",
6246 "parity-scale-codec 3.1.2",6246 "parity-scale-codec 3.1.5",
6247 "scale-info",6247 "scale-info",
6248 "sp-io",6248 "sp-io",
6249 "sp-runtime",6249 "sp-runtime",
6253[[package]]6253[[package]]
6254name = "pallet-randomness-collective-flip"6254name = "pallet-randomness-collective-flip"
6255version = "4.0.0-dev"6255version = "4.0.0-dev"
6256source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6256source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6257dependencies = [6257dependencies = [
6258 "frame-support",6258 "frame-support",
6259 "frame-system",6259 "frame-system",
6260 "parity-scale-codec 3.1.2",6260 "parity-scale-codec 3.1.5",
6261 "safe-mix",6261 "safe-mix",
6262 "scale-info",6262 "scale-info",
6263 "sp-runtime",6263 "sp-runtime",
6267[[package]]6267[[package]]
6268name = "pallet-recovery"6268name = "pallet-recovery"
6269version = "4.0.0-dev"6269version = "4.0.0-dev"
6270source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6270source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6271dependencies = [6271dependencies = [
6272 "frame-benchmarking",6272 "frame-benchmarking",
6273 "frame-support",6273 "frame-support",
6274 "frame-system",6274 "frame-system",
6275 "parity-scale-codec 3.1.2",6275 "parity-scale-codec 3.1.5",
6276 "scale-info",6276 "scale-info",
6277 "sp-io",6277 "sp-io",
6278 "sp-runtime",6278 "sp-runtime",
6289 "pallet-common",6289 "pallet-common",
6290 "pallet-evm",6290 "pallet-evm",
6291 "pallet-structure",6291 "pallet-structure",
6292 "parity-scale-codec 3.1.2",6292 "parity-scale-codec 3.1.5",
6293 "scale-info",6293 "scale-info",
6294 "sp-core",6294 "sp-core",
6295 "sp-runtime",6295 "sp-runtime",
6310 "pallet-evm",6310 "pallet-evm",
6311 "pallet-nonfungible",6311 "pallet-nonfungible",
6312 "pallet-structure",6312 "pallet-structure",
6313 "parity-scale-codec 3.1.2",6313 "parity-scale-codec 3.1.5",
6314 "rmrk-traits",6314 "rmrk-traits",
6315 "scale-info",6315 "scale-info",
6316 "sp-core",6316 "sp-core",
6330 "pallet-evm",6330 "pallet-evm",
6331 "pallet-nonfungible",6331 "pallet-nonfungible",
6332 "pallet-rmrk-core",6332 "pallet-rmrk-core",
6333 "parity-scale-codec 3.1.2",6333 "parity-scale-codec 3.1.5",
6334 "rmrk-traits",6334 "rmrk-traits",
6335 "scale-info",6335 "scale-info",
6336 "sp-core",6336 "sp-core",
6342[[package]]6342[[package]]
6343name = "pallet-scheduler"6343name = "pallet-scheduler"
6344version = "4.0.0-dev"6344version = "4.0.0-dev"
6345source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6345source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6346dependencies = [6346dependencies = [
6347 "frame-benchmarking",6347 "frame-benchmarking",
6348 "frame-support",6348 "frame-support",
6349 "frame-system",6349 "frame-system",
6350 "log",6350 "log",
6351 "parity-scale-codec 3.1.2",6351 "parity-scale-codec 3.1.5",
6352 "scale-info",6352 "scale-info",
6353 "sp-io",6353 "sp-io",
6354 "sp-runtime",6354 "sp-runtime",
6358[[package]]6358[[package]]
6359name = "pallet-session"6359name = "pallet-session"
6360version = "4.0.0-dev"6360version = "4.0.0-dev"
6361source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6361source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6362dependencies = [6362dependencies = [
6363 "frame-support",6363 "frame-support",
6364 "frame-system",6364 "frame-system",
6365 "impl-trait-for-tuples",6365 "impl-trait-for-tuples",
6366 "log",6366 "log",
6367 "pallet-timestamp",6367 "pallet-timestamp",
6368 "parity-scale-codec 3.1.2",6368 "parity-scale-codec 3.1.5",
6369 "scale-info",6369 "scale-info",
6370 "sp-core",6370 "sp-core",
6371 "sp-io",6371 "sp-io",
6379[[package]]6379[[package]]
6380name = "pallet-session-benchmarking"6380name = "pallet-session-benchmarking"
6381version = "4.0.0-dev"6381version = "4.0.0-dev"
6382source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6382source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6383dependencies = [6383dependencies = [
6384 "frame-benchmarking",6384 "frame-benchmarking",
6385 "frame-support",6385 "frame-support",
6395[[package]]6395[[package]]
6396name = "pallet-society"6396name = "pallet-society"
6397version = "4.0.0-dev"6397version = "4.0.0-dev"
6398source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6398source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6399dependencies = [6399dependencies = [
6400 "frame-support",6400 "frame-support",
6401 "frame-system",6401 "frame-system",
6402 "parity-scale-codec 3.1.2",6402 "parity-scale-codec 3.1.5",
6403 "rand_chacha 0.2.2",6403 "rand_chacha 0.2.2",
6404 "scale-info",6404 "scale-info",
6405 "sp-runtime",6405 "sp-runtime",
6409[[package]]6409[[package]]
6410name = "pallet-staking"6410name = "pallet-staking"
6411version = "4.0.0-dev"6411version = "4.0.0-dev"
6412source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6412source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6413dependencies = [6413dependencies = [
6414 "frame-benchmarking",6414 "frame-benchmarking",
6415 "frame-election-provider-support",6415 "frame-election-provider-support",
6418 "log",6418 "log",
6419 "pallet-authorship",6419 "pallet-authorship",
6420 "pallet-session",6420 "pallet-session",
6421 "parity-scale-codec 3.1.2",6421 "parity-scale-codec 3.1.5",
6422 "rand_chacha 0.2.2",6422 "rand_chacha 0.2.2",
6423 "scale-info",6423 "scale-info",
6424 "serde",6424 "serde",
6432[[package]]6432[[package]]
6433name = "pallet-staking-reward-curve"6433name = "pallet-staking-reward-curve"
6434version = "4.0.0-dev"6434version = "4.0.0-dev"
6435source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6435source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6436dependencies = [6436dependencies = [
6437 "proc-macro-crate",6437 "proc-macro-crate",
6438 "proc-macro2",6438 "proc-macro2",
6443[[package]]6443[[package]]
6444name = "pallet-staking-reward-fn"6444name = "pallet-staking-reward-fn"
6445version = "4.0.0-dev"6445version = "4.0.0-dev"
6446source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6446source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6447dependencies = [6447dependencies = [
6448 "log",6448 "log",
6449 "sp-arithmetic",6449 "sp-arithmetic",
6458 "frame-system",6458 "frame-system",
6459 "pallet-common",6459 "pallet-common",
6460 "pallet-evm",6460 "pallet-evm",
6461 "parity-scale-codec 3.1.2",6461 "parity-scale-codec 3.1.5",
6462 "scale-info",6462 "scale-info",
6463 "sp-std",6463 "sp-std",
6464 "up-data-structs",6464 "up-data-structs",
6467[[package]]6467[[package]]
6468name = "pallet-sudo"6468name = "pallet-sudo"
6469version = "4.0.0-dev"6469version = "4.0.0-dev"
6470source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6470source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6471dependencies = [6471dependencies = [
6472 "frame-support",6472 "frame-support",
6473 "frame-system",6473 "frame-system",
6474 "parity-scale-codec 3.1.2",6474 "parity-scale-codec 3.1.5",
6475 "scale-info",6475 "scale-info",
6476 "sp-io",6476 "sp-io",
6477 "sp-runtime",6477 "sp-runtime",
6488 "frame-system",6488 "frame-system",
6489 "pallet-balances",6489 "pallet-balances",
6490 "pallet-transaction-payment",6490 "pallet-transaction-payment",
6491 "parity-scale-codec 3.1.2",6491 "parity-scale-codec 3.1.5",
6492 "scale-info",6492 "scale-info",
6493 "serde",6493 "serde",
6494 "sp-core",6494 "sp-core",
6501[[package]]6501[[package]]
6502name = "pallet-timestamp"6502name = "pallet-timestamp"
6503version = "4.0.0-dev"6503version = "4.0.0-dev"
6504source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6504source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6505dependencies = [6505dependencies = [
6506 "frame-benchmarking",6506 "frame-benchmarking",
6507 "frame-support",6507 "frame-support",
6508 "frame-system",6508 "frame-system",
6509 "log",6509 "log",
6510 "parity-scale-codec 3.1.2",6510 "parity-scale-codec 3.1.5",
6511 "scale-info",6511 "scale-info",
6512 "sp-inherents",6512 "sp-inherents",
6513 "sp-io",6513 "sp-io",
6519[[package]]6519[[package]]
6520name = "pallet-tips"6520name = "pallet-tips"
6521version = "4.0.0-dev"6521version = "4.0.0-dev"
6522source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6522source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6523dependencies = [6523dependencies = [
6524 "frame-benchmarking",6524 "frame-benchmarking",
6525 "frame-support",6525 "frame-support",
6526 "frame-system",6526 "frame-system",
6527 "log",6527 "log",
6528 "pallet-treasury",6528 "pallet-treasury",
6529 "parity-scale-codec 3.1.2",6529 "parity-scale-codec 3.1.5",
6530 "scale-info",6530 "scale-info",
6531 "serde",6531 "serde",
6532 "sp-core",6532 "sp-core",
6538[[package]]6538[[package]]
6539name = "pallet-transaction-payment"6539name = "pallet-transaction-payment"
6540version = "4.0.0-dev"6540version = "4.0.0-dev"
6541source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6541source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6542dependencies = [6542dependencies = [
6543 "frame-support",6543 "frame-support",
6544 "frame-system",6544 "frame-system",
6545 "parity-scale-codec 3.1.2",6545 "parity-scale-codec 3.1.5",
6546 "scale-info",6546 "scale-info",
6547 "serde",6547 "serde",
6548 "sp-core",6548 "sp-core",
6554[[package]]6554[[package]]
6555name = "pallet-transaction-payment-rpc"6555name = "pallet-transaction-payment-rpc"
6556version = "4.0.0-dev"6556version = "4.0.0-dev"
6557source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6557source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6558dependencies = [6558dependencies = [
6559 "jsonrpsee",6559 "jsonrpsee",
6560 "pallet-transaction-payment-rpc-runtime-api",6560 "pallet-transaction-payment-rpc-runtime-api",
6561 "parity-scale-codec 3.1.2",6561 "parity-scale-codec 3.1.5",
6562 "sp-api",6562 "sp-api",
6563 "sp-blockchain",6563 "sp-blockchain",
6564 "sp-core",6564 "sp-core",
6569[[package]]6569[[package]]
6570name = "pallet-transaction-payment-rpc-runtime-api"6570name = "pallet-transaction-payment-rpc-runtime-api"
6571version = "4.0.0-dev"6571version = "4.0.0-dev"
6572source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6572source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6573dependencies = [6573dependencies = [
6574 "pallet-transaction-payment",6574 "pallet-transaction-payment",
6575 "parity-scale-codec 3.1.2",6575 "parity-scale-codec 3.1.5",
6576 "sp-api",6576 "sp-api",
6577 "sp-runtime",6577 "sp-runtime",
6578]6578]
65796579
6580[[package]]6580[[package]]
6581name = "pallet-treasury"6581name = "pallet-treasury"
6582version = "4.0.0-dev"6582version = "4.0.0-dev"
6583source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6583source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6584dependencies = [6584dependencies = [
6585 "frame-benchmarking",6585 "frame-benchmarking",
6586 "frame-support",6586 "frame-support",
6587 "frame-system",6587 "frame-system",
6588 "impl-trait-for-tuples",6588 "impl-trait-for-tuples",
6589 "pallet-balances",6589 "pallet-balances",
6590 "parity-scale-codec 3.1.2",6590 "parity-scale-codec 3.1.5",
6591 "scale-info",6591 "scale-info",
6592 "serde",6592 "serde",
6593 "sp-runtime",6593 "sp-runtime",
6607 "pallet-evm",6607 "pallet-evm",
6608 "pallet-evm-coder-substrate",6608 "pallet-evm-coder-substrate",
6609 "pallet-nonfungible",6609 "pallet-nonfungible",
6610 "parity-scale-codec 3.1.2",6610 "parity-scale-codec 3.1.5",
6611 "scale-info",6611 "scale-info",
6612 "serde",6612 "serde",
6613 "sp-core",6613 "sp-core",
6618]6618]
66196619
6620[[package]]6620[[package]]
6621name = "pallet-unq-scheduler"6621name = "pallet-unique-scheduler"
6622version = "0.1.0"6622version = "0.1.0"
6623dependencies = [6623dependencies = [
6624 "frame-benchmarking",6624 "frame-benchmarking",
6625 "frame-support",6625 "frame-support",
6626 "frame-system",6626 "frame-system",
6627 "log",6627 "log",
6628 "parity-scale-codec 3.1.2",6628 "parity-scale-codec 3.1.5",
6629 "scale-info",6629 "scale-info",
6630 "serde",6630 "serde",
6631 "sp-core",6631 "sp-core",
6639[[package]]6639[[package]]
6640name = "pallet-utility"6640name = "pallet-utility"
6641version = "4.0.0-dev"6641version = "4.0.0-dev"
6642source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6642source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6643dependencies = [6643dependencies = [
6644 "frame-benchmarking",6644 "frame-benchmarking",
6645 "frame-support",6645 "frame-support",
6646 "frame-system",6646 "frame-system",
6647 "parity-scale-codec 3.1.2",6647 "parity-scale-codec 3.1.5",
6648 "scale-info",6648 "scale-info",
6649 "sp-core",6649 "sp-core",
6650 "sp-io",6650 "sp-io",
6655[[package]]6655[[package]]
6656name = "pallet-vesting"6656name = "pallet-vesting"
6657version = "4.0.0-dev"6657version = "4.0.0-dev"
6658source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"6658source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
6659dependencies = [6659dependencies = [
6660 "frame-benchmarking",6660 "frame-benchmarking",
6661 "frame-support",6661 "frame-support",
6662 "frame-system",6662 "frame-system",
6663 "log",6663 "log",
6664 "parity-scale-codec 3.1.2",6664 "parity-scale-codec 3.1.5",
6665 "scale-info",6665 "scale-info",
6666 "sp-runtime",6666 "sp-runtime",
6667 "sp-std",6667 "sp-std",
6675 "frame-support",6675 "frame-support",
6676 "frame-system",6676 "frame-system",
6677 "log",6677 "log",
6678 "parity-scale-codec 3.1.2",6678 "parity-scale-codec 3.1.5",
6679 "scale-info",6679 "scale-info",
6680 "serde",6680 "serde",
6681 "sp-core",6681 "sp-core",
6694 "frame-support",6694 "frame-support",
6695 "frame-system",6695 "frame-system",
6696 "log",6696 "log",
6697 "parity-scale-codec 3.1.2",6697 "parity-scale-codec 3.1.5",
6698 "scale-info",6698 "scale-info",
6699 "sp-runtime",6699 "sp-runtime",
6700 "sp-std",6700 "sp-std",
6705[[package]]6705[[package]]
6706name = "parachain-info"6706name = "parachain-info"
6707version = "0.1.0"6707version = "0.1.0"
6708source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#e5889f1d71975a192c98fa43b1c18c94ffda3bbd"6708source = "git+https://github.com/paritytech/cumulus?branch=polkadot-v0.9.23#9c1470893c6bd5f33ad8eb104d159177c6847df5"
6709dependencies = [6709dependencies = [
6710 "cumulus-primitives-core",6710 "cumulus-primitives-core",
6711 "frame-support",6711 "frame-support",
6712 "frame-system",6712 "frame-system",
6713 "parity-scale-codec 3.1.2",6713 "parity-scale-codec 3.1.5",
6714 "scale-info",6714 "scale-info",
6715 "serde",6715 "serde",
6716]6716]
67506750
6751[[package]]6751[[package]]
6752name = "parity-scale-codec"6752name = "parity-scale-codec"
6753version = "3.1.2"6753version = "3.1.5"
6754source = "registry+https://github.com/rust-lang/crates.io-index"6754source = "registry+https://github.com/rust-lang/crates.io-index"
6755checksum = "e8b44461635bbb1a0300f100a841e571e7d919c81c73075ef5d152ffdb521066"6755checksum = "9182e4a71cae089267ab03e67c99368db7cd877baf50f931e5d6d4b71e195ac0"
6756dependencies = [6756dependencies = [
6757 "arrayvec 0.7.2",6757 "arrayvec 0.7.2",
6758 "bitvec 1.0.0",6758 "bitvec 1.0.0",
6759 "byte-slice-cast",6759 "byte-slice-cast",
6760 "impl-trait-for-tuples",6760 "impl-trait-for-tuples",
6761 "parity-scale-codec-derive 3.1.2",6761 "parity-scale-codec-derive 3.1.3",
6762 "serde",6762 "serde",
6763]6763]
67646764
67766776
6777[[package]]6777[[package]]
6778name = "parity-scale-codec-derive"6778name = "parity-scale-codec-derive"
6779version = "3.1.2"6779version = "3.1.3"
6780source = "registry+https://github.com/rust-lang/crates.io-index"6780source = "registry+https://github.com/rust-lang/crates.io-index"
6781checksum = "c45ed1f39709f5a89338fab50e59816b2e8815f5bb58276e7ddf9afd495f73f8"6781checksum = "9299338969a3d2f491d65f140b00ddec470858402f888af98e8642fb5e8965cd"
6782dependencies = [6782dependencies = [
6783 "proc-macro-crate",6783 "proc-macro-crate",
6784 "proc-macro2",6784 "proc-macro2",
6802 "ethereum-types",6802 "ethereum-types",
6803 "hashbrown 0.12.1",6803 "hashbrown 0.12.1",
6804 "impl-trait-for-tuples",6804 "impl-trait-for-tuples",
6805 "lru 0.7.6",6805 "lru 0.7.7",
6806 "parity-util-mem-derive",6806 "parity-util-mem-derive",
6807 "parking_lot 0.12.1",6807 "parking_lot 0.12.1",
6808 "primitive-types",6808 "primitive-types",
7086 "derive_more",7086 "derive_more",
7087 "fatality",7087 "fatality",
7088 "futures 0.3.21",7088 "futures 0.3.21",
7089 "lru 0.7.6",7089 "lru 0.7.7",
7090 "parity-scale-codec 3.1.2",7090 "parity-scale-codec 3.1.5",
7091 "polkadot-erasure-coding",7091 "polkadot-erasure-coding",
7092 "polkadot-node-network-protocol",7092 "polkadot-node-network-protocol",
7093 "polkadot-node-primitives",7093 "polkadot-node-primitives",
7108dependencies = [7108dependencies = [
7109 "fatality",7109 "fatality",
7110 "futures 0.3.21",7110 "futures 0.3.21",
7111 "lru 0.7.6",7111 "lru 0.7.7",
7112 "parity-scale-codec 3.1.2",7112 "parity-scale-codec 3.1.5",
7113 "polkadot-erasure-coding",7113 "polkadot-erasure-coding",
7114 "polkadot-node-network-protocol",7114 "polkadot-node-network-protocol",
7115 "polkadot-node-primitives",7115 "polkadot-node-primitives",
7213version = "0.9.23"7213version = "0.9.23"
7214source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"7214source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
7215dependencies = [7215dependencies = [
7216 "parity-scale-codec 3.1.2",7216 "parity-scale-codec 3.1.5",
7217 "parity-util-mem",7217 "parity-util-mem",
7218 "scale-info",7218 "scale-info",
7219 "sp-core",7219 "sp-core",
7229 "derive_more",7229 "derive_more",
7230 "fatality",7230 "fatality",
7231 "futures 0.3.21",7231 "futures 0.3.21",
7232 "lru 0.7.6",7232 "lru 0.7.7",
7233 "parity-scale-codec 3.1.2",7233 "parity-scale-codec 3.1.5",
7234 "polkadot-erasure-coding",7234 "polkadot-erasure-coding",
7235 "polkadot-node-network-protocol",7235 "polkadot-node-network-protocol",
7236 "polkadot-node-primitives",7236 "polkadot-node-primitives",
7249version = "0.9.23"7249version = "0.9.23"
7250source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"7250source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
7251dependencies = [7251dependencies = [
7252 "parity-scale-codec 3.1.2",7252 "parity-scale-codec 3.1.5",
7253 "polkadot-node-primitives",7253 "polkadot-node-primitives",
7254 "polkadot-primitives",7254 "polkadot-primitives",
7255 "reed-solomon-novelpoly",7255 "reed-solomon-novelpoly",
7287 "async-trait",7287 "async-trait",
7288 "bytes 1.1.0",7288 "bytes 1.1.0",
7289 "futures 0.3.21",7289 "futures 0.3.21",
7290 "parity-scale-codec 3.1.2",7290 "parity-scale-codec 3.1.5",
7291 "parking_lot 0.12.1",7291 "parking_lot 0.12.1",
7292 "polkadot-node-network-protocol",7292 "polkadot-node-network-protocol",
7293 "polkadot-node-subsystem",7293 "polkadot-node-subsystem",
7305source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"7305source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
7306dependencies = [7306dependencies = [
7307 "futures 0.3.21",7307 "futures 0.3.21",
7308 "parity-scale-codec 3.1.2",7308 "parity-scale-codec 3.1.5",
7309 "polkadot-erasure-coding",7309 "polkadot-erasure-coding",
7310 "polkadot-node-primitives",7310 "polkadot-node-primitives",
7311 "polkadot-node-subsystem",7311 "polkadot-node-subsystem",
7327 "futures 0.3.21",7327 "futures 0.3.21",
7328 "futures-timer",7328 "futures-timer",
7329 "kvdb",7329 "kvdb",
7330 "lru 0.7.6",7330 "lru 0.7.7",
7331 "merlin",7331 "merlin",
7332 "parity-scale-codec 3.1.2",7332 "parity-scale-codec 3.1.5",
7333 "polkadot-node-jaeger",7333 "polkadot-node-jaeger",
7334 "polkadot-node-primitives",7334 "polkadot-node-primitives",
7335 "polkadot-node-subsystem",7335 "polkadot-node-subsystem",
7355 "futures 0.3.21",7355 "futures 0.3.21",
7356 "futures-timer",7356 "futures-timer",
7357 "kvdb",7357 "kvdb",
7358 "parity-scale-codec 3.1.2",7358 "parity-scale-codec 3.1.5",
7359 "polkadot-erasure-coding",7359 "polkadot-erasure-coding",
7360 "polkadot-node-primitives",7360 "polkadot-node-primitives",
7361 "polkadot-node-subsystem",7361 "polkadot-node-subsystem",
7407dependencies = [7407dependencies = [
7408 "async-trait",7408 "async-trait",
7409 "futures 0.3.21",7409 "futures 0.3.21",
7410 "parity-scale-codec 3.1.2",7410 "parity-scale-codec 3.1.5",
7411 "polkadot-node-core-pvf",7411 "polkadot-node-core-pvf",
7412 "polkadot-node-primitives",7412 "polkadot-node-primitives",
7413 "polkadot-node-subsystem",7413 "polkadot-node-subsystem",
7441 "futures 0.3.21",7441 "futures 0.3.21",
7442 "futures-timer",7442 "futures-timer",
7443 "kvdb",7443 "kvdb",
7444 "parity-scale-codec 3.1.2",7444 "parity-scale-codec 3.1.5",
7445 "polkadot-node-primitives",7445 "polkadot-node-primitives",
7446 "polkadot-node-subsystem",7446 "polkadot-node-subsystem",
7447 "polkadot-node-subsystem-util",7447 "polkadot-node-subsystem-util",
7458 "fatality",7458 "fatality",
7459 "futures 0.3.21",7459 "futures 0.3.21",
7460 "kvdb",7460 "kvdb",
7461 "lru 0.7.6",7461 "lru 0.7.7",
7462 "parity-scale-codec 3.1.2",7462 "parity-scale-codec 3.1.5",
7463 "polkadot-node-primitives",7463 "polkadot-node-primitives",
7464 "polkadot-node-subsystem",7464 "polkadot-node-subsystem",
7465 "polkadot-node-subsystem-util",7465 "polkadot-node-subsystem-util",
7515 "async-std",7515 "async-std",
7516 "futures 0.3.21",7516 "futures 0.3.21",
7517 "futures-timer",7517 "futures-timer",
7518 "parity-scale-codec 3.1.2",7518 "parity-scale-codec 3.1.5",
7519 "pin-project 1.0.10",7519 "pin-project 1.0.10",
7520 "polkadot-core-primitives",7520 "polkadot-core-primitives",
7521 "polkadot-node-subsystem-util",7521 "polkadot-node-subsystem-util",
7577 "lazy_static",7577 "lazy_static",
7578 "log",7578 "log",
7579 "mick-jaeger",7579 "mick-jaeger",
7580 "parity-scale-codec 3.1.2",7580 "parity-scale-codec 3.1.5",
7581 "parking_lot 0.12.1",7581 "parking_lot 0.12.1",
7582 "polkadot-node-primitives",7582 "polkadot-node-primitives",
7583 "polkadot-primitives",7583 "polkadot-primitives",
7595 "futures 0.3.21",7595 "futures 0.3.21",
7596 "futures-timer",7596 "futures-timer",
7597 "log",7597 "log",
7598 "parity-scale-codec 3.1.2",7598 "parity-scale-codec 3.1.5",
7599 "polkadot-primitives",7599 "polkadot-primitives",
7600 "prioritized-metered-channel",7600 "prioritized-metered-channel",
7601 "sc-cli",7601 "sc-cli",
7614 "derive_more",7614 "derive_more",
7615 "fatality",7615 "fatality",
7616 "futures 0.3.21",7616 "futures 0.3.21",
7617 "parity-scale-codec 3.1.2",7617 "parity-scale-codec 3.1.5",
7618 "polkadot-node-jaeger",7618 "polkadot-node-jaeger",
7619 "polkadot-node-primitives",7619 "polkadot-node-primitives",
7620 "polkadot-primitives",7620 "polkadot-primitives",
7621 "rand 0.8.5",7621 "rand 0.8.5",
7622 "sc-authority-discovery",7622 "sc-authority-discovery",
7623 "sc-network",7623 "sc-network",
7624 "strum 0.24.0",7624 "strum 0.24.1",
7625 "thiserror",7625 "thiserror",
7626 "tracing-gum",7626 "tracing-gum",
7627]7627]
7633dependencies = [7633dependencies = [
7634 "bounded-vec",7634 "bounded-vec",
7635 "futures 0.3.21",7635 "futures 0.3.21",
7636 "parity-scale-codec 3.1.2",7636 "parity-scale-codec 3.1.5",
7637 "polkadot-parachain",7637 "polkadot-parachain",
7638 "polkadot-primitives",7638 "polkadot-primitives",
7639 "schnorrkel",7639 "schnorrkel",
7688 "futures 0.3.21",7688 "futures 0.3.21",
7689 "itertools",7689 "itertools",
7690 "kvdb",7690 "kvdb",
7691 "lru 0.7.6",7691 "lru 0.7.7",
7692 "parity-db",7692 "parity-db",
7693 "parity-scale-codec 3.1.2",7693 "parity-scale-codec 3.1.5",
7694 "parity-util-mem",7694 "parity-util-mem",
7695 "parking_lot 0.11.2",7695 "parking_lot 0.11.2",
7696 "pin-project 1.0.10",7696 "pin-project 1.0.10",
7717dependencies = [7717dependencies = [
7718 "futures 0.3.21",7718 "futures 0.3.21",
7719 "futures-timer",7719 "futures-timer",
7720 "lru 0.7.6",7720 "lru 0.7.7",
7721 "orchestra",7721 "orchestra",
7722 "parity-util-mem",7722 "parity-util-mem",
7723 "parking_lot 0.12.1",7723 "parking_lot 0.12.1",
7739dependencies = [7739dependencies = [
7740 "derive_more",7740 "derive_more",
7741 "frame-support",7741 "frame-support",
7742 "parity-scale-codec 3.1.2",7742 "parity-scale-codec 3.1.5",
7743 "parity-util-mem",7743 "parity-util-mem",
7744 "polkadot-core-primitives",7744 "polkadot-core-primitives",
7745 "scale-info",7745 "scale-info",
7772 "bitvec 1.0.0",7772 "bitvec 1.0.0",
7773 "frame-system",7773 "frame-system",
7774 "hex-literal",7774 "hex-literal",
7775 "parity-scale-codec 3.1.2",7775 "parity-scale-codec 3.1.5",
7776 "parity-util-mem",7776 "parity-util-mem",
7777 "polkadot-core-primitives",7777 "polkadot-core-primitives",
7778 "polkadot-parachain",7778 "polkadot-parachain",
7879 "pallet-utility",7879 "pallet-utility",
7880 "pallet-vesting",7880 "pallet-vesting",
7881 "pallet-xcm",7881 "pallet-xcm",
7882 "parity-scale-codec 3.1.2",7882 "parity-scale-codec 3.1.5",
7883 "polkadot-primitives",7883 "polkadot-primitives",
7884 "polkadot-runtime-common",7884 "polkadot-runtime-common",
7885 "polkadot-runtime-constants",7885 "polkadot-runtime-constants",
7938 "pallet-transaction-payment",7938 "pallet-transaction-payment",
7939 "pallet-treasury",7939 "pallet-treasury",
7940 "pallet-vesting",7940 "pallet-vesting",
7941 "parity-scale-codec 3.1.2",7941 "parity-scale-codec 3.1.5",
7942 "polkadot-primitives",7942 "polkadot-primitives",
7943 "polkadot-runtime-parachains",7943 "polkadot-runtime-parachains",
7944 "rustc-hex",7944 "rustc-hex",
7977source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"7977source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
7978dependencies = [7978dependencies = [
7979 "bs58",7979 "bs58",
7980 "parity-scale-codec 3.1.2",7980 "parity-scale-codec 3.1.5",
7981 "polkadot-primitives",7981 "polkadot-primitives",
7982 "sp-std",7982 "sp-std",
7983 "sp-tracing",7983 "sp-tracing",
8003 "pallet-staking",8003 "pallet-staking",
8004 "pallet-timestamp",8004 "pallet-timestamp",
8005 "pallet-vesting",8005 "pallet-vesting",
8006 "parity-scale-codec 3.1.2",8006 "parity-scale-codec 3.1.5",
8007 "polkadot-primitives",8007 "polkadot-primitives",
8008 "polkadot-runtime-metrics",8008 "polkadot-runtime-metrics",
8009 "rand 0.8.5",8009 "rand 0.8.5",
8040 "kusama-runtime",8040 "kusama-runtime",
8041 "kvdb",8041 "kvdb",
8042 "kvdb-rocksdb",8042 "kvdb-rocksdb",
8043 "lru 0.7.6",8043 "lru 0.7.7",
8044 "pallet-babe",8044 "pallet-babe",
8045 "pallet-im-online",8045 "pallet-im-online",
8046 "pallet-staking",8046 "pallet-staking",
8138 "fatality",8138 "fatality",
8139 "futures 0.3.21",8139 "futures 0.3.21",
8140 "indexmap",8140 "indexmap",
8141 "parity-scale-codec 3.1.2",8141 "parity-scale-codec 3.1.5",
8142 "polkadot-node-network-protocol",8142 "polkadot-node-network-protocol",
8143 "polkadot-node-primitives",8143 "polkadot-node-primitives",
8144 "polkadot-node-subsystem",8144 "polkadot-node-subsystem",
8155version = "0.9.23"8155version = "0.9.23"
8156source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"8156source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
8157dependencies = [8157dependencies = [
8158 "parity-scale-codec 3.1.2",8158 "parity-scale-codec 3.1.5",
8159 "polkadot-primitives",8159 "polkadot-primitives",
8160 "sp-core",8160 "sp-core",
8161]8161]
8190 "pallet-transaction-payment-rpc-runtime-api",8190 "pallet-transaction-payment-rpc-runtime-api",
8191 "pallet-vesting",8191 "pallet-vesting",
8192 "pallet-xcm",8192 "pallet-xcm",
8193 "parity-scale-codec 3.1.2",8193 "parity-scale-codec 3.1.5",
8194 "polkadot-parachain",8194 "polkadot-parachain",
8195 "polkadot-primitives",8195 "polkadot-primitives",
8196 "polkadot-runtime-common",8196 "polkadot-runtime-common",
83838383
8384[[package]]8384[[package]]
8385name = "proc-macro2"8385name = "proc-macro2"
8386version = "1.0.39"8386version = "1.0.40"
8387source = "registry+https://github.com/rust-lang/crates.io-index"8387source = "registry+https://github.com/rust-lang/crates.io-index"
8388checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f"8388checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7"
8389dependencies = [8389dependencies = [
8390 "unicode-ident",8390 "unicode-ident",
8391]8391]
85148514
8515[[package]]8515[[package]]
8516name = "quartz-runtime"8516name = "quartz-runtime"
8517version = "0.9.22"8517version = "0.9.23"
8518dependencies = [8518dependencies = [
8519 "cumulus-pallet-aura-ext",8519 "cumulus-pallet-aura-ext",
8520 "cumulus-pallet-dmp-queue",8520 "cumulus-pallet-dmp-queue",
8528 "fp-evm-mapping",8528 "fp-evm-mapping",
8529 "fp-rpc",8529 "fp-rpc",
8530 "fp-self-contained",8530 "fp-self-contained",
8531 "frame-benchmarking",
8531 "frame-executive",8532 "frame-executive",
8532 "frame-support",8533 "frame-support",
8533 "frame-system",8534 "frame-system",
8535 "frame-system-benchmarking",
8534 "frame-system-rpc-runtime-api",8536 "frame-system-rpc-runtime-api",
8535 "frame-try-runtime",8537 "frame-try-runtime",
8538 "hex-literal",
8536 "log",8539 "log",
8537 "orml-vesting",8540 "orml-vesting",
8538 "pallet-aura",8541 "pallet-aura",
8560 "pallet-transaction-payment-rpc-runtime-api",8563 "pallet-transaction-payment-rpc-runtime-api",
8561 "pallet-treasury",8564 "pallet-treasury",
8562 "pallet-unique",8565 "pallet-unique",
8563 "pallet-unq-scheduler",8566 "pallet-unique-scheduler",
8564 "pallet-xcm",8567 "pallet-xcm",
8565 "parachain-info",8568 "parachain-info",
8566 "parity-scale-codec 3.1.2",8569 "parity-scale-codec 3.1.5",
8567 "polkadot-parachain",8570 "polkadot-parachain",
8568 "rmrk-rpc",8571 "rmrk-rpc",
8569 "scale-info",8572 "scale-info",
86108613
8611[[package]]8614[[package]]
8612name = "quote"8615name = "quote"
8613version = "1.0.18"8616version = "1.0.20"
8614source = "registry+https://github.com/rust-lang/crates.io-index"8617source = "registry+https://github.com/rust-lang/crates.io-index"
8615checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1"8618checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804"
8616dependencies = [8619dependencies = [
8617 "proc-macro2",8620 "proc-macro2",
8618]8621]
8689source = "registry+https://github.com/rust-lang/crates.io-index"8692source = "registry+https://github.com/rust-lang/crates.io-index"
8690checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"8693checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
8691dependencies = [8694dependencies = [
8692 "getrandom 0.2.6",8695 "getrandom 0.2.7",
8693]8696]
86948697
8695[[package]]8698[[package]]
8774source = "registry+https://github.com/rust-lang/crates.io-index"8777source = "registry+https://github.com/rust-lang/crates.io-index"
8775checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"8778checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
8776dependencies = [8779dependencies = [
8777 "getrandom 0.2.6",8780 "getrandom 0.2.7",
8778 "redox_syscall",8781 "redox_syscall",
8779 "thiserror",8782 "thiserror",
8780]8783]
8864[[package]]8867[[package]]
8865name = "remote-externalities"8868name = "remote-externalities"
8866version = "0.10.0-dev"8869version = "0.10.0-dev"
8867source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"8870source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
8868dependencies = [8871dependencies = [
8869 "env_logger",8872 "env_logger",
8870 "jsonrpsee",8873 "jsonrpsee",
8871 "log",8874 "log",
8872 "parity-scale-codec 3.1.2",8875 "parity-scale-codec 3.1.5",
8873 "serde",8876 "serde",
8874 "serde_json",8877 "serde_json",
8875 "sp-core",8878 "sp-core",
8967name = "rmrk-traits"8970name = "rmrk-traits"
8968version = "0.1.0"8971version = "0.1.0"
8969dependencies = [8972dependencies = [
8970 "parity-scale-codec 3.1.2",8973 "parity-scale-codec 3.1.5",
8971 "scale-info",8974 "scale-info",
8972 "serde",8975 "serde",
8973]8976]
9028 "pallet-transaction-payment-rpc-runtime-api",9031 "pallet-transaction-payment-rpc-runtime-api",
9029 "pallet-utility",9032 "pallet-utility",
9030 "pallet-xcm",9033 "pallet-xcm",
9031 "parity-scale-codec 3.1.2",9034 "parity-scale-codec 3.1.5",
9032 "polkadot-parachain",9035 "polkadot-parachain",
9033 "polkadot-primitives",9036 "polkadot-primitives",
9034 "polkadot-runtime-common",9037 "polkadot-runtime-common",
91819184
9182[[package]]9185[[package]]
9183name = "rustversion"9186name = "rustversion"
9184version = "1.0.6"9187version = "1.0.7"
9185source = "registry+https://github.com/rust-lang/crates.io-index"9188source = "registry+https://github.com/rust-lang/crates.io-index"
9186checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f"9189checksum = "a0a5f7c728f5d284929a1cccb5bc19884422bfe6ef4d6c409da2c41838983fcf"
91879190
9188[[package]]9191[[package]]
9189name = "rw-stream-sink"9192name = "rw-stream-sink"
9232[[package]]9235[[package]]
9233name = "sc-allocator"9236name = "sc-allocator"
9234version = "4.1.0-dev"9237version = "4.1.0-dev"
9235source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9238source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9236dependencies = [9239dependencies = [
9237 "log",9240 "log",
9238 "sp-core",9241 "sp-core",
9243[[package]]9246[[package]]
9244name = "sc-authority-discovery"9247name = "sc-authority-discovery"
9245version = "0.10.0-dev"9248version = "0.10.0-dev"
9246source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9249source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9247dependencies = [9250dependencies = [
9248 "async-trait",9251 "async-trait",
9249 "futures 0.3.21",9252 "futures 0.3.21",
9250 "futures-timer",9253 "futures-timer",
9251 "ip_network",9254 "ip_network",
9252 "libp2p",9255 "libp2p",
9253 "log",9256 "log",
9254 "parity-scale-codec 3.1.2",9257 "parity-scale-codec 3.1.5",
9255 "prost 0.10.4",9258 "prost 0.10.4",
9256 "prost-build",9259 "prost-build",
9257 "rand 0.7.3",9260 "rand 0.7.3",
9270[[package]]9273[[package]]
9271name = "sc-basic-authorship"9274name = "sc-basic-authorship"
9272version = "0.10.0-dev"9275version = "0.10.0-dev"
9273source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9276source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9274dependencies = [9277dependencies = [
9275 "futures 0.3.21",9278 "futures 0.3.21",
9276 "futures-timer",9279 "futures-timer",
9277 "log",9280 "log",
9278 "parity-scale-codec 3.1.2",9281 "parity-scale-codec 3.1.5",
9279 "sc-block-builder",9282 "sc-block-builder",
9280 "sc-client-api",9283 "sc-client-api",
9281 "sc-proposer-metrics",9284 "sc-proposer-metrics",
9293[[package]]9296[[package]]
9294name = "sc-block-builder"9297name = "sc-block-builder"
9295version = "0.10.0-dev"9298version = "0.10.0-dev"
9296source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9299source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9297dependencies = [9300dependencies = [
9298 "parity-scale-codec 3.1.2",9301 "parity-scale-codec 3.1.5",
9299 "sc-client-api",9302 "sc-client-api",
9300 "sp-api",9303 "sp-api",
9301 "sp-block-builder",9304 "sp-block-builder",
9309[[package]]9312[[package]]
9310name = "sc-chain-spec"9313name = "sc-chain-spec"
9311version = "4.0.0-dev"9314version = "4.0.0-dev"
9312source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9315source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9313dependencies = [9316dependencies = [
9314 "impl-trait-for-tuples",9317 "impl-trait-for-tuples",
9315 "memmap2 0.5.4",9318 "memmap2 0.5.4",
9316 "parity-scale-codec 3.1.2",9319 "parity-scale-codec 3.1.5",
9317 "sc-chain-spec-derive",9320 "sc-chain-spec-derive",
9318 "sc-network",9321 "sc-network",
9319 "sc-telemetry",9322 "sc-telemetry",
9326[[package]]9329[[package]]
9327name = "sc-chain-spec-derive"9330name = "sc-chain-spec-derive"
9328version = "4.0.0-dev"9331version = "4.0.0-dev"
9329source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9332source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9330dependencies = [9333dependencies = [
9331 "proc-macro-crate",9334 "proc-macro-crate",
9332 "proc-macro2",9335 "proc-macro2",
9337[[package]]9340[[package]]
9338name = "sc-cli"9341name = "sc-cli"
9339version = "0.10.0-dev"9342version = "0.10.0-dev"
9340source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9343source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9341dependencies = [9344dependencies = [
9342 "chrono",9345 "chrono",
9343 "clap",9346 "clap",
9347 "libp2p",9350 "libp2p",
9348 "log",9351 "log",
9349 "names",9352 "names",
9350 "parity-scale-codec 3.1.2",9353 "parity-scale-codec 3.1.5",
9351 "rand 0.7.3",9354 "rand 0.7.3",
9352 "regex",9355 "regex",
9353 "rpassword",9356 "rpassword",
9376[[package]]9379[[package]]
9377name = "sc-client-api"9380name = "sc-client-api"
9378version = "4.0.0-dev"9381version = "4.0.0-dev"
9379source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9382source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9380dependencies = [9383dependencies = [
9381 "fnv",9384 "fnv",
9382 "futures 0.3.21",9385 "futures 0.3.21",
9383 "hash-db",9386 "hash-db",
9384 "log",9387 "log",
9385 "parity-scale-codec 3.1.2",9388 "parity-scale-codec 3.1.5",
9386 "parking_lot 0.12.1",9389 "parking_lot 0.12.1",
9387 "sc-executor",9390 "sc-executor",
9388 "sc-transaction-pool-api",9391 "sc-transaction-pool-api",
9404[[package]]9407[[package]]
9405name = "sc-client-db"9408name = "sc-client-db"
9406version = "0.10.0-dev"9409version = "0.10.0-dev"
9407source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9410source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9408dependencies = [9411dependencies = [
9409 "hash-db",9412 "hash-db",
9410 "kvdb",9413 "kvdb",
9413 "linked-hash-map",9416 "linked-hash-map",
9414 "log",9417 "log",
9415 "parity-db",9418 "parity-db",
9416 "parity-scale-codec 3.1.2",9419 "parity-scale-codec 3.1.5",
9417 "parking_lot 0.12.1",9420 "parking_lot 0.12.1",
9418 "sc-client-api",9421 "sc-client-api",
9419 "sc-state-db",9422 "sc-state-db",
9429[[package]]9432[[package]]
9430name = "sc-consensus"9433name = "sc-consensus"
9431version = "0.10.0-dev"9434version = "0.10.0-dev"
9432source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9435source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9433dependencies = [9436dependencies = [
9434 "async-trait",9437 "async-trait",
9435 "futures 0.3.21",9438 "futures 0.3.21",
9453[[package]]9456[[package]]
9454name = "sc-consensus-aura"9457name = "sc-consensus-aura"
9455version = "0.10.0-dev"9458version = "0.10.0-dev"
9456source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9459source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9457dependencies = [9460dependencies = [
9458 "async-trait",9461 "async-trait",
9459 "futures 0.3.21",9462 "futures 0.3.21",
9460 "log",9463 "log",
9461 "parity-scale-codec 3.1.2",9464 "parity-scale-codec 3.1.5",
9462 "sc-block-builder",9465 "sc-block-builder",
9463 "sc-client-api",9466 "sc-client-api",
9464 "sc-consensus",9467 "sc-consensus",
9482[[package]]9485[[package]]
9483name = "sc-consensus-babe"9486name = "sc-consensus-babe"
9484version = "0.10.0-dev"9487version = "0.10.0-dev"
9485source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9488source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9486dependencies = [9489dependencies = [
9487 "async-trait",9490 "async-trait",
9488 "fork-tree",9491 "fork-tree",
9492 "num-bigint",9495 "num-bigint",
9493 "num-rational 0.2.4",9496 "num-rational 0.2.4",
9494 "num-traits",9497 "num-traits",
9495 "parity-scale-codec 3.1.2",9498 "parity-scale-codec 3.1.5",
9496 "parking_lot 0.12.1",9499 "parking_lot 0.12.1",
9497 "rand 0.7.3",9500 "rand 0.7.3",
9498 "retain_mut",9501 "retain_mut",
9525[[package]]9528[[package]]
9526name = "sc-consensus-babe-rpc"9529name = "sc-consensus-babe-rpc"
9527version = "0.10.0-dev"9530version = "0.10.0-dev"
9528source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9531source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9529dependencies = [9532dependencies = [
9530 "futures 0.3.21",9533 "futures 0.3.21",
9531 "jsonrpsee",9534 "jsonrpsee",
9547[[package]]9550[[package]]
9548name = "sc-consensus-epochs"9551name = "sc-consensus-epochs"
9549version = "0.10.0-dev"9552version = "0.10.0-dev"
9550source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9553source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9551dependencies = [9554dependencies = [
9552 "fork-tree",9555 "fork-tree",
9553 "parity-scale-codec 3.1.2",9556 "parity-scale-codec 3.1.5",
9554 "sc-client-api",9557 "sc-client-api",
9555 "sc-consensus",9558 "sc-consensus",
9556 "sp-blockchain",9559 "sp-blockchain",
9560[[package]]9563[[package]]
9561name = "sc-consensus-manual-seal"9564name = "sc-consensus-manual-seal"
9562version = "0.10.0-dev"9565version = "0.10.0-dev"
9563source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9566source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9564dependencies = [9567dependencies = [
9565 "assert_matches",9568 "assert_matches",
9566 "async-trait",9569 "async-trait",
9567 "futures 0.3.21",9570 "futures 0.3.21",
9568 "jsonrpsee",9571 "jsonrpsee",
9569 "log",9572 "log",
9570 "parity-scale-codec 3.1.2",9573 "parity-scale-codec 3.1.5",
9571 "sc-client-api",9574 "sc-client-api",
9572 "sc-consensus",9575 "sc-consensus",
9573 "sc-consensus-aura",9576 "sc-consensus-aura",
9594[[package]]9597[[package]]
9595name = "sc-consensus-slots"9598name = "sc-consensus-slots"
9596version = "0.10.0-dev"9599version = "0.10.0-dev"
9597source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9600source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9598dependencies = [9601dependencies = [
9599 "async-trait",9602 "async-trait",
9600 "futures 0.3.21",9603 "futures 0.3.21",
9601 "futures-timer",9604 "futures-timer",
9602 "log",9605 "log",
9603 "parity-scale-codec 3.1.2",9606 "parity-scale-codec 3.1.5",
9604 "sc-client-api",9607 "sc-client-api",
9605 "sc-consensus",9608 "sc-consensus",
9606 "sc-telemetry",9609 "sc-telemetry",
9619[[package]]9622[[package]]
9620name = "sc-consensus-uncles"9623name = "sc-consensus-uncles"
9621version = "0.10.0-dev"9624version = "0.10.0-dev"
9622source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9625source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9623dependencies = [9626dependencies = [
9624 "sc-client-api",9627 "sc-client-api",
9625 "sp-authorship",9628 "sp-authorship",
9630[[package]]9633[[package]]
9631name = "sc-executor"9634name = "sc-executor"
9632version = "0.10.0-dev"9635version = "0.10.0-dev"
9633source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9636source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9634dependencies = [9637dependencies = [
9635 "lazy_static",9638 "lazy_static",
9636 "lru 0.7.6",9639 "lru 0.7.7",
9637 "parity-scale-codec 3.1.2",9640 "parity-scale-codec 3.1.5",
9638 "parking_lot 0.12.1",9641 "parking_lot 0.12.1",
9639 "sc-executor-common",9642 "sc-executor-common",
9640 "sc-executor-wasmi",9643 "sc-executor-wasmi",
9657[[package]]9660[[package]]
9658name = "sc-executor-common"9661name = "sc-executor-common"
9659version = "0.10.0-dev"9662version = "0.10.0-dev"
9660source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9663source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9661dependencies = [9664dependencies = [
9662 "environmental",9665 "environmental",
9663 "parity-scale-codec 3.1.2",9666 "parity-scale-codec 3.1.5",
9664 "sc-allocator",9667 "sc-allocator",
9665 "sp-maybe-compressed-blob",9668 "sp-maybe-compressed-blob",
9666 "sp-sandbox",9669 "sp-sandbox",
9674[[package]]9677[[package]]
9675name = "sc-executor-wasmi"9678name = "sc-executor-wasmi"
9676version = "0.10.0-dev"9679version = "0.10.0-dev"
9677source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9680source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9678dependencies = [9681dependencies = [
9679 "log",9682 "log",
9680 "parity-scale-codec 3.1.2",9683 "parity-scale-codec 3.1.5",
9681 "sc-allocator",9684 "sc-allocator",
9682 "sc-executor-common",9685 "sc-executor-common",
9683 "sp-runtime-interface",9686 "sp-runtime-interface",
9689[[package]]9692[[package]]
9690name = "sc-executor-wasmtime"9693name = "sc-executor-wasmtime"
9691version = "0.10.0-dev"9694version = "0.10.0-dev"
9692source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9695source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9693dependencies = [9696dependencies = [
9694 "cfg-if 1.0.0",9697 "cfg-if 1.0.0",
9695 "libc",9698 "libc",
9696 "log",9699 "log",
9697 "parity-scale-codec 3.1.2",9700 "parity-scale-codec 3.1.5",
9698 "parity-wasm 0.42.2",9701 "parity-wasm 0.42.2",
9699 "sc-allocator",9702 "sc-allocator",
9700 "sc-executor-common",9703 "sc-executor-common",
9707[[package]]9710[[package]]
9708name = "sc-finality-grandpa"9711name = "sc-finality-grandpa"
9709version = "0.10.0-dev"9712version = "0.10.0-dev"
9710source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9713source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9711dependencies = [9714dependencies = [
9712 "ahash",9715 "ahash",
9713 "async-trait",9716 "async-trait",
9718 "futures-timer",9721 "futures-timer",
9719 "hex",9722 "hex",
9720 "log",9723 "log",
9721 "parity-scale-codec 3.1.2",9724 "parity-scale-codec 3.1.5",
9722 "parking_lot 0.12.1",9725 "parking_lot 0.12.1",
9723 "rand 0.8.5",9726 "rand 0.8.5",
9724 "sc-block-builder",9727 "sc-block-builder",
9747[[package]]9750[[package]]
9748name = "sc-finality-grandpa-rpc"9751name = "sc-finality-grandpa-rpc"
9749version = "0.10.0-dev"9752version = "0.10.0-dev"
9750source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9753source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9751dependencies = [9754dependencies = [
9752 "finality-grandpa",9755 "finality-grandpa",
9753 "futures 0.3.21",9756 "futures 0.3.21",
9754 "jsonrpsee",9757 "jsonrpsee",
9755 "log",9758 "log",
9756 "parity-scale-codec 3.1.2",9759 "parity-scale-codec 3.1.5",
9757 "sc-client-api",9760 "sc-client-api",
9758 "sc-finality-grandpa",9761 "sc-finality-grandpa",
9759 "sc-rpc",9762 "sc-rpc",
9768[[package]]9771[[package]]
9769name = "sc-informant"9772name = "sc-informant"
9770version = "0.10.0-dev"9773version = "0.10.0-dev"
9771source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9774source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9772dependencies = [9775dependencies = [
9773 "ansi_term",9776 "ansi_term",
9774 "futures 0.3.21",9777 "futures 0.3.21",
9785[[package]]9788[[package]]
9786name = "sc-keystore"9789name = "sc-keystore"
9787version = "4.0.0-dev"9790version = "4.0.0-dev"
9788source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9791source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9789dependencies = [9792dependencies = [
9790 "async-trait",9793 "async-trait",
9791 "hex",9794 "hex",
9800[[package]]9803[[package]]
9801name = "sc-network"9804name = "sc-network"
9802version = "0.10.0-dev"9805version = "0.10.0-dev"
9803source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9806source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9804dependencies = [9807dependencies = [
9805 "async-trait",9808 "async-trait",
9806 "asynchronous-codec",9809 "asynchronous-codec",
9818 "linked-hash-map",9821 "linked-hash-map",
9819 "linked_hash_set",9822 "linked_hash_set",
9820 "log",9823 "log",
9821 "lru 0.7.6",9824 "lru 0.7.7",
9822 "parity-scale-codec 3.1.2",9825 "parity-scale-codec 3.1.5",
9823 "parking_lot 0.12.1",9826 "parking_lot 0.12.1",
9824 "pin-project 1.0.10",9827 "pin-project 1.0.10",
9825 "prost 0.10.4",9828 "prost 0.10.4",
9852[[package]]9855[[package]]
9853name = "sc-network-common"9856name = "sc-network-common"
9854version = "0.10.0-dev"9857version = "0.10.0-dev"
9855source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9858source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9856dependencies = [9859dependencies = [
9857 "futures 0.3.21",9860 "futures 0.3.21",
9858 "libp2p",9861 "libp2p",
9859 "parity-scale-codec 3.1.2",9862 "parity-scale-codec 3.1.5",
9860 "prost-build",9863 "prost-build",
9861 "sc-peerset",9864 "sc-peerset",
9862 "smallvec",9865 "smallvec",
9865[[package]]9868[[package]]
9866name = "sc-network-gossip"9869name = "sc-network-gossip"
9867version = "0.10.0-dev"9870version = "0.10.0-dev"
9868source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9871source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9869dependencies = [9872dependencies = [
9870 "ahash",9873 "ahash",
9871 "futures 0.3.21",9874 "futures 0.3.21",
9872 "futures-timer",9875 "futures-timer",
9873 "libp2p",9876 "libp2p",
9874 "log",9877 "log",
9875 "lru 0.7.6",9878 "lru 0.7.7",
9876 "sc-network",9879 "sc-network",
9877 "sp-runtime",9880 "sp-runtime",
9878 "substrate-prometheus-endpoint",9881 "substrate-prometheus-endpoint",
9882[[package]]9885[[package]]
9883name = "sc-network-light"9886name = "sc-network-light"
9884version = "0.10.0-dev"9887version = "0.10.0-dev"
9885source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9888source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9886dependencies = [9889dependencies = [
9887 "futures 0.3.21",9890 "futures 0.3.21",
9888 "libp2p",9891 "libp2p",
9889 "log",9892 "log",
9890 "parity-scale-codec 3.1.2",9893 "parity-scale-codec 3.1.5",
9891 "prost 0.10.4",9894 "prost 0.10.4",
9892 "prost-build",9895 "prost-build",
9893 "sc-client-api",9896 "sc-client-api",
9902[[package]]9905[[package]]
9903name = "sc-network-sync"9906name = "sc-network-sync"
9904version = "0.10.0-dev"9907version = "0.10.0-dev"
9905source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9908source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9906dependencies = [9909dependencies = [
9907 "bitflags",9910 "bitflags",
9908 "either",9911 "either",
9909 "fork-tree",9912 "fork-tree",
9910 "futures 0.3.21",9913 "futures 0.3.21",
9911 "libp2p",9914 "libp2p",
9912 "log",9915 "log",
9913 "lru 0.7.6",9916 "lru 0.7.7",
9914 "parity-scale-codec 3.1.2",9917 "parity-scale-codec 3.1.5",
9915 "prost 0.10.4",9918 "prost 0.10.4",
9916 "prost-build",9919 "prost-build",
9917 "sc-client-api",9920 "sc-client-api",
9931[[package]]9934[[package]]
9932name = "sc-offchain"9935name = "sc-offchain"
9933version = "4.0.0-dev"9936version = "4.0.0-dev"
9934source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9937source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9935dependencies = [9938dependencies = [
9936 "bytes 1.1.0",9939 "bytes 1.1.0",
9937 "fnv",9940 "fnv",
9942 "hyper-rustls",9945 "hyper-rustls",
9943 "num_cpus",9946 "num_cpus",
9944 "once_cell",9947 "once_cell",
9945 "parity-scale-codec 3.1.2",9948 "parity-scale-codec 3.1.5",
9946 "parking_lot 0.12.1",9949 "parking_lot 0.12.1",
9947 "rand 0.7.3",9950 "rand 0.7.3",
9948 "sc-client-api",9951 "sc-client-api",
9959[[package]]9962[[package]]
9960name = "sc-peerset"9963name = "sc-peerset"
9961version = "4.0.0-dev"9964version = "4.0.0-dev"
9962source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9965source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9963dependencies = [9966dependencies = [
9964 "futures 0.3.21",9967 "futures 0.3.21",
9965 "libp2p",9968 "libp2p",
9972[[package]]9975[[package]]
9973name = "sc-proposer-metrics"9976name = "sc-proposer-metrics"
9974version = "0.10.0-dev"9977version = "0.10.0-dev"
9975source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9978source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9976dependencies = [9979dependencies = [
9977 "log",9980 "log",
9978 "substrate-prometheus-endpoint",9981 "substrate-prometheus-endpoint",
9981[[package]]9984[[package]]
9982name = "sc-rpc"9985name = "sc-rpc"
9983version = "4.0.0-dev"9986version = "4.0.0-dev"
9984source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"9987source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
9985dependencies = [9988dependencies = [
9986 "futures 0.3.21",9989 "futures 0.3.21",
9987 "hash-db",9990 "hash-db",
9988 "jsonrpsee",9991 "jsonrpsee",
9989 "log",9992 "log",
9990 "parity-scale-codec 3.1.2",9993 "parity-scale-codec 3.1.5",
9991 "parking_lot 0.12.1",9994 "parking_lot 0.12.1",
9992 "sc-block-builder",9995 "sc-block-builder",
9993 "sc-chain-spec",9996 "sc-chain-spec",
10011[[package]]10014[[package]]
10012name = "sc-rpc-api"10015name = "sc-rpc-api"
10013version = "0.10.0-dev"10016version = "0.10.0-dev"
10014source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10017source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10015dependencies = [10018dependencies = [
10016 "futures 0.3.21",10019 "futures 0.3.21",
10017 "jsonrpsee",10020 "jsonrpsee",
10018 "log",10021 "log",
10019 "parity-scale-codec 3.1.2",10022 "parity-scale-codec 3.1.5",
10020 "parking_lot 0.12.1",10023 "parking_lot 0.12.1",
10021 "sc-chain-spec",10024 "sc-chain-spec",
10022 "sc-transaction-pool-api",10025 "sc-transaction-pool-api",
10034[[package]]10037[[package]]
10035name = "sc-rpc-server"10038name = "sc-rpc-server"
10036version = "4.0.0-dev"10039version = "4.0.0-dev"
10037source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10040source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10038dependencies = [10041dependencies = [
10039 "futures 0.3.21",10042 "futures 0.3.21",
10040 "jsonrpsee",10043 "jsonrpsee",
10047[[package]]10050[[package]]
10048name = "sc-service"10051name = "sc-service"
10049version = "0.10.0-dev"10052version = "0.10.0-dev"
10050source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10053source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10051dependencies = [10054dependencies = [
10052 "async-trait",10055 "async-trait",
10053 "directories",10056 "directories",
10057 "hash-db",10060 "hash-db",
10058 "jsonrpsee",10061 "jsonrpsee",
10059 "log",10062 "log",
10060 "parity-scale-codec 3.1.2",10063 "parity-scale-codec 3.1.5",
10061 "parity-util-mem",10064 "parity-util-mem",
10062 "parking_lot 0.12.1",10065 "parking_lot 0.12.1",
10063 "pin-project 1.0.10",10066 "pin-project 1.0.10",
10112[[package]]10115[[package]]
10113name = "sc-state-db"10116name = "sc-state-db"
10114version = "0.10.0-dev"10117version = "0.10.0-dev"
10115source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10118source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10116dependencies = [10119dependencies = [
10117 "log",10120 "log",
10118 "parity-scale-codec 3.1.2",10121 "parity-scale-codec 3.1.5",
10119 "parity-util-mem",10122 "parity-util-mem",
10120 "parity-util-mem-derive",10123 "parity-util-mem-derive",
10121 "parking_lot 0.12.1",10124 "parking_lot 0.12.1",
10126[[package]]10129[[package]]
10127name = "sc-sync-state-rpc"10130name = "sc-sync-state-rpc"
10128version = "0.10.0-dev"10131version = "0.10.0-dev"
10129source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10132source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10130dependencies = [10133dependencies = [
10131 "jsonrpsee",10134 "jsonrpsee",
10132 "parity-scale-codec 3.1.2",10135 "parity-scale-codec 3.1.5",
10133 "sc-chain-spec",10136 "sc-chain-spec",
10134 "sc-client-api",10137 "sc-client-api",
10135 "sc-consensus-babe",10138 "sc-consensus-babe",
10145[[package]]10148[[package]]
10146name = "sc-sysinfo"10149name = "sc-sysinfo"
10147version = "6.0.0-dev"10150version = "6.0.0-dev"
10148source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10151source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10149dependencies = [10152dependencies = [
10150 "futures 0.3.21",10153 "futures 0.3.21",
10151 "libc",10154 "libc",
10164[[package]]10167[[package]]
10165name = "sc-telemetry"10168name = "sc-telemetry"
10166version = "4.0.0-dev"10169version = "4.0.0-dev"
10167source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10170source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10168dependencies = [10171dependencies = [
10169 "chrono",10172 "chrono",
10170 "futures 0.3.21",10173 "futures 0.3.21",
10182[[package]]10185[[package]]
10183name = "sc-tracing"10186name = "sc-tracing"
10184version = "4.0.0-dev"10187version = "4.0.0-dev"
10185source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10188source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10186dependencies = [10189dependencies = [
10187 "ansi_term",10190 "ansi_term",
10188 "atty",10191 "atty",
10213[[package]]10216[[package]]
10214name = "sc-tracing-proc-macro"10217name = "sc-tracing-proc-macro"
10215version = "4.0.0-dev"10218version = "4.0.0-dev"
10216source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10219source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10217dependencies = [10220dependencies = [
10218 "proc-macro-crate",10221 "proc-macro-crate",
10219 "proc-macro2",10222 "proc-macro2",
10224[[package]]10227[[package]]
10225name = "sc-transaction-pool"10228name = "sc-transaction-pool"
10226version = "4.0.0-dev"10229version = "4.0.0-dev"
10227source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10230source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10228dependencies = [10231dependencies = [
10229 "futures 0.3.21",10232 "futures 0.3.21",
10230 "futures-timer",10233 "futures-timer",
10231 "linked-hash-map",10234 "linked-hash-map",
10232 "log",10235 "log",
10233 "parity-scale-codec 3.1.2",10236 "parity-scale-codec 3.1.5",
10234 "parity-util-mem",10237 "parity-util-mem",
10235 "parking_lot 0.12.1",10238 "parking_lot 0.12.1",
10236 "retain_mut",10239 "retain_mut",
10251[[package]]10254[[package]]
10252name = "sc-transaction-pool-api"10255name = "sc-transaction-pool-api"
10253version = "4.0.0-dev"10256version = "4.0.0-dev"
10254source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10257source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10255dependencies = [10258dependencies = [
10256 "futures 0.3.21",10259 "futures 0.3.21",
10257 "log",10260 "log",
10264[[package]]10267[[package]]
10265name = "sc-utils"10268name = "sc-utils"
10266version = "4.0.0-dev"10269version = "4.0.0-dev"
10267source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10270source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10268dependencies = [10271dependencies = [
10269 "futures 0.3.21",10272 "futures 0.3.21",
10270 "futures-timer",10273 "futures-timer",
10283 "bitvec 1.0.0",10286 "bitvec 1.0.0",
10284 "cfg-if 1.0.0",10287 "cfg-if 1.0.0",
10285 "derive_more",10288 "derive_more",
10286 "parity-scale-codec 3.1.2",10289 "parity-scale-codec 3.1.5",
10287 "scale-info-derive",10290 "scale-info-derive",
10288 "serde",10291 "serde",
10289]10292]
10630source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"10633source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.23#a7e188cd9665c735f4b9d5a58cdbc4dd1850eae0"
10631dependencies = [10634dependencies = [
10632 "enumn",10635 "enumn",
10633 "parity-scale-codec 3.1.2",10636 "parity-scale-codec 3.1.5",
10634 "paste",10637 "paste",
10635 "sp-runtime",10638 "sp-runtime",
10636 "sp-std",10639 "sp-std",
10703[[package]]10706[[package]]
10704name = "sp-api"10707name = "sp-api"
10705version = "4.0.0-dev"10708version = "4.0.0-dev"
10706source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10709source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10707dependencies = [10710dependencies = [
10708 "hash-db",10711 "hash-db",
10709 "log",10712 "log",
10710 "parity-scale-codec 3.1.2",10713 "parity-scale-codec 3.1.5",
10711 "sp-api-proc-macro",10714 "sp-api-proc-macro",
10712 "sp-core",10715 "sp-core",
10713 "sp-runtime",10716 "sp-runtime",
10720[[package]]10723[[package]]
10721name = "sp-api-proc-macro"10724name = "sp-api-proc-macro"
10722version = "4.0.0-dev"10725version = "4.0.0-dev"
10723source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10726source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10724dependencies = [10727dependencies = [
10725 "blake2",10728 "blake2",
10726 "proc-macro-crate",10729 "proc-macro-crate",
10732[[package]]10735[[package]]
10733name = "sp-application-crypto"10736name = "sp-application-crypto"
10734version = "6.0.0"10737version = "6.0.0"
10735source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10738source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10736dependencies = [10739dependencies = [
10737 "parity-scale-codec 3.1.2",10740 "parity-scale-codec 3.1.5",
10738 "scale-info",10741 "scale-info",
10739 "serde",10742 "serde",
10740 "sp-core",10743 "sp-core",
10745[[package]]10748[[package]]
10746name = "sp-arithmetic"10749name = "sp-arithmetic"
10747version = "5.0.0"10750version = "5.0.0"
10748source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10751source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10749dependencies = [10752dependencies = [
10750 "integer-sqrt",10753 "integer-sqrt",
10751 "num-traits",10754 "num-traits",
10752 "parity-scale-codec 3.1.2",10755 "parity-scale-codec 3.1.5",
10753 "scale-info",10756 "scale-info",
10754 "serde",10757 "serde",
10755 "sp-debug-derive",10758 "sp-debug-derive",
10760[[package]]10763[[package]]
10761name = "sp-authority-discovery"10764name = "sp-authority-discovery"
10762version = "4.0.0-dev"10765version = "4.0.0-dev"
10763source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10766source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10764dependencies = [10767dependencies = [
10765 "parity-scale-codec 3.1.2",10768 "parity-scale-codec 3.1.5",
10766 "scale-info",10769 "scale-info",
10767 "sp-api",10770 "sp-api",
10768 "sp-application-crypto",10771 "sp-application-crypto",
10773[[package]]10776[[package]]
10774name = "sp-authorship"10777name = "sp-authorship"
10775version = "4.0.0-dev"10778version = "4.0.0-dev"
10776source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10779source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10777dependencies = [10780dependencies = [
10778 "async-trait",10781 "async-trait",
10779 "parity-scale-codec 3.1.2",10782 "parity-scale-codec 3.1.5",
10780 "sp-inherents",10783 "sp-inherents",
10781 "sp-runtime",10784 "sp-runtime",
10782 "sp-std",10785 "sp-std",
10785[[package]]10788[[package]]
10786name = "sp-block-builder"10789name = "sp-block-builder"
10787version = "4.0.0-dev"10790version = "4.0.0-dev"
10788source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10791source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10789dependencies = [10792dependencies = [
10790 "parity-scale-codec 3.1.2",10793 "parity-scale-codec 3.1.5",
10791 "sp-api",10794 "sp-api",
10792 "sp-inherents",10795 "sp-inherents",
10793 "sp-runtime",10796 "sp-runtime",
10797[[package]]10800[[package]]
10798name = "sp-blockchain"10801name = "sp-blockchain"
10799version = "4.0.0-dev"10802version = "4.0.0-dev"
10800source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10803source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10801dependencies = [10804dependencies = [
10802 "futures 0.3.21",10805 "futures 0.3.21",
10803 "log",10806 "log",
10804 "lru 0.7.6",10807 "lru 0.7.7",
10805 "parity-scale-codec 3.1.2",10808 "parity-scale-codec 3.1.5",
10806 "parking_lot 0.12.1",10809 "parking_lot 0.12.1",
10807 "sp-api",10810 "sp-api",
10808 "sp-consensus",10811 "sp-consensus",
10815[[package]]10818[[package]]
10816name = "sp-consensus"10819name = "sp-consensus"
10817version = "0.10.0-dev"10820version = "0.10.0-dev"
10818source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10821source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10819dependencies = [10822dependencies = [
10820 "async-trait",10823 "async-trait",
10821 "futures 0.3.21",10824 "futures 0.3.21",
10822 "futures-timer",10825 "futures-timer",
10823 "log",10826 "log",
10824 "parity-scale-codec 3.1.2",10827 "parity-scale-codec 3.1.5",
10825 "sp-core",10828 "sp-core",
10826 "sp-inherents",10829 "sp-inherents",
10827 "sp-runtime",10830 "sp-runtime",
10834[[package]]10837[[package]]
10835name = "sp-consensus-aura"10838name = "sp-consensus-aura"
10836version = "0.10.0-dev"10839version = "0.10.0-dev"
10837source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10840source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10838dependencies = [10841dependencies = [
10839 "async-trait",10842 "async-trait",
10840 "parity-scale-codec 3.1.2",10843 "parity-scale-codec 3.1.5",
10841 "scale-info",10844 "scale-info",
10842 "sp-api",10845 "sp-api",
10843 "sp-application-crypto",10846 "sp-application-crypto",
10852[[package]]10855[[package]]
10853name = "sp-consensus-babe"10856name = "sp-consensus-babe"
10854version = "0.10.0-dev"10857version = "0.10.0-dev"
10855source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10858source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10856dependencies = [10859dependencies = [
10857 "async-trait",10860 "async-trait",
10858 "merlin",10861 "merlin",
10859 "parity-scale-codec 3.1.2",10862 "parity-scale-codec 3.1.5",
10860 "scale-info",10863 "scale-info",
10861 "serde",10864 "serde",
10862 "sp-api",10865 "sp-api",
10875[[package]]10878[[package]]
10876name = "sp-consensus-slots"10879name = "sp-consensus-slots"
10877version = "0.10.0-dev"10880version = "0.10.0-dev"
10878source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10881source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10879dependencies = [10882dependencies = [
10880 "parity-scale-codec 3.1.2",10883 "parity-scale-codec 3.1.5",
10881 "scale-info",10884 "scale-info",
10882 "serde",10885 "serde",
10883 "sp-arithmetic",10886 "sp-arithmetic",
10889[[package]]10892[[package]]
10890name = "sp-consensus-vrf"10893name = "sp-consensus-vrf"
10891version = "0.10.0-dev"10894version = "0.10.0-dev"
10892source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10895source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10893dependencies = [10896dependencies = [
10894 "parity-scale-codec 3.1.2",10897 "parity-scale-codec 3.1.5",
10895 "scale-info",10898 "scale-info",
10896 "schnorrkel",10899 "schnorrkel",
10897 "sp-core",10900 "sp-core",
10902[[package]]10905[[package]]
10903name = "sp-core"10906name = "sp-core"
10904version = "6.0.0"10907version = "6.0.0"
10905source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10908source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10906dependencies = [10909dependencies = [
10907 "base58",10910 "base58",
10908 "bitflags",10911 "bitflags",
10920 "log",10923 "log",
10921 "merlin",10924 "merlin",
10922 "num-traits",10925 "num-traits",
10923 "parity-scale-codec 3.1.2",10926 "parity-scale-codec 3.1.5",
10924 "parity-util-mem",10927 "parity-util-mem",
10925 "parking_lot 0.12.1",10928 "parking_lot 0.12.1",
10926 "primitive-types",10929 "primitive-types",
10948[[package]]10951[[package]]
10949name = "sp-core-hashing"10952name = "sp-core-hashing"
10950version = "4.0.0"10953version = "4.0.0"
10951source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10954source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10952dependencies = [10955dependencies = [
10953 "blake2",10956 "blake2",
10954 "byteorder",10957 "byteorder",
10962[[package]]10965[[package]]
10963name = "sp-core-hashing-proc-macro"10966name = "sp-core-hashing-proc-macro"
10964version = "5.0.0"10967version = "5.0.0"
10965source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10968source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10966dependencies = [10969dependencies = [
10967 "proc-macro2",10970 "proc-macro2",
10968 "quote",10971 "quote",
10973[[package]]10976[[package]]
10974name = "sp-database"10977name = "sp-database"
10975version = "4.0.0-dev"10978version = "4.0.0-dev"
10976source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10979source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10977dependencies = [10980dependencies = [
10978 "kvdb",10981 "kvdb",
10979 "parking_lot 0.12.1",10982 "parking_lot 0.12.1",
10982[[package]]10985[[package]]
10983name = "sp-debug-derive"10986name = "sp-debug-derive"
10984version = "4.0.0"10987version = "4.0.0"
10985source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10988source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10986dependencies = [10989dependencies = [
10987 "proc-macro2",10990 "proc-macro2",
10988 "quote",10991 "quote",
10992[[package]]10995[[package]]
10993name = "sp-externalities"10996name = "sp-externalities"
10994version = "0.12.0"10997version = "0.12.0"
10995source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"10998source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
10996dependencies = [10999dependencies = [
10997 "environmental",11000 "environmental",
10998 "parity-scale-codec 3.1.2",11001 "parity-scale-codec 3.1.5",
10999 "sp-std",11002 "sp-std",
11000 "sp-storage",11003 "sp-storage",
11001]11004]
1100211005
11003[[package]]11006[[package]]
11004name = "sp-finality-grandpa"11007name = "sp-finality-grandpa"
11005version = "4.0.0-dev"11008version = "4.0.0-dev"
11006source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11009source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11007dependencies = [11010dependencies = [
11008 "finality-grandpa",11011 "finality-grandpa",
11009 "log",11012 "log",
11010 "parity-scale-codec 3.1.2",11013 "parity-scale-codec 3.1.5",
11011 "scale-info",11014 "scale-info",
11012 "serde",11015 "serde",
11013 "sp-api",11016 "sp-api",
11021[[package]]11024[[package]]
11022name = "sp-inherents"11025name = "sp-inherents"
11023version = "4.0.0-dev"11026version = "4.0.0-dev"
11024source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11027source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11025dependencies = [11028dependencies = [
11026 "async-trait",11029 "async-trait",
11027 "impl-trait-for-tuples",11030 "impl-trait-for-tuples",
11028 "parity-scale-codec 3.1.2",11031 "parity-scale-codec 3.1.5",
11029 "sp-core",11032 "sp-core",
11030 "sp-runtime",11033 "sp-runtime",
11031 "sp-std",11034 "sp-std",
11035[[package]]11038[[package]]
11036name = "sp-io"11039name = "sp-io"
11037version = "6.0.0"11040version = "6.0.0"
11038source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11041source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11039dependencies = [11042dependencies = [
11040 "futures 0.3.21",11043 "futures 0.3.21",
11041 "hash-db",11044 "hash-db",
11042 "libsecp256k1",11045 "libsecp256k1",
11043 "log",11046 "log",
11044 "parity-scale-codec 3.1.2",11047 "parity-scale-codec 3.1.5",
11045 "parking_lot 0.12.1",11048 "parking_lot 0.12.1",
11046 "secp256k1",11049 "secp256k1",
11047 "sp-core",11050 "sp-core",
11060[[package]]11063[[package]]
11061name = "sp-keyring"11064name = "sp-keyring"
11062version = "6.0.0"11065version = "6.0.0"
11063source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11066source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11064dependencies = [11067dependencies = [
11065 "lazy_static",11068 "lazy_static",
11066 "sp-core",11069 "sp-core",
11071[[package]]11074[[package]]
11072name = "sp-keystore"11075name = "sp-keystore"
11073version = "0.12.0"11076version = "0.12.0"
11074source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11077source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11075dependencies = [11078dependencies = [
11076 "async-trait",11079 "async-trait",
11077 "futures 0.3.21",11080 "futures 0.3.21",
11078 "merlin",11081 "merlin",
11079 "parity-scale-codec 3.1.2",11082 "parity-scale-codec 3.1.5",
11080 "parking_lot 0.12.1",11083 "parking_lot 0.12.1",
11081 "schnorrkel",11084 "schnorrkel",
11082 "serde",11085 "serde",
11088[[package]]11091[[package]]
11089name = "sp-maybe-compressed-blob"11092name = "sp-maybe-compressed-blob"
11090version = "4.1.0-dev"11093version = "4.1.0-dev"
11091source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11094source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11092dependencies = [11095dependencies = [
11093 "thiserror",11096 "thiserror",
11094 "zstd",11097 "zstd",
11097[[package]]11100[[package]]
11098name = "sp-mmr-primitives"11101name = "sp-mmr-primitives"
11099version = "4.0.0-dev"11102version = "4.0.0-dev"
11100source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11103source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11101dependencies = [11104dependencies = [
11102 "log",11105 "log",
11103 "parity-scale-codec 3.1.2",11106 "parity-scale-codec 3.1.5",
11104 "serde",11107 "serde",
11105 "sp-api",11108 "sp-api",
11106 "sp-core",11109 "sp-core",
11112[[package]]11115[[package]]
11113name = "sp-npos-elections"11116name = "sp-npos-elections"
11114version = "4.0.0-dev"11117version = "4.0.0-dev"
11115source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11118source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11116dependencies = [11119dependencies = [
11117 "parity-scale-codec 3.1.2",11120 "parity-scale-codec 3.1.5",
11118 "scale-info",11121 "scale-info",
11119 "serde",11122 "serde",
11120 "sp-arithmetic",11123 "sp-arithmetic",
11126[[package]]11129[[package]]
11127name = "sp-offchain"11130name = "sp-offchain"
11128version = "4.0.0-dev"11131version = "4.0.0-dev"
11129source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11132source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11130dependencies = [11133dependencies = [
11131 "sp-api",11134 "sp-api",
11132 "sp-core",11135 "sp-core",
11136[[package]]11139[[package]]
11137name = "sp-panic-handler"11140name = "sp-panic-handler"
11138version = "4.0.0"11141version = "4.0.0"
11139source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11142source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11140dependencies = [11143dependencies = [
11141 "backtrace",11144 "backtrace",
11142 "lazy_static",11145 "lazy_static",
11146[[package]]11149[[package]]
11147name = "sp-rpc"11150name = "sp-rpc"
11148version = "6.0.0"11151version = "6.0.0"
11149source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11152source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11150dependencies = [11153dependencies = [
11151 "rustc-hash",11154 "rustc-hash",
11152 "serde",11155 "serde",
11156[[package]]11159[[package]]
11157name = "sp-runtime"11160name = "sp-runtime"
11158version = "6.0.0"11161version = "6.0.0"
11159source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11162source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11160dependencies = [11163dependencies = [
11161 "either",11164 "either",
11162 "hash256-std-hasher",11165 "hash256-std-hasher",
11163 "impl-trait-for-tuples",11166 "impl-trait-for-tuples",
11164 "log",11167 "log",
11165 "parity-scale-codec 3.1.2",11168 "parity-scale-codec 3.1.5",
11166 "parity-util-mem",11169 "parity-util-mem",
11167 "paste",11170 "paste",
11168 "rand 0.7.3",11171 "rand 0.7.3",
11178[[package]]11181[[package]]
11179name = "sp-runtime-interface"11182name = "sp-runtime-interface"
11180version = "6.0.0"11183version = "6.0.0"
11181source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11184source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11182dependencies = [11185dependencies = [
11183 "impl-trait-for-tuples",11186 "impl-trait-for-tuples",
11184 "parity-scale-codec 3.1.2",11187 "parity-scale-codec 3.1.5",
11185 "primitive-types",11188 "primitive-types",
11186 "sp-externalities",11189 "sp-externalities",
11187 "sp-runtime-interface-proc-macro",11190 "sp-runtime-interface-proc-macro",
11195[[package]]11198[[package]]
11196name = "sp-runtime-interface-proc-macro"11199name = "sp-runtime-interface-proc-macro"
11197version = "5.0.0"11200version = "5.0.0"
11198source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11201source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11199dependencies = [11202dependencies = [
11200 "Inflector",11203 "Inflector",
11201 "proc-macro-crate",11204 "proc-macro-crate",
11207[[package]]11210[[package]]
11208name = "sp-sandbox"11211name = "sp-sandbox"
11209version = "0.10.0-dev"11212version = "0.10.0-dev"
11210source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11213source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11211dependencies = [11214dependencies = [
11212 "log",11215 "log",
11213 "parity-scale-codec 3.1.2",11216 "parity-scale-codec 3.1.5",
11214 "sp-core",11217 "sp-core",
11215 "sp-io",11218 "sp-io",
11216 "sp-std",11219 "sp-std",
11221[[package]]11224[[package]]
11222name = "sp-serializer"11225name = "sp-serializer"
11223version = "4.0.0-dev"11226version = "4.0.0-dev"
11224source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11227source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11225dependencies = [11228dependencies = [
11226 "serde",11229 "serde",
11227 "serde_json",11230 "serde_json",
11230[[package]]11233[[package]]
11231name = "sp-session"11234name = "sp-session"
11232version = "4.0.0-dev"11235version = "4.0.0-dev"
11233source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11236source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11234dependencies = [11237dependencies = [
11235 "parity-scale-codec 3.1.2",11238 "parity-scale-codec 3.1.5",
11236 "scale-info",11239 "scale-info",
11237 "sp-api",11240 "sp-api",
11238 "sp-core",11241 "sp-core",
11244[[package]]11247[[package]]
11245name = "sp-staking"11248name = "sp-staking"
11246version = "4.0.0-dev"11249version = "4.0.0-dev"
11247source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11250source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11248dependencies = [11251dependencies = [
11249 "parity-scale-codec 3.1.2",11252 "parity-scale-codec 3.1.5",
11250 "scale-info",11253 "scale-info",
11251 "sp-runtime",11254 "sp-runtime",
11252 "sp-std",11255 "sp-std",
11255[[package]]11258[[package]]
11256name = "sp-state-machine"11259name = "sp-state-machine"
11257version = "0.12.0"11260version = "0.12.0"
11258source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11261source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11259dependencies = [11262dependencies = [
11260 "hash-db",11263 "hash-db",
11261 "log",11264 "log",
11262 "num-traits",11265 "num-traits",
11263 "parity-scale-codec 3.1.2",11266 "parity-scale-codec 3.1.5",
11264 "parking_lot 0.12.1",11267 "parking_lot 0.12.1",
11265 "rand 0.7.3",11268 "rand 0.7.3",
11266 "smallvec",11269 "smallvec",
11277[[package]]11280[[package]]
11278name = "sp-std"11281name = "sp-std"
11279version = "4.0.0"11282version = "4.0.0"
11280source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11283source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
1128111284
11282[[package]]11285[[package]]
11283name = "sp-storage"11286name = "sp-storage"
11284version = "6.0.0"11287version = "6.0.0"
11285source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11288source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11286dependencies = [11289dependencies = [
11287 "impl-serde",11290 "impl-serde",
11288 "parity-scale-codec 3.1.2",11291 "parity-scale-codec 3.1.5",
11289 "ref-cast",11292 "ref-cast",
11290 "serde",11293 "serde",
11291 "sp-debug-derive",11294 "sp-debug-derive",
11295[[package]]11298[[package]]
11296name = "sp-tasks"11299name = "sp-tasks"
11297version = "4.0.0-dev"11300version = "4.0.0-dev"
11298source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11301source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11299dependencies = [11302dependencies = [
11300 "log",11303 "log",
11301 "sp-core",11304 "sp-core",
11308[[package]]11311[[package]]
11309name = "sp-timestamp"11312name = "sp-timestamp"
11310version = "4.0.0-dev"11313version = "4.0.0-dev"
11311source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11314source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11312dependencies = [11315dependencies = [
11313 "async-trait",11316 "async-trait",
11314 "futures-timer",11317 "futures-timer",
11315 "log",11318 "log",
11316 "parity-scale-codec 3.1.2",11319 "parity-scale-codec 3.1.5",
11317 "sp-api",11320 "sp-api",
11318 "sp-inherents",11321 "sp-inherents",
11319 "sp-runtime",11322 "sp-runtime",
11324[[package]]11327[[package]]
11325name = "sp-tracing"11328name = "sp-tracing"
11326version = "5.0.0"11329version = "5.0.0"
11327source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11330source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11328dependencies = [11331dependencies = [
11329 "parity-scale-codec 3.1.2",11332 "parity-scale-codec 3.1.5",
11330 "sp-std",11333 "sp-std",
11331 "tracing",11334 "tracing",
11332 "tracing-core",11335 "tracing-core",
11336[[package]]11339[[package]]
11337name = "sp-transaction-pool"11340name = "sp-transaction-pool"
11338version = "4.0.0-dev"11341version = "4.0.0-dev"
11339source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11342source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11340dependencies = [11343dependencies = [
11341 "sp-api",11344 "sp-api",
11342 "sp-runtime",11345 "sp-runtime",
11345[[package]]11348[[package]]
11346name = "sp-transaction-storage-proof"11349name = "sp-transaction-storage-proof"
11347version = "4.0.0-dev"11350version = "4.0.0-dev"
11348source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11351source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11349dependencies = [11352dependencies = [
11350 "async-trait",11353 "async-trait",
11351 "log",11354 "log",
11352 "parity-scale-codec 3.1.2",11355 "parity-scale-codec 3.1.5",
11353 "scale-info",11356 "scale-info",
11354 "sp-core",11357 "sp-core",
11355 "sp-inherents",11358 "sp-inherents",
11361[[package]]11364[[package]]
11362name = "sp-trie"11365name = "sp-trie"
11363version = "6.0.0"11366version = "6.0.0"
11364source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11367source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11365dependencies = [11368dependencies = [
11366 "hash-db",11369 "hash-db",
11367 "memory-db",11370 "memory-db",
11368 "parity-scale-codec 3.1.2",11371 "parity-scale-codec 3.1.5",
11369 "scale-info",11372 "scale-info",
11370 "sp-core",11373 "sp-core",
11371 "sp-std",11374 "sp-std",
11377[[package]]11380[[package]]
11378name = "sp-version"11381name = "sp-version"
11379version = "5.0.0"11382version = "5.0.0"
11380source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11383source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11381dependencies = [11384dependencies = [
11382 "impl-serde",11385 "impl-serde",
11383 "parity-scale-codec 3.1.2",11386 "parity-scale-codec 3.1.5",
11384 "parity-wasm 0.42.2",11387 "parity-wasm 0.42.2",
11385 "scale-info",11388 "scale-info",
11386 "serde",11389 "serde",
11394[[package]]11397[[package]]
11395name = "sp-version-proc-macro"11398name = "sp-version-proc-macro"
11396version = "4.0.0-dev"11399version = "4.0.0-dev"
11397source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11400source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11398dependencies = [11401dependencies = [
11399 "parity-scale-codec 3.1.2",11402 "parity-scale-codec 3.1.5",
11400 "proc-macro2",11403 "proc-macro2",
11401 "quote",11404 "quote",
11402 "syn",11405 "syn",
11405[[package]]11408[[package]]
11406name = "sp-wasm-interface"11409name = "sp-wasm-interface"
11407version = "6.0.0"11410version = "6.0.0"
11408source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11411source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11409dependencies = [11412dependencies = [
11410 "impl-trait-for-tuples",11413 "impl-trait-for-tuples",
11411 "log",11414 "log",
11412 "parity-scale-codec 3.1.2",11415 "parity-scale-codec 3.1.5",
11413 "sp-std",11416 "sp-std",
11414 "wasmi",11417 "wasmi",
11415 "wasmtime",11418 "wasmtime",
1151111514
11512[[package]]11515[[package]]
11513name = "strum"11516name = "strum"
11514version = "0.24.0"11517version = "0.24.1"
11515source = "registry+https://github.com/rust-lang/crates.io-index"11518source = "registry+https://github.com/rust-lang/crates.io-index"
11516checksum = "e96acfc1b70604b8b2f1ffa4c57e59176c7dbb05d556c71ecd2f5498a1dee7f8"11519checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
11517dependencies = [11520dependencies = [
11518 "strum_macros 0.24.0",11521 "strum_macros 0.24.0",
11519]11522]
11560[[package]]11563[[package]]
11561name = "substrate-build-script-utils"11564name = "substrate-build-script-utils"
11562version = "3.0.0"11565version = "3.0.0"
11563source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11566source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11564dependencies = [11567dependencies = [
11565 "platforms",11568 "platforms",
11566]11569]
1156711570
11568[[package]]11571[[package]]
11569name = "substrate-frame-rpc-system"11572name = "substrate-frame-rpc-system"
11570version = "4.0.0-dev"11573version = "4.0.0-dev"
11571source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11574source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11572dependencies = [11575dependencies = [
11573 "frame-system-rpc-runtime-api",11576 "frame-system-rpc-runtime-api",
11574 "futures 0.3.21",11577 "futures 0.3.21",
11575 "jsonrpsee",11578 "jsonrpsee",
11576 "log",11579 "log",
11577 "parity-scale-codec 3.1.2",11580 "parity-scale-codec 3.1.5",
11578 "sc-client-api",11581 "sc-client-api",
11579 "sc-rpc-api",11582 "sc-rpc-api",
11580 "sc-transaction-pool-api",11583 "sc-transaction-pool-api",
11589[[package]]11592[[package]]
11590name = "substrate-prometheus-endpoint"11593name = "substrate-prometheus-endpoint"
11591version = "0.10.0-dev"11594version = "0.10.0-dev"
11592source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11595source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11593dependencies = [11596dependencies = [
11594 "futures-util",11597 "futures-util",
11595 "hyper",11598 "hyper",
11602[[package]]11605[[package]]
11603name = "substrate-state-trie-migration-rpc"11606name = "substrate-state-trie-migration-rpc"
11604version = "4.0.0-dev"11607version = "4.0.0-dev"
11605source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11608source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11606dependencies = [11609dependencies = [
11607 "jsonrpsee",11610 "jsonrpsee",
11608 "log",11611 "log",
11609 "parity-scale-codec 3.1.2",11612 "parity-scale-codec 3.1.5",
11610 "sc-client-api",11613 "sc-client-api",
11611 "sc-rpc-api",11614 "sc-rpc-api",
11612 "scale-info",11615 "scale-info",
11623[[package]]11626[[package]]
11624name = "substrate-test-client"11627name = "substrate-test-client"
11625version = "2.0.1"11628version = "2.0.1"
11626source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11629source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11627dependencies = [11630dependencies = [
11628 "async-trait",11631 "async-trait",
11629 "futures 0.3.21",11632 "futures 0.3.21",
11630 "hex",11633 "hex",
11631 "parity-scale-codec 3.1.2",11634 "parity-scale-codec 3.1.5",
11632 "sc-client-api",11635 "sc-client-api",
11633 "sc-client-db",11636 "sc-client-db",
11634 "sc-consensus",11637 "sc-consensus",
11649[[package]]11652[[package]]
11650name = "substrate-test-utils"11653name = "substrate-test-utils"
11651version = "4.0.0-dev"11654version = "4.0.0-dev"
11652source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11655source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11653dependencies = [11656dependencies = [
11654 "futures 0.3.21",11657 "futures 0.3.21",
11655 "substrate-test-utils-derive",11658 "substrate-test-utils-derive",
11659[[package]]11662[[package]]
11660name = "substrate-test-utils-derive"11663name = "substrate-test-utils-derive"
11661version = "0.10.0-dev"11664version = "0.10.0-dev"
11662source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11665source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11663dependencies = [11666dependencies = [
11664 "proc-macro-crate",11667 "proc-macro-crate",
11665 "proc-macro2",11668 "proc-macro2",
11670[[package]]11673[[package]]
11671name = "substrate-wasm-builder"11674name = "substrate-wasm-builder"
11672version = "5.0.0-dev"11675version = "5.0.0-dev"
11673source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"11676source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
11674dependencies = [11677dependencies = [
11675 "ansi_term",11678 "ansi_term",
11676 "build-helper",11679 "build-helper",
1169111694
11692[[package]]11695[[package]]
11693name = "syn"11696name = "syn"
11694version = "1.0.96"11697version = "1.0.98"
11695source = "registry+https://github.com/rust-lang/crates.io-index"11698source = "registry+https://github.com/rust-lang/crates.io-index"
11696checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf"11699checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd"
11697dependencies = [11700dependencies = [
11698 "proc-macro2",11701 "proc-macro2",
11699 "quote",11702 "quote",
11799 "pallet-timestamp",11802 "pallet-timestamp",
11800 "pallet-transaction-payment",11803 "pallet-transaction-payment",
11801 "pallet-unique",11804 "pallet-unique",
11802 "parity-scale-codec 3.1.2",11805 "parity-scale-codec 3.1.5",
11803 "scale-info",11806 "scale-info",
11804 "sp-core",11807 "sp-core",
11805 "sp-io",11808 "sp-io",
1202812031
12029[[package]]12032[[package]]
12030name = "tower-service"12033name = "tower-service"
12031version = "0.3.1"12034version = "0.3.2"
12032source = "registry+https://github.com/rust-lang/crates.io-index"12035source = "registry+https://github.com/rust-lang/crates.io-index"
12033checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"12036checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
1203412037
12035[[package]]12038[[package]]
12036name = "tracing"12039name = "tracing"
12107 "ahash",12110 "ahash",
12108 "lazy_static",12111 "lazy_static",
12109 "log",12112 "log",
12110 "lru 0.7.6",12113 "lru 0.7.7",
12111 "tracing-core",12114 "tracing-core",
12112]12115]
1211312116
12228[[package]]12231[[package]]
12229name = "try-runtime-cli"12232name = "try-runtime-cli"
12230version = "0.10.0-dev"12233version = "0.10.0-dev"
12231source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#6cbe1772bf258793fa9845daa8f43ea0cadee596"12234source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341"
12232dependencies = [12235dependencies = [
12233 "clap",12236 "clap",
12234 "jsonrpsee",12237 "jsonrpsee",
12235 "log",12238 "log",
12236 "parity-scale-codec 3.1.2",12239 "parity-scale-codec 3.1.5",
12237 "remote-externalities",12240 "remote-externalities",
12238 "sc-chain-spec",12241 "sc-chain-spec",
12239 "sc-cli",12242 "sc-cli",
12282 "jsonrpsee",12285 "jsonrpsee",
12283 "pallet-common",12286 "pallet-common",
12284 "pallet-evm",12287 "pallet-evm",
12285 "parity-scale-codec 3.1.2",12288 "parity-scale-codec 3.1.5",
12286 "rmrk-rpc",12289 "rmrk-rpc",
12287 "sp-api",12290 "sp-api",
12288 "sp-blockchain",12291 "sp-blockchain",
1232912332
12330[[package]]12333[[package]]
12331name = "unicode-ident"12334name = "unicode-ident"
12332version = "1.0.0"12335version = "1.0.1"
12333source = "registry+https://github.com/rust-lang/crates.io-index"12336source = "registry+https://github.com/rust-lang/crates.io-index"
12334checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee"12337checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c"
1233512338
12336[[package]]12339[[package]]
12337name = "unicode-normalization"12340name = "unicode-normalization"
1236212365
12363[[package]]12366[[package]]
12364name = "unique-node"12367name = "unique-node"
12365version = "0.9.22"12368version = "0.9.23"
12366dependencies = [12369dependencies = [
12367 "clap",12370 "clap",
12368 "cumulus-client-cli",12371 "cumulus-client-cli",
12392 "pallet-ethereum",12395 "pallet-ethereum",
12393 "pallet-transaction-payment-rpc",12396 "pallet-transaction-payment-rpc",
12394 "pallet-transaction-payment-rpc-runtime-api",12397 "pallet-transaction-payment-rpc-runtime-api",
12395 "parity-scale-codec 3.1.2",12398 "parity-scale-codec 3.1.5",
12396 "parking_lot 0.11.2",12399 "parking_lot 0.11.2",
12397 "polkadot-cli",12400 "polkadot-cli",
12398 "polkadot-parachain",12401 "polkadot-parachain",
1249912502
12500[[package]]12503[[package]]
12501name = "unique-runtime"12504name = "unique-runtime"
12502version = "0.9.22"12505version = "0.9.23"
12503dependencies = [12506dependencies = [
12504 "cumulus-pallet-aura-ext",12507 "cumulus-pallet-aura-ext",
12505 "cumulus-pallet-dmp-queue",12508 "cumulus-pallet-dmp-queue",
12548 "pallet-transaction-payment-rpc-runtime-api",12551 "pallet-transaction-payment-rpc-runtime-api",
12549 "pallet-treasury",12552 "pallet-treasury",
12550 "pallet-unique",12553 "pallet-unique",
12551 "pallet-unq-scheduler",12554 "pallet-unique-scheduler",
12552 "pallet-xcm",12555 "pallet-xcm",
12553 "parachain-info",12556 "parachain-info",
12554 "parity-scale-codec 3.1.2",12557 "parity-scale-codec 3.1.5",
12555 "polkadot-parachain",12558 "polkadot-parachain",
12556 "rmrk-rpc",12559 "rmrk-rpc",
12557 "scale-info",12560 "scale-info",
1258112584
12582[[package]]12585[[package]]
12583name = "unique-runtime-common"12586name = "unique-runtime-common"
12584version = "0.9.22"12587version = "0.9.23"
12585dependencies = [12588dependencies = [
12586 "evm-coder",12589 "evm-coder",
12587 "fp-rpc",12590 "fp-rpc",
12593 "pallet-nonfungible",12596 "pallet-nonfungible",
12594 "pallet-refungible",12597 "pallet-refungible",
12595 "pallet-unique",12598 "pallet-unique",
12596 "parity-scale-codec 3.1.2",12599 "pallet-unique-scheduler",
12600 "parity-scale-codec 3.1.5",
12597 "rmrk-rpc",12601 "rmrk-rpc",
12598 "scale-info",12602 "scale-info",
12599 "sp-consensus-aura",12603 "sp-consensus-aura",
12640 "frame-support",12644 "frame-support",
12641 "frame-system",12645 "frame-system",
12642 "pallet-evm",12646 "pallet-evm",
12643 "parity-scale-codec 3.1.2",12647 "parity-scale-codec 3.1.5",
12644 "rmrk-traits",12648 "rmrk-traits",
12645 "scale-info",12649 "scale-info",
12646 "serde",12650 "serde",
12656dependencies = [12660dependencies = [
12657 "pallet-common",12661 "pallet-common",
12658 "pallet-evm",12662 "pallet-evm",
12659 "parity-scale-codec 3.1.2",12663 "parity-scale-codec 3.1.5",
12660 "sp-api",12664 "sp-api",
12661 "sp-core",12665 "sp-core",
12662 "sp-runtime",12666 "sp-runtime",
1276512769
12766[[package]]12770[[package]]
12767name = "wasm-bindgen"12771name = "wasm-bindgen"
12768version = "0.2.80"12772version = "0.2.81"
12769source = "registry+https://github.com/rust-lang/crates.io-index"12773source = "registry+https://github.com/rust-lang/crates.io-index"
12770checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad"12774checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994"
12771dependencies = [12775dependencies = [
12772 "cfg-if 1.0.0",12776 "cfg-if 1.0.0",
12773 "wasm-bindgen-macro",12777 "wasm-bindgen-macro",
12774]12778]
1277512779
12776[[package]]12780[[package]]
12777name = "wasm-bindgen-backend"12781name = "wasm-bindgen-backend"
12778version = "0.2.80"12782version = "0.2.81"
12779source = "registry+https://github.com/rust-lang/crates.io-index"12783source = "registry+https://github.com/rust-lang/crates.io-index"
12780checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4"12784checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a"
12781dependencies = [12785dependencies = [
12782 "bumpalo",12786 "bumpalo",
12783 "lazy_static",12787 "lazy_static",
1279012794
12791[[package]]12795[[package]]
12792name = "wasm-bindgen-futures"12796name = "wasm-bindgen-futures"
12793version = "0.4.30"12797version = "0.4.31"
12794source = "registry+https://github.com/rust-lang/crates.io-index"12798source = "registry+https://github.com/rust-lang/crates.io-index"
12795checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2"12799checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f"
12796dependencies = [12800dependencies = [
12797 "cfg-if 1.0.0",12801 "cfg-if 1.0.0",
12798 "js-sys",12802 "js-sys",
1280212806
12803[[package]]12807[[package]]
12804name = "wasm-bindgen-macro"12808name = "wasm-bindgen-macro"
12805version = "0.2.80"12809version = "0.2.81"
12806source = "registry+https://github.com/rust-lang/crates.io-index"12810source = "registry+https://github.com/rust-lang/crates.io-index"
12807checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5"12811checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa"
12808dependencies = [12812dependencies = [
12809 "quote",12813 "quote",
12810 "wasm-bindgen-macro-support",12814 "wasm-bindgen-macro-support",
12811]12815]
1281212816
12813[[package]]12817[[package]]
12814name = "wasm-bindgen-macro-support"12818name = "wasm-bindgen-macro-support"
12815version = "0.2.80"12819version = "0.2.81"
12816source = "registry+https://github.com/rust-lang/crates.io-index"12820source = "registry+https://github.com/rust-lang/crates.io-index"
12817checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b"12821checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048"
12818dependencies = [12822dependencies = [
12819 "proc-macro2",12823 "proc-macro2",
12820 "quote",12824 "quote",
1282512829
12826[[package]]12830[[package]]
12827name = "wasm-bindgen-shared"12831name = "wasm-bindgen-shared"
12828version = "0.2.80"12832version = "0.2.81"
12829source = "registry+https://github.com/rust-lang/crates.io-index"12833source = "registry+https://github.com/rust-lang/crates.io-index"
12830checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744"12834checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be"
1283112835
12832[[package]]12836[[package]]
12833name = "wasm-gc-api"12837name = "wasm-gc-api"
1306513069
13066[[package]]13070[[package]]
13067name = "web-sys"13071name = "web-sys"
13068version = "0.3.57"13072version = "0.3.58"
13069source = "registry+https://github.com/rust-lang/crates.io-index"13073source = "registry+https://github.com/rust-lang/crates.io-index"
13070checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283"13074checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90"
13071dependencies = [13075dependencies = [
13072 "js-sys",13076 "js-sys",
13073 "wasm-bindgen",13077 "wasm-bindgen",
13157 "pallet-vesting",13161 "pallet-vesting",
13158 "pallet-xcm",13162 "pallet-xcm",
13159 "pallet-xcm-benchmarks",13163 "pallet-xcm-benchmarks",
13160 "parity-scale-codec 3.1.2",13164 "parity-scale-codec 3.1.5",
13161 "polkadot-parachain",13165 "polkadot-parachain",
13162 "polkadot-primitives",13166 "polkadot-primitives",
13163 "polkadot-runtime-common",13167 "polkadot-runtime-common",
1325213256
13253[[package]]13257[[package]]
13254name = "windows"13258name = "windows"
13255version = "0.29.0"13259version = "0.34.0"
13256source = "registry+https://github.com/rust-lang/crates.io-index"13260source = "registry+https://github.com/rust-lang/crates.io-index"
13257checksum = "aac7fef12f4b59cd0a29339406cc9203ab44e440ddff6b3f5a41455349fa9cf3"13261checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f"
13258dependencies = [13262dependencies = [
13259 "windows_aarch64_msvc 0.29.0",13263 "windows_aarch64_msvc 0.34.0",
13260 "windows_i686_gnu 0.29.0",13264 "windows_i686_gnu 0.34.0",
13261 "windows_i686_msvc 0.29.0",13265 "windows_i686_msvc 0.34.0",
13262 "windows_x86_64_gnu 0.29.0",13266 "windows_x86_64_gnu 0.34.0",
13263 "windows_x86_64_msvc 0.29.0",13267 "windows_x86_64_msvc 0.34.0",
13264]13268]
1326513269
13266[[package]]13270[[package]]
1327813282
13279[[package]]13283[[package]]
13280name = "windows_aarch64_msvc"13284name = "windows_aarch64_msvc"
13281version = "0.29.0"13285version = "0.34.0"
13282source = "registry+https://github.com/rust-lang/crates.io-index"13286source = "registry+https://github.com/rust-lang/crates.io-index"
13283checksum = "c3d027175d00b01e0cbeb97d6ab6ebe03b12330a35786cbaca5252b1c4bf5d9b"13287checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d"
1328413288
13285[[package]]13289[[package]]
13286name = "windows_aarch64_msvc"13290name = "windows_aarch64_msvc"
1329013294
13291[[package]]13295[[package]]
13292name = "windows_i686_gnu"13296name = "windows_i686_gnu"
13293version = "0.29.0"13297version = "0.34.0"
13294source = "registry+https://github.com/rust-lang/crates.io-index"13298source = "registry+https://github.com/rust-lang/crates.io-index"
13295checksum = "8793f59f7b8e8b01eda1a652b2697d87b93097198ae85f823b969ca5b89bba58"13299checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed"
1329613300
13297[[package]]13301[[package]]
13298name = "windows_i686_gnu"13302name = "windows_i686_gnu"
1330213306
13303[[package]]13307[[package]]
13304name = "windows_i686_msvc"13308name = "windows_i686_msvc"
13305version = "0.29.0"13309version = "0.34.0"
13306source = "registry+https://github.com/rust-lang/crates.io-index"13310source = "registry+https://github.com/rust-lang/crates.io-index"
13307checksum = "8602f6c418b67024be2996c512f5f995de3ba417f4c75af68401ab8756796ae4"13311checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956"
1330813312
13309[[package]]13313[[package]]
13310name = "windows_i686_msvc"13314name = "windows_i686_msvc"
1331413318
13315[[package]]13319[[package]]
13316name = "windows_x86_64_gnu"13320name = "windows_x86_64_gnu"
13317version = "0.29.0"13321version = "0.34.0"
13318source = "registry+https://github.com/rust-lang/crates.io-index"13322source = "registry+https://github.com/rust-lang/crates.io-index"
13319checksum = "f3d615f419543e0bd7d2b3323af0d86ff19cbc4f816e6453f36a2c2ce889c354"13323checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4"
1332013324
13321[[package]]13325[[package]]
13322name = "windows_x86_64_gnu"13326name = "windows_x86_64_gnu"
1332613330
13327[[package]]13331[[package]]
13328name = "windows_x86_64_msvc"13332name = "windows_x86_64_msvc"
13329version = "0.29.0"13333version = "0.34.0"
13330source = "registry+https://github.com/rust-lang/crates.io-index"13334source = "registry+https://github.com/rust-lang/crates.io-index"
13331checksum = "11d95421d9ed3672c280884da53201a5c46b7b2765ca6faf34b0d71cf34a3561"13335checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9"
1333213336
13333[[package]]13337[[package]]
13334name = "windows_x86_64_msvc"13338name = "windows_x86_64_msvc"
13379 "derivative",13383 "derivative",
13380 "impl-trait-for-tuples",13384 "impl-trait-for-tuples",
13381 "log",13385 "log",
13382 "parity-scale-codec 3.1.2",13386 "parity-scale-codec 3.1.5",
13383 "scale-info",13387 "scale-info",
13384 "xcm-procedural",13388 "xcm-procedural",
13385]13389]
13393 "frame-system",13397 "frame-system",
13394 "log",13398 "log",
13395 "pallet-transaction-payment",13399 "pallet-transaction-payment",
13396 "parity-scale-codec 3.1.2",13400 "parity-scale-codec 3.1.5",
13397 "polkadot-parachain",13401 "polkadot-parachain",
13398 "scale-info",13402 "scale-info",
13399 "sp-arithmetic",13403 "sp-arithmetic",
13413 "frame-support",13417 "frame-support",
13414 "impl-trait-for-tuples",13418 "impl-trait-for-tuples",
13415 "log",13419 "log",
13416 "parity-scale-codec 3.1.2",13420 "parity-scale-codec 3.1.5",
13417 "sp-arithmetic",13421 "sp-arithmetic",
13418 "sp-core",13422 "sp-core",
13419 "sp-io",13423 "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
--- a/tests/src/interfaces/types-lookup.ts
+++ b/tests/src/interfaces/types-lookup.ts
@@ -1438,8 +1438,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;
@@ -1498,7 +1498,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 UpDataStructsCollectionMode (156) */
@@ -1562,7 +1562,7 @@
   /** @name UpDataStructsNestingPermissions (169) */
   export interface UpDataStructsNestingPermissions extends Struct {
     readonly tokenOwner: bool;
-    readonly admin: bool;
+    readonly collectionAdmin: bool;
     readonly restricted: Option<UpDataStructsOwnerRestrictedSet>;
     readonly permissive: bool;
   }
@@ -1650,8 +1650,8 @@
     readonly users: BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>;
   }
 
-  /** @name PalletUnqSchedulerCall (206) */
-  export interface PalletUnqSchedulerCall extends Enum {
+  /** @name PalletUniqueSchedulerCall (206) */
+  export interface PalletUniqueSchedulerCall extends Enum {
     readonly isScheduleNamed: boolean;
     readonly asScheduleNamed: {
       readonly id: U8aFixed;
@@ -1719,11 +1719,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: {
@@ -1777,7 +1779,6 @@
     readonly asAddComposableResource: {
       readonly rmrkCollectionId: u32;
       readonly nftId: u32;
-      readonly resourceId: Bytes;
       readonly resource: RmrkTraitsResourceComposableResource;
     } & Struct;
     readonly isAddSlotResource: boolean;
@@ -1795,13 +1796,15 @@
     readonly type: 'CreateCollection' | 'DestroyCollection' | 'ChangeCollectionIssuer' | 'LockCollection' | 'MintNft' | 'BurnNft' | 'Send' | 'AcceptNft' | 'RejectNft' | 'AcceptResource' | 'AcceptResourceRemoval' | 'SetProperty' | 'SetPriority' | 'AddBasicResource' | 'AddComposableResource' | 'AddSlotResource' | 'RemoveResource';
   }
 
-  /** @name RmrkTraitsNftAccountIdOrCollectionNftTuple (215) */
-  export interface RmrkTraitsNftAccountIdOrCollectionNftTuple extends Enum {
-    readonly isAccountId: boolean;
-    readonly asAccountId: AccountId32;
-    readonly isCollectionAndNftTuple: boolean;
-    readonly asCollectionAndNftTuple: ITuple<[u32, u32]>;
-    readonly type: 'AccountId' | 'CollectionAndNftTuple';
+  /** @name RmrkTraitsResourceResourceTypes (217) */
+  export interface RmrkTraitsResourceResourceTypes extends Enum {
+    readonly isBasic: boolean;
+    readonly asBasic: RmrkTraitsResourceBasicResource;
+    readonly isComposable: boolean;
+    readonly asComposable: RmrkTraitsResourceComposableResource;
+    readonly isSlot: boolean;
+    readonly asSlot: RmrkTraitsResourceSlotResource;
+    readonly type: 'Basic' | 'Composable' | 'Slot';
   }
 
   /** @name RmrkTraitsResourceBasicResource (219) */
@@ -1812,7 +1815,7 @@
     readonly thumb: Option<Bytes>;
   }
 
-  /** @name RmrkTraitsResourceComposableResource (222) */
+  /** @name RmrkTraitsResourceComposableResource (221) */
   export interface RmrkTraitsResourceComposableResource extends Struct {
     readonly parts: Vec<u32>;
     readonly base: u32;
@@ -1822,7 +1825,7 @@
     readonly thumb: Option<Bytes>;
   }
 
-  /** @name RmrkTraitsResourceSlotResource (224) */
+  /** @name RmrkTraitsResourceSlotResource (222) */
   export interface RmrkTraitsResourceSlotResource extends Struct {
     readonly base: u32;
     readonly src: Option<Bytes>;
@@ -1832,7 +1835,16 @@
     readonly thumb: Option<Bytes>;
   }
 
-  /** @name PalletRmrkEquipCall (225) */
+  /** @name RmrkTraitsNftAccountIdOrCollectionNftTuple (224) */
+  export interface RmrkTraitsNftAccountIdOrCollectionNftTuple extends Enum {
+    readonly isAccountId: boolean;
+    readonly asAccountId: AccountId32;
+    readonly isCollectionAndNftTuple: boolean;
+    readonly asCollectionAndNftTuple: ITuple<[u32, u32]>;
+    readonly type: 'AccountId' | 'CollectionAndNftTuple';
+  }
+
+  /** @name PalletRmrkEquipCall (228) */
   export interface PalletRmrkEquipCall extends Enum {
     readonly isCreateBase: boolean;
     readonly asCreateBase: {
@@ -1848,7 +1860,7 @@
     readonly type: 'CreateBase' | 'ThemeAdd';
   }
 
-  /** @name RmrkTraitsPartPartType (227) */
+  /** @name RmrkTraitsPartPartType (230) */
   export interface RmrkTraitsPartPartType extends Enum {
     readonly isFixedPart: boolean;
     readonly asFixedPart: RmrkTraitsPartFixedPart;
@@ -1857,14 +1869,14 @@
     readonly type: 'FixedPart' | 'SlotPart';
   }
 
-  /** @name RmrkTraitsPartFixedPart (229) */
+  /** @name RmrkTraitsPartFixedPart (232) */
   export interface RmrkTraitsPartFixedPart extends Struct {
     readonly id: u32;
     readonly z: u32;
     readonly src: Bytes;
   }
 
-  /** @name RmrkTraitsPartSlotPart (230) */
+  /** @name RmrkTraitsPartSlotPart (233) */
   export interface RmrkTraitsPartSlotPart extends Struct {
     readonly id: u32;
     readonly equippable: RmrkTraitsPartEquippableList;
@@ -1872,7 +1884,7 @@
     readonly z: u32;
   }
 
-  /** @name RmrkTraitsPartEquippableList (231) */
+  /** @name RmrkTraitsPartEquippableList (234) */
   export interface RmrkTraitsPartEquippableList extends Enum {
     readonly isAll: boolean;
     readonly isEmpty: boolean;
@@ -1881,20 +1893,20 @@
     readonly type: 'All' | 'Empty' | 'Custom';
   }
 
-  /** @name RmrkTraitsTheme (233) */
+  /** @name RmrkTraitsTheme (236) */
   export interface RmrkTraitsTheme extends Struct {
     readonly name: Bytes;
     readonly properties: Vec<RmrkTraitsThemeThemeProperty>;
     readonly inherit: bool;
   }
 
-  /** @name RmrkTraitsThemeThemeProperty (235) */
+  /** @name RmrkTraitsThemeThemeProperty (238) */
   export interface RmrkTraitsThemeThemeProperty extends Struct {
     readonly key: Bytes;
     readonly value: Bytes;
   }
 
-  /** @name PalletEvmCall (236) */
+  /** @name PalletEvmCall (239) */
   export interface PalletEvmCall extends Enum {
     readonly isWithdraw: boolean;
     readonly asWithdraw: {
@@ -1939,7 +1951,7 @@
     readonly type: 'Withdraw' | 'Call' | 'Create' | 'Create2';
   }
 
-  /** @name PalletEthereumCall (242) */
+  /** @name PalletEthereumCall (245) */
   export interface PalletEthereumCall extends Enum {
     readonly isTransact: boolean;
     readonly asTransact: {
@@ -1948,7 +1960,7 @@
     readonly type: 'Transact';
   }
 
-  /** @name EthereumTransactionTransactionV2 (243) */
+  /** @name EthereumTransactionTransactionV2 (246) */
   export interface EthereumTransactionTransactionV2 extends Enum {
     readonly isLegacy: boolean;
     readonly asLegacy: EthereumTransactionLegacyTransaction;
@@ -1959,7 +1971,7 @@
     readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';
   }
 
-  /** @name EthereumTransactionLegacyTransaction (244) */
+  /** @name EthereumTransactionLegacyTransaction (247) */
   export interface EthereumTransactionLegacyTransaction extends Struct {
     readonly nonce: U256;
     readonly gasPrice: U256;
@@ -1970,7 +1982,7 @@
     readonly signature: EthereumTransactionTransactionSignature;
   }
 
-  /** @name EthereumTransactionTransactionAction (245) */
+  /** @name EthereumTransactionTransactionAction (248) */
   export interface EthereumTransactionTransactionAction extends Enum {
     readonly isCall: boolean;
     readonly asCall: H160;
@@ -1978,14 +1990,14 @@
     readonly type: 'Call' | 'Create';
   }
 
-  /** @name EthereumTransactionTransactionSignature (246) */
+  /** @name EthereumTransactionTransactionSignature (249) */
   export interface EthereumTransactionTransactionSignature extends Struct {
     readonly v: u64;
     readonly r: H256;
     readonly s: H256;
   }
 
-  /** @name EthereumTransactionEip2930Transaction (248) */
+  /** @name EthereumTransactionEip2930Transaction (251) */
   export interface EthereumTransactionEip2930Transaction extends Struct {
     readonly chainId: u64;
     readonly nonce: U256;
@@ -2000,13 +2012,13 @@
     readonly s: H256;
   }
 
-  /** @name EthereumTransactionAccessListItem (250) */
+  /** @name EthereumTransactionAccessListItem (253) */
   export interface EthereumTransactionAccessListItem extends Struct {
     readonly address: H160;
     readonly storageKeys: Vec<H256>;
   }
 
-  /** @name EthereumTransactionEip1559Transaction (251) */
+  /** @name EthereumTransactionEip1559Transaction (254) */
   export interface EthereumTransactionEip1559Transaction extends Struct {
     readonly chainId: u64;
     readonly nonce: U256;
@@ -2022,7 +2034,7 @@
     readonly s: H256;
   }
 
-  /** @name PalletEvmMigrationCall (252) */
+  /** @name PalletEvmMigrationCall (255) */
   export interface PalletEvmMigrationCall extends Enum {
     readonly isBegin: boolean;
     readonly asBegin: {
@@ -2041,7 +2053,7 @@
     readonly type: 'Begin' | 'SetData' | 'Finish';
   }
 
-  /** @name PalletSudoEvent (255) */
+  /** @name PalletSudoEvent (258) */
   export interface PalletSudoEvent extends Enum {
     readonly isSudid: boolean;
     readonly asSudid: {
@@ -2058,7 +2070,7 @@
     readonly type: 'Sudid' | 'KeyChanged' | 'SudoAsDone';
   }
 
-  /** @name SpRuntimeDispatchError (257) */
+  /** @name SpRuntimeDispatchError (260) */
   export interface SpRuntimeDispatchError extends Enum {
     readonly isOther: boolean;
     readonly isCannotLookup: boolean;
@@ -2077,13 +2089,13 @@
     readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional';
   }
 
-  /** @name SpRuntimeModuleError (258) */
+  /** @name SpRuntimeModuleError (261) */
   export interface SpRuntimeModuleError extends Struct {
     readonly index: u8;
     readonly error: U8aFixed;
   }
 
-  /** @name SpRuntimeTokenError (259) */
+  /** @name SpRuntimeTokenError (262) */
   export interface SpRuntimeTokenError extends Enum {
     readonly isNoFunds: boolean;
     readonly isWouldDie: boolean;
@@ -2095,7 +2107,7 @@
     readonly type: 'NoFunds' | 'WouldDie' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported';
   }
 
-  /** @name SpRuntimeArithmeticError (260) */
+  /** @name SpRuntimeArithmeticError (263) */
   export interface SpRuntimeArithmeticError extends Enum {
     readonly isUnderflow: boolean;
     readonly isOverflow: boolean;
@@ -2103,20 +2115,20 @@
     readonly type: 'Underflow' | 'Overflow' | 'DivisionByZero';
   }
 
-  /** @name SpRuntimeTransactionalError (261) */
+  /** @name SpRuntimeTransactionalError (264) */
   export interface SpRuntimeTransactionalError extends Enum {
     readonly isLimitReached: boolean;
     readonly isNoLayer: boolean;
     readonly type: 'LimitReached' | 'NoLayer';
   }
 
-  /** @name PalletSudoError (262) */
+  /** @name PalletSudoError (265) */
   export interface PalletSudoError extends Enum {
     readonly isRequireSudo: boolean;
     readonly type: 'RequireSudo';
   }
 
-  /** @name FrameSystemAccountInfo (263) */
+  /** @name FrameSystemAccountInfo (266) */
   export interface FrameSystemAccountInfo extends Struct {
     readonly nonce: u32;
     readonly consumers: u32;
@@ -2125,19 +2137,19 @@
     readonly data: PalletBalancesAccountData;
   }
 
-  /** @name FrameSupportWeightsPerDispatchClassU64 (264) */
+  /** @name FrameSupportWeightsPerDispatchClassU64 (267) */
   export interface FrameSupportWeightsPerDispatchClassU64 extends Struct {
     readonly normal: u64;
     readonly operational: u64;
     readonly mandatory: u64;
   }
 
-  /** @name SpRuntimeDigest (265) */
+  /** @name SpRuntimeDigest (268) */
   export interface SpRuntimeDigest extends Struct {
     readonly logs: Vec<SpRuntimeDigestDigestItem>;
   }
 
-  /** @name SpRuntimeDigestDigestItem (267) */
+  /** @name SpRuntimeDigestDigestItem (270) */
   export interface SpRuntimeDigestDigestItem extends Enum {
     readonly isOther: boolean;
     readonly asOther: Bytes;
@@ -2151,14 +2163,14 @@
     readonly type: 'Other' | 'Consensus' | 'Seal' | 'PreRuntime' | 'RuntimeEnvironmentUpdated';
   }
 
-  /** @name FrameSystemEventRecord (269) */
+  /** @name FrameSystemEventRecord (272) */
   export interface FrameSystemEventRecord extends Struct {
     readonly phase: FrameSystemPhase;
     readonly event: Event;
     readonly topics: Vec<H256>;
   }
 
-  /** @name FrameSystemEvent (271) */
+  /** @name FrameSystemEvent (274) */
   export interface FrameSystemEvent extends Enum {
     readonly isExtrinsicSuccess: boolean;
     readonly asExtrinsicSuccess: {
@@ -2186,14 +2198,14 @@
     readonly type: 'ExtrinsicSuccess' | 'ExtrinsicFailed' | 'CodeUpdated' | 'NewAccount' | 'KilledAccount' | 'Remarked';
   }
 
-  /** @name FrameSupportWeightsDispatchInfo (272) */
+  /** @name FrameSupportWeightsDispatchInfo (275) */
   export interface FrameSupportWeightsDispatchInfo extends Struct {
     readonly weight: u64;
     readonly class: FrameSupportWeightsDispatchClass;
     readonly paysFee: FrameSupportWeightsPays;
   }
 
-  /** @name FrameSupportWeightsDispatchClass (273) */
+  /** @name FrameSupportWeightsDispatchClass (276) */
   export interface FrameSupportWeightsDispatchClass extends Enum {
     readonly isNormal: boolean;
     readonly isOperational: boolean;
@@ -2201,14 +2213,14 @@
     readonly type: 'Normal' | 'Operational' | 'Mandatory';
   }
 
-  /** @name FrameSupportWeightsPays (274) */
+  /** @name FrameSupportWeightsPays (277) */
   export interface FrameSupportWeightsPays extends Enum {
     readonly isYes: boolean;
     readonly isNo: boolean;
     readonly type: 'Yes' | 'No';
   }
 
-  /** @name OrmlVestingModuleEvent (275) */
+  /** @name OrmlVestingModuleEvent (278) */
   export interface OrmlVestingModuleEvent extends Enum {
     readonly isVestingScheduleAdded: boolean;
     readonly asVestingScheduleAdded: {
@@ -2228,7 +2240,7 @@
     readonly type: 'VestingScheduleAdded' | 'Claimed' | 'VestingSchedulesUpdated';
   }
 
-  /** @name CumulusPalletXcmpQueueEvent (276) */
+  /** @name CumulusPalletXcmpQueueEvent (279) */
   export interface CumulusPalletXcmpQueueEvent extends Enum {
     readonly isSuccess: boolean;
     readonly asSuccess: Option<H256>;
@@ -2249,7 +2261,7 @@
     readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'UpwardMessageSent' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced';
   }
 
-  /** @name PalletXcmEvent (277) */
+  /** @name PalletXcmEvent (280) */
   export interface PalletXcmEvent extends Enum {
     readonly isAttempted: boolean;
     readonly asAttempted: XcmV2TraitsOutcome;
@@ -2286,7 +2298,7 @@
     readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail';
   }
 
-  /** @name XcmV2TraitsOutcome (278) */
+  /** @name XcmV2TraitsOutcome (281) */
   export interface XcmV2TraitsOutcome extends Enum {
     readonly isComplete: boolean;
     readonly asComplete: u64;
@@ -2297,7 +2309,7 @@
     readonly type: 'Complete' | 'Incomplete' | 'Error';
   }
 
-  /** @name CumulusPalletXcmEvent (280) */
+  /** @name CumulusPalletXcmEvent (283) */
   export interface CumulusPalletXcmEvent extends Enum {
     readonly isInvalidFormat: boolean;
     readonly asInvalidFormat: U8aFixed;
@@ -2308,7 +2320,7 @@
     readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward';
   }
 
-  /** @name CumulusPalletDmpQueueEvent (281) */
+  /** @name CumulusPalletDmpQueueEvent (284) */
   export interface CumulusPalletDmpQueueEvent extends Enum {
     readonly isInvalidFormat: boolean;
     readonly asInvalidFormat: U8aFixed;
@@ -2325,7 +2337,7 @@
     readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced';
   }
 
-  /** @name PalletUniqueRawEvent (282) */
+  /** @name PalletUniqueRawEvent (285) */
   export interface PalletUniqueRawEvent extends Enum {
     readonly isCollectionSponsorRemoved: boolean;
     readonly asCollectionSponsorRemoved: u32;
@@ -2350,8 +2362,8 @@
     readonly type: 'CollectionSponsorRemoved' | 'CollectionAdminAdded' | 'CollectionOwnedChanged' | 'CollectionSponsorSet' | 'SponsorshipConfirmed' | 'CollectionAdminRemoved' | 'AllowListAddressRemoved' | 'AllowListAddressAdded' | 'CollectionLimitSet' | 'CollectionPermissionSet';
   }
 
-  /** @name PalletUnqSchedulerEvent (283) */
-  export interface PalletUnqSchedulerEvent extends Enum {
+  /** @name PalletUniqueSchedulerEvent (286) */
+  export interface PalletUniqueSchedulerEvent extends Enum {
     readonly isScheduled: boolean;
     readonly asScheduled: {
       readonly when: u32;
@@ -2377,14 +2389,14 @@
     readonly type: 'Scheduled' | 'Canceled' | 'Dispatched' | 'CallLookupFailed';
   }
 
-  /** @name FrameSupportScheduleLookupError (285) */
+  /** @name FrameSupportScheduleLookupError (288) */
   export interface FrameSupportScheduleLookupError extends Enum {
     readonly isUnknown: boolean;
     readonly isBadFormat: boolean;
     readonly type: 'Unknown' | 'BadFormat';
   }
 
-  /** @name PalletCommonEvent (286) */
+  /** @name PalletCommonEvent (289) */
   export interface PalletCommonEvent extends Enum {
     readonly isCollectionCreated: boolean;
     readonly asCollectionCreated: ITuple<[u32, u8, AccountId32]>;
@@ -2411,14 +2423,14 @@
     readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'ItemCreated' | 'ItemDestroyed' | 'Transfer' | 'Approved' | 'CollectionPropertySet' | 'CollectionPropertyDeleted' | 'TokenPropertySet' | 'TokenPropertyDeleted' | 'PropertyPermissionSet';
   }
 
-  /** @name PalletStructureEvent (287) */
+  /** @name PalletStructureEvent (290) */
   export interface PalletStructureEvent extends Enum {
     readonly isExecuted: boolean;
     readonly asExecuted: Result<Null, SpRuntimeDispatchError>;
     readonly type: 'Executed';
   }
 
-  /** @name PalletRmrkCoreEvent (288) */
+  /** @name PalletRmrkCoreEvent (291) */
   export interface PalletRmrkCoreEvent extends Enum {
     readonly isCollectionCreated: boolean;
     readonly asCollectionCreated: {
@@ -2508,7 +2520,7 @@
     readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'IssuerChanged' | 'CollectionLocked' | 'NftMinted' | 'NftBurned' | 'NftSent' | 'NftAccepted' | 'NftRejected' | 'PropertySet' | 'ResourceAdded' | 'ResourceRemoval' | 'ResourceAccepted' | 'ResourceRemovalAccepted' | 'PrioritySet';
   }
 
-  /** @name PalletRmrkEquipEvent (289) */
+  /** @name PalletRmrkEquipEvent (292) */
   export interface PalletRmrkEquipEvent extends Enum {
     readonly isBaseCreated: boolean;
     readonly asBaseCreated: {
@@ -2518,7 +2530,7 @@
     readonly type: 'BaseCreated';
   }
 
-  /** @name PalletEvmEvent (290) */
+  /** @name PalletEvmEvent (293) */
   export interface PalletEvmEvent extends Enum {
     readonly isLog: boolean;
     readonly asLog: EthereumLog;
@@ -2537,21 +2549,21 @@
     readonly type: 'Log' | 'Created' | 'CreatedFailed' | 'Executed' | 'ExecutedFailed' | 'BalanceDeposit' | 'BalanceWithdraw';
   }
 
-  /** @name EthereumLog (291) */
+  /** @name EthereumLog (294) */
   export interface EthereumLog extends Struct {
     readonly address: H160;
     readonly topics: Vec<H256>;
     readonly data: Bytes;
   }
 
-  /** @name PalletEthereumEvent (292) */
+  /** @name PalletEthereumEvent (295) */
   export interface PalletEthereumEvent extends Enum {
     readonly isExecuted: boolean;
     readonly asExecuted: ITuple<[H160, H160, H256, EvmCoreErrorExitReason]>;
     readonly type: 'Executed';
   }
 
-  /** @name EvmCoreErrorExitReason (293) */
+  /** @name EvmCoreErrorExitReason (296) */
   export interface EvmCoreErrorExitReason extends Enum {
     readonly isSucceed: boolean;
     readonly asSucceed: EvmCoreErrorExitSucceed;
@@ -2564,7 +2576,7 @@
     readonly type: 'Succeed' | 'Error' | 'Revert' | 'Fatal';
   }
 
-  /** @name EvmCoreErrorExitSucceed (294) */
+  /** @name EvmCoreErrorExitSucceed (297) */
   export interface EvmCoreErrorExitSucceed extends Enum {
     readonly isStopped: boolean;
     readonly isReturned: boolean;
@@ -2572,7 +2584,7 @@
     readonly type: 'Stopped' | 'Returned' | 'Suicided';
   }
 
-  /** @name EvmCoreErrorExitError (295) */
+  /** @name EvmCoreErrorExitError (298) */
   export interface EvmCoreErrorExitError extends Enum {
     readonly isStackUnderflow: boolean;
     readonly isStackOverflow: boolean;
@@ -2593,13 +2605,13 @@
     readonly type: 'StackUnderflow' | 'StackOverflow' | 'InvalidJump' | 'InvalidRange' | 'DesignatedInvalid' | 'CallTooDeep' | 'CreateCollision' | 'CreateContractLimit' | 'OutOfOffset' | 'OutOfGas' | 'OutOfFund' | 'PcUnderflow' | 'CreateEmpty' | 'Other' | 'InvalidCode';
   }
 
-  /** @name EvmCoreErrorExitRevert (298) */
+  /** @name EvmCoreErrorExitRevert (301) */
   export interface EvmCoreErrorExitRevert extends Enum {
     readonly isReverted: boolean;
     readonly type: 'Reverted';
   }
 
-  /** @name EvmCoreErrorExitFatal (299) */
+  /** @name EvmCoreErrorExitFatal (302) */
   export interface EvmCoreErrorExitFatal extends Enum {
     readonly isNotSupported: boolean;
     readonly isUnhandledInterrupt: boolean;
@@ -2610,7 +2622,7 @@
     readonly type: 'NotSupported' | 'UnhandledInterrupt' | 'CallErrorAsFatal' | 'Other';
   }
 
-  /** @name FrameSystemPhase (300) */
+  /** @name FrameSystemPhase (303) */
   export interface FrameSystemPhase extends Enum {
     readonly isApplyExtrinsic: boolean;
     readonly asApplyExtrinsic: u32;
@@ -2619,27 +2631,27 @@
     readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization';
   }
 
-  /** @name FrameSystemLastRuntimeUpgradeInfo (302) */
+  /** @name FrameSystemLastRuntimeUpgradeInfo (305) */
   export interface FrameSystemLastRuntimeUpgradeInfo extends Struct {
     readonly specVersion: Compact<u32>;
     readonly specName: Text;
   }
 
-  /** @name FrameSystemLimitsBlockWeights (303) */
+  /** @name FrameSystemLimitsBlockWeights (306) */
   export interface FrameSystemLimitsBlockWeights extends Struct {
     readonly baseBlock: u64;
     readonly maxBlock: u64;
     readonly perClass: FrameSupportWeightsPerDispatchClassWeightsPerClass;
   }
 
-  /** @name FrameSupportWeightsPerDispatchClassWeightsPerClass (304) */
+  /** @name FrameSupportWeightsPerDispatchClassWeightsPerClass (307) */
   export interface FrameSupportWeightsPerDispatchClassWeightsPerClass extends Struct {
     readonly normal: FrameSystemLimitsWeightsPerClass;
     readonly operational: FrameSystemLimitsWeightsPerClass;
     readonly mandatory: FrameSystemLimitsWeightsPerClass;
   }
 
-  /** @name FrameSystemLimitsWeightsPerClass (305) */
+  /** @name FrameSystemLimitsWeightsPerClass (308) */
   export interface FrameSystemLimitsWeightsPerClass extends Struct {
     readonly baseExtrinsic: u64;
     readonly maxExtrinsic: Option<u64>;
@@ -2647,25 +2659,25 @@
     readonly reserved: Option<u64>;
   }
 
-  /** @name FrameSystemLimitsBlockLength (307) */
+  /** @name FrameSystemLimitsBlockLength (310) */
   export interface FrameSystemLimitsBlockLength extends Struct {
     readonly max: FrameSupportWeightsPerDispatchClassU32;
   }
 
-  /** @name FrameSupportWeightsPerDispatchClassU32 (308) */
+  /** @name FrameSupportWeightsPerDispatchClassU32 (311) */
   export interface FrameSupportWeightsPerDispatchClassU32 extends Struct {
     readonly normal: u32;
     readonly operational: u32;
     readonly mandatory: u32;
   }
 
-  /** @name FrameSupportWeightsRuntimeDbWeight (309) */
+  /** @name FrameSupportWeightsRuntimeDbWeight (312) */
   export interface FrameSupportWeightsRuntimeDbWeight extends Struct {
     readonly read: u64;
     readonly write: u64;
   }
 
-  /** @name SpVersionRuntimeVersion (310) */
+  /** @name SpVersionRuntimeVersion (313) */
   export interface SpVersionRuntimeVersion extends Struct {
     readonly specName: Text;
     readonly implName: Text;
@@ -2677,7 +2689,7 @@
     readonly stateVersion: u8;
   }
 
-  /** @name FrameSystemError (314) */
+  /** @name FrameSystemError (317) */
   export interface FrameSystemError extends Enum {
     readonly isInvalidSpecName: boolean;
     readonly isSpecVersionNeedsToIncrease: boolean;
@@ -2688,7 +2700,7 @@
     readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered';
   }
 
-  /** @name OrmlVestingModuleError (316) */
+  /** @name OrmlVestingModuleError (319) */
   export interface OrmlVestingModuleError extends Enum {
     readonly isZeroVestingPeriod: boolean;
     readonly isZeroVestingPeriodCount: boolean;
@@ -2699,21 +2711,21 @@
     readonly type: 'ZeroVestingPeriod' | 'ZeroVestingPeriodCount' | 'InsufficientBalanceToLock' | 'TooManyVestingSchedules' | 'AmountLow' | 'MaxVestingSchedulesExceeded';
   }
 
-  /** @name CumulusPalletXcmpQueueInboundChannelDetails (318) */
+  /** @name CumulusPalletXcmpQueueInboundChannelDetails (321) */
   export interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct {
     readonly sender: u32;
     readonly state: CumulusPalletXcmpQueueInboundState;
     readonly messageMetadata: Vec<ITuple<[u32, PolkadotParachainPrimitivesXcmpMessageFormat]>>;
   }
 
-  /** @name CumulusPalletXcmpQueueInboundState (319) */
+  /** @name CumulusPalletXcmpQueueInboundState (322) */
   export interface CumulusPalletXcmpQueueInboundState extends Enum {
     readonly isOk: boolean;
     readonly isSuspended: boolean;
     readonly type: 'Ok' | 'Suspended';
   }
 
-  /** @name PolkadotParachainPrimitivesXcmpMessageFormat (322) */
+  /** @name PolkadotParachainPrimitivesXcmpMessageFormat (325) */
   export interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum {
     readonly isConcatenatedVersionedXcm: boolean;
     readonly isConcatenatedEncodedBlob: boolean;
@@ -2721,7 +2733,7 @@
     readonly type: 'ConcatenatedVersionedXcm' | 'ConcatenatedEncodedBlob' | 'Signals';
   }
 
-  /** @name CumulusPalletXcmpQueueOutboundChannelDetails (325) */
+  /** @name CumulusPalletXcmpQueueOutboundChannelDetails (328) */
   export interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct {
     readonly recipient: u32;
     readonly state: CumulusPalletXcmpQueueOutboundState;
@@ -2730,14 +2742,14 @@
     readonly lastIndex: u16;
   }
 
-  /** @name CumulusPalletXcmpQueueOutboundState (326) */
+  /** @name CumulusPalletXcmpQueueOutboundState (329) */
   export interface CumulusPalletXcmpQueueOutboundState extends Enum {
     readonly isOk: boolean;
     readonly isSuspended: boolean;
     readonly type: 'Ok' | 'Suspended';
   }
 
-  /** @name CumulusPalletXcmpQueueQueueConfigData (328) */
+  /** @name CumulusPalletXcmpQueueQueueConfigData (331) */
   export interface CumulusPalletXcmpQueueQueueConfigData extends Struct {
     readonly suspendThreshold: u32;
     readonly dropThreshold: u32;
@@ -2747,7 +2759,7 @@
     readonly xcmpMaxIndividualWeight: u64;
   }
 
-  /** @name CumulusPalletXcmpQueueError (330) */
+  /** @name CumulusPalletXcmpQueueError (333) */
   export interface CumulusPalletXcmpQueueError extends Enum {
     readonly isFailedToSend: boolean;
     readonly isBadXcmOrigin: boolean;
@@ -2757,7 +2769,7 @@
     readonly type: 'FailedToSend' | 'BadXcmOrigin' | 'BadXcm' | 'BadOverweightIndex' | 'WeightOverLimit';
   }
 
-  /** @name PalletXcmError (331) */
+  /** @name PalletXcmError (334) */
   export interface PalletXcmError extends Enum {
     readonly isUnreachable: boolean;
     readonly isSendFailure: boolean;
@@ -2775,29 +2787,29 @@
     readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed';
   }
 
-  /** @name CumulusPalletXcmError (332) */
+  /** @name CumulusPalletXcmError (335) */
   export type CumulusPalletXcmError = Null;
 
-  /** @name CumulusPalletDmpQueueConfigData (333) */
+  /** @name CumulusPalletDmpQueueConfigData (336) */
   export interface CumulusPalletDmpQueueConfigData extends Struct {
     readonly maxIndividual: u64;
   }
 
-  /** @name CumulusPalletDmpQueuePageIndexData (334) */
+  /** @name CumulusPalletDmpQueuePageIndexData (337) */
   export interface CumulusPalletDmpQueuePageIndexData extends Struct {
     readonly beginUsed: u32;
     readonly endUsed: u32;
     readonly overweightCount: u64;
   }
 
-  /** @name CumulusPalletDmpQueueError (337) */
+  /** @name CumulusPalletDmpQueueError (340) */
   export interface CumulusPalletDmpQueueError extends Enum {
     readonly isUnknown: boolean;
     readonly isOverLimit: boolean;
     readonly type: 'Unknown' | 'OverLimit';
   }
 
-  /** @name PalletUniqueError (341) */
+  /** @name PalletUniqueError (344) */
   export interface PalletUniqueError extends Enum {
     readonly isCollectionDecimalPointLimitExceeded: boolean;
     readonly isConfirmUnsetSponsorFail: boolean;
@@ -2805,8 +2817,8 @@
     readonly type: 'CollectionDecimalPointLimitExceeded' | 'ConfirmUnsetSponsorFail' | 'EmptyArgument';
   }
 
-  /** @name PalletUnqSchedulerScheduledV3 (344) */
-  export interface PalletUnqSchedulerScheduledV3 extends Struct {
+  /** @name PalletUniqueSchedulerScheduledV3 (347) */
+  export interface PalletUniqueSchedulerScheduledV3 extends Struct {
     readonly maybeId: Option<U8aFixed>;
     readonly priority: u8;
     readonly call: FrameSupportScheduleMaybeHashed;
@@ -2814,7 +2826,7 @@
     readonly origin: OpalRuntimeOriginCaller;
   }
 
-  /** @name OpalRuntimeOriginCaller (345) */
+  /** @name OpalRuntimeOriginCaller (348) */
   export interface OpalRuntimeOriginCaller extends Enum {
     readonly isVoid: boolean;
     readonly isSystem: boolean;
@@ -2828,7 +2840,7 @@
     readonly type: 'Void' | 'System' | 'PolkadotXcm' | 'CumulusXcm' | 'Ethereum';
   }
 
-  /** @name FrameSupportDispatchRawOrigin (346) */
+  /** @name FrameSupportDispatchRawOrigin (349) */
   export interface FrameSupportDispatchRawOrigin extends Enum {
     readonly isRoot: boolean;
     readonly isSigned: boolean;
@@ -2837,7 +2849,7 @@
     readonly type: 'Root' | 'Signed' | 'None';
   }
 
-  /** @name PalletXcmOrigin (347) */
+  /** @name PalletXcmOrigin (350) */
   export interface PalletXcmOrigin extends Enum {
     readonly isXcm: boolean;
     readonly asXcm: XcmV1MultiLocation;
@@ -2846,7 +2858,7 @@
     readonly type: 'Xcm' | 'Response';
   }
 
-  /** @name CumulusPalletXcmOrigin (348) */
+  /** @name CumulusPalletXcmOrigin (351) */
   export interface CumulusPalletXcmOrigin extends Enum {
     readonly isRelay: boolean;
     readonly isSiblingParachain: boolean;
@@ -2854,18 +2866,18 @@
     readonly type: 'Relay' | 'SiblingParachain';
   }
 
-  /** @name PalletEthereumRawOrigin (349) */
+  /** @name PalletEthereumRawOrigin (352) */
   export interface PalletEthereumRawOrigin extends Enum {
     readonly isEthereumTransaction: boolean;
     readonly asEthereumTransaction: H160;
     readonly type: 'EthereumTransaction';
   }
 
-  /** @name SpCoreVoid (350) */
+  /** @name SpCoreVoid (353) */
   export type SpCoreVoid = Null;
 
-  /** @name PalletUnqSchedulerError (351) */
-  export interface PalletUnqSchedulerError extends Enum {
+  /** @name PalletUniqueSchedulerError (354) */
+  export interface PalletUniqueSchedulerError extends Enum {
     readonly isFailedToSchedule: boolean;
     readonly isNotFound: boolean;
     readonly isTargetBlockNumberInPast: boolean;
@@ -2873,7 +2885,7 @@
     readonly type: 'FailedToSchedule' | 'NotFound' | 'TargetBlockNumberInPast' | 'RescheduleNoChange';
   }
 
-  /** @name UpDataStructsCollection (352) */
+  /** @name UpDataStructsCollection (355) */
   export interface UpDataStructsCollection extends Struct {
     readonly owner: AccountId32;
     readonly mode: UpDataStructsCollectionMode;
@@ -2886,7 +2898,7 @@
     readonly externalCollection: bool;
   }
 
-  /** @name UpDataStructsSponsorshipState (353) */
+  /** @name UpDataStructsSponsorshipState (356) */
   export interface UpDataStructsSponsorshipState extends Enum {
     readonly isDisabled: boolean;
     readonly isUnconfirmed: boolean;
@@ -2896,42 +2908,42 @@
     readonly type: 'Disabled' | 'Unconfirmed' | 'Confirmed';
   }
 
-  /** @name UpDataStructsProperties (354) */
+  /** @name UpDataStructsProperties (357) */
   export interface UpDataStructsProperties extends Struct {
     readonly map: UpDataStructsPropertiesMapBoundedVec;
     readonly consumedSpace: u32;
     readonly spaceLimit: u32;
   }
 
-  /** @name UpDataStructsPropertiesMapBoundedVec (355) */
+  /** @name UpDataStructsPropertiesMapBoundedVec (358) */
   export interface UpDataStructsPropertiesMapBoundedVec extends BTreeMap<Bytes, Bytes> {}
 
-  /** @name UpDataStructsPropertiesMapPropertyPermission (360) */
+  /** @name UpDataStructsPropertiesMapPropertyPermission (363) */
   export interface UpDataStructsPropertiesMapPropertyPermission extends BTreeMap<Bytes, UpDataStructsPropertyPermission> {}
 
-  /** @name UpDataStructsCollectionStats (367) */
+  /** @name UpDataStructsCollectionStats (370) */
   export interface UpDataStructsCollectionStats extends Struct {
     readonly created: u32;
     readonly destroyed: u32;
     readonly alive: u32;
   }
 
-  /** @name UpDataStructsTokenChild (368) */
+  /** @name UpDataStructsTokenChild (371) */
   export interface UpDataStructsTokenChild extends Struct {
     readonly token: u32;
     readonly collection: u32;
   }
 
-  /** @name PhantomTypeUpDataStructs (369) */
+  /** @name PhantomTypeUpDataStructs (372) */
   export interface PhantomTypeUpDataStructs extends Vec<ITuple<[UpDataStructsTokenData, UpDataStructsRpcCollection, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftNftInfo, RmrkTraitsResourceResourceInfo, RmrkTraitsPropertyPropertyInfo, RmrkTraitsBaseBaseInfo, RmrkTraitsPartPartType, RmrkTraitsTheme, RmrkTraitsNftNftChild]>> {}
 
-  /** @name UpDataStructsTokenData (371) */
+  /** @name UpDataStructsTokenData (374) */
   export interface UpDataStructsTokenData extends Struct {
     readonly properties: Vec<UpDataStructsProperty>;
     readonly owner: Option<PalletEvmAccountBasicCrossAccountIdRepr>;
   }
 
-  /** @name UpDataStructsRpcCollection (373) */
+  /** @name UpDataStructsRpcCollection (376) */
   export interface UpDataStructsRpcCollection extends Struct {
     readonly owner: AccountId32;
     readonly mode: UpDataStructsCollectionMode;
@@ -2946,7 +2958,7 @@
     readonly readOnly: bool;
   }
 
-  /** @name RmrkTraitsCollectionCollectionInfo (374) */
+  /** @name RmrkTraitsCollectionCollectionInfo (377) */
   export interface RmrkTraitsCollectionCollectionInfo extends Struct {
     readonly issuer: AccountId32;
     readonly metadata: Bytes;
@@ -2955,7 +2967,7 @@
     readonly nftsCount: u32;
   }
 
-  /** @name RmrkTraitsNftNftInfo (375) */
+  /** @name RmrkTraitsNftNftInfo (378) */
   export interface RmrkTraitsNftNftInfo extends Struct {
     readonly owner: RmrkTraitsNftAccountIdOrCollectionNftTuple;
     readonly royalty: Option<RmrkTraitsNftRoyaltyInfo>;
@@ -2964,13 +2976,13 @@
     readonly pending: bool;
   }
 
-  /** @name RmrkTraitsNftRoyaltyInfo (377) */
+  /** @name RmrkTraitsNftRoyaltyInfo (380) */
   export interface RmrkTraitsNftRoyaltyInfo extends Struct {
     readonly recipient: AccountId32;
     readonly amount: Permill;
   }
 
-  /** @name RmrkTraitsResourceResourceInfo (378) */
+  /** @name RmrkTraitsResourceResourceInfo (381) */
   export interface RmrkTraitsResourceResourceInfo extends Struct {
     readonly id: u32;
     readonly resource: RmrkTraitsResourceResourceTypes;
@@ -2978,37 +2990,26 @@
     readonly pendingRemoval: bool;
   }
 
-  /** @name RmrkTraitsResourceResourceTypes (379) */
-  export interface RmrkTraitsResourceResourceTypes extends Enum {
-    readonly isBasic: boolean;
-    readonly asBasic: RmrkTraitsResourceBasicResource;
-    readonly isComposable: boolean;
-    readonly asComposable: RmrkTraitsResourceComposableResource;
-    readonly isSlot: boolean;
-    readonly asSlot: RmrkTraitsResourceSlotResource;
-    readonly type: 'Basic' | 'Composable' | 'Slot';
-  }
-
-  /** @name RmrkTraitsPropertyPropertyInfo (380) */
+  /** @name RmrkTraitsPropertyPropertyInfo (382) */
   export interface RmrkTraitsPropertyPropertyInfo extends Struct {
     readonly key: Bytes;
     readonly value: Bytes;
   }
 
-  /** @name RmrkTraitsBaseBaseInfo (381) */
+  /** @name RmrkTraitsBaseBaseInfo (383) */
   export interface RmrkTraitsBaseBaseInfo extends Struct {
     readonly issuer: AccountId32;
     readonly baseType: Bytes;
     readonly symbol: Bytes;
   }
 
-  /** @name RmrkTraitsNftNftChild (382) */
+  /** @name RmrkTraitsNftNftChild (384) */
   export interface RmrkTraitsNftNftChild extends Struct {
     readonly collectionId: u32;
     readonly nftId: u32;
   }
 
-  /** @name PalletCommonError (384) */
+  /** @name PalletCommonError (386) */
   export interface PalletCommonError extends Enum {
     readonly isCollectionNotFound: boolean;
     readonly isMustBeTokenOwner: boolean;
@@ -3047,7 +3048,7 @@
     readonly type: 'CollectionNotFound' | 'MustBeTokenOwner' | 'NoPermission' | 'CantDestroyNotEmptyCollection' | 'PublicMintingNotAllowed' | 'AddressNotInAllowlist' | 'CollectionNameLimitExceeded' | 'CollectionDescriptionLimitExceeded' | 'CollectionTokenPrefixLimitExceeded' | 'TotalCollectionsLimitExceeded' | 'CollectionAdminCountExceeded' | 'CollectionLimitBoundsExceeded' | 'OwnerPermissionsCantBeReverted' | 'TransferNotAllowed' | 'AccountTokenLimitExceeded' | 'CollectionTokenLimitExceeded' | 'MetadataFlagFrozen' | 'TokenNotFound' | 'TokenValueTooLow' | 'ApprovedValueTooLow' | 'CantApproveMoreThanOwned' | 'AddressIsZero' | 'UnsupportedOperation' | 'NotSufficientFounds' | 'UserIsNotAllowedToNest' | 'SourceCollectionIsNotAllowedToNest' | 'CollectionFieldSizeExceeded' | 'NoSpaceForProperty' | 'PropertyLimitReached' | 'PropertyKeyIsTooLong' | 'InvalidCharacterInPropertyKey' | 'EmptyPropertyKey' | 'CollectionIsExternal' | 'CollectionIsInternal';
   }
 
-  /** @name PalletFungibleError (386) */
+  /** @name PalletFungibleError (388) */
   export interface PalletFungibleError extends Enum {
     readonly isNotFungibleDataUsedToMintFungibleCollectionToken: boolean;
     readonly isFungibleItemsHaveNoId: boolean;
@@ -3057,12 +3058,12 @@
     readonly type: 'NotFungibleDataUsedToMintFungibleCollectionToken' | 'FungibleItemsHaveNoId' | 'FungibleItemsDontHaveData' | 'FungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';
   }
 
-  /** @name PalletRefungibleItemData (387) */
+  /** @name PalletRefungibleItemData (389) */
   export interface PalletRefungibleItemData extends Struct {
     readonly constData: Bytes;
   }
 
-  /** @name PalletRefungibleError (391) */
+  /** @name PalletRefungibleError (393) */
   export interface PalletRefungibleError extends Enum {
     readonly isNotRefungibleDataUsedToMintFungibleCollectionToken: boolean;
     readonly isWrongRefungiblePieces: boolean;
@@ -3071,12 +3072,12 @@
     readonly type: 'NotRefungibleDataUsedToMintFungibleCollectionToken' | 'WrongRefungiblePieces' | 'RefungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';
   }
 
-  /** @name PalletNonfungibleItemData (392) */
+  /** @name PalletNonfungibleItemData (394) */
   export interface PalletNonfungibleItemData extends Struct {
     readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;
   }
 
-  /** @name PalletNonfungibleError (394) */
+  /** @name PalletNonfungibleError (396) */
   export interface PalletNonfungibleError extends Enum {
     readonly isNotNonfungibleDataUsedToMintFungibleCollectionToken: boolean;
     readonly isNonfungibleItemsHaveNoAmount: boolean;
@@ -3084,7 +3085,7 @@
     readonly type: 'NotNonfungibleDataUsedToMintFungibleCollectionToken' | 'NonfungibleItemsHaveNoAmount' | 'CantBurnNftWithChildren';
   }
 
-  /** @name PalletStructureError (395) */
+  /** @name PalletStructureError (397) */
   export interface PalletStructureError extends Enum {
     readonly isOuroborosDetected: boolean;
     readonly isDepthLimit: boolean;
@@ -3093,12 +3094,13 @@
     readonly type: 'OuroborosDetected' | 'DepthLimit' | 'BreadthLimit' | 'TokenNotFound';
   }
 
-  /** @name PalletRmrkCoreError (396) */
+  /** @name PalletRmrkCoreError (398) */
   export interface PalletRmrkCoreError extends Enum {
     readonly isCorruptedCollectionType: boolean;
     readonly isNftTypeEncodeError: boolean;
     readonly isRmrkPropertyKeyIsTooLong: boolean;
     readonly isRmrkPropertyValueIsTooLong: boolean;
+    readonly isUnableToDecodeRmrkData: boolean;
     readonly isCollectionNotEmpty: boolean;
     readonly isNoAvailableCollectionId: boolean;
     readonly isNoAvailableNftId: boolean;
@@ -3111,10 +3113,10 @@
     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 PalletRmrkEquipError (398) */
+  /** @name PalletRmrkEquipError (400) */
   export interface PalletRmrkEquipError extends Enum {
     readonly isPermissionError: boolean;
     readonly isNoAvailableBaseId: boolean;
@@ -3124,7 +3126,7 @@
     readonly type: 'PermissionError' | 'NoAvailableBaseId' | 'NoAvailablePartId' | 'BaseDoesntExist' | 'NeedsDefaultThemeFirst';
   }
 
-  /** @name PalletEvmError (401) */
+  /** @name PalletEvmError (403) */
   export interface PalletEvmError extends Enum {
     readonly isBalanceLow: boolean;
     readonly isFeeOverflow: boolean;
@@ -3135,7 +3137,7 @@
     readonly type: 'BalanceLow' | 'FeeOverflow' | 'PaymentOverflow' | 'WithdrawFailed' | 'GasPriceTooLow' | 'InvalidNonce';
   }
 
-  /** @name FpRpcTransactionStatus (404) */
+  /** @name FpRpcTransactionStatus (406) */
   export interface FpRpcTransactionStatus extends Struct {
     readonly transactionHash: H256;
     readonly transactionIndex: u32;
@@ -3146,10 +3148,10 @@
     readonly logsBloom: EthbloomBloom;
   }
 
-  /** @name EthbloomBloom (406) */
+  /** @name EthbloomBloom (408) */
   export interface EthbloomBloom extends U8aFixed {}
 
-  /** @name EthereumReceiptReceiptV3 (408) */
+  /** @name EthereumReceiptReceiptV3 (410) */
   export interface EthereumReceiptReceiptV3 extends Enum {
     readonly isLegacy: boolean;
     readonly asLegacy: EthereumReceiptEip658ReceiptData;
@@ -3160,7 +3162,7 @@
     readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';
   }
 
-  /** @name EthereumReceiptEip658ReceiptData (409) */
+  /** @name EthereumReceiptEip658ReceiptData (411) */
   export interface EthereumReceiptEip658ReceiptData extends Struct {
     readonly statusCode: u8;
     readonly usedGas: U256;
@@ -3168,14 +3170,14 @@
     readonly logs: Vec<EthereumLog>;
   }
 
-  /** @name EthereumBlock (410) */
+  /** @name EthereumBlock (412) */
   export interface EthereumBlock extends Struct {
     readonly header: EthereumHeader;
     readonly transactions: Vec<EthereumTransactionTransactionV2>;
     readonly ommers: Vec<EthereumHeader>;
   }
 
-  /** @name EthereumHeader (411) */
+  /** @name EthereumHeader (413) */
   export interface EthereumHeader extends Struct {
     readonly parentHash: H256;
     readonly ommersHash: H256;
@@ -3194,24 +3196,24 @@
     readonly nonce: EthereumTypesHashH64;
   }
 
-  /** @name EthereumTypesHashH64 (412) */
+  /** @name EthereumTypesHashH64 (414) */
   export interface EthereumTypesHashH64 extends U8aFixed {}
 
-  /** @name PalletEthereumError (417) */
+  /** @name PalletEthereumError (419) */
   export interface PalletEthereumError extends Enum {
     readonly isInvalidSignature: boolean;
     readonly isPreLogExists: boolean;
     readonly type: 'InvalidSignature' | 'PreLogExists';
   }
 
-  /** @name PalletEvmCoderSubstrateError (418) */
+  /** @name PalletEvmCoderSubstrateError (420) */
   export interface PalletEvmCoderSubstrateError extends Enum {
     readonly isOutOfGas: boolean;
     readonly isOutOfFund: boolean;
     readonly type: 'OutOfGas' | 'OutOfFund';
   }
 
-  /** @name PalletEvmContractHelpersSponsoringModeT (419) */
+  /** @name PalletEvmContractHelpersSponsoringModeT (421) */
   export interface PalletEvmContractHelpersSponsoringModeT extends Enum {
     readonly isDisabled: boolean;
     readonly isAllowlisted: boolean;
@@ -3219,20 +3221,20 @@
     readonly type: 'Disabled' | 'Allowlisted' | 'Generous';
   }
 
-  /** @name PalletEvmContractHelpersError (421) */
+  /** @name PalletEvmContractHelpersError (423) */
   export interface PalletEvmContractHelpersError extends Enum {
     readonly isNoPermission: boolean;
     readonly type: 'NoPermission';
   }
 
-  /** @name PalletEvmMigrationError (422) */
+  /** @name PalletEvmMigrationError (424) */
   export interface PalletEvmMigrationError extends Enum {
     readonly isAccountNotEmpty: boolean;
     readonly isAccountIsNotMigrating: boolean;
     readonly type: 'AccountNotEmpty' | 'AccountIsNotMigrating';
   }
 
-  /** @name SpRuntimeMultiSignature (424) */
+  /** @name SpRuntimeMultiSignature (426) */
   export interface SpRuntimeMultiSignature extends Enum {
     readonly isEd25519: boolean;
     readonly asEd25519: SpCoreEd25519Signature;
@@ -3243,34 +3245,34 @@
     readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa';
   }
 
-  /** @name SpCoreEd25519Signature (425) */
+  /** @name SpCoreEd25519Signature (427) */
   export interface SpCoreEd25519Signature extends U8aFixed {}
 
-  /** @name SpCoreSr25519Signature (427) */
+  /** @name SpCoreSr25519Signature (429) */
   export interface SpCoreSr25519Signature extends U8aFixed {}
 
-  /** @name SpCoreEcdsaSignature (428) */
+  /** @name SpCoreEcdsaSignature (430) */
   export interface SpCoreEcdsaSignature extends U8aFixed {}
 
-  /** @name FrameSystemExtensionsCheckSpecVersion (431) */
+  /** @name FrameSystemExtensionsCheckSpecVersion (433) */
   export type FrameSystemExtensionsCheckSpecVersion = Null;
 
-  /** @name FrameSystemExtensionsCheckGenesis (432) */
+  /** @name FrameSystemExtensionsCheckGenesis (434) */
   export type FrameSystemExtensionsCheckGenesis = Null;
 
-  /** @name FrameSystemExtensionsCheckNonce (435) */
+  /** @name FrameSystemExtensionsCheckNonce (437) */
   export interface FrameSystemExtensionsCheckNonce extends Compact<u32> {}
 
-  /** @name FrameSystemExtensionsCheckWeight (436) */
+  /** @name FrameSystemExtensionsCheckWeight (438) */
   export type FrameSystemExtensionsCheckWeight = Null;
 
-  /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (437) */
+  /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (439) */
   export interface PalletTemplateTransactionPaymentChargeTransactionPayment extends Compact<u128> {}
 
-  /** @name OpalRuntimeRuntime (438) */
+  /** @name OpalRuntimeRuntime (440) */
   export type OpalRuntimeRuntime = Null;
 
-  /** @name PalletEthereumFakeTransactionFinalizer (439) */
+  /** @name PalletEthereumFakeTransactionFinalizer (441) */
   export type PalletEthereumFakeTransactionFinalizer = Null;
 
 } // 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